From 3d68bbc0ca74b3cc08e518680fbcb244c02cedb0 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 8 Nov 2025 09:11:38 -0600 Subject: [PATCH 001/657] Fix #7287: to correctly position IfcAnnotation on RCP's. --- src/bonsai/bonsai/tool/drawing.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index a53272b408..1de010694a 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -1969,7 +1969,8 @@ class Drawing(bonsai.core.tool.Drawing): @classmethod def get_default_annotation_matrix(cls, camera, matrix_world=None): if matrix_world is None: - matrix_world = camera.matrix_world.copy() + # Use normalized camera matrix (without scale) for RCP compatibility + matrix_world = cls.get_camera_matrix(camera) annotation_offset = Vector((0, 0, -camera.data.clip_start - 0.05)) annotation_offset = camera.matrix_world.to_quaternion() @ annotation_offset matrix_world.translation += annotation_offset From a2dbdbf8ccb740e76c9e9295560930b38c818bda Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 8 Nov 2025 10:41:43 -0600 Subject: [PATCH 002/657] Fix #7274: Add unique CSS class suffix to all selectors in sheet drawings Previously, when multiple CSS selectors were comma-separated in a rule, only the last selector received the unique drawing ID suffix. This caused style conflicts when multiple drawings were placed on the same sheet. Now all selectors in comma-separated lists receive the unique suffix, ensuring proper style isolation between drawings. Example: Before: .cut.Status-DEMOLISH, .cut.Option-D.d2156 { ... } After: .cut.Status-DEMOLISH.d2156, .cut.Option-D.d2156 { ... } --- .../bonsai/bim/module/drawing/sheeter.py | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/sheeter.py b/src/bonsai/bonsai/bim/module/drawing/sheeter.py index 15ac314e8b..a3ec74159a 100644 --- a/src/bonsai/bonsai/bim/module/drawing/sheeter.py +++ b/src/bonsai/bonsai/bim/module/drawing/sheeter.py @@ -341,17 +341,29 @@ class SheetBuilder: assert style_data is not None text = "" brackets_level = 0 + selector_buffer = "" # Buffer to accumulate selectors across lines + for l in style_data: if l == "{": if brackets_level == 0: - cur_line = text.splitlines()[-1] - text = text[: -len(cur_line)] + # Get all accumulated selector text (may span multiple lines) + # Find where the last rule ended (after last }) or start of text + last_close = text.rfind("}") + if last_close == -1: + selector_text = text + text = "" + else: + selector_text = text[last_close + 1 :] + text = text[: last_close + 1] + + # Process all selectors (split by comma) css_selectors = [] - # making sure cases like "text, tspan" will be - # converted to "text.prefix, tspan.prefix" - for css_selector in cur_line.split(","): - css_selector = f"{css_selector.strip()}.{prefix}" - css_selectors.append(css_selector) + for css_selector in selector_text.split(","): + css_selector = css_selector.strip() + if css_selector: # Only process non-empty selectors + css_selector = f"{css_selector}.{prefix}" + css_selectors.append(css_selector) + text += ", ".join(css_selectors) + " " brackets_level += 1 elif l == "}": From 83e0fa128799468c92ec8a216aa6380516a8c1ba Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sat, 8 Nov 2025 17:38:56 +0000 Subject: [PATCH 003/657] Bump python bindings maximum python version Python 3.14 is now a thing and the build seems ok --- src/ifcopenshell-python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/pyproject.toml b/src/ifcopenshell-python/pyproject.toml index 652b1fcdab..08f8c433fc 100644 --- a/src/ifcopenshell-python/pyproject.toml +++ b/src/ifcopenshell-python/pyproject.toml @@ -10,7 +10,7 @@ authors = [ ] description = "Python bindings, utility functions, and high-level API for IfcOpenShell" readme = "README.md" -requires-python = ">=3.9,<3.14" +requires-python = ">=3.9,<3.15" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", From 5a511eecc1691b80167745dce08bebb1d69eec34 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 8 Nov 2025 12:46:33 -0600 Subject: [PATCH 004/657] Fix #4014: Unassign annotation from all products before reassignment The edit_assigned_product() function now removes the annotation from all existing IfcRelAssignsToProduct relationships instead of just one, preventing annotations from being incorrectly assigned to multiple products simultaneously. This fixes issues where leader lines wouldn't update correctly because the annotation retained old product assignments. --- src/bonsai/bonsai/core/drawing.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index d769079acc..4a378a7e73 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -60,10 +60,21 @@ def edit_assigned_product( ) -> None: element = ifc.get_entity(obj) assert element - existing_product = drawing.get_assigned_product(element) - if existing_product != product: - if existing_product: + + # Get ALL existing products, not just one + existing_products = [] + if hasattr(element, 'HasAssignments'): + for rel in element.HasAssignments: + if rel.is_a('IfcRelAssignsToProduct'): + existing_products.append(rel.RelatingProduct) + + # Only proceed if the assignment is different + if not (len(existing_products) == 1 and existing_products[0] == product): + # Unassign from ALL existing products + for existing_product in existing_products: ifc.run("drawing.unassign_product", relating_product=existing_product, related_object=element) + + # Assign to the new product if product: ifc.run("drawing.assign_product", relating_product=product, related_object=element) From ed2b2de79a742872114fd376d7ad63b537b12c72 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro <79401028+maxfb87@users.noreply.github.com> Date: Sat, 8 Nov 2025 20:00:35 +0100 Subject: [PATCH 005/657] Add profiler in ifcopenshell util and ifc5d quantify function time Useful for quantify function optimization --- src/bonsai/bonsai/bim/module/qto/operator.py | 7 ++-- .../ifcopenshell/util/profiler.py | 34 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/ifcopenshell-python/ifcopenshell/util/profiler.py diff --git a/src/bonsai/bonsai/bim/module/qto/operator.py b/src/bonsai/bonsai/bim/module/qto/operator.py index eb2ccda282..c8d32b5829 100644 --- a/src/bonsai/bonsai/bim/module/qto/operator.py +++ b/src/bonsai/bonsai/bim/module/qto/operator.py @@ -22,6 +22,7 @@ import ifcopenshell.api import bonsai.tool as tool import bonsai.core.qto as core from bonsai.bim.module.qto import helper +from ifcopenshell.util.profiler import Profiler class CalculateCircleRadius(bpy.types.Operator): @@ -148,7 +149,8 @@ class CalculateSingleQuantity(bpy.types.Operator, tool.Ifc.Operator): } ifc_file = tool.Ifc.get() - results = ifc5d.qto.quantify(ifc_file, elements, rules) + with(Profiler("Quantify function time:")): + results = ifc5d.qto.quantify(ifc_file, elements, rules) ifc5d.qto.edit_qtos(ifc_file, results) not_quantified_elements = elements - set(results.keys()) @@ -190,7 +192,8 @@ class PerformQuantityTakeOff(bpy.types.Operator, tool.Ifc.Operator): ) -> set[ifcopenshell.entity_instance]: rules = ifc5d.qto.rules[rule] ifc_file = tool.Ifc.get() - results = ifc5d.qto.quantify(ifc_file, elements, rules) + with(Profiler("Quantify function time:")): + results = ifc5d.qto.quantify(ifc_file, elements, rules) ifc5d.qto.edit_qtos(ifc_file, results) not_quantified_elements = elements - set(results.keys()) return not_quantified_elements diff --git a/src/ifcopenshell-python/ifcopenshell/util/profiler.py b/src/ifcopenshell-python/ifcopenshell/util/profiler.py new file mode 100644 index 0000000000..aabfe37977 --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/util/profiler.py @@ -0,0 +1,34 @@ +# 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 . + + +from timeit import default_timer as timer + +class Profiler: + """ + A python context manager timing utility, useful for measure functions performances + """ + + def __init__(self, task): + self.task = task + + def __enter__(self): + self.start = timer() + + def __exit__(self, *args): + print(f"{self.task} {timer() - self.start:.6f} s") From 593e0e28a9deb8b8a917adce8725125b2c8638a2 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 8 Nov 2025 16:35:46 -0600 Subject: [PATCH 006/657] fix #4189: local_view turns off/on text decorations, as well as cut decorator. --- src/bonsai/bonsai/bim/module/drawing/decoration.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index f6db70462f..470bccf8ad 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -1641,6 +1641,13 @@ class CutDecorator: if not context.scene.camera: return + # Check if any viewport is in local view - skip decorations if so + for area in context.screen.areas: + if area.type == 'VIEW_3D': + space = area.spaces.active + if isinstance(space, bpy.types.SpaceView3D) and space.local_view: + return # Don't draw decorations in local view + self.addon_prefs = tool.Blender.get_addon_preferences() selected_elements_color = self.addon_prefs.decorator_color_selected self.fallback_colour = (0.3, 0.3, 0.3, 1) @@ -1986,6 +1993,13 @@ class DecorationsHandler: decorator.font_id = font_id def __call__(self, context): + # Check if any viewport is in local view - skip decorations if so + for area in context.screen.areas: + if area.type == 'VIEW_3D': + space = area.spaces.active + if isinstance(space, bpy.types.SpaceView3D) and space.local_view: + return # Don't draw decorations in local view + if not DrawingsData.is_loaded: DrawingsData.load() From 7a5bd03216a5cbc2ba340f73db67840d87c62ec7 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 9 Nov 2025 13:45:09 -0600 Subject: [PATCH 007/657] Close #7220: Duplicate multiple selected Linked Aggregates at one time --- .../bonsai/bim/module/geometry/operator.py | 132 ++++++++++-------- 1 file changed, 76 insertions(+), 56 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 248fc9c948..34faa89428 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1204,7 +1204,6 @@ class DuplicateMoveLinkedAggregateMacro(bpy.types.Macro): bl_label = "IFC Duplicate and Move Linked Aggregate" bl_options = {"REGISTER", "UNDO"} - class DuplicateMoveLinkedAggregate(bpy.types.Operator): bl_idname = "bim.object_duplicate_move_linked_aggregate" bl_label = "IFC Duplicate and Move Linked Aggregate" @@ -1227,7 +1226,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): self.new_active_obj = None self.group_name = "BBIM_Linked_Aggregate" self.pset_name = "BBIM_Linked_Aggregate" - old_to_new = {} + all_old_to_new = {} # Track all duplicates created def select_objects_and_add_data(element): add_linked_aggregate_group(element) @@ -1243,8 +1242,6 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): select_objects_and_add_data(part) else: index = add_linked_aggregate_pset(part, index) - # index += 1 - obj = tool.Ifc.get_object(part) obj.select_set(True) @@ -1257,17 +1254,12 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): if not pset: pset = ifcopenshell.api.pset.add_pset(ifc_file, product=element, name=self.pset_name) - ifcopenshell.api.pset.edit_pset( ifc_file, pset=pset, properties=properties, ) - index += 1 - else: - pass - return index def add_linked_aggregate_group(element): @@ -1286,22 +1278,20 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): def custom_incremental_naming_for_element_assembly(old_to_new): for new in old_to_new.values(): if new[0].is_a("IfcElementAssembly"): - group_elements: list[ifcopenshell.entity_instance] = next( + group_elements = next( r.RelatedObjects for r in getattr(new[0], "HasAssignments", []) or [] if r.is_a("IfcRelAssignsToGroup") if "BBIM_Linked_Aggregate" in r.RelatingGroup.Name ) - pset = ifcopenshell.util.element.get_pset(new[0], "BBIM_Linked_Aggregate") new_obj = tool.Ifc.get_object(new[0]) new_obj.name = pset["Name"] + "_" + str(pset["Aggregate_Index"]) def get_max_index(parts): - psets = [ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate") for p in parts] - index = [i["Index"] for i in psets if i] - if len(index) > 0: - index = max(index) + psets = [ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate") for p in parts if ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate")] + if psets: + index = max([i["Index"] for i in psets if i]) return index else: return 0 @@ -1315,23 +1305,24 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): if r.is_a("IfcRelAssignsToGroup") if "BBIM_Linked_Aggregate" in r.RelatingGroup.Name ] - ifcopenshell.api.group.assign_group(ifc_file, group=linked_aggregate_group[0], products=new) - - group_elements: list[ifcopenshell.entity_instance] = next( - r.RelatedObjects - for r in getattr(new[0], "HasAssignments", []) or [] - if r.is_a("IfcRelAssignsToGroup") - if "BBIM_Linked_Aggregate" in r.RelatingGroup.Name - ) + if linked_aggregate_group: + ifcopenshell.api.group.assign_group(ifc_file, group=linked_aggregate_group[0], products=new) pset = ifcopenshell.util.element.get_pset(old, "BBIM_Linked_Aggregate") if pset: new_pset = ifcopenshell.api.pset.add_pset(ifc_file, product=new[0], name=self.pset_name) if pset["Index"] == 0: + group_elements = [] + if new[0].is_a("IfcElementAssembly"): + group_elements = next( + (r.RelatedObjects for r in getattr(new[0], "HasAssignments", []) or [] + if r.is_a("IfcRelAssignsToGroup") and "BBIM_Linked_Aggregate" in r.RelatingGroup.Name), + [] + ) properties = { "Index": pset["Index"], "Name": pset["Name"], - "Aggregate_Index": len(group_elements) - 1, + "Aggregate_Index": len(group_elements) - 1 if group_elements else 0, } else: properties = {"Index": pset["Index"]} @@ -1351,44 +1342,73 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): location_diff = new_obj.location - base_obj_location new_obj.location = context.scene.cursor.location + location_diff - if len(context.selected_objects) != 1: + # Process multiple selected aggregates + selected_aggregates = [] + for obj in context.selected_objects: + selected_element = tool.Ifc.get_entity(obj) + if not selected_element: + continue + + # Find the aggregate element + if selected_element.is_a("IfcElementAssembly"): + selected_aggregates.append(selected_element) + elif selected_element.Decomposes: + if selected_element.Decomposes[0].RelatingObject.is_a("IfcElementAssembly"): + selected_aggregates.append(selected_element.Decomposes[0].RelatingObject) + + # Remove duplicates + selected_aggregates = list(set(selected_aggregates)) + + if not selected_aggregates: + self.report({"INFO"}, "No Linked Aggregates selected.") return {"FINISHED"} - selected_obj = context.selected_objects[0] - selected_element = tool.Ifc.get_entity(selected_obj) - assert selected_element - - if selected_element.is_a("IfcElementAssembly"): - pass - elif selected_element.Decomposes: - if selected_element.Decomposes[0].RelatingObject.is_a("IfcElementAssembly"): - selected_element = selected_element.Decomposes[0].RelatingObject - selected_obj = tool.Ifc.get_object(selected_element) - else: - self.report({"INFO"}, "Object is not part of a IfcElementAssembly.") - return {"FINISHED"} - - select_objects_and_add_data(selected_element) - - old_to_new = OverrideDuplicateMove.execute_ifc_duplicate_operator(self, context, linked=True) - - tool.Root.recreate_aggregate(old_to_new) - - copy_linked_aggregate_data(old_to_new) - - custom_incremental_naming_for_element_assembly(old_to_new) - - if location_from_3d_cursor: - get_location_from_3d_cursor(old_to_new, selected_element) - + # Deselect all first bpy.ops.object.select_all(action="DESELECT") - new_aggregate = old_to_new[selected_element][0] - tool.Blender.set_active_object(tool.Ifc.get_object(new_aggregate)) + + # Process each selected aggregate + for aggregate in selected_aggregates: + aggregate_obj = tool.Ifc.get_object(aggregate) + + # Select and prepare the aggregate for duplication + select_objects_and_add_data(aggregate) + + # Duplicate the aggregate + old_to_new = OverrideDuplicateMove.execute_ifc_duplicate_operator(self, context, linked=True) + all_old_to_new.update(old_to_new) # Collect all duplicates + + # Recreate aggregate structure + tool.Root.recreate_aggregate(old_to_new) + + # Copy linked aggregate data + copy_linked_aggregate_data(old_to_new) + + # Apply custom naming + custom_incremental_naming_for_element_assembly(old_to_new) + + # Apply 3D cursor location if requested + if location_from_3d_cursor: + get_location_from_3d_cursor(old_to_new, aggregate) + + # Deselect for next iteration + bpy.ops.object.select_all(action="DESELECT") + + # Select all newly created aggregates + for aggregate in selected_aggregates: + if aggregate in all_old_to_new: + new_aggregate = all_old_to_new[aggregate][0] + new_aggregate_obj = tool.Ifc.get_object(new_aggregate) + if new_aggregate_obj: + new_aggregate_obj.select_set(True) + + # Set active object to the first new aggregate + if all_old_to_new: + first_new_aggregate = list(all_old_to_new.values())[0][0] + context.view_layer.objects.active = tool.Ifc.get_object(first_new_aggregate) bonsai.bim.handler.refresh_ui_data() - return old_to_new - + return all_old_to_new class DuplicateLinkedAggregateTo3dCursor(bpy.types.Operator): bl_idname = "bim.duplicate_linked_aggregate_to_3d_cursor" From ad62c75f4f4e2f3e35ea945de0cf99e502d53992 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sun, 9 Nov 2025 20:52:12 +0000 Subject: [PATCH 008/657] ifcclash ifccsv ifcdiff ifcpatch: README.md stubs The pyproject.toml files were referencing these missing files --- src/ifcclash/README.md | 11 +++++++ src/ifccsv/README.md | 12 ++++++++ src/ifcdiff/README.md | 19 ++++++++++++ src/ifcdiff/pyproject.toml | 2 +- src/ifcpatch/README.md | 59 +++++++++++++++++++++++++++++++++++++ src/ifcpatch/pyproject.toml | 2 +- 6 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 src/ifcclash/README.md create mode 100644 src/ifccsv/README.md create mode 100644 src/ifcdiff/README.md create mode 100644 src/ifcpatch/README.md diff --git a/src/ifcclash/README.md b/src/ifcclash/README.md new file mode 100644 index 0000000000..1a779c152e --- /dev/null +++ b/src/ifcclash/README.md @@ -0,0 +1,11 @@ +# IfcClash + +IFC clash detection library to handle intersections, collisions, and clearance checks between building elements in IFC models. + +## Features + +- **Multiple detection modes**: intersection, collision, and clearance checking +- **Flexible clash sets**: Compare elements within a single model or between multiple IFC files +- **Smart grouping**: Automatically group related clashes +- **Export options**: Export clash results to BCF-XML or JSON formats +- **Element filtering**: Use selectors to specify which elements to check for clashes diff --git a/src/ifccsv/README.md b/src/ifccsv/README.md new file mode 100644 index 0000000000..0b8395f963 --- /dev/null +++ b/src/ifccsv/README.md @@ -0,0 +1,12 @@ +# IfcCSV + +A utility to interact with IFC data through CSV. Export and import IFC data from and to CSV, ODS, XLSX formats, and pandas DataFrames. Enables bulk editing of IFC properties and schedules using spreadsheet tools. + +## Features + +- **Export IFC data**: Extract element properties and attributes to spreadsheet formats +- **Import changes**: Update IFC models from modified spreadsheets +- **Multiple formats**: Support for CSV, ODS (OpenDocument Spreadsheet), XLSX (Excel), and pandas DataFrames +- **Flexible queries**: Use selectors to specify which elements and attributes to export +- **Data transformations**: Group, summarize, format, and sort results +- **Preserve existing data**: Update existing spreadsheets while preserving formatting diff --git a/src/ifcdiff/README.md b/src/ifcdiff/README.md new file mode 100644 index 0000000000..93091c2c23 --- /dev/null +++ b/src/ifcdiff/README.md @@ -0,0 +1,19 @@ +# IfcDiff + +Compare IFC models for changes to geometry, properties, and structure. Compares the differences between two IFC models, including changes to geometry, properties, relationships, and spatial structure. Outputs differences in JSON format for further processing or reporting. + +## Features + +- **Element tracking**: Identify added and deleted elements between models +- **Relationship comparison**: Track changes in multiple relationship types: + - Geometry + - Attributes + - Type assignments + - Properties + - Spatial containers + - Aggregations + - Classifications +- **Flexible filtering**: Compare only specific element types using IFC selectors +- **Configurable depth**: Choose between shallow (first difference only) or deep (all differences) comparison +- **JSON export**: Export comparison results in JSON format for further processing +- **Precision control**: Configure geometric comparison precision diff --git a/src/ifcdiff/pyproject.toml b/src/ifcdiff/pyproject.toml index 128df11763..b23b6718e8 100644 --- a/src/ifcdiff/pyproject.toml +++ b/src/ifcdiff/pyproject.toml @@ -8,7 +8,7 @@ version = "0.0.0" authors = [ { name="Dion Moult", email="dion@thinkmoult.com" }, ] -description = "Compares the differences between two IFC models" +description = "Compare IFC models for changes to geometry, properties, and structure" readme = "README.md" keywords = ["IFC", "Diff"] classifiers = [ diff --git a/src/ifcpatch/README.md b/src/ifcpatch/README.md new file mode 100644 index 0000000000..ca490d4424 --- /dev/null +++ b/src/ifcpatch/README.md @@ -0,0 +1,59 @@ +# IfcPatch + +Utility for applying modification recipes to IFC files. IfcPatch enables programmatic editing and correction of IFC models through a collection of patches that can fix common issues, migrate data, or transform models. + +## Available Recipes + +### Alignment and Linear Placement +- **AddGeometricRepresentationToAlignment** - Add geometric representations to alignment elements +- **AddLinearPlacementFallbackPosition** - Add fallback positions for linear placements +- **AddZeroLengthSegmentToAlignment** - Add zero-length segments to alignments +- **PatchStationReferentPosition** - Patch station referent positions + +### Data Conversion and Migration +- **AGS2IFC** - Convert AGS (geotechnical) data to IFC +- **ConvertLengthUnit** - Convert between length units +- **ConvertNestToAggregate** - Convert nesting relationships to aggregations +- **ConvertPropertiesToQuantities** - Convert properties to quantities +- **Migrate** - Migrate between IFC schema versions + +### Element Extraction and Manipulation +- **ExtractElements** - Extract specific elements into a new model +- **ExtractPropertiesToSQLite** - Export properties to SQLite database +- **Ifc2Sql** - Convert IFC to SQL database +- **TessellateElements** - Tessellate elements into triangulated geometry + +### Fixing Software-Specific Issues +- **FixArchiCADToRevitDoorSwings** - Fix door swing orientation from ArchiCAD for Revit +- **FixArchiCADToRevitSpaces** - Fix space data from ArchiCAD for Revit +- **FixRevit2025TINs** - Fix TIN (Triangulated Irregular Network) issues from Revit 2025 +- **FixRevitClassificationCodeTypes** - Fix classification code data types from Revit +- **FixRevitTINs** - Fix TIN issues from Revit + +### Geometry and Representation +- **AssignConstituentFractions** - Assign fractions to material constituents +- **DowngradeIndexedPolyCurve** - Convert indexed poly curves to simpler representations +- **RemoveSiteRepresentation** - Remove geometric representation from site elements + +### Merging and Optimization +- **MergeDuplicateTypes** - Merge duplicate element types +- **MergeProjects** - Merge multiple IFC projects +- **MergeStyles** - Merge duplicate styles +- **Optimise** - Optimize file size and structure +- **PurgeData** - Remove unused data from model + +### Spatial and Coordinate Systems +- **OffsetObjectPlacements** - Offset object placement coordinates +- **OffsetStoreyElevations** - Offset storey elevations +- **ResetAbsoluteCoordinates** - Reset absolute coordinates to origin +- **ResetSpatialElementLocations** - Reset spatial element locations +- **SetFalseOrigin** - Set a false origin for coordinates +- **SetRefElevation** - Set reference elevation +- **SetWorldCoordinateSystem** - Set world coordinate system +- **SplitByBuildingStorey** - Split model by building storeys + +### Utilities +- **RecycleNonRootedElements** - Remove or recycle non-rooted elements +- **RegenerateGlobalIds** - Regenerate GlobalId values for elements +- **RemoveRevitUniformatClassification** - Remove Revit Uniformat classification +- **UnsharePsets** - Unshare property sets between elements diff --git a/src/ifcpatch/pyproject.toml b/src/ifcpatch/pyproject.toml index 5d43201a25..72ec9ca3f0 100644 --- a/src/ifcpatch/pyproject.toml +++ b/src/ifcpatch/pyproject.toml @@ -8,7 +8,7 @@ version = "0.0.0" authors = [ { name="Dion Moult", email="dion@thinkmoult.com" }, ] -description = "IFC patching utility" +description = "Utility for applying modification recipes to IFC files" readme = "README.md" keywords = ["IFC", "BIM"] classifiers = [ From 5d56025014b4412910ae16fbd5a0324b05818f02 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sun, 9 Nov 2025 08:26:33 +0100 Subject: [PATCH 009/657] cmake: Separate ifcparse build in its own CMakeLists.txt file --- cmake/CMakeLists.txt | 60 ++--------------------------------- src/ifcparse/CMakeLists.txt | 62 +++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 58 deletions(-) create mode 100644 src/ifcparse/CMakeLists.txt diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 149be34461..0deeb512fe 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -262,7 +262,7 @@ if(WITH_CGAL) else() set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}") endif() - find_package(CGAL REQUIRED) + find_package(CGAL REQUIRED) if(NOT CGAL_DIR) message( FATAL_ERROR @@ -957,6 +957,7 @@ if(NOT Boost_VERSION LESS 105800) add_definitions(-DBOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE) endif() +add_subdirectory(../src/ifcparse ifcparse) set(IFCOPENSHELL_LIBRARIES IfcParse) if(BUILD_IFCGEOM) @@ -989,52 +990,6 @@ if(BUILD_CONVERT OR BUILD_IFCPYTHON) endif() endif() -# IfcParse -file(GLOB IFCPARSE_H_FILES_ALL ../src/ifcparse/*.h) -file(GLOB IFCPARSE_CPP_FILES_ALL ../src/ifcparse/*.cpp) - -foreach(file ${IFCPARSE_H_FILES_ALL}) - get_filename_component(filename "${file}" NAME) - - if(NOT "${filename}" MATCHES "[0-9]") - list(APPEND IFCPARSE_H_FILES "${file}") - endif() -endforeach() - -foreach(file ${IFCPARSE_CPP_FILES_ALL}) - get_filename_component(filename "${file}" NAME) - - if(NOT "${filename}" MATCHES "[0-9]") - list(APPEND IFCPARSE_CPP_FILES "${file}") - endif() -endforeach() - -foreach(schema ${SCHEMA_VERSIONS}) - list(APPEND IFCPARSE_H_FILES - ../src/ifcparse/Ifc${schema}.h - ../src/ifcparse/Ifc${schema}-definitions.h - ) - list(APPEND IFCPARSE_CPP_FILES - ../src/ifcparse/Ifc${schema}.cpp - ../src/ifcparse/Ifc${schema}-schema.cpp - ) -endforeach() - -set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES}) - -add_library(IfcParse ${IFCPARSE_FILES}) -target_link_libraries(IfcParse ${STDCPPFS}) -set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") - -if(LibXml2_DIR) - target_compile_definitions(IfcParse PRIVATE ${LIBXML2_DEFINITIONS}) -endif() -if(WASM_BUILD) - target_link_libraries(IfcParse ${BCRYPT_LIBRARIES} ${LIBXML2_LIBRARIES}) -else() - target_link_libraries(IfcParse ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} ${LIBXML2_LIBRARIES}) -endif() - if(BUILD_IFCGEOM) # CGAL::CGAL target already has dependencies resolved. if(WITH_CGAL AND CGAL_DIR) @@ -1325,17 +1280,6 @@ if(BUILD_QTVIEWER) add_subdirectory(../src/qtviewer qtviewer) endif() -# CMake installation targets -install(FILES ${IFCPARSE_H_FILES} - DESTINATION ${INCLUDEDIR}/ifcparse -) - -install(TARGETS IfcParse - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} -) - if(BUILD_IFCGEOM) # install(FILES ${IFCGEOM_H_FILES} # DESTINATION ${INCLUDEDIR}/ifcgeom diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt new file mode 100644 index 0000000000..dd1f47eea6 --- /dev/null +++ b/src/ifcparse/CMakeLists.txt @@ -0,0 +1,62 @@ +file(GLOB IFCPARSE_H_FILES_ALL *.h) +file(GLOB IFCPARSE_CPP_FILES_ALL *.cpp) + +foreach(file ${IFCPARSE_H_FILES_ALL}) + get_filename_component(filename "${file}" NAME) + + if(NOT "${filename}" MATCHES "[0-9]") + list(APPEND IFCPARSE_H_FILES "${file}") + endif() +endforeach() + +foreach(file ${IFCPARSE_CPP_FILES_ALL}) + get_filename_component(filename "${file}" NAME) + + if(NOT "${filename}" MATCHES "[0-9]") + list(APPEND IFCPARSE_CPP_FILES "${file}") + endif() +endforeach() + +message(STATUS "SCHEMA_VERSIONS from ifcparse: ${SCHEMA_VERSIONS}") +foreach(schema ${SCHEMA_VERSIONS}) + list(APPEND IFCPARSE_H_FILES + Ifc${schema}.h + Ifc${schema}-definitions.h + ) + list(APPEND IFCPARSE_CPP_FILES + Ifc${schema}.cpp + Ifc${schema}-schema.cpp + ) +endforeach() + +set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES}) + +add_library(IfcParse ${IFCPARSE_FILES}) +set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") + +if(IFCXML_SUPPORT) + + if(LibXml2_DIR) + target_compile_definitions(IfcParse PRIVATE ${LIBXML2_DEFINITIONS}) + endif() + + add_definitions(-DWITH_IFCXML) + target_link_libraries(IfcParse LibXml2::LibXml2) +endif() + +if(WASM_BUILD) + target_link_libraries(IfcParse ${BCRYPT_LIBRARIES}) +else() + target_link_libraries(IfcParse ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES}) +endif() + +# CMake installation targets +install(FILES ${IFCPARSE_H_FILES} + DESTINATION ${INCLUDEDIR}/ifcparse +) + +install(TARGETS IfcParse + ARCHIVE DESTINATION ${LIBDIR} + LIBRARY DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} +) From 9c5f3f97546c91da98391a9acd09b603597bcef6 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 09:51:38 +0100 Subject: [PATCH 010/657] Disable GMPXX in CGAL build #7330 --- nix/build-all.py | 1 + 1 file changed, 1 insertion(+) diff --git a/nix/build-all.py b/nix/build-all.py index 631f8edf81..2cb785883f 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1237,6 +1237,7 @@ if "cgal" in targets: f"-DMPFR_INCLUDE_DIR={DEPS_DIR}/install/mpfr-{MPFR_VERSION}/include", f"-DBoost_INCLUDE_DIR={DEPS_DIR}/install/boost-{BOOST_VERSION}", f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/cgal-{CGAL_VERSION}/", + f"-WITH_GMPXX=Off", f"-DCGAL_HEADER_ONLY=On", f"-DBUILD_SHARED_LIBS=Off", ], From 77a7026d33c386d096f6aa33f800f75ee478734f Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 10:15:14 +0100 Subject: [PATCH 011/657] Disable GMPXX in CGAL build #733 --- nix/build-all.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/build-all.py b/nix/build-all.py index 2cb785883f..f008b8f940 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1237,7 +1237,7 @@ if "cgal" in targets: f"-DMPFR_INCLUDE_DIR={DEPS_DIR}/install/mpfr-{MPFR_VERSION}/include", f"-DBoost_INCLUDE_DIR={DEPS_DIR}/install/boost-{BOOST_VERSION}", f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/cgal-{CGAL_VERSION}/", - f"-WITH_GMPXX=Off", + f"-DWITH_GMPXX=Off", f"-DCGAL_HEADER_ONLY=On", f"-DBUILD_SHARED_LIBS=Off", ], From 31b5f884975d02628622cae8dc4c055968a08509 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 10:33:48 +0100 Subject: [PATCH 012/657] Rename WITH_GMPXX to CGAL_WITH_GMPXX in build script #7330 --- nix/build-all.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/build-all.py b/nix/build-all.py index f008b8f940..188fa7557c 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1237,7 +1237,7 @@ if "cgal" in targets: f"-DMPFR_INCLUDE_DIR={DEPS_DIR}/install/mpfr-{MPFR_VERSION}/include", f"-DBoost_INCLUDE_DIR={DEPS_DIR}/install/boost-{BOOST_VERSION}", f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/cgal-{CGAL_VERSION}/", - f"-DWITH_GMPXX=Off", + f"-DCGAL_WITH_GMPXX=Off", f"-DCGAL_HEADER_ONLY=On", f"-DBUILD_SHARED_LIBS=Off", ], From abd667684d9c1c0319a57469af92801e9ccbc99e Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 10:48:24 +0100 Subject: [PATCH 013/657] Supply CGAL_WITH_GMPXX to ifcopenshell configure #7330 --- nix/build-all.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/build-all.py b/nix/build-all.py index 188fa7557c..0cf0010e7e 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1237,7 +1237,6 @@ if "cgal" in targets: f"-DMPFR_INCLUDE_DIR={DEPS_DIR}/install/mpfr-{MPFR_VERSION}/include", f"-DBoost_INCLUDE_DIR={DEPS_DIR}/install/boost-{BOOST_VERSION}", f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/cgal-{CGAL_VERSION}/", - f"-DCGAL_WITH_GMPXX=Off", f"-DCGAL_HEADER_ONLY=On", f"-DBUILD_SHARED_LIBS=Off", ], @@ -1379,6 +1378,7 @@ if "cgal" in targets: cmake_args_prefix_path.append(f"{DEPS_DIR}/install/cgal-{CGAL_VERSION}") cmake_args_prefix_path.append(f"{DEPS_DIR}/install/gmp-{GMP_VERSION}") cmake_args_prefix_path.append(f"{DEPS_DIR}/install/mpfr-{MPFR_VERSION}") + cmake_args.append(f"-DCGAL_WITH_GMPXX=Off") if "occ" in targets and USE_OCCT: cmake_args_prefix_path.append(f"{DEPS_DIR}/install/occt-{OCCT_VERSION}") From 2c5f0c6cf27832dff11893da7409ad46c6c3135b Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 11:16:27 +0100 Subject: [PATCH 014/657] Add Linux ARM 64bit to CI workflow #7325 --- .github/workflows/ci-ifcopenshell-python-pypi.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci-ifcopenshell-python-pypi.yml b/.github/workflows/ci-ifcopenshell-python-pypi.yml index 7d7cf44d3c..813d780f70 100644 --- a/.github/workflows/ci-ifcopenshell-python-pypi.yml +++ b/.github/workflows/ci-ifcopenshell-python-pypi.yml @@ -34,6 +34,10 @@ jobs: name: "Linux 64bit", short_name: linux64 } + - { + name: "Linux ARM 64bit", + short_name: linuxarm64 + } - { name: "MacOS Intel 64bit", short_name: macos64 From dceb35782ef7d2ea1a949dd99d38c060fafb8336 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 11:17:24 +0100 Subject: [PATCH 015/657] Add platform tag for linuxarm64 in Makefile #7325 --- src/ifcopenshell-python/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ifcopenshell-python/Makefile b/src/ifcopenshell-python/Makefile index 0810ad0181..c3565072b9 100644 --- a/src/ifcopenshell-python/Makefile +++ b/src/ifcopenshell-python/Makefile @@ -55,6 +55,9 @@ endif ifeq ($(PLATFORM), linux64) PLATFORMTAG:=manylinux_2_31_x86_64 endif +ifeq ($(PLATFORM), linuxarm64) +PLATFORMTAG:=manylinux_2_31_aarch64 +endif ifeq ($(PLATFORM), macos64) PLATFORMTAG:=macosx_10_15_x86_64 endif From 8d8133e780ce70cf836dd46fc3fa3d523b4c33a3 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 11:45:05 +0100 Subject: [PATCH 016/657] submodule --- src/svgfill | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/svgfill b/src/svgfill index 801703453d..ba09c29b81 160000 --- a/src/svgfill +++ b/src/svgfill @@ -1 +1 @@ -Subproject commit 801703453d89d313c2f387da5731d97fb908daf2 +Subproject commit ba09c29b81325c27d77cd41be84d7e84c9c06f5b From 05e81040ce12d0ea51f8feabab107e825822caaa Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 11:53:33 +0100 Subject: [PATCH 017/657] black --- .../bonsai/bim/module/drawing/decoration.py | 4 +- .../bonsai/bim/module/geometry/operator.py | 38 ++++++++++++------- src/bonsai/bonsai/bim/module/qto/operator.py | 4 +- src/bonsai/bonsai/core/drawing.py | 10 ++--- .../ifcopenshell/util/profiler.py | 1 + 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 470bccf8ad..6251cf1c87 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -1643,7 +1643,7 @@ class CutDecorator: # Check if any viewport is in local view - skip decorations if so for area in context.screen.areas: - if area.type == 'VIEW_3D': + if area.type == "VIEW_3D": space = area.spaces.active if isinstance(space, bpy.types.SpaceView3D) and space.local_view: return # Don't draw decorations in local view @@ -1995,7 +1995,7 @@ class DecorationsHandler: def __call__(self, context): # Check if any viewport is in local view - skip decorations if so for area in context.screen.areas: - if area.type == 'VIEW_3D': + if area.type == "VIEW_3D": space = area.spaces.active if isinstance(space, bpy.types.SpaceView3D) and space.local_view: return # Don't draw decorations in local view diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 34faa89428..17d57c8d56 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1204,6 +1204,7 @@ class DuplicateMoveLinkedAggregateMacro(bpy.types.Macro): bl_label = "IFC Duplicate and Move Linked Aggregate" bl_options = {"REGISTER", "UNDO"} + class DuplicateMoveLinkedAggregate(bpy.types.Operator): bl_idname = "bim.object_duplicate_move_linked_aggregate" bl_label = "IFC Duplicate and Move Linked Aggregate" @@ -1289,7 +1290,11 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): new_obj.name = pset["Name"] + "_" + str(pset["Aggregate_Index"]) def get_max_index(parts): - psets = [ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate") for p in parts if ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate")] + psets = [ + ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate") + for p in parts + if ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate") + ] if psets: index = max([i["Index"] for i in psets if i]) return index @@ -1315,9 +1320,13 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): group_elements = [] if new[0].is_a("IfcElementAssembly"): group_elements = next( - (r.RelatedObjects for r in getattr(new[0], "HasAssignments", []) or [] - if r.is_a("IfcRelAssignsToGroup") and "BBIM_Linked_Aggregate" in r.RelatingGroup.Name), - [] + ( + r.RelatedObjects + for r in getattr(new[0], "HasAssignments", []) or [] + if r.is_a("IfcRelAssignsToGroup") + and "BBIM_Linked_Aggregate" in r.RelatingGroup.Name + ), + [], ) properties = { "Index": pset["Index"], @@ -1355,41 +1364,41 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): elif selected_element.Decomposes: if selected_element.Decomposes[0].RelatingObject.is_a("IfcElementAssembly"): selected_aggregates.append(selected_element.Decomposes[0].RelatingObject) - + # Remove duplicates selected_aggregates = list(set(selected_aggregates)) - + if not selected_aggregates: self.report({"INFO"}, "No Linked Aggregates selected.") return {"FINISHED"} # Deselect all first bpy.ops.object.select_all(action="DESELECT") - + # Process each selected aggregate for aggregate in selected_aggregates: aggregate_obj = tool.Ifc.get_object(aggregate) - + # Select and prepare the aggregate for duplication select_objects_and_add_data(aggregate) - + # Duplicate the aggregate old_to_new = OverrideDuplicateMove.execute_ifc_duplicate_operator(self, context, linked=True) all_old_to_new.update(old_to_new) # Collect all duplicates - + # Recreate aggregate structure tool.Root.recreate_aggregate(old_to_new) - + # Copy linked aggregate data copy_linked_aggregate_data(old_to_new) - + # Apply custom naming custom_incremental_naming_for_element_assembly(old_to_new) - + # Apply 3D cursor location if requested if location_from_3d_cursor: get_location_from_3d_cursor(old_to_new, aggregate) - + # Deselect for next iteration bpy.ops.object.select_all(action="DESELECT") @@ -1410,6 +1419,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): return all_old_to_new + class DuplicateLinkedAggregateTo3dCursor(bpy.types.Operator): bl_idname = "bim.duplicate_linked_aggregate_to_3d_cursor" bl_label = "IFC Duplicate Linked Aggregate to 3d Cursor" diff --git a/src/bonsai/bonsai/bim/module/qto/operator.py b/src/bonsai/bonsai/bim/module/qto/operator.py index c8d32b5829..47b0f5059a 100644 --- a/src/bonsai/bonsai/bim/module/qto/operator.py +++ b/src/bonsai/bonsai/bim/module/qto/operator.py @@ -149,7 +149,7 @@ class CalculateSingleQuantity(bpy.types.Operator, tool.Ifc.Operator): } ifc_file = tool.Ifc.get() - with(Profiler("Quantify function time:")): + with Profiler("Quantify function time:"): results = ifc5d.qto.quantify(ifc_file, elements, rules) ifc5d.qto.edit_qtos(ifc_file, results) @@ -192,7 +192,7 @@ class PerformQuantityTakeOff(bpy.types.Operator, tool.Ifc.Operator): ) -> set[ifcopenshell.entity_instance]: rules = ifc5d.qto.rules[rule] ifc_file = tool.Ifc.get() - with(Profiler("Quantify function time:")): + with Profiler("Quantify function time:"): results = ifc5d.qto.quantify(ifc_file, elements, rules) ifc5d.qto.edit_qtos(ifc_file, results) not_quantified_elements = elements - set(results.keys()) diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index 4a378a7e73..88c12295fa 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -60,20 +60,20 @@ def edit_assigned_product( ) -> None: element = ifc.get_entity(obj) assert element - + # Get ALL existing products, not just one existing_products = [] - if hasattr(element, 'HasAssignments'): + if hasattr(element, "HasAssignments"): for rel in element.HasAssignments: - if rel.is_a('IfcRelAssignsToProduct'): + if rel.is_a("IfcRelAssignsToProduct"): existing_products.append(rel.RelatingProduct) - + # Only proceed if the assignment is different if not (len(existing_products) == 1 and existing_products[0] == product): # Unassign from ALL existing products for existing_product in existing_products: ifc.run("drawing.unassign_product", relating_product=existing_product, related_object=element) - + # Assign to the new product if product: ifc.run("drawing.assign_product", relating_product=product, related_object=element) diff --git a/src/ifcopenshell-python/ifcopenshell/util/profiler.py b/src/ifcopenshell-python/ifcopenshell/util/profiler.py index aabfe37977..2228a54a6a 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/profiler.py +++ b/src/ifcopenshell-python/ifcopenshell/util/profiler.py @@ -19,6 +19,7 @@ from timeit import default_timer as timer + class Profiler: """ A python context manager timing utility, useful for measure functions performances From f056e22f60b577f1becfc86e6c748c2209195f17 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 10 Nov 2025 11:59:10 +0100 Subject: [PATCH 018/657] ruff --- src/bonsai/bonsai/bim/module/geometry/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 17d57c8d56..cd871e834a 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1412,7 +1412,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): # Set active object to the first new aggregate if all_old_to_new: - first_new_aggregate = list(all_old_to_new.values())[0][0] + first_new_aggregate = next(iter(all_old_to_new.values()))[0] context.view_layer.objects.active = tool.Ifc.get_object(first_new_aggregate) bonsai.bim.handler.refresh_ui_data() From 8a4ea432393393b47d6c030eeffb90a37d7d4441 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 11:59:25 +0500 Subject: [PATCH 019/657] Blender 5.0 - fix error activating drawing styles Some props were removed in Blender 5.0 --- .../bim/data/assets/shading_styles.json | 33 ------------------- .../bonsai/bim/module/drawing/operator.py | 24 +++++++++++++- 2 files changed, 23 insertions(+), 34 deletions(-) diff --git a/src/bonsai/bonsai/bim/data/assets/shading_styles.json b/src/bonsai/bonsai/bim/data/assets/shading_styles.json index 602b8a652e..c37f0b27bc 100644 --- a/src/bonsai/bonsai/bim/data/assets/shading_styles.json +++ b/src/bonsai/bonsai/bim/data/assets/shading_styles.json @@ -7,12 +7,6 @@ 1.0, 1.0 ], - "scene.render.bake_bias": 0.0010000000474974513, - "scene.render.bake_margin": 16, - "scene.render.bake_margin_type": "ADJACENT_FACES", - "scene.render.bake_samples": 256, - "scene.render.bake_type": "NORMALS", - "scene.render.bake_user_scale": 0.0, "scene.render.border_max_x": 1.0, "scene.render.border_max_y": 1.0, "scene.render.border_min_x": 0.0, @@ -54,11 +48,6 @@ "scene.render.stamp_note_text": "", "scene.render.threads": 20, "scene.render.threads_mode": "AUTO", - "scene.render.use_bake_clear": true, - "scene.render.use_bake_lores_mesh": false, - "scene.render.use_bake_multires": false, - "scene.render.use_bake_selected_to_active": false, - "scene.render.use_bake_user_scale": false, "scene.render.use_border": false, "scene.render.use_compositing": true, "scene.render.use_crop_to_border": false, @@ -253,12 +242,6 @@ 1.0, 1.0 ], - "scene.render.bake_bias": 0.0010000000474974513, - "scene.render.bake_margin": 16, - "scene.render.bake_margin_type": "ADJACENT_FACES", - "scene.render.bake_samples": 256, - "scene.render.bake_type": "NORMALS", - "scene.render.bake_user_scale": 0.0, "scene.render.border_max_x": 1.0, "scene.render.border_max_y": 1.0, "scene.render.border_min_x": 0.0, @@ -300,11 +283,6 @@ "scene.render.stamp_note_text": "", "scene.render.threads": 20, "scene.render.threads_mode": "AUTO", - "scene.render.use_bake_clear": true, - "scene.render.use_bake_lores_mesh": false, - "scene.render.use_bake_multires": false, - "scene.render.use_bake_selected_to_active": false, - "scene.render.use_bake_user_scale": false, "scene.render.use_border": false, "scene.render.use_compositing": true, "scene.render.use_crop_to_border": false, @@ -503,12 +481,6 @@ "scene.eevee.shadow_ray_count": 1, "scene.eevee.shadow_step_count": 6, "scene.eevee.shadow_resolution_scale": 1.0, - "scene.render.bake_bias": 0.0010000000474974513, - "scene.render.bake_margin": 16, - "scene.render.bake_margin_type": "ADJACENT_FACES", - "scene.render.bake_samples": 256, - "scene.render.bake_type": "NORMALS", - "scene.render.bake_user_scale": 0.0, "scene.render.border_max_x": 1.0, "scene.render.border_max_y": 1.0, "scene.render.border_min_x": 0.0, @@ -550,11 +522,6 @@ "scene.render.stamp_note_text": "", "scene.render.threads": 20, "scene.render.threads_mode": "AUTO", - "scene.render.use_bake_clear": true, - "scene.render.use_bake_lores_mesh": false, - "scene.render.use_bake_multires": false, - "scene.render.use_bake_selected_to_active": false, - "scene.render.use_bake_user_scale": false, "scene.render.use_border": false, "scene.render.use_compositing": true, "scene.render.use_crop_to_border": false, diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index d1f0bb872e..6c98169c06 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -2706,6 +2706,21 @@ class ActivateDrawingStyle(bpy.types.Operator, tool.Ifc.Operator): def preprocess(path: str, value: Any) -> tuple[str, Any, bool, bool]: warning = False skip = False + + BLENDER_5_REMOVED = ( + "scene.render.bake_bias", + "scene.render.bake_margin", + "scene.render.bake_margin_type", + "scene.render.bake_samples", + "scene.render.bake_type", + "scene.render.bake_user_scale", + "scene.render.use_bake_clear", + "scene.render.use_bake_lores_mesh", + "scene.render.use_bake_multires", + "scene.render.use_bake_selected_to_active", + "scene.render.use_bake_user_scale", + ) + # 25.11.07, Blender 5+ if path == "scene.render.engine" and value in ("BLENDER_EEVEE", "BLENDER_EEVEE_NEXT"): if value == "BLENDER_EEVEE_NEXT": @@ -2715,8 +2730,15 @@ class ActivateDrawingStyle(bpy.types.Operator, tool.Ifc.Operator): ) warning = True value = tool.Blender.get_eevee_name() + elif tool.Blender.BLENDER_5 and path in BLENDER_5_REMOVED: + print( + f"Warning: Property '{path}' is removed " + "since Blender 5.0 and should be also removed from shading_styles.json." + ) + warning = True + skip = True # @25.05.12 - if path == "scene.display.shading.wireframe_color_type" and value == "MATERIAL": + elif path == "scene.display.shading.wireframe_color_type" and value == "MATERIAL": value = "THEME" print( f"Warning: Value 'MATERIAL' is outdated for property '{path}' " From c4eb77d5442574ff1a918d40ce057daefcd739e3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 12:02:17 +0500 Subject: [PATCH 020/657] Blender 5.0 - update shadint_styles eevee name --- src/bonsai/bonsai/bim/data/assets/shading_styles.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/data/assets/shading_styles.json b/src/bonsai/bonsai/bim/data/assets/shading_styles.json index c37f0b27bc..e4daf97124 100644 --- a/src/bonsai/bonsai/bim/data/assets/shading_styles.json +++ b/src/bonsai/bonsai/bim/data/assets/shading_styles.json @@ -486,7 +486,7 @@ "scene.render.border_min_x": 0.0, "scene.render.border_min_y": 0.0, "scene.render.dither_intensity": 1.0, - "scene.render.engine": "BLENDER_EEVEE_NEXT", + "scene.render.engine": "BLENDER_EEVEE", "scene.render.film_transparent": false, "scene.render.filter_size": 1.5, "scene.render.fps": 24, From 77f5e1fbad0daad5df9ced6e5e0fb7d9613756c3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 12:28:11 +0500 Subject: [PATCH 021/657] PanelSpy - add typing --- src/bonsai/test/bim/test_feature.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index aae89f9c76..c23f363de7 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from __future__ import annotations import os import bpy import pytest @@ -60,7 +61,7 @@ class PanelSpy: self.is_spy_dirty = True self.panel = panel - def refresh_spy(self): + def refresh_spy(self) -> None: if self.is_spy_dirty: self.is_spy_dirty = False self.spied_attr: Union[str, None] = None @@ -70,17 +71,19 @@ class PanelSpy: self.spied_lists: list[dict[str, Any]] = [] self.panel.draw(self, bpy.context) - def __getattr__(self, attr): + def __getattr__(self, attr: str) -> PanelSpy | Any: self.spied_attr = attr if annotation := self.panel.__annotations__.get(attr, None): return annotation.keywords.get("default", None) # An operator property if attr == "layout": return self - if hasattr(self.panel, attr) and not callable(getattr(self.panel, attr)): - return getattr(self.panel, attr) + sentinel = object() + attr_value = getattr(self.panel, attr, sentinel) + if attr_value is not sentinel and not callable(attr_value): + return attr_value return self - def __call__(self, *args, **kwargs): + def __call__(self, *args: Any, **kwargs: Any) -> PanelSpy | TemplateListSpy | OperatorSpy | Any: if self.spied_attr in ("row", "column", "box", "separator", "menu", "operator_menu_enum", "split"): return self elif self.spied_attr == "template_list": @@ -154,10 +157,10 @@ class PanelSpy: class OperatorSpy: - def __init__(self, spied_data): + def __init__(self, spied_data: dict[str, Any]): self.spied_data = spied_data - def __setattr__(self, name, value): + def __setattr__(self, name: str, value: Any) -> None: if name == "spied_data": # Allow direct setting of spied_data only during initialization super().__setattr__(name, value) @@ -166,7 +169,7 @@ class OperatorSpy: class TemplateListSpy(PanelSpy): - def __init__(self, template_list: type[bpy.types.UIList], spied_data: dict) -> None: + def __init__(self, template_list: type[bpy.types.UIList], spied_data: dict[str, Any]): self.spied_data = spied_data self.items = getattr(self.spied_data["dataptr"], self.spied_data["propname"]) self.active_index = getattr(self.spied_data["active_dataptr"], self.spied_data["active_propname"]) @@ -176,7 +179,7 @@ class TemplateListSpy(PanelSpy): self.active_item = None self.panel = template_list - self.rows = [] + self.rows: list[TemplateListItemSpy] = [] for item in self.items: self.rows.append(TemplateListItemSpy(self, item)) @@ -222,7 +225,8 @@ class TemplateListItemSpy(PanelSpy): ) -ui_name_cache = {} +ui_name_cache: dict[str, str] = {} +"""Mapping of UI panel names to their bl_idnames (e.g. `xxx` in `bpy.types.xxx`).""" panel_spy: Union[PanelSpy, None] = None From 4009834b9767d658372f3ac05d812d7ef5d148a7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 12:32:17 +0500 Subject: [PATCH 022/657] PanelSpy - rename `panel` attr to `blender_panel` to avoid conflicts with `panel` method Also added support for `panel` method. --- src/bonsai/test/bim/test_feature.py | 31 +++++++++++++++++------------ 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index c23f363de7..a47deafff2 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -57,9 +57,9 @@ tool.Bsdd.client = test.bim.stub.bSDDClientStub() class PanelSpy: - def __init__(self, panel: type[bpy.types.Panel]): + def __init__(self, blender_panel: type[bpy.types.Panel]): self.is_spy_dirty = True - self.panel = panel + self.blender_panel = blender_panel def refresh_spy(self) -> None: if self.is_spy_dirty: @@ -69,16 +69,16 @@ class PanelSpy: self.spied_props: list[dict[str, Any]] = [] self.spied_operators: list[dict[str, Any]] = [] self.spied_lists: list[dict[str, Any]] = [] - self.panel.draw(self, bpy.context) + self.blender_panel.draw(self, bpy.context) def __getattr__(self, attr: str) -> PanelSpy | Any: self.spied_attr = attr - if annotation := self.panel.__annotations__.get(attr, None): + if annotation := self.blender_panel.__annotations__.get(attr, None): return annotation.keywords.get("default", None) # An operator property if attr == "layout": return self sentinel = object() - attr_value = getattr(self.panel, attr, sentinel) + attr_value = getattr(self.blender_panel, attr, sentinel) if attr_value is not sentinel and not callable(attr_value): return attr_value return self @@ -152,8 +152,13 @@ class PanelSpy: spied_operator = {"operator": operator, "icon": icon, "text": text, "kwargs": {}, "after": after} self.spied_operators.append(spied_operator) return OperatorSpy(spied_operator) + elif self.spied_attr == "panel": + default_closed = kwargs.get("default_closed", False) + header = self + panel = None if default_closed else self + return header, panel else: - getattr(self.panel, self.spied_attr)(self, *args, **kwargs) + getattr(self.blender_panel, self.spied_attr)(self, *args, **kwargs) class OperatorSpy: @@ -177,7 +182,7 @@ class TemplateListSpy(PanelSpy): self.active_item = self.items[self.active_index] except: self.active_item = None - self.panel = template_list + self.blender_panel = template_list self.rows: list[TemplateListItemSpy] = [] for item in self.items: @@ -194,13 +199,13 @@ class TemplateListSpy(PanelSpy): class TemplateListItemSpy(PanelSpy): def __init__(self, parent: TemplateListSpy, item): - self.panel = parent.panel + self.blender_panel = blender_panel = parent.blender_panel self.spied_attr: Union[str, None] = None self.spied_labels: list[str] = [] self.spied_props: list[dict[str, Any]] = [] self.spied_operators: list[dict[str, Any]] = [] - if len(signature(parent.panel.draw_item).parameters) == 8: - parent.panel.draw_item( + if len(signature(blender_panel.draw_item).parameters) == 8: + blender_panel.draw_item( self, bpy.context, self, @@ -211,7 +216,7 @@ class TemplateListItemSpy(PanelSpy): parent.spied_data["active_propname"], ) else: - parent.panel.draw_item( + blender_panel.draw_item( self, bpy.context, self, @@ -770,9 +775,9 @@ def _i_click_button_on_panel(button, panel_spy): setattr(spied_prop["props"], spied_prop["name"], not bool(val)) panel_spy.is_spy_dirty = True return - if button == "OK" and panel_spy.panel.bl_rna.base.name == "Operator": + if button == "OK" and panel_spy.blender_panel.bl_rna.base.name == "Operator": # Clicked confirm on an operator's draw dialog - return i_press_operator(panel_spy.panel.bl_idname) + return i_press_operator(panel_spy.blender_panel.bl_idname) debug = "\n".join([f"{i} {v}" for i, v in enumerate(panel_spy.spied_operators)]) debug += f"\nHere is the text we see:\n{panel_spy.spied_labels}\n... and props:\n {panel_spy.spied_props}" assert False, f"Could not find {button}:\n{debug}" From e1bf891ec66546a51e0b6b4704b754ca7c752850 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 15:53:49 +0500 Subject: [PATCH 023/657] PanelSpy - also support `draw_header` for panels --- src/bonsai/test/bim/test_feature.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index a47deafff2..07d669aaa0 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -69,6 +69,8 @@ class PanelSpy: self.spied_props: list[dict[str, Any]] = [] self.spied_operators: list[dict[str, Any]] = [] self.spied_lists: list[dict[str, Any]] = [] + if hasattr(self.blender_panel, "draw_header"): + self.blender_panel.draw_header(self, bpy.context) self.blender_panel.draw(self, bpy.context) def __getattr__(self, attr: str) -> PanelSpy | Any: From 19bdd3e622c3eed962b47d05448a78e4a05a454b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 15:53:24 +0500 Subject: [PATCH 024/657] i_set_the_prop_property_to_value - don't fail silently on incorrect bool values --- src/bonsai/test/bim/test_feature.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 07d669aaa0..3bd861f31a 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -549,6 +549,8 @@ def i_set_the_prop_property_to_value(prop: str, value: str): """ :param prop: Could be either property name, property text, property icon or property index (e.g. "1st", "2nd", "5th"). + :param value: + For boolean propeties - 'TRUE' or 'FALSE'. """ value = value.strip() assert panel_spy @@ -566,6 +568,8 @@ def i_set_the_prop_property_to_value(prop: str, value: str): setattr(spied_prop["props"], spied_prop["name"], True) elif value == "FALSE": setattr(spied_prop["props"], spied_prop["name"], False) + else: + assert False, f"Unexpected value for BOOLEAN property: '{value}'. Allowed values: TRUE, FALSE." elif spied_prop["prop_type"] == "FLOAT": setattr(spied_prop["props"], spied_prop["name"], float(value)) elif spied_prop["prop_type"] == "INT": From a7bf0e7d5ece8ec25fe0ce912f9fc656e98c9758 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 12:47:20 +0500 Subject: [PATCH 025/657] Fix remove drawing feature test (f11d79f) --- src/bonsai/test/bim/feature/drawing.feature | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bonsai/test/bim/feature/drawing.feature b/src/bonsai/test/bim/feature/drawing.feature index 7a4d59c9d5..a982582c00 100644 --- a/src/bonsai/test/bim/feature/drawing.feature +++ b/src/bonsai/test/bim/feature/drawing.feature @@ -149,6 +149,7 @@ Scenario: Remove drawing And I click "ADD" And I press "bim.toggle_target_view(option="EXPAND", target_view='PLAN_VIEW')" And I select the "PLAN_VIEW" item in the "BIM_UL_drawinglist" list + And the variable "drawing" is "IfcStore.get_file().by_type('IfcAnnotation')[0].id()" When I click "VIEW_CAMERA_UNSELECTED" in the row where I see "PLAN_VIEW" in the "1st" list Then the collection "IfcAnnotation/PLAN_VIEW" exists When I press "bim.remove_drawing(drawing={drawing})" From dd2f091a52b6c867348a0b70e040f95fb0e2de72 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 13:43:03 +0500 Subject: [PATCH 026/657] `object.delete` and `outliner.delete` overrides to reuse original poll methods for consistency --- .../bonsai/bim/module/geometry/operator.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index cd871e834a..d7d3bd720c 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -809,9 +809,17 @@ class OverrideDelete(bpy.types.Operator): @classmethod def poll(cls, context): - return len(context.selected_objects) > 0 + # Match `object.delete` poll for consistency. + # `object.delete` poll just checks for OBJECT mode. + poll = bpy.ops.object.delete.poll() + if poll: + return True + cls.poll_message_set("Only available in OBJECT mode") + return False def execute(self, context): + if not context.selected_objects: + return {"FINISHED"} # Deep magick from the dawn of time if tool.Ifc.get() is None: bpy.ops.object.delete(use_global=self.use_global, confirm=self.confirm) @@ -823,6 +831,8 @@ class OverrideDelete(bpy.types.Operator): return IfcStore.execute_ifc_operator(self, context) def invoke(self, context, event): + if not context.selected_objects: + return {"FINISHED"} assert context.window_manager ifc_file = tool.Ifc.get() if ifc_file is None: @@ -1030,9 +1040,18 @@ class OverrideOutlinerDelete(bpy.types.Operator, tool.Ifc.Operator): @classmethod def poll(cls, context) -> bool: - return len(getattr(context, "selected_ids", [])) > 0 + # Match `outliner.delete` poll for consistency. + # `outliner.delete` just checks `area.type` == `OUTLINER`. + poll = bpy.ops.outliner.delete.poll() + if poll: + return True + cls.poll_message_set("Only available from Outliner.") + return False def execute(self, context): + if len(getattr(context, "selected_ids", [])) == 0: + return {"FINISHED"} + # In this override, we don't check self.hierarchy. This effectively # makes Delete and Delete Hierarchy identical. This is on purpose, since # non-hierarchical deletion may imply a whole bunch of potentially @@ -1051,6 +1070,9 @@ class OverrideOutlinerDelete(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} def invoke(self, context, event): + if len(getattr(context, "selected_ids", [])) == 0: + return {"FINISHED"} + assert context.window_manager ifc_file = tool.Ifc.get() if ifc_file: From 1609a77b777f45f951a208bb667c52666b664862 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 18:57:14 +0500 Subject: [PATCH 027/657] typing for PanelSpy related options --- src/bonsai/test/bim/test_feature.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 3bd861f31a..7ac29a3614 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -68,7 +68,7 @@ class PanelSpy: self.spied_labels: list[str] = [] self.spied_props: list[dict[str, Any]] = [] self.spied_operators: list[dict[str, Any]] = [] - self.spied_lists: list[dict[str, Any]] = [] + self.spied_lists: list[TemplateListSpy] = [] if hasattr(self.blender_panel, "draw_header"): self.blender_panel.draw_header(self, bpy.context) self.blender_panel.draw(self, bpy.context) @@ -426,18 +426,21 @@ def i_dont_see_text_in_the_nth_list(text, nth): @given(parsers.parse('I click "{button}" in the row where I see "{text}" in the "{nth}" list')) @when(parsers.parse('I click "{button}" in the row where I see "{text}" in the "{nth}" list')) @then(parsers.parse('I click "{button}" in the row where I see "{text}" in the "{nth}" list')) -def i_click_button_in_the_row_where_i_see_text_in_the_nth_list(button, text, nth): +def i_click_button_in_the_row_where_i_see_text_in_the_nth_list(button: str, text: str, nth: str) -> None: """ - :param button: The text or icon of the button to click. + :param button: The text or icon or name of the button/prop to click. + :param text: The text to search for in the row. + :param nth: E.g. "1st", "2nd", "5th". """ + assert panel_spy panel_spy.refresh_spy() - nth = int("".join([c for c in nth if c.isnumeric()])) - if len(panel_spy.spied_lists) < nth: - assert False, f"{nth} list does not exist. Actual number of lists: {len(panel_spy.spied_lists)}" + nth_ = int("".join([c for c in nth if c.isnumeric()])) + if len(panel_spy.spied_lists) < nth_: + assert False, f"{nth_} list does not exist. Actual number of lists: {len(panel_spy.spied_lists)}" debug = [] for i, template_list in enumerate(panel_spy.spied_lists): - if i + 1 != nth: + if i + 1 != nth_: continue for row in template_list.rows: is_row = False @@ -451,7 +454,8 @@ def i_click_button_in_the_row_where_i_see_text_in_the_nth_list(button, text, nth is_row = True if is_row: _i_click_button_on_panel(button, row) - return True + # Success. + return debug = "\n".join(debug) assert False, f"Could not see '{text}' in any list. We saw:\n{debug}" @@ -556,7 +560,7 @@ def i_set_the_prop_property_to_value(prop: str, value: str): assert panel_spy panel_spy.refresh_spy() is_nth = False - if prop[0].isnumeric() and (prop.endswith("st") or prop.endswith("nd") or prop.endswith("th")): + if prop[0].isnumeric() and prop.endswith(("st", "nd", "th")): is_nth = True for nth, spied_prop in enumerate(panel_spy.spied_props): if is_nth and nth != int(prop[:-2]) - 1: @@ -756,7 +760,7 @@ def i_press_operator_and_expect_error(operator, error_msg): @given(parsers.parse('I press "{operator}"')) @when(parsers.parse('I press "{operator}"')) -def i_press_operator(operator): +def i_press_operator(operator: str) -> types.NoneType: operator = replace_variables(operator) try: if "(" in operator: @@ -768,7 +772,7 @@ def i_press_operator(operator): assert False, f"Failed to run operator bpy.ops.{operator} because of {e}" -def _i_click_button_on_panel(button, panel_spy): +def _i_click_button_on_panel(button: str, panel_spy: PanelSpy) -> None: for spied_operator in panel_spy.spied_operators: if spied_operator["text"] == button or spied_operator["icon"] == button: spied_operator["operator"]("INVOKE_DEFAULT", **spied_operator["kwargs"]) From ac11baa0c4bad90af18695f1e72ff5f487b3f867 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 14:06:43 +0500 Subject: [PATCH 028/657] Fix `the_object_name_does_not_exist` not checking for errors `assert True` was introduced in 1c1035e and original implementation with `assert False` was removed in b0d8101 --- src/bonsai/test/bim/test_feature.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 7ac29a3614..28b910b3cb 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -1015,11 +1015,9 @@ def the_object_name_exists(name: str) -> bpy.types.Object: @then(parsers.parse('the object "{name}" does not exist')) -def the_object_name_does_not_exist(name) -> bpy.types.Object: +def the_object_name_does_not_exist(name) -> None: obj = bpy.data.objects.get(name) - if not obj: - assert True, f'The object "{name}" exists' - return obj + assert obj is None, f'The object "{name}" exists' @given(parsers.parse('the collection "{name}" exists')) From 24f991ceb1f70359a20f1dcd92914cebfb28c53f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 15:33:28 +0500 Subject: [PATCH 029/657] Fix feature tests after a11f81f --- src/bonsai/test/bim/feature/project.feature | 6 ++++-- src/bonsai/test/bim/feature/root.feature | 7 ++++++- src/bonsai/test/bim/feature/spatial.feature | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/bonsai/test/bim/feature/project.feature b/src/bonsai/test/bim/feature/project.feature index f17d1721be..0d589bbab4 100644 --- a/src/bonsai/test/bim/feature/project.feature +++ b/src/bonsai/test/bim/feature/project.feature @@ -872,8 +872,10 @@ Scenario: Export IFC - with basic contents and saving as a relative path Scenario: Export IFC - with deleted objects synchronised Given an empty IFC project - When the object "IfcBuildingStorey/My Storey" is selected - And I set "scene.BIMSpatialDecompositionProperties.is_locked" to "False" + And I look at the "Spatial Decomposition" panel + When I set the "is_visible" property to "TRUE" + And the object "IfcBuildingStorey/My Storey" is selected + And I set the "is_locked" property to "FALSE" And I delete the selected objects And I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc')" And an empty Blender session is started diff --git a/src/bonsai/test/bim/feature/root.feature b/src/bonsai/test/bim/feature/root.feature index acd6c79938..1969d31708 100644 --- a/src/bonsai/test/bim/feature/root.feature +++ b/src/bonsai/test/bim/feature/root.feature @@ -167,14 +167,19 @@ Scenario: Copy a wall Scenario: Copy a storey - when locked Given an empty IFC project + And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" And the object "IfcBuildingStorey/My Storey" is selected Then I expect an error "Error: 'IfcBuildingStorey/My Storey' is locked. Unlock it via the Spatial panel in the Project Overview tab." when "i_duplicate_the_selected_objects()" Then the object "IfcBuildingStorey/My Storey.001" does not exist Scenario: Copy a storey - when unlocked Given an empty IFC project + And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" + And I set "scene.BIMSpatialDecompositionProperties.is_visible" to "True" And the object "IfcBuildingStorey/My Storey" is selected - And I set "scene.BIMSpatialDecompositionProperties.is_locked" to "False" + And I set the "is_locked" property to "FALSE" When I duplicate the selected objects Then the object "IfcBuildingStorey/My Storey" and "IfcBuildingStorey/My Storey.001" are different elements And the object "IfcBuildingStorey/My Storey" is in the collection "IfcBuildingStorey/My Storey" diff --git a/src/bonsai/test/bim/feature/spatial.feature b/src/bonsai/test/bim/feature/spatial.feature index de15d6df9b..f5287c8474 100644 --- a/src/bonsai/test/bim/feature/spatial.feature +++ b/src/bonsai/test/bim/feature/spatial.feature @@ -15,6 +15,7 @@ Scenario: Set default container Scenario: Select container Given an empty IFC project And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" When I select the row where I see "My Building" in the "1st" list And I click "OBJECT_DATA" Then the object "IfcBuilding/My Building" is selected From b10e5ad4d617c5f257faf48752ef6db01c078f00 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 16:17:19 +0500 Subject: [PATCH 030/657] PanelSpy - target not all callables Because sometimes we have `Data` classes as panel attributes and they're also callable. --- src/bonsai/test/bim/test_feature.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 28b910b3cb..4e41e4fb8e 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -18,6 +18,7 @@ from __future__ import annotations import os +import types import bpy import pytest import traceback @@ -81,7 +82,8 @@ class PanelSpy: return self sentinel = object() attr_value = getattr(self.blender_panel, attr, sentinel) - if attr_value is not sentinel and not callable(attr_value): + # Don't use `callable`, because we might have `Data` classes as panel attributes. + if attr_value is not sentinel and not isinstance(attr_value, types.FunctionType): return attr_value return self From 2d97f6638bc4b531e5c3b63fdb49a7aa38efc3cf Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 16:45:50 +0500 Subject: [PATCH 031/657] test_feature - add debugpy option --- src/bonsai/test/bim/test_feature.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 4e41e4fb8e..4c1fafe6ad 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -1782,3 +1782,16 @@ def run_pdb(): import pdb pdb.set_trace() + + +@given(parsers.parse("I start debugpy")) +@when(parsers.parse("I start debugpy")) +@then(parsers.parse("I start debugpy")) +def run_debugpy() -> types.NoneType: + import debugpy + + debugpy.listen(5678) + debugpy.wait_for_client() + + # Set a breakpoint here. + print("debugpy connected") From 08064307009eac48cc4d953c2aef382d6780c70e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 18:03:41 +0500 Subject: [PATCH 032/657] TemplateListSpy - add repr --- src/bonsai/test/bim/test_feature.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 4c1fafe6ad..11d50897f1 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -200,6 +200,9 @@ class TemplateListSpy(PanelSpy): except: assert False, f"Could not set active index {index}" + def __repr__(self) -> str: + return f"TemplateListSpy({self.spied_data['listtype_name']}, {len(self.items)} items, active_index={self.active_index})" + class TemplateListItemSpy(PanelSpy): def __init__(self, parent: TemplateListSpy, item): From dd1989aebbe30b3277c3c70f82c15bd6f49ed876 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 18:09:54 +0500 Subject: [PATCH 033/657] test_feature - use pformat to print props for readibility --- src/bonsai/test/bim/test_feature.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 11d50897f1..93574a418a 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -21,6 +21,7 @@ import os import types import bpy import pytest +import pprint import traceback import webbrowser import numpy as np @@ -522,7 +523,7 @@ def i_see_the_prop_property(prop): panel_spy.refresh_spy() assert [ p for p in panel_spy.spied_props if prop in (p["name"], p["text"], p["icon"]) - ], f"Property {prop} not found in {panel_spy.spied_props}" + ], f"Property {prop} not found in {pprint.pformat(panel_spy.spied_props)}" @given(parsers.parse('I don\'t see the "{prop}" property')) @@ -533,7 +534,7 @@ def i_dont_see_the_prop_property(prop): panel_spy.refresh_spy() assert not [ p for p in panel_spy.spied_props if prop in (p["name"], p["text"], p["icon"]) - ], f"Property {prop} not found in {panel_spy.spied_props}" + ], f"Property {prop} not found in {pprint.pformat(panel_spy.spied_props)}" @given(parsers.parse('I see the "{prop}" property is "{value}"')) @@ -548,7 +549,7 @@ def i_see_the_prop_property_is_value(prop, value): spied_prop["value"] == value ), f"Property {prop} value is not {value} - it is actually {spied_prop['value']}" return - assert False, f"Property {prop} not found in {panel_spy.spied_props}" + assert False, f"Property {prop} not found in {pprint.pformat(panel_spy.spied_props)}" @given(parsers.parse('I set the "{prop}" property to "{value}"')) @@ -794,7 +795,8 @@ def _i_click_button_on_panel(button: str, panel_spy: PanelSpy) -> None: # Clicked confirm on an operator's draw dialog return i_press_operator(panel_spy.blender_panel.bl_idname) debug = "\n".join([f"{i} {v}" for i, v in enumerate(panel_spy.spied_operators)]) - debug += f"\nHere is the text we see:\n{panel_spy.spied_labels}\n... and props:\n {panel_spy.spied_props}" + debug_props = pprint.pformat(panel_spy.spied_props) + debug += f"\nHere is the text we see:\n{panel_spy.spied_labels}\n... and props:\n {debug_props}" assert False, f"Could not find {button}:\n{debug}" From 48119baf9744a5e4135d7ba3aab7da9230586bf7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 18:46:04 +0500 Subject: [PATCH 034/657] test_feature - non-background mode for debugging --- src/bonsai/test/bim/test_feature.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 93574a418a..f85c9445fa 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -57,6 +57,13 @@ webbrowser.open = lambda x: True tool.Bsdd.client = test.bim.stub.bSDDClientStub() +PYTEST_BLENDER_NO_BACKGROUND = bool(os.getenv("PYTEST_BLENDER_NO_BACKGROUND")) +"""Option to run Blender not in background. + +Can be useful for debugging, but has caveats - can't use ``wm.read_homefile`` +as resets the ``bpy.context`` and some it's members become `None`. +""" + class PanelSpy: def __init__(self, blender_panel: type[bpy.types.Panel]): @@ -288,7 +295,8 @@ def an_untestable_scenario(): @when("an empty Blender session is started") def an_empty_blender_session(): IfcStore.purge() - bpy.ops.wm.read_homefile(app_template="") + if not PYTEST_BLENDER_NO_BACKGROUND: + bpy.ops.wm.read_homefile(app_template="") if len(bpy.data.objects) > 0: bpy.data.batch_remove(bpy.data.objects) bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True) From 155d4c44ae7f4f3bfc21d7f534a4f310695b639a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 18:49:01 +0500 Subject: [PATCH 035/657] PanelSpy - fix error handling methods that have a return value E.g. `ReferenceUI` has `self.get_object_name(context)` - since value wasn't returned, it was returning `None`, breaking the tests. --- src/bonsai/test/bim/test_feature.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index f85c9445fa..35168180eb 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -170,7 +170,7 @@ class PanelSpy: panel = None if default_closed else self return header, panel else: - getattr(self.blender_panel, self.spied_attr)(self, *args, **kwargs) + return getattr(self.blender_panel, self.spied_attr)(self, *args, **kwargs) class OperatorSpy: From af4851f03a0087149e624a871e820dfd8ceed464 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Nov 2025 18:50:01 +0500 Subject: [PATCH 036/657] Fixing bsdd feature tests (a929ab0) --- src/bonsai/test/bim/feature/bsdd.feature | 56 ++++++++++-------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/src/bonsai/test/bim/feature/bsdd.feature b/src/bonsai/test/bim/feature/bsdd.feature index 29e6eb59e0..ed4ccfd23a 100644 --- a/src/bonsai/test/bim/feature/bsdd.feature +++ b/src/bonsai/test/bim/feature/bsdd.feature @@ -2,10 +2,10 @@ Feature: bSDD Scenario: Load bSDD dictionaries - Given an empty Blender session + Given an empty IFC project And I look at the "buildingSMART Data Dictionary" panel When I click "Load bSDD Dictionaries" - Then I see "Selected dictionary" + Then I see "Selected Dictionary:" And I see "LCA" in the "1st" list Scenario: Add classification from bSDD - add all dictionaries @@ -15,8 +15,7 @@ Scenario: Add classification from bSDD - add all dictionaries When I click "is_active" in the row where I see "LCA" in the "1st" list And I click "is_active" in the row where I see "BonsaiTestDict" in the "1st" list And I look at the "Classifications" panel - And I set the "classification_source" property to "buildingSMART Data Dictionary" - And I set the "active_dictionary" property to "All Dictionaries" + And I set the "classification_source" property to "All Active bSDDs" And I click "Add Classification From bSDD" Then I see "LCA" And I see "BonsaiTestDict" @@ -27,8 +26,7 @@ Scenario: Add classification from bSDD - add single dictionary And I click "Load bSDD Dictionaries" When I click "is_active" in the row where I see "BonsaiTestDict" in the "1st" list And I look at the "Classifications" panel - And I set the "classification_source" property to "buildingSMART Data Dictionary" - And I set the "active_dictionary" property to "BonsaiTestDict" + And I set the "classification_source" property to "BonsaiTestDict" And I click "Add Classification From bSDD" Then I see "BonsaiTestDict" And I don't see "LCA" @@ -41,8 +39,7 @@ Scenario: Search bSDD classifications - search all dictionaries And I click "is_active" in the row where I see "BonsaiTestDict" in the "1st" list And I select the object "IfcSite/My Site" And I look at the "Classification References" panel - And I set the "classification_source" property to "buildingSMART Data Dictionary" - And I set the "active_dictionary" property to "All Dictionaries" + And I set the "classification_source" property to "All Active bSDDs" And I click "VIEWZOOM" Then I see "Acidification" in the "1st" list And I see "BonsaiReferenceA" in the "1st" list @@ -54,8 +51,7 @@ Scenario: Search bSDD classifications - search single dictionary And I click "is_active" in the row where I see "BonsaiTestDict" in the "1st" list And I select the object "IfcSite/My Site" And I look at the "Classification References" panel - When I set the "classification_source" property to "buildingSMART Data Dictionary" - And I set the "active_dictionary" property to "BonsaiTestDict" + When I set the "classification_source" property to "BonsaiTestDict" And I click "VIEWZOOM" Then I see "BonsaiReferenceA" in the "1st" list And I don't see "Acidification" in the "1st" list @@ -68,8 +64,7 @@ Scenario: Add classification reference from bSDD - add classification only And I click "is_active" in the row where I see "BonsaiTestDict" in the "1st" list And I select the object "IfcSite/My Site" And I look at the "Classification References" panel - And I set the "classification_source" property to "buildingSMART Data Dictionary" - And I set the "active_dictionary" property to "All Dictionaries" + And I set the "classification_source" property to "All Active bSDDs" And I click "VIEWZOOM" Then I see "Acidification" in the "1st" list When I select the row where I see "Acidification" in the "1st" list @@ -77,29 +72,24 @@ Scenario: Add classification reference from bSDD - add classification only Then I see "Acidification" And I don't see "BonsaiReferenceA" -Scenario: Get bSDD classification properties - get associated properties then add classification +Scenario: Get bSDD classification properties - get and add associated properties Given an empty IFC project And I look at the "buildingSMART Data Dictionary" panel And I click "Load bSDD Dictionaries" When I click "is_active" in the row where I see "LCA" in the "1st" list And I select the object "IfcSite/My Site" - And I look at the "Classification References" panel - And I set the "classification_source" property to "buildingSMART Data Dictionary" - And I set the "active_dictionary" property to "All Dictionaries" - And I click "VIEWZOOM" - When I select the row where I see "Acidification" in the "1st" list - And I click "COPY_ID" - Then I see "SizeSet" - And I see "Height" - And I see "Volume" - And I see "No References" - When I set the "Height" property to "42" - And I click "Add Classification Reference" - Then I see "Acidification" - And I don't see "No References" - When I look at the "Property Sets" panel - Then I see "SizeSet" - And I see "Height" - And I see "42" - And I see "Volume" - And I see "0" + And I look at the "Property Sets" panel + And I set the "pset_name" property to "All Data Dictionaries" + And I click "FILE_REFRESH" + When I select the row where I see "Height" in the "2nd" list + And I click "is_selected" in the row where I see "Height" in the "2nd" list + And I click "is_selected" in the row where I see "Volume" in the "2nd" list + Then I look at the "Property Sets" panel + And I set the "height" property to "42" + And I set the "volume" property to "23" + When I click "Add bSDD Properties" + Then I look at the "Property Sets" panel + And I see "height" + And I see "42.0" + And I see "volume" + And I see "23.0" From a4fae94be8eeb2c9bf5c4385af81e76cdac2a9ba Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 12:51:11 +0500 Subject: [PATCH 037/657] test_feature - add separate non-debug option to save ifc project Also clean up temp folder before save (met issues when tests were using not updated shading_styles.json) --- src/bonsai/test/bim/feature/drawing.feature | 32 ++++++++++----------- src/bonsai/test/bim/test_feature.py | 26 +++++++++++++---- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/bonsai/test/bim/feature/drawing.feature b/src/bonsai/test/bim/feature/drawing.feature index a982582c00..084118b06b 100644 --- a/src/bonsai/test/bim/feature/drawing.feature +++ b/src/bonsai/test/bim/feature/drawing.feature @@ -9,7 +9,7 @@ Scenario: Duplicate drawing And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -27,7 +27,7 @@ Scenario: Duplicate drawing - without duplicating annotations And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -50,7 +50,7 @@ Scenario: Duplicate drawing - with duplicating annotations And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -73,7 +73,7 @@ Scenario: Create drawing And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -93,7 +93,7 @@ Scenario: Create drawing after deleting a duplicated object And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" And I duplicate the selected objects - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -112,7 +112,7 @@ Scenario: Activate drawing preserves visibility for non-ifc objects And I add a cube And the object "Cube" is visible And the object "Cube.001" is not visible - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -126,7 +126,7 @@ Scenario: Activate drawing preserves selection Given an empty IFC project And I add a cube And the object "Cube" is selected - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -143,7 +143,7 @@ Scenario: Remove drawing And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -178,7 +178,7 @@ Scenario: Remove drawing - deleting active drawing And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -193,7 +193,7 @@ Scenario: Add annotation - text Given an empty IFC project And I add a cube And the object "Cube" is selected - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -207,7 +207,7 @@ Scenario: Add annotation - auto create context if it doesn't exist Given an empty IFC project And I add a cube And the object "Cube" is selected - And I save sample test files + And I save IFC project And I look at the "Geometric Representation Contexts" panel And I see "Plan" And I click the "X" after the text "Plan" @@ -228,7 +228,7 @@ Scenario: Create drawing - using shapely fill mode And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I set the "location_hint" property to "My Storey" @@ -244,7 +244,7 @@ Scenario: Create drawing - using shapely fill mode Scenario: Add sheet Given an empty IFC project - And I save sample test files + And I save IFC project And I look at the "Sheets" panel And I click "IMPORT" When I click "ADD" @@ -253,7 +253,7 @@ Scenario: Add sheet Scenario: Create sheet Given an empty IFC project - And I save sample test files + And I save IFC project And I look at the "Sheets" panel And I click "IMPORT" And I click "ADD" @@ -270,7 +270,7 @@ Scenario: Add drawing to sheet And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" @@ -295,7 +295,7 @@ Scenario: Create sheet - with a drawing added to it And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I save sample test files + And I save IFC project And I look at the "Drawings" panel And I click "IMPORT" And I click "ADD" diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 35168180eb..c8c0e701c4 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -21,6 +21,7 @@ import os import types import bpy import pytest +import shutil import pprint import traceback import webbrowser @@ -64,6 +65,8 @@ Can be useful for debugging, but has caveats - can't use ``wm.read_homefile`` as resets the ``bpy.context`` and some it's members become `None`. """ +TMP = Path(f"{variables['cwd']}/test/files/temp") + class PanelSpy: def __init__(self, blender_panel: type[bpy.types.Panel]): @@ -325,6 +328,17 @@ def an_empty_ifc_2x3_project(): bpy.ops.bim.create_project() +@given(parsers.parse("I save IFC project")) +@when(parsers.parse("I save IFC project")) +@then(parsers.parse("I save IFC project")) +def saving_ifc_project() -> None: + # Remove old temp files to avoid conflicts with non-updated assets. + if TMP.exists(): + shutil.rmtree(TMP) + filepath = TMP / "test_project.ifc" + bpy.ops.bim.save_project(filepath=filepath.__str__(), should_save_as=True) + + @given("the Brickschema is stubbed") def the_brickschema_is_stubbed(): # This makes things run faster since we don't need to load the entire brick schema @@ -1761,19 +1775,19 @@ def i_fail(): @given(parsers.parse("I save sample test files")) @when(parsers.parse("I save sample test files")) @then(parsers.parse("I save sample test files")) -def saving_sample_test_files(and_open_in_blender=None): - filepath = f"{variables['cwd']}/test/files/temp/sample_test_file" +def saving_sample_test_files() -> None: + filepath = TMP / "sample_test_file" print(f"Saved to {filepath}") - bpy.ops.bim.save_project(filepath=f"{filepath}.ifc", should_save_as=True) - bpy.ops.wm.save_as_mainfile(filepath=f"{filepath}.blend") + bpy.ops.bim.save_project(filepath=filepath.with_suffix(".ifc").__str__(), should_save_as=True) + bpy.ops.wm.save_as_mainfile(filepath=filepath.with_suffix(".blend").__str__()) @given(parsers.parse("I load test blend file")) @when(parsers.parse("I load test blend file")) @then(parsers.parse("I load test blend file")) def opening_sample_test_files_in_blender(): - filepath = f"{variables['cwd']}/test/files/temp/sample_test_file.blend" - bpy.ops.wm.open_mainfile(filepath=filepath, display_file_selector=False) + filepath = TMP / "sample_test_file.blend" + bpy.ops.wm.open_mainfile(filepath=filepath.__str__(), display_file_selector=False) # TODO: merge to single fixture with `saving_sample_test_files`; add "and wait" From e5b26067ab9a7b851998636f5ba10e0e257a434e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 13:13:46 +0500 Subject: [PATCH 038/657] typing --- .../bonsai/bim/module/drawing/operator.py | 2 +- .../bonsai/bim/module/geometry/operator.py | 21 +++++++++++-------- src/bonsai/test/bim/test_feature.py | 18 ++++++++++------ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 6c98169c06..a76e187566 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -2701,7 +2701,7 @@ class ActivateDrawingStyle(bpy.types.Operator, tool.Ifc.Operator): def set_raster_style(self, context: bpy.types.Context) -> None: scene = context.scene # Do not remove. It is used in exec later assert (space := tool.Blender.get_view3d_space()) # Do not remove. It is used in exec later - style = json.loads(self.drawing_style.raster_style) + style: dict[str, Any] = json.loads(self.drawing_style.raster_style) def preprocess(path: str, value: Any) -> tuple[str, Any, bool, bool]: warning = False diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index d7d3bd720c..dd8b51a2e2 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1169,7 +1169,7 @@ class OverrideDuplicateMove(bpy.types.Operator): @staticmethod def execute_ifc_duplicate_operator(operator: bpy.types.Operator, context: bpy.types.Context, linked: bool = False): - objects_to_remove = set() + objects_to_remove: set[bpy.types.Object] = set() for obj in context.selected_objects: element = tool.Ifc.get_entity(obj) @@ -1227,6 +1227,9 @@ class DuplicateMoveLinkedAggregateMacro(bpy.types.Macro): bl_options = {"REGISTER", "UNDO"} +OldToNewType = dict[ifcopenshell.entity_instance, list[ifcopenshell.entity_instance]] + + class DuplicateMoveLinkedAggregate(bpy.types.Operator): bl_idname = "bim.object_duplicate_move_linked_aggregate" bl_label = "IFC Duplicate and Move Linked Aggregate" @@ -1251,7 +1254,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): self.pset_name = "BBIM_Linked_Aggregate" all_old_to_new = {} # Track all duplicates created - def select_objects_and_add_data(element): + def select_objects_and_add_data(element: ifcopenshell.entity_instance) -> None: add_linked_aggregate_group(element) obj = tool.Ifc.get_object(element) obj.select_set(True) @@ -1285,7 +1288,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): index += 1 return index - def add_linked_aggregate_group(element): + def add_linked_aggregate_group(element: ifcopenshell.entity_instance) -> None: linked_aggregate_group = None product_groups_name = [ r.RelatingGroup.Name @@ -1298,7 +1301,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): linked_aggregate_group = ifcopenshell.api.group.add_group(ifc_file, name=self.group_name) ifcopenshell.api.group.assign_group(ifc_file, products=[element], group=linked_aggregate_group) - def custom_incremental_naming_for_element_assembly(old_to_new): + def custom_incremental_naming_for_element_assembly(old_to_new: OldToNewType) -> None: for new in old_to_new.values(): if new[0].is_a("IfcElementAssembly"): group_elements = next( @@ -1475,7 +1478,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): self.pset_name = "BBIM_Linked_Aggregate" refresh_start_time = time() old_to_new = {} - original_data: dict[int, dict[int, str]] = {} + original_data: dict[int, dict[int, dict[str, Any]]] = {} def delete_objects(element: ifcopenshell.entity_instance) -> None: """Remove IfcElementAssembly and it's parts.""" @@ -1521,8 +1524,8 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): ) tool.Blender.update_viewport() - def get_original_data(element: ifcopenshell.entity_instance) -> dict[int, dict[int, str]]: - group = next( + def get_original_data(element: ifcopenshell.entity_instance) -> dict[int, dict[int, dict[str, Any]]]: + group: int = next( r.RelatingGroup for r in getattr(element, "HasAssignments", []) or [] if r.is_a("IfcRelAssignsToGroup") @@ -1530,8 +1533,8 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): ).id() original_data[group] = {} - pset = ifcopenshell.util.element.get_pset(element, self.pset_name) - index = pset["Index"] + pset: dict[str, Any] = ifcopenshell.util.element.get_pset(element, self.pset_name) + index: int = pset["Index"] annotations = get_assignments(element) container = ifcopenshell.util.element.get_container(element) original_data[group][index] = { diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index c8c0e701c4..b646ac6ed9 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -189,14 +189,16 @@ class OperatorSpy: class TemplateListSpy(PanelSpy): + items: bpy.types.bpy_prop_collection_idprop[bpy.types.PropertyGroup] + active_index: int + active_item: bpy.types.PropertyGroup | None + blender_panel: type[bpy.types.UIList] + def __init__(self, template_list: type[bpy.types.UIList], spied_data: dict[str, Any]): self.spied_data = spied_data self.items = getattr(self.spied_data["dataptr"], self.spied_data["propname"]) self.active_index = getattr(self.spied_data["active_dataptr"], self.spied_data["active_propname"]) - try: - self.active_item = self.items[self.active_index] - except: - self.active_item = None + self.active_item = tool.Blender.get_active_uilist_element(self.items, self.active_index) self.blender_panel = template_list self.rows: list[TemplateListItemSpy] = [] @@ -637,12 +639,16 @@ def the_name_list_has_total_items(name, total): @given(parsers.parse('I select the "{item_name}" item in the "{list_name}" list')) @when(parsers.parse('I select the "{item_name}" item in the "{list_name}" list')) @then(parsers.parse('I can select the "{item_name}" item in the "{list_name}" list')) -def i_select_the_item_name_item_in_the_list_name_list(item_name, list_name): +def i_select_the_item_name_item_in_the_list_name_list(item_name: str, list_name: str) -> None: + """ + :param item_name: The ``.name`` of the item to select. + :param list_name: List type name, e.g. ``BIM_UL_containers_manager``. + """ assert panel_spy panel_spy.refresh_spy() for template_list in panel_spy.spied_lists: if list_name == template_list.spied_data["listtype_name"]: - item_names = [] + item_names: list[str] = [] for i, item in enumerate(template_list.items): item_names.append(item.name) if item.name == item_name: From 83b56d591b573274fde1890756070e3d4334bd55 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 13:16:11 +0500 Subject: [PATCH 039/657] Fix error activating drawing style Example error: ``` TypeError: bpy_struct: item.attr = val: enum "Default" not found in ('city.exr', 'courtyard.exr', 'forest.exr', 'interior.exr', 'night.exr', 'studio.exr', 'sunrise.exr', 'sunset.exr') ``` There was a bug in shading_styles.json where we were using `Default` for `studio_light`, which is only available for `SOLID` shading type. Changed value to `forest.exr`, added code to handle old bugged value since users already copied and possibly modified shading_styles.json --- .../bim/data/assets/shading_styles.json | 4 +-- .../bonsai/bim/module/drawing/operator.py | 26 ++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/data/assets/shading_styles.json b/src/bonsai/bonsai/bim/data/assets/shading_styles.json index e4daf97124..cf88db2949 100644 --- a/src/bonsai/bonsai/bim/data/assets/shading_styles.json +++ b/src/bonsai/bonsai/bim/data/assets/shading_styles.json @@ -355,7 +355,7 @@ 1.0, 1.0 ], - "scene.display.shading.studio_light": "Default", + "scene.display.shading.studio_light": "forest.exr", "scene.display.shading.studiolight_background_alpha": 0.0, "scene.display.shading.studiolight_background_blur": 0.0, "scene.display.shading.studiolight_intensity": 0.0, @@ -594,7 +594,7 @@ 0.800000011920929, 0.800000011920929 ], - "scene.display.shading.studio_light": "Default", + "scene.display.shading.studio_light": "forest.exr", "scene.display.shading.studiolight_background_alpha": 0.0, "scene.display.shading.studiolight_background_blur": 0.0, "scene.display.shading.studiolight_intensity": 0.0, diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index a76e187566..6379351de5 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -2703,6 +2703,8 @@ class ActivateDrawingStyle(bpy.types.Operator, tool.Ifc.Operator): assert (space := tool.Blender.get_view3d_space()) # Do not remove. It is used in exec later style: dict[str, Any] = json.loads(self.drawing_style.raster_style) + VIEWPORT_SHADING_TYPE = "scene.display.shading.type" + def preprocess(path: str, value: Any) -> tuple[str, Any, bool, bool]: warning = False skip = False @@ -2737,6 +2739,19 @@ class ActivateDrawingStyle(bpy.types.Operator, tool.Ifc.Operator): ) warning = True skip = True + # @25.11.11 + elif ( + path == "scene.display.shading.studio_light" + and value == "Default" + and style[VIEWPORT_SHADING_TYPE] in ("RENDERED", "MATERIAL") + ): + value = "forest.exr" + print( + f"Warning: Value 'Default' for property '{path}' and " + f"'{VIEWPORT_SHADING_TYPE}' = '{style[VIEWPORT_SHADING_TYPE]}' is outdated " + "and should be replaced with 'forest.exr' in shading_styles.json." + ) + warning = True # @25.05.12 elif path == "scene.display.shading.wireframe_color_type" and value == "MATERIAL": value = "THEME" @@ -2772,7 +2787,16 @@ class ActivateDrawingStyle(bpy.types.Operator, tool.Ifc.Operator): return path, value, warning, skip - for path, value in style.items(): + paths = list(style.keys()) + PRIORITY_PATHS = ( + # `scene.display.shading.studio_light` values depend on `.type` + # so we got to set it first. + VIEWPORT_SHADING_TYPE, + ) + paths.sort(key=lambda p: p not in PRIORITY_PATHS) + + for path in paths: + value = style[path] path, value, warning, skip = preprocess(path, value) self.has_warnings_during_activation |= warning From 6c31d43e725cc2180182c74290b8e959c95a7222 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 13:21:55 +0500 Subject: [PATCH 040/657] Fix feature tests after a11f81f --- src/bonsai/test/bim/feature/geometry.feature | 27 +++++++++++++++++--- src/bonsai/test/bim/feature/root.feature | 1 - src/bonsai/test/bim/feature/spatial.feature | 1 + 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/bonsai/test/bim/feature/geometry.feature b/src/bonsai/test/bim/feature/geometry.feature index 0f091fd9ca..353f61132c 100644 --- a/src/bonsai/test/bim/feature/geometry.feature +++ b/src/bonsai/test/bim/feature/geometry.feature @@ -292,14 +292,31 @@ Scenario: Override duplicate move - with active IFC data And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" And the object "IfcWall/Cube" is selected - And additionally the object "IfcBuildingStorey/My Storey" is selected - And I set "scene.BIMSpatialDecompositionProperties.is_locked" to "False" When I duplicate the selected objects Then the object "IfcWall/Cube" exists And the object "IfcWall/Cube" is an "IfcWall" And the object "IfcWall/Cube.001" exists And the object "IfcWall/Cube.001" is an "IfcWall" And the object "IfcWall/Cube.001" has a "Tessellation" representation of "Model/Body/MODEL_VIEW" + +Scenario: Override duplicate move - with locked elements + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I look at the "Class" panel + And I set the "Products" property to "IfcElement" + And I set the "Class" property to "IfcWall" + And I click "Assign IFC Class" + And the object "IfcWall/Cube" is selected + And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" + And additionally the object "IfcBuildingStorey/My Storey" is selected + Then I press "bim.override_object_duplicate_move" and expect error "Error: 'IfcBuildingStorey/My Storey' is locked. Unlock it via the Spatial panel in the Project Overview tab." + And the object "IfcWall/Cube" exists + And the object "IfcWall/Cube" is an "IfcWall" + And the object "IfcWall/Cube.001" exists + And the object "IfcWall/Cube.001" is an "IfcWall" + And the object "IfcWall/Cube.001" has a "Tessellation" representation of "Model/Body/MODEL_VIEW" And the object "IfcBuildingStorey/My Storey.001" does not exist Scenario: Override duplicate move - with unlocked elements @@ -310,8 +327,10 @@ Scenario: Override duplicate move - with unlocked elements And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" + And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" + And I set the "is_locked" property to "FALSE" And the object "IfcBuildingStorey/My Storey" is selected - And I set "scene.BIMSpatialDecompositionProperties.is_locked" to "False" When I duplicate the selected objects Then the object "IfcBuildingStorey/My Storey.001" exists And the object "IfcBuildingStorey/My Storey.001" is an "IfcBuildingStorey" @@ -507,6 +526,8 @@ Scenario: Override duplicate move linked - with active IFC data And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" + And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" And the object "IfcWall/Cube" is selected And additionally the object "IfcBuildingStorey/My Storey" is selected When I press "object.duplicate_move_linked" diff --git a/src/bonsai/test/bim/feature/root.feature b/src/bonsai/test/bim/feature/root.feature index 1969d31708..1267e022a9 100644 --- a/src/bonsai/test/bim/feature/root.feature +++ b/src/bonsai/test/bim/feature/root.feature @@ -177,7 +177,6 @@ Scenario: Copy a storey - when unlocked Given an empty IFC project And I look at the "Spatial Decomposition" panel And I set the "is_visible" property to "TRUE" - And I set "scene.BIMSpatialDecompositionProperties.is_visible" to "True" And the object "IfcBuildingStorey/My Storey" is selected And I set the "is_locked" property to "FALSE" When I duplicate the selected objects diff --git a/src/bonsai/test/bim/feature/spatial.feature b/src/bonsai/test/bim/feature/spatial.feature index f5287c8474..5136479f18 100644 --- a/src/bonsai/test/bim/feature/spatial.feature +++ b/src/bonsai/test/bim/feature/spatial.feature @@ -223,6 +223,7 @@ Scenario: Set element visibility - Hide spatial container Scenario: Select spatial container Given an empty IFC project And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" When I select the "My Site" item in the "BIM_UL_containers_manager" list And I click "OBJECT_DATA" Then the object "IfcSite/My Site" is selected From e7c4a19d9e40e98b503add9f8c2ae10b33ee1a11 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 13:37:57 +0500 Subject: [PATCH 041/657] `bim.override_object_duplicate_move` - sync `poll` with `object.duplicate_move` --- src/bonsai/bonsai/bim/module/geometry/operator.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index dd8b51a2e2..6485856669 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1143,10 +1143,18 @@ class OverrideDuplicateMove(bpy.types.Operator): is_interactive: bpy.props.BoolProperty(name="Is Interactive", default=True) @classmethod - def poll(cls, context): - return len(context.selected_objects) > 0 + def poll(cls, context) -> bool: + # Match `object.duplicate_move` poll for consistency. + # `object.duplicate_move` poll checks for OBJECT mode. + poll = bpy.ops.object.duplicate_move.poll() + if poll: + return True + cls.poll_message_set("Only available in OBJECT mode") + return False def execute(self, context): + if not context.selected_objects: + return {"FINISHED"} return OverrideDuplicateMove.execute_duplicate_operator(self, context, linked=False) def _execute(self, context): From 71e78c67f8b7bc38cababef43c4e9464e1497ff3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 16:33:45 +0500 Subject: [PATCH 042/657] Add visibility and lock steps to geometry.feature Added steps to set 'is_visible' to TRUE and 'is_locked' to FALSE in the 'Spatial Decomposition' panel for the 'Override paste buffer - with active IFC data' scenario. This ensures the test covers visibility and lock state handling for IFC objects. --- src/bonsai/test/bim/feature/geometry.feature | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bonsai/test/bim/feature/geometry.feature b/src/bonsai/test/bim/feature/geometry.feature index 353f61132c..7966af5ffa 100644 --- a/src/bonsai/test/bim/feature/geometry.feature +++ b/src/bonsai/test/bim/feature/geometry.feature @@ -559,6 +559,9 @@ Scenario: Override paste buffer - with active IFC data And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" And the object "IfcWall/Cube" is selected + And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" + And I set the "is_locked" property to "FALSE" And additionally the object "IfcBuildingStorey/My Storey" is selected When I press "view3d.copybuffer" # IFC elements unlinked on paste for safety From f643a1615ed5598d61a071e8c1dacbd4bdbd4125 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 17:28:03 +0500 Subject: [PATCH 043/657] Fix failing aggregate duplication test after 17d6b8a --- src/bonsai/bonsai/bim/module/geometry/operator.py | 2 +- src/bonsai/test/bim/feature/geometry.feature | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 6485856669..2d004c6b36 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1320,7 +1320,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): ) pset = ifcopenshell.util.element.get_pset(new[0], "BBIM_Linked_Aggregate") new_obj = tool.Ifc.get_object(new[0]) - new_obj.name = pset["Name"] + "_" + str(pset["Aggregate_Index"]) + new_obj.name = f"{pset['Name']}_{pset['Aggregate_Index']:02d}" def get_max_index(parts): psets = [ diff --git a/src/bonsai/test/bim/feature/geometry.feature b/src/bonsai/test/bim/feature/geometry.feature index 7966af5ffa..ee2851fc7e 100644 --- a/src/bonsai/test/bim/feature/geometry.feature +++ b/src/bonsai/test/bim/feature/geometry.feature @@ -579,8 +579,9 @@ Scenario: Duplicate linked aggregate When I duplicate linked aggregate the selected objects Then the object "IfcWall/Wall_01.001" exists And the object "IfcWall/Wall_02.001" exists - And the object "IfcElementAssembly/Assembly_01" exists - Then the object "IfcElementAssembly/Assembly" and "IfcElementAssembly/Assembly_01" belong to the same Linked Aggregate Group + # msgbus updates don't happen in background mode, so obj is not renamed to "IfcElementAssembly/Assembly_01" + And the object "Assembly_01" exists + Then the object "IfcElementAssembly/Assembly" and "Assembly_01" belong to the same Linked Aggregate Group Scenario: Refresh linked aggregate Given I load the IFC test file "/test/files/linked-aggregates.ifc" From 4cc50301dd0fe0fedeb3c92c930d7a1e01982808 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 17:29:15 +0500 Subject: [PATCH 044/657] Remove unused variable (17d6b8a) --- src/bonsai/bonsai/bim/module/geometry/operator.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 2d004c6b36..acb368f3fe 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1312,12 +1312,6 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): def custom_incremental_naming_for_element_assembly(old_to_new: OldToNewType) -> None: for new in old_to_new.values(): if new[0].is_a("IfcElementAssembly"): - group_elements = next( - r.RelatedObjects - for r in getattr(new[0], "HasAssignments", []) or [] - if r.is_a("IfcRelAssignsToGroup") - if "BBIM_Linked_Aggregate" in r.RelatingGroup.Name - ) pset = ifcopenshell.util.element.get_pset(new[0], "BBIM_Linked_Aggregate") new_obj = tool.Ifc.get_object(new[0]) new_obj.name = f"{pset['Name']}_{pset['Aggregate_Index']:02d}" From 091af3c1c93bc12761f0e1f1686024227432f725 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 17:39:28 +0500 Subject: [PATCH 045/657] Add todo for unused expression (17d6b8a) --- src/bonsai/bonsai/bim/module/geometry/operator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index acb368f3fe..10f631e58b 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1550,6 +1550,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): if parts: for part in parts: if part.is_a("IfcElementAssembly"): + # TODO: unused expression. original_data | get_original_data(part) else: try: From e8bcbc83a4a074dc1b5a9a38dd0b94566f890ad4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 18:48:41 +0500 Subject: [PATCH 046/657] Update operator.py --- src/bonsai/bonsai/bim/module/spatial/operator.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index e292a61781..b674fb32d0 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -21,6 +21,7 @@ import ifcopenshell.util.element import bonsai.tool as tool import bonsai.core.spatial as core import bonsai.bim.handler +from typing import TYPE_CHECKING class ReferenceStructure(bpy.types.Operator, tool.Ifc.Operator): @@ -244,7 +245,11 @@ class CopyToContainer(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.copy_to_container" bl_label = "Copy To Container" bl_options = {"REGISTER", "UNDO"} - container: bpy.props.IntProperty() + + container: bpy.props.IntProperty() # pyright: ignore[reportRedeclaration] + + if TYPE_CHECKING: + container: int def _execute(self, context): objs = tool.Spatial.get_selected_objects_without_containers() From 821b5380ea5fd78380aa337479aeee0f4e0c0126 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 18:55:17 +0500 Subject: [PATCH 047/657] Fix copy to container test (ddbe627) --- src/bonsai/bonsai/bim/module/spatial/operator.py | 4 ++-- src/bonsai/test/bim/feature/spatial.feature | 8 ++++---- src/bonsai/test/bim/test_feature.py | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index b674fb32d0..965be5c270 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -234,7 +234,7 @@ class RemoveContainer(bpy.types.Operator, tool.Ifc.Operator): class CopyToContainer(bpy.types.Operator, tool.Ifc.Operator): """ - Copies selected 3D elements in the viewport to the selected spatial containers + Copies selected 3D elements in the viewport to the container selected in Spatial Manager. Example: bulk copy a wall to multiple storeys @@ -243,7 +243,7 @@ class CopyToContainer(bpy.types.Operator, tool.Ifc.Operator): Copying containers to other containers currently is not supported.""" bl_idname = "bim.copy_to_container" - bl_label = "Copy To Container" + bl_label = "Copy to Container" bl_options = {"REGISTER", "UNDO"} container: bpy.props.IntProperty() # pyright: ignore[reportRedeclaration] diff --git a/src/bonsai/test/bim/feature/spatial.feature b/src/bonsai/test/bim/feature/spatial.feature index 5136479f18..2b3020ea23 100644 --- a/src/bonsai/test/bim/feature/spatial.feature +++ b/src/bonsai/test/bim/feature/spatial.feature @@ -82,10 +82,10 @@ Scenario: Copy to container And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And the object "IfcSite/My Site" is selected - And additionally the object "IfcWall/Cube" is selected - And I press "bim.enable_editing_container" - When I press "bim.copy_to_container" + And I look at the "Spatial Decomposition" panel + When I select the "My Site" item in the "BIM_UL_containers_manager" list + And the object "IfcWall/Cube" is selected + When I click "MOD_DISPLACE" Then the object "IfcWall/Cube.001" is in the collection "IfcSite/My Site" Scenario: Reference structure diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index b646ac6ed9..2da27d5f9a 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -792,6 +792,8 @@ def i_press_operator_and_expect_error(operator, error_msg): assert False, f"Operator bpy.ops.{operator} ran without exception '{error_msg}'" +# TODO: We should rename 'I press' to 'I run' or 'I execute' +# to avoid confusion with 'I click'. @given(parsers.parse('I press "{operator}"')) @when(parsers.parse('I press "{operator}"')) def i_press_operator(operator: str) -> types.NoneType: From 7f7aef0e6ea439e703549d7217ad7fa5d5281c19 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 18:57:48 +0500 Subject: [PATCH 048/657] Fix duplicate drawing core test (8ffa6fc) --- src/bonsai/bonsai/core/tool.py | 1 + src/bonsai/test/core/test_drawing.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index b611dd29a2..acfce461df 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -308,6 +308,7 @@ class Document: class Drawing: def activate_drawing(cls, camera): pass def add_literal(cls, **attributes): pass + def clear_annotation_relationships(cls, drawing): pass 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 diff --git a/src/bonsai/test/core/test_drawing.py b/src/bonsai/test/core/test_drawing.py index e12c7dd0f8..722a4f72d6 100644 --- a/src/bonsai/test/core/test_drawing.py +++ b/src/bonsai/test/core/test_drawing.py @@ -398,6 +398,7 @@ class TestDuplicateDrawing: drawing.get_name("drawing").should_be_called().will_return("name") drawing.ensure_unique_drawing_name("name").should_be_called().will_return("unique_name") ifc.run("root.copy_class", product="drawing").should_be_called().will_return("new_drawing") + drawing.clear_annotation_relationships("new_drawing").should_be_called() drawing.copy_representation("drawing", "new_drawing").should_be_called() drawing.set_name("new_drawing", "unique_name").should_be_called() drawing.get_drawing_group("new_drawing").should_be_called().will_return("group") From a2ce2ea23ab880cc2a9e40f79c36a92f5c6befc3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 19:14:08 +0500 Subject: [PATCH 049/657] Fix TestDisableEditingText crash after 679fa6d --- src/bonsai/test/tool/test_drawing.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bonsai/test/tool/test_drawing.py b/src/bonsai/test/tool/test_drawing.py index 86ce456254..969f96d853 100644 --- a/src/bonsai/test/tool/test_drawing.py +++ b/src/bonsai/test/tool/test_drawing.py @@ -155,6 +155,9 @@ class TestDisableEditingText(NewFile): props = tool.Drawing.get_text_props(obj) props.is_editing = True subject.disable_editing_text(obj) + + # Props might get invalidated, since no properties set. + props = tool.Drawing.get_text_props(obj) assert props.is_editing == False From 7f8cb802814ac4faba208ff037ed0801dd936913 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 19:13:21 +0500 Subject: [PATCH 050/657] Fix TestDrawingStyles after 44cc127 --- src/bonsai/test/tool/test_drawing.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/bonsai/test/tool/test_drawing.py b/src/bonsai/test/tool/test_drawing.py index 969f96d853..9f499a01b1 100644 --- a/src/bonsai/test/tool/test_drawing.py +++ b/src/bonsai/test/tool/test_drawing.py @@ -881,19 +881,13 @@ class TestDrawingStyles(NewFile): props = tool.Drawing.get_document_props() self.drawing_styles = props.drawing_styles - def test_drawing_styles_not_loaded_if_underlay_is_inactive(self): + def test_drawing_styles_are_loaded_even_if_underlay_is_inactive(self): self.setup_project_with_drawing() - assert len(self.drawing_styles) == 0 - - def test_drawing_styles_loaded_on_underlay_enabled(self): - self.setup_project_with_drawing() - assert (scene := bpy.context.scene) and (camera := scene.camera) - props = tool.Drawing.get_camera_props(camera) - props.has_underlay = True assert len(self.drawing_styles) == 3 def test_drawing_styles_reload(self): self.setup_project_with_drawing() + self.drawing_styles.clear() bpy.ops.bim.reload_drawing_styles() assert len(self.drawing_styles) == 3 From 25d3edc537272457ac1c5323048c4c6230b5419f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 11 Nov 2025 19:37:11 +0500 Subject: [PATCH 051/657] Avoid producing test artifacts in `src/bonsai` --- .gitignore | 3 --- src/bonsai/bonsai/bim/module/drawing/operator.py | 9 +++++++++ src/bonsai/bonsai/tool/project.py | 9 +++++++++ src/bonsai/test/bim/feature/drawing.feature | 5 ++++- src/bonsai/test/tool/test_drawing.py | 4 +++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 37f7ea9c98..d313811335 100644 --- a/.gitignore +++ b/.gitignore @@ -88,9 +88,6 @@ src/bonsai/bonsai/bim/data/gantt/jsgantt.js src/bonsai/bonsai/bim/data/gantt/jsgantt.css src/bonsai/bonsai/bim/data/webui/static/js/jquery.min.js -src/bonsai/drawings -src/bonsai/layouts - # ifcopenshell swig and compiled files src/ifcopenshell-python/ifcopenshell/_ifcopenshell_wrapper*.so src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.py diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 6379351de5..02bdf541ca 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3461,6 +3461,15 @@ class LoadDrawings(bpy.types.Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} + @classmethod + def poll(cls, context): + # Operator is not accessible through UI if IFC project is not saved, + # but adding poll check to avoid using Drawings UI in scripts with unsaved project. + if tool.Ifc.get_path(): + return True + cls.poll_message_set("IFC project is not saved.") + return False + def _execute(self, context): core.load_drawings(tool.Drawing) diff --git a/src/bonsai/bonsai/tool/project.py b/src/bonsai/bonsai/tool/project.py index bc2616fb15..def5255dfe 100644 --- a/src/bonsai/bonsai/tool/project.py +++ b/src/bonsai/bonsai/tool/project.py @@ -18,6 +18,7 @@ from __future__ import annotations import os +import shutil import bpy import ifcopenshell import ifcopenshell.api.document @@ -502,3 +503,11 @@ class Project(bonsai.core.tool.Project): d2 = v3 - v2 normals.append((v1, d1.cross(d2).normalized())) return normals + + @classmethod + def save_test_project(cls) -> None: + TMP = Path.cwd() / "test/files/temp" + # Clean up previous test project. + if TMP.exists(): + shutil.rmtree(TMP) + bpy.ops.bim.save_project(filepath=(TMP / "test_project.ifc").__str__(), should_save_as=True) diff --git a/src/bonsai/test/bim/feature/drawing.feature b/src/bonsai/test/bim/feature/drawing.feature index 084118b06b..6a24168e4b 100644 --- a/src/bonsai/test/bim/feature/drawing.feature +++ b/src/bonsai/test/bim/feature/drawing.feature @@ -157,13 +157,16 @@ Scenario: Remove drawing Scenario: Remove drawing - via object deletion Given an empty IFC project + And I save IFC project And I add a cube And the object "Cube" is selected And I look at the "Class" panel And I set the "Products" property to "IfcElement" And I set the "Class" property to "IfcWall" And I click "Assign IFC Class" - And I press "bim.add_drawing" + And I look at the "Drawings" panel + And I click "IMPORT" + And I click "ADD" And the variable "drawing" is "IfcStore.get_file().by_type('IfcAnnotation')[0].id()" And the collection "IfcAnnotation/PLAN_VIEW" exists And the object "IfcAnnotation/PLAN_VIEW" is selected diff --git a/src/bonsai/test/tool/test_drawing.py b/src/bonsai/test/tool/test_drawing.py index 9f499a01b1..040dfb8dbb 100644 --- a/src/bonsai/test/tool/test_drawing.py +++ b/src/bonsai/test/tool/test_drawing.py @@ -815,8 +815,9 @@ class TestDrawingMaintainingSheetPosition(NewFile): def test_run(self): props = tool.Drawing.get_document_props() bpy.ops.bim.create_project() + tool.Project.save_test_project() ifc = tool.Ifc.get() - sheet_path = Path.cwd() / "layouts" / "A01 - UNTITLED.svg" + sheet_path = Path(tool.Ifc.get_path()).parent / "layouts" / "A01 - UNTITLED.svg" bpy.ops.mesh.primitive_cube_add(size=10, location=(0, 0, 4)) obj = bpy.data.objects["Cube"] @@ -870,6 +871,7 @@ class TestDrawingMaintainingSheetPosition(NewFile): class TestDrawingStyles(NewFile): def setup_project_with_drawing(self): bpy.ops.bim.create_project() + tool.Project.save_test_project() bpy.ops.bim.load_drawings() bpy.ops.bim.add_drawing() ifc = tool.Ifc.get() From b8adddc6488065d26d8ced1cb8b64ee1ed6cf2b9 Mon Sep 17 00:00:00 2001 From: Esteban Dugueperoux <43169544+EstebanDugueperoux2@users.noreply.github.com> Date: Tue, 11 Nov 2025 18:25:00 +0100 Subject: [PATCH 052/657] fix test_number_formatting tests and add cases (#7332) --- src/ifcopenshell-python/ifcopenshell/util/selector.py | 3 ++- src/ifcopenshell-python/test/util/test_selector.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index 6e94fb1d06..5cc0eb6091 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -259,6 +259,7 @@ class FormatTransformer(lark.Transformer): ) def imperial_length(self, args): + args = list(filter(lambda x: x is not None, args)) if len(args) == 2: input_unit, output_unit = "foot", "foot" value, precision = args @@ -279,7 +280,7 @@ class FormatTransformer(lark.Transformer): return ifcopenshell.util.unit.format_length( float(value), int(precision), - suppress_zero_inches=suppress_zero_inches, + suppress_zero_inches=(suppress_zero_inches if suppress_zero_inches is not None else False), unit_system="imperial", input_unit=input_unit, output_unit=output_unit, diff --git a/src/ifcopenshell-python/test/util/test_selector.py b/src/ifcopenshell-python/test/util/test_selector.py index 36d200539a..7869d1c645 100644 --- a/src/ifcopenshell-python/test/util/test_selector.py +++ b/src/ifcopenshell-python/test/util/test_selector.py @@ -73,6 +73,10 @@ class TestFormat: assert subject.format('imperial_length("3.123", 2)') == "3' - 1 1/2\"" assert subject.format('imperial_length("123.123", 2, "inch", "foot")') == "10' - 3\"" assert subject.format('imperial_length("123.123", 2, "inch", "inch")') == '123"' + assert subject.format('imperial_length(3.0, 4, "foot", "foot", true)') == "3'" + assert subject.format('imperial_length(3.0, 4, "foot", "foot", True)') == "3'" + assert subject.format('imperial_length(3.0, 4, "foot", "foot", false)') == "3' - 0\"" + assert subject.format('imperial_length(3.0, 4, "foot", "foot", False)') == "3' - 0\"" class TestGetElementValue(test.bootstrap.IFC4): From 87d1b0637a8310df38ab182260dfdeabd48a1462 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 11 Nov 2025 12:47:58 -0600 Subject: [PATCH 053/657] Close #7294: Add target-view and scale classes to SVG parent group from IFC data Reads from EPset_Drawing.TargetView and EPset_Drawing.Scale to add CSS classes to the linework parent group for view-specific styling. --- .../bonsai/bim/module/drawing/operator.py | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 02bdf541ca..6250485b5e 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -932,6 +932,31 @@ class CreateDrawing(bpy.types.Operator): return svg_path + # Add target_view and scale classes to the parent group from IFC data + if group is not None: + existing_classes = group.get("class", "").split() + + # Add target_view class + if hasattr(self, 'cprops') and getattr(self.cprops, "target_view", None): + target_view_class = tool.Drawing.canonicalise_class_name(str(self.cprops.target_view)) + target_view_full_class = f"target-view-{target_view_class}" + if target_view_full_class not in existing_classes: + existing_classes.append(target_view_full_class) + + # Add scale class from EPset_Drawing.Scale + drawing_pset = ifcopenshell.util.element.get_pset(self.camera_element, "EPset_Drawing") + if drawing_pset and drawing_pset.get("Scale"): + scale_value = drawing_pset["Scale"] + # Remove "1/" prefix if it exists + if isinstance(scale_value, str) and scale_value.startswith("1/"): + scale_value = scale_value[2:] + scale_class = tool.Drawing.canonicalise_class_name(str(scale_value)) + scale_full_class = f"scale-{scale_class}" + if scale_full_class not in existing_classes: + existing_classes.append(scale_full_class) + + group.set("class", " ".join(existing_classes)) + if self.cprops.cut_mode == "BISECT": self.remove_cut_linework(root) self.generate_bisect_linework(context, root) @@ -1287,11 +1312,6 @@ class CreateDrawing(bpy.types.Operator): tool.Drawing.canonicalise_class_name(key) + "-" + tool.Drawing.canonicalise_class_name(str(value)) ) - # ─── Target View ─────────────────────────────────────────── - if getattr(self.cprops, "target_view", None): - target_view_class = tool.Drawing.canonicalise_class_name(str(self.cprops.target_view)) - classes.append(f"target-view-{target_view_class}") - return classes def is_manifold(self, obj) -> bool: From 91d67e6371e6ac9fbd2e01b208102f49d635d940 Mon Sep 17 00:00:00 2001 From: sboddy Date: Tue, 11 Nov 2025 19:57:52 +0000 Subject: [PATCH 054/657] Improve Merge/Mirror error messages to reduce confusion. (#6911) --- src/bonsai/bonsai/bim/module/model/workspace.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 0aa7f7113e..30acee46e3 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -1322,6 +1322,20 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator): if not bpy.context.selected_objects: return if self.active_material_usage == "LAYER2": + if len(bpy.context.selected_objects) != 2: + self.report( + {"ERROR"}, + "Exactly two LAYER2 items (walls, railings, etc) must be selected to perform a merge.", + ) + return + for item in bpy.context.selected_objects: + element = tool.Ifc.get_entity(item) + if tool.Model.get_usage_type(element) != "LAYER2": + self.report( + {"ERROR"}, + "Both selected items must be LAYER2 (walls, railings, etc) to perform a merge.", + ) + return bpy.ops.bim.merge_wall() else: if len(bpy.context.selected_objects) == 1: From 0df7117d3714f781c86ba246236d981ef84e34f6 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 11 Nov 2025 14:26:55 -0600 Subject: [PATCH 055/657] Sort annotations to ensure FILLAREA types are drawn first (at the bottom) --- src/bonsai/bonsai/bim/module/drawing/svgwriter.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py index 18900be5e5..96fe593a99 100644 --- a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py +++ b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py @@ -202,6 +202,15 @@ class SvgWriter: ) -> Self: self.precision = precision self.decimal_places = decimal_places + + # Sort annotations to ensure FILLAREA types are drawn first (at the bottom) + def sort_key(element): + predefined_type = ifcopenshell.util.element.get_predefined_type(element) + # Return 0 for FILLAREA to draw them first, 1 for everything else + return 0 if predefined_type == "FILL_AREA" else 1 + + annotations = sorted(annotations, key=sort_key) + for element in annotations: obj = tool.Ifc.get_object(element) if ( From d8ece32d62346472d226f7eef2999dc568838606 Mon Sep 17 00:00:00 2001 From: falken10vdl <33285113+falken10vdl@users.noreply.github.com> Date: Tue, 11 Nov 2025 23:33:19 +0100 Subject: [PATCH 056/657] Add markdown-it-py and mdurl dependencies for drawing module annotations (#7346) --- src/bonsai/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 9d06991485..6a021cb1a6 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -155,6 +155,9 @@ endif cd build && . env/$(VENV_ACTIVATE) && $(PIP) download six --dest=./wheels # Required by drawing module cd build && . env/$(VENV_ACTIVATE) && $(PIP) download lxml $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels + # Required by drawing module for markdown hyperlinks in annotations + cd build && . env/$(VENV_ACTIVATE) && $(PIP) download markdown-it-py --dest=./wheels + cd build && . env/$(VENV_ACTIVATE) && $(PIP) download mdurl --dest=./wheels # Required by qto and drawing module cd build && . env/$(VENV_ACTIVATE) && $(PIP) download shapely $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels # Required by the BIM type manager thumbnail generator From 85b3f831dc50987d04a2a7449c9e1725a22215f6 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 11 Nov 2025 20:17:37 -0600 Subject: [PATCH 057/657] copy query for aggregates into clipboard, to align with common UI pattern. --- .../bonsai/bim/module/aggregate/operator.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/aggregate/operator.py b/src/bonsai/bonsai/bim/module/aggregate/operator.py index 54147c9e34..ad7ac65312 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/operator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/operator.py @@ -321,6 +321,21 @@ class BIM_OT_select_aggregate(bpy.types.Operator): aggregate_obj.select_set(True) bpy.context.view_layer.objects.active = aggregate_obj + # copy selection query to clipboard + result = "" + for aggregate in all_parts: + aggregate_class = aggregate.is_a() + aggregate_name = aggregate.Name or "" + query = f'parent = "{aggregate_name}"' + if not result: + result = query + else: + result += f' + {query}' + + if result: + bpy.context.window_manager.clipboard = result + self.report({"INFO"}, f"({result}) was copied to the clipboard.") + self.one_level_deep = False # <-- forcibly reset return {"FINISHED"} From abef655482b83df00b2bb254776143d20a36be1c Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 11 Nov 2025 20:19:38 -0600 Subject: [PATCH 058/657] Fix #6938 - Have `parent` facet select the parent aggregate as well. --- .../ifcopenshell/util/selector.py | 15 ++++++--------- .../test/util/test_selector.py | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index 5cc0eb6091..a2ce6fb467 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -1028,13 +1028,6 @@ class FacetTransformer(lark.Transformer): ): parents.add(parent) - for rel in self.file.by_type("IfcRelVoidsElement"): - parent = rel.RelatingBuildingElement - if parent and ( - self.compare(parent.Name, comparison, value) or self.compare(parent.GlobalId, comparison, value) - ): - parents.add(parent) - for rel in self.file.by_type("IfcRelFillsElement"): parent = rel.RelatingOpeningElement if parent and ( @@ -1042,15 +1035,19 @@ class FacetTransformer(lark.Transformer): ): parents.add(parent) + # Get all children of the matched parents children: set[ifcopenshell.entity_instance] = set() for parent in parents: children |= set(ifcopenshell.util.element.get_decomposition(parent)) + # Combine parents and children into a single result set + result = parents | children + self.add_default_elements() if comparison == "=": - self.elements = self.elements & children + self.elements = self.elements & result else: - self.elements -= children + self.elements -= result def query(self, args): keys, comparison, value = args diff --git a/src/ifcopenshell-python/test/util/test_selector.py b/src/ifcopenshell-python/test/util/test_selector.py index 7869d1c645..41bf0649e7 100644 --- a/src/ifcopenshell-python/test/util/test_selector.py +++ b/src/ifcopenshell-python/test/util/test_selector.py @@ -306,7 +306,7 @@ class TestFilterElements(test.bootstrap.IFC4): assert subject.filter_elements(self.file, "IfcWall, parent=Project") == {element, element2, element3} assert subject.filter_elements(self.file, "IfcWall, parent=Space") == {element} assert subject.filter_elements(self.file, "IfcWall, parent=G") == {element, element2, element3} - assert subject.filter_elements(self.file, "IfcWall, parent=Element2") == {element3} + assert subject.filter_elements(self.file, "IfcWall, parent=Element2") == {element2, element3} assert subject.filter_elements(self.file, "IfcWall, parent=Space") == {element} def test_selecting_multiple_filter_groups(self): From 080222ffe6ea3e08c1f0a4fc45589cd9a085b1ce Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 12 Nov 2025 12:56:28 +0500 Subject: [PATCH 059/657] black . --- src/bonsai/bonsai/bim/module/aggregate/operator.py | 4 ++-- src/bonsai/bonsai/bim/module/drawing/operator.py | 8 ++++---- src/bonsai/bonsai/bim/module/drawing/svgwriter.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/aggregate/operator.py b/src/bonsai/bonsai/bim/module/aggregate/operator.py index ad7ac65312..e35b982d65 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/operator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/operator.py @@ -330,8 +330,8 @@ class BIM_OT_select_aggregate(bpy.types.Operator): if not result: result = query else: - result += f' + {query}' - + result += f" + {query}" + if result: bpy.context.window_manager.clipboard = result self.report({"INFO"}, f"({result}) was copied to the clipboard.") diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 6250485b5e..5077b0bbf0 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -935,14 +935,14 @@ class CreateDrawing(bpy.types.Operator): # Add target_view and scale classes to the parent group from IFC data if group is not None: existing_classes = group.get("class", "").split() - + # Add target_view class - if hasattr(self, 'cprops') and getattr(self.cprops, "target_view", None): + if hasattr(self, "cprops") and getattr(self.cprops, "target_view", None): target_view_class = tool.Drawing.canonicalise_class_name(str(self.cprops.target_view)) target_view_full_class = f"target-view-{target_view_class}" if target_view_full_class not in existing_classes: existing_classes.append(target_view_full_class) - + # Add scale class from EPset_Drawing.Scale drawing_pset = ifcopenshell.util.element.get_pset(self.camera_element, "EPset_Drawing") if drawing_pset and drawing_pset.get("Scale"): @@ -954,7 +954,7 @@ class CreateDrawing(bpy.types.Operator): scale_full_class = f"scale-{scale_class}" if scale_full_class not in existing_classes: existing_classes.append(scale_full_class) - + group.set("class", " ".join(existing_classes)) if self.cprops.cut_mode == "BISECT": diff --git a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py index 96fe593a99..37d39e502f 100644 --- a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py +++ b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py @@ -208,7 +208,7 @@ class SvgWriter: predefined_type = ifcopenshell.util.element.get_predefined_type(element) # Return 0 for FILLAREA to draw them first, 1 for everything else return 0 if predefined_type == "FILL_AREA" else 1 - + annotations = sorted(annotations, key=sort_key) for element in annotations: From e8eb5e4d0a1ec09db0ebe770fffe1963624704f1 Mon Sep 17 00:00:00 2001 From: kaplus Date: Tue, 11 Nov 2025 14:51:39 +0800 Subject: [PATCH 060/657] Add continue statement to skip duplicate calculations Skip general path to avoid duplicate calculations. --- src/ifc5d/ifc5d/qto.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ifc5d/ifc5d/qto.py b/src/ifc5d/ifc5d/qto.py index deb14f0a22..ceaa6e6204 100644 --- a/src/ifc5d/ifc5d/qto.py +++ b/src/ifc5d/ifc5d/qto.py @@ -106,6 +106,7 @@ def quantify(ifc_file: ifcopenshell.file, elements: set[ifcopenshell.entity_inst for sty in entity_supertypes(ifc_file.schema_identifier, ty): if qtos := queries.get(casenorm.get(sty)): calculator.calculate(ifc_file, group_elements, qtos, results) + continue # Skip general path to avoid duplicate calculations # Fallback: per-query evaluation for query, qtos in queries.items(): From 9adc8e484a8571fd6f442f4bcdd5452682086a23 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 12 Nov 2025 22:34:35 +0500 Subject: [PATCH 061/657] Bonsai - bump ifcopenshell build #7330 --- src/bonsai/Makefile | 2 +- src/ifcopenshell-python/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 6a021cb1a6..5b484f9942 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -87,7 +87,7 @@ BLENDER_PLATFORM:=windows-x64 endif # Current build commit hash. -OLD:=6924012 +OLD:=e8eb5e4 .PHONY: bump bump: ifndef NEW diff --git a/src/ifcopenshell-python/Makefile b/src/ifcopenshell-python/Makefile index c3565072b9..78370a46fb 100644 --- a/src/ifcopenshell-python/Makefile +++ b/src/ifcopenshell-python/Makefile @@ -69,7 +69,7 @@ PLATFORMTAG:=win_amd64 endif BINARY_VERSION:=0.8.4 -BUILD_COMMIT:=c9df87f +BUILD_COMMIT:=e8eb5e4 IOS_URL:=https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-$(PYNUMBER)-v$(BINARY_VERSION)-$(BUILD_COMMIT)-$(PLATFORM).zip IFCCONVERT_URL:=https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v$(BINARY_VERSION)-$(BUILD_COMMIT)-$(PLATFORM).zip From 96da78c670bfc83f1e967ac4616aa6ec260e6256 Mon Sep 17 00:00:00 2001 From: Richard Brice <37087370+RickBrice@users.noreply.github.com> Date: Wed, 12 Nov 2025 11:36:30 -0800 Subject: [PATCH 062/657] Updates IfcSectionedSurface so it works with taxonomy::function_item --- src/ifcgeom/mapping/IfcSectionedSurface.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/ifcgeom/mapping/IfcSectionedSurface.cpp b/src/ifcgeom/mapping/IfcSectionedSurface.cpp index c6b700f5e5..49fde15759 100644 --- a/src/ifcgeom/mapping/IfcSectionedSurface.cpp +++ b/src/ifcgeom/mapping/IfcSectionedSurface.cpp @@ -31,19 +31,20 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcSectionedSurface* inst) { std::vector cross_sections; auto dir = map(inst->Directrix()); - auto pwf = taxonomy::dcast(dir); - if (!pwf) { - // Only implement on alignment curves - Logger::Warning("IfcSectionedSurface is only implemented for piecewise function Directrix curves", inst); + auto fn = taxonomy::dcast(dir); + if (!fn) { + // Only implement on alignment curves + Logger::Warning("IfcSectionedSurface is only implemented for Directrix curves based on taxonomy::function_item", inst); return nullptr; - } + } + { auto css = inst->CrossSections(); auto csps = inst->CrossSectionPositions(); std::vector faces; - // The PointByDistanceExpressesions are factored out into (a) a cartesian offset relative to the + // The PointByDistanceExpressions are factored out into (a) a cartesian offset relative to the // reference frame along a certain curve location (b) the longitude. // The longitudes determine the range of the sweep and the offsets are interpolated in between @@ -109,7 +110,7 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcSectionedSurface* inst) { } } - return make_loft(settings_, inst, pwf, cross_sections); + return make_loft(settings_, inst, fn, cross_sections); } #endif From 6a7ecf7f58822c7b442cb05e9251beec277ef0a1 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Mon, 10 Nov 2025 21:21:52 +0100 Subject: [PATCH 063/657] cmake: Have a dedicated CMakeLists.txt for IfcGeomServer --- cmake/CMakeLists.txt | 21 +-------------------- src/ifcgeomserver/CMakeLists.txt | 9 +++++++++ 2 files changed, 10 insertions(+), 20 deletions(-) create mode 100644 src/ifcgeomserver/CMakeLists.txt diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0deeb512fe..5792954570 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1174,26 +1174,7 @@ endif(BUILD_CONVERT) # IfcGeomServer if(BUILD_GEOMSERVER) - - if(NOT WITH_OPENCASCADE) - message(FATAL_ERROR "Open CASCADE is required to build IfcGeomServer.") - endif() - - file(GLOB CPP_FILES ../src/ifcgeomserver/*.cpp) - file(GLOB H_FILES ../src/ifcgeomserver/*.h) - set(SOURCE_FILES ${CPP_FILES} ${H_FILES}) - add_executable(IfcGeomServer ${SOURCE_FILES}) - target_link_libraries(IfcGeomServer IfcGeom IfcParse ${kernel_libraries} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES}) - - if((NOT WIN32) AND BUILD_SHARED_LIBS) - SET_INSTALL_RPATHS(IfcGeomServer "${IFCOPENSHELL_LIBRARY_DIR};${OCC_LIBRARY_DIR};${Boost_LIBRARY_DIRS}") - endif() - - install(TARGETS IfcGeomServer - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) + add_subdirectory(../src/ifcgeomserver ifcgeomserver) endif(BUILD_GEOMSERVER) if(ADD_COMMIT_SHA) diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt new file mode 100644 index 0000000000..429d56c056 --- /dev/null +++ b/src/ifcgeomserver/CMakeLists.txt @@ -0,0 +1,9 @@ +find_package(Boost COMPONENTS chrono REQUIRED) + +file(GLOB CPP_FILES *.cpp) +file(GLOB H_FILES *.h) +set(SOURCE_FILES ${CPP_FILES} ${H_FILES}) +add_executable(IfcGeomServer ${SOURCE_FILES}) +target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OPENCASCADE_LIBRARIES}) + +install(TARGETS IfcGeomServer) \ No newline at end of file From a34e42a519cf24848b0bc15b7f120b0d08fea59d Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 13 Nov 2025 12:43:41 +0100 Subject: [PATCH 064/657] Handle infra sweeps of open loops #7338 --- src/ifcgeom/infra_sweep_helper.cpp | 26 ++++++++++++------- .../mapping/IfcArbitraryOpenProfileDef.cpp | 8 +++++- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/ifcgeom/infra_sweep_helper.cpp b/src/ifcgeom/infra_sweep_helper.cpp index f9d50f5b00..b9c9e598d9 100644 --- a/src/ifcgeom/infra_sweep_helper.cpp +++ b/src/ifcgeom/infra_sweep_helper.cpp @@ -136,11 +136,11 @@ taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, } auto interpolated_offset = lerp(offset_a, offset_b, relative_dist_along); - if (rotation_a && rotation_b) { - // @todo we don't support an overridden rotation on only one of the placements - // in which case we would need to lerp with the rotation component below in m4b. - interpolated_rotation = lerp(*rotation_a, *rotation_b, relative_dist_along); - } else { + if (rotation_a == rotation_b && rotation_a) { + // @todo we don't support an overridden rotation on only one of the placements + // in which case we would need to lerp with the rotation component below in m4b. + interpolated_rotation = lerp(*rotation_a, *rotation_b, relative_dist_along); + } else if (rotation_a != rotation_b) { Logger::Error("Direction vectors on cross section placements only supported when used consistently"); } taxonomy::loop::ptr w1, w2; @@ -165,10 +165,18 @@ taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, // auto p4 = (interpolated_rotation * p3).eval(); points.push_back(taxonomy::make(p3)); } - if (!points.empty()) { - // close polygon by referencing first point - // @todo add a closed=true|false to polygon_from_points()? - points.push_back(points.front()); + if (!points.empty()) { + if (!w1->closed.get_value_or(true) && !w2->closed.get_value_or(true)) { + // open polygon, add last point + auto& p1 = boost::get(w1->children.back()->end); + auto& p2 = boost::get(w2->children.back()->end); + auto p3 = (lerp(p1->ccomponents(), p2->ccomponents(), relative_dist_along) + interpolated_offset).eval(); + points.push_back(taxonomy::make(p3)); + } else if (w1->closed.get_value_or(true) && w2->closed.get_value_or(true)) { + // close polygon by referencing first point + // @todo add a closed=true|false to polygon_from_points()? + points.push_back(points.front()); + } } auto interpolated_loop = polygon_from_points(points); diff --git a/src/ifcgeom/mapping/IfcArbitraryOpenProfileDef.cpp b/src/ifcgeom/mapping/IfcArbitraryOpenProfileDef.cpp index ef39550354..e65152cb7f 100644 --- a/src/ifcgeom/mapping/IfcArbitraryOpenProfileDef.cpp +++ b/src/ifcgeom/mapping/IfcArbitraryOpenProfileDef.cpp @@ -24,5 +24,11 @@ using namespace ifcopenshell::geometry; taxonomy::ptr mapping::map_impl(const IfcSchema::IfcArbitraryOpenProfileDef* inst) { - return map(inst->Curve()); + auto mapped = map(inst->Curve()); + if (mapped->kind() == taxonomy::LOOP) { + auto r = taxonomy::loop::ptr((taxonomy::loop*)mapped->clone_()); + r->closed = false; + return r; + } + return mapped; } From 9491096485f9977a961ccc16ec162415c48a3169 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 12 Nov 2025 22:35:28 +0500 Subject: [PATCH 065/657] black . --- src/ifc5d/ifc5d/qto.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifc5d/ifc5d/qto.py b/src/ifc5d/ifc5d/qto.py index ceaa6e6204..67e5478ef1 100644 --- a/src/ifc5d/ifc5d/qto.py +++ b/src/ifc5d/ifc5d/qto.py @@ -106,7 +106,7 @@ def quantify(ifc_file: ifcopenshell.file, elements: set[ifcopenshell.entity_inst for sty in entity_supertypes(ifc_file.schema_identifier, ty): if qtos := queries.get(casenorm.get(sty)): calculator.calculate(ifc_file, group_elements, qtos, results) - continue # Skip general path to avoid duplicate calculations + continue # Skip general path to avoid duplicate calculations # Fallback: per-query evaluation for query, qtos in queries.items(): From 139a024d5fa43c3b5ead85a51189e999e54a0867 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 13 Nov 2025 18:15:38 +0500 Subject: [PATCH 066/657] dev_environment.py - bump Blender version to 5.0 --- src/bonsai/scripts/dev_environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/scripts/dev_environment.py b/src/bonsai/scripts/dev_environment.py index 96e647e102..714ced1ff8 100644 --- a/src/bonsai/scripts/dev_environment.py +++ b/src/bonsai/scripts/dev_environment.py @@ -38,7 +38,7 @@ REPO_PATH = r"" # BLENDER_PATH: Path to Blender's configuration folder. # Usually don't need to change, just ensure Blender version matches. -BLENDER_VERSION = "4.5" +BLENDER_VERSION = "5.0" if sys.platform == "win32": BLENDER_PATH = Path.home() / f"AppData/Roaming/Blender Foundation/Blender/{BLENDER_VERSION}" From b6f1119eaa0c4a4b2ad7f29ba63c9d37d54a150e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 13 Nov 2025 18:33:37 +0500 Subject: [PATCH 067/657] Fix failing product assignment test after 555621c --- src/bonsai/test/core/test_drawing.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/bonsai/test/core/test_drawing.py b/src/bonsai/test/core/test_drawing.py index 722a4f72d6..782d4750fe 100644 --- a/src/bonsai/test/core/test_drawing.py +++ b/src/bonsai/test/core/test_drawing.py @@ -63,7 +63,6 @@ class TestEditAssignedProduct: "drawing.unassign_product", relating_product="existing_product", related_object="element" ).should_be_called() ifc.run("drawing.assign_product", relating_product="product", related_object="element").should_be_called() - drawing.is_annotation_object_type("element", ("TEXT", "TEXT_LEADER")).should_be_called().will_return(True) drawing.disable_editing_assigned_product("obj").should_be_called() subject.edit_assigned_product(ifc, drawing, obj="obj", product="product") @@ -74,7 +73,6 @@ class TestEditAssignedProduct: "drawing.unassign_product", relating_product="existing_product", related_object="element" ).should_be_called() ifc.run("drawing.assign_product", relating_product="product", related_object="element").should_be_called() - drawing.is_annotation_object_type("element", ("TEXT", "TEXT_LEADER")).should_be_called().will_return(False) drawing.disable_editing_assigned_product("obj").should_be_called() subject.edit_assigned_product(ifc, drawing, obj="obj", product="product") From 339a0606c0073ca17729c34f70eebcab3ba5dc6d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 13 Nov 2025 18:35:19 +0500 Subject: [PATCH 068/657] Fix failing product assignment test after 5a511ee Moved code from `core`, added a warning so we could possibly narrow down #4014 in the future. --- src/bonsai/bonsai/core/drawing.py | 17 +++++++---------- src/bonsai/bonsai/core/tool.py | 1 + src/bonsai/bonsai/tool/drawing.py | 27 +++++++++++++++++++++++++++ src/bonsai/test/core/test_drawing.py | 4 ++-- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index 88c12295fa..f30c49974d 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -61,20 +61,17 @@ def edit_assigned_product( element = ifc.get_entity(obj) assert element - # Get ALL existing products, not just one - existing_products = [] - if hasattr(element, "HasAssignments"): - for rel in element.HasAssignments: - if rel.is_a("IfcRelAssignsToProduct"): - existing_products.append(rel.RelatingProduct) + # Temporarily accomodate existing bug and check for multiple products. + existing_products = drawing.get_assigned_product_workaround(element) + if existing_products != [product]: + + if product in existing_products: + assert product is not None + existing_products.remove(product) - # Only proceed if the assignment is different - if not (len(existing_products) == 1 and existing_products[0] == product): - # Unassign from ALL existing products for existing_product in existing_products: ifc.run("drawing.unassign_product", relating_product=existing_product, related_object=element) - # Assign to the new product if product: ifc.run("drawing.assign_product", relating_product=product, related_object=element) diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index acfce461df..830062d40a 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -343,6 +343,7 @@ class Drawing: def get_annotation_context(cls, target_view, object_type=None): pass def get_annotation_representation(cls, element_type): pass def get_assigned_product(cls, element): pass + def get_assigned_product_workaround(cls, element): pass def get_body_context(cls): pass def get_default_drawing_path(cls, name): pass def get_default_drawing_resource_path(cls, resource): pass diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 1de010694a..3a19be6ae5 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -893,6 +893,33 @@ class Drawing(bonsai.core.tool.Drawing): return axis return product + @classmethod + def get_assigned_product_workaround( + cls, element: ifcopenshell.entity_instance + ) -> list[ifcopenshell.entity_instance]: + """Get all products assigned to the element. + + A workaround allowing to unassign accumulated products until we properly resolve #4014. + In theory annotations should have more than one product assigned, + but there's still undefined bug causing that in some cases. + """ + + assigned_products: list[ifcopenshell.entity_instance] = [] + for rel in element.HasAssignments: + if not rel.is_a("IfcRelAssignsToProduct"): + continue + assigned_products.append(rel.RelatingProduct) + + if len(assigned_products) > 1: + print( + f"WARNING. Detected multiple assigned products ({len(assigned_products)}) for annotation '{element}'." + "\nIf you can reproduce this, please report it to Bonsai developers " + "at https://github.com/IfcOpenShell/IfcOpenShell/issues/4014." + "\nAssigned products:\n" + "\n".join([str(p) for p in assigned_products]) + ) + + return assigned_products + @classmethod def import_annotations_in_group(cls, group: ifcopenshell.entity_instance) -> None: elements = set( diff --git a/src/bonsai/test/core/test_drawing.py b/src/bonsai/test/core/test_drawing.py index 782d4750fe..957bd79f79 100644 --- a/src/bonsai/test/core/test_drawing.py +++ b/src/bonsai/test/core/test_drawing.py @@ -58,7 +58,7 @@ class TestDisableEditingAssignedProduct: class TestEditAssignedProduct: def test_text_annotation(self, ifc, drawing): ifc.get_entity("obj").should_be_called().will_return("element") - drawing.get_assigned_product("element").should_be_called().will_return("existing_product") + drawing.get_assigned_product_workaround("element").should_be_called().will_return(["existing_product"]) ifc.run( "drawing.unassign_product", relating_product="existing_product", related_object="element" ).should_be_called() @@ -68,7 +68,7 @@ class TestEditAssignedProduct: def test_non_text_annotation(self, ifc, drawing): ifc.get_entity("obj").should_be_called().will_return("element") - drawing.get_assigned_product("element").should_be_called().will_return("existing_product") + drawing.get_assigned_product_workaround("element").should_be_called().will_return(["existing_product"]) ifc.run( "drawing.unassign_product", relating_product="existing_product", related_object="element" ).should_be_called() From 8e2a310f92590f300f499fb7c7a44a113cdc8705 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 13 Nov 2025 18:42:53 +0500 Subject: [PATCH 069/657] stair generation - remove debug prints (b46136e) --- src/bonsai/bonsai/tool/model.py | 60 --------------------------------- 1 file changed, 60 deletions(-) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index d818deaf1f..e4685c54f4 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1431,28 +1431,6 @@ class Model(bonsai.core.tool.Model): nosing_overlap_offset = -V_(nosing_overlap, 0) first_tread_run = custom_first_last_tread_run[0] if custom_first_last_tread_run[0] is not None else tread_run - # ============ DEBUG LOGGING START ============ - print("\n" + "=" * 80) - print("STAIR GENERATION DEBUG - WOOD/STEEL TYPE") - print("=" * 80) - print(f"Input Parameters:") - print(f" stair_type: {stair_type}") - print(f" number_of_treads: {number_of_treads}") - print(f" height: {height}") - print(f" width: {width}") - print(f" tread_run: {tread_run}") - print(f" tread_depth: {tread_depth}") - print(f" custom_first_last_tread_run: {custom_first_last_tread_run}") - print(f" nosing_length: {nosing_length}") - print(f"\nCalculated Parameters:") - print(f" number_of_risers: {number_of_risers}") - print(f" tread_rise: {tread_rise}") - print(f" nosing_overlap: {nosing_overlap}") - print(f" nosing_tread_gap: {nosing_tread_gap}") - print(f" nosing_overlap_offset: {nosing_overlap_offset}") - print("=" * 80 + "\n") - # ============ DEBUG LOGGING END ============ - def define_generic_stair_treads(): vertices.append(Vector([0, 0])) nonlocal nosing_depth, nosing_overlap @@ -1521,10 +1499,6 @@ class Model(bonsai.core.tool.Model): current_offset += tread_offset if stair_type == "WOOD/STEEL": - print("\n" + "-" * 80) - print("WOOD/STEEL STAIR GENERATION PROCESS") - print("-" * 80) - assert tread_depth is not None # full tread rectangle @@ -1535,11 +1509,6 @@ class Model(bonsai.core.tool.Model): 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) - print(f"\nDefault Tread Configuration:") - print(f" default_tread_verts: {default_tread_verts}") - print(f" default_tread_offset: {default_tread_offset}") - print(f" tread rectangle size: ({tread_run + nosing_overlap}, {tread_depth})") - def get_tread_data(i): # Check if this is first or last tread with custom run current_tread_run = None @@ -1548,48 +1517,29 @@ class Model(bonsai.core.tool.Model): elif i == number_of_risers - 1 and custom_first_last_tread_run[1] is not None: current_tread_run = custom_first_last_tread_run[1] - print(f"\n Tread {i}:") - print(f" Is first tread: {i == 0}") - print(f" Is last tread: {i == number_of_risers - 1}") - print(f" current_tread_run: {current_tread_run}") - if current_tread_run is not None: tread_offset = default_tread_offset.copy() tread_offset.x = current_tread_run + nosing_tread_gap # Handle zero-width treads if current_tread_run == 0: - print(f" → Zero-width tread, skipping geometry") - print(f" → tread_offset: {tread_offset}") return tread_offset, () tread_verts = get_tread_verts(size=V_(current_tread_run + nosing_overlap, tread_depth)) - print(f" → Custom tread") - print(f" → tread_offset: {tread_offset}") - print(f" → tread_verts: {tread_verts}") - print(f" → tread rectangle size: ({current_tread_run + nosing_overlap}, {tread_depth})") return tread_offset, tread_verts - print(f" → Using default tread") - print(f" → tread_offset: {default_tread_offset}") return default_tread_offset, default_tread_verts # each tread is a separate shape cur_offset = V_(0, 0) tread_index = 0 - print(f"\nGenerating Treads:") - print(f" Number of risers to process: {number_of_risers}") - for i in range(number_of_risers): tread_offset, tread_verts = get_tread_data(i) # Skip adding vertices/edges for zero-width treads if tread_verts: cur_trade_shape = [v + cur_offset + nosing_overlap_offset for v in tread_verts] - print(f" Adding geometry at cur_offset: {cur_offset}") - print(f" Final vertices (after offset): {cur_trade_shape}") - vertices.extend(cur_trade_shape) cur_vertex = tread_index * 4 @@ -1600,19 +1550,9 @@ class Model(bonsai.core.tool.Model): (cur_vertex + 3, cur_vertex), ) edges.extend(verts_to_add) - print(f" Edges added: {verts_to_add}") tread_index += 1 - else: - print(f" Skipped (no geometry)") cur_offset += tread_offset - print(f" New cur_offset: {cur_offset}") - - print(f"\nFinal Results:") - print(f" Total vertices: {len(vertices)}") - print(f" Total edges: {len(edges)}") - print(f" Total treads generated: {tread_index}") - print("-" * 80 + "\n") elif stair_type == "GENERIC": define_generic_stair_treads() From 166ddb479917d14abc8ab6f4de18ac441044c35a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 13 Nov 2025 18:47:30 +0500 Subject: [PATCH 070/657] Fix parametric stair editing after 3617d11 #7355 --- src/bonsai/bonsai/bim/module/model/prop.py | 9 +++++++-- src/bonsai/bonsai/tool/model.py | 5 +++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index bea28085d5..fd5397fe36 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -628,14 +628,19 @@ class BIMStairProperties(PropertyGroup): def set_props_kwargs_from_ifc_data(self, kwargs): kwargs = tool.Model.convert_data_to_si_units(kwargs, self.non_si_units_props) + tread_run = kwargs.get("tread_run", 0.3) # Determine lock state based on whether custom treads match tread_run # If custom_tread_lock wasn't saved (old files), infer it from the data if "custom_tread_lock" not in kwargs: custom_treads = kwargs.get("custom_first_last_tread_run", (0.0, 0.0)) - tread_run = kwargs.get("tread_run", 0.3) # Lock is off if either custom tread differs from tread_run and is not 0 - kwargs["custom_tread_lock"] = not any(ct != 0.0 and ct != tread_run for ct in custom_treads) + kwargs["custom_tread_lock"] = all(ct not in (0.0, tread_run) for ct in custom_treads) + + if "custom_first_last_tread_run" in kwargs: + custom_treads = kwargs["custom_first_last_tread_run"] + custom_treads = [tread_run if v is None else v for v in custom_treads] + kwargs["custom_first_last_tread_run"] = custom_treads for prop_name in kwargs: setattr(self, prop_name, kwargs[prop_name]) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index e4685c54f4..0627b400ed 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -142,9 +142,10 @@ class Model(bonsai.core.tool.Model): for prop_name in data: if prop_name in non_si_props: continue - prop_value = data[prop_name] + # `None` is used by `custom_first_last_tread_run`. + prop_value: Iterable[float | None] | float = data[prop_name] if isinstance(prop_value, collections.abc.Iterable): - data[prop_name] = [v * si_conversion for v in prop_value] + data[prop_name] = [v if v is None else v * si_conversion for v in prop_value] else: data[prop_name] = prop_value * si_conversion return data From fe80620a5dec082282dbd7f35c10c17a675107b7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 13 Nov 2025 19:11:19 +0500 Subject: [PATCH 071/657] Add basic parametric objects tests #7355 --- src/bonsai/bonsai/bim/module/model/door.py | 2 +- src/bonsai/bonsai/bim/module/model/stair.py | 2 +- src/bonsai/bonsai/bim/module/model/window.py | 2 +- src/bonsai/test/bim/feature/model.feature | 45 ++++++++++++++++++++ src/bonsai/test/bim/test_feature.py | 18 +++++--- 5 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index f04fcd81b7..abd96f7319 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -478,7 +478,7 @@ def update_door_modifier_bmesh(context: bpy.types.Context) -> None: class BIM_OT_add_door(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "mesh.add_door" - bl_label = "Door" + bl_label = "Add Door" bl_options = {"REGISTER", "UNDO"} @classmethod diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index 71bfa97a9a..b359153f20 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -131,7 +131,7 @@ def update_ifc_stair_props(obj: bpy.types.Object) -> None: class BIM_OT_add_stair(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "mesh.add_stair" - bl_label = "Stair" + bl_label = "Add Stair" bl_options = {"REGISTER", "UNDO"} @classmethod diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index 76471c5ffe..1aebc8cd0b 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -399,7 +399,7 @@ def update_window_modifier_bmesh(context: bpy.types.Context) -> None: class BIM_OT_add_window(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "mesh.add_window" - bl_label = "Window" + bl_label = "Add Window" bl_options = {"REGISTER", "UNDO"} @classmethod diff --git a/src/bonsai/test/bim/feature/model.feature b/src/bonsai/test/bim/feature/model.feature index 98930639fa..9ca843c1c5 100644 --- a/src/bonsai/test/bim/feature/model.feature +++ b/src/bonsai/test/bim/feature/model.feature @@ -755,3 +755,48 @@ Scenario: Generate a space from cursor location And I press "bim.generate_space" Then the object "IfcSpace/Space" exists And the object "IfcSpace/Space" dimensions are "1,0.8,3" + +Scenario: Add and edit parametric stair + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I look at the "Class" panel + And I set the "Products" property to "IfcElement" + And I set the "Class" property to "IfcStairFlight" + And I click "Assign IFC Class" + And I look at the "Stair" panel + And I click "ADD" + And I look at the "Stair" panel + And I click "GREASEPENCIL" + And I look at the "Stair" panel + And I click "CHECKMARK" + +Scenario: Add and edit parametric window + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I look at the "Class" panel + And I set the "Products" property to "IfcElement" + And I set the "Class" property to "IfcWindow" + And I click "Assign IFC Class" + And I look at the "BIM_PT_window" panel + And I click "ADD" + And I look at the "BIM_PT_window" panel + And I click "GREASEPENCIL" + And I look at the "BIM_PT_window" panel + And I click "CHECKMARK" + +Scenario: Add and edit parametric door + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I look at the "Class" panel + And I set the "Products" property to "IfcElement" + And I set the "Class" property to "IfcDoor" + And I click "Assign IFC Class" + And I look at the "Door" panel + And I click "ADD" + And I look at the "Door" panel + And I click "GREASEPENCIL" + And I look at the "Door" panel + And I click "CHECKMARK" diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 2da27d5f9a..f8b71ac8a4 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -351,13 +351,19 @@ def the_brickschema_is_stubbed(): @given(parsers.parse('I look at the "{panel}" panel')) @when(parsers.parse('I look at the "{panel}" panel')) @then(parsers.parse('I look at the "{panel}" panel')) -def i_look_at_the_panel_panel(panel): - global ui_name_cache +def i_look_at_the_panel_panel(panel: str) -> None: + # Option to provide explicit panel name if panel names overlap. + panel_class = getattr(bpy.types, panel, None) + + if panel_class is None: + global ui_name_cache + create_ui_name_cache() + if panel not in ui_name_cache: + assert False, f"Panel '{panel}' not found in `bpy.types` and in {ui_name_cache}" + panel_class = getattr(bpy.types, ui_name_cache[panel]) + global panel_spy - create_ui_name_cache() - if panel not in ui_name_cache: - assert False, f"Panel {panel} not found in {ui_name_cache}" - panel_spy = PanelSpy(getattr(bpy.types, ui_name_cache[panel])) + panel_spy = PanelSpy(panel_class) panel_spy.refresh_spy() From d4e945222daab5b0dcdd4f273735791856eed64b Mon Sep 17 00:00:00 2001 From: Stephen Boddy Date: Fri, 14 Nov 2025 15:41:13 +0000 Subject: [PATCH 072/657] Fix #7348: test_normalize_path failure on CI/Linux. --- src/bonsai/test/tool/test_ifc.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/bonsai/test/tool/test_ifc.py b/src/bonsai/test/tool/test_ifc.py index dcd533a58d..0126f269b7 100644 --- a/src/bonsai/test/tool/test_ifc.py +++ b/src/bonsai/test/tool/test_ifc.py @@ -23,6 +23,7 @@ import bonsai.core.tool import bonsai.tool as tool import pytest import tempfile +import os from pathlib import Path from bonsai.tool.ifc import Ifc as subject @@ -318,8 +319,10 @@ class TestUri(test.bim.bootstrap.NewFile): def test_normalize_path(self): # Posix format. - path = r"test\test.txt" - assert subject.normalize_path(path) == "test/test.txt" + if os.name == 'nt': + # Limit to windows (#7348) + path = r"test\test.txt" + assert subject.normalize_path(path) == "test/test.txt" with tempfile.TemporaryDirectory() as tmp_dir: base_path = Path(tmp_dir) From 89314733ff95b014ed0fe30d5c03817e6000ae98 Mon Sep 17 00:00:00 2001 From: Stephen Boddy Date: Fri, 14 Nov 2025 15:47:50 +0000 Subject: [PATCH 073/657] blackwq --- src/bonsai/test/tool/test_ifc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/test/tool/test_ifc.py b/src/bonsai/test/tool/test_ifc.py index 0126f269b7..3cbd7bdc22 100644 --- a/src/bonsai/test/tool/test_ifc.py +++ b/src/bonsai/test/tool/test_ifc.py @@ -319,7 +319,7 @@ class TestUri(test.bim.bootstrap.NewFile): def test_normalize_path(self): # Posix format. - if os.name == 'nt': + if os.name == "nt": # Limit to windows (#7348) path = r"test\test.txt" assert subject.normalize_path(path) == "test/test.txt" From 36cb625c4e3c8e163d0cb26ff019c85a189d820c Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 15 Nov 2025 07:52:07 -0600 Subject: [PATCH 074/657] Fix #7353: Fix section annotations squashed in section views Add target view detection to generate_section_reference_points() to create appropriate geometry for each view type. Plan views get horizontal lines (clip_segment), section/elevation views get vertical lines (elevate_segment). --- src/bonsai/bonsai/tool/drawing.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 3a19be6ae5..73c1c2c442 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -1732,11 +1732,22 @@ class Drawing(bonsai.core.tool.Drawing): im = camera.matrix_world.inverted() v1, v2 = [im @ Vector((m @ np.append(v, 1.0))[:3]) for v in [v1, v2]] + target_view = cls.get_drawing_target_view(drawing) bounds = helper.ortho_view_frame(camera.data) - if not (points := helper.clip_segment(bounds, [v1, v2])): + + if target_view in ("PLAN_VIEW", "REFLECTED_PLAN_VIEW"): + # For plan views, clip to XY bounds and set Z=0 + if not (points := helper.clip_segment(bounds, [v1, v2])): + return + for v in points: + v.z = 0 + elif target_view in ("ELEVATION_VIEW", "SECTION_VIEW"): + # For section/elevation views, elevate the segment vertically + if not (points := helper.elevate_segment(bounds, [v1, v2])): + return + else: return - for v in points: - v.z = 0 + return points @classmethod From dc0b73f46f6c2d5de0dbb9208f8b47b388f1e528 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 15 Nov 2025 08:06:06 -0600 Subject: [PATCH 075/657] Ensure annotation is in front of a RCP camera. --- src/bonsai/bonsai/tool/drawing.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 73c1c2c442..bb0b9a374c 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -2009,8 +2009,16 @@ class Drawing(bonsai.core.tool.Drawing): if matrix_world is None: # Use normalized camera matrix (without scale) for RCP compatibility matrix_world = cls.get_camera_matrix(camera) - annotation_offset = Vector((0, 0, -camera.data.clip_start - 0.05)) - annotation_offset = camera.matrix_world.to_quaternion() @ annotation_offset + + # Check if this is an RCP (reflected ceiling plan) by checking for negative scale + camera_scale = camera.matrix_world.to_scale() + is_rcp = camera_scale.x < 0 or camera_scale.y < 0 or camera_scale.z < 0 + + # For RCP, the offset needs to be positive instead of negative + # because the Z axis is flipped 180° in get_camera_matrix + offset_direction = 1 if is_rcp else -1 + annotation_offset = Vector((0, 0, offset_direction * (camera.data.clip_start + 0.05))) + annotation_offset = matrix_world.to_quaternion() @ annotation_offset matrix_world.translation += annotation_offset return matrix_world From f32ccec154b2672dc5d601e3706cde2fab31af41 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 15 Nov 2025 08:25:27 -0600 Subject: [PATCH 076/657] Fix #7364: If you change the width/height of a drawing camera it doesn't scale the text decoration. --- src/bonsai/bonsai/bim/module/drawing/decoration.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 6251cf1c87..edc51eb231 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -172,16 +172,12 @@ class BaseDecorator: def get_camera_width_mm(self): # Horrific prototype code to ensure bgl draws at drawing scales # https://blender.stackexchange.com/questions/16493/is-there-a-way-to-fit-the-viewport-to-the-current-field-of-view - def is_landscape(render): - return render.resolution_x > render.resolution_y - camera = bpy.context.scene.camera render = bpy.context.scene.render - if is_landscape(render): - camera_width_model = camera.data.ortho_scale - else: - camera_width_model = camera.data.ortho_scale / render.resolution_y * render.resolution_x - + + # Always use the camera's ortho_scale as the width in model space + camera_width_model = camera.data.ortho_scale + scale = tool.Drawing.get_scale_ratio(tool.Drawing.get_diagram_scale(camera)["Scale"]) camera_width_mm = scale * camera_width_model return camera_width_mm From 40cf322fb448c3fabb74e0a7444f9c292b6e11f8 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 15 Nov 2025 09:58:37 -0600 Subject: [PATCH 077/657] =?UTF-8?q?fall=20back=20to=20a=20Windows=20system?= =?UTF-8?q?=20font=20if=20the=20font=20isn=E2=80=99t=20found=20in=20addon?= =?UTF-8?q?=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonsai/bim/module/drawing/decoration.py | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index edc51eb231..f91b0085eb 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -19,6 +19,7 @@ import gpu import bpy import blf +import os import math import bmesh import shapely @@ -1980,13 +1981,38 @@ class DecorationsHandler: for object_type in ("SLOPE_ANGLE", "SLOPE_FRACTION", "SLOPE_PERCENT"): self.decorators[object_type] = self.decorators["FALL"] self.decorators["MULTI_SYMBOL"] = self.decorators["SYMBOL"] + prefs = tool.Blender.get_addon_preferences() + if drawing_font := prefs.doc.drawing_font: + # Try Blender addon font folder drawing_font_path = tool.Blender.get_data_dir_path(Path("fonts") / drawing_font) - if drawing_font_path.is_file(): - font_id = blf.load(drawing_font_path.__str__()) - for decorator in self.decorators.values(): - decorator.font_id = font_id + + if not drawing_font_path.is_file(): + # 2 — Fallback search: Windows font directories + # TODO - Linux + win_font_dirs = [ + Path(os.environ.get("WINDIR", "C:\\Windows")) / "Fonts", + # Add any custom enterprise paths here if needed + ] + + found_font = None + for font_dir in win_font_dirs: + candidate = font_dir / drawing_font + if candidate.is_file(): + found_font = candidate + break + + if found_font: + drawing_font_path = found_font + else: + print(f"[BIM] Font '{drawing_font}' not found in addon or Windows fonts.") + return # Bail out without assigning fonts + + font_id = blf.load(str(drawing_font_path)) + + for decorator in self.decorators.values(): + decorator.font_id = font_id def __call__(self, context): # Check if any viewport is in local view - skip decorations if so From bb1127d815d7f5651221a68f056dee180fdc0e46 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 15 Nov 2025 19:10:15 -0600 Subject: [PATCH 078/657] prompt for Blender version --- src/bonsai/scripts/dev_environment.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bonsai/scripts/dev_environment.py b/src/bonsai/scripts/dev_environment.py index 714ced1ff8..4598d0bf49 100644 --- a/src/bonsai/scripts/dev_environment.py +++ b/src/bonsai/scripts/dev_environment.py @@ -37,8 +37,8 @@ if sys.platform not in available_platforms: REPO_PATH = r"" # BLENDER_PATH: Path to Blender's configuration folder. -# Usually don't need to change, just ensure Blender version matches. -BLENDER_VERSION = "5.0" +# User will be prompted for the Blender version. +BLENDER_VERSION = input("Enter your Blender version (e.g., 4.5, 4.2, 3.6): ").strip() if sys.platform == "win32": BLENDER_PATH = Path.home() / f"AppData/Roaming/Blender Foundation/Blender/{BLENDER_VERSION}" From a038fa62baadff8793f8a17e9367b9be03d283a4 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 16 Nov 2025 15:00:10 -0600 Subject: [PATCH 079/657] Use spacebar to toggle on/off direct profile edit mode. Works on IfcExtrudedSolids, LAYER2 objects(slabs), and axis-based geometry. --- .../bonsai/bim/module/geometry/__init__.py | 5 + .../bonsai/bim/module/geometry/operator.py | 253 ++++++++++++++++++ 2 files changed, 258 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/geometry/__init__.py b/src/bonsai/bonsai/bim/module/geometry/__init__.py index 77a2c8b63b..de9a75fbc7 100644 --- a/src/bonsai/bonsai/bim/module/geometry/__init__.py +++ b/src/bonsai/bonsai/bim/module/geometry/__init__.py @@ -30,6 +30,7 @@ classes = ( operator.AddSweptAreaSolidItem, operator.AssignRepresentationLayer, operator.CopyRepresentation, + operator.DirectProfileEdit, operator.DisableEditingRepresentationItemShapeAspect, operator.DisableEditingRepresentationItemStyle, operator.DisableEditingRepresentationItems, @@ -160,6 +161,8 @@ def register(): addon_keymaps.append((km, kmi)) kmi = km.keymap_items.new("bim.override_mode_set_edit", "TAB", "PRESS") addon_keymaps.append((km, kmi)) + kmi = km.keymap_items.new("bim.direct_profile_edit", "SPACE", "PRESS") + addon_keymaps.append((km, kmi)) # Deletion. kmi = km.keymap_items.new("bim.override_object_delete", "X", "PRESS") addon_keymaps.append((km, kmi)) @@ -178,6 +181,8 @@ def register(): kmi = km.keymap_items.new("bim.override_mode_set_object", "TAB", "PRESS") kmi.properties.should_save = True addon_keymaps.append((km, kmi)) + kmi = km.keymap_items.new("bim.direct_profile_edit", "SPACE", "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)) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 10f631e58b..66f5d50d48 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2544,6 +2544,259 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): props.is_changing_mode = False + +class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.direct_profile_edit" + bl_label = "IFC Direct Profile Edit" + bl_description = "Directly enter profile/axis edit mode, or exit back to object mode" + bl_options = {"REGISTER", "UNDO"} + + @classmethod + def poll(cls, context): + # Only allow in OBJECT or EDIT modes + if context.mode not in ("OBJECT", "EDIT_MESH", "EDIT_CURVE"): + return False + + # Must have an active object + if not context.active_object: + return False + + # In edit mode, we're good to go (we'll exit) + if context.mode in ("EDIT_MESH", "EDIT_CURVE"): + return True + + # In object mode, check if it's an editable object type + obj = context.active_object + + # Only mesh and curve objects are editable + if obj.type not in ("MESH", "CURVE"): + return False + + return True + + def _execute(self, context): + # Ensure we're only working with the active object + # Deselect all other objects if multiple are selected + active_obj = context.active_object + if active_obj and context.mode == "OBJECT": + if len(context.selected_objects) > 1: + self.report({"WARNING"}, "Currently Direct Profile Edit only works on one object at a time. Operating on active object only.") + bpy.ops.object.select_all(action='DESELECT') + active_obj.select_set(True) + context.view_layer.objects.active = active_obj + + # If we're already in edit mode, exit to object mode and SAVE changes + if context.mode in ("EDIT_MESH", "EDIT_CURVE"): + return self.handle_exit_edit_mode(context) + + # We're in object mode, try to enter profile/axis edit + return self.handle_enter_edit_mode(context) + + def handle_exit_edit_mode(self, context): + """Handle exiting from edit mode and saving changes.""" + obj = context.active_object + if not obj: + return {"CANCELLED"} + + # Check if we're editing a representation item + if tool.Geometry.is_representation_item(obj): + return self.exit_item_edit_mode(context, obj) + + # Check if we're editing an element-level profile or axis + element = tool.Ifc.get_entity(obj) + if element and tool.Geometry.has_mesh_properties(obj.data): + return self.exit_element_edit_mode(context, obj, element) + + # For other edit modes, use standard operator + return bpy.ops.bim.override_mode_set_object() + + def exit_item_edit_mode(self, context, obj): + """Exit from SweptAreaSolid item editing.""" + try: + item = tool.Geometry.get_active_representation(obj) + if not item or not item.is_a("IfcSweptAreaSolid"): + return bpy.ops.bim.override_mode_set_object() + + # Use the standard save workflow for items + from bonsai.bim.module.model.decorator import ProfileDecorator + ProfileDecorator.uninstall() + tool.Blender.toggle_edit_mode(context) + + profile = tool.Model.export_profile(obj) + if not profile: + def msg(self, context): + self.layout.label(text="INVALID PROFILE") + context.window_manager.popup_menu(msg, title="Error", icon="ERROR") + tool.Blender.toggle_edit_mode(context) + ProfileDecorator.install(context) + return {"CANCELLED"} + + old_profile = item.SweptArea + profile.ProfileName = old_profile.ProfileName + + ifc_file = tool.Ifc.get() + for inverse in ifc_file.get_inverse(old_profile): + ifcopenshell.util.element.replace_attribute(inverse, old_profile, profile) + + tool.Profile.replace_profile_in_profiles_ui(old_profile.id(), profile.id()) + ifcopenshell.util.element.remove_deep2(ifc_file, old_profile) + + props = tool.Geometry.get_geometry_props() + if props.representation_obj: + tool.Geometry.reload_representation(props.representation_obj) + tool.Geometry.disable_item_mode() + + return {"FINISHED"} + except Exception as e: + self.report({"ERROR"}, f"Failed to save item changes: {str(e)}") + return {"CANCELLED"} + + def exit_element_edit_mode(self, context, obj, element): + """Exit from element-level profile or axis editing.""" + try: + mesh_props = tool.Geometry.get_mesh_props(obj.data) + + # Check if we're editing axis + if mesh_props.subshape_type == "AXIS": + return bpy.ops.bim.edit_extrusion_axis() + + # Otherwise, we're editing a profile + body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") + if body: + body = ifcopenshell.util.representation.resolve_representation(body) + extrusion = tool.Model.get_extrusion(body) + if extrusion: + return bpy.ops.bim.edit_extrusion_profile() + except Exception as e: + self.report({"ERROR"}, f"Failed to save profile/axis changes: {str(e)}") + return {"CANCELLED"} + + # Fallback to standard operator + return bpy.ops.bim.override_mode_set_object() + + def handle_enter_edit_mode(self, context): + """Handle entering edit mode from object mode.""" + obj = context.active_object + if not obj: + return {"CANCELLED"} + + # Check if object has mesh or curve data + if not hasattr(obj, 'data') or not obj.data: + self.report({"INFO"}, "Object has no editable data") + return {"CANCELLED"} + + element = tool.Ifc.get_entity(obj) + if not element: + self.report({"INFO"}, "Active object is not an IFC element") + return {"CANCELLED"} + + # Check if this is a LAYER2 element (wall, railing, etc.) + try: + material_usage = tool.Model.get_usage_type(element) + except: + material_usage = None + + if material_usage == "LAYER2": + self.report({"ERROR"}, "LAYER2 elements (walls, railings, etc.) cannot use profile editing.") + return {"CANCELLED"} + + # Try to get representation + try: + representation = tool.Geometry.get_active_representation(obj) + except: + representation = None + + if not representation: + self.report({"INFO"}, "Object has no active representation") + return {"CANCELLED"} + + # Check for PROFILE usage (beams, columns, members) - should edit axis + if material_usage == "PROFILE": + try: + return bpy.ops.bim.enable_editing_extrusion_axis() + except Exception as e: + self.report({"ERROR"}, f"Failed to enable axis editing: {str(e)}") + return {"CANCELLED"} + + # Check if this is an element with an extrusion profile (LAYER3, etc) + try: + body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") + if body: + body = ifcopenshell.util.representation.resolve_representation(body) + extrusion = tool.Model.get_extrusion(body) + if extrusion and not tool.Geometry.is_representation_item(obj): + return bpy.ops.bim.enable_editing_extrusion_profile() + except Exception as e: + self.report({"ERROR"}, f"Failed to enable profile editing: {str(e)}") + return {"CANCELLED"} + + # Otherwise, try to enter item mode and edit SweptAreaSolid + return self.enter_item_edit_mode(context, obj) + + def enter_item_edit_mode(self, context, obj): + """Enter item mode for SweptAreaSolid editing.""" + try: + props = tool.Geometry.get_geometry_props() + if not props.representation_obj: + bpy.ops.bim.import_representation_items() + props = tool.Geometry.get_geometry_props() + + # Find the SweptAreaSolid item + swept_solid_obj = None + for item_obj_data in props.item_objs: + item_obj = item_obj_data.obj + if not item_obj: + continue + try: + item = tool.Geometry.get_active_representation(item_obj) + if item and item.is_a("IfcSweptAreaSolid"): + swept_solid_obj = item_obj + break + except: + continue + + if not swept_solid_obj: + self.report({"INFO"}, "No editable SweptAreaSolid item found") + tool.Geometry.disable_item_mode() + return {"CANCELLED"} + + # Select and activate the swept solid object + bpy.ops.object.select_all(action='DESELECT') + swept_solid_obj.select_set(True) + context.view_layer.objects.active = swept_solid_obj + + # Import the profile to prepare for editing + item = tool.Geometry.get_active_representation(swept_solid_obj) + if item and item.is_a("IfcSweptAreaSolid"): + profile = item.SweptArea + res = tool.Model.import_profile(profile, obj=swept_solid_obj) + if res is None: + self.report({"ERROR"}, "Couldn't import profile for editing") + tool.Geometry.disable_item_mode() + return {"CANCELLED"} + + tool.Ifc.link(item, swept_solid_obj.data) + tool.Blender.toggle_edit_mode(context) + + from bonsai.bim.module.model.decorator import ProfileDecorator + ProfileDecorator.install(context) + + if not bpy.app.background: + tool.Blender.set_viewport_tool("bim.cad_tool") + + return {"FINISHED"} + except Exception as e: + self.report({"ERROR"}, f"Failed to enter item edit mode: {str(e)}") + try: + tool.Geometry.disable_item_mode() + except: + pass + return {"CANCELLED"} + + return {"CANCELLED"} + + + class FlipObject(bpy.types.Operator): bl_idname = "bim.flip_object" bl_label = "Flip Object" From 4a5f1b01a133741625bfd28f7d1e6cbe1e923066 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 11:08:47 +0500 Subject: [PATCH 080/657] black . --- .../bonsai/bim/module/drawing/decoration.py | 4 +- .../bonsai/bim/module/geometry/operator.py | 93 ++++++++++--------- src/bonsai/bonsai/tool/drawing.py | 4 +- 3 files changed, 53 insertions(+), 48 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index f91b0085eb..1735b32575 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -175,10 +175,10 @@ class BaseDecorator: # https://blender.stackexchange.com/questions/16493/is-there-a-way-to-fit-the-viewport-to-the-current-field-of-view camera = bpy.context.scene.camera render = bpy.context.scene.render - + # Always use the camera's ortho_scale as the width in model space camera_width_model = camera.data.ortho_scale - + scale = tool.Drawing.get_scale_ratio(tool.Drawing.get_diagram_scale(camera)["Scale"]) camera_width_mm = scale * camera_width_model return camera_width_mm diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 66f5d50d48..248a226244 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2544,7 +2544,6 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): props.is_changing_mode = False - class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.direct_profile_edit" bl_label = "IFC Direct Profile Edit" @@ -2556,22 +2555,22 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): # Only allow in OBJECT or EDIT modes if context.mode not in ("OBJECT", "EDIT_MESH", "EDIT_CURVE"): return False - + # Must have an active object if not context.active_object: return False - + # In edit mode, we're good to go (we'll exit) if context.mode in ("EDIT_MESH", "EDIT_CURVE"): return True - + # In object mode, check if it's an editable object type obj = context.active_object - + # Only mesh and curve objects are editable if obj.type not in ("MESH", "CURVE"): return False - + return True def _execute(self, context): @@ -2580,15 +2579,18 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): active_obj = context.active_object if active_obj and context.mode == "OBJECT": if len(context.selected_objects) > 1: - self.report({"WARNING"}, "Currently Direct Profile Edit only works on one object at a time. Operating on active object only.") - bpy.ops.object.select_all(action='DESELECT') + self.report( + {"WARNING"}, + "Currently Direct Profile Edit only works on one object at a time. Operating on active object only.", + ) + bpy.ops.object.select_all(action="DESELECT") active_obj.select_set(True) context.view_layer.objects.active = active_obj - + # If we're already in edit mode, exit to object mode and SAVE changes if context.mode in ("EDIT_MESH", "EDIT_CURVE"): return self.handle_exit_edit_mode(context) - + # We're in object mode, try to enter profile/axis edit return self.handle_enter_edit_mode(context) @@ -2597,16 +2599,16 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + # Check if we're editing a representation item if tool.Geometry.is_representation_item(obj): return self.exit_item_edit_mode(context, obj) - + # Check if we're editing an element-level profile or axis element = tool.Ifc.get_entity(obj) if element and tool.Geometry.has_mesh_properties(obj.data): return self.exit_element_edit_mode(context, obj, element) - + # For other edit modes, use standard operator return bpy.ops.bim.override_mode_set_object() @@ -2616,36 +2618,39 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): item = tool.Geometry.get_active_representation(obj) if not item or not item.is_a("IfcSweptAreaSolid"): return bpy.ops.bim.override_mode_set_object() - + # Use the standard save workflow for items from bonsai.bim.module.model.decorator import ProfileDecorator + ProfileDecorator.uninstall() tool.Blender.toggle_edit_mode(context) - + profile = tool.Model.export_profile(obj) if not profile: + def msg(self, context): self.layout.label(text="INVALID PROFILE") + context.window_manager.popup_menu(msg, title="Error", icon="ERROR") tool.Blender.toggle_edit_mode(context) ProfileDecorator.install(context) return {"CANCELLED"} - + old_profile = item.SweptArea profile.ProfileName = old_profile.ProfileName - + ifc_file = tool.Ifc.get() for inverse in ifc_file.get_inverse(old_profile): ifcopenshell.util.element.replace_attribute(inverse, old_profile, profile) - + tool.Profile.replace_profile_in_profiles_ui(old_profile.id(), profile.id()) ifcopenshell.util.element.remove_deep2(ifc_file, old_profile) - + props = tool.Geometry.get_geometry_props() if props.representation_obj: tool.Geometry.reload_representation(props.representation_obj) tool.Geometry.disable_item_mode() - + return {"FINISHED"} except Exception as e: self.report({"ERROR"}, f"Failed to save item changes: {str(e)}") @@ -2655,11 +2660,11 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): """Exit from element-level profile or axis editing.""" try: mesh_props = tool.Geometry.get_mesh_props(obj.data) - + # Check if we're editing axis if mesh_props.subshape_type == "AXIS": return bpy.ops.bim.edit_extrusion_axis() - + # Otherwise, we're editing a profile body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if body: @@ -2670,7 +2675,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to save profile/axis changes: {str(e)}") return {"CANCELLED"} - + # Fallback to standard operator return bpy.ops.bim.override_mode_set_object() @@ -2679,37 +2684,37 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + # Check if object has mesh or curve data - if not hasattr(obj, 'data') or not obj.data: + if not hasattr(obj, "data") or not obj.data: self.report({"INFO"}, "Object has no editable data") return {"CANCELLED"} - + element = tool.Ifc.get_entity(obj) if not element: self.report({"INFO"}, "Active object is not an IFC element") return {"CANCELLED"} - + # Check if this is a LAYER2 element (wall, railing, etc.) try: material_usage = tool.Model.get_usage_type(element) except: material_usage = None - + if material_usage == "LAYER2": self.report({"ERROR"}, "LAYER2 elements (walls, railings, etc.) cannot use profile editing.") return {"CANCELLED"} - + # Try to get representation try: representation = tool.Geometry.get_active_representation(obj) except: representation = None - + if not representation: self.report({"INFO"}, "Object has no active representation") return {"CANCELLED"} - + # Check for PROFILE usage (beams, columns, members) - should edit axis if material_usage == "PROFILE": try: @@ -2717,7 +2722,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to enable axis editing: {str(e)}") return {"CANCELLED"} - + # Check if this is an element with an extrusion profile (LAYER3, etc) try: body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") @@ -2729,7 +2734,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to enable profile editing: {str(e)}") return {"CANCELLED"} - + # Otherwise, try to enter item mode and edit SweptAreaSolid return self.enter_item_edit_mode(context, obj) @@ -2740,7 +2745,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): if not props.representation_obj: bpy.ops.bim.import_representation_items() props = tool.Geometry.get_geometry_props() - + # Find the SweptAreaSolid item swept_solid_obj = None for item_obj_data in props.item_objs: @@ -2754,17 +2759,17 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): break except: continue - + if not swept_solid_obj: self.report({"INFO"}, "No editable SweptAreaSolid item found") tool.Geometry.disable_item_mode() return {"CANCELLED"} - + # Select and activate the swept solid object - bpy.ops.object.select_all(action='DESELECT') + bpy.ops.object.select_all(action="DESELECT") swept_solid_obj.select_set(True) context.view_layer.objects.active = swept_solid_obj - + # Import the profile to prepare for editing item = tool.Geometry.get_active_representation(swept_solid_obj) if item and item.is_a("IfcSweptAreaSolid"): @@ -2774,16 +2779,17 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): self.report({"ERROR"}, "Couldn't import profile for editing") tool.Geometry.disable_item_mode() return {"CANCELLED"} - + tool.Ifc.link(item, swept_solid_obj.data) tool.Blender.toggle_edit_mode(context) - + from bonsai.bim.module.model.decorator import ProfileDecorator + ProfileDecorator.install(context) - + if not bpy.app.background: tool.Blender.set_viewport_tool("bim.cad_tool") - + return {"FINISHED"} except Exception as e: self.report({"ERROR"}, f"Failed to enter item edit mode: {str(e)}") @@ -2792,9 +2798,8 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except: pass return {"CANCELLED"} - - return {"CANCELLED"} + return {"CANCELLED"} class FlipObject(bpy.types.Operator): diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index bb0b9a374c..00fd6c9505 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -2009,11 +2009,11 @@ class Drawing(bonsai.core.tool.Drawing): if matrix_world is None: # Use normalized camera matrix (without scale) for RCP compatibility matrix_world = cls.get_camera_matrix(camera) - + # Check if this is an RCP (reflected ceiling plan) by checking for negative scale camera_scale = camera.matrix_world.to_scale() is_rcp = camera_scale.x < 0 or camera_scale.y < 0 or camera_scale.z < 0 - + # For RCP, the offset needs to be positive instead of negative # because the Z axis is flipped 180° in get_camera_matrix offset_direction = 1 if is_rcp else -1 From 5d7407e2b90f7a6dca73cc4889b25a533e1abb4d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 14 Nov 2025 18:17:56 +0500 Subject: [PATCH 081/657] preferences descriptions - adjust line length --- src/bonsai/bonsai/bim/ui.py | 44 +++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index aad6479c01..48c00a4f2e 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -324,23 +324,38 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): bl_idname = tool.Blender.get_blender_addon_package_name() svg2pdf_command: StringProperty( name="SVG to PDF Command", - description='print sheet to pdf together with svg. Leave blank svg is just created, E.g. [["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "svg", "-o", "pdf"]]', + description=( + "print sheet to pdf together with svg. Leave blank svg is just created, " + 'E.g. [["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "svg", "-o", "pdf"]]' + ), ) svg2dxf_command: StringProperty( name="SVG to DXF Command", - description='E.g. [["inkscape", "svg", "-o", "eps"], ["pstoedit", "-dt", "-f", "dxf:-polyaslines -mm", "eps", "dxf", "-psarg", "-dNOSAFER"]]', + description=( + 'E.g. `[["inkscape", "svg", "-o", "eps"], ' + '["pstoedit", "-dt", "-f", "dxf:-polyaslines -mm", "eps", "dxf", "-psarg", "-dNOSAFER"]]`' + ), ) svg_command: StringProperty( name="SVG Command", - description='Software to open generated drawing and sheets. Leave blank system default for .svg is used E.g. [["path to application eg. /Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", "path"]]', + description=( + "Software to open generated drawing and sheets. Leave blank system default for .svg is used " + 'E.g. [["path to application eg. /Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", "path"]]' + ), ) layout_svg_command: StringProperty( name="Layout SVG Command", - description='Software to open layouts, before generated. Leave blank system default for .svg is used E.g. [["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "path"]]', + description=( + "Software to open layouts, before generated. Leave blank system default for .svg is used. " + 'E.g. `[["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "path"]]`' + ), ) pdf_command: StringProperty( name="PDF Command", - description='Software to open .pdf, leave blank uses system default. E.g. [["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "path"]]', + description=( + "Software to open .pdf, leave blank uses system default. " + 'E.g. `[["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "path"]]`' + ), ) spreadsheet_command: StringProperty(name="Spreadsheet Command", description='E.g. [["libreoffice", "path"]]') should_hide_empty_props: BoolProperty( @@ -351,12 +366,18 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): should_setup_workspace: BoolProperty( name="Setup Workspace Layout for BIM", default=True, - description="If enabled, this will add a default workspace dedicated to working with BIM models.\nIt is recommended to keep this `Enabled`", + description=( + "If enabled, this will add a default workspace dedicated to working with BIM models.\n" + "It is recommended to keep this `Enabled`" + ), ) activate_workspace: BoolProperty( name="Activate BIM Workspace on Startup", default=True, - description="If enabled, this will automatically activate the BIM workspace when opening a project.\nIt is recommended to keep this `Enabled`", + description=( + "If enabled, this will automatically activate the BIM workspace when opening a project.\n" + "It is recommended to keep this `Enabled`" + ), ) should_setup_toolbar: BoolProperty( name="Always Show Toolbar In 3D Viewport", @@ -366,7 +387,9 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): should_use_snap: BoolProperty( name="Enable Snapping on Startup", default=True, - description="If enabled, snapping will be enabled on new sessions.\nIt is recommended to keep this `Enabled`", + description=( + "If enabled, snapping will be enabled on new sessions.\n" "It is recommended to keep this `Enabled`" + ), ) should_play_chaching_sound: BoolProperty(name="Play A Cha-Ching Sound When Project Costs Updates", default=False) tmp_dir: StringProperty( @@ -428,7 +451,10 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): max=100, subtype="PERCENTAGE", name="Non-Openings Opacity", - description="When modifying openings, other elements of the model will display with some transparency.\n0 is fully transparent and 100 is fully opaque", + description=( + "When modifying openings, other elements of the model will display with some transparency.\n" + "0 is fully transparent and 100 is fully opaque" + ), ) bsdd_load_preview_dictionaries: BoolProperty( From 7a3c7704b5c00a634e782029fa1fb4933ef36c67 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 14 Nov 2025 18:24:59 +0500 Subject: [PATCH 082/657] preferences descriptions - document autoreplaced strings in commands --- src/bonsai/bonsai/bim/ui.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 48c00a4f2e..f6f21dea86 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -327,6 +327,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description=( "print sheet to pdf together with svg. Leave blank svg is just created, " 'E.g. [["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "svg", "-o", "pdf"]]' + '\n `"svg"`, `"pdf"` will be replaced automatically.' ), ) svg2dxf_command: StringProperty( @@ -334,6 +335,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"]]`' + '\n `"svg"`, `"eps"`, `"dxf"` will be replaced automatically.' ), ) svg_command: StringProperty( @@ -341,6 +343,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description=( "Software to open generated drawing and sheets. Leave blank system default for .svg is used " 'E.g. [["path to application eg. /Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", "path"]]' + '\n `"path"` will be replaced with the path to the generated .svg file.' ), ) layout_svg_command: StringProperty( @@ -348,6 +351,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description=( "Software to open layouts, before generated. Leave blank system default for .svg is used. " 'E.g. `[["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "path"]]`' + '\n `"path"` will be replaced with the path to the generated .svg file.' ), ) pdf_command: StringProperty( @@ -355,9 +359,16 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description=( "Software to open .pdf, leave blank uses system default. " 'E.g. `[["path to application eg. /Applications/Inkscape.app/Contents/MacOS/inkscape", "path"]]`' + '\n `"path"` will be replaced with the path to the generated .pdf file.' + ), + ) + spreadsheet_command: StringProperty( + name="Spreadsheet Command", + description=( + 'E.g. [["libreoffice", "path"]]' + '\n `"path"` will be replaced with the path to the generated spreadsheet file.' ), ) - spreadsheet_command: StringProperty(name="Spreadsheet Command", description='E.g. [["libreoffice", "path"]]') should_hide_empty_props: BoolProperty( name="Hide Empty Properties", default=True, From 989415f4231f16d2971071467ce92b9d42eaf337 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 11:05:26 +0500 Subject: [PATCH 083/657] setup_pytest - use `check_call` and less repetition --- src/bonsai/scripts/setup_pytest.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/bonsai/scripts/setup_pytest.py b/src/bonsai/scripts/setup_pytest.py index 25a58fa3c7..90af113eca 100644 --- a/src/bonsai/scripts/setup_pytest.py +++ b/src/bonsai/scripts/setup_pytest.py @@ -28,22 +28,21 @@ base_python_path = str(Path(sys.executable).parent.parent) # path without bin/p print("Detected executable:", py_exec) -subprocess.call([py_exec, "-m", "ensurepip", "--user"]) -subprocess.call([py_exec, "-m", "pip", "install", "--upgrade", "pip"]) +subprocess.check_call([py_exec, "-m", "ensurepip", "--user"]) +subprocess.check_call([py_exec, "-m", "pip", "install", "--upgrade", "pip"]) sys_paths = [p for p in sys.path if "site-packages" in p and p.startswith(base_python_path)] +dependencies = ["pytest", "pytest-bdd", "pytest-blender", "pygments"] + if sys_paths: print("Detected installation directory:", sys_paths[-1]) - subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "--upgrade", "pytest"]) - subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "--upgrade", "pytest-bdd"]) - subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "--upgrade", "pytest-blender"]) - subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "--upgrade", "pygments"]) + command = [py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "--upgrade"] else: print("Could not detect installation directory. Good luck.") - subprocess.call([py_exec, "-m", "pip", "install", "--upgrade", "pytest"]) - subprocess.call([py_exec, "-m", "pip", "install", "--upgrade", "pytest-bdd"]) - subprocess.call([py_exec, "-m", "pip", "install", "--upgrade", "pytest-blender"]) - subprocess.call([py_exec, "-m", "pip", "install", "--upgrade", "pygments"]) + command = [py_exec, "-m", "pip", "install", "--upgrade"] + +for dep in dependencies: + subprocess.check_call(command + [dep]) try: import pytest From e46a99870b8a9e6d640306f02c7c0f1bb135e834 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 14 Nov 2025 18:18:52 +0500 Subject: [PATCH 084/657] typing --- src/bonsai/bonsai/bim/module/drawing/decoration.py | 7 ++++--- src/bonsai/bonsai/bim/ui.py | 1 + src/ifcopenshell-python/ifcopenshell/__init__.py | 6 +++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 1735b32575..d47e8a85c5 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -42,7 +42,7 @@ from bonsai.bim.module.drawing.helper import format_distance from timeit import default_timer as timer from functools import cache from typing import Optional, Union -from collections.abc import Iterator +from collections.abc import Generator, Iterator UNSPECIAL_ELEMENT_COLOR = (0.2, 0.2, 0.2, 1) # GREY @@ -186,7 +186,7 @@ class BaseDecorator: def camera_zoom_to_factor(self, zoom): return math.pow(((zoom / 50) + math.sqrt(2)) / 2, 2) - def get_splines(self, obj): + def get_splines(self, obj: bpy.types.Object) -> Generator[list[Vector]]: """Iterates through splines Args: obj: Blender object with Curve data @@ -194,13 +194,14 @@ class BaseDecorator: Yields: verts: points of each spline, world coords """ + assert type(obj.data) is bpy.types.Curve for spline in obj.data.splines: spline_points = spline.bezier_points if spline.bezier_points else spline.points if len(spline_points) < 2: continue yield [obj.matrix_world @ p.co for p in spline_points] - def get_path_geom(self, obj, topo=True): + def get_path_geom(self, obj: bpy.types.Object, topo: bool = True): """Parses path geometry into line segments Args: diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index f6f21dea86..25137cf639 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -535,6 +535,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): should_setup_workspace: bool activate_workspace: bool should_setup_toolbar: bool + should_use_snap: bool should_play_chaching_sound: bool tmp_dir: str decorations_colour: tuple[float, float, float, float] diff --git a/src/ifcopenshell-python/ifcopenshell/__init__.py b/src/ifcopenshell-python/ifcopenshell/__init__.py index c12d619b58..8b65d5afe7 100644 --- a/src/ifcopenshell-python/ifcopenshell/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/__init__.py @@ -60,7 +60,7 @@ import zipfile import tempfile from pathlib import Path from typing import Optional, Union, TYPE_CHECKING, Any, overload, Literal -from collections.abc import Sequence +from collections.abc import Generator, Sequence if TYPE_CHECKING: import ifcopenshell.express.schema_class @@ -355,7 +355,7 @@ def stream2(path: Union[Path, str], mmap: bool = False, page_size: int = 0): yield inst -def stream2_from_string(data: str): +def stream2_from_string(data: str) -> Generator[dict]: """Streams the content of a file path from string, yielding each instance as a dictionary. @@ -371,7 +371,7 @@ def stream2_from_string(data: str): yield inst -def convert_path_to_rocksdb(ifcspf_path: Union[Path, str], rocksdb_path: Union[Path, str]): +def convert_path_to_rocksdb(ifcspf_path: Union[Path, str], rocksdb_path: Union[Path, str]) -> None: """Converts an IFC-SPF file on disk to the IfcOpenShell-specific RocksDB encoding. RocksDB is an embedded key-value store that allows partial reads and is therefore more memory efficient with larger files. From fb902a04f59f56417fe9deb6801e178ac78b78b9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 11:36:56 +0500 Subject: [PATCH 085/657] test_feature - use common prompts for loading/saving temp projects --- src/bonsai/bonsai/tool/project.py | 12 ++++---- src/bonsai/test/bim/feature/geometry.feature | 5 ++-- src/bonsai/test/bim/feature/project.feature | 31 +++++++++----------- src/bonsai/test/bim/test_feature.py | 15 ++++++---- 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/bonsai/bonsai/tool/project.py b/src/bonsai/bonsai/tool/project.py index def5255dfe..0bfb4b00c1 100644 --- a/src/bonsai/bonsai/tool/project.py +++ b/src/bonsai/bonsai/tool/project.py @@ -504,10 +504,12 @@ class Project(bonsai.core.tool.Project): normals.append((v1, d1.cross(d2).normalized())) return normals + TEMP_PROJECT_PATH = Path.cwd() / "test/files/temp/test_project.ifc" + @classmethod def save_test_project(cls) -> None: - TMP = Path.cwd() / "test/files/temp" - # Clean up previous test project. - if TMP.exists(): - shutil.rmtree(TMP) - bpy.ops.bim.save_project(filepath=(TMP / "test_project.ifc").__str__(), should_save_as=True) + tmp = cls.TEMP_PROJECT_PATH.parent + # Clean up previous test project to avoid conflicts with non-updated assets. + if tmp.exists(): + shutil.rmtree(tmp) + bpy.ops.bim.save_project(filepath=cls.TEMP_PROJECT_PATH.__str__(), should_save_as=True) diff --git a/src/bonsai/test/bim/feature/geometry.feature b/src/bonsai/test/bim/feature/geometry.feature index ee2851fc7e..9e1ac25245 100644 --- a/src/bonsai/test/bim/feature/geometry.feature +++ b/src/bonsai/test/bim/feature/geometry.feature @@ -352,9 +352,8 @@ Scenario: Override duplicate move - copying a coloured representation And the variable "style" is "{ifc}.by_type('IfcSurfaceStyle')[0].id()" And I press "bim.assign_style_to_selected(style_id={style})" When I duplicate the selected objects - And I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc')" - And an empty Blender session is started - And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc', should_start_fresh_session=False)" + And I save IFC project + And I load previously saved IFC project Then the material "Style" colour is "1,0,0,1" And the object "IfcWall/Cube" has the material "Style" And the object "IfcWall/Cube.001" has the material "Style" diff --git a/src/bonsai/test/bim/feature/project.feature b/src/bonsai/test/bim/feature/project.feature index 0d589bbab4..a20860d890 100644 --- a/src/bonsai/test/bim/feature/project.feature +++ b/src/bonsai/test/bim/feature/project.feature @@ -833,20 +833,21 @@ Scenario: Unlink IFC Scenario: Export IFC - blank project Given an empty IFC project - When I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc')" + When I save IFC project Then nothing happens Scenario: Export IFC - with basic contents Given an empty Blender session And I press "bim.load_project(filepath='{cwd}/test/files/basic.ifc')" - When I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc')" - Then "scene.BIMProperties.ifc_file" is "{cwd}/test/files/temp/export.ifc" + When I save IFC project + Then "scene.BIMProperties.ifc_file" is "{temp_project_path}" Scenario: Export IFC - with basic contents and saving as another file Given an empty Blender session And I press "bim.load_project(filepath='{cwd}/test/files/basic.ifc')" - When I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc', should_save_as=True)" - Then "scene.BIMProperties.ifc_file" is "{cwd}/test/files/temp/export.ifc" + When I save IFC project + When I press "bim.save_project(filepath='{temp_project_path}', should_save_as=True)" + Then "scene.BIMProperties.ifc_file" is "{temp_project_path}" Scenario: Export IFC - with basic contents and saving as IfcJSON where import is not supported Given an empty Blender session @@ -877,26 +878,23 @@ Scenario: Export IFC - with deleted objects synchronised And the object "IfcBuildingStorey/My Storey" is selected And I set the "is_locked" property to "FALSE" And I delete the selected objects - And I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc')" - And an empty Blender session is started - And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc')" + And I save IFC project + And I load previously saved IFC project Then the object "IfcBuildingStorey/My Storey" does not exist Scenario: Export IFC - with moved object location synchronised Given an empty IFC project When the object "IfcBuildingStorey/My Storey" is moved to "0,0,1" - And I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc')" - And an empty Blender session is started - And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc')" + And I save IFC project + And I load previously saved IFC project Then the object "IfcBuildingStorey/My Storey" is at "0,0,1" Scenario: Export IFC - with moved grid axis location synchronised Given an empty IFC project And I press "mesh.add_grid" When the object "IfcGridAxis/01" is moved to "1,0,0" - And I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc')" - And an empty Blender session is started - And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc')" + And I save IFC project + And I load previously saved IFC project Then the object "IfcGridAxis/01" bottom left corner is at "1,-2,0" Scenario: Export IFC - with changed object scale ignored @@ -909,7 +907,6 @@ Scenario: Export IFC - with changed object scale ignored And I click "Assign IFC Class" And the object "IfcWall/Cube" is selected When the object "IfcWall/Cube" is scaled to "2" - And I press "bim.save_project(filepath='{cwd}/test/files/temp/export.ifc')" - And an empty Blender session is started - And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc')" + And I save IFC project + And I load previously saved IFC project Then the object "IfcWall/Cube" dimensions are "2,2,2" diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index f8b71ac8a4..e196bdf393 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -50,6 +50,7 @@ variables = { "ifc": "tool.Ifc.get()", "pset_ifc": "IfcStore.pset_template_file", "classification_ifc": "IfcStore.classification_file", + "temp_project_path": tool.Project.TEMP_PROJECT_PATH.as_posix(), } # Monkey-patch webbrowser opening since we want to test headlessly @@ -330,15 +331,19 @@ def an_empty_ifc_2x3_project(): bpy.ops.bim.create_project() +@given(parsers.parse("I load previously saved IFC project")) +@when(parsers.parse("I load previously saved IFC project")) +@then(parsers.parse("I load previously saved IFC project")) +def load_previously_saved_ifc_project() -> None: + filepath = tool.Project.TEMP_PROJECT_PATH + bpy.ops.bim.load_project(filepath=filepath.__str__()) + + @given(parsers.parse("I save IFC project")) @when(parsers.parse("I save IFC project")) @then(parsers.parse("I save IFC project")) def saving_ifc_project() -> None: - # Remove old temp files to avoid conflicts with non-updated assets. - if TMP.exists(): - shutil.rmtree(TMP) - filepath = TMP / "test_project.ifc" - bpy.ops.bim.save_project(filepath=filepath.__str__(), should_save_as=True) + tool.Project.save_test_project() @given("the Brickschema is stubbed") From 99ae768ddf409e19c05d4ea1e44c9bdfd03702f9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 11:48:57 +0500 Subject: [PATCH 086/657] test_feature - clean up .ifc.cache. files after test was executed --- .gitignore | 2 -- src/bonsai/test/bim/feature/project.feature | 36 ++++++++++----------- src/bonsai/test/bim/test_feature.py | 29 ++++++++++++++++- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index d313811335..5c0d2eb9fd 100644 --- a/.gitignore +++ b/.gitignore @@ -78,8 +78,6 @@ src/bonsai/bonsai/translations.py # bonsai test temp files src/bonsai/test/files/temp -src/bonsai/test/files/basic.ifc.cache.blend -src/bonsai/test/files/basic.ifc.cache.sqlite # bonsai data src/bonsai/bonsai/bim/data/build/ diff --git a/src/bonsai/test/bim/feature/project.feature b/src/bonsai/test/bim/feature/project.feature index a20860d890..cb9aeec21e 100644 --- a/src/bonsai/test/bim/feature/project.feature +++ b/src/bonsai/test/bim/feature/project.feature @@ -679,7 +679,7 @@ Scenario: Load project elements - all georeferencing coordinate situations with Scenario: Link IFC Given an empty IFC project - When I press "bim.link_ifc(filepath='{cwd}/test/files/basic.ifc')" + When I link IFC project from "{cwd}/test/files/basic.ifc" Then "scene.BIMProjectProperties.links['{cwd}/test/files/basic.ifc'].is_loaded" is "True" And the collection "IfcProject/basic.ifc" exists And the object "Chunk" exists @@ -690,7 +690,7 @@ Scenario: Link IFC - disabled false origin mode # Not currently possible via UI And I set "scene.BIMProjectProperties.distance_limit" to "5" And I set "scene.BIMProjectProperties.false_origin_mode" to "DISABLED" - When I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation.ifc', use_cache=False)" + When I link IFC project from "{cwd}/test/files/geolocation.ifc" Then the object "Chunk" exists And the object "Chunk" has a vertex at "2,2,-1" And the object "Chunk" has a vertex at "9,-1,-1" @@ -701,7 +701,7 @@ Scenario: Link IFC - from an empty IFC project - automatic false origin mode (0, # Not currently possible via UI And I set "scene.BIMProjectProperties.distance_limit" to "5" And I set "scene.BIMProjectProperties.false_origin_mode" to "AUTOMATIC" - When I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation.ifc', use_cache=False)" + When I link IFC project from "{cwd}/test/files/geolocation.ifc" Then the object "Chunk" exists And the object "Chunk" has a vertex at "2,2,-1" And the object "Chunk" has a vertex at "9,-1,-1" @@ -712,7 +712,7 @@ Scenario: Link IFC - from an empty Blender session - automatic false origin mode # Not currently possible via UI And I set "scene.BIMProjectProperties.distance_limit" to "5" And I set "scene.BIMProjectProperties.false_origin_mode" to "AUTOMATIC" - When I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation.ifc', use_cache=False)" + When I link IFC project from "{cwd}/test/files/geolocation.ifc" Then the object "Chunk" exists And the object "Chunk" has a vertex at "-11,-2,0" And the object "Chunk" has a vertex at "-4,-5,0" @@ -724,7 +724,7 @@ Scenario: Link IFC - manual false origin mode And I set "scene.BIMProjectProperties.distance_limit" to "5" And I set "scene.BIMProjectProperties.false_origin_mode" to "MANUAL" And I set "scene.BIMProjectProperties.false_origin" to "10000,0,0" - When I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation.ifc', use_cache=False)" + When I link IFC project from "{cwd}/test/files/geolocation.ifc" Then the object "Chunk" exists And the object "Chunk" has a vertex at "-8,2,-1" And the object "Chunk" has a vertex at "-1,-1,-1" @@ -735,8 +735,8 @@ Scenario: Link IFC - automatic false origin mode - two different false origins a # Not currently possible via UI And I set "scene.BIMProjectProperties.distance_limit" to "5" And I set "scene.BIMProjectProperties.false_origin_mode" to "AUTOMATIC" - When I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation.ifc', use_cache=False)" - And I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation-mapconversion-angle.ifc', use_cache=False)" + When I link IFC project from "{cwd}/test/files/geolocation.ifc" + And I link IFC project from "{cwd}/test/files/geolocation-mapconversion-angle.ifc" Then the object "Col:IfcProject/geolocation.ifc:Chunk" exists And the object "Col:IfcProject/geolocation-mapconversion-angle.ifc:Chunk" exists And the object "Col:IfcProject/geolocation.ifc:Chunk" has a vertex at "-11,-2,0" @@ -751,8 +751,8 @@ Scenario: Link IFC - automatic false origin mode - two different false origins a # Not currently possible via UI And I set "scene.BIMProjectProperties.distance_limit" to "5" And I set "scene.BIMProjectProperties.false_origin_mode" to "AUTOMATIC" - When I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation-mapconversion-angle.ifc', use_cache=False)" - And I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation.ifc', use_cache=False)" + When I link IFC project from "{cwd}/test/files/geolocation-mapconversion-angle.ifc" + And I link IFC project from "{cwd}/test/files/geolocation.ifc" Then the object "Col:IfcProject/geolocation.ifc:Chunk" exists And the object "Col:IfcProject/geolocation-mapconversion-angle.ifc:Chunk" exists And the object "Col:IfcProject/geolocation-mapconversion-angle.ifc:Chunk" has a vertex at "-11,-2,0" @@ -767,9 +767,9 @@ Scenario: Link IFC - automatic false origin mode - three identical false origins # Not currently possible via UI And I set "scene.BIMProjectProperties.distance_limit" to "5" And I set "scene.BIMProjectProperties.false_origin_mode" to "AUTOMATIC" - When I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation-unit1.ifc', use_cache=False)" - And I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation-unit2.ifc', use_cache=False)" - And I press "bim.link_ifc(filepath='{cwd}/test/files/geolocation-unit3.ifc', use_cache=False)" + When I link IFC project from "{cwd}/test/files/geolocation-unit1.ifc" + And I link IFC project from "{cwd}/test/files/geolocation-unit2.ifc" + And I link IFC project from "{cwd}/test/files/geolocation-unit3.ifc" Then the object "Col:IfcProject/geolocation-unit1.ifc:Chunk" exists And the object "Col:IfcProject/geolocation-unit2.ifc:Chunk" exists And the object "Col:IfcProject/geolocation-unit3.ifc:Chunk" exists @@ -779,7 +779,7 @@ Scenario: Link IFC - automatic false origin mode - three identical false origins Scenario: Toggle link visibility - wireframe mode Given an empty IFC project - And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.ifc')" + And I link IFC project from "{cwd}/test/files/basic.ifc" When I press "bim.toggle_link_visibility(link='{cwd}/test/files/basic.ifc', mode='WIREFRAME')" Then "scene.BIMProjectProperties.links['{cwd}/test/files/basic.ifc'].is_wireframe" is "True" And the object "Chunk" should display as "WIRE" @@ -789,7 +789,7 @@ Scenario: Toggle link visibility - wireframe mode Scenario: Toggle link selectability Given an empty IFC project - And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.ifc')" + And I link IFC project from "{cwd}/test/files/basic.ifc" When I press "bim.toggle_link_selectability(link='{cwd}/test/files/basic.ifc')" Then "scene.BIMProjectProperties.links['{cwd}/test/files/basic.ifc'].is_selectable" is "False" And the collection "IfcProject/basic.ifc" is unselectable @@ -799,7 +799,7 @@ Scenario: Toggle link selectability Scenario: Toggle link visibility - visible mode Given an empty IFC project - And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.ifc')" + And I link IFC project from "{cwd}/test/files/basic.ifc" When I press "bim.toggle_link_visibility(link='{cwd}/test/files/basic.ifc', mode='VISIBLE')" Then "scene.BIMProjectProperties.links['{cwd}/test/files/basic.ifc'].is_hidden" is "True" And the object "IfcProject/basic.ifc" is not visible @@ -809,14 +809,14 @@ Scenario: Toggle link visibility - visible mode Scenario: Unload link Given an empty Blender session - And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.ifc')" + And I link IFC project from "{cwd}/test/files/basic.ifc" When I press "bim.unload_link(filepath='{cwd}/test/files/basic.ifc')" Then "scene.BIMProjectProperties.links['{cwd}/test/files/basic.ifc'].is_loaded" is "False" And the collection "IfcProject/basic.ifc" does not exist Scenario: Load link Given an empty Blender session - And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.ifc')" + And I link IFC project from "{cwd}/test/files/basic.ifc" And I press "bim.unload_link(filepath='{cwd}/test/files/basic.ifc')" When I press "bim.load_link(filepath='{cwd}/test/files/basic.ifc')" Then "scene.BIMProjectProperties.links['{cwd}/test/files/basic.ifc'].is_loaded" is "True" @@ -824,7 +824,7 @@ Scenario: Load link Scenario: Unlink IFC Given an empty Blender session - And I press "bim.link_ifc(filepath='{cwd}/test/files/basic.ifc')" + And I link IFC project from "{cwd}/test/files/basic.ifc" And I press "bim.unload_link(filepath='{cwd}/test/files/basic.ifc')" When I press "bim.unlink_ifc(filepath='{cwd}/test/files/basic.ifc')" Then "scene.BIMProjectProperties.links.get('{cwd}/test/files/basic.ifc')" is "None" diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index e196bdf393..87b1a4860e 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -32,6 +32,7 @@ import ifcopenshell.util.element import ifcopenshell.util.representation import bonsai.tool as tool import bonsai.bim.handler +from collections.abc import Generator from bonsai.bim.ifc import IfcStore from bonsai.tool.brick import BrickStore from bonsai.bim.module.model.data import AuthoringData @@ -66,7 +67,10 @@ Can be useful for debugging, but has caveats - can't use ``wm.read_homefile`` as resets the ``bpy.context`` and some it's members become `None`. """ -TMP = Path(f"{variables['cwd']}/test/files/temp") +TMP = Path.cwd() / "test/files/temp" +TEST_FILES_DIR = Path.cwd() / "test/files" + +CLEAN_LINKED_FILES_CACHE = False class PanelSpy: @@ -292,6 +296,19 @@ def vectors_are_equal(v1, v2): return all(is_x(v1[i], v2[i]) for i in range(len(v1))) +@pytest.fixture(scope="function", autouse=True) +def run_for_each_test() -> Generator[None]: + # Code before this runs before each test + yield + # Code after this runs after each test + + global CLEAN_LINKED_FILES_CACHE + if CLEAN_LINKED_FILES_CACHE: + for filepath in TEST_FILES_DIR.glob("*.ifc.cache.*"): + filepath.unlink() + CLEAN_LINKED_FILES_CACHE = False + + @given("an untestable scenario") def an_untestable_scenario(): pass @@ -346,6 +363,16 @@ def saving_ifc_project() -> None: tool.Project.save_test_project() +@given(parsers.parse('I link IFC project from "{filepath}"')) +@when(parsers.parse('I link IFC project from "{filepath}"')) +@then(parsers.parse('I link IFC project from "{filepath}"')) +def i_link_ifc_project_from_filepath(filepath: str) -> None: + global CLEAN_LINKED_FILES_CACHE + filepath = replace_variables(filepath) + CLEAN_LINKED_FILES_CACHE = True + bpy.ops.bim.link_ifc(filepath=filepath, use_cache=False) + + @given("the Brickschema is stubbed") def the_brickschema_is_stubbed(): # This makes things run faster since we don't need to load the entire brick schema From 1508c4ab0533f45e3e83a860e32cc56ceeeabab3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 12:14:55 +0500 Subject: [PATCH 087/657] test_feature - restore EPset_Drawing.ifc --- src/bonsai/test/bim/test_feature.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 87b1a4860e..bcfcdfba47 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -72,6 +72,10 @@ TEST_FILES_DIR = Path.cwd() / "test/files" CLEAN_LINKED_FILES_CACHE = False +EPSET_DRAWING = Path.cwd() / "bonsai/bim/data/pset/EPset_Drawing.ifc" +EPSET_DRAWING_BYTES = EPSET_DRAWING.read_bytes() +RELOAD_EPSET_DRAWING = False + class PanelSpy: def __init__(self, blender_panel: type[bpy.types.Panel]): @@ -308,6 +312,12 @@ def run_for_each_test() -> Generator[None]: filepath.unlink() CLEAN_LINKED_FILES_CACHE = False + # pset_template tests are editing EPset_Drawing.ifc, so we need to restore it. + global RELOAD_EPSET_DRAWING + if RELOAD_EPSET_DRAWING: + EPSET_DRAWING.write_bytes(EPSET_DRAWING_BYTES) + RELOAD_EPSET_DRAWING = False + @given("an untestable scenario") def an_untestable_scenario(): @@ -699,6 +709,8 @@ def i_select_the_item_name_item_in_the_list_name_list(item_name: str, list_name: @when("I load a new pset template file") def i_load_a_new_pset_template_file(): + global RELOAD_EPSET_DRAWING + RELOAD_EPSET_DRAWING = True props = tool.PsetTemplate.get_pset_template_props() IfcStore.pset_template_path = props.pset_template_files IfcStore.pset_template_file = ifcopenshell.open(IfcStore.pset_template_path) From bec46562f50b284af675bd93e43297875a725647 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 12:18:32 +0500 Subject: [PATCH 088/657] gitignore running_pid.json --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5c0d2eb9fd..494022e37e 100644 --- a/.gitignore +++ b/.gitignore @@ -85,6 +85,7 @@ src/bonsai/bonsai/bim/data/gantt/index.html src/bonsai/bonsai/bim/data/gantt/jsgantt.js src/bonsai/bonsai/bim/data/gantt/jsgantt.css src/bonsai/bonsai/bim/data/webui/static/js/jquery.min.js +src/bonsai/bonsai/bim/data/webui/running_pid.json # ifcopenshell swig and compiled files src/ifcopenshell-python/ifcopenshell/_ifcopenshell_wrapper*.so From db5ec77730fa912e1acab98b9accd78a6b7025b5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 12:41:27 +0500 Subject: [PATCH 089/657] black format src/pyodide --- pyproject.toml | 1 - src/pyodide/demo-app/context.py | 67 +++++++-------------- src/pyodide/demo-app/propertygroups.py | 11 ++-- src/pyodide/demo-app/tests/missing_files.py | 15 +++-- 4 files changed, 39 insertions(+), 55 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c03921c762..d950a6e3be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,6 @@ extend-exclude = ''' |src/ifcconvert/cityjson/* |src/svgfill |src/exterior-shell-extractor - |src/pyodide ''' [tool.pyright] diff --git a/src/pyodide/demo-app/context.py b/src/pyodide/demo-app/context.py index 682aab7589..109db84e0f 100644 --- a/src/pyodide/demo-app/context.py +++ b/src/pyodide/demo-app/context.py @@ -27,7 +27,9 @@ class Context: def open(self, file_content): self.model = ifcopenshell.file.from_string(file_content) - body = [ctx for ctx in self.model.by_type('IfcGeometricRepresentationContext') if ctx.ContextIdentifier == 'Body'] + body = [ + ctx for ctx in self.model.by_type("IfcGeometricRepresentationContext") if ctx.ContextIdentifier == "Body" + ] if body: self.body = body[0] else: @@ -40,7 +42,9 @@ class Context: target_view="MODEL_VIEW", parent=context, ) - axis = [ctx for ctx in self.model.by_type('IfcGeometricRepresentationContext') if ctx.ContextIdentifier == 'Axis'] + axis = [ + ctx for ctx in self.model.by_type("IfcGeometricRepresentationContext") if ctx.ContextIdentifier == "Axis" + ] if body: self.axis = axis[0] else: @@ -53,15 +57,13 @@ class Context: target_view="GRAPH_VIEW", parent=context, ) - self.storey = self.model.by_type('IfcBuildingStorey')[0] + self.storey = self.model.by_type("IfcBuildingStorey")[0] def _create_empty_model(self): # Create a blank model self.model = ifcopenshell.file() # All projects must have one IFC Project element - project = ifcopenshell.api.run( - "root.create_entity", self.model, ifc_class="IfcProject", name="My Project" - ) + project = ifcopenshell.api.run("root.create_entity", self.model, ifc_class="IfcProject", name="My Project") # Geometry is optional in IFC, but because we want to use geometry in this example, let's define units # Assigning without arguments defaults to metric units ifcopenshell.api.run("unit.assign_unit", self.model) @@ -85,12 +87,8 @@ class Context: parent=context, ) # Create a site, building, and storey. Many hierarchies are possible. - site = ifcopenshell.api.run( - "root.create_entity", self.model, ifc_class="IfcSite", name="My Site" - ) - building = ifcopenshell.api.run( - "root.create_entity", self.model, ifc_class="IfcBuilding", name="Building A" - ) + site = ifcopenshell.api.run("root.create_entity", self.model, ifc_class="IfcSite", name="My Site") + building = ifcopenshell.api.run("root.create_entity", self.model, ifc_class="IfcBuilding", name="Building A") self.storey = ifcopenshell.api.run( "root.create_entity", self.model, @@ -118,9 +116,7 @@ class Context: products=[self.storey], ) - def create_2pt_wall( - self, p1, p2, elevation, height, thickness, container, wall_type=None - ): + def create_2pt_wall(self, p1, p2, elevation, height, thickness, container, wall_type=None): p1 = np.array([p1[0], p1[1]]) p2 = np.array([p2[0], p2[1]]) @@ -188,26 +184,22 @@ class Context: def create_fill(self, ty, pt, wall): if isinstance(wall, str): wall = self.model[wall] - if not wall.is_a('IfcWall'): + if not wall.is_a("IfcWall"): raise ValueError("Only 'wall' hosts are supported") - if ty == 'door': + if ty == "door": props = propertygroups.BIMDoorProperties() - elif ty == 'window': + elif ty == "window": props = propertygroups.BIMWindowProperties() else: raise ValueError("Only 'door' or 'window' fills are supported") si_conversion = ifcopenshell.util.unit.calculate_unit_scale(self.model) - body = ifcopenshell.util.representation.get_context( - self.model, "Model", "Body", "MODEL_VIEW" - ) + body = ifcopenshell.util.representation.get_context(self.model, "Model", "Body", "MODEL_VIEW") representation_data = props.to_dict(si_conversion=si_conversion) representation_data["context"] = body door_representation = ifcopenshell.api.run( f"geometry.add_{ty}_representation", self.model, **representation_data ) - door = ifcopenshell.api.run( - "root.create_entity", self.model, ifc_class=f"ifc{ty}" - ) + door = ifcopenshell.api.run("root.create_entity", self.model, ifc_class=f"ifc{ty}") door.OverallWidth = props.overall_width / si_conversion door.OverallHeight = props.overall_height / si_conversion ifcopenshell.api.run( @@ -223,11 +215,7 @@ class Context: products=[door], ) - r = [ - r - for r in wall.Representation.Representations - if r.RepresentationIdentifier == "Axis" - ] + r = [r for r in wall.Representation.Representations if r.RepresentationIdentifier == "Axis"] if not r: raise ValueError("Axis representation is needed") r = r[0] @@ -260,9 +248,7 @@ class Context: position_3d = None if self.model.schema == "IFC2X3": - position_3d = self.model.createIfcAxis2Placement2D( - self.model.createIfcCartesianPoint([0.0, 0.0, 0.0]) - ) + position_3d = self.model.createIfcAxis2Placement2D(self.model.createIfcCartesianPoint([0.0, 0.0, 0.0])) position_2d = self.model.createIfcAxis2Placement2D( self.model.createIfcCartesianPoint([door.OverallWidth / 2.0, 0.0]) ) @@ -294,10 +280,7 @@ class Context: ifcopenshell.api.feature.add_feature(self.model, feature=opening, element=wall) ifcopenshell.api.feature.add_filling(self.model, opening=opening, element=door) - z_offsets = { - 'door': 0, - 'window': 1 - } + z_offsets = {"door": 0, "window": 1} opening.ObjectPlacement = self.model.createIfcLocalPlacement( wall.ObjectPlacement, self.model.createIfcAxis2Placement3D( @@ -307,9 +290,7 @@ class Context: door.ObjectPlacement = self.model.createIfcLocalPlacement( opening.ObjectPlacement, - self.model.createIfcAxis2Placement3D( - self.model.createIfcCartesianPoint((0.0, 0.0, 0.0)) - ), + self.model.createIfcAxis2Placement3D(self.model.createIfcCartesianPoint((0.0, 0.0, 0.0))), ) return door @@ -317,9 +298,7 @@ class Context: def to_obj_file(self, fn): st = ifcopenshell.geom.settings(USE_WORLD_COORDS=True, WELD_VERTICES=False) it = ifcopenshell.geom.iterator(st, self.model, exclude=("IfcOpeningElement",)) - sr = ifcopenshell.geom.serializers.obj( - fn, fn + ".mtl", st, ifcopenshell.geom.serializer_settings() - ) + sr = ifcopenshell.geom.serializers.obj(fn, fn + ".mtl", st, ifcopenshell.geom.serializer_settings()) if it.initialize(): for el in ifcopenshell.geom.consume_iterator(it): sr.write(el) @@ -330,7 +309,7 @@ if __name__ == "__main__": m = Context() w1 = m.create_2pt_wall((0.0, 0.0), (4.0, 0.0), 0.0, 3.0, 0.1, m.storey) w2 = m.create_2pt_wall((1.0, 3.0), (1.0, 0.0), 0.0, 3.0, 0.1, m.storey) - m.create_fill('door', [2, 0.0], w1) - m.create_fill('window', [1, 1.5], w2) + m.create_fill("door", [2, 0.0], w1) + m.create_fill("window", [1, 1.5], w2) m.model.write("out.ifc") m.to_obj_file("out.obj") diff --git a/src/pyodide/demo-app/propertygroups.py b/src/pyodide/demo-app/propertygroups.py index 4ba73b8efb..f28bfcc120 100644 --- a/src/pyodide/demo-app/propertygroups.py +++ b/src/pyodide/demo-app/propertygroups.py @@ -3,6 +3,7 @@ from dataclasses import dataclass, field # From: src\bonsai\bonsai\bim\module\model\prop.py # Adapted to use dataclasses instead of bpy props + @dataclass class BIMWindowProperties: non_si_units_props = ("is_editing", "window_type") @@ -19,6 +20,7 @@ class BIMWindowProperties: ) # number of panels and default mullion/transom values + # fmt: off window_types_panels = { "SINGLE_PANEL": (1, ((0, 0 ), (0, 0 ))), "DOUBLE_PANEL_HORIZONTAL": (2, ((0, 0 ), (0.45, 0 ))), @@ -30,6 +32,7 @@ class BIMWindowProperties: "TRIPLE_PANEL_HORIZONTAL": (3, ((0, 0 ), (0.3, 0.6))), "TRIPLE_PANEL_VERTICAL": (3, ((0.2, 0.4), (0, 0 ))), } + # fmt: on is_editing: bool = False window_type: str = "SINGLE_PANEL" @@ -50,10 +53,10 @@ class BIMWindowProperties: second_transom_offset: float = 0.6 # panel properties - frame_depth: list = field(default_factory = lambda: [0.035] * 3) - frame_thickness: list = field(default_factory = lambda: [0.035] * 3) + frame_depth: list = field(default_factory=lambda: [0.035] * 3) + frame_thickness: list = field(default_factory=lambda: [0.035] * 3) - def to_dict(self, si_conversion=1.): + def to_dict(self, si_conversion=1.0): di = { "partition_type": self.window_type, "overall_height": self.overall_height / si_conversion, @@ -124,7 +127,7 @@ class BIMDoorProperties: frame_thickness: float = 0.035 frame_depth: float = 0.035 - def to_dict(self, si_conversion=1.): + def to_dict(self, si_conversion=1.0): return { "operation_type": self.door_type, "overall_height": self.overall_height / si_conversion, diff --git a/src/pyodide/demo-app/tests/missing_files.py b/src/pyodide/demo-app/tests/missing_files.py index e42b552c50..ab603fa09e 100644 --- a/src/pyodide/demo-app/tests/missing_files.py +++ b/src/pyodide/demo-app/tests/missing_files.py @@ -1,26 +1,29 @@ async def test_pset(): import ifcopenshell.api.pset import ifcopenshell.api.material + errors = [] try: model = ifcopenshell.file() steel_material = ifcopenshell.api.material.add_material(model, name="S355 Steel") - steel_pset = ifcopenshell.api.pset.add_pset(model, - product=steel_material, - name="Pset_MaterialSteel") + steel_pset = ifcopenshell.api.pset.add_pset(model, product=steel_material, name="Pset_MaterialSteel") - ifcopenshell.api.pset.edit_pset(model, + ifcopenshell.api.pset.edit_pset( + model, pset=steel_pset, properties={ - "YieldStress": 355*(10**6), # Pa (355 MPa) - }) + "YieldStress": 355 * (10**6), # Pa (355 MPa) + }, + ) except Exception as e: errors.append(f"API Error: {e}") return errors + async def test_doc(): import ifcopenshell.util.doc + errors = [] try: ifcopenshell.util.doc.get_entity_doc("IFC4", "IfcWall", recursive=True) From 3cc5931eae6cefd789e4765fd5498e14258880c0 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 12:39:52 +0500 Subject: [PATCH 090/657] Fix missing imports and don't use `api.run` --- src/bonsai/bonsai/bim/export_ifc.py | 1 + src/bonsai/bonsai/bim/import_ifc.py | 4 +- .../bonsai/bim/module/aggregate/operator.py | 1 + .../bonsai/bim/module/drawing/helper.py | 1 + .../bonsai/bim/module/geometry/operator.py | 1 + src/bonsai/bonsai/tool/drawing.py | 3 + src/ifctester/test/test_facet.py | 1 + src/pyodide/demo-app/context.py | 86 +++++++++---------- 8 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/bonsai/bonsai/bim/export_ifc.py b/src/bonsai/bonsai/bim/export_ifc.py index d507481141..6134786124 100644 --- a/src/bonsai/bonsai/bim/export_ifc.py +++ b/src/bonsai/bonsai/bim/export_ifc.py @@ -25,6 +25,7 @@ import zipfile import tempfile import ifcopenshell import ifcopenshell.api +import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.unit import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 1765b1ca24..539ec89736 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -28,6 +28,7 @@ import numpy as np import numpy.typing as npt import multiprocessing import ifcopenshell +import ifcopenshell.api.pset import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.unit @@ -1237,8 +1238,7 @@ class IfcImporter: if not pset: return if "Aggregate_Index" not in pset.keys(): - ifcopenshell.api.run( - "pset.edit_pset", + ifcopenshell.api.pset.edit_pset( self.file, pset=self.file.by_id(pset["id"]), properties={"Aggregate_Index": aggregate_index, "Name": name}, diff --git a/src/bonsai/bonsai/bim/module/aggregate/operator.py b/src/bonsai/bonsai/bim/module/aggregate/operator.py index e35b982d65..5fa6885335 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/operator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/operator.py @@ -21,6 +21,7 @@ import ifcopenshell import ifcopenshell.api import ifcopenshell.api.group import ifcopenshell.api.pset +import ifcopenshell.api.root import ifcopenshell.util.element import bonsai.tool as tool import bonsai.core.aggregate as core diff --git a/src/bonsai/bonsai/bim/module/drawing/helper.py b/src/bonsai/bonsai/bim/module/drawing/helper.py index bfd943afa6..3f250373b5 100644 --- a/src/bonsai/bonsai/bim/module/drawing/helper.py +++ b/src/bonsai/bonsai/bim/module/drawing/helper.py @@ -18,6 +18,7 @@ import bpy import math +import ifcopenshell.util.element import mathutils.geometry import ifcopenshell import ifcopenshell.util.unit diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 248a226244..a27849da31 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -42,6 +42,7 @@ import bonsai.core.geometry import bonsai.core.geometry as core import bonsai.core.aggregate import bonsai.core.nest +import bonsai.core.spatial import bonsai.core.style import bonsai.core.root import bonsai.core.drawing diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 00fd6c9505..10ef99ca22 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -38,12 +38,15 @@ import bonsai.core.geometry import bonsai.core.type import bonsai.tool as tool import ifcopenshell.api +import ifcopenshell.api.geometry import ifcopenshell.api.context import ifcopenshell.api.drawing import ifcopenshell.api.document import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.geom +import ifcopenshell.util.placement +import ifcopenshell.util.unit import ifcopenshell.util.representation import ifcopenshell.util.element import ifcopenshell.util.selector diff --git a/src/ifctester/test/test_facet.py b/src/ifctester/test/test_facet.py index 167201979b..3d7518d99f 100644 --- a/src/ifctester/test/test_facet.py +++ b/src/ifctester/test/test_facet.py @@ -25,6 +25,7 @@ import ifcopenshell.api.classification import ifcopenshell.api.group import ifcopenshell.api.material import ifcopenshell.api.nest +import ifcopenshell.api.owner.settings import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.spatial diff --git a/src/pyodide/demo-app/context.py b/src/pyodide/demo-app/context.py index 109db84e0f..8cece9ef68 100644 --- a/src/pyodide/demo-app/context.py +++ b/src/pyodide/demo-app/context.py @@ -1,7 +1,15 @@ import ifcopenshell +import ifcopenshell.api.aggregate +import ifcopenshell.api.context import ifcopenshell.api.feature +import ifcopenshell.api.geometry +import ifcopenshell.api.root +import ifcopenshell.api.spatial +import ifcopenshell.api.type +import ifcopenshell.api.unit import ifcopenshell.geom import ifcopenshell.api +import ifcopenshell.util.representation import ifcopenshell.util.unit import numpy as np @@ -33,9 +41,8 @@ class Context: if body: self.body = body[0] else: - context = ifcopenshell.api.run("context.add_context", self.model, context_type="Model") - self.body = ifcopenshell.api.run( - "context.add_context", + context = ifcopenshell.api.context.add_context(self.model, context_type="Model") + self.body = ifcopenshell.api.context.add_context( self.model, context_type="Model", context_identifier="Body", @@ -48,9 +55,8 @@ class Context: if body: self.axis = axis[0] else: - context = ifcopenshell.api.run("context.add_context", self.model, context_type="Model") - self.axis = ifcopenshell.api.run( - "context.add_context", + context = ifcopenshell.api.context.add_context(self.model, context_type="Model") + self.axis = ifcopenshell.api.context.add_context( self.model, context_type="Model", context_identifier="Axis", @@ -63,23 +69,21 @@ class Context: # Create a blank model self.model = ifcopenshell.file() # All projects must have one IFC Project element - project = ifcopenshell.api.run("root.create_entity", self.model, ifc_class="IfcProject", name="My Project") + project = ifcopenshell.api.root.create_entity(self.model, ifc_class="IfcProject", name="My Project") # Geometry is optional in IFC, but because we want to use geometry in this example, let's define units # Assigning without arguments defaults to metric units - ifcopenshell.api.run("unit.assign_unit", self.model) + ifcopenshell.api.unit.assign_unit(self.model) # Let's create a modeling geometry context, so we can store 3D geometry (note: IFC supports 2D too!) - context = ifcopenshell.api.run("context.add_context", self.model, context_type="Model") + context = ifcopenshell.api.context.add_context(self.model, context_type="Model") # In particular, in this example we want to store the 3D "body" geometry of objects, i.e. the body shape - self.body = ifcopenshell.api.run( - "context.add_context", + self.body = ifcopenshell.api.context.add_context( self.model, context_type="Model", context_identifier="Body", target_view="MODEL_VIEW", parent=context, ) - self.axis = ifcopenshell.api.run( - "context.add_context", + self.axis = ifcopenshell.api.context.add_context( self.model, context_type="Model", context_identifier="Axis", @@ -87,30 +91,26 @@ class Context: parent=context, ) # Create a site, building, and storey. Many hierarchies are possible. - site = ifcopenshell.api.run("root.create_entity", self.model, ifc_class="IfcSite", name="My Site") - building = ifcopenshell.api.run("root.create_entity", self.model, ifc_class="IfcBuilding", name="Building A") - self.storey = ifcopenshell.api.run( - "root.create_entity", + site = ifcopenshell.api.root.create_entity(self.model, ifc_class="IfcSite", name="My Site") + building = ifcopenshell.api.root.create_entity(self.model, ifc_class="IfcBuilding", name="Building A") + self.storey = ifcopenshell.api.root.create_entity( self.model, ifc_class="IfcBuildingStorey", name="Ground Floor", ) # Since the site is our top level location, assign it to the project # Then place our building on the site, and our storey in the building - ifcopenshell.api.run( - "aggregate.assign_object", + ifcopenshell.api.aggregate.assign_object( self.model, relating_object=project, products=[site], ) - ifcopenshell.api.run( - "aggregate.assign_object", + ifcopenshell.api.aggregate.assign_object( self.model, relating_object=site, products=[building], ) - ifcopenshell.api.run( - "aggregate.assign_object", + ifcopenshell.api.aggregate.assign_object( self.model, relating_object=building, products=[self.storey], @@ -120,30 +120,26 @@ class Context: p1 = np.array([p1[0], p1[1]]) p2 = np.array([p2[0], p2[1]]) - wall = ifcopenshell.api.run("root.create_entity", self.model, ifc_class="IfcWall") + wall = ifcopenshell.api.root.create_entity(self.model, ifc_class="IfcWall") length = float(np.linalg.norm(p2 - p1)) - representation = ifcopenshell.api.run( - "geometry.add_wall_representation", + representation = ifcopenshell.api.geometry.add_wall_representation( self.model, context=self.body, length=length, height=height, thickness=thickness, ) - ifcopenshell.api.run( - "geometry.assign_representation", + ifcopenshell.api.geometry.assign_representation( self.model, product=wall, representation=representation, ) - representation = ifcopenshell.api.run( - "geometry.add_axis_representation", + representation = ifcopenshell.api.geometry.add_axis_representation( self.model, context=self.axis, axis=[(0.0, 0.0), (length, 0.0)], ) - ifcopenshell.api.run( - "geometry.assign_representation", + ifcopenshell.api.geometry.assign_representation( self.model, product=wall, representation=representation, @@ -158,16 +154,14 @@ class Context: [0, 0, 0, 1], ] ) - ifcopenshell.api.run("geometry.edit_object_placement", self.model, product=wall, matrix=matrix) - ifcopenshell.api.run( - "spatial.assign_container", + ifcopenshell.api.geometry.edit_object_placement(self.model, product=wall, matrix=matrix) + ifcopenshell.api.spatial.assign_container( self.model, relating_structure=container, products=[wall], ) if wall_type: - ifcopenshell.api.run( - "type.assign_type", + ifcopenshell.api.type.assign_type( self.model, related_object=wall, relating_type=wall_type, @@ -196,20 +190,19 @@ class Context: body = ifcopenshell.util.representation.get_context(self.model, "Model", "Body", "MODEL_VIEW") representation_data = props.to_dict(si_conversion=si_conversion) representation_data["context"] = body - door_representation = ifcopenshell.api.run( - f"geometry.add_{ty}_representation", self.model, **representation_data - ) - door = ifcopenshell.api.run("root.create_entity", self.model, ifc_class=f"ifc{ty}") + if ty == "door": + door_representation = ifcopenshell.api.geometry.add_door_representation(self.model, **representation_data) + else: + door_representation = ifcopenshell.api.geometry.add_window_representation(self.model, **representation_data) + door = ifcopenshell.api.root.create_entity(self.model, ifc_class=f"ifc{ty}") door.OverallWidth = props.overall_width / si_conversion door.OverallHeight = props.overall_height / si_conversion - ifcopenshell.api.run( - "geometry.assign_representation", + ifcopenshell.api.geometry.assign_representation( self.model, product=door, representation=door_representation, ) - ifcopenshell.api.run( - "spatial.assign_container", + ifcopenshell.api.spatial.assign_container( self.model, relating_structure=self.storey, products=[door], @@ -238,8 +231,7 @@ class Context: v_dot_v = np.dot(v, v) t = AP_dot_v / v_dot_v * np.linalg.norm(v) / si_conversion - opening = ifcopenshell.api.run( - "root.create_entity", + opening = ifcopenshell.api.root.create_entity( self.model, ifc_class="IfcOpeningElement", predefined_type="OPENING", From 02d35b6047c0522f86a273108d9ab44fb9e4383e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 12:45:54 +0500 Subject: [PATCH 091/657] Fix missing `ifc_file` definition in 471bd34 --- src/bonsai/bonsai/tool/drawing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 10ef99ca22..ce0b392834 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -223,6 +223,7 @@ class Drawing(bonsai.core.tool.Drawing): def exclude_annotation_from_drawing( cls, element: ifcopenshell.entity_instance, drawing: ifcopenshell.entity_instance ) -> None: + ifc_file = tool.Ifc.get() pset = tool.Pset.get_element_pset(drawing, "EPset_Drawing") if not pset: pset = ifcopenshell.api.pset.add_pset(ifc_file, product=drawing, name="EPset_Drawing") From 3986d4e85b45665c76f01fb1dd2c9daa2c20a8c4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 12:59:16 +0500 Subject: [PATCH 092/657] Remove unused `tool.sequence` methods --- src/bonsai/bonsai/core/tool.py | 2 -- src/bonsai/bonsai/tool/sequence.py | 8 -------- 2 files changed, 10 deletions(-) diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index 830062d40a..7fcfd25fde 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -869,8 +869,6 @@ class Sequence: def get_animation_product_frames(cls, work_schedule, settings): pass def get_animation_settings(cls): pass def get_checked_tasks(cls): pass - def get_direct_nested_tasks(cls, task):pass - def get_direct_task_outputs(cls, task): pass def get_finish_date(cls): pass def get_highlighted_task(cls): pass def get_lag_time_attributes(cls): pass diff --git a/src/bonsai/bonsai/tool/sequence.py b/src/bonsai/bonsai/tool/sequence.py index 4e3144dc26..a2a2cb9668 100644 --- a/src/bonsai/bonsai/tool/sequence.py +++ b/src/bonsai/bonsai/tool/sequence.py @@ -566,14 +566,6 @@ class Sequence(bonsai.core.tool.Sequence): if len(tasks) and len(tasks) > props.active_task_index: return tool.Ifc.get().by_id(tasks[props.active_task_index].ifc_definition_id) - @classmethod - def get_direct_nested_tasks(cls, task: ifcopenshell.entity_instance) -> list[ifcopenshell.entity_instance]: - return ifcopenshell.util.sequence.get_nested_tasks(task) - - @classmethod - def get_direct_task_outputs(cls, task: ifcopenshell.entity_instance) -> list[ifcopenshell.entity_instance]: - return ifcopenshell.util.sequence.get_direct_task_outputs(task) - @classmethod def enable_editing_work_calendar_times(cls, work_calendar: ifcopenshell.entity_instance) -> None: props = cls.get_work_calendar_props() From 428d88f01cf2b7b69883de916ebc5cf2e2630783 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 13:05:04 +0500 Subject: [PATCH 093/657] Fix missing bsdd `pydantic` dependency in #7145 --- src/bsdd/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bsdd/pyproject.toml b/src/bsdd/pyproject.toml index 2704dc673e..76e0e5353a 100644 --- a/src/bsdd/pyproject.toml +++ b/src/bsdd/pyproject.toml @@ -26,6 +26,7 @@ classifiers = [ dependencies = [ "requests", "typing-extensions", + "pydantic", ] [project.optional-dependencies] From 3fe9279bb44b9300753772c388d8b2de9a1fccda Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 13:13:25 +0500 Subject: [PATCH 094/657] pyproject - fix typo --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d950a6e3be..f2cdb67b34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ disableBytesTypePromotions = true reportUnnecessaryTypeIgnoreComment = true # Define here general ruff settings, -# then they will be inherited projects .toml files. +# then they will be inherited by projects' .toml files. # This allows using assuming different Python version for different projects. [tool.ruff] exclude = [ From 145c629d922c8c525e294577826b56ce62f34938 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 12:29:47 +0500 Subject: [PATCH 095/657] Fix core geometry tests after e662308 c4d54f7 --- src/bonsai/test/core/test_geometry.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bonsai/test/core/test_geometry.py b/src/bonsai/test/core/test_geometry.py index 76e3dc9777..25bf19078a 100644 --- a/src/bonsai/test/core/test_geometry.py +++ b/src/bonsai/test/core/test_geometry.py @@ -195,8 +195,9 @@ class TestAddRepresentation: class TestSwitchRepresentation: def test_switching_to_a_representation(self, ifc, geometry): - ifc.is_edited("obj").should_be_called().will_return(False) geometry.get_object_data("obj").should_be_called().will_return("current_obj_data") + ifc.get_entity("obj").should_be_called().will_return("element") + geometry.clear_cache("element").should_be_called() geometry.reimport_element_representations("obj", "mapped_rep", apply_openings=True).should_be_called() subject.switch_representation( ifc, From e879dac4bde17d11a5c787aecd396f168ed7b59b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 14:05:00 +0500 Subject: [PATCH 096/657] Remove obsolete tests after e662308 --- src/bonsai/test/core/test_geometry.py | 28 --------------------------- 1 file changed, 28 deletions(-) diff --git a/src/bonsai/test/core/test_geometry.py b/src/bonsai/test/core/test_geometry.py index 25bf19078a..75d6a6b728 100644 --- a/src/bonsai/test/core/test_geometry.py +++ b/src/bonsai/test/core/test_geometry.py @@ -207,34 +207,6 @@ class TestSwitchRepresentation: apply_openings=True, ) - def test_updating_a_representation_if_the_blender_object_has_been_edited_prior_to_switching(self, ifc, geometry): - ifc.is_edited("obj").should_be_called().will_return(True) - geometry.is_box_representation("mapped_rep").should_be_called().will_return(False) - 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.reimport_element_representations("obj", "mapped_rep", apply_openings=True).should_be_called() - subject.switch_representation( - ifc, - geometry, - obj="obj", - representation="mapped_rep", - ) - - def test_not_switching_if_an_updated_representation_is_the_same_one_we_were_going_to_switch_to(self, ifc, geometry): - ifc.is_edited("obj").should_be_called().will_return(True) - geometry.is_box_representation("mapped_rep").should_be_called().will_return(False) - 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(False) - subject.switch_representation( - ifc, - geometry, - obj="obj", - representation="mapped_rep", - ) - class TestGetRepresentationIfcParameters: def test_run(self, geometry): From 51e2e7cd82ea6320cbb820e9edd972c923efccd4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 14:11:36 +0500 Subject: [PATCH 097/657] Fix boundary bim test after 6c31d43 --- src/bonsai/test/bim/feature/boundary.feature | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bonsai/test/bim/feature/boundary.feature b/src/bonsai/test/bim/feature/boundary.feature index 4b42a0bc2e..dcfaa8b802 100644 --- a/src/bonsai/test/bim/feature/boundary.feature +++ b/src/bonsai/test/bim/feature/boundary.feature @@ -22,6 +22,8 @@ Scenario: Add boundary from space And the cursor is at "0.5,0.5,0" And I deselect all objects And I press "bim.generate_space" + And I look at the "Spatial Decomposition" panel + And I set the "is_visible" property to "TRUE" When I select the object "IfcSpace/Space" And I press "bim.add_boundary" Then the object "IfcRelSpaceBoundary/None" exists From 29ab446f8c163749da132edd8a9b908669abc86c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 14:20:54 +0500 Subject: [PATCH 098/657] use common rst syntax in doc-strings --- .../bonsai/bim/module/drawing/decoration.py | 28 +++---- .../bonsai/bim/module/drawing/helper.py | 22 +++--- .../bonsai/bim/module/drawing/scheduler.py | 9 +-- src/bonsai/bonsai/core/root.py | 3 +- src/bonsai/bonsai/tool/blender.py | 12 ++- src/bonsai/bonsai/tool/debug.py | 11 ++- src/bonsai/bonsai/tool/web.py | 78 +++++++------------ src/ifccsv/ifccsv.py | 3 +- .../ifcopenshell/__init__.py | 22 ++---- .../ifcopenshell/entity_instance.py | 13 ++-- .../ifcopenshell/util/cost.py | 6 +- .../ifcopenshell/util/sequence.py | 12 ++- 12 files changed, 85 insertions(+), 134 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index d47e8a85c5..94c63a548b 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -188,11 +188,9 @@ class BaseDecorator: def get_splines(self, obj: bpy.types.Object) -> Generator[list[Vector]]: """Iterates through splines - Args: - obj: Blender object with Curve data - Yields: - verts: points of each spline, world coords + :param obj: Blender object with Curve data + :yield: points of each spline, world coords """ assert type(obj.data) is bpy.types.Curve for spline in obj.data.splines: @@ -204,12 +202,10 @@ class BaseDecorator: def get_path_geom(self, obj: bpy.types.Object, topo: bool = True): """Parses path geometry into line segments - Args: - obj: Blender object with data of type Curve - topo: bool; if types of vertices are needed + :param obj: Blender object with data of type Curve + :param topo: if types of vertices are needed - Returns: - vertices: 3-tuples of coords + :return: vertices: 3-tuples of coords indices: 2-tuples of each segment verices' indices topology: types of vertices 0: internal @@ -240,11 +236,9 @@ class BaseDecorator: def get_mesh_geom(self, obj, check_mode=True): """Parses mesh geometry into line segments - Args: - obj: Blender object with data of type Mesh + :param obj: Blender object with data of type Mesh - Returns: - vertices: 3-tuples of coords + :return: vertices: 3-tuples of coords indices: 2-tuples of each segment verices' indices """ if check_mode and obj.data.is_editmode: @@ -375,11 +369,9 @@ class BaseDecorator: ): """Draw text label - Args: - pos: bottom-center - multiline: \n characters will be interpreted as line breaks - - aligned and centered at segment middle + :param pos: bottom-center + :param multiline: ``\n`` characters will be interpreted as line breaks + aligned and centered at segment middle NOTE: `blf.draw` seems to ignore the \n character, so we have to split the text ourselves and use the `line_no` argument of `draw_label` diff --git a/src/bonsai/bonsai/bim/module/drawing/helper.py b/src/bonsai/bonsai/bim/module/drawing/helper.py index 3f250373b5..474abc496f 100644 --- a/src/bonsai/bonsai/bim/module/drawing/helper.py +++ b/src/bonsai/bonsai/bim/module/drawing/helper.py @@ -422,8 +422,8 @@ def ortho_view_frame( Similar to `bpy.types.Camera.view_frame` - :arg camera: camera of drawing - :arg margin: margins, in scene units + :param camera: camera of drawing + :param margin: margins, in scene units :return: (xmin, xmax, ymin, ymax, zmin, zmax) in local camera coordinates """ props = tool.Drawing.get_camera_props(camera) @@ -444,8 +444,8 @@ def almost_zero(v): def clip_segment(bounds, segm): """Clipping line segment to bounds - :arg bounds: (xmin, xmax, ymin, ymax) - :arg segm: 2 vertices of the segment + :param bounds: (xmin, xmax, ymin, ymax) + :param segm: 2 vertices of the segment :return: 2 new vertices of segment or None if segment outside the bounding box """ # Liang–Barsky algorithm @@ -494,8 +494,8 @@ def clip_segment(bounds, segm): def elevate_segment(bounds, segm): """Elevate line xy-perpendicular segment vertically - :arg bounds: (xmin, xmax, ymin, ymax) - :arg segm: 2 vertices of the segment + :param bounds: (xmin, xmax, ymin, ymax) + :param segm: 2 vertices of the segment :return: 2 new vertices of segment or None if segment outside the bounding box """ _, _, ymin, ymax, zmin, _ = bounds @@ -545,13 +545,11 @@ def add_newline_between_words(text: str, newline_at: int) -> str: def get_relative_z(obj: bpy.types.Object, element, abs_z: float) -> float: """Return relative Z of an element, accounting for its spatial container. - Args: - obj: The Blender object representing the element. - element: The IFC entity for the object. - abs_z: The absolute Z value in world coordinates. + :param obj: The Blender object representing the element. + :param element: The IFC entity for the object. + :param abs_z: The absolute Z value in world coordinates. - Returns: - Relative Z value if the element is inside a spatial container, + :return: Relative Z value if the element is inside a spatial container, otherwise the absolute Z. """ z = abs_z diff --git a/src/bonsai/bonsai/bim/module/drawing/scheduler.py b/src/bonsai/bonsai/bim/module/drawing/scheduler.py index 6eefa35030..da80a46126 100644 --- a/src/bonsai/bonsai/bim/module/drawing/scheduler.py +++ b/src/bonsai/bonsai/bim/module/drawing/scheduler.py @@ -544,11 +544,10 @@ class Scheduler: """ Adds text to svg. - Args: - p_tags: list of cell's P tags from odt file - box_alignment: alignment of text in box - wrap_text: if True, text will be wrapped to fit in cell - cell_width: width of cell, used for wrapping text + :param p_tags: list of cell's P tags from odt file + :param box_alignment: alignment of text in box + :param wrap_text: if True, text will be wrapped to fit in cell + :param cell_width: width of cell, used for wrapping text """ text_lines = [str(p) for p in p_tags] box_alignment_params = SvgWriter.get_box_alignment_parameters(box_alignment) diff --git a/src/bonsai/bonsai/core/root.py b/src/bonsai/bonsai/core/root.py index baf13695f1..d43c20a343 100644 --- a/src/bonsai/bonsai/core/root.py +++ b/src/bonsai/bonsai/core/root.py @@ -70,8 +70,7 @@ def assign_class( ifc_representation_class: Optional[str] = None, ) -> Optional[ifcopenshell.entity_instance]: """ - Args: - context: is not optional if `should_add_representation` is True + :param context: is not optional if ``should_add_representation`` is True TODO: Do NOT use should_add_representation. Because it internally calls geometry.add_representation which is 1,000 lines of Blender -> IFC magic. diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 1747ae0b0f..df8d12b90b 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -1065,7 +1065,7 @@ class Blender(bonsai.core.tool.Blender): """Tries to validate the current BIM modifier parameters for the active object Goes into path editing mode if the modifier supports it - Returns True if an action was taken, False otherwise + :return: True if an action was taken, False otherwise """ if cls.is_roof(element): if cls.is_editing_roof_parameters(obj): @@ -1089,7 +1089,7 @@ class Blender(bonsai.core.tool.Blender): def try_canceling_editing_modifier_parameters_or_path(cls, obj: bpy.types.Object) -> bool: """Tries to cancel the current BIM modifier parameters or path edition for the active object - Returns True if an action was taken, False otherwise + :return: True if an action was taken, False otherwise """ if cls.is_editing_railing_path(obj): bpy.ops.bim.cancel_editing_railing_path() @@ -1672,12 +1672,10 @@ class Blender(bonsai.core.tool.Blender): - "user_interface.wcol_menu.text" (Menu Text) - "user_interface.wcol_menu.text_sel" (Menu Text Selected) - Args: - color_path (str, optional): The attribute path relative to bpy.context.preferences.themes[0]. - threshold (float, optional): The RGB sum threshold for determining dark mode. Default is 1.671. + :param color_path: The attribute path relative to bpy.context.preferences.themes[0]. + :param threshold: The RGB sum threshold for determining dark mode. Default is 1.671. - Returns: - str: 'dm' (dark mode) if the RGB sum is > threshold, otherwise 'lm' (light mode). + :return: 'dm' (dark mode) if the RGB sum is > threshold, otherwise 'lm' (light mode). """ full_path = f"bpy.context.preferences.themes[0].{color_path}" diff --git a/src/bonsai/bonsai/tool/debug.py b/src/bonsai/bonsai/tool/debug.py index 35e877e734..8bd17fa1c1 100644 --- a/src/bonsai/bonsai/tool/debug.py +++ b/src/bonsai/bonsai/tool/debug.py @@ -143,12 +143,11 @@ class Debug(bonsai.core.tool.Debug): Note that Styles UI (or other UI) should be updated manually after using this method. - Args: - object_type: The type of object to merge - by_name_or_identification_only: If True, merge based only on Name attribute (or equivalent identifier). - Strips .XXX suffix patterns (e.g., 'foo.001' matches 'foo', 'foo.002'). - For PERSON, uses Identification. For APPLICATION, uses ApplicationFullName. - For PERSON_AND_ORGANIZATION, uses combination of person and organization identifiers. + :param object_type: The type of object to merge + :param by_name_or_identification_only: If True, merge based only on Name attribute (or equivalent identifier). + Strips .XXX suffix patterns (e.g., 'foo.001' matches 'foo', 'foo.002'). + For PERSON, uses Identification. For APPLICATION, uses ApplicationFullName. + For PERSON_AND_ORGANIZATION, uses combination of person and organization identifiers. """ def normalize_name(name: str) -> str: diff --git a/src/bonsai/bonsai/tool/web.py b/src/bonsai/bonsai/tool/web.py index 7ab178bde7..2e1628378f 100644 --- a/src/bonsai/bonsai/tool/web.py +++ b/src/bonsai/bonsai/tool/web.py @@ -80,8 +80,7 @@ class Web(bonsai.core.tool.Web): This method creates a temporary socket to bind to a free port. It then retrieves the port number, and returns it. - Returns: - int: The port number that was generated. + :return: The port number that was generated. """ print("Generating port number") with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: @@ -97,11 +96,9 @@ class Web(bonsai.core.tool.Web): If the connection is refused, the port is available for use; otherwise, it is in use. - Args: - port (int): The port number to check. + :param port: The port number to check. - Returns: - bool: True if the port is available, False if it is in use. + :return: bool: True if the port is available, False if it is in use. """ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: # connect_ex returns errno.SUCCESS (0) if the connection succeeds @@ -116,8 +113,7 @@ class Web(bonsai.core.tool.Web): This method sets up the environment, locates paths, and starts the WebSocket server process. - Args: - port (int): The port number on which to start the WebSocket server. + :param port: The port number on which to start the WebSocket server. """ import addon_utils @@ -156,8 +152,7 @@ class Web(bonsai.core.tool.Web): This method sets up an asynchronous Socket.IO client with reconnection attempts, starts an asyncio thread, connects to the WebSocket server, and sets the connection status. - Args: - port (int): The port number to connect to the WebSocket server. + :param port: The port number to connect to the WebSocket server. """ global ws_thread, sio @@ -239,11 +234,9 @@ class Web(bonsai.core.tool.Web): this method continuously checks for the existence of the WebSocket server's process ID (PID) in the running_pid JSON file. It waits for a maximum of 5 seconds before returning False. - Args: - port (int): The port number on which the WebSocket server is expected to be running. + :param port: The port number on which the WebSocket server is expected to be running. - Returns: - bool: True if the WebSocket server has started on the specified port within the maximum time limit, False otherwise. + :return: bool: True if the WebSocket server has started on the specified port within the maximum time limit, False otherwise. """ pid = ws_process.pid max_time = 5 @@ -273,12 +266,11 @@ class Web(bonsai.core.tool.Web): """ Sends data to the Web UI via Websocket connection. - Args: - data (Optional[Any]): The data to send. If None, just sends data from WebData. - data_key (str): The key under which to store the data in the payload. Defaults to "data". - event (str): The WebSocket event to emit. Defaults to "data". - namespace (str): The namespace for the WebSocket event. Defaults to "/blender". - use_web_data (bool): Whether to use data from WebData. Defaults to True. + :param data: The data to send. If None, just sends data from WebData. + :param data_key: The key under which to store the data in the payload. Defaults to "data". + :param event: The WebSocket event to emit. Defaults to "data". + :param namespace: The namespace for the WebSocket event. Defaults to "/blender". + :param use_web_data: Whether to use data from WebData. Defaults to True. """ global ws_thread @@ -302,8 +294,7 @@ class Web(bonsai.core.tool.Web): If the WebProperties.is_connected is False, it clears the queue and returns None to unregister the timer. If the queue is not empty, it processes each operator by calling the corresponding handling function. - Returns: - (Optional[float]): Returns None if the WebProperties.is_connected is False, otherwise returns 1.0 to continue the timer. + :return: Returns None if the WebProperties.is_connected is False, otherwise returns 1.0 to continue the timer. """ if not tool.Web.get_web_props().is_connected: with web_operator_queue.mutex: @@ -332,8 +323,7 @@ class Web(bonsai.core.tool.Web): """ this method handles the Schedules page operators. - Args: - operator_data (dict): A dictionary containing the operator data. + :param operator_data: A dictionary containing the operator data. """ if operator_data["type"] == "selection": bpy.ops.object.select_all(action="DESELECT") @@ -348,8 +338,7 @@ class Web(bonsai.core.tool.Web): """ this method handles the Cost page operators. - Args: - operator_data (dict): A dictionary containing the operator data. + :param operator_data: A dictionary containing the operator data. """ ifc_file = tool.Ifc.get() @@ -701,8 +690,7 @@ class Web(bonsai.core.tool.Web): """ this method handles the Sequencing page operators. - Args: - operator_data (dict): A dictionary containing the operator data. + :param operator_data: A dictionary containing the operator data. """ ifc_file = tool.Ifc.get() if operator_data["type"] == "getWorkSchedules": @@ -741,8 +729,7 @@ class Web(bonsai.core.tool.Web): """ this method handles the Documentation page operators. - Args: - operator_data (dict): A dictionary containing the operator data. + :param operator_data: A dictionary containing the operator data. """ if operator_data["type"] == "getDrawings": drawings_data = [] @@ -778,9 +765,8 @@ class Web(bonsai.core.tool.Web): """ Opens a web browser and navigates to the specified URL. - Args: - port (int): The port number to be used in the URL. - page (str): The page name to be appended to the URL. Default is an empty string which points to the index page. + :param port: The port number to be used in the URL. + :param page: The page name to be appended to the URL. Default is an empty string which points to the index page. """ webbrowser.open(f"http://127.0.0.1:{port}/{page}") @@ -859,8 +845,7 @@ class Web(bonsai.core.tool.Web): This method connects to the specified URL using WebSocket transport and registers an event listener for the `web_operator` event within the `/blender` namespace. - Args: - url (str): The URL of the WebSocket server to connect to. + :param url: The URL of the WebSocket server to connect to. """ await sio.connect(url, transports=["websocket"], namespaces="/blender") sio.on("web_operator", cls.sio_listen_web_operator, namespace="/blender") @@ -881,10 +866,9 @@ class Web(bonsai.core.tool.Web): This method emits an event with the provided data to the WebSocket server within the specified namespace. - Args: - data (Any): The data to send to the WebSocket server. - event (Optional[str]): The WebSocket event to emit. Defaults to "data". - namespace (Optional[str]): The namespace for the WebSocket event. Defaults to "/blender". + :param data: The data to send to the WebSocket server. + :param event: The WebSocket event to emit. Defaults to "data". + :param namespace: The namespace for the WebSocket event. Defaults to "/blender". """ await sio.emit(event, data, namespace=namespace) @@ -896,8 +880,7 @@ class Web(bonsai.core.tool.Web): This method receives data from the WebSocket server and attempts to place it into the `web_operator_queue`. If the queue is full, the data is discarded. - Args: - data (dict): The data received from the `web_operator` event. + :param data: The data received from the `web_operator` event. """ try: web_operator_queue.put_nowait(data) @@ -923,10 +906,9 @@ class AsyncioThread(threading.Thread): This class represents a thread that runs an asyncio event loop. It is used to handle asynchronous tasks in a separate thread from the main thread. - Args: - *args: Variable length argument list. These arguments are passed to the superclass constructor. - loop: An existing asyncio event loop. If None, a new event loop is created. - **kwargs: Arbitrary keyword arguments. These arguments are passed to the superclass constructor. + :param args: Variable length argument list. These arguments are passed to the superclass constructor. + :param loop: An existing asyncio event loop. If None, a new event loop is created. + :param kwargs: Arbitrary keyword arguments. These arguments are passed to the superclass constructor. """ super().__init__(*args, **kwargs) self.loop = loop or asyncio.new_event_loop() @@ -943,11 +925,9 @@ class AsyncioThread(threading.Thread): """ Run a coroutine in the asyncio event loop from a separate thread. - Args: - coro: The coroutine to be run. + :param coro: The coroutine to be run. - Returns: - The result of the coroutine. + :return: The result of the coroutine. """ return asyncio.run_coroutine_threadsafe(coro, loop=self.loop).result() diff --git a/src/ifccsv/ifccsv.py b/src/ifccsv/ifccsv.py index 076e54d5c3..6c87209770 100755 --- a/src/ifccsv/ifccsv.py +++ b/src/ifccsv/ifccsv.py @@ -411,8 +411,7 @@ class IfcCsv: concat: str = ", ", ) -> None: """ - Args: - table: filepath to the table. + :param table: filepath to the table. """ ext: FILE_FORMAT = table.split(".")[-1].lower() diff --git a/src/ifcopenshell-python/ifcopenshell/__init__.py b/src/ifcopenshell-python/ifcopenshell/__init__.py index 8b65d5afe7..b81db34cbc 100644 --- a/src/ifcopenshell-python/ifcopenshell/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/__init__.py @@ -319,13 +319,11 @@ def stream2(path: Union[Path, str], mmap: bool = False, page_size: int = 0): """Streams the content of a file path from disk, yielding each instance as a dictionary. - Args: - path (Union[Path, str]): input file path - mmap (bool): open the file contents using memory mapping - page_size (int): open file in python and feed chunks to the parser + :param path: Input file path + :param mmap: Open the file contents using memory mapping + :param page_size: Open file in python and feed chunks to the parser. - Yields: - dict: entity instance dictionaries + :yield: Entity instance dictionaries """ if page_size: import builtins @@ -359,11 +357,8 @@ def stream2_from_string(data: str) -> Generator[dict]: """Streams the content of a file path from string, yielding each instance as a dictionary. - Args: - data (str): input data - - Yields: - dict: entity instance dictionaries + :param data: Input data string + :yield: entity instance dictionaries """ streamer = ifcopenshell_wrapper.stream_from_string(data) while streamer: @@ -376,9 +371,8 @@ def convert_path_to_rocksdb(ifcspf_path: Union[Path, str], rocksdb_path: Union[P RocksDB encoding. RocksDB is an embedded key-value store that allows partial reads and is therefore more memory efficient with larger files. - Args: - ifcspf_path (Union[Path, str]): Input file path - needs to exist - rocksdb_path (Union[Path, str]): RocksDB file path (directory) - may exist, but result may then be invalid + :param ifcspf_path: Input file path - needs to exist + :param rocksdb_path: RocksDB file path (directory) - may exist, but result may then be invalid """ ser = ifcopenshell_wrapper.RocksDbSerializer(str(ifcspf_path), str(rocksdb_path), True) ser.finalize() diff --git a/src/ifcopenshell-python/ifcopenshell/entity_instance.py b/src/ifcopenshell-python/ifcopenshell/entity_instance.py index 5509167179..0cae2608f3 100644 --- a/src/ifcopenshell-python/ifcopenshell/entity_instance.py +++ b/src/ifcopenshell-python/ifcopenshell/entity_instance.py @@ -466,8 +466,7 @@ class entity_instance: def is_entity(self) -> bool: """Tests whether the instance is an entity type as opposed to a simple data type. - Returns: - bool: True if the instance is an entity + :return: True if the instance is an entity """ schema_name = self.wrapped_data.is_a(True).split(".")[0] decl = ifcopenshell_wrapper.schema_by_name(schema_name).declaration_by_name(self.is_a()) @@ -499,13 +498,11 @@ class entity_instance: return op(a, b) TypeError: '<' not supported between instances of 'int' and 'str' - Args: - other (_type_): Right hand side (or lhs when reverse = True) - op (_type_): The comparison operator (likely from the operator module) - reverse (bool, optional): When true swaps lhs and rhs. Defaults to False. + :param other: Right hand side (or lhs when reverse = True) + :param op: The comparison operator (likely from the operator module) + :param reverse: When true swaps lhs and rhs. Defaults to False. - Returns: - bool: The comparison predicate applied to self and other + :return: bool: The comparison predicate applied to self and other """ if isinstance(other, entity_instance): diff --git a/src/ifcopenshell-python/ifcopenshell/util/cost.py b/src/ifcopenshell-python/ifcopenshell/util/cost.py index 8bdca75e1b..a7e96221d9 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/cost.py +++ b/src/ifcopenshell-python/ifcopenshell/util/cost.py @@ -189,11 +189,9 @@ def get_cost_items_for_product(product: ifcopenshell.entity_instance) -> list[if """ Returns a list of cost items related to the given product. - Args: - product: An object of class IfcProduct representing a product. + :param product: An object of class IfcProduct representing a product. - Returns: - A list of IfcCostItem objects representing the cost items related to the product. + :return: A list of IfcCostItem objects representing the cost items related to the product. """ cost_items = [] for assignment in product.HasAssignments: diff --git a/src/ifcopenshell-python/ifcopenshell/util/sequence.py b/src/ifcopenshell-python/ifcopenshell/util/sequence.py index 1452aa011c..51f34b7226 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/sequence.py +++ b/src/ifcopenshell-python/ifcopenshell/util/sequence.py @@ -367,14 +367,12 @@ def get_tasks_for_product( """ Get all tasks assigned to or referenced by the given product. - Args: - product: An object that is assigned tasks or references tasks. - schedule: An optional string representing the schedule name to filter tasks by. + :param product: An object that is assigned tasks or references tasks. + :param schedule: An optional string representing the schedule name to filter tasks by. - Returns: - A tuple of two lists: - - The first list contains all tasks assigned to the product. - - The second list contains all tasks referenced by the product that are part of the given schedule. + :return: A tuple of two lists: + - The first list contains all tasks assigned to the product. + - The second list contains all tasks referenced by the product that are part of the given schedule. """ inputs = [ assignement.RelatingProcess From 64686dde5c4eebe28a5786bf7535b1bb43963234 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 14:27:58 +0500 Subject: [PATCH 099/657] Remove redundant `:type` from doc-strings Args types already covered by annotations --- src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py | 7 ------- src/ifcpatch/ifcpatch/recipes/OffsetStoreyElevations.py | 1 - src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py | 1 - src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py | 6 ------ src/ifcpatch/ifcpatch/recipes/SetRefElevation.py | 1 - src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py | 6 ------ src/ifcpatch/ifcpatch/recipes/TessellateElements.py | 2 -- 7 files changed, 24 deletions(-) diff --git a/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py b/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py index d5cd0e4947..e147b783d2 100644 --- a/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py +++ b/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py @@ -54,27 +54,20 @@ class Patcher: entire IFC model. :param x: The X coordinate to offset by in project length units. - :type x: typing.Union[str, float] :param y: The Y coordinate to offset by in project length units. - :type y: typing.Union[str, float] :param z: The Z coordinate to offset by in project length units. - :type z: typing.Union[str, float] :param should_rotate_first: Whether or not to rotate first and then translate, or to first translate and rotate afterwards. Defaults to rotate first then translate. - :type should_rotate_first: bool :param ax: An optional angle to rotate by. If only this angle is specified, it is treated as the angle to rotate in plan view (i.e. around the Z axis). If all angle parameters are specified, then it is treated as the angle to rotate around the X axis. Angles are in decimal degrees and positive is anticlockwise. - :type ax: typing.Union[str, float],optional :param ay: An optional angle to rotate by for 3D rotations along the Y axis. Angles are in decimal degrees and positive is anticlockwise. - :type ay: typing.Union[str, float],optional :param az: An optional angle to rotate by for 3D rotations along the Z axis. Angles are in decimal degrees and positive is anticlockwise. - :type az: typing.Union[str, float],optional Example: diff --git a/src/ifcpatch/ifcpatch/recipes/OffsetStoreyElevations.py b/src/ifcpatch/ifcpatch/recipes/OffsetStoreyElevations.py index 4b3efd7c71..f40e0a840c 100644 --- a/src/ifcpatch/ifcpatch/recipes/OffsetStoreyElevations.py +++ b/src/ifcpatch/ifcpatch/recipes/OffsetStoreyElevations.py @@ -26,7 +26,6 @@ class Patcher: All objects placed relative to the storeys will also be shifted. :param z: The Z value in project length units to offset storeys by. - :type z: typing.Union[str, float] Example: diff --git a/src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py b/src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py index 63c595ca9e..0c3475725d 100644 --- a/src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py +++ b/src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py @@ -36,7 +36,6 @@ class Patcher: :param only_duplicates: If set to True, new GlobalIds will only be generated for duplicate IDs. This is a safe thing to run to ensure IFCs are valid. If False, all GlobalIds will be regenerated. - :type only_duplicates: bool Example: diff --git a/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py b/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py index ee0b4c1568..0136a6de9c 100644 --- a/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py +++ b/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py @@ -68,19 +68,13 @@ class Patcher: points used in object placements. Choosing "Both" will replace all cartesian points regardless of use (useful if the model has both large placement offsets and large geometry offsets). - :type mode: str :param automatic_offset_point: Choose, whether the offset should be determined automatically or specified manually. - :type automatic_offset_point: bool :param threshold: The threshold for deciding, whether a coordinate is treated as a large coordinate. - :type threshold: float :param x: The x-ordinate of the manually specified offset point. - :type x: Union[str, float] :param y: The y-ordinate of the manually specified offset point. - :type y: Union[str, float] :param z: The z-ordinate of the manually specified offset point. - :type z: Union[str, float] Example: diff --git a/src/ifcpatch/ifcpatch/recipes/SetRefElevation.py b/src/ifcpatch/ifcpatch/recipes/SetRefElevation.py index a39b564cd9..57daef3a93 100644 --- a/src/ifcpatch/ifcpatch/recipes/SetRefElevation.py +++ b/src/ifcpatch/ifcpatch/recipes/SetRefElevation.py @@ -32,7 +32,6 @@ class Patcher: The reference elevation is simply a numerical attribute. :param elevation: The elevation to set. - :type elevation: typing.Union[str, float] Example: diff --git a/src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py b/src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py index ba83d9a556..d5c2e8da94 100644 --- a/src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py +++ b/src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py @@ -38,20 +38,14 @@ class Patcher: Sets the world coordinate system to whatever you want. :param x: The X coordinate. - :type x: typing.Union[str, float] :param y: The Y coordinate. - :type y: typing.Union[str, float] :param z: The Z coordinate. - :type z: typing.Union[str, float] :param ax: An angle to rotate by for 3D rotations along the X axis. Angles are in decimal degrees and positive is anticlockwise. - :type ax: typing.Union[str, float] :param ay: An angle to rotate by for 3D rotations along the Y axis. Angles are in decimal degrees and positive is anticlockwise. - :type ay: typing.Union[str, float] :param az: An angle to rotate by for 3D rotations along the Z axis. Angles are in decimal degrees and positive is anticlockwise. - :type az: typing.Union[str, float] Example: diff --git a/src/ifcpatch/ifcpatch/recipes/TessellateElements.py b/src/ifcpatch/ifcpatch/recipes/TessellateElements.py index 1d8ee1933c..0638568fe4 100644 --- a/src/ifcpatch/ifcpatch/recipes/TessellateElements.py +++ b/src/ifcpatch/ifcpatch/recipes/TessellateElements.py @@ -47,10 +47,8 @@ class Patcher: See example bug: https://github.com/Autodesk/revit-ifc/issues/707 :param query: Query string to filter out elements to convert, defaults to "IfcBeam" - :type query: str :param force_faceted_brep: Force using IfcFacetedBreps instead of IfcPolygonalFaceSets, defaults to `False` - :type force_faceted_brep: bool Example: From a7c8c908fea9b4ed9782a1ed920114f7a430f05a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 16:17:30 +0500 Subject: [PATCH 100/657] Fix left out invalid mesh data blocks and fix failing geom core test (after fcee54c) --- src/bonsai/bonsai/core/geometry.py | 9 +++++---- src/bonsai/bonsai/tool/geometry.py | 6 ++++++ src/bonsai/test/bim/feature/geometry.feature | 2 ++ src/bonsai/test/bim/test_feature.py | 5 +++++ src/bonsai/test/core/test_geometry.py | 3 --- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/core/geometry.py b/src/bonsai/bonsai/core/geometry.py index 7f35d3bd2a..99512f75b8 100644 --- a/src/bonsai/bonsai/core/geometry.py +++ b/src/bonsai/bonsai/core/geometry.py @@ -147,7 +147,7 @@ def remove_representation( assert element element_type = geometry.get_element_type(element) data = None - has_switched_from_data = False + data_removed_by_switch_representation = False if element_type and (geometry.is_mapped_representation(representation) or geometry.is_type_product(element)): representation = geometry.resolve_mapped_representation(representation) data = geometry.get_representation_data(representation) @@ -155,7 +155,7 @@ def remove_representation( for element in geometry.get_elements_of_type(element_type): obj = ifc.get_object(element) if obj: - has_switched_from_data = True + data_removed_by_switch_representation = True geometry.switch_from_representation(obj, representation) obj = ifc.get_object(element_type) if obj: @@ -164,12 +164,13 @@ def remove_representation( else: data = geometry.get_representation_data(representation) if data and geometry.has_data_users(data): - has_switched_from_data = True + data_removed_by_switch_representation = True geometry.switch_from_representation(obj, representation) ifc.run("geometry.unassign_representation", product=element, representation=representation) ifc.run("geometry.remove_representation", representation=representation) - if data and not has_switched_from_data: + + if data and not data_removed_by_switch_representation: geometry.delete_data(data) diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index 879df2adf0..83a9435665 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -1360,6 +1360,8 @@ class Geometry(bonsai.core.tool.Geometry): If no other representation present, will replace object with an empty. Method assumes that `obj` does have a current representation (it could be not `representation`). + + Will clean up old ``obj.data`` if no other users exist. """ element = tool.Ifc.get_entity(obj) assert element @@ -1378,7 +1380,11 @@ class Geometry(bonsai.core.tool.Geometry): # `representation` is the only representation for object. if new_representation is None: + old_data = obj.data + assert old_data is not None cls.recreate_object_with_data(obj, None) + if not cls.has_data_users(old_data): + cls.delete_data(old_data) return bonsai.core.geometry.switch_representation( diff --git a/src/bonsai/test/bim/feature/geometry.feature b/src/bonsai/test/bim/feature/geometry.feature index 9e1ac25245..3bbf22a5c2 100644 --- a/src/bonsai/test/bim/feature/geometry.feature +++ b/src/bonsai/test/bim/feature/geometry.feature @@ -102,8 +102,10 @@ Scenario: Remove representation - remove an active representation And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" And I press "bim.assign_class" When the variable "representation_body" is "{ifc}.by_type('IfcShapeRepresentation')[0].id()" + And the variable "representation_context" is "{ifc}.by_type('IfcShapeRepresentation')[0].ContextOfItems.id()" And I press "bim.remove_representation(representation_id={representation_body})" Then the object "IfcWall/Cube" has no data + And the mesh "{representation_context}/{representation_body}" does not exist Scenario: Remove representation - remove an unloaded representation Given an empty IFC project diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index bcfcdfba47..fa5ccb36d0 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -1194,6 +1194,11 @@ def the_material_name_does_not_exist(name): assert bpy.data.materials.get(name) is None, "Material exists" +@then(parsers.parse('the mesh "{name}" does not exist')) +def the_mesh_name_does_not_exist(name: str) -> None: + assert bpy.data.meshes.get(name) is None, f"Mesh '{name}' exists" + + def get_ifc_material_by_name(name: str) -> Union[ifcopenshell.entity_instance, None]: ifc_file = tool.Ifc.get() material = next((m for m in ifc_file.by_type("IfcMaterial") if m.Name == name), None) diff --git a/src/bonsai/test/core/test_geometry.py b/src/bonsai/test/core/test_geometry.py index 75d6a6b728..c9e3392808 100644 --- a/src/bonsai/test/core/test_geometry.py +++ b/src/bonsai/test/core/test_geometry.py @@ -231,7 +231,6 @@ class TestRemoveRepresentation: geometry.switch_from_representation("type_obj", "representation").should_be_called() ifc.run("geometry.unassign_representation", product="type", representation="representation").should_be_called() ifc.run("geometry.remove_representation", representation="representation").should_be_called() - geometry.delete_data("data").should_be_called() subject.remove_representation(ifc, geometry, obj="obj", representation="mapped_rep") def test_removing_an_unused_mapped_representation(self, ifc, geometry): @@ -254,7 +253,6 @@ class TestRemoveRepresentation: "geometry.unassign_representation", product="element", representation="representation" ).should_be_called() ifc.run("geometry.remove_representation", representation="representation").should_be_called() - geometry.delete_data("data").should_be_called() subject.remove_representation(ifc, geometry, obj="obj", representation="representation") def test_removing_an_actively_used_representation(self, ifc, geometry): @@ -269,7 +267,6 @@ class TestRemoveRepresentation: "geometry.unassign_representation", product="element", representation="representation" ).should_be_called() ifc.run("geometry.remove_representation", representation="representation").should_be_called() - geometry.delete_data("data").should_be_called() subject.remove_representation(ifc, geometry, obj="obj", representation="representation") def test_removing_an_unused_representation(self, ifc, geometry): From bf0aa247a05334b7decaadc9ce191d7bb224145a Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 14 Nov 2025 19:12:39 +0100 Subject: [PATCH 101/657] IfcConvert: only conditionally bypass properties --- src/ifcconvert/IfcConvert.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index c41c1eab80..4f19d31e17 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -1359,12 +1359,14 @@ bool init_input_file(const std::string& filename, IfcParse::IfcFile*& ifc_file, requires_init = true; } - ifc_file->bypass_type("IfcRelDefinesByProperties"); - ifc_file->bypass_type("IfcPropertySetDefinition"); - ifc_file->bypass_type("IfcProperty"); - ifc_file->bypass_type("IfcMaterialProperties"); - ifc_file->bypass_type("IfcProfileProperties"); - ifc_file->bypass_type("IfcPhysicalQuantity"); + if (bypass_properties) { + ifc_file->bypass_type("IfcRelDefinesByProperties"); + ifc_file->bypass_type("IfcPropertySetDefinition"); + ifc_file->bypass_type("IfcProperty"); + ifc_file->bypass_type("IfcMaterialProperties"); + ifc_file->bypass_type("IfcProfileProperties"); + ifc_file->bypass_type("IfcPhysicalQuantity"); + } #ifdef USE_MMAP if (mmap) { From d6daa64c48d3e1e771bc7ef3971dbd0041673449 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 17 Nov 2025 14:05:59 +0100 Subject: [PATCH 102/657] Support --element-hierarchy in .glb output --- src/ifcconvert/IfcConvert.cpp | 4 +- src/ifcgeom/Iterator.cpp | 20 +++-- src/serializers/GltfSerializer.cpp | 127 +++++++++++++++++++++++------ src/serializers/GltfSerializer.h | 2 + 4 files changed, 118 insertions(+), 35 deletions(-) diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index 4f19d31e17..44f5affb14 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -867,8 +867,8 @@ int main(int argc, char** argv) { geometry_settings.get().value = true; } - if (geometry_settings.get().get() && output_extension != DAE && output_extension != USD && output_extension != USDA && output_extension != USDC) { - cerr_ << "[Error] --use-element-hierarchy can be used only with .dae or .usd output.\n"; + if (geometry_settings.get().get() && output_extension != DAE && output_extension != USD && output_extension != USDA && output_extension != USDC && output_extension != GLB) { + cerr_ << "[Error] --use-element-hierarchy can be used only with .dae or .usd or .glb output.\n"; /// @todo Lots of duplicate error-and-exit code. write_log(!quiet); print_usage(); diff --git a/src/ifcgeom/Iterator.cpp b/src/ifcgeom/Iterator.cpp index 2ea32947a3..a7f700f4de 100644 --- a/src/ifcgeom/Iterator.cpp +++ b/src/ifcgeom/Iterator.cpp @@ -564,13 +564,19 @@ IfcGeom::Element* IfcGeom::Iterator::get() // We need to find all the parents while (parent_object != NULL && hasParent && parent_object->parent_id() != -1) { // Find the next parent - try { - parent_object = get_object(parent_object->parent_id()); - } catch (const std::exception& e) { - Logger::Error(e); - hasParent = false; - } - + auto pid = parent_object->parent_id(); + auto ifc_product = ifc_file->instance_by_id(pid)->as(); + if (ifc_product->declaration().name() == "IfcProject") { + hasParent = false; + } else { + try { + parent_object = get_object(pid); + } catch (const std::exception& e) { + Logger::Error(e); + hasParent = false; + } + } + // Add the previously found parent to the vector if (hasParent) parents.insert(parents.begin(), parent_object); diff --git a/src/serializers/GltfSerializer.cpp b/src/serializers/GltfSerializer.cpp index 32844c67ca..12627e0b39 100644 --- a/src/serializers/GltfSerializer.cpp +++ b/src/serializers/GltfSerializer.cpp @@ -180,35 +180,108 @@ void GltfSerializer::write(const IfcGeom::TriangulationElement* o) { return; } - node_array_.push_back(json_["nodes"].size()); + size_t current_node_index = json_["nodes"].size(); + auto current_leaf_index = current_node_index; + json_["nodes"].emplace_back(); + node_indices_[o->product()] = current_node_index; + node_array_.push_back(current_node_index); - const auto& m = o->transformation().data()->ccomponents(); - - // @todo check - std::array matrix_flat; - if (settings_.get().get()) { - matrix_flat = { - m(0,0), m(1,0), m(2,0), m(3,0), - m(0,1), m(1,1), m(2,1), m(3,1), - m(0,2), m(1,2), m(2,2), m(3,2), - m(0,3), m(1,3), m(2,3), m(3,3) - }; - } else { - // nb: note that this contains the Y-UP transform as well. - matrix_flat = { - m(0,0), m(2,0), -m(1,0), m(3,0), - m(0,1), m(2,1), -m(1,1), m(3,1), - m(0,2), m(2,2), -m(1,2), m(3,2), - m(0,3), m(2,3), -m(1,3), m(3,3) - }; + auto m = o->transformation().data()->ccomponents(); + + if (o->parents().empty()) { + roots_.push_back(current_node_index); } + if (!o->parents().empty()) { + // apply inverse of last parent -> overwrite product transform (m) + m = o->parents().back()->transformation().data()->ccomponents().inverse() * m; + + for (auto it = o->parents().rbegin(); it != o->parents().rend(); ++it) { + const auto jt = it + 1; + const bool is_root = jt == o->parents().rend(); + + auto kt = node_indices_.find((*it)->product()); + if (kt != node_indices_.end()) { + // parent already processed as part of other parent sequence + json_["nodes"][kt->second]["children"].push_back(current_node_index); + break; + } + + + auto mm = (*it)->transformation().data()->ccomponents(); + if (!is_root) { + mm = (*jt)->transformation().data()->ccomponents().inverse() * mm; + } + + json parent_node = json::object(); + + std::array matrix_flat; + if (settings_.get().get() || !is_root) { + // y-up transform is only accounted for on root + matrix_flat = { + mm(0,0), mm(1,0), mm(2,0), mm(3,0), + mm(0,1), mm(1,1), mm(2,1), mm(3,1), + mm(0,2), mm(1,2), mm(2,2), mm(3,2), + mm(0,3), mm(1,3), mm(2,3), mm(3,3) + }; + } else { + // nb: note that this contains the Y-UP transform. + matrix_flat = { + mm(0,0), mm(2,0), -mm(1,0), mm(3,0), + mm(0,1), mm(2,1), -mm(1,1), mm(3,1), + mm(0,2), mm(2,2), -mm(1,2), mm(3,2), + mm(0,3), mm(2,3), -mm(1,3), mm(3,3) + }; + } - static const std::array identity_matrix = {1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1}; + static const std::array identity_matrix = {1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1}; + + if (matrix_flat != identity_matrix) { + // glTF validator complains about identity matrices + parent_node["matrix"] = matrix_flat; + } + + size_t new_node_index = json_["nodes"].size(); + node_indices_[(*it)->product()] = new_node_index; + node_array_.push_back(new_node_index); + parent_node["name"] = object_id(o); + parent_node["children"] = json::array({current_node_index}); + json_["nodes"].push_back(parent_node); + + current_node_index = new_node_index; + + if (is_root) { + roots_.push_back(current_node_index); + } + } + } json node; - if (matrix_flat != identity_matrix) { - // glTF validator complains about identity matrices - node["matrix"] = matrix_flat; + { + std::array matrix_flat; + if (settings_.get().get() || !o->parents().empty()) { + // y-up transform is only accounted for on root + matrix_flat = { + m(0,0), m(1,0), m(2,0), m(3,0), + m(0,1), m(1,1), m(2,1), m(3,1), + m(0,2), m(1,2), m(2,2), m(3,2), + m(0,3), m(1,3), m(2,3), m(3,3) + }; + } else { + // nb: note that this contains the Y-UP transform. + matrix_flat = { + m(0,0), m(2,0), -m(1,0), m(3,0), + m(0,1), m(2,1), -m(1,1), m(3,1), + m(0,2), m(2,2), -m(1,2), m(3,2), + m(0,3), m(2,3), -m(1,3), m(3,3) + }; + } + + static const std::array identity_matrix = {1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1}; + + if (matrix_flat != identity_matrix) { + // glTF validator complains about identity matrices + node["matrix"] = matrix_flat; + } } node["name"] = object_id(o); @@ -300,7 +373,7 @@ void GltfSerializer::write(const IfcGeom::TriangulationElement* o) { } node["mesh"] = current_mesh_index; - json_["nodes"].push_back(node); + json_["nodes"][current_leaf_index] = node; } template @@ -372,7 +445,9 @@ void GltfSerializer::finalize() { } json scene_0; - if (north_rotation_ || ecef_transform_) { + if (geometry_settings().get().get()) { + scene_0["nodes"] = roots_; + } else if (north_rotation_ || ecef_transform_) { scene_0["nodes"] = std::array{json_["nodes"].size() - 1}; } else { scene_0["nodes"] = node_array_; diff --git a/src/serializers/GltfSerializer.h b/src/serializers/GltfSerializer.h index d2c6edab89..e08f2b55f1 100644 --- a/src/serializers/GltfSerializer.h +++ b/src/serializers/GltfSerializer.h @@ -38,6 +38,8 @@ private: json json_, node_array_; boost::optional ecef_transform_, north_rotation_; int bufferViewId; + std::map node_indices_; + std::vector roots_; int writeMaterial(const ifcopenshell::geometry::taxonomy::style::ptr style); public: From 487a4f345d757ba09f27b5074f4c37f433830ede Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 17 Nov 2025 14:06:39 +0100 Subject: [PATCH 103/657] Creoox json serializer --- src/ifcconvert/IfcConvert.cpp | 25 +- .../ifcopenshell/geom/main.py | 6 +- src/ifcwrap/IfcGeomWrapper.i | 1 + src/ifcwrap/IfcPython.i | 1 + src/serializers/JsonSerializer.cpp | 42 + src/serializers/JsonSerializer.h | 52 ++ .../schema_dependent/JsonSerializer.cpp | 857 ++++++++++++++++++ .../schema_dependent/JsonSerializer.h | 58 ++ 8 files changed, 1035 insertions(+), 7 deletions(-) create mode 100644 src/serializers/JsonSerializer.cpp create mode 100644 src/serializers/JsonSerializer.h create mode 100644 src/serializers/schema_dependent/JsonSerializer.cpp create mode 100644 src/serializers/schema_dependent/JsonSerializer.h diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index 44f5affb14..81a7b37a79 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -41,6 +41,7 @@ #include "../serializers/USDSerializer.h" #include "../serializers/TtlWktSerializer.h" #include "../serializers/RocksDbSerializer.h" +#include "../serializers/JsonSerializer.h" #include "../ifcgeom/IfcGeomFilter.h" #include "../ifcgeom/Iterator.h" @@ -128,7 +129,10 @@ void print_usage(bool suggest_help = true) << " .stp STEP Standard for the Exchange of Product Data\n" << " .igs IGES Initial Graphics Exchange Specification\n" << " .xml XML Property definitions and decomposition tree\n" - << " .rdb RocksDB RocksDB Key-Value store serialization of IFC data\n" +#ifdef WITH_GLTF + << " .json JSON Property definitions and decomposition tree in xeokit json format\n" +#endif + << " .rdb RocksDB RocksDB Key-Value store serialization of IFC data\n" << " .svg SVG Scalable Vector Graphics (2D floor plan)\n" #ifdef WITH_HDF5 << " .h5 HDF Hierarchical Data Format storing positions, normals and indices\n" @@ -654,7 +658,8 @@ int main(int argc, char** argv) { CACHE = IfcUtil::path::from_utf8(".cache"), HDF = IfcUtil::path::from_utf8(".h5"), XML = IfcUtil::path::from_utf8(".xml"), - // @todo this is just temporary as it doesn't make sense to require an extension for a DB + JSON = IfcUtil::path::from_utf8(".json"), + // @todo this is just temporary as it doesn't make sense to require an extension for a DB RDB = IfcUtil::path::from_utf8(".rdb"), CITY_JSON = IfcUtil::path::from_utf8(".cityjson"), IFC = IfcUtil::path::from_utf8(".ifc"), @@ -665,15 +670,23 @@ int main(int argc, char** argv) { // @todo clean up serializer selection // @todo detect program options that conflict with the chosen serializer - if (output_extension == XML) { + if (output_extension == XML || output_extension == JSON) { int exit_code = EXIT_FAILURE; try { if (init_input_file(IfcUtil::path::to_utf8(input_filename), ifc_file, no_progress || quiet, mmap)) { time_t start, end; time(&start); - XmlSerializer s(ifc_file, IfcUtil::path::to_utf8(output_temp_filename)); - Logger::Status("Writing XML output..."); - s.finalize(); + if (output_extension == XML) { + XmlSerializer s(ifc_file, IfcUtil::path::to_utf8(output_temp_filename)); + Logger::Status("Writing XML output..."); + s.finalize(); + } else { +#ifdef WITH_GLTF + JsonSerializer s(ifc_file, IfcUtil::path::to_utf8(output_temp_filename), JsonSerializer::JSON_DIALECT_CREOOX); + Logger::Status("Writing JSON output..."); + s.finalize(); +#endif + } time(&end); Logger::Status("Done! Conversion took " + format_duration(start, end)); diff --git a/src/ifcopenshell-python/ifcopenshell/geom/main.py b/src/ifcopenshell-python/ifcopenshell/geom/main.py index a1f00bb137..0800ac7763 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/main.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/main.py @@ -672,7 +672,7 @@ class serializers: # so no wrap_buffer_creation() for these serializers xml = ifcopenshell_wrapper.XmlSerializer buffer = ifcopenshell_wrapper.buffer - # gltf and hdf5 availability depend on IfcOpenShell configuration settings + # gltf, hdf5, collada and json availability depend on IfcOpenShell configuration settings try: gltf = ifcopenshell_wrapper.GltfSerializer except: @@ -685,6 +685,10 @@ class serializers: collada = ifcopenshell_wrapper.ColladaSerializer except: pass + try: + json = ifcopenshell_wrapper.JsonSerializer + except: + pass # ttl is always available since it doesn't depend on any C++ libraries, # just people might be using an outdated binary if hasattr(ifcopenshell_wrapper, "TtlWktSerializer"): diff --git a/src/ifcwrap/IfcGeomWrapper.i b/src/ifcwrap/IfcGeomWrapper.i index 6991abbdaf..e155c2837e 100644 --- a/src/ifcwrap/IfcGeomWrapper.i +++ b/src/ifcwrap/IfcGeomWrapper.i @@ -275,6 +275,7 @@ namespace { %include "../serializers/XmlSerializer.h" %include "../serializers/GltfSerializer.h" %include "../serializers/TtlWktSerializer.h" +%include "../serializers/JsonSerializer.h" %extend ifcopenshell::geometry::taxonomy::style { size_t instance_id() const { diff --git a/src/ifcwrap/IfcPython.i b/src/ifcwrap/IfcPython.i index 8595e264e2..689f9acfbf 100644 --- a/src/ifcwrap/IfcPython.i +++ b/src/ifcwrap/IfcPython.i @@ -308,6 +308,7 @@ constexpr bool is_std_vector_vector_v = is_std_vector_vector::value; #include "../serializers/GltfSerializer.h" #include "../serializers/TtlWktSerializer.h" #include "../serializers/RocksDbSerializer.h" + #include "../serializers/JsonSerializer.h" #ifdef HAS_SCHEMA_2x3 #include "../ifcparse/Ifc2x3.h" diff --git a/src/serializers/JsonSerializer.cpp b/src/serializers/JsonSerializer.cpp new file mode 100644 index 0000000000..ed3c4ac3d5 --- /dev/null +++ b/src/serializers/JsonSerializer.cpp @@ -0,0 +1,42 @@ +#include "JsonSerializer.h" + +#include +#include +#include + +#define EXTERNAL_DEFS(r, data, elem) \ + extern void BOOST_PP_CAT(init_JsonSerializer_Ifc, elem)(JsonSerializerFactory::Factory*); + +#define CALL_DEFS(r, data, elem) \ + BOOST_PP_CAT(init_JsonSerializer_Ifc, elem)(this); + +BOOST_PP_SEQ_FOR_EACH(EXTERNAL_DEFS, , SCHEMA_SEQ) + +JsonSerializerFactory::Factory::Factory() { + BOOST_PP_SEQ_FOR_EACH(CALL_DEFS, , SCHEMA_SEQ) +} + +void JsonSerializerFactory::Factory::bind(const std::string& schema_name, fn f) { + const std::string schema_name_lower = boost::to_lower_copy(schema_name); + this->insert(std::make_pair(schema_name_lower, f)); +} + +JsonSerializer* JsonSerializerFactory::Factory::construct(const std::string& schema_name, IfcParse::IfcFile* file, std::string json_filename, JsonSerializer::Dialect dialect) { + const std::string schema_name_lower = boost::to_lower_copy(schema_name); + auto it = this->find(schema_name_lower); + if (it == this->end()) { + throw IfcParse::IfcException("No Json serializer registered for " + schema_name); + } + return it->second(file, json_filename, dialect); +} + +JsonSerializer::JsonSerializer(IfcParse::IfcFile* file, const std::string& json_filename, JsonSerializer::Dialect dialect) { + if (file) { + implementation_ = JsonSerializerFactory::implementations().construct(file->schema()->name(), file, json_filename, dialect); + } +} + +JsonSerializerFactory::Factory& JsonSerializerFactory::implementations() { + static JsonSerializerFactory::Factory impl; + return impl; +} diff --git a/src/serializers/JsonSerializer.h b/src/serializers/JsonSerializer.h new file mode 100644 index 0000000000..fddade17fe --- /dev/null +++ b/src/serializers/JsonSerializer.h @@ -0,0 +1,52 @@ +#ifndef JSONSERIALIZER_H +#define JSONSERIALIZER_H + +#ifdef WITH_GLTF + +#include "../ifcgeom/Serializer.h" +#include "../ifcparse/IfcFile.h" +#include "../serializers/serializers_api.h" + +#include +#include + +class SERIALIZERS_API JsonSerializer : public Serializer { + public: + enum Dialect { + JSON_DIALECT_CREOOX + }; + private: + JsonSerializer* implementation_; + + protected: + std::string json_filename; + Dialect dialect_; + + public: + JsonSerializer(IfcParse::IfcFile* file, const std::string& json_filename, Dialect dialect = Dialect::JSON_DIALECT_CREOOX); + + virtual ~JsonSerializer() {} + + bool ready() { return true; } + void writeHeader() {} + + void finalize() { implementation_->finalize(); } + void setFile(IfcParse::IfcFile*) { throw IfcParse::IfcException("Should be supplied on construction"); } +}; + +struct SERIALIZERS_API JsonSerializerFactory { + typedef boost::function2 fn; + + class Factory : public std::map { + public: + Factory(); + void bind(const std::string& schema_name, fn); + JsonSerializer* construct(const std::string& schema_name, IfcParse::IfcFile*, std::string, JsonSerializer::Dialect); + }; + + static Factory& implementations(); +}; + +#endif + +#endif diff --git a/src/serializers/schema_dependent/JsonSerializer.cpp b/src/serializers/schema_dependent/JsonSerializer.cpp new file mode 100644 index 0000000000..10628afb67 --- /dev/null +++ b/src/serializers/schema_dependent/JsonSerializer.cpp @@ -0,0 +1,857 @@ +/******************************************************************************** +* * +* 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 . * +* * +********************************************************************************/ + +#ifdef WITH_GLTF + +#include "JsonSerializer.h" + +#include +#include + +#include + +#include "../../ifcparse/IfcSIPrefix.h" +#include "../../ifcparse/utils.h" +#include "../../ifcparse/IfcLogger.h" + +using json = nlohmann::json; + +namespace { + struct POSTFIX_SCHEMA(factory_t) { + JsonSerializer* operator()(IfcParse::IfcFile* file, const std::string& json_filename, JsonSerializer::Dialect dialect) const { + POSTFIX_SCHEMA(JsonSerializer)* s = new POSTFIX_SCHEMA(JsonSerializer)(file, json_filename, dialect); + s->setFile(file); + return s; + } + }; +} + +void MAKE_INIT_FN(JsonSerializer)(JsonSerializerFactory::Factory* mapping) { + static const std::string schema_name = STRINGIFY(IfcSchema); + POSTFIX_SCHEMA(factory_t) factory; + mapping->bind(schema_name, factory); +} + +class format_value_visitor : public boost::static_visitor { + public: + template + json operator()(const T& t) const { + if constexpr (std::is_same_v, Derived> || std::is_same_v, boost::dynamic_bitset<>> || std::is_same_v, IfcUtil::IfcBaseClass*> || std::is_same_v, std::vector> || std::is_same_v, std::vector> || std::is_same_v, std::vector> || std::is_same_v, std::vector>> || std::is_same_v, aggregate_of_instance::ptr> || std::is_same_v, aggregate_of_aggregate_of_instance::ptr> || std::is_same_v, std::vector>> || std::is_same_v, std::vector>> || std::is_same_v, empty_aggregate_t> || std::is_same_v, empty_aggregate_of_aggregate_t> || std::is_same_v, Blank>) { + return ""; + } else if constexpr (std::is_same_v, boost::logic::tribool>) { + // @todo handle indeterminate + return ""; + } else if constexpr (std::is_same_v, std::string>) { + return t; + } else if constexpr (std::is_same_v, EnumerationReference>) { + return t.value(); + } else { + return t; + } + } +}; + +class get_type_visitor : public boost::static_visitor { + public: + template + std::string operator()(const T& t) const { + // @todo more types + return "number"; + } +}; + +// A function to be called recursively. Template specialization is used +// to descend into decomposition, containment and property relationships. +template +void descend(A* instance, json& tree, IfcUtil::IfcBaseEntity* parent = nullptr) { + if (instance->declaration().is(IfcSchema::IfcObjectDefinition::Class())) { + return descend(instance->template as(), tree, parent); + } else { + return format_entity_instance(instance, tree); + } +} + +// Returns related entity instances using IFC's objectified relationship +// model. The second and third argument require a member function pointer. +template +auto get_related(T* t, F f, G g) { + typename U::list::ptr li = (*t.*f)()->template as(); + typename aggregate_of::ptr acc(new aggregate_of); + for (typename U::list::it it = li->begin(); it != li->end(); ++it) { + U* u = *it; + try { + acc->push((*u.*g)()->template as()); + } catch (IfcParse::IfcException& e) { + Logger::Error(e); + } + } + return acc; +} + +void format_entity_instance(IfcUtil::IfcBaseEntity* instance, json& tree, IfcUtil::IfcBaseEntity* parent = nullptr) { + /* + { + "id" : string, // Element GUID (IFC GloballyUniqueId) + "name" : string, // Element name + "longName" ?: string, // Long name (for spatial elements) + "type" : string, // IFC entity type + "parent" : string | null, // Parent element GUID (null for root) + "groups" ?: string[], // Array of group GUIDs + "ObjectType" ?: string, // ObjectType attribute (for IfcObject) + "tag" ?: string, // Tag attribute (for IfcElement) + "attributes" ?: { + // Special attributes + "elevation" ?: number // Elevation for IfcBuildingStorey + }, + "propertySetIds" ?: string[] // Array of property set GUIDs + } + */ + + json child; + + auto write_to_json = [&](const std::string& keyJson, const std::string& keyIfc) { + AttributeValue val; + try { + val = instance->get(keyIfc); + } catch (const IfcParse::IfcException&) { + // simply laziness like no attribute Tag on IfcProject + return; + } + if (!val.isNull()) { + child[keyJson] = val.apply_visitor(format_value_visitor{}); + } + }; + + write_to_json("id", "GlobalId"); + write_to_json("name", "Name"); + write_to_json("longName", "LongName"); + child["type"] = instance->declaration().name(); + if (parent) { + if (auto* rt = parent->as()) { + child["parent"] = rt->GlobalId(); + } + } + // @todo groups + write_to_json("ObjectType", "ObjectType"); + write_to_json("tag", "Tag"); + if (auto* storey = instance->as()) { + auto elevation = storey->Elevation(); + if (elevation) { + child["attributes"] = json::object({{"elevation", *elevation}}); + } + } + + if (auto* obj = instance->as()) { + IfcSchema::IfcPropertySetDefinition::list::ptr property_sets = get_related(obj, &IfcSchema::IfcObject::IsDefinedBy, &IfcSchema::IfcRelDefinesByProperties::RelatingPropertyDefinition); + if (!property_sets && property_sets->size()) { + child["propertySetIds"] = json::array(); + for (IfcSchema::IfcPropertySetDefinition::list::it it = property_sets->begin(); it != property_sets->end(); ++it) { + IfcSchema::IfcPropertySetDefinition* pset = *it; + child["propertySetIds"].push_back(pset->GlobalId()); + } + } + } + + tree.push_back(child); +} + +// @todo would be nice to generalize this with the XML version +// +// Descends into the tree by recursing into IfcRelContainedInSpatialStructure, +// IfcRelDecomposes, IfcRelDefinesByType, IfcRelDefinesByProperties relations. +template <> +void descend(IfcSchema::IfcObjectDefinition* product, json& tree, IfcUtil::IfcBaseEntity* parent) { + if (product->declaration().is(IfcSchema::IfcElement::Class())) { + auto voids = product->as()->FillsVoids(); + if (voids && voids->size() == 1 && (*voids->begin())->RelatingOpeningElement() != parent) { + // Fills are placed under their corresponding opening, return early to avoid duplication. + return; + } + } + + format_entity_instance(product, tree, parent); + + if (product->declaration().is(IfcSchema::IfcOpeningElement::Class())) { + IfcSchema::IfcOpeningElement* opening = product->as(); + IfcSchema::IfcElement::list::ptr fills = get_related( + opening, &IfcSchema::IfcOpeningElement::HasFillings, &IfcSchema::IfcRelFillsElement::RelatedBuildingElement); + + for (IfcSchema::IfcElement::list::it it = fills->begin(); it != fills->end(); ++it) { + descend(*it, tree, product); + } + } + + if (product->declaration().is(IfcSchema::IfcSpatialStructureElement::Class())) { + IfcSchema::IfcSpatialStructureElement* structure = product->as(); + + IfcSchema::IfcObjectDefinition::list::ptr elements = get_related(structure, &IfcSchema::IfcSpatialStructureElement::ContainsElements, &IfcSchema::IfcRelContainedInSpatialStructure::RelatedElements); + + for (IfcSchema::IfcObjectDefinition::list::it it = elements->begin(); it != elements->end(); ++it) { + descend(*it, tree, product); + } + } + + if (product->declaration().is(IfcSchema::IfcElement::Class())) { + IfcSchema::IfcElement* element = static_cast(product); + IfcSchema::IfcOpeningElement::list::ptr openings = get_related( + element, &IfcSchema::IfcElement::HasOpenings, &IfcSchema::IfcRelVoidsElement::RelatedOpeningElement); + + for (IfcSchema::IfcOpeningElement::list::it it = openings->begin(); it != openings->end(); ++it) { + descend(*it, tree, product); + } + } + +#ifdef SCHEMA_IfcRelDecomposes_HAS_RelatedObjects + IfcSchema::IfcObjectDefinition::list::ptr structures = get_related(product, &IfcSchema::IfcObjectDefinition::IsDecomposedBy, &IfcSchema::IfcRelDecomposes::RelatedObjects); +#else + IfcSchema::IfcObjectDefinition::list::ptr structures = get_related(product, &IfcSchema::IfcObjectDefinition::IsDecomposedBy, &IfcSchema::IfcRelAggregates::RelatedObjects); + + structures->push(get_related(product, &IfcSchema::IfcObjectDefinition::IsNestedBy, &IfcSchema::IfcRelNests::RelatedObjects)); +#endif + + for (IfcSchema::IfcObjectDefinition::list::it it = structures->begin(); it != structures->end(); ++it) { + IfcSchema::IfcObjectDefinition* ob = *it; + descend(ob, tree, product); + } + + // psets are handled as part of format_entity_instance() + // all other relationships are not needed in JSON output +} + +IfcSchema::IfcValue* get_value_from_prop(const IfcSchema::IfcProperty* prop) { + if (auto* psv = prop->as()) { + if (auto* nv = psv->NominalValue()) { + return nv; + } + } + // @todo other unit typs + return nullptr; +} + +IfcSchema::IfcUnit* get_unit_from_prop(const IfcSchema::IfcProperty* prop) { + if (auto* psv = prop->as()) { + if (auto* un = psv->Unit()) { + return un; + } + } + // @todo other unit typs + return nullptr; +} + +void POSTFIX_SCHEMA(JsonSerializer)::finalize() { + json output; + + IfcSchema::IfcProject::list::ptr projects = file->instances_by_type(); + if (projects->size() != 1) { + Logger::Message(Logger::LOG_ERROR, "Expected a single IfcProject"); + return; + } + IfcSchema::IfcProject* project = *projects->begin(); + + auto catch_exceptions = [this](const auto& fn) { + try { + return fn(); + } catch (const std::exception& e) { + Logger::Error(e); + static std::invoke_result_t v; + return v; + } + }; + + output["id"] = catch_exceptions([&]() { return file->header().file_name()->name(); }); + output["projectId"] = catch_exceptions([&]() { return project->GlobalId(); }); + output["author"] = catch_exceptions([&]() { return file->header().file_name()->author().empty() ? "unknown" : file->header().file_name()->author().front(); }); + output["createdAt"] = catch_exceptions([&]() { return file->header().file_name()->time_stamp(); }); + output["schema"] = catch_exceptions([&]() { return file->header().file_schema()->schema_identifiers().front(); }); // without schema we would not be here + output["creatingApplication"] = catch_exceptions([&]() { return file->header().file_name()->originating_system(); }); + output["properties"] = json::array(); + output["propertySets"] = json::array(); + output["units"] = json::array(); + output["projectUnits"] = json::object(); + output["metaObjects"] = json::array(); + output["groups"] = json::array(); + + // Maps for deduplication of properties and quantities + std::map property_to_index; + std::unordered_map json_to_index; + + // Obtain sequence of units because properties, quantities reference them by index. + // IfcUnit is a select of IfcDerivedUnit, IfcMonetaryUnit and IfcNamedUnit. + // Unfortunately, instances_by_type() does not support select types directly (even though there isn't a real reason for that). + IfcSchema::IfcUnit::list::ptr units(new IfcSchema::IfcUnit::list); + units->push(file->instances_by_type()->as()); + units->push(file->instances_by_type()->as()); + units->push(file->instances_by_type()->as()); + + auto format_property = [&](const IfcUtil::IfcBaseEntity* prop_) { + json jprop; + /* + { + "name": "LoadBearing", + "ifcPropertyType": "IfcPropertySingleValue", + "ifcValueType": "IfcBoolean", + "value": "True", + "valueType": "boolean" + }, + */ + if (auto* prop = prop_->as()) { + jprop["name"] = prop->Name(); + jprop["ifcPropertyType"] = prop->declaration().name(); + if (auto* val = get_value_from_prop(prop)) { + jprop["ifcValueType"] = val->declaration().name(); + jprop["value"] = val->data().get_attribute_value(nullptr, nullptr, 0, 0).apply_visitor(format_value_visitor{}); + jprop["valueType"] = val->data().get_attribute_value(nullptr, nullptr, 0, 0).apply_visitor(get_type_visitor{}); + } + if (auto* unit = get_unit_from_prop(prop)) { + jprop["unit"] = std::distance(units->begin(), std::find(units->begin(), units->end(), unit)); + } + } + + return jprop; + }; + + auto format_quantity = [&](const IfcUtil::IfcBaseEntity* qto_) { + json jprop; + /* + { + "name": "GrossVolume", + "ifcPropertyType": "IfcQuantityVolume", + "value": 12.5, + "valueType": "ElementQuantity", + "unit": 3 + } + */ + if (auto* qto = qto_->as()) { + jprop["name"] = qto->Name(); + jprop["ifcPropertyType"] = qto->declaration().name(); + if (auto* prop = qto->as()) { + jprop["ifcValueType"] = prop->declaration().attributes()[0]->name(); + jprop["value"] = prop->data().get_attribute_value(nullptr, nullptr, 0, 3).apply_visitor(format_value_visitor{}); + jprop["valueType"] = "number"; + if (auto* unit = prop->Unit()) { + jprop["unit"] = std::distance(units->begin(), std::find(units->begin(), units->end(), unit)); + } + } + } + return jprop; + }; + + auto deduplicate = [&](auto base_formatter) { + return [&, base_formatter](const IfcUtil::IfcBaseEntity* prop) mutable -> std::size_t { + if (auto it = property_to_index.find(prop); it != property_to_index.end()) { + return it->second; + } + + // Build JSON for this property + json j = base_formatter(prop); + + // Check if an identical JSON object is already in the global list + auto [it2, inserted] = json_to_index.try_emplace(j, output["properties"].size()); + if (inserted) { + // First time we've seen this JSON -> append to output + output["properties"].push_back(j); + } + + std::size_t idx = it2->second; + property_to_index.emplace(prop, idx); // remember for this pointer too + return idx; + }; + }; + auto property_index_for = deduplicate(format_property); + auto quantity_index_for = deduplicate(format_quantity); + + auto pset_predef_or_qsets = file->instances_by_type(); + for (auto& inst : *pset_predef_or_qsets) { + std::vector property_indices; + if (auto* pset = inst->as()) { + auto props = pset->HasProperties(); + for (auto& prop : *props) { + std::size_t index = property_index_for(prop); + property_indices.push_back(index); + } + } else if (auto* qset = inst->as()) { + auto qtos = qset->Quantities(); + for (auto& qto : *qtos) { + std::size_t index = quantity_index_for(qto); + property_indices.push_back(index); + } +#ifdef SCHEMA_HAS_IfcPreDefinedPropertySet + // ifc2x3 does not have this type yet, just inherits from IfcPropertySetDefinition + } else if (auto* pset = inst->as()) { +#else + } else { +#endif + /* + // not all_attributes() only the attributes defined on this particular concrete type + // @todo actually I don't know how to map PreDefinedPropertySet yet + auto attributes = inst->declaration().attributes(); + for (auto* a : attributes) { + auto val = inst->get(a->name()); + if (val.isNull()) { + continue; + } + val.apply_visitor(format_value_visitor{}); + } + */ + } + + /* + { + "id" : "3fG7k$Hj2_9Pxd8vD_xg7", + "name" : "Pset_WallCommon", + "type" : "IfcPropertySet", + "properties" : [ 0, 1, 2 ] + }, + */ + output["propertySets"].push_back(json::object({{"id", inst->GlobalId()}, + {"name", *inst->Name()}, // @todo optional + {"type", inst->declaration().name()}, + {"properties", property_indices}})); + } + + for (auto& unit : *units) { + /* + { + "name": string, // Unit symbol/name + "className": string, // IFC unit class + "unitEnum"?: string, // Unit type enum + "unitType"?: string, // Unit type (alternative) + "prefix"?: string, // SI prefix (for IfcSIUnit) + "userDefinedType"?: string, // User-defined type + "conversionFactor"?: { // Conversion factor (for IfcConversionBasedUnit) + "valueComponent": { + "value": number, + "valueType": string, + "ifcValueType": string + }, + "unitComponent": number // Reference to base unit index + }, + "elements"?: [ // For IfcDerivedUnit + { + "unit": number, // Reference to unit index + "exponent": number // Exponent value + } + ], + "dimensions"?: { // IfcDimensionalExponents + "LengthExponent": number, + "MassExponent": number, + "TimeExponent": number, + "ElectricCurrentExponent": number, + "ThermodynamicTemperatureExponent": number, + "AmountOfSubstanceExponent": number, + "LuminousIntensityExponent": number + } + } + */ + json junit; + junit["className"] = unit->declaration().name(); + if (auto* siunit = unit->as()) { + // @todo figure out how to encode name for si units + std::string unit_name = ""; + junit["unitEnum"] = IfcSchema::IfcUnitEnum::ToString(siunit->UnitType()); + if (siunit->Prefix()) { + junit["prefix"] = IfcSchema::IfcSIPrefix::ToString(*siunit->Prefix()); + unit_name.push_back(IfcSchema::IfcSIPrefix::ToString(*siunit->Prefix())[0]); + } + unit_name.push_back(IfcSchema::IfcSIUnitName::ToString(siunit->Name())[0]); + boost::to_lower(unit_name); + junit["name"] = unit_name; + } else if (auto* convunit = unit->as()) { + junit["name"] = convunit->Name(); + junit["unitEnum"] = IfcSchema::IfcUnitEnum::ToString(convunit->UnitType()); + if (convunit->ConversionFactor()) { + json jconv; + auto val = convunit->ConversionFactor()->ValueComponent(); + jconv["valueComponent"] = { + {"value", val->data().get_attribute_value(nullptr, nullptr, 0, 0).apply_visitor(format_value_visitor{})}, + {"valueType", val->data().get_attribute_value(nullptr, nullptr, 0, 0).apply_visitor(get_type_visitor{})} + }; + jconv["unitComponent"] = std::distance(units->begin(), std::find(units->begin(), units->end(), convunit->ConversionFactor()->UnitComponent())); + junit["conversionFactor"] = jconv; + } + } else if (auto* derunit = unit->as()) { +#ifdef SCHEMA_IfcDerivedUnit_HAS_Name + // 4.3 onwards + if (derunit->Name()) { + junit["name"] = *derunit->Name(); + } +#endif + json jelements = json::array(); + auto elements = derunit->Elements(); + for (auto& elem : *elements) { + jelements.push_back({ + {"unit", std::distance(units->begin(), std::find(units->begin(), units->end(), elem->Unit()))}, + {"exponent", elem->Exponent()} + }); + } + junit["elements"] = jelements; + } + if (auto* namedunit = unit->as()) { + // support for derived attributes is only available in python + if (namedunit->as() == nullptr) { + if (auto* dimexp = namedunit->Dimensions()) { + junit["dimensions"] = { + {"LengthExponent", dimexp->LengthExponent()}, + {"MassExponent", dimexp->MassExponent()}, + {"TimeExponent", dimexp->TimeExponent()}, + {"ElectricCurrentExponent", dimexp->ElectricCurrentExponent()}, + {"ThermodynamicTemperatureExponent", dimexp->ThermodynamicTemperatureExponent()}, + {"AmountOfSubstanceExponent", dimexp->AmountOfSubstanceExponent()}, + {"LuminousIntensityExponent", dimexp->LuminousIntensityExponent()}}; + } + } + } + output["units"].push_back(junit); + } + + auto project_units = project->UnitsInContext()->Units(); + /* + { + "LENGTHUNIT": number, + "AREAUNIT": number, + "VOLUMEUNIT": number, + "PLANEANGLEUNIT": number, + "MASSUNIT": number, + "TIMEUNIT": number, + // ... other unit types + }*/ + for (auto* pu : *project_units) { + auto it = std::find(units->begin(), units->end(), pu); + if (auto* nu = pu->as()) { + if (it != units->end()) { + output["projectUnits"][IfcSchema::IfcUnitEnum::ToString(nu->UnitType())] = std::distance(units->begin(), it); + } + } + } + + /* + // meta objects + { + "id": string, // Element GUID (IFC GloballyUniqueId) + "name": string, // Element name + "longName"?: string, // Long name (for spatial elements) + "type": string, // IFC entity type + "parent": string | null, // Parent element GUID (null for root) + "groups"?: string[], // Array of group GUIDs + "ObjectType"?: string, // ObjectType attribute (for IfcObject) + "tag"?: string, // Tag attribute (for IfcElement) + "attributes"?: { // Special attributes + "elevation"?: number // Elevation for IfcBuildingStorey + }, + "propertySetIds"?: string[] // Array of property set GUIDs + } + */ + + descend(project, output["metaObjects"]); + + std::ofstream f(IfcUtil::path::from_utf8(json_filename).c_str()); + f << output.dump(4); +} + + /* + + ptree root, header, units, decomposition, properties, quantities, types, layers, materials, work, calendars, connections, groups; + + + // Write the SPF header as XML nodes. + BOOST_FOREACH (const std::string& s, catch_exceptions([this]() { return file->header().file_description()->description(); })) { + header.add_child("file_description.description", ptree(s)); + } + BOOST_FOREACH (const std::string& s, catch_exceptions([this]() { return file->header().file_name()->author(); })) { + header.add_child("file_name.author", ptree(s)); + } + BOOST_FOREACH (const std::string& s, catch_exceptions([this]() { return file->header().file_name()->organization(); })) { + header.add_child("file_name.organization", ptree(s)); + } + BOOST_FOREACH (const std::string& s, catch_exceptions([this]() { return file->header().file_schema()->schema_identifiers(); })) { + header.add_child("file_schema.schema_identifiers", ptree(s)); + } + try { + header.put("file_description.implementation_level", file->header().file_description()->implementation_level()); + } catch (const IfcParse::IfcException& ex) { + std::stringstream ss; + ss << "Failed to get ifc file header file_description implementation_level, error: '" << ex.what() << "'"; + Logger::Message(Logger::LOG_ERROR, ss.str()); + } + try { + header.put("file_name.name", file->header().file_name()->name()); + } catch (const IfcParse::IfcException& ex) { + std::stringstream ss; + ss << "Failed to get ifc file header file_name name, error: '" << ex.what() << "'"; + Logger::Message(Logger::LOG_ERROR, ss.str()); + } + try { + header.put("file_name.time_stamp", file->header().file_name()->time_stamp()); + } catch (const IfcParse::IfcException& ex) { + std::stringstream ss; + ss << "Failed to get ifc file header file_name time_stamp, error: '" << ex.what() << "'"; + Logger::Message(Logger::LOG_ERROR, ss.str()); + } + try { + header.put("file_name.preprocessor_version", file->header().file_name()->preprocessor_version()); + } catch (const IfcParse::IfcException& ex) { + std::stringstream ss; + ss << "Failed to get ifc file header file_name preprocessor_version, error: '" << ex.what() << "'"; + Logger::Message(Logger::LOG_ERROR, ss.str()); + } + try { + header.put("file_name.originating_system", file->header().file_name()->originating_system()); + } catch (const IfcParse::IfcException& ex) { + std::stringstream ss; + ss << "Failed to get ifc file header file_name originating_system, error: '" << ex.what() << "'"; + Logger::Message(Logger::LOG_ERROR, ss.str()); + } + try { + // @nb inconsistent spelling + header.put("file_name.authorization", file->header().file_name()->authorization()); + } catch (const IfcParse::IfcException& ex) { + std::stringstream ss; + ss << "Failed to get ifc file header file_name authorization, error: '" << ex.what() << "'"; + Logger::Message(Logger::LOG_ERROR, ss.str()); + } + + // Descend into the decomposition structure of the IFC file. + descend(mapping_, project, decomposition); + + // Write all property sets and values as XML nodes. + IfcSchema::IfcPropertySet::list::ptr psets = file->instances_by_type(); + for (IfcSchema::IfcPropertySet::list::it it = psets->begin(); it != psets->end(); ++it) { + IfcSchema::IfcPropertySet* pset = *it; + ptree* node = format_entity_instance(mapping_, pset, properties); + if (node) { + format_properties(mapping_, pset->HasProperties(), *node); + } + } + + // Write all group sets and values as XML nodes. + IfcSchema::IfcGroup::list::ptr gsets = file->instances_by_type(); + std::set notRootGroups; //selfname, fathername + for (IfcSchema::IfcGroup::list::it it = gsets->begin(); it != gsets->end(); ++it) { + writeGroupToNode(mapping_, *it, groups, notRootGroups); + } + for (auto it = groups.begin(); it != groups.end();) { + if (notRootGroups.find(it->second.get(".Name")) != notRootGroups.end()) { + it = groups.erase(it); + } else { + it++; + } + } + + // Write all quantities and values as XML nodes. + IfcSchema::IfcElementQuantity::list::ptr qtosets = file->instances_by_type(); + for (IfcSchema::IfcElementQuantity::list::it it = qtosets->begin(); it != qtosets->end(); ++it) { + IfcSchema::IfcElementQuantity* qto = *it; + ptree* node = format_entity_instance(mapping_, qto, quantities); + if (node) { + format_quantities(mapping_, qto->Quantities(), *node); + } + } + + // Write all work schedules and values as XML nodes. + ptree pwork_schedules; + IfcSchema::IfcWorkSchedule::list::ptr pschedules = file->instances_by_type(); + for (IfcSchema::IfcWorkSchedule::list::it it = pschedules->begin(); it != pschedules->end(); ++it) { + IfcSchema::IfcWorkSchedule* schedule = *it; + ptree* nschedule = format_entity_instance(mapping_, schedule, pwork_schedules); + + if (nschedule) { + IfcSchema::IfcRelAssignsToControl::list::ptr controls = schedule->Controls(); + for (IfcSchema::IfcRelAssignsToControl::list::it it2 = controls->begin(); it2 != controls->end(); ++it2) { + IfcSchema::IfcRelAssignsToControl* control = *it2; + + IfcSchema::IfcObjectDefinition::list::ptr objects = control->RelatedObjects(); + for (IfcSchema::IfcObjectDefinition::list::it it3 = objects->begin(); it3 != objects->end(); ++it3) { + IfcSchema::IfcObjectDefinition* object = *it3; + + if (object && object->declaration().is(IfcSchema::IfcTask::Class())) { + IfcSchema::IfcTask* task = object->as(); + format_tasks(mapping_, task, *nschedule); + } + } + } + } + } + work.add_child("schedules", pwork_schedules); + + // Write all work plans and values as XML nodes. + ptree pwork_plans; + IfcSchema::IfcWorkPlan::list::ptr pplans = file->instances_by_type(); + for (IfcSchema::IfcWorkPlan::list::it it = pplans->begin(); it != pplans->end(); ++it) { + IfcSchema::IfcWorkPlan* plan = *it; + ptree* nschedule = format_entity_instance(mapping_, plan, pwork_plans); + + if (nschedule) { +#ifdef SCHEMA_IfcObjectDefinition_HAS_IsDecomposedBy + auto decomposed_by = plan->IsDecomposedBy(); + for (auto it2 = decomposed_by->begin(); it2 != decomposed_by->end(); ++it2) { + IfcSchema::IfcObjectDefinition::list::ptr related_objects = (*it2)->RelatedObjects(); + for (IfcSchema::IfcObjectDefinition::list::it it3 = related_objects->begin(); it3 != related_objects->end(); ++it3) { + IfcSchema::IfcObjectDefinition* work_schedule = *it3; + ptree pwork_schedule; + pwork_schedule.put(".id", work_schedule->GlobalId()); + nschedule->add_child("IfcWorkSchedule", pwork_schedule); + } + } +#endif + } + } + work.add_child("plans", pwork_plans); + + // Write all work calendars and values as XML nodes. +#ifdef SCHEMA_HAS_IfcWorkCalendar + IfcSchema::IfcWorkCalendar::list::ptr pcalendars = file->instances_by_type(); + for (IfcSchema::IfcWorkCalendar::list::it it = pcalendars->begin(); it != pcalendars->end(); ++it) { + IfcSchema::IfcWorkCalendar* calendar = *it; + ptree* ncalendar = format_entity_instance(mapping_, calendar, calendars); + + if (ncalendar) { + IfcSchema::IfcWorkTime::list::ptr working_times = calendar->WorkingTimes().value_or(nullptr); + if (working_times != nullptr) { + for (IfcSchema::IfcWorkTime::list::it it2 = working_times->begin(); it2 != working_times->end(); ++it2) { + IfcSchema::IfcWorkTime* working_time = *it2; + format_entity_instance(mapping_, working_time, *ncalendar); + } + } + } + } +#endif + + IfcSchema::IfcRelConnectsElements::list::ptr pconnections = file->instances_by_type(); + for (IfcSchema::IfcRelConnectsElements::list::it it = pconnections->begin(); it != pconnections->end(); ++it) { + IfcSchema::IfcRelConnectsElements* connection = *it; + + ptree* nconnection = format_entity_instance(mapping_, connection, connections); + + ptree nrelatedElement; + ptree nrelatingElement; + + format_entity_instance(mapping_, connection->RelatedElement(), nrelatedElement, true); + format_entity_instance(mapping_, connection->RelatingElement(), nrelatingElement, true); + + nconnection->add_child("RelatedElement", nrelatedElement); + nconnection->add_child("RelatingElement", nrelatingElement); + } + + // Write all type objects as XML nodes. + IfcSchema::IfcTypeObject::list::ptr type_objects = file->instances_by_type(); + for (IfcSchema::IfcTypeObject::list::it it = type_objects->begin(); it != type_objects->end(); ++it) { + IfcSchema::IfcTypeObject* type_object = *it; + ptree* node = descend(mapping_, type_object, types); + + if (node && type_object->HasPropertySets()) { + IfcSchema::IfcPropertySetDefinition::list::ptr property_sets = *type_object->HasPropertySets(); + for (IfcSchema::IfcPropertySetDefinition::list::it jt = property_sets->begin(); jt != property_sets->end(); ++jt) { + IfcSchema::IfcPropertySetDefinition* pset = *jt; + if (pset->declaration().is(IfcSchema::IfcPropertySet::Class())) { + format_entity_instance(mapping_, pset, *node, true); + } + } + } + } + + // Write all assigned units as XML nodes. + auto unit_assignments = project->UnitsInContext()->Units(); + for (auto it = unit_assignments->begin(); it != unit_assignments->end(); ++it) { + if ((*it)->declaration().is(IfcSchema::IfcNamedUnit::Class())) { + IfcSchema::IfcNamedUnit* named_unit = (*it)->as(); + ptree* node = format_entity_instance(mapping_, named_unit, units); + if (node) { + node->put(".SI_equivalent", IfcParse::get_SI_equivalent(named_unit)); + } + } else if ((*it)->declaration().is(IfcSchema::IfcMonetaryUnit::Class())) { + format_entity_instance(mapping_, (*it)->as(), units); + } + } + + // Layer assignments. IfcPresentationLayerAssignments don't have GUIDs (only optional Identifier) + // so use names as the IDs and only insert those with unique names. In case of possible duplicate names/IDs + // the first IfcPresentationLayerAssignment occurrence takes precedence. + std::set layer_names; + IfcSchema::IfcPresentationLayerAssignment::list::ptr layer_assignments = file->instances_by_type(); + for (IfcSchema::IfcPresentationLayerAssignment::list::it it = layer_assignments->begin(); it != layer_assignments->end(); ++it) { + const std::string& name = (*it)->Name(); + if (layer_names.find(name) == layer_names.end()) { + layer_names.insert(name); + ptree node; + node.put(".id", name); + format_entity_instance(mapping_, *it, node, layers); + } + } + + IfcSchema::IfcRelAssociatesMaterial::list::ptr materal_associations = file->instances_by_type(); + std::set emitted_materials; + for (IfcSchema::IfcRelAssociatesMaterial::list::it it = materal_associations->begin(); it != materal_associations->end(); ++it) { + IfcSchema::IfcMaterialSelect* mat = (**it).RelatingMaterial(); + if (emitted_materials.find(mat) == emitted_materials.end()) { + emitted_materials.insert(mat); + ptree node; + node.put(".id", qualify_unrooted_instance(mat)); + if (mat->as() || mat->as()) { + IfcSchema::IfcMaterialLayerSet* layerset = mat->as(); + if (!layerset) { + layerset = mat->as()->ForLayerSet(); + } + if (layerset->LayerSetName()) { + node.put(".LayerSetName", *layerset->LayerSetName()); + } + IfcSchema::IfcMaterialLayer::list::ptr ls = layerset->MaterialLayers(); + for (IfcSchema::IfcMaterialLayer::list::it jt = ls->begin(); jt != ls->end(); ++jt) { + ptree subnode; + if ((*jt)->Material()) { + subnode.put(".Name", (*jt)->Material()->Name()); + } + format_entity_instance(mapping_, *jt, subnode, node); + } + } else if (mat->as()) { + IfcSchema::IfcMaterial::list::ptr mats = mat->as()->Materials(); + for (IfcSchema::IfcMaterial::list::it jt = mats->begin(); jt != mats->end(); ++jt) { + ptree subnode; + format_entity_instance(mapping_, *jt, subnode, node); + } + } + format_entity_instance(mapping_, mat->as(), node, materials); + } + } + + root.add_child("ifc.header", header); + root.add_child("ifc.units", units); + root.add_child("ifc.connections", connections); + root.add_child("ifc.properties", properties); + root.add_child("ifc.quantities", quantities); + root.add_child("ifc.work", work); + root.add_child("ifc.calendars", calendars); + root.add_child("ifc.types", types); + root.add_child("ifc.layers", layers); + root.add_child("ifc.groups", groups); + root.add_child("ifc.materials", materials); + root.add_child("ifc.decomposition", decomposition); + + root.put("ifc..xmlns:xlink", "http://www.w3.org/1999/xlink"); + +#if BOOST_VERSION >= 105600 + boost::property_tree::xml_writer_settings settings = boost::property_tree::xml_writer_make_settings('\t', 1); +#else + boost::property_tree::xml_writer_settings settings('\t', 1); +#endif + + std::ofstream f(IfcUtil::path::from_utf8(xml_filename).c_str()); + boost::property_tree::write_xml(f, root, settings); + */ + +#endif \ No newline at end of file diff --git a/src/serializers/schema_dependent/JsonSerializer.h b/src/serializers/schema_dependent/JsonSerializer.h new file mode 100644 index 0000000000..0fd7c57040 --- /dev/null +++ b/src/serializers/schema_dependent/JsonSerializer.h @@ -0,0 +1,58 @@ +/******************************************************************************** + * * + * 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 . * + * * + ********************************************************************************/ + +#ifndef JSONSERIALIZERIMPL_H +#define JSONSERIALIZERIMPL_H + +#ifdef WITH_GLTF + +#include "../../ifcgeom/abstract_mapping.h" +#include "../../ifcparse/macros.h" +#include "../../serializers/JsonSerializer.h" + +#define INCLUDE_PARENT_PARENT_DIR(x) STRINGIFY(../../ifcparse/x.h) +#include INCLUDE_PARENT_PARENT_DIR(IfcSchema) +#undef INCLUDE_PARENT_PARENT_DIR +#define INCLUDE_PARENT_PARENT_DIR(x) STRINGIFY(../../ifcparse/x-definitions.h) +#include INCLUDE_PARENT_PARENT_DIR(IfcSchema) + +class POSTFIX_SCHEMA(JsonSerializer) : public JsonSerializer { + private: + IfcParse::IfcFile* file; + + // @todo + ifcopenshell::geometry::Settings settings_; + ifcopenshell::geometry::abstract_mapping* mapping_; + + public: + POSTFIX_SCHEMA(JsonSerializer)(IfcParse::IfcFile* file, const std::string& json_filename, JsonSerializer::Dialect dialect) + : JsonSerializer(0, "", dialect), mapping_(ifcopenshell::geometry::impl::mapping_implementations().construct(file, settings_)) + { + this->file = file; + this->json_filename = json_filename; + this->dialect_ = dialect; + } + + void finalize(); + void setFile(IfcParse::IfcFile*) {} +}; + +#endif + +#endif From 449d13bd5fea4ec4db29018e5533dcb1dd527875 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 16:50:42 +0500 Subject: [PATCH 104/657] Fix stub missing `construct_iterator` --- src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi b/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi index 47901a182e..ce2f11e65a 100644 --- a/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi +++ b/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi @@ -1597,6 +1597,7 @@ class uninitialized_tag: ... def arrange_polygons(polygons): ... def clear_schemas(): ... +def construct_iterator(geometry_library, settings, file, num_threads): ... def construct_iterator_with_include_exclude(geometry_library, settings, file, elems, include, num_threads): ... def construct_iterator_with_include_exclude_globalid(geometry_library, settings, file, elems, include, num_threads): ... def construct_iterator_with_include_exclude_id(geometry_library, settings, file, elems, include, num_threads): ... From 56a63cab6ef27d882c1d266d62d94c6f59a387b6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 16:53:14 +0500 Subject: [PATCH 105/657] build-deps - sync swig version with build-all.py --- win/build-deps.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 3c3a174a5f..630e166ff2 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -590,7 +590,7 @@ echo test %WIN_FLEX_BIZON% call :ExtractArchive %WIN_FLEX_BIZON_ZIP% "%DEPS_DIR%\%WIN_FLEX_BIZON%" "%DEPS_DIR%\%WIN_FLEX_BIZON%" IF NOT %ERRORLEVEL%==0 GOTO :Error -set SWIG_VERSION=4.3.0 +set SWIG_VERSION=4.1.0 set DEPENDENCY_NAME=SWIG %SWIG_VERSION% set DEPENDENCY_DIR=%DEPS_DIR%\swig-%SWIG_VERSION% set SWIG_ZIP=swigwin-%SWIG_VERSION%.zip From 9396cb226fe660488935d6e131e387caae4e7445 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 17:37:37 +0500 Subject: [PATCH 106/657] ci - add opencollada to fix failing stub test --- .github/workflows/ci.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4db5284ab1..c5838f1c67 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -97,6 +97,24 @@ jobs: .. sudo make -j$(nproc) install + # OpenCOLLADA is ancient, but we still have it in the main build. + # So adding it to CI to catch any breakages. + - name: build OpenCOLLADA + run: | + git clone https://github.com/KhronosGroup/OpenCOLLADA + cd OpenCOLLADA + git checkout v1.6.68 + patch -p1 --batch --forward -i ../nix/patches/opencollada/pr622_and_disable_subdirs.patch + patch -p1 --batch --forward -i ../nix/patches/opencollada/allow_static_libraries_config_on_unix.patch + mkdir build && cd build + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_FLAGS_INIT="-fPIC" + sudo make -j$(nproc) install + - name: Build ifcopenshell run: | echo $Python3_ROOT_DIR @@ -114,7 +132,6 @@ jobs: -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \ -DPYTHON_EXECUTABLE:FILEPATH=${{ env.pythonLocation }}/bin/python \ -DPYTHON_INCLUDE_DIR:PATH=${{ env.pythonLocation }}/include/python3.11 \ - -DCOLLADA_SUPPORT=Off \ -DUSE_MMAP=On \ "-DSCHEMA_VERSIONS=2x3;4;4x3_add2" \ -DGLTF_SUPPORT=On \ From cead5cc75d5dac043af0db2d92af6edf894e02e7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 18:42:22 +0500 Subject: [PATCH 107/657] ci - add swig build to fix failing stub test Older swig versions have some redundant symbols, using the one we use in other build scripts. --- .github/workflows/ci.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c5838f1c67..a969192d5d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: libboost-regex-dev \ libboost-system-dev \ libboost-thread-dev \ - swig libpcre3-dev libxml2-dev \ + libpcre3-dev libxml2-dev \ libtbb-dev nlohmann-json3-dev \ libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev libocct-data-exchange-dev \ libhdf5-dev libcgal-dev libeigen3-dev @@ -115,6 +115,23 @@ jobs: -DCMAKE_CXX_FLAGS_INIT="-fPIC" sudo make -j$(nproc) install + # Ubuntu has `swig` package, but we build it to match the version we use in the main build. + # To avoid failing tests when checking stub generation. + - name: build swig + run: | + # Remove default swig to avoid conflicts. + sudo apt remove --purge swig swig4.0 + sudo apt-get install -y libpcre2-dev bison + git clone https://github.com/swig/swig + cd swig + git checkout v4.1.0 + mkdir build && cd build + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + sudo make -j$(nproc) install + - name: Build ifcopenshell run: | echo $Python3_ROOT_DIR From 919231b0961bc069c56b4c6fa102be212366641a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 18:46:40 +0500 Subject: [PATCH 108/657] build-all.py - remove outdated comment --- nix/build-all.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/nix/build-all.py b/nix/build-all.py index 0cf0010e7e..e625c7c13b 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -941,8 +941,6 @@ if "pcre2" in targets: download_name=f"pcre2-{PCRE2_VERSION}.tar.bz2", ) -# An issue exists with swig-1.3 and python >= 3.2 -# Therefore, build a recent copy from source if "swig" in targets: build_dependency( name="swig", From d19b6d72efc2d18b385d38a1010b201cb7930f99 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 18:47:58 +0500 Subject: [PATCH 109/657] build-all.py - include swig-version to dependency name Otherwise it doesn't update and keeps using older cached version. --- nix/build-all.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nix/build-all.py b/nix/build-all.py index e625c7c13b..15f01145c7 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -943,7 +943,7 @@ if "pcre2" in targets: if "swig" in targets: build_dependency( - name="swig", + name=f"swig-{SWIG_VERSION}", mode="autoconf", build_tool_args=["--disable-ccache", f"--with-pcre2-prefix={DEPS_DIR}/install/pcre2-{PCRE2_VERSION}"], download_url="https://github.com/swig/swig.git", @@ -1429,6 +1429,9 @@ if "rocksdb" in targets: ] ) +if "swig" in targets: + cmake_args_prefix_path.append(f"{DEPS_DIR}/install/swig-{SWIG_VERSION}") + if not WASM and (not explicit_targets or {"IfcGeom", "IfcConvert", "IfcGeomServer"} & set(explicit_targets)): logger.info("\rConfiguring executables...") @@ -1481,9 +1484,6 @@ if "IfcOpenShell-Python" in targets: if os.path.exists(cache_path): os.remove(cache_path) - prefix_paths: list[str] = [] - if "swig" in targets: - prefix_paths.append(f"{DEPS_DIR}/install/swig") if python_path: # We couldn't just prefix PATH and have to provide all variables explicitly, # see ifcwrap/cmake for the details. @@ -1500,7 +1500,7 @@ if "IfcOpenShell-Python" in targets: run_cmake( "", cmake_args - + get_cmake_args_prefix_path(prefix_paths) + + get_cmake_args_prefix_path() + [ *([f"-DPYTHON_EXECUTABLE={python_executable}"] if python_executable else []), # Needed because pyodide is expecting setup.py to be in the root. From c5f6d47c44640cbc3ea66b532140c5dec2d1d317 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 17 Nov 2025 19:17:38 +0500 Subject: [PATCH 110/657] build-deps - include swig version to dependency name --- win/build-deps.cmd | 16 ++++++++++------ win/run-cmake.bat | 4 +++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 630e166ff2..ab2d0ac6a6 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -572,15 +572,21 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error :SWIG +set DEPENDENCY_NAME=SWIG +set SWIG_VERSION=4.1.0 +set DEPENDENCY_DIR=%DEPS_DIR%\swig-%SWIG_VERSION% +set DEPENDENCY_INSTALL_DIR=%INSTALL_DIR%\swig-%SWIG_VERSION% +echo SWIG_INSTALL_DIR=%DEPENDENCY_INSTALL_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" -IF EXIST "%INSTALL_DIR%\swigwin" ( - echo Found existing "%INSTALL_DIR%\swigwin", skipping +IF EXIST "%DEPENDENCY_INSTALL_DIR%" ( + echo Found existing "%DEPENDENCY_INSTALL_DIR%", skipping goto :cgal ) cd "%DEPS_DIR%" :: Install bizon dependency for SWIG. +set SWIG_DEPENDENCY_NAME=%DEPENDENCY_NAME% set DEPENDENCY_NAME=win_flex_bison set WIN_FLEX_BIZON=win_flex_bison-2.5.25 set WIN_FLEX_BIZON_ZIP=%WIN_FLEX_BIZON%.zip @@ -589,10 +595,8 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error echo test %WIN_FLEX_BIZON% call :ExtractArchive %WIN_FLEX_BIZON_ZIP% "%DEPS_DIR%\%WIN_FLEX_BIZON%" "%DEPS_DIR%\%WIN_FLEX_BIZON%" IF NOT %ERRORLEVEL%==0 GOTO :Error +set DEPENDENCY_NAME=%SWIG_DEPENDENCY_NAME% -set SWIG_VERSION=4.1.0 -set DEPENDENCY_NAME=SWIG %SWIG_VERSION% -set DEPENDENCY_DIR=%DEPS_DIR%\swig-%SWIG_VERSION% set SWIG_ZIP=swigwin-%SWIG_VERSION%.zip call :DownloadFile https://github.com/swig/swig/archive/refs/tags/v%SWIG_VERSION%.zip "%DEPS_DIR%" swig-%SWIG_VERSION%.zip IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -601,7 +605,7 @@ call :ExtractArchive swig-%SWIG_VERSION%.zip "%DEPS_DIR%" "%DEPENDENCY_DIR%" IF NOT %ERRORLEVEL%==0 GOTO :Error cd "%DEPENDENCY_DIR%" -call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\swigwin" ^ +call :RunCMake -DCMAKE_INSTALL_PREFIX="%DEPENDENCY_INSTALL_DIR%" ^ -DWITH_PCRE=OFF ^ -DBISON_EXECUTABLE="%DEPS_DIR%\%WIN_FLEX_BIZON%\win_bison.exe" IF NOT %ERRORLEVEL%==0 GOTO :Error diff --git a/win/run-cmake.bat b/win/run-cmake.bat index d250161407..7c121ef3df 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -99,7 +99,9 @@ for /f "usebackq delims=" %%v in (` set PYTHON_INCLUDE_DIR=%PYTHONHOME%\include set PYTHON_LIBRARY=%PYTHONHOME%\libs\python%PY_VER_MAJOR_MINOR%.lib -set SWIG_INSTALL_DIR=%INSTALL_DIR%\swigwin +:: `swigwin` is a legacy installation folder name, before we started using versioned folders. +:: we can remove it later. +if not defined SWIG_INSTALL_DIR set SWIG_INSTALL_DIR=%INSTALL_DIR%\swigwin set JSON_INCLUDE_DIR=%INSTALL_DIR%\json if not defined ADD_COMMIT_SHA set ADD_COMMIT_SHA=Off From 1b9acadd81525d2202642cfa19673c648aed97a7 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 17 Nov 2025 09:01:19 -0600 Subject: [PATCH 111/657] Disable text decorations when not in camera view --- src/bonsai/bonsai/bim/module/drawing/decoration.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 94c63a548b..62430efa17 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -2015,6 +2015,10 @@ class DecorationsHandler: if isinstance(space, bpy.types.SpaceView3D) and space.local_view: return # Don't draw decorations in local view + # disable decorations when not in camera view + if context.region_data.view_perspective != 'CAMERA': + return + if not DrawingsData.is_loaded: DrawingsData.load() From 9e9d66451177950c7f78f52fcaaacecb871858e4 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 17 Nov 2025 18:25:51 +0100 Subject: [PATCH 112/657] .glb --separate-z-up-node option --- src/ifcgeom/ConversionSettings.h | 2 +- src/ifcgeom/GeometrySerializer.h | 9 ++++++-- src/serializers/GltfSerializer.cpp | 36 +++++++++++++++++++----------- src/serializers/GltfSerializer.h | 2 +- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/ifcgeom/ConversionSettings.h b/src/ifcgeom/ConversionSettings.h index 720d25ba66..eb405a9e7c 100644 --- a/src/ifcgeom/ConversionSettings.h +++ b/src/ifcgeom/ConversionSettings.h @@ -647,7 +647,7 @@ namespace ifcopenshell { }; class Settings : public SettingsContainer< - std::tuple + std::tuple > {}; } diff --git a/src/ifcgeom/GeometrySerializer.h b/src/ifcgeom/GeometrySerializer.h index deef2c59c2..d8d4605de5 100644 --- a/src/ifcgeom/GeometrySerializer.h +++ b/src/ifcgeom/GeometrySerializer.h @@ -87,12 +87,17 @@ inline namespace settings { static constexpr const char* const description = "Use a geometrical section rather than full polyhedral output and footprint in TTL WKT"; static constexpr bool defaultvalue = false; }; + + struct SeparateZUpNode : public SettingBase { + static constexpr const char* const name = "separate-z-up-node"; + static constexpr const char* const description = "Introduce a separate Z-Up node into the GlTF hierarchy instead of multiplying the transform into the root node matrices"; + static constexpr bool defaultvalue = false; + }; } class SerializerSettings : public SettingsContainer < // @todo should we use tuple_cat here to unify the settings into a single class? - std::tuple -> + std::tuple> {}; } diff --git a/src/serializers/GltfSerializer.cpp b/src/serializers/GltfSerializer.cpp index 12627e0b39..3627106f42 100644 --- a/src/serializers/GltfSerializer.cpp +++ b/src/serializers/GltfSerializer.cpp @@ -215,7 +215,7 @@ void GltfSerializer::write(const IfcGeom::TriangulationElement* o) { json parent_node = json::object(); std::array matrix_flat; - if (settings_.get().get() || !is_root) { + if (settings_.get().get() || settings_.get().get() || !is_root) { // y-up transform is only accounted for on root matrix_flat = { mm(0,0), mm(1,0), mm(2,0), mm(3,0), @@ -258,7 +258,7 @@ void GltfSerializer::write(const IfcGeom::TriangulationElement* o) { json node; { std::array matrix_flat; - if (settings_.get().get() || !o->parents().empty()) { + if (settings_.get().get() || settings_.get().get() || !o->parents().empty()) { // y-up transform is only accounted for on root matrix_flat = { m(0,0), m(1,0), m(2,0), m(3,0), @@ -411,20 +411,30 @@ void write_block(std::ostream& fs, It begin, It end) { } void GltfSerializer::finalize() { + // separate z up + if (settings_.get().get()) { + z_up_transform_ = json::object(); + (*z_up_transform_)["name"] = "Z_UP"; + static const std::array z_up_matrix = { + 1, 0, 0, 0, + 0, 0, -1, 0, + 0, 1, 0, 0, + 0, 0, 0, 1}; + (*z_up_transform_)["matrix"] = z_up_matrix; + (*z_up_transform_)["children"] = roots_; + json_["nodes"].push_back(*z_up_transform_); + } + 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_); + (*north_rotation_)["children"] = roots_; } 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_); + (*ecef_transform_)["children"] = roots_; + } + + if (z_up_transform_) { + (*ecef_transform_)["children"] = roots_; } tmp_fstream1_.close(); @@ -447,7 +457,7 @@ void GltfSerializer::finalize() { json scene_0; if (geometry_settings().get().get()) { scene_0["nodes"] = roots_; - } else if (north_rotation_ || ecef_transform_) { + } else if (north_rotation_ || ecef_transform_ || z_up_transform_) { scene_0["nodes"] = std::array{json_["nodes"].size() - 1}; } else { scene_0["nodes"] = node_array_; diff --git a/src/serializers/GltfSerializer.h b/src/serializers/GltfSerializer.h index e08f2b55f1..d3754d90a0 100644 --- a/src/serializers/GltfSerializer.h +++ b/src/serializers/GltfSerializer.h @@ -36,7 +36,7 @@ private: std::ofstream fstream_, tmp_fstream1_, tmp_fstream2_; std::map materials_, meshes_; json json_, node_array_; - boost::optional ecef_transform_, north_rotation_; + boost::optional ecef_transform_, north_rotation_, z_up_transform_; int bufferViewId; std::map node_indices_; std::vector roots_; From 33cfa9e2b1438329270426a10d5a9efb7756562b Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 17 Nov 2025 18:57:22 +0100 Subject: [PATCH 113/657] function3 --- src/serializers/JsonSerializer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serializers/JsonSerializer.h b/src/serializers/JsonSerializer.h index fddade17fe..3aa4e0a002 100644 --- a/src/serializers/JsonSerializer.h +++ b/src/serializers/JsonSerializer.h @@ -35,7 +35,7 @@ class SERIALIZERS_API JsonSerializer : public Serializer { }; struct SERIALIZERS_API JsonSerializerFactory { - typedef boost::function2 fn; + typedef boost::function3 fn; class Factory : public std::map { public: From fc197c1d322db56252e751e9d05d2693045931f4 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 17 Nov 2025 19:09:31 +0100 Subject: [PATCH 114/657] anon namespace --- src/serializers/schema_dependent/JsonSerializer.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/serializers/schema_dependent/JsonSerializer.cpp b/src/serializers/schema_dependent/JsonSerializer.cpp index 10628afb67..656112e6fe 100644 --- a/src/serializers/schema_dependent/JsonSerializer.cpp +++ b/src/serializers/schema_dependent/JsonSerializer.cpp @@ -48,6 +48,8 @@ void MAKE_INIT_FN(JsonSerializer)(JsonSerializerFactory::Factory* mapping) { mapping->bind(schema_name, factory); } +namespace { + class format_value_visitor : public boost::static_visitor { public: template @@ -254,6 +256,8 @@ IfcSchema::IfcUnit* get_unit_from_prop(const IfcSchema::IfcProperty* prop) { return nullptr; } +} // namespace + void POSTFIX_SCHEMA(JsonSerializer)::finalize() { json output; From 1bc4e82b7d78010847907633c4a9cce40e4e7760 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 17 Nov 2025 19:15:20 +0100 Subject: [PATCH 115/657] reorder --- .../schema_dependent/JsonSerializer.cpp | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/serializers/schema_dependent/JsonSerializer.cpp b/src/serializers/schema_dependent/JsonSerializer.cpp index 656112e6fe..7c7ee890d9 100644 --- a/src/serializers/schema_dependent/JsonSerializer.cpp +++ b/src/serializers/schema_dependent/JsonSerializer.cpp @@ -78,17 +78,6 @@ class get_type_visitor : public boost::static_visitor { } }; -// A function to be called recursively. Template specialization is used -// to descend into decomposition, containment and property relationships. -template -void descend(A* instance, json& tree, IfcUtil::IfcBaseEntity* parent = nullptr) { - if (instance->declaration().is(IfcSchema::IfcObjectDefinition::Class())) { - return descend(instance->template as(), tree, parent); - } else { - return format_entity_instance(instance, tree); - } -} - // Returns related entity instances using IFC's objectified relationship // model. The second and third argument require a member function pointer. template @@ -173,6 +162,18 @@ void format_entity_instance(IfcUtil::IfcBaseEntity* instance, json& tree, IfcUti tree.push_back(child); } + +// A function to be called recursively. Template specialization is used +// to descend into decomposition, containment and property relationships. +template +void descend(A* instance, json& tree, IfcUtil::IfcBaseEntity* parent = nullptr) { + if (instance->declaration().is(IfcSchema::IfcObjectDefinition::Class())) { + descend(instance->template as(), tree, parent); + } else { + format_entity_instance(instance, tree); + } +} + // @todo would be nice to generalize this with the XML version // // Descends into the tree by recursing into IfcRelContainedInSpatialStructure, From 1a8831012b02a802807e7caadac6fcd3ebf1475c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Thu, 9 Oct 2025 10:55:02 -0300 Subject: [PATCH 116/657] Fix snapping for blender curve objects --- src/bonsai/bonsai/tool/raycast.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index c3d35f7bcb..0c2cfdfc15 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -267,7 +267,9 @@ class Raycast(bonsai.core.tool.Raycast): points.append(snap_point) return points if obj and obj.type == "CURVE": + mw = obj.matrix_world.copy() obj = bpy.data.objects.new("new_object", obj.to_mesh().copy()) + obj.matrix_world = mw @ obj.matrix_world if not custom_bmesh: bm = bmesh.new() From 300855276f0e94d07f1b7214261f4f1e1e0c0608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Mon, 13 Oct 2025 17:26:19 -0300 Subject: [PATCH 117/657] See #7046. Add Numpy version of a few Blender fuctions to improve precision. The snapping system was having a poor precision with large numbers. Some functions were rewritten to use Numpy instead of Mathutils. This seems to solve the issue, but further adjustments might be necessary Note: rv3d.perspective_matrix should be avoided in these context. Use a numpy version of np.array(window_matrix) @ np.array(view_matrix). See https://github.com/IfcOpenShell/IfcOpenShell/issues/7046 Note2: region_2d_to_origin_3d_np clamp should be used for the snap to work in orthographic view. --- src/bonsai/bonsai/tool/cad.py | 228 +++++++++++++++++++++++++++--- src/bonsai/bonsai/tool/raycast.py | 17 +-- 2 files changed, 217 insertions(+), 28 deletions(-) diff --git a/src/bonsai/bonsai/tool/cad.py b/src/bonsai/bonsai/tool/cad.py index a83598a63f..8c65f4babb 100644 --- a/src/bonsai/bonsai/tool/cad.py +++ b/src/bonsai/bonsai/tool/cad.py @@ -33,6 +33,7 @@ import sys import bpy import math import bmesh +import numpy as np import mathutils.geometry from mathutils import Vector, Matrix, geometry import itertools @@ -188,6 +189,33 @@ class Cad: """ return geometry.intersect_line_plane(v1, v2, plane_co, plane_no) + def intersect_edge_plane_v2(v1, v2, plane_co, plane_no, eps=1e-9): + """ + Numpy version of intersect_edge_plane + > takes an edges as two vector, and a plane as origin point and normal + < return the intersection point or None + """ + + # References: https://rosettacode.org/wiki/Find_the_intersection_of_a_line_with_a_plane#Python, + # https://stackoverflow.com/a/18543221 + + p0 = np.array((v1.x, v1.y, v1.z), dtype=np.float64) + p1 = np.array((v2.x, v2.y, v2.z), dtype=np.float64) + pc = np.array((plane_co.x, plane_co.y, plane_co.z), dtype=np.float64) + n = np.array((plane_no.x, plane_no.y, plane_no.z), dtype=np.float64) + + u = p1 - p0 + dot = np.dot(u, n) + if abs(dot) < eps: + # Line is parallel to plane (no intersection or lies in plane) + return None + + w = pc - p0 + fac = np.dot(w, n) / dot + p = p0 + fac * u + + return Vector(p) + @classmethod def intersect_edges( cls, edge1: tuple[Vector, Vector], edge2: tuple[Vector, Vector] @@ -215,47 +243,50 @@ class Cad: def intersect_edges_v2(cls, edge1, edge2): """ Calculate the closest points on two line segments. - Note: This function doesn't use intersect_line_line + Note: This function doesn't use intersect_line_line and uses Numpy for calculations > edge1: tuple of two vectors (v1, v2) representing the first segment > edge2: tuple of two vectors (v3, v4) representing the second segment < returns: tuple of two vectors (C1, C2) or (None, None) if lines are parallel """ - # This function seems to work better then intersect_line_line + # This function seems to work better than intersect_line_line # in orthogonal view # https://en.wikipedia.org/wiki/Skew_lines#Nearest_points is_2d = False # Starting and ending points - P1, P1_end = edge1 - P2, P2_end = edge2 - if len(P1) == 2: + p1, p1_end = edge1 + p2, p2_end = edge2 + if len(p1) == 2: is_2d = True - P1, P1_end = P1.to_3d(), P1_end.to_3d() - P2, P2_end = P2.to_3d(), P2_end.to_3d() + p1, p1_end = p1.to_3d(), p1_end.to_3d() + p2, p2_end = p2.to_3d(), p2_end.to_3d() + p1 = np.array((p1.x, p1.y, p1.z), dtype=np.float64) + p1_end = np.array((p1_end.x, p1_end.y, p1_end.z), dtype=np.float64) + p2 = np.array((p2.x, p2.y, p2.z), dtype=np.float64) + p2_end = np.array((p2_end.x, p2_end.y, p2_end.z), dtype=np.float64) # Directions - d1 = (P1_end - P1).normalized() - d2 = (P2_end - P2).normalized() + d1 = p1_end - p1 + d2 = p2_end - p2 + d1 /= np.linalg.norm(d1) or 1 # equivalent of Vector.normalized() or Vector / Vector.length + d2 /= np.linalg.norm(d2) or 1 - n = d1.cross(d2) + n = np.cross(d1, d2) # if n is zero, lines are parallel - if abs(n.length) < 1e-6: + if abs(np.linalg.norm(n)) < 1e-6: return None, None - n2 = d2.cross(n) - - C1 = P1 + ((P2 - P1).dot(n2) / (d1.dot(n2))) * d1 - - n1 = d1.cross(n) - - C2 = P2 + ((P1 - P2).dot(n1) / (d2.dot(n1))) * d2 + n2 = np.cross(d2, n) + c1 = p1 + (np.dot((p2 - p1), n2) / (np.dot(d1, n2))) * d1 + n1 = np.cross(d1, n) + c2 = p2 + (np.dot((p1 - p2), n1) / (np.dot(d2, n1))) * d2 if is_2d: - return C1.to_2d(), C2.to_2d() + return Vector(c1[:2].copy()), Vector(c2[:2].copy()) else: - return C1, C2 + return Vector(c1), Vector(c2) @classmethod def get_intersection(cls, edge1, edge2): @@ -807,3 +838,160 @@ class Cad: v1 = v2 return new_verts + + @classmethod + def region_2d_to_vector_3d_np(cls, region: bpy.types.Region, rv3d: bpy.types.RegionView3d, coord: Vector) -> Vector: + """ + Numpy version of view3d_utils.region_2d_to_vector_3d + Return a direction vector from the viewport at the specific 2d region + coordinate. + + > region: region of the 3D viewport, typically bpy.context.region. + > rv3d: 3D region data, typically bpy.context.space_data.region_3d. + > coord: 2d coordinates relative to the region: + (event.mouse_region_x, event.mouse_region_y) for example. + < returns a normalized 3d vector. + """ + view_m = np.array(rv3d.view_matrix) + window_m = np.array(rv3d.window_matrix) + viewinv = np.linalg.inv(view_m) + + if rv3d.is_perspective: + # For better precision with large numbers, avoid using rv3d.perspective_matrix. See https://github.com/IfcOpenShell/IfcOpenShell/issues/7046 + # Calculate it with view_matrix and window_matrix as numpy arrays. + pers_m = window_m @ view_m + persinv = np.linalg.inv(pers_m) + + out = np.array( + [(2.0 * coord[0] / region.width) - 1.0, (2.0 * coord[1] / region.height) - 1.0, -0.5, 1.0], + dtype=np.float64, + ) + + w = out[:3].dot(persinv[3, :3]) + persinv[3, 3] + + viewinv_translation = viewinv[:3, 3] + view_vector = (persinv.dot(out)[:3] / w) - viewinv_translation + else: + view_vector = -viewinv[:3, 2].copy() # -Z column + + view_vector /= np.linalg.norm(view_vector) or 1 # equivalent to Vector.normalized() + return Vector(view_vector) + + @classmethod + def region_2d_to_location_3d_np( + cls, region: bpy.types.Region, rv3d: bpy.types.RegionView3d, coord: Vector, depth_location: Vector + ) -> Vector: + """ + Numpy version of view3d_utils.region_2d_to_location_3d + Return a 3d location from the region relative 2d coords, aligned with + *depth_location*. + + > region: region of the 3D viewport, typically bpy.context.region. + > rv3d: 3D region data, typically bpy.context.space_data.region_3d. + > coord: 2d coordinates relative to the region: + (event.mouse_region_x, event.mouse_region_y) for example. + < returns a normalized 3d vector. + """ + coord_vec = cls.region_2d_to_vector_3d_np(region, rv3d, coord) + depth_location = np.array([depth_location[0], depth_location[1], depth_location[2]], dtype=np.float64) + + origin_start = cls.region_2d_to_origin_3d_np(region, rv3d, coord) + origin_end = origin_start + coord_vec + + if rv3d.is_perspective: + viewinv = np.linalg.inv(rv3d.view_matrix) + view_vec = viewinv[:3, 2].copy() + return cls.intersect_edge_plane_v2( + Vector(origin_start), Vector(origin_end), Vector(depth_location), Vector(view_vec) + ) + else: + return cls.point_on_edge( + Vector(depth_location), + (Vector(origin_start), Vector(origin_end)), + ) + + @classmethod + def region_2d_to_origin_3d_np( + cls, region: bpy.types.Region, rv3d: bpy.types.RegionView3d, coord: Vector, *, clamp: float = None + ) -> Vector: + """ + Numpy version of view3d_utils.region_2d_to_origin_3d + Return the 3d view origin from the region relative 2d coords. + + .. note:: + + Orthographic views have a less obvious origin, + the far clip is used to define the viewport near/far extents. + Since far clip can be a very large value, + the result may give with numeric precision issues. + + To avoid this problem, you can optionally clamp the far clip to a + smaller value based on the data you're operating on. + + + > region: region of the 3D viewport, typically bpy.context.region. + > rv3d: 3D region data, typically bpy.context.space_data.region_3d. + > coord: 2d coordinates relative to the region: + (event.mouse_region_x, event.mouse_region_y) for example. + > clamp: clamp: Clamp the maximum far-clip value used. + (negative value will move the offset away from the view_location) + < returns the origin of the viewpoint in 3d space. + """ + + view_m = np.array(rv3d.view_matrix) + window_m = np.array(rv3d.window_matrix) + viewinv = np.linalg.inv(view_m) + + if rv3d.is_perspective: + origin_start = viewinv[:3, 3].copy() + else: + pers_m = window_m @ view_m # See https://github.com/IfcOpenShell/IfcOpenShell/issues/7046 + persinv = np.linalg.inv(pers_m) + + dx = (2.0 * coord[0] / region.width) - 1.0 + dy = (2.0 * coord[1] / region.height) - 1.0 + + origin_start = (persinv[:3, 0] * dx) + (persinv[:3, 1] * dy) + persinv[:3, 3] + + if clamp != 0.0: + if rv3d.view_perspective != "CAMERA": + origin_offset = persinv[:3, 2].copy() # column 2 + if clamp is not None: + c = float(clamp) + if c < 0.0: + origin_offset = -origin_offset + c = -c + length = np.linalg.norm(origin_offset) + if length > c and length > 0.0: + origin_offset = (origin_offset / length) * c + origin_start = origin_start - origin_offset + + return Vector(origin_start) + + @classmethod + def location_3d_to_region_2d_np( + cls, region: bpy.types.Region, rv3d: bpy.types.RegionView3d, coord: Vector, *, default=None + ) -> Vector: + """ + Numpy version of view3d_utils.location_3d_to_region_2d + Return the *region* relative 2d location of a 3d position. + + > region: region of the 3D viewport, typically bpy.context.region. + > rv3d: 3D region data, typically bpy.context.space_data.region_3d. + > coord: 2d coordinates relative to the region: + (event.mouse_region_x, event.mouse_region_y) for example. + < returns a 2d location. + """ + pt = np.array((coord[0], coord[1], coord[2], 1.0), dtype=np.float64) + view_m = np.array(rv3d.view_matrix) + window_m = np.array(rv3d.window_matrix) + pers_m = window_m @ view_m + prj = pers_m.dot(pt) # 4-vector + w = prj[3] + if w > 0.0: + width_half = region.width / 2.0 + height_half = region.height / 2.0 + x = width_half + width_half * (prj[0] / w) + y = height_half + height_half * (prj[1] / w) + return Vector((float(x), float(y))) + return default diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index 0c2cfdfc15..b7939d608b 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -93,7 +93,7 @@ class Raycast(bonsai.core.tool.Raycast): return None for v in bbox: - coord_2d = view3d_utils.location_3d_to_region_2d(context.region, context.space_data.region_3d, v) + coord_2d = tool.Cad.location_3d_to_region_2d_np(context.region, context.space_data.region_3d, v) if coord_2d is not None: transposed_bbox.append(coord_2d) @@ -180,8 +180,9 @@ class Raycast(bonsai.core.tool.Raycast): if not mouse_pos: mouse_pos = event.mouse_region_x, event.mouse_region_y - view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, mouse_pos) - ray_origin = view3d_utils.region_2d_to_origin_3d(region, rv3d, mouse_pos) + view_vector = tool.Cad.region_2d_to_vector_3d_np(region, rv3d, mouse_pos) + ray_origin = tool.Cad.region_2d_to_origin_3d_np(region, rv3d, mouse_pos, clamp=10) # TODO clamp is hardcoded but might be necessary to adapt + ray_target = ray_origin + view_vector ray_direction = ray_target - ray_origin @@ -247,7 +248,7 @@ class Raycast(bonsai.core.tool.Raycast): snap_threshold = cls.calculate_snap_threshold(rv3d.view_distance) try: - loc = view3d_utils.region_2d_to_location_3d(region, rv3d, mouse_pos, ray_direction) + loc = tool.Cad.region_2d_to_location_3d_np(region, rv3d, mouse_pos, ray_direction) except: loc = Vector((0, 0, 0)) @@ -342,7 +343,7 @@ class Raycast(bonsai.core.tool.Raycast): snap_threshold = cls.calculate_snap_threshold(rv3d.view_distance) try: - loc = view3d_utils.region_2d_to_location_3d(region, rv3d, mouse_pos, ray_direction) + loc = tool.Cad.region_2d_to_location_3d_np(region, rv3d, mouse_pos, ray_direction) except: loc = Vector((0, 0, 0)) @@ -401,8 +402,8 @@ class Raycast(bonsai.core.tool.Raycast): default_container_elevation = 0.0 intersection = Vector((0, 0, default_container_elevation)) try: - loc = view3d_utils.region_2d_to_location_3d(region, rv3d, mouse_pos, ray_direction) - intersection = mathutils.geometry.intersect_line_plane(ray_target, loc, plane_origin, plane_normal) + loc = tool.Cad.region_2d_to_location_3d_np(region, rv3d, mouse_pos, ray_direction) + intersection = tool.Cad.intersect_edge_plane_v2(ray_target, loc, plane_origin, plane_normal) except: intersection = Vector((0, 0, default_container_elevation)) @@ -420,7 +421,7 @@ class Raycast(bonsai.core.tool.Raycast): snap_threshold = cls.calculate_snap_threshold(rv3d.view_distance) try: - loc = view3d_utils.region_2d_to_location_3d(region, rv3d, mouse_pos, ray_direction) + loc = tool.Cad.region_2d_to_location_3d_np(region, rv3d, mouse_pos, ray_direction) except: loc = Vector((0, 0, 0)) From 8647f9c3574968f369c577597c1ef9a73d898124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Mon, 13 Oct 2025 17:43:28 -0300 Subject: [PATCH 118/657] Polyline tool - avoids rounding angle when distance is too big. --- src/bonsai/bonsai/tool/polyline.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/tool/polyline.py b/src/bonsai/bonsai/tool/polyline.py index e4132c62d2..04806660a1 100644 --- a/src/bonsai/bonsai/tool/polyline.py +++ b/src/bonsai/bonsai/tool/polyline.py @@ -172,23 +172,24 @@ class Polyline(bonsai.core.tool.Polyline): angle = tool.Cad.angle_3_vectors( second_to_last_point, last_point, mouse_vector, new_angle=None, degrees=True ) + angle_round_threshold = 1000 # Avoids rounding when distance is too big # Round angle to the nearest 0.05 - angle = round(angle / 0.05) * 0.05 - + angle = round(angle / 0.05) * 0.05 if distance < angle_round_threshold else angle + orientation_angle = tool.Cad.angle_3_vectors( world_second_to_last_point, last_point, mouse_vector, new_angle=None, degrees=True ) # Round angle to the nearest 0.05 - orientation_angle = round(orientation_angle / 0.05) * 0.05 + orientation_angle = round(orientation_angle / 0.05) * 0.05 if distance < angle_round_threshold else angle if distance == 0: angle = 0 orientation_angle = 0 if input_ui: if should_round: - angle = 5 * round(angle / 5) + angle = 5 * round(angle / 5) if distance < angle_round_threshold else angle factor = tool.Snap.get_increment_snap_value(context) distance = factor * round(distance / factor) input_ui.set_value("X", mouse_vector.x) From 99c95bc92de3b4a4a3957119efe4c15822666be1 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 18 Nov 2025 16:12:59 +0500 Subject: [PATCH 119/657] black . --- src/bonsai/bonsai/bim/module/drawing/decoration.py | 2 +- src/bonsai/bonsai/tool/polyline.py | 4 ++-- src/bonsai/bonsai/tool/raycast.py | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 62430efa17..3860dcb58c 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -2016,7 +2016,7 @@ class DecorationsHandler: return # Don't draw decorations in local view # disable decorations when not in camera view - if context.region_data.view_perspective != 'CAMERA': + if context.region_data.view_perspective != "CAMERA": return if not DrawingsData.is_loaded: diff --git a/src/bonsai/bonsai/tool/polyline.py b/src/bonsai/bonsai/tool/polyline.py index 04806660a1..e8bacd1b4c 100644 --- a/src/bonsai/bonsai/tool/polyline.py +++ b/src/bonsai/bonsai/tool/polyline.py @@ -172,11 +172,11 @@ class Polyline(bonsai.core.tool.Polyline): angle = tool.Cad.angle_3_vectors( second_to_last_point, last_point, mouse_vector, new_angle=None, degrees=True ) - angle_round_threshold = 1000 # Avoids rounding when distance is too big + angle_round_threshold = 1000 # Avoids rounding when distance is too big # Round angle to the nearest 0.05 angle = round(angle / 0.05) * 0.05 if distance < angle_round_threshold else angle - + orientation_angle = tool.Cad.angle_3_vectors( world_second_to_last_point, last_point, mouse_vector, new_angle=None, degrees=True ) diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index b7939d608b..90bec96644 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -181,7 +181,9 @@ class Raycast(bonsai.core.tool.Raycast): mouse_pos = event.mouse_region_x, event.mouse_region_y view_vector = tool.Cad.region_2d_to_vector_3d_np(region, rv3d, mouse_pos) - ray_origin = tool.Cad.region_2d_to_origin_3d_np(region, rv3d, mouse_pos, clamp=10) # TODO clamp is hardcoded but might be necessary to adapt + ray_origin = tool.Cad.region_2d_to_origin_3d_np( + region, rv3d, mouse_pos, clamp=10 + ) # TODO clamp is hardcoded but might be necessary to adapt ray_target = ray_origin + view_vector ray_direction = ray_target - ray_origin From 890665b77b64402e4a871cb173dd14d3ee457103 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 18 Nov 2025 16:57:56 +0500 Subject: [PATCH 120/657] build-deps - fix reappearing "The system cannot find the file specified." error in logs because of the failing rename --- win/build-deps.cmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index ab2d0ac6a6..dd9af78115 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -401,7 +401,9 @@ call :ExtractArchive %BOOST_ZIP% "%DEPS_DIR%" %DEPENDENCY_DIR% IF NOT %ERRORLEVEL%==0 GOTO :Error :: top-level folder name changed when migrating to github releases -ren %DEPS_DIR%\boost-%BOOST_VERSION% boost_%BOOST_VER% +if exist "%DEPS_DIR%\boost-%BOOST_VERSION%". ( + ren %DEPS_DIR%\boost-%BOOST_VERSION% boost_%BOOST_VER% +) :: Build Boost build script if not exist "%DEPENDENCY_DIR%\project-config.jam". ( From b130925c5f1e893d3a00bbe5799e82a48a34e981 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 18 Nov 2025 17:00:15 +0500 Subject: [PATCH 121/657] build-deps - fix missing `cd` before trying to extract boost archive Not sure when it was introduced, but it was still using previous dependency path and leading to confusing error: ``` Boost 1.86.0 already downloaded. Skipping. Extracting Boost 1.86.0 into L:\Projects\Github\IfcOpenShell\_deps from boost-1.86.0-b2-nodocs.7z An error occurred ``` --- win/build-deps.cmd | 1 + 1 file changed, 1 insertion(+) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index dd9af78115..c707c82780 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -394,6 +394,7 @@ set BOOST_LIBRARYDIR=%DEPENDENCY_DIR%\stage\%GEN_SHORTHAND%\lib set ZIP_EXT=7z set BOOST_ZIP=boost-%BOOST_VERSION%-b2-nodocs.%ZIP_EXT% +cd "%DEPS_DIR%" call :DownloadFile https://github.com/boostorg/boost/releases/download/boost-%BOOST_VERSION%/%BOOST_ZIP% "%DEPS_DIR%" %BOOST_ZIP% IF NOT %ERRORLEVEL%==0 GOTO :Error From 52d3bae54342cda50cd2973fdd54fbe4c9616010 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 18 Nov 2025 17:01:46 +0500 Subject: [PATCH 122/657] build-deps - add some logs to make errors easier to narrow donw --- win/build-deps.cmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index c707c82780..6da1a7a57a 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -768,7 +768,7 @@ echo. call :PrintUsage :Error echo. -call "%~dp0\utils\cecho.cmd" 0 12 "An error occurred! Aborting!" +call "%~dp0\utils\cecho.cmd" 0 12 "An error occurred! Aborting! Last logged action: %LAST_ACTION%" set IFCOS_SCRIPT_RET=1 goto :Finish @@ -808,6 +808,7 @@ if not exist "%~3". ( ) else ( call cecho.cmd 0 13 "%DEPENDENCY_NAME% already downloaded. Skipping." ) +set LAST_ACTION=DownloadFile '%DEPENDENCY_NAME%'. set RET=%ERRORLEVEL% popd exit /b %RET% @@ -821,6 +822,7 @@ if not exist "%~3". ( ) else ( call cecho.cmd 0 13 "%DEPENDENCY_NAME% already extracted into %~3. Skipping." ) +set LAST_ACTION=ExtractArchive '%DEPENDENCY_NAME%'. exit /b %ERRORLEVEL% :: GitCloneOrPullRepository - Clones or pulls (if repository already cloned) a Git repository From e7c422469af29a599c2086bb95e3c8b6c10b9135 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 18 Nov 2025 16:26:57 +0500 Subject: [PATCH 123/657] IfcGeomServer cmake - remove not required `chrono` component #7337 Noticed Linux build failing now --- src/ifcgeomserver/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt index 429d56c056..d6b1e258b7 100644 --- a/src/ifcgeomserver/CMakeLists.txt +++ b/src/ifcgeomserver/CMakeLists.txt @@ -1,4 +1,4 @@ -find_package(Boost COMPONENTS chrono REQUIRED) +find_package(Boost REQUIRED) file(GLOB CPP_FILES *.cpp) file(GLOB H_FILES *.h) @@ -6,4 +6,4 @@ set(SOURCE_FILES ${CPP_FILES} ${H_FILES}) add_executable(IfcGeomServer ${SOURCE_FILES}) target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OPENCASCADE_LIBRARIES}) -install(TARGETS IfcGeomServer) \ No newline at end of file +install(TARGETS IfcGeomServer) From e1c3c44fb30dd0785ab1e0ef71d664b8219fb5f3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 18 Nov 2025 18:34:25 +0500 Subject: [PATCH 124/657] IfcGeomServer cmake - remove headers from source files --- src/ifcgeomserver/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt index d6b1e258b7..24137c2555 100644 --- a/src/ifcgeomserver/CMakeLists.txt +++ b/src/ifcgeomserver/CMakeLists.txt @@ -1,8 +1,7 @@ find_package(Boost REQUIRED) file(GLOB CPP_FILES *.cpp) -file(GLOB H_FILES *.h) -set(SOURCE_FILES ${CPP_FILES} ${H_FILES}) +set(SOURCE_FILES ${CPP_FILES}) add_executable(IfcGeomServer ${SOURCE_FILES}) target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OPENCASCADE_LIBRARIES}) From 2af7470950d538760a1ec55f39d5ab3a6f2d6479 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 18 Nov 2025 18:51:23 +0500 Subject: [PATCH 125/657] run-cmake.bat - use boost installation path Now there's no need for BOOST_ROOT and BOOST_LIBRARYDIR anymore. --- win/build-deps.cmd | 10 +++++++--- win/run-cmake.bat | 17 ++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 6da1a7a57a..957c058ca7 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -389,6 +389,10 @@ popd :: DEPENDENCY_NAME is used for logging and DEPENDENCY_DIR for saving from some redundant typing set DEPENDENCY_NAME=Boost %BOOST_VERSION% set DEPENDENCY_DIR=%DEPS_DIR%\boost_%BOOST_VER% +set DEPENDENCY_INSTALL_DIR=%DEPENDENCY_DIR%\stage\%GEN_SHORTHAND% +echo BOOST_INSTALL_DIR=%DEPENDENCY_INSTALL_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" +:: Needed for CGAL build. +set BOOST_ROOT=%DEPENDENCY_DIR% set BOOST_LIBRARYDIR=%DEPENDENCY_DIR%\stage\%GEN_SHORTHAND%\lib :: NOTE Also zip download exists, if encountering problems with 7z for some reason. set ZIP_EXT=7z @@ -423,7 +427,7 @@ call cecho.cmd 0 13 "Building %DEPENDENCY_NAME% %BOOST_LIBS% Please be patient, IF EXIST "%DEPENDENCY_DIR%\bin.v2\project-cache.jam" del "%DEPS_DIR%\boost\bin.v2\project-cache.jam" call .\b2 toolset=%BOOST_TOOLSET% runtime-link=shared address-model=%ARCH_BITS% --abbreviate-paths -j%IFCOS_NUM_BUILD_PROCS% ^ - variant=%DEBUG_OR_RELEASE_LOWERCASE% %BOOST_WIN_API% %BOOST_LIBS% stage --stagedir=stage/%GEN_SHORTHAND% + variant=%DEBUG_OR_RELEASE_LOWERCASE% %BOOST_WIN_API% %BOOST_LIBS% stage --stagedir=%DEPENDENCY_INSTALL_DIR% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -633,13 +637,13 @@ cd "%DEPENDENCY_DIR%" git reset --hard git apply --ignore-whitespace "%~dp0patches\cgal_no_zlib.patch" call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\cgal" ^ - -DBOOST_ROOT="%DEPS_DIR%\boost_%BOOST_VER%" ^ + -DBOOST_ROOT="%BOOST_ROOT%" ^ -DGMP_INCLUDE_DIR="%INSTALL_DIR%\mpir" ^ -DGMP_LIBRARIES="%INSTALL_DIR%\mpir\mpir.lib" ^ -DMPFR_INCLUDE_DIR="%INSTALL_DIR%\mpfr" ^ -DMPFR_LIBRARIES="%INSTALL_DIR%\mpfr\mpfr.lib" ^ -DCGAL_HEADER_ONLY=On ^ - -DBOOST_LIBRARYDIR="%DEPS_DIR%\boost_%BOOST_VER%\stage\vs%VS_VER%-%VS_PLATFORM%\lib" + -DBOOST_LIBRARYDIR="%BOOST_LIBRARYDIR%" IF NOT %ERRORLEVEL%==0 GOTO :Error call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\CGAL.sln" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error diff --git a/win/run-cmake.bat b/win/run-cmake.bat index 7c121ef3df..9dfbbd6df3 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -79,12 +79,11 @@ popd IF NOT EXIST ..\%BUILD_DIR%. mkdir ..\%BUILD_DIR% pushd ..\%BUILD_DIR% -:: tfk: todo remove duplication -set BOOST_VERSION=1.86.0 -set BOOST_VER=%BOOST_VERSION:.=_% +:: Legacy setup. +if not defined BOOST_INSTALL_DIR ( + set BOOST_INSTALL_DIR=%DEPS_DIR%\boost_1_86_0\stage\%GEN_SHORTHAND% +) -set BOOST_ROOT=%DEPS_DIR%\boost_%BOOST_VER% -set BOOST_LIBRARYDIR=%BOOST_ROOT%\stage\%GEN_SHORTHAND%\lib if not defined OCC_INCLUDE_DIR set OCC_INCLUDE_DIR=%INSTALL_DIR%\oce\include\oce if not defined OCC_LIBRARY_DIR set OCC_LIBRARY_DIR=%INSTALL_DIR%\oce\Win%ARCH_BITS%\lib set OPENCOLLADA_INSTALL_DIR=%INSTALL_DIR%\OpenCOLLADA @@ -127,7 +126,7 @@ echo Toolset = %VS_TOOLSET% echo Arguments = %ARGUMENTS% echo. call cecho.cmd 0 10 "Dependency Environment Variables for %PROJECT_NAME%:" -echo BOOST_ROOT = %BOOST_ROOT% +echo BOOST_INSTALL_DIR = %BOOST_INSTALL_DIR% echo BOOST_LIBRARYDIR = %BOOST_LIBRARYDIR% echo OCC_INCLUDE_DIR = %OCC_INCLUDE_DIR% echo OCC_LIBRARY_DIR = %OCC_LIBRARY_DIR% @@ -167,17 +166,17 @@ echo "Running CMake for %PROJECT_NAME%." set CMAKE_PREFIX_PATH=%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL_DIR% set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%ROCKSDB_INSTALL_DIR%;%ZSTD_INSTALL_DIR% -set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_ROOT%;%CCACHE_INSTALL_DIR% +set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_INSTALL_DIR%;%CCACHE_INSTALL_DIR% IF NOT "%VS_TOOLSET_HOST%"=="" ( cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% -A %VS_PLATFORM% -T %VS_TOOLSET_HOST% ^ - -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" -DBoost_NO_BOOST_CMAKE=ON ^ + -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" ^ -DWITH_ROCKSDB=On -DWITH_ZSTD=On ^ -DCMAKE_PREFIX_PATH="%CMAKE_PREFIX_PATH%" ^ -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% %ARGUMENTS% ) ELSE ( cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% -A %VS_PLATFORM% ^ - -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" -DBoost_NO_BOOST_CMAKE=ON ^ + -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" ^ -DWITH_ROCKSDB=On -DWITH_ZSTD=On ^ -DCMAKE_PREFIX_PATH="%CMAKE_PREFIX_PATH%" ^ -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% %ARGUMENTS% From db7900027e083510d506a317b09a7b65c65663ec Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 19 Nov 2025 10:43:52 +0100 Subject: [PATCH 126/657] fix stub --- .../ifcopenshell/ifcopenshell_wrapper.pyi | 11 +++++++---- src/ifcwrap/IfcPython.i | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi b/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi index ce2f11e65a..d411861f9a 100644 --- a/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi +++ b/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi @@ -363,6 +363,13 @@ class Iterator: def unit_magnitude(self): ... def unit_name(self): ... +class JsonSerializer: + JSON_DIALECT_CREOOX : Any + def finalize(self): ... + def ready(self): ... + def setFile(self, arg2): ... + def writeHeader(self): ... + class OpaqueCoordinate_3: def get(self, i): ... def set(self, i, n): ... @@ -591,10 +598,6 @@ class XmlSerializer: def setFile(self, arg2): ... def writeHeader(self): ... -class XmlSerializerFactory: - @staticmethod - def implementations(): ... - class _SwigNonDynamicMeta(type): ... class abstract_arrangement: diff --git a/src/ifcwrap/IfcPython.i b/src/ifcwrap/IfcPython.i index 689f9acfbf..db772ba26e 100644 --- a/src/ifcwrap/IfcPython.i +++ b/src/ifcwrap/IfcPython.i @@ -162,6 +162,10 @@ %ignore MaxOffset; %ignore MaxOffsetDeviation; %ignore ApplyOffset; +%ignore SeparateZUpNode; + +%ignore XmlSerializerFactory; +%ignore JsonSerializerFactory; // Triangulated representation helper struct %ignore EdgeKey; From 9b257b0a10bd27fe2377a55c11666e37cb715245 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Thu, 13 Nov 2025 13:56:21 +0100 Subject: [PATCH 127/657] Remove support of cityjson for ifcconvert binary --- .gitignore | 1 + .gitmodules | 3 - cmake/CMakeLists.txt | 42 +-------- cmake/CMakePresets.json | 1 - conda/build.bat | 1 - conda/build.sh | 1 - pyproject.toml | 2 - src/ifcconvert/IfcConvert.cpp | 86 ------------------- src/ifcconvert/cityjson | 1 - src/ifcopenshell-python/docs/ifcconvert.rst | 8 +- .../docs/ifcconvert/usage.rst | 1 - 11 files changed, 4 insertions(+), 143 deletions(-) delete mode 160000 src/ifcconvert/cityjson diff --git a/.gitignore b/.gitignore index 494022e37e..504685d332 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ # General Python residue __pycache__ *.py.bak +venv # Visual Studio Code files .vscode diff --git a/.gitmodules b/.gitmodules index 017cd2ae8e..4aa9fd774c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -11,9 +11,6 @@ [submodule "src/ifcopenshell-python/test/Sample-BIM-Files"] path = src/ifcopenshell-python/test/Sample-BIM-Files url = https://github.com/IfcOpenShell/ids-test-files -[submodule "src/ifcconvert/cityjson"] - path = src/ifcconvert/cityjson - url = https://github.com/IfcOpenShell/ifc-to-cityjson [submodule "docs/cpp-api/assets/doxygen-awesome-css"] path = docs/cpp-api/assets/doxygen-awesome-css url = https://github.com/jothepro/doxygen-awesome-css.git diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 5792954570..7e7479415e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -79,7 +79,6 @@ 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) -option(CITYJSON_SUPPORT "Build IfcConvert with CityJSON support (requires CityJSON library)." OFF) option(WITH_RELATIONSHIP_VALIDATION "Build IfcConvert with option to validate geometrical relationships." OFF) option(WITH_ROCKSDB "Support a RocksDB key-value store as a file backend in IfcOpenShell" OFF) option(WITH_ZSTD "Use Zstd compression in RocksDB writes" OFF) @@ -276,10 +275,6 @@ if(WITH_CGAL) add_definitions(-DIFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) - if(CITYJSON_SUPPORT) - add_definitions(-DIFOPSH_WITH_CITYJSON) - endif() - list(APPEND GEOMETRY_KERNELS cgal) endif() @@ -289,7 +284,7 @@ if(WITH_OPENCASCADE) list(APPEND GEOMETRY_KERNELS opencascade) endif() -if(GLTF_SUPPORT OR CITYJSON_SUPPORT) +if(GLTF_SUPPORT) UNIFY_ENVVARS_AND_CACHE(JSON_INCLUDE_DIR) if(NOT JSON_INCLUDE_DIR) find_package(nlohmann_json CONFIG) @@ -1107,37 +1102,6 @@ if(BUILD_CONVERT OR BUILD_IFCPYTHON) endif(BUILD_CONVERT OR BUILD_IFCPYTHON) if(BUILD_CONVERT) - if(WITH_CGAL AND CITYJSON_SUPPORT) - message(STATUS "Building CityJSON support") - set(CITYJSON_CONVERT_FILES - ../src/ifcconvert/cityjson/geobim.cpp - ../src/ifcconvert/cityjson/global_execution_context.cpp - ../src/ifcconvert/cityjson/opening_collector.cpp - ../src/ifcconvert/cityjson/processing.cpp - ../src/ifcconvert/cityjson/radius_comparison.cpp - ../src/ifcconvert/cityjson/radius_execution_context.cpp - ../src/ifcconvert/cityjson/settings.cpp - ../src/ifcconvert/cityjson/writer.cpp - ) - add_library(cityjson_converter ${CITYJSON_CONVERT_FILES}) - target_include_directories(cityjson_converter PRIVATE ../src) - set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} cityjson_converter) - - install(TARGETS cityjson_converter - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - ) - - add_executable(cityjson_converter_exe ${CITYJSON_CONVERT_FILES}) - set_target_properties(cityjson_converter_exe PROPERTIES COMPILE_FLAGS "-DCITYJSON_EXECUTABLE") - target_include_directories(cityjson_converter_exe PRIVATE ../src) - target_link_libraries(cityjson_converter_exe ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}) - - install(TARGETS cityjson_converter_exe - RUNTIME DESTINATION ${BINDIR} - ) - endif() - # IfcConvert if (WITH_RELATIONSHIP_VALIDATION) file(GLOB IFCCONVERT_CPP_FILES ../src/ifcconvert/*.cpp) @@ -1154,10 +1118,6 @@ if(BUILD_CONVERT) set_property(TARGET IfcConvert APPEND_STRING PROPERTY COMPILE_FLAGS " -DWITH_RELATIONSHIP_VALIDATION") endif() - if(WITH_CGAL AND CITYJSON_SUPPORT) - set_property(TARGET IfcConvert APPEND_STRING PROPERTY COMPILE_FLAGS " -DIFOPSH_WITH_CITYJSON") - endif() - if((NOT WIN32) AND BUILD_SHARED_LIBS) # Only set RPATHs when building shared libraries (i.e. IfcParse and # IfcGeom are dynamically linked). Not necessarily a perfect solution diff --git a/cmake/CMakePresets.json b/cmake/CMakePresets.json index 9c10495ad3..5bd4a18635 100644 --- a/cmake/CMakePresets.json +++ b/cmake/CMakePresets.json @@ -17,7 +17,6 @@ "IFCXML_SUPPORT": "ON", "HDF5_SUPPORT": "ON", "SCHEMA_VERSIONS": "4x3_add2", - "CITYJSON_SUPPORT": "OFF", "CMAKE_GENERATOR_PLATFORM": "", "CMAKE_GENERATOR_TOOLSET": "" } diff --git a/conda/build.bat b/conda/build.bat index 388e5cd746..fe8cef01c1 100644 --- a/conda/build.bat +++ b/conda/build.bat @@ -42,7 +42,6 @@ cmake -G "Ninja" ^ -D Boost_LIBRARY_DIR:FILEPATH="%LIBRARY_PREFIX%\lib" ^ -D Boost_INCLUDE_DIR:FILEPATH="%LIBRARY_PREFIX%\include" ^ -D Boost_USE_STATIC_LIBS:BOOL=OFF ^ - -D CITYJSON_SUPPORT:BOOL=OFF ^ ../cmake if errorlevel 1 exit 1 diff --git a/conda/build.sh b/conda/build.sh index b17bc87159..571b6959f8 100644 --- a/conda/build.sh +++ b/conda/build.sh @@ -42,7 +42,6 @@ cmake ${CMAKE_ARGS} -G Ninja \ -DBUILD_IFCGEOM:BOOL=ON \ -DBUILD_GEOMSERVER:BOOL=OFF \ -DBOOST_USE_STATIC_LIBS:BOOL=OFF \ - -DCITYJSON_SUPPORT:BOOL=OFF \ ./cmake ninja diff --git a/pyproject.toml b/pyproject.toml index f2cdb67b34..edd328321e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,6 @@ extend-exclude = ''' |src/ifcopenshell-python/ifcopenshell/mvd/* |src/ifcopenshell-python/ifcopenshell/simple_spf/* |src/ifc2ca/templates/* - |src/ifcconvert/cityjson/* |src/svgfill |src/exterior-shell-extractor ''' @@ -25,7 +24,6 @@ reportUnnecessaryTypeIgnoreComment = true [tool.ruff] exclude = [ # Submodules. - "src/ifcconvert/cityjson", "src/ifcopenshell-python/ifcopenshell/express", "src/ifcopenshell-python/ifcopenshell/mvd", "src/ifcopenshell-python/ifcopenshell/simple_spf", diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index 81a7b37a79..d31882ae4d 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -50,10 +50,6 @@ #include "../ifcparse/utils.h" -#ifdef IFOPSH_WITH_CITYJSON -#include "./cityjson/geobim.h" -#endif - #ifdef IFOPSH_WITH_OPENCASCADE #include @@ -136,9 +132,6 @@ void print_usage(bool suggest_help = true) << " .svg SVG Scalable Vector Graphics (2D floor plan)\n" #ifdef WITH_HDF5 << " .h5 HDF Hierarchical Data Format storing positions, normals and indices\n" -#endif -#ifdef IFOPSH_WITH_CITYJSON - << " .cityjson City JSON format for geospatial data\n" #endif << " .ttl TTL/WKT RDF Turtle with Well-Known-Text geometry\n" << " .ifc IFC-SPF Industry Foundation Classes\n" @@ -661,7 +654,6 @@ int main(int argc, char** argv) { JSON = IfcUtil::path::from_utf8(".json"), // @todo this is just temporary as it doesn't make sense to require an extension for a DB RDB = IfcUtil::path::from_utf8(".rdb"), - CITY_JSON = IfcUtil::path::from_utf8(".cityjson"), IFC = IfcUtil::path::from_utf8(".ifc"), USD = IfcUtil::path::from_utf8(".usd"), USDA = IfcUtil::path::from_utf8(".usda"), @@ -755,84 +747,6 @@ int main(int argc, char** argv) { return exit_code; } #endif -#ifdef IFOPSH_WITH_CITYJSON - else if (output_extension == CITY_JSON || (output_extension == OBJ || output_extension == DAE || output_extension == GLB) && vmap.count("exterior-only") && exterior_only_algo != "none") { - - // none, convex-decomposition, minkowski-triangles or halfspace-snapping - boost::to_lower(exterior_only_algo); - - if (exterior_only_algo == "halfspace-snapping") { - cerr_ << "[Error] halfspace-snapping not implemented yet" << std::endl; - print_usage(); - return EXIT_FAILURE; - } else if (exterior_only_algo == "minkowski-triangles") { - // - } else if (exterior_only_algo == "convex-decomposition") { - // - } else if (exterior_only_algo == "none") { - // - } else { - cerr_ << "[Error] --exterior-only should be convex-decomposition|minkowski-triangles|halfspace-snapping" << std::endl; - print_usage(); - return EXIT_FAILURE; - } - - geobim_settings settings; - settings.input_filenames = { IfcUtil::path::to_utf8(input_filename) }; - settings.file = { new IfcParse::IfcFile(IfcUtil::path::to_utf8(input_filename)) }; - - /* - // No longer set, because we pass to real serializers now, awaiting a proper iterator adaptor - if (output_extension == OBJ) { - settings.obj_output_filename = IfcUtil::path::to_utf8(output_filename); - } - */ - - if (output_extension == CITY_JSON) { - // we don't have a cityjson serializer though - settings.cityjson_output_filename = IfcUtil::path::to_utf8(output_filename); - } - - // @todo - settings.radii = { "0.05" }; - settings.apply_openings = false; - settings.apply_openings_posthoc = true; - settings.debug = false; - settings.exact_segmentation = true; - settings.minkowski_triangles = exterior_only_algo == "minkowski-triangles"; - settings.no_erosion = false; - settings.spherical_padding = false; - if (num_threads != 1) { - settings.threads = num_threads; - } - - settings.settings.get().value = false; - settings.settings.get().value = false; - settings.settings.get().value = true; - settings.settings.get().value = true; - settings.settings.get().value = ifcopenshell::geometry::settings::NATIVE; - settings.settings.get().value = !settings.apply_openings; - - if (include_filter.type != geom_filter::UNUSED) { - settings.entity_names = include_filter.values; - settings.entity_names_included = true; - } else if (exclude_filter.type != geom_filter::UNUSED) { - settings.entity_names = exclude_filter.values; - settings.entity_names_included = false; - } else { - settings.entity_names = { { "IfcSpace", "IfcOpeningElement" } }; - settings.entity_names_included = false; - } - - elems_from_adaptor.emplace(); - perform(settings, *elems_from_adaptor); - - if (output_extension == CITY_JSON) { - return 0; - } - // else ... continue on to serialize elems_from_adaptor - } -#endif /// @todo Clean up this filter code further. std::vector used_filters; diff --git a/src/ifcconvert/cityjson b/src/ifcconvert/cityjson deleted file mode 160000 index a9488c8d8f..0000000000 --- a/src/ifcconvert/cityjson +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a9488c8d8fd1c32eb23118596819ab54225cdfb4 diff --git a/src/ifcopenshell-python/docs/ifcconvert.rst b/src/ifcopenshell-python/docs/ifcconvert.rst index 6861eb1120..bbdbe0c14c 100644 --- a/src/ifcopenshell-python/docs/ifcconvert.rst +++ b/src/ifcopenshell-python/docs/ifcconvert.rst @@ -2,8 +2,7 @@ IfcConvert ========== IfcConvert is a command-line application for converting IFC geometry into file -formats such as OBJ, DAE, GLB, STP, IGS, XML, SVG, H5, CityJSON, TTL/WKT, and -IFC-SPF itself. +formats such as OBJ, DAE, GLB, STP, IGS, XML, SVG, H5, TTL/WKT, and IFC-SPF itself. For other formats, you may use other IfcOpenShell utilities as shown in the table below. @@ -13,7 +12,7 @@ table below. +=========================+=========================+======================+ | .ifc | .obj, .dae, .glb, .stp, | IfcConvert | | | .igs, .xml, .svg, .h5, | | -| | .cityjson, .ttl, .ifc | | +| | .ttl, .ifc | | +-------------------------+-------------------------+----------------------+ | .ifc | .dae, .abc, .usd, .obj, | Bonsai_ | | | .ply, .stl, .fbx, .glb, | | @@ -46,8 +45,6 @@ table below. +-------------------------+-------------------------+----------------------+ | .obj | .ifc | Bonsai_ | +-------------------------+-------------------------+----------------------+ -| .json (CityJSON) | .ifc | IfcCityJSON_ | -+-------------------------+-------------------------+----------------------+ | .xer (Oracle P6) | .ifc | Ifc4D_ | +-------------------------+-------------------------+----------------------+ | .xml (Oracle P6) | .ifc | Ifc4D_ | @@ -63,7 +60,6 @@ table below. .. _IfcCSV: ifccsv.html .. _Ifc4D: ifc4d.html .. _Ifc5D: ifc5d.html -.. _IfcCityJSON: ifccityjson.html .. _Ifc2JSON: other.html .. _Bonsai: bonsai.html diff --git a/src/ifcopenshell-python/docs/ifcconvert/usage.rst b/src/ifcopenshell-python/docs/ifcconvert/usage.rst index ffc64f1c08..2c8ffeee5c 100644 --- a/src/ifcopenshell-python/docs/ifcconvert/usage.rst +++ b/src/ifcopenshell-python/docs/ifcconvert/usage.rst @@ -82,7 +82,6 @@ CLI Manual .xml XML Property definitions and decomposition tree .svg SVG Scalable Vector Graphics (2D floor plan) .h5 HDF Hierarchical Data Format storing positions, normals and indices - .cityjson City JSON format for geospatial data .ttl TTL/WKT RDF Turtle with Well-Known-Text geometry .ifc IFC-SPF Industry Foundation Classes From 9d2862815741c775f2fe7891b81283badac83484 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Tue, 11 Nov 2025 07:21:18 +0100 Subject: [PATCH 128/657] cmake: Have a dedicated CMakeLists.txt for kernels --- cmake/CMakeLists.txt | 29 ++--------------------- src/ifcgeom/CMakeLists.txt | 3 +++ src/ifcgeom/kernels/CMakeLists.txt | 37 ++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 src/ifcgeom/CMakeLists.txt create mode 100644 src/ifcgeom/kernels/CMakeLists.txt diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 7e7479415e..decb1cab50 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1006,33 +1006,8 @@ if(BUILD_IFCGEOM) list(APPEND CGAL_LIBRARIES "${libGMP}") endif() - foreach(kernel ${GEOMETRY_KERNELS}) - string(TOUPPER ${kernel} KERNEL_UPPER) - file(GLOB IFCGEOM_H_FILES ../src/ifcgeom/kernels/${kernel}/*.h) - file(GLOB IFCGEOM_CPP_FILES ../src/ifcgeom/kernels/${kernel}/*.cpp) - set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES}) - - add_library(geometry_kernel_${kernel} ${IFCGEOM_FILES} ../src/ifcgeom/kernels/ifc_geomlibrary_api.h) - set_property(TARGET geometry_kernel_${kernel} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOMLIBRARY_EXPORTS") - # needed? - # if(NOT WASM_BUILD) - # endif() - target_link_libraries(geometry_kernel_${kernel} ${${KERNEL_UPPER}_LIBRARIES} IfcGeom IfcParse) - list(APPEND kernel_libraries geometry_kernel_${kernel}) - - if(${kernel} STREQUAL "cgal") - set_property(TARGET geometry_kernel_${kernel} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") - - add_library(geometry_kernel_${kernel}_simple ${IFCGEOM_FILES}) - set_target_properties(geometry_kernel_${kernel}_simple PROPERTIES COMPILE_FLAGS "-DIFC_GEOMLIBRARY_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") - # needed? - # if(NOT WASM_BUILD) - # endif() - target_link_libraries(geometry_kernel_${kernel}_simple ${${KERNEL_UPPER}_LIBRARIES} IfcGeom IfcParse) - list(APPEND kernel_libraries geometry_kernel_${kernel}_simple) - endif() - endforeach() - + add_subdirectory(../src/ifcgeom ifcgeom) + # IfcGeom foreach(schema ${SCHEMA_VERSIONS}) file(GLOB IFCGEOM_I_FILES ../src/ifcgeom/mapping/*.i) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt new file mode 100644 index 0000000000..5e1bf299d0 --- /dev/null +++ b/src/ifcgeom/CMakeLists.txt @@ -0,0 +1,3 @@ +add_subdirectory(kernels) + +set(kernel_libraries ${kernel_libraries} PARENT_SCOPE) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt new file mode 100644 index 0000000000..832ccb09af --- /dev/null +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -0,0 +1,37 @@ +foreach(kernel ${GEOMETRY_KERNELS}) + string(TOUPPER ${kernel} KERNEL_UPPER) + file(GLOB IFCGEOM_H_FILES ${kernel}/*.h) + file(GLOB IFCGEOM_CPP_FILES ${kernel}/*.cpp) + set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES}) + + add_library(geometry_kernel_${kernel} OBJECT ${IFCGEOM_FILES}) + set_property(TARGET geometry_kernel_${kernel} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOM_EXPORTS") + list(APPEND kernel_libraries geometry_kernel_${kernel}) + target_link_libraries(geometry_kernel_${kernel} ${${KERNEL_UPPER}_LIBRARIES}) + + install(TARGETS geometry_kernel_${kernel} + ARCHIVE DESTINATION ${LIBDIR} + LIBRARY DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} + ) + + if(${kernel} STREQUAL "cgal") + set_property(TARGET geometry_kernel_${kernel} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") + + add_library(geometry_kernel_${kernel}_simple OBJECT ${IFCGEOM_FILES}) + set_target_properties(geometry_kernel_${kernel}_simple PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") + list(APPEND kernel_libraries geometry_kernel_${kernel}_simple) + target_link_libraries(geometry_kernel_${kernel}_simple ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) + install(TARGETS geometry_kernel_${kernel}_simple + ARCHIVE DESTINATION ${LIBDIR} + LIBRARY DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} + ) + endif() + + install(FILES ${IFCGEOM_H_FILES} + DESTINATION ${INCLUDEDIR}/ifcgeom/kernels/${kernel} + ) +endforeach() + +set(kernel_libraries ${kernel_libraries} PARENT_SCOPE) \ No newline at end of file From 1876a788a9dbb199c9f03ae742ea40650373d7ff Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sat, 15 Nov 2025 21:13:05 +0100 Subject: [PATCH 129/657] cmake: Externalize cmake config for Serializers --- cmake/CMakeLists.txt | 58 +------------------ src/serializers/CMakeLists.txt | 30 ++++++++++ .../schema_dependent/CMakeLists.txt | 19 ++++++ 3 files changed, 52 insertions(+), 55 deletions(-) create mode 100644 src/serializers/CMakeLists.txt create mode 100644 src/serializers/schema_dependent/CMakeLists.txt diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index decb1cab50..dd6e7fdc50 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -963,12 +963,7 @@ if(BUILD_IFCGEOM) endif() if(BUILD_CONVERT OR BUILD_IFCPYTHON) - foreach(schema ${SCHEMA_VERSIONS}) - set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} Serializers_ifc${schema}) - endforeach() - set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} Serializers ${SERIALIZER_SCHEMA_LIBRARIES}) - - if(WITH_OPENCASCADE) + if(WITH_OPENCASCADE) foreach(schema ${SCHEMA_VERSIONS}) set(GEOM_SERIALIZER_SCHEMA_LIBRARIES ${GEOM_SERIALIZER_SCHEMA_LIBRARIES} GeometrySerializers_ifc${schema}) @@ -1041,39 +1036,8 @@ if(BUILD_IFCGEOM) endif(BUILD_IFCGEOM) if(BUILD_CONVERT OR BUILD_IFCPYTHON) - # Serializers - file(GLOB SERIALIZERS_H_FILES ../src/serializers/*.h) - file(GLOB SERIALIZERS_CPP_FILES ../src/serializers/*.cpp) - set(SERIALIZERS_FILES ${SERIALIZERS_H_FILES} ${SERIALIZERS_CPP_FILES}) - file(GLOB SERIALIZERS_S_H_FILES ../src/serializers/schema_dependent/*.h) - file(GLOB SERIALIZERS_S_CPP_FILES ../src/serializers/schema_dependent/*.cpp) - set(SERIALIZERS_S_FILES ${SERIALIZERS_S_H_FILES} ${SERIALIZERS_S_CPP_FILES}) - - foreach(schema ${SCHEMA_VERSIONS}) - add_library(Serializers_ifc${schema} STATIC ${SERIALIZERS_S_FILES}) - set_target_properties(Serializers_ifc${schema} PROPERTIES COMPILE_FLAGS "-DSERIALIZERS_EXPORTS -DIfcSchema=Ifc${schema}") - - if(WASM_BUILD) - target_link_libraries(Serializers_ifc${schema} ${HDF5_LIBRARIES}) - else() - target_link_libraries(Serializers_ifc${schema} IfcGeom ${OPENCASCADE_LIBRARIES} ${HDF5_LIBRARIES}) - endif() - endforeach() - - add_library(Serializers ${SERIALIZERS_FILES}) - set_target_properties(Serializers PROPERTIES COMPILE_FLAGS "-DSERIALIZERS_EXPORTS" VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") - - if(WITH_PROJ) - target_compile_definitions(Serializers PRIVATE "WITH_PROJ") - if (PROJ_STATIC) - target_compile_definitions(Serializers PRIVATE "PROJ_DLL=") - endif() - target_include_directories(Serializers PRIVATE ${PROJ_INCLUDE_DIR} ${SQLITE_INCLUDE_DIR}) - target_link_libraries(Serializers ${PROJ_LIBRARIES}) - endif() - - target_link_libraries(Serializers ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} IfcGeom ${OPENCASCADE_LIBRARIES} ${kernel_libraries} IfcParse) - + add_subdirectory(../src/serializers serializers) + set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} ${SERIALIZER_SCHEMA_LIBRARIES}) endif(BUILD_CONVERT OR BUILD_IFCPYTHON) if(BUILD_CONVERT) @@ -1224,22 +1188,6 @@ if(BUILD_IFCGEOM) ) endif(BUILD_IFCGEOM) -if(BUILD_CONVERT) - install(TARGETS Serializers ${SERIALIZER_SCHEMA_LIBRARIES} - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) - - install(FILES ${SERIALIZERS_H_FILES} - DESTINATION ${INCLUDEDIR}/serializers/ - ) - - install(FILES ${SERIALIZERS_S_H_FILES} - DESTINATION ${INCLUDEDIR}/serializers/schema_dependent - ) -endif(BUILD_CONVERT) - if(BUILD_CONVERT OR BUILD_IFCPYTHON) if(WITH_OPENCASCADE) install(TARGETS geometry_serializer ${geometry_serializer_libraries} diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt new file mode 100644 index 0000000000..8059bdb79c --- /dev/null +++ b/src/serializers/CMakeLists.txt @@ -0,0 +1,30 @@ +add_subdirectory(schema_dependent) + +file(GLOB SERIALIZERS_H_FILES *.h) +file(GLOB SERIALIZERS_CPP_FILES *.cpp) +set(SERIALIZERS_FILES ${SERIALIZERS_H_FILES} ${SERIALIZERS_CPP_FILES}) + +add_library(Serializers ${SERIALIZERS_FILES}) +set_target_properties(Serializers PROPERTIES COMPILE_FLAGS "-DSERIALIZERS_EXPORTS" VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") +set(SERIALIZER_SCHEMA_LIBRARIES Serializers ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) + +if(WITH_PROJ) + find_package(proj REQUIRED) + target_compile_definitions(Serializers PRIVATE "WITH_PROJ") + if(PROJ_STATIC) + target_compile_definitions(Serializers PRIVATE "PROJ_DLL=") + endif() + target_link_libraries(Serializers PRIVATE proj::proj) +endif() + +target_link_libraries(Serializers ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} IfcGeom ${OPENCASCADE_LIBRARIES} ${kernel_libraries} IfcParse) + +install(TARGETS Serializers) + +install(FILES ${SERIALIZERS_H_FILES} + DESTINATION ${INCLUDEDIR}/serializers/ +) + +install(FILES ${SERIALIZERS_S_H_FILES} + DESTINATION ${INCLUDEDIR}/serializers/schema_dependent +) diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt new file mode 100644 index 0000000000..0240953505 --- /dev/null +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -0,0 +1,19 @@ +file(GLOB SERIALIZERS_S_H_FILES *.h) +file(GLOB SERIALIZERS_S_CPP_FILES *.cpp) +set(SERIALIZERS_S_FILES ${SERIALIZERS_S_H_FILES} ${SERIALIZERS_S_CPP_FILES}) + +foreach(schema ${SCHEMA_VERSIONS}) + add_library(Serializers_ifc${schema} STATIC ${SERIALIZERS_S_FILES}) + set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} Serializers_ifc${schema}) + set_target_properties(Serializers_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") + if(WASM_BUILD) + target_link_libraries(Serializers_ifc${schema} ${HDF5_LIBRARIES}) + else() + target_link_libraries(Serializers_ifc${schema} IfcGeom ${OPENCASCADE_LIBRARIES} ${HDF5_LIBRARIES}) + endif() + + install(TARGETS Serializers_ifc${schema}) +endforeach() + + +set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) \ No newline at end of file From ee75ea1182540fe2f538d2effc160d3339420a89 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 16:58:18 +0500 Subject: [PATCH 130/657] black . --- src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi b/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi index d411861f9a..6045e837c1 100644 --- a/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi +++ b/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi @@ -364,7 +364,7 @@ class Iterator: def unit_name(self): ... class JsonSerializer: - JSON_DIALECT_CREOOX : Any + JSON_DIALECT_CREOOX: Any def finalize(self): ... def ready(self): ... def setFile(self, arg2): ... From 48b1493c5c5812b47458ced24ff846f2a02823ed Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 16:37:54 +0500 Subject: [PATCH 131/657] build_win - use official ccache-action as PR got merged --- .github/workflows/build_rocky.yml | 4 ++-- .github/workflows/build_rocky_arm.yml | 4 ++-- .github/workflows/build_win.yml | 4 ++-- .github/workflows/ci.yml | 5 ++++- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_rocky.yml b/.github/workflows/build_rocky.yml index d43fa2eca9..7afefa5b61 100644 --- a/.github/workflows/build_rocky.yml +++ b/.github/workflows/build_rocky.yml @@ -48,8 +48,8 @@ jobs: [ -n "$install_root" ] && find "$install_root" -type f -name 'cache-*.tar.gz' -maxdepth 1 -exec tar -xzf {} -C "$install_root" \; || true - name: ccache - # Latest release (1.2.19) doesn't support Rocky, so using a specific commit. - uses: hendrikmuhs/ccache-action@eca11c308176d48942455b9e5b1b70ff6950a778 + # TODO: Use tag after 1.2.20 releases. + uses: hendrikmuhs/ccache-action@5ebbd400eff9e74630f759d94ddd7b6c26299639 with: key: ubuntu-22.04-${{ runner.arch }}-rockylinux8 diff --git a/.github/workflows/build_rocky_arm.yml b/.github/workflows/build_rocky_arm.yml index a29a11ab39..0f4b50f128 100644 --- a/.github/workflows/build_rocky_arm.yml +++ b/.github/workflows/build_rocky_arm.yml @@ -48,8 +48,8 @@ jobs: [ -n "$install_root" ] && find "$install_root" -type f -name 'cache-*.tar.gz' -maxdepth 1 -exec tar -xzf {} -C "$install_root" \; || true - name: ccache - # Latest release (1.2.19) doesn't support Rocky, so using a specific commit. - uses: hendrikmuhs/ccache-action@eca11c308176d48942455b9e5b1b70ff6950a778 + # TODO: Use tag after 1.2.20 releases. + uses: hendrikmuhs/ccache-action@5ebbd400eff9e74630f759d94ddd7b6c26299639 with: key: ubuntu-22.04-${{ runner.arch }}-rockylinux8 diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index 2d6d31e686..378e8a2d02 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -37,8 +37,8 @@ jobs: } - name: ccache - # Use fork to resolve cache misses / duplicated cache entries on Windows. - uses: Andrej730/ccache-action@main + # TODO: Use tag after 1.2.20 releases. + uses: hendrikmuhs/ccache-action@5ebbd400eff9e74630f759d94ddd7b6c26299639 with: key: win-${{ matrix.arch }} # Windows ccache needs ~1GB diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a969192d5d..d63e12ac6e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,7 +70,10 @@ jobs: libhdf5-dev libcgal-dev libeigen3-dev - name: ccache - uses: hendrikmuhs/ccache-action@v1.2 + # TODO: temporarily pointing to 1.2.19 to get notified by dependabot when 1.2.20 is released + # to update hardcoded references to commits in some other workflows. + # Then we can switch back to 1.2 in all actions. + uses: hendrikmuhs/ccache-action@v1.2.19 with: key: ubuntu-22.04-${{ runner.arch }} From 5896630630a8ca802d5b1e10a5ce1d0ab02b4416 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 16:55:20 +0500 Subject: [PATCH 132/657] Add dependabot to track github actions versions --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..8d98ca21fc --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" From 4dfe15bd88ace27784d1e00f8317584a427dd7e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:00:32 +0500 Subject: [PATCH 133/657] Merge pull request #7270 from IfcOpenShell/dependabot/npm_and_yarn/src/ifctester/webapp/vite-6.4.1 --- src/ifctester/webapp/package-lock.json | 68 ++++++++++++++++++++++++-- src/ifctester/webapp/package.json | 2 +- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/src/ifctester/webapp/package-lock.json b/src/ifctester/webapp/package-lock.json index 77879e3317..392c2dfe13 100644 --- a/src/ifctester/webapp/package-lock.json +++ b/src/ifctester/webapp/package-lock.json @@ -30,7 +30,7 @@ "tailwind-variants": "^1.0.0", "tailwindcss": "^4.0.0", "tw-animate-css": "^1.3.2", - "vite": "^6.3.5" + "vite": "^6.4.1" } }, "node_modules/@ampproject/remapping": { @@ -1160,6 +1160,66 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.4.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.4.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.10", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.0", + "dev": true, + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.8.tgz", @@ -2881,9 +2941,9 @@ "license": "MIT" }, "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", "dependencies": { diff --git a/src/ifctester/webapp/package.json b/src/ifctester/webapp/package.json index 001aaa110f..4a8abd7897 100644 --- a/src/ifctester/webapp/package.json +++ b/src/ifctester/webapp/package.json @@ -24,7 +24,7 @@ "tailwind-variants": "^1.0.0", "tailwindcss": "^4.0.0", "tw-animate-css": "^1.3.2", - "vite": "^6.3.5" + "vite": "^6.4.1" }, "dependencies": { "eventemitter3": "^5.0.1", From 07147f4b7f8f7a5f3e4f10a6ededb3bb528aca34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:00:27 +0000 Subject: [PATCH 134/657] Bump actions/checkout from 2 to 5 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build_osx.yml | 4 ++-- .github/workflows/build_pyodide.yml | 4 ++-- .github/workflows/build_rocky.yml | 4 ++-- .github/workflows/build_rocky_arm.yml | 4 ++-- .github/workflows/build_win.yml | 4 ++-- .github/workflows/ci-bcf-pypi.yml | 2 +- .github/workflows/ci-black-formatting.yaml | 2 +- .github/workflows/ci-bonsai-choco.yml | 2 +- .github/workflows/ci-bonsai-daily.yml | 4 ++-- .github/workflows/ci-bonsai.yml | 2 +- .github/workflows/ci-bsdd-pypi.yaml | 2 +- .github/workflows/ci-ifc4d-pypi.yaml | 2 +- .github/workflows/ci-ifc5d-pypi.yaml | 2 +- .github/workflows/ci-ifccityjson-pypi.yaml | 2 +- .github/workflows/ci-ifcclash-pypi.yaml | 2 +- .github/workflows/ci-ifcconvert.yml | 2 +- .github/workflows/ci-ifccsv-pypi.yaml | 2 +- .github/workflows/ci-ifcdiff-pypi.yaml | 2 +- .github/workflows/ci-ifcfm-pypi.yaml | 2 +- .github/workflows/ci-ifcopenshell-conda-daily.yml | 4 ++-- .github/workflows/ci-ifcopenshell-docker.yml | 4 ++-- .github/workflows/ci-ifcopenshell-python-pypi.yml | 2 +- .github/workflows/ci-ifcopenshell-python.yml | 2 +- .github/workflows/ci-ifcpatch-pypi.yaml | 2 +- .github/workflows/ci-ifcsverchok-daily.yml | 2 +- .github/workflows/ci-ifcsverchok.yml | 2 +- .github/workflows/ci-ifctester-org.yml | 4 ++-- .github/workflows/ci-ifctester-pypi.yml | 2 +- .github/workflows/ci.yml | 2 +- .github/workflows/docs-deployment-unstable.yml | 2 +- .github/workflows/docs-deployment.yml | 2 +- .github/workflows/publish-pyodide-demo-app.yml | 2 +- .github/workflows/release.yml | 2 +- 33 files changed, 42 insertions(+), 42 deletions(-) diff --git a/.github/workflows/build_osx.yml b/.github/workflows/build_osx.yml index 25c3f9bac7..88ae783c21 100644 --- a/.github/workflows/build_osx.yml +++ b/.github/workflows/build_osx.yml @@ -21,12 +21,12 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: submodules: recursive - name: Checkout Build Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: repository: IfcOpenShell/build-outputs path: ./build diff --git a/.github/workflows/build_pyodide.yml b/.github/workflows/build_pyodide.yml index f42b7a9846..c3d223f8e1 100644 --- a/.github/workflows/build_pyodide.yml +++ b/.github/workflows/build_pyodide.yml @@ -9,13 +9,13 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: submodules: recursive path: IfcOpenShell - name: Checkout Build Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: repository: IfcOpenShell/build-outputs path: ifcopenshell_build diff --git a/.github/workflows/build_rocky.yml b/.github/workflows/build_rocky.yml index 7afefa5b61..4f1cbd7ae5 100644 --- a/.github/workflows/build_rocky.yml +++ b/.github/workflows/build_rocky.yml @@ -29,12 +29,12 @@ jobs: aws --version - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: submodules: recursive - name: Checkout Build Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: repository: IfcOpenShell/build-outputs path: ./build diff --git a/.github/workflows/build_rocky_arm.yml b/.github/workflows/build_rocky_arm.yml index 0f4b50f128..a3b43f115d 100644 --- a/.github/workflows/build_rocky_arm.yml +++ b/.github/workflows/build_rocky_arm.yml @@ -29,12 +29,12 @@ jobs: aws --version - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: submodules: recursive - name: Checkout Build Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: repository: IfcOpenShell/build-outputs path: ./build diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index 378e8a2d02..59a1436f57 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -12,12 +12,12 @@ jobs: arch: ['x64'] steps: - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: submodules: recursive - name: Checkout Build Repository - uses: actions/checkout@v3 + uses: actions/checkout@v5 with: repository: IfcOpenShell/build-outputs path: _deps-vs2022-x64-installed diff --git a/.github/workflows/ci-bcf-pypi.yml b/.github/workflows/ci-bcf-pypi.yml index 011babfe2b..085cf45f96 100644 --- a/.github/workflows/ci-bcf-pypi.yml +++ b/.github/workflows/ci-bcf-pypi.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 # https://github.com/actions/checkout + - uses: actions/checkout@v5 # https://github.com/actions/checkout - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-black-formatting.yaml b/.github/workflows/ci-black-formatting.yaml index 820a81dc97..35e779ce83 100644 --- a/.github/workflows/ci-black-formatting.yaml +++ b/.github/workflows/ci-black-formatting.yaml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Action - checkout repository - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v5 - name: Action - install python uses: actions/setup-python@v5.3.0 diff --git a/.github/workflows/ci-bonsai-choco.yml b/.github/workflows/ci-bonsai-choco.yml index 8be16269ba..5240304b85 100644 --- a/.github/workflows/ci-bonsai-choco.yml +++ b/.github/workflows/ci-bonsai-choco.yml @@ -34,7 +34,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-tags: true fetch-depth: 0 diff --git a/.github/workflows/ci-bonsai-daily.yml b/.github/workflows/ci-bonsai-daily.yml index dfa6be9a00..8c6c5a8d50 100644 --- a/.github/workflows/ci-bonsai-daily.yml +++ b/.github/workflows/ci-bonsai-daily.yml @@ -54,7 +54,7 @@ jobs: short_name: macosm1, } steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified @@ -93,7 +93,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout bonsai_unstable_repo repository - uses: actions/checkout@v2 + uses: actions/checkout@v5 with: repository: IfcOpenShell/bonsai_unstable_repo token: ${{ secrets.IFCOPENBOT_TOKEN }} diff --git a/.github/workflows/ci-bonsai.yml b/.github/workflows/ci-bonsai.yml index 1bf217da89..244f0542ec 100644 --- a/.github/workflows/ci-bonsai.yml +++ b/.github/workflows/ci-bonsai.yml @@ -43,7 +43,7 @@ jobs: short_name: macosm1, } steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-bsdd-pypi.yaml b/.github/workflows/ci-bsdd-pypi.yaml index b59ddbf2e4..7eeb2cdeb6 100644 --- a/.github/workflows/ci-bsdd-pypi.yaml +++ b/.github/workflows/ci-bsdd-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifc4d-pypi.yaml b/.github/workflows/ci-ifc4d-pypi.yaml index 6ecd2c37d2..3b77a57cfa 100644 --- a/.github/workflows/ci-ifc4d-pypi.yaml +++ b/.github/workflows/ci-ifc4d-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifc5d-pypi.yaml b/.github/workflows/ci-ifc5d-pypi.yaml index 6c545f603d..2e7d72b98a 100644 --- a/.github/workflows/ci-ifc5d-pypi.yaml +++ b/.github/workflows/ci-ifc5d-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifccityjson-pypi.yaml b/.github/workflows/ci-ifccityjson-pypi.yaml index 19b7a8e9d7..d701c28a6f 100644 --- a/.github/workflows/ci-ifccityjson-pypi.yaml +++ b/.github/workflows/ci-ifccityjson-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcclash-pypi.yaml b/.github/workflows/ci-ifcclash-pypi.yaml index adae45e008..011cfb00c7 100644 --- a/.github/workflows/ci-ifcclash-pypi.yaml +++ b/.github/workflows/ci-ifcclash-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcconvert.yml b/.github/workflows/ci-ifcconvert.yml index 652dc387a7..0343b70d28 100644 --- a/.github/workflows/ci-ifcconvert.yml +++ b/.github/workflows/ci-ifcconvert.yml @@ -37,7 +37,7 @@ jobs: short_name: macosm164 } steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifccsv-pypi.yaml b/.github/workflows/ci-ifccsv-pypi.yaml index b62f372bf6..7700ed674b 100644 --- a/.github/workflows/ci-ifccsv-pypi.yaml +++ b/.github/workflows/ci-ifccsv-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcdiff-pypi.yaml b/.github/workflows/ci-ifcdiff-pypi.yaml index 6059d7a3dd..2a9c7e4931 100644 --- a/.github/workflows/ci-ifcdiff-pypi.yaml +++ b/.github/workflows/ci-ifcdiff-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcfm-pypi.yaml b/.github/workflows/ci-ifcfm-pypi.yaml index 50e8707796..cef1b7aef4 100644 --- a/.github/workflows/ci-ifcfm-pypi.yaml +++ b/.github/workflows/ci-ifcfm-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcopenshell-conda-daily.yml b/.github/workflows/ci-ifcopenshell-conda-daily.yml index c1bdb874ab..07916435d8 100644 --- a/.github/workflows/ci-ifcopenshell-conda-daily.yml +++ b/.github/workflows/ci-ifcopenshell-conda-daily.yml @@ -21,7 +21,7 @@ jobs: date: ${{ steps.date.outputs.date }} verdate: ${{ steps.verdate.outputs.verdate }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set env run: echo ok go @@ -76,7 +76,7 @@ jobs: echo "ARTIFACTS_DIR=/home/runner/work/artifacts" >> $GITHUB_ENV fi - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index cdc2e173b4..391160f485 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-22.04 needs: activate steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 with: submodules: recursive @@ -89,7 +89,7 @@ jobs: name: Docker Build, Tag, Push steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 with: lfs: true diff --git a/.github/workflows/ci-ifcopenshell-python-pypi.yml b/.github/workflows/ci-ifcopenshell-python-pypi.yml index 813d780f70..f7905299be 100644 --- a/.github/workflows/ci-ifcopenshell-python-pypi.yml +++ b/.github/workflows/ci-ifcopenshell-python-pypi.yml @@ -47,7 +47,7 @@ jobs: short_name: macosm164 } steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 with: submodules: recursive - uses: actions/setup-python@v2 # https://github.com/actions/setup-python diff --git a/.github/workflows/ci-ifcopenshell-python.yml b/.github/workflows/ci-ifcopenshell-python.yml index 51867ac1cb..e9a6c15d3b 100644 --- a/.github/workflows/ci-ifcopenshell-python.yml +++ b/.github/workflows/ci-ifcopenshell-python.yml @@ -38,7 +38,7 @@ jobs: short_name: macosm164 } steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 with: submodules: recursive - uses: actions/setup-python@v2 # https://github.com/actions/setup-python diff --git a/.github/workflows/ci-ifcpatch-pypi.yaml b/.github/workflows/ci-ifcpatch-pypi.yaml index 312fe49f74..27a002b59e 100644 --- a/.github/workflows/ci-ifcpatch-pypi.yaml +++ b/.github/workflows/ci-ifcpatch-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcsverchok-daily.yml b/.github/workflows/ci-ifcsverchok-daily.yml index 9b4255a69d..fd40001b47 100644 --- a/.github/workflows/ci-ifcsverchok-daily.yml +++ b/.github/workflows/ci-ifcsverchok-daily.yml @@ -25,7 +25,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-ifcsverchok.yml b/.github/workflows/ci-ifcsverchok.yml index 9b2ac64d88..870c7d8254 100644 --- a/.github/workflows/ci-ifcsverchok.yml +++ b/.github/workflows/ci-ifcsverchok.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-ifctester-org.yml b/.github/workflows/ci-ifctester-org.yml index e5fef406c5..99e97ef8f9 100644 --- a/.github/workflows/ci-ifctester-org.yml +++ b/.github/workflows/ci-ifctester-org.yml @@ -10,9 +10,9 @@ jobs: publish_website: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - name: Checkout ifctester_org_static_html - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: IfcOpenShell/ifctester_org_static_html token: ${{ secrets.IFCOPENBOT_TOKEN }} diff --git a/.github/workflows/ci-ifctester-pypi.yml b/.github/workflows/ci-ifctester-pypi.yml index 6b594509ef..ab5ff65fad 100644 --- a/.github/workflows/ci-ifctester-pypi.yml +++ b/.github/workflows/ci-ifctester-pypi.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - uses: actions/setup-python@v2 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d63e12ac6e..c47ea41dfc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,7 +35,7 @@ jobs: runs-on: ubuntu-22.04 needs: activate steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive diff --git a/.github/workflows/docs-deployment-unstable.yml b/.github/workflows/docs-deployment-unstable.yml index 1a88f97da9..4b98629e5a 100644 --- a/.github/workflows/docs-deployment-unstable.yml +++ b/.github/workflows/docs-deployment-unstable.yml @@ -11,7 +11,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v5 - name: Set up Python uses: actions/setup-python@v2 diff --git a/.github/workflows/docs-deployment.yml b/.github/workflows/docs-deployment.yml index dd2284d333..5c23de057c 100644 --- a/.github/workflows/docs-deployment.yml +++ b/.github/workflows/docs-deployment.yml @@ -9,7 +9,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v5 - name: Set up Python uses: actions/setup-python@v2 diff --git a/.github/workflows/publish-pyodide-demo-app.yml b/.github/workflows/publish-pyodide-demo-app.yml index 0c453528a6..451b817098 100644 --- a/.github/workflows/publish-pyodide-demo-app.yml +++ b/.github/workflows/publish-pyodide-demo-app.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout (recursive) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: submodules: recursive fetch-depth: 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 93ecaf11d8..8050c10e87 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v5 with: submodules: recursive - name: Install C++ dependencies From 5e1787b1464cd5e6f0f56106e01c6f480caafb2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:00:31 +0000 Subject: [PATCH 135/657] Bump actions/download-artifact from 4.1.7 to 6.0.0 Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.1.7 to 6.0.0. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v4.1.7...v6.0.0) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci-ifcopenshell-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index 391160f485..a60152def1 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -94,7 +94,7 @@ jobs: lfs: true - name: Download - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v6.0.0 with: # Artifact name name: ifcos-artifacts From 9caf47b41f3b7a12701ecbd8240008e225f7f0b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:00:39 +0000 Subject: [PATCH 136/657] Bump docker/setup-qemu-action from 1 to 3 Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 1 to 3. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v1...v3) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-version: '3' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci-ifcopenshell-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index a60152def1..556ad93750 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -101,7 +101,7 @@ jobs: path: artifacts/ - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 From bc8dd3a3ab7d46aa5c9511f8d213429878206dcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:00:35 +0000 Subject: [PATCH 137/657] Bump mamba-org/setup-micromamba from 1 to 2 Bumps [mamba-org/setup-micromamba](https://github.com/mamba-org/setup-micromamba) from 1 to 2. - [Release notes](https://github.com/mamba-org/setup-micromamba/releases) - [Commits](https://github.com/mamba-org/setup-micromamba/compare/v1...v2) --- updated-dependencies: - dependency-name: mamba-org/setup-micromamba dependency-version: '2' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci-ifcopenshell-conda-cleaner.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-ifcopenshell-conda-cleaner.yml b/.github/workflows/ci-ifcopenshell-conda-cleaner.yml index f992a7fd27..5c1b80bcc6 100644 --- a/.github/workflows/ci-ifcopenshell-conda-cleaner.yml +++ b/.github/workflows/ci-ifcopenshell-conda-cleaner.yml @@ -24,7 +24,7 @@ jobs: if: | github.repository == 'IfcOpenShell/IfcOpenShell' steps: - - uses: mamba-org/setup-micromamba@v1 # https://github.com/mamba-org/setup-micromamba + - uses: mamba-org/setup-micromamba@v2 # https://github.com/mamba-org/setup-micromamba with: environment-name: test-env create-args: >- From 9680f6b29c798bbaf67ccb352813daf24e05ef43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:00:42 +0000 Subject: [PATCH 138/657] Bump docker/build-push-action from 2 to 6 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 6. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v2...v6) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci-ifcopenshell-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index 556ad93750..5be3f4d47f 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -113,7 +113,7 @@ jobs: password: ${{ secrets.DOCKER_HUB_TOKEN }} - name: Build container image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: artifacts repository: aecgeeks/ifcopenshell From a5e7d7c4cc87cd6fb912019a6f3cd1ed296a1026 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:06:48 +0000 Subject: [PATCH 139/657] Bump docker/login-action from 1 to 3 Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 3. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v1...v3) --- updated-dependencies: - dependency-name: docker/login-action dependency-version: '3' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci-ifcopenshell-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index 5be3f4d47f..49bbc168fe 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -107,7 +107,7 @@ jobs: uses: docker/setup-buildx-action@v1 - name: Login to Dockerhub - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: username: aecgeeks password: ${{ secrets.DOCKER_HUB_TOKEN }} From b135dd699425c01edbb6774285ec8c6980195d8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:06:45 +0000 Subject: [PATCH 140/657] Bump actions/setup-python from 2 to 6 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 2 to 6. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v2...v6) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci-bcf-pypi.yml | 2 +- .github/workflows/ci-black-formatting.yaml | 4 ++-- .github/workflows/ci-bonsai-daily.yml | 2 +- .github/workflows/ci-bonsai.yml | 2 +- .github/workflows/ci-bsdd-pypi.yaml | 2 +- .github/workflows/ci-ifc4d-pypi.yaml | 2 +- .github/workflows/ci-ifc5d-pypi.yaml | 2 +- .github/workflows/ci-ifccityjson-pypi.yaml | 2 +- .github/workflows/ci-ifcclash-pypi.yaml | 2 +- .github/workflows/ci-ifcconvert.yml | 2 +- .github/workflows/ci-ifccsv-pypi.yaml | 2 +- .github/workflows/ci-ifcdiff-pypi.yaml | 2 +- .github/workflows/ci-ifcfm-pypi.yaml | 2 +- .github/workflows/ci-ifcopenshell-python-pypi.yml | 2 +- .github/workflows/ci-ifcopenshell-python.yml | 2 +- .github/workflows/ci-ifcpatch-pypi.yaml | 2 +- .github/workflows/ci-ifcsverchok-daily.yml | 2 +- .github/workflows/ci-ifcsverchok.yml | 2 +- .github/workflows/ci-ifctester-pypi.yml | 2 +- .github/workflows/ci.yml | 2 +- .github/workflows/docs-deployment-unstable.yml | 2 +- .github/workflows/docs-deployment.yml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci-bcf-pypi.yml b/.github/workflows/ci-bcf-pypi.yml index 085cf45f96..91be42e97d 100644 --- a/.github/workflows/ci-bcf-pypi.yml +++ b/.github/workflows/ci-bcf-pypi.yml @@ -20,7 +20,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 # https://github.com/actions/checkout - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-black-formatting.yaml b/.github/workflows/ci-black-formatting.yaml index 35e779ce83..37c9081538 100644 --- a/.github/workflows/ci-black-formatting.yaml +++ b/.github/workflows/ci-black-formatting.yaml @@ -12,12 +12,12 @@ jobs: uses: actions/checkout@v5 - name: Action - install python - uses: actions/setup-python@v5.3.0 + uses: actions/setup-python@v6 with: python-version: "3.9" - name: Action - install python - uses: actions/setup-python@v5.3.0 + uses: actions/setup-python@v6 with: python-version: "3.11" diff --git a/.github/workflows/ci-bonsai-daily.yml b/.github/workflows/ci-bonsai-daily.yml index 8c6c5a8d50..49e59f9474 100644 --- a/.github/workflows/ci-bonsai-daily.yml +++ b/.github/workflows/ci-bonsai-daily.yml @@ -55,7 +55,7 @@ jobs: } steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified python-version: '3.11' diff --git a/.github/workflows/ci-bonsai.yml b/.github/workflows/ci-bonsai.yml index 244f0542ec..7f90d1ad25 100644 --- a/.github/workflows/ci-bonsai.yml +++ b/.github/workflows/ci-bonsai.yml @@ -44,7 +44,7 @@ jobs: } steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified python-version: '3.11' diff --git a/.github/workflows/ci-bsdd-pypi.yaml b/.github/workflows/ci-bsdd-pypi.yaml index 7eeb2cdeb6..b563d1fa74 100644 --- a/.github/workflows/ci-bsdd-pypi.yaml +++ b/.github/workflows/ci-bsdd-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifc4d-pypi.yaml b/.github/workflows/ci-ifc4d-pypi.yaml index 3b77a57cfa..161ea22651 100644 --- a/.github/workflows/ci-ifc4d-pypi.yaml +++ b/.github/workflows/ci-ifc4d-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifc5d-pypi.yaml b/.github/workflows/ci-ifc5d-pypi.yaml index 2e7d72b98a..48b36f8b8f 100644 --- a/.github/workflows/ci-ifc5d-pypi.yaml +++ b/.github/workflows/ci-ifc5d-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifccityjson-pypi.yaml b/.github/workflows/ci-ifccityjson-pypi.yaml index d701c28a6f..5bf5a8bda8 100644 --- a/.github/workflows/ci-ifccityjson-pypi.yaml +++ b/.github/workflows/ci-ifccityjson-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifcclash-pypi.yaml b/.github/workflows/ci-ifcclash-pypi.yaml index 011cfb00c7..9075b2138d 100644 --- a/.github/workflows/ci-ifcclash-pypi.yaml +++ b/.github/workflows/ci-ifcclash-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifcconvert.yml b/.github/workflows/ci-ifcconvert.yml index 0343b70d28..181f5a0d77 100644 --- a/.github/workflows/ci-ifcconvert.yml +++ b/.github/workflows/ci-ifcconvert.yml @@ -38,7 +38,7 @@ jobs: } steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-ifccsv-pypi.yaml b/.github/workflows/ci-ifccsv-pypi.yaml index 7700ed674b..8dab393cc3 100644 --- a/.github/workflows/ci-ifccsv-pypi.yaml +++ b/.github/workflows/ci-ifccsv-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifcdiff-pypi.yaml b/.github/workflows/ci-ifcdiff-pypi.yaml index 2a9c7e4931..4abb170932 100644 --- a/.github/workflows/ci-ifcdiff-pypi.yaml +++ b/.github/workflows/ci-ifcdiff-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifcfm-pypi.yaml b/.github/workflows/ci-ifcfm-pypi.yaml index cef1b7aef4..5de093bfb2 100644 --- a/.github/workflows/ci-ifcfm-pypi.yaml +++ b/.github/workflows/ci-ifcfm-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifcopenshell-python-pypi.yml b/.github/workflows/ci-ifcopenshell-python-pypi.yml index f7905299be..10ad9b6e61 100644 --- a/.github/workflows/ci-ifcopenshell-python-pypi.yml +++ b/.github/workflows/ci-ifcopenshell-python-pypi.yml @@ -50,7 +50,7 @@ jobs: - uses: actions/checkout@v5 with: submodules: recursive - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-ifcopenshell-python.yml b/.github/workflows/ci-ifcopenshell-python.yml index e9a6c15d3b..bd8182d63e 100644 --- a/.github/workflows/ci-ifcopenshell-python.yml +++ b/.github/workflows/ci-ifcopenshell-python.yml @@ -41,7 +41,7 @@ jobs: - uses: actions/checkout@v5 with: submodules: recursive - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-ifcpatch-pypi.yaml b/.github/workflows/ci-ifcpatch-pypi.yaml index 27a002b59e..5c5d8fc583 100644 --- a/.github/workflows/ci-ifcpatch-pypi.yaml +++ b/.github/workflows/ci-ifcpatch-pypi.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci-ifcsverchok-daily.yml b/.github/workflows/ci-ifcsverchok-daily.yml index fd40001b47..c117ec57a4 100644 --- a/.github/workflows/ci-ifcsverchok-daily.yml +++ b/.github/workflows/ci-ifcsverchok-daily.yml @@ -26,7 +26,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified python-version: '3.11' diff --git a/.github/workflows/ci-ifcsverchok.yml b/.github/workflows/ci-ifcsverchok.yml index 870c7d8254..1ff610989f 100644 --- a/.github/workflows/ci-ifcsverchok.yml +++ b/.github/workflows/ci-ifcsverchok.yml @@ -20,7 +20,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified python-version: '3.11' diff --git a/.github/workflows/ci-ifctester-pypi.yml b/.github/workflows/ci-ifctester-pypi.yml index ab5ff65fad..d8acf9615e 100644 --- a/.github/workflows/ci-ifctester-pypi.yml +++ b/.github/workflows/ci-ifctester-pypi.yml @@ -19,7 +19,7 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Compile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c47ea41dfc..677a0cfde3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: submodules: recursive - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: 3.11 diff --git a/.github/workflows/docs-deployment-unstable.yml b/.github/workflows/docs-deployment-unstable.yml index 4b98629e5a..7f191838eb 100644 --- a/.github/workflows/docs-deployment-unstable.yml +++ b/.github/workflows/docs-deployment-unstable.yml @@ -14,7 +14,7 @@ jobs: uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v6 with: python-version: '3.x' diff --git a/.github/workflows/docs-deployment.yml b/.github/workflows/docs-deployment.yml index 5c23de057c..4a65e161d9 100644 --- a/.github/workflows/docs-deployment.yml +++ b/.github/workflows/docs-deployment.yml @@ -12,7 +12,7 @@ jobs: uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v6 with: python-version: '3.x' From 05f7aac8532bdc8e240cc44eed672754d3f4a1ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:06:29 +0000 Subject: [PATCH 141/657] Bump docker/setup-buildx-action from 1 to 3 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 3. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v3) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-version: '3' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci-ifcopenshell-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index 49bbc168fe..f2654de71b 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -104,7 +104,7 @@ jobs: uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v3 - name: Login to Dockerhub uses: docker/login-action@v3 From 8e95bf73f109b1db9b5a92a7fb3b32c0563bfcde Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:06:27 +0000 Subject: [PATCH 142/657] Bump actions/upload-pages-artifact from 3 to 4 Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-pages-artifact/releases) - [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-pages-artifact dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/publish-pyodide-demo-app.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-pyodide-demo-app.yml b/.github/workflows/publish-pyodide-demo-app.yml index 451b817098..91bab31cb5 100644 --- a/.github/workflows/publish-pyodide-demo-app.yml +++ b/.github/workflows/publish-pyodide-demo-app.yml @@ -34,7 +34,7 @@ jobs: uses: actions/configure-pages@v5 - name: Upload static files as artifact id: deployment - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 with: path: src/pyodide/demo-app/ From 30093499fa23de7bbed7e26076ea034af0968762 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:06:23 +0000 Subject: [PATCH 143/657] Bump aws-actions/configure-aws-credentials from 4 to 5 Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 4 to 5. - [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases) - [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v4...v5) --- updated-dependencies: - dependency-name: aws-actions/configure-aws-credentials dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build_osx.yml | 2 +- .github/workflows/build_pyodide.yml | 2 +- .github/workflows/build_rocky.yml | 2 +- .github/workflows/build_rocky_arm.yml | 2 +- .github/workflows/build_win.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_osx.yml b/.github/workflows/build_osx.yml index 88ae783c21..edce5e294b 100644 --- a/.github/workflows/build_osx.yml +++ b/.github/workflows/build_osx.yml @@ -139,7 +139,7 @@ jobs: cd .. - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 + uses: aws-actions/configure-aws-credentials@v5 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/build_pyodide.yml b/.github/workflows/build_pyodide.yml index c3d223f8e1..cdbd8360e8 100644 --- a/.github/workflows/build_pyodide.yml +++ b/.github/workflows/build_pyodide.yml @@ -77,7 +77,7 @@ jobs: git push || echo "Push failed" - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 + uses: aws-actions/configure-aws-credentials@v5 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/build_rocky.yml b/.github/workflows/build_rocky.yml index 4f1cbd7ae5..853fb6f6e1 100644 --- a/.github/workflows/build_rocky.yml +++ b/.github/workflows/build_rocky.yml @@ -118,7 +118,7 @@ jobs: cd .. - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 + uses: aws-actions/configure-aws-credentials@v5 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/build_rocky_arm.yml b/.github/workflows/build_rocky_arm.yml index a3b43f115d..ff6abc63a8 100644 --- a/.github/workflows/build_rocky_arm.yml +++ b/.github/workflows/build_rocky_arm.yml @@ -118,7 +118,7 @@ jobs: cd .. - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 + uses: aws-actions/configure-aws-credentials@v5 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index 59a1436f57..508f4278bd 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -73,7 +73,7 @@ jobs: git push || echo "Push failed" - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 + uses: aws-actions/configure-aws-credentials@v5 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} From 37bbc0b693904263358660588dca9b83d082422d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:10:01 +0000 Subject: [PATCH 144/657] Bump actions/upload-artifact from 4 to 5 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build_osx.yml | 2 +- .github/workflows/build_pyodide.yml | 2 +- .github/workflows/build_rocky.yml | 2 +- .github/workflows/build_rocky_arm.yml | 2 +- .github/workflows/ci-ifcopenshell-docker.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_osx.yml b/.github/workflows/build_osx.yml index edce5e294b..6732a29761 100644 --- a/.github/workflows/build_osx.yml +++ b/.github/workflows/build_osx.yml @@ -81,7 +81,7 @@ jobs: - name: Upload Build Logs if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: build-logs-osx-${{ matrix.arch }} path: | diff --git a/.github/workflows/build_pyodide.yml b/.github/workflows/build_pyodide.yml index cdbd8360e8..1119893c8d 100644 --- a/.github/workflows/build_pyodide.yml +++ b/.github/workflows/build_pyodide.yml @@ -42,7 +42,7 @@ jobs: - name: Upload Build Logs if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: build-logs-pyodide path: | diff --git a/.github/workflows/build_rocky.yml b/.github/workflows/build_rocky.yml index 853fb6f6e1..292e386a8b 100644 --- a/.github/workflows/build_rocky.yml +++ b/.github/workflows/build_rocky.yml @@ -61,7 +61,7 @@ jobs: - name: Upload Build Logs if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: build-logs-rocky path: | diff --git a/.github/workflows/build_rocky_arm.yml b/.github/workflows/build_rocky_arm.yml index ff6abc63a8..a149af42c8 100644 --- a/.github/workflows/build_rocky_arm.yml +++ b/.github/workflows/build_rocky_arm.yml @@ -61,7 +61,7 @@ jobs: - name: Upload Build Logs if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: build-logs-rocky-arm64 path: | diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index f2654de71b..5d79e5fbb1 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -76,7 +76,7 @@ jobs: make package working-directory: build - name: Upload - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: # Artifact name name: ifcos-artifacts From be0eea1bed9cf75b4dcbeeaece4f624c4e6d6d56 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Mon, 10 Nov 2025 23:04:42 +0100 Subject: [PATCH 145/657] cmake: Have a dedicated CMakeLists.txt for IfcConvert & co --- cmake/CMakeLists.txt | 29 +---------------------------- src/ifcconvert/CMakeLists.txt | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 28 deletions(-) create mode 100644 src/ifcconvert/CMakeLists.txt diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index dd6e7fdc50..06fb8162d5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1041,34 +1041,7 @@ if(BUILD_CONVERT OR BUILD_IFCPYTHON) endif(BUILD_CONVERT OR BUILD_IFCPYTHON) if(BUILD_CONVERT) - # IfcConvert - if (WITH_RELATIONSHIP_VALIDATION) - file(GLOB IFCCONVERT_CPP_FILES ../src/ifcconvert/*.cpp) - file(GLOB IFCCONVERT_H_FILES ../src/ifcconvert/*.h) - else() - file(GLOB IFCCONVERT_CPP_FILES ../src/ifcconvert/IfcConvert.cpp) - file(GLOB IFCCONVERT_H_FILES) - endif() - set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES}) - add_executable(IfcConvert ${IFCCONVERT_FILES}) - - target_link_libraries(IfcConvert IfcGeom IfcParse Serializers ${kernel_libraries} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}) - if (WITH_RELATIONSHIP_VALIDATION) - set_property(TARGET IfcConvert APPEND_STRING PROPERTY COMPILE_FLAGS " -DWITH_RELATIONSHIP_VALIDATION") - endif() - - if((NOT WIN32) AND BUILD_SHARED_LIBS) - # Only set RPATHs when building shared libraries (i.e. IfcParse and - # IfcGeom are dynamically linked). Not necessarily a perfect solution - # but probably a good indication of whether RPATHs are necessary. - SET_INSTALL_RPATHS(IfcConvert "${IFCOPENSHELL_LIBRARY_DIR};${OCC_LIBRARY_DIR};${Boost_LIBRARY_DIRS};${OPENCOLLADA_LIBRARY_DIR}") - endif() - - install(TARGETS IfcConvert - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) + add_subdirectory(../src/ifcconvert ifcconvert) endif(BUILD_CONVERT) # IfcGeomServer diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt new file mode 100644 index 0000000000..56794e44ca --- /dev/null +++ b/src/ifcconvert/CMakeLists.txt @@ -0,0 +1,17 @@ +# IfcConvert +if(WITH_RELATIONSHIP_VALIDATION) + file(GLOB IFCCONVERT_CPP_FILES *.cpp) + file(GLOB IFCCONVERT_H_FILES *.h) +else() + file(GLOB IFCCONVERT_CPP_FILES IfcConvert.cpp) + file(GLOB IFCCONVERT_H_FILES) +endif() +set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES}) +add_executable(IfcConvert ${IFCCONVERT_FILES}) + +target_link_libraries(IfcConvert IfcGeom IfcParse Serializers ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}) +if(WITH_RELATIONSHIP_VALIDATION) + set_property(TARGET IfcConvert APPEND_STRING PROPERTY COMPILE_FLAGS " -DWITH_RELATIONSHIP_VALIDATION") +endif() + +install(TARGETS IfcConvert) \ No newline at end of file From 613015e37e4de95899aceada8fbd1172132354ca Mon Sep 17 00:00:00 2001 From: Esteban Dugueperoux <43169544+EstebanDugueperoux2@users.noreply.github.com> Date: Wed, 19 Nov 2025 14:02:07 +0100 Subject: [PATCH 146/657] cmake: Externalize OpenCascade config (#7365) Co-authored-by: Andrej --- cmake/CMakeLists.txt | 138 +------------------------------ cmake/FindOpenCASCADE.cmake | 135 ++++++++++++++++++++++++++++++ src/examples/CMakeLists.txt | 4 +- src/ifcconvert/CMakeLists.txt | 2 +- src/ifcgeomserver/CMakeLists.txt | 2 +- src/ifcmax/CMakeLists.txt | 2 +- src/ifcwrap/CMakeLists.txt | 2 +- src/qtviewer/CMakeLists.txt | 2 +- 8 files changed, 144 insertions(+), 143 deletions(-) create mode 100644 cmake/FindOpenCASCADE.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 06fb8162d5..eaa65994d5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -490,141 +490,7 @@ if(BUILD_IFCGEOM) # Open CASCADE if(WITH_OPENCASCADE) - if(OCC_INCLUDE_DIR) - set(OCC_INCLUDE_DIR ${OCC_INCLUDE_DIR} CACHE FILEPATH "Open CASCADE header files") - message(STATUS "Looking for Open CASCADE include files in: ${OCC_INCLUDE_DIR}") - endif() - - if(OCC_LIBRARY_DIR) - set(OCC_LIBRARY_DIR ${OCC_LIBRARY_DIR} CACHE FILEPATH "Open CASCADE library files") - message(STATUS "Looking for Open CASCADE library files in: ${OCC_LIBRARY_DIR}") - endif() - - # No specific paths specified, try to find package. - if(OCC_INCLUDE_DIR AND OCC_LIBRARY_DIR) - message( - STATUS - "Using provided OCC_INCLUDE_DIR ('${OCC_INCLUDE_DIR}') " - "and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}')." - ) - # Parse OCC_VERSION_STRING. - file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR - REGEX "#define OCC_VERSION_MAJOR.*" - ) - string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR}) - file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR - REGEX "#define OCC_VERSION_MINOR.*" - ) - string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR}) - file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT - REGEX "#define OCC_VERSION_MAINTENANCE.*" - ) - string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT}) - set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}") - elseif(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) - # OCE is not supported for find_package, because it's using a different name (`oce`) - # and also has an odd directory structure (install/lib/oce-0.18/*.cmake). - find_package(OpenCASCADE CONFIG REQUIRED) - set(OCC_INCLUDE_DIR ${OpenCASCADE_INCLUDE_DIR}) - # Do not use OpenCASCADE_LIBRARY_DIR for OCC_LIBRARY_DIR - check target property explicitly. - # On Windows there is a case with OpenCASCADE_LIBRARY_DIR points to `lib` folder, - # while TKernel is actually in `libi`. - get_target_property(TKERNEL_LIB_PATH TKernel LOCATION) - get_filename_component(OCC_LIBRARY_DIR "${TKERNEL_LIB_PATH}" DIRECTORY) - set(OCC_VERSION_STRING ${OpenCASCADE_VERSION}) - message( - STATUS - "Found Open CASCADE package at '${OpenCASCADE_DIR}', " - "deducing from it OCC_INCLUDE_DIR: '${OCC_INCLUDE_DIR}' " - "and OCC_LIBRARY_DIR: '${OCC_LIBRARY_DIR}'." - ) - else() - message( - FATAL_ERROR - "Couldn't find Open CASCADE installation. " - "Either both OCC_INCLUDE_DIR ('${OCC_INCLUDE_DIR}') and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}') " - "must be specified or OpenCASCADE package should be discoverable. " - "If you're using OCE, then providing a package is not available " - "and you need to provide OCE_INCLUDE_DIR and OCE_LIBRARY_DIR directly." - ) - endif() - - set( - OPENCASCADE_LIBRARY_NAMES - TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO - TKFillet TKXSBase TKOffset TKHLR - - # @todo investigate the exact conditions when this is necessary - TKBin - ) - - if(OCC_VERSION_STRING VERSION_LESS 7.8.0) - list(APPEND OPENCASCADE_LIBRARY_NAMES TKIGES TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP) - else(OCC_VERSION_STRING VERSION_LESS 7.8.0) - list(APPEND OPENCASCADE_LIBRARY_NAMES TKDESTEP TKDEIGES) - endif(OCC_VERSION_STRING VERSION_LESS 7.8.0) - - clear_wasm_sysroot() - find_library(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH) - restore_wasm_sysroot() - - if(libTKernel) - message(STATUS "Required Open Cascade Library files found") - else() - message( - FATAL_ERROR - "Unable to find Open Cascade library files in OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}'), aborting" - ) - endif() - - # Use the found libTKernel as a template for all other OCC libraries - # TODO Extract this into macro/function - foreach(lib ${OPENCASCADE_LIBRARY_NAMES}) - # Make sure we'll handle the Windows/MSVC debug postfix convention too. - string(REPLACE TKerneld "${lib}" lib_path "${libTKernel}") - string(REPLACE TKernel "${lib}" lib_path "${lib_path}") - list(APPEND OPENCASCADE_LIBRARIES "${lib_path}") - endforeach() - - if(MSVC) - add_definitions(-DHAVE_NO_DLL) - add_debug_variants(OPENCASCADE_LIBRARIES "${OPENCASCADE_LIBRARIES}" d) - endif() - - if(WIN32) - # OCC might require linking to Winsock depending on the version and build configuration - list(APPEND OPENCASCADE_LIBRARIES ws2_32.lib) - endif() - - # Make sure cross-referenced symbols between static OCC libraries get - # resolved. Also add thread and rt libraries. - get_filename_component(libTKernelExt ${libTKernel} EXT) - if("${libTKernelExt}" STREQUAL ".a") - set(OCCT_STATIC ON) - endif() - - if(OCCT_STATIC) - find_package(Threads) - - 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 - # tfk: --start-group ... --end-group didn't work on the apple linker when last tested - 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) - set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} "rt") - endif() - if(NOT WIN32) - set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} "dl") - endif() - endif() + find_package(OpenCASCADE REQUIRED) endif(WITH_OPENCASCADE) endif(BUILD_IFCGEOM) @@ -969,7 +835,7 @@ if(BUILD_CONVERT OR BUILD_IFCPYTHON) add_library(geometry_serializer_ifc${schema} STATIC ../src/ifcgeom/Serialization/schema/Serialization.cpp) set_target_properties(geometry_serializer_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS -DIfcSchema=Ifc${schema}") - target_link_libraries(geometry_serializer_ifc${schema} ${OPENCASCADE_LIBRARIES}) + target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES}) list(APPEND geometry_serializer_libraries geometry_serializer_ifc${schema}) endforeach() diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake new file mode 100644 index 0000000000..0d992b57d1 --- /dev/null +++ b/cmake/FindOpenCASCADE.cmake @@ -0,0 +1,135 @@ +if(OCC_INCLUDE_DIR) + set(OCC_INCLUDE_DIR ${OCC_INCLUDE_DIR} CACHE FILEPATH "Open CASCADE header files") + message(STATUS "Looking for Open CASCADE include files in: ${OCC_INCLUDE_DIR}") +endif() + +if(OCC_LIBRARY_DIR) + set(OCC_LIBRARY_DIR ${OCC_LIBRARY_DIR} CACHE FILEPATH "Open CASCADE library files") + message(STATUS "Looking for Open CASCADE library files in: ${OCC_LIBRARY_DIR}") +endif() + +# No specific paths specified, try to find package. +if(OCC_INCLUDE_DIR AND OCC_LIBRARY_DIR) + message( + STATUS + "Using provided OCC_INCLUDE_DIR ('${OCC_INCLUDE_DIR}') " + "and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}')." + ) + # Parse OCC_VERSION_STRING. + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR + REGEX "#define OCC_VERSION_MAJOR.*" + ) + string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR}) + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR + REGEX "#define OCC_VERSION_MINOR.*" + ) + string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR}) + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT + REGEX "#define OCC_VERSION_MAINTENANCE.*" + ) + string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT}) + set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}") +elseif(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) + # OCE is not supported for find_package, because it's using a different name (`oce`) + # and also has an odd directory structure (install/lib/oce-0.18/*.cmake). + find_package(OpenCASCADE CONFIG REQUIRED) + set(OCC_INCLUDE_DIR ${OpenCASCADE_INCLUDE_DIR}) + # Do not use OpenCASCADE_LIBRARY_DIR for OCC_LIBRARY_DIR - check target property explicitly. + # On Windows there is a case with OpenCASCADE_LIBRARY_DIR points to `lib` folder, + # while TKernel is actually in `libi`. + get_target_property(TKERNEL_LIB_PATH TKernel LOCATION) + get_filename_component(OCC_LIBRARY_DIR "${TKERNEL_LIB_PATH}" DIRECTORY) + set(OCC_VERSION_STRING ${OpenCASCADE_VERSION}) + message( + STATUS + "Found Open CASCADE package at '${OpenCASCADE_DIR}', " + "deducing from it OCC_INCLUDE_DIR: '${OCC_INCLUDE_DIR}' " + "and OCC_LIBRARY_DIR: '${OCC_LIBRARY_DIR}'." + ) +else() + message( + FATAL_ERROR + "Couldn't find Open CASCADE installation. " + "Either both OCC_INCLUDE_DIR ('${OCC_INCLUDE_DIR}') and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}') " + "must be specified or OpenCASCADE package should be discoverable. " + "If you're using OCE, then providing a package is not available " + "and you need to provide OCE_INCLUDE_DIR and OCE_LIBRARY_DIR directly." + ) +endif() + +set( + OpenCASCADE_LIBRARIES + TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO + TKFillet TKXSBase TKOffset TKHLR + + # @todo investigate the exact conditions when this is necessary + TKBin +) + +if(OCC_VERSION_STRING VERSION_LESS 7.8.0) + list(APPEND OpenCASCADE_LIBRARIES TKIGES TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP) +else(OCC_VERSION_STRING VERSION_LESS 7.8.0) + list(APPEND OpenCASCADE_LIBRARIES TKDESTEP TKDEIGES) +endif(OCC_VERSION_STRING VERSION_LESS 7.8.0) + +clear_wasm_sysroot() +find_library(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH) +restore_wasm_sysroot() + +if(libTKernel) + message(STATUS "Required Open Cascade Library files found") +else() + message( + FATAL_ERROR + "Unable to find Open Cascade library files in OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}'), aborting" + ) +endif() + +# Use the found libTKernel as a template for all other OCC libraries +# TODO Extract this into macro/function +foreach(lib ${OpenCASCADE_LIBRARIES}) + # Make sure we'll handle the Windows/MSVC debug postfix convention too. + string(REPLACE TKerneld "${lib}" lib_path "${libTKernel}") + string(REPLACE TKernel "${lib}" lib_path "${lib_path}") + list(APPEND OpenCASCADE_LIBRARIES "${lib_path}") +endforeach() + +if(MSVC) + add_definitions(-DHAVE_NO_DLL) + add_debug_variants(OpenCASCADE_LIBRARIES "${OpenCASCADE_LIBRARIES}" d) +endif() + +if(WIN32) + # OCC might require linking to Winsock depending on the version and build configuration + list(APPEND OpenCASCADE_LIBRARIES ws2_32.lib) +endif() + +# Make sure cross-referenced symbols between static OCC libraries get +# resolved. Also add thread and rt libraries. +get_filename_component(libTKernelExt ${libTKernel} EXT) +if("${libTKernelExt}" STREQUAL ".a") + set(OCCT_STATIC ON) +endif() + +if(OCCT_STATIC) + find_package(Threads) + + 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 + # tfk: --start-group ... --end-group didn't work on the apple linker when last tested + 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) + set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES} "rt") + endif() + if(NOT WIN32) + set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES} "dl") + endif() +endif() diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index ae5fc1aa11..eee834f5c7 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -26,11 +26,11 @@ target_compile_features(IfcParseExamples PUBLIC cxx_std_17) if (WITH_OPENCASCADE) ADD_EXECUTABLE(IfcOpenHouse IfcOpenHouse.cpp) -TARGET_LINK_LIBRARIES(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES}) +TARGET_LINK_LIBRARIES(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples) ADD_EXECUTABLE(IfcAdvancedHouse IfcAdvancedHouse.cpp) -TARGET_LINK_LIBRARIES(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES}) +TARGET_LINK_LIBRARIES(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) endif() diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index 56794e44ca..108e0e7588 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -9,7 +9,7 @@ endif() set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES}) add_executable(IfcConvert ${IFCCONVERT_FILES}) -target_link_libraries(IfcConvert IfcGeom IfcParse Serializers ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}) +target_link_libraries(IfcConvert IfcGeom IfcParse Serializers ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}) if(WITH_RELATIONSHIP_VALIDATION) set_property(TARGET IfcConvert APPEND_STRING PROPERTY COMPILE_FLAGS " -DWITH_RELATIONSHIP_VALIDATION") endif() diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt index 24137c2555..ff56607ff2 100644 --- a/src/ifcgeomserver/CMakeLists.txt +++ b/src/ifcgeomserver/CMakeLists.txt @@ -3,6 +3,6 @@ find_package(Boost REQUIRED) file(GLOB CPP_FILES *.cpp) set(SOURCE_FILES ${CPP_FILES}) add_executable(IfcGeomServer ${SOURCE_FILES}) -target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OPENCASCADE_LIBRARIES}) +target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OpenCASCADE_LIBRARIES}) install(TARGETS IfcGeomServer) diff --git a/src/ifcmax/CMakeLists.txt b/src/ifcmax/CMakeLists.txt index 5ecadc882c..354ac34433 100644 --- a/src/ifcmax/CMakeLists.txt +++ b/src/ifcmax/CMakeLists.txt @@ -74,7 +74,7 @@ if(HAS_MAX) tessint.lib viewfile.lib zlibdll.lib - ${OPENCASCADE_LIBRARIES} + ${OpenCASCADE_LIBRARIES} ) set_target_properties(IfcMax_${max_year} PROPERTIES SUFFIX ".dli") diff --git a/src/ifcwrap/CMakeLists.txt b/src/ifcwrap/CMakeLists.txt index 149810216e..c0e74e2b1b 100644 --- a/src/ifcwrap/CMakeLists.txt +++ b/src/ifcwrap/CMakeLists.txt @@ -130,7 +130,7 @@ if (WASM_BUILD) endif() if("$ENV{LDFLAGS}" MATCHES ".undefined.suppress") # On osx there is some state in the python dylib. With `-Wl,undefined,suppress` we can ignore the missing symbols at compile time. -target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${LIBSVGFILL}) +target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${LIBSVGFILL}) else() target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL}) endif() diff --git a/src/qtviewer/CMakeLists.txt b/src/qtviewer/CMakeLists.txt index 978d5f116b..809070ebad 100644 --- a/src/qtviewer/CMakeLists.txt +++ b/src/qtviewer/CMakeLists.txt @@ -84,7 +84,7 @@ set_target_properties(${targetName} PROPERTIES target_link_libraries(${targetName} ${IFCOPENSHELL_LIBRARIES} - ${OPENCASCADE_LIBRARIES} + ${OpenCASCADE_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES} Qt${QT_VERSION}::Core Qt${QT_VERSION}::Gui From f3d918f76ca691f5c983570dfbb8f92316bef194 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 18:37:28 +0500 Subject: [PATCH 147/657] FindOpenCASCADE - describe used variables at the top, move env vars --- cmake/CMakeLists.txt | 2 -- cmake/FindOpenCASCADE.cmake | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index eaa65994d5..950b2dc74a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -198,8 +198,6 @@ if(BUILD_SHARED_LIBS) set(IFCOPENSHELL_LIBRARY_DIR "${LIBDIR}") endif() -UNIFY_ENVVARS_AND_CACHE(OCC_INCLUDE_DIR) -UNIFY_ENVVARS_AND_CACHE(OCC_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(BOOST_ROOT) UNIFY_ENVVARS_AND_CACHE(BOOST_LIBRARYDIR) UNIFY_ENVVARS_AND_CACHE(EIGEN_DIR) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index 0d992b57d1..af0f64cacd 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -1,3 +1,19 @@ +# +# Input variables: +# - `OCC_INCLUDE_DIR` +# - `OCC_LIBRARY_DIR` +# If input variables are not specified, try to find OpenCASCADE config. +# Input variables could also be provided as environment variables. +# +# Output variables: +# - `OCC_INCLUDE_DIR` +# - `OCC_LIBRARY_DIR` +# - `OpenCASCADE_LIBRARIES` +# + +UNIFY_ENVVARS_AND_CACHE(OCC_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(OCC_LIBRARY_DIR) + if(OCC_INCLUDE_DIR) set(OCC_INCLUDE_DIR ${OCC_INCLUDE_DIR} CACHE FILEPATH "Open CASCADE header files") message(STATUS "Looking for Open CASCADE include files in: ${OCC_INCLUDE_DIR}") From 59cc9d4a23968d03e8f988cbfbaeef7a1629e608 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 19:30:33 +0500 Subject: [PATCH 148/657] FindLibXml2.cmake --- cmake/CMakeLists.txt | 27 +------------------------ cmake/FindLibXml2.cmake | 44 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 26 deletions(-) create mode 100644 cmake/FindLibXml2.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 950b2dc74a..3514d1614a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -446,32 +446,7 @@ if(NOT MINIMAL_BUILD) # libxml2 is required for IFCXML (optional) and SVGFILL (mandatory) clear_wasm_sysroot() if(IFCXML_SUPPORT) - if((NOT LIBXML2_INCLUDE_DIR AND NOT LIBXML2_LIBRARIES)) - # First try config mode (probably works with vcpkg, Conan, macOS brew installs, but not on ubuntu 22.04) - # CONFIG is provided using root path, so no need to clear sysroot here. - restore_wasm_sysroot() - find_package(LibXml2 QUIET CONFIG) - clear_wasm_sysroot() - - if(NOT LibXml2_FOUND) - # Fallback to CMake's builtin FindLibXml2 module (works on Ubuntu) - find_package(LibXml2 REQUIRED) - else() - message(STATUS "Found LibXml2 config: ${LibXml2_DIR}") - endif() - - if(TARGET LibXml2::LibXml2) - # Config mode already gives us the target - set(LIBXML2_LIBRARIES LibXml2::LibXml2) - get_target_property(LIBXML2_INCLUDE_DIR LibXml2::LibXml2 INTERFACE_INCLUDE_DIRECTORIES) - else() - # Module mode (Ubuntu) - set(LIBXML2_LIBRARIES ${LibXml2_LIBRARIES}) - set(LIBXML2_INCLUDE_DIR ${LibXml2_INCLUDE_DIRS}) - endif() - else() - find_package(LibXml2 REQUIRED) - endif() + find_package(LibXml2 REQUIRED) endif() restore_wasm_sysroot() endif() diff --git a/cmake/FindLibXml2.cmake b/cmake/FindLibXml2.cmake new file mode 100644 index 0000000000..86be2f565b --- /dev/null +++ b/cmake/FindLibXml2.cmake @@ -0,0 +1,44 @@ +# +# Input variables: +# - `LIBXML2_INCLUDE_DIR` +# - `LIBXML2_LIBRARIES` +# If input variables are not specified, try to find LibXml2 config. +# Input variables could also be provided as environment variables. +# +# Output variables: +# - `LIBXML2_INCLUDE_DIR` +# - `LIBXML2_LIBRARIES` +# + +# To avoid cyclic calls to this file +list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) + +if((NOT LIBXML2_INCLUDE_DIR AND NOT LIBXML2_LIBRARIES)) + # First try config mode (probably works with vcpkg, Conan, macOS brew installs, but not on ubuntu 22.04) + # CONFIG is provided using root path, so no need to clear sysroot here. + restore_wasm_sysroot() + find_package(LibXml2 QUIET CONFIG) + clear_wasm_sysroot() + + if(NOT LibXml2_FOUND) + # Fallback to CMake's builtin FindLibXml2 module (works on Ubuntu) + find_package(LibXml2 REQUIRED) + else() + message(STATUS "Found LibXml2 config: ${LibXml2_DIR}") + endif() + + if(TARGET LibXml2::LibXml2) + # Config mode already gives us the target + set(LIBXML2_LIBRARIES LibXml2::LibXml2) + get_target_property(LIBXML2_INCLUDE_DIR LibXml2::LibXml2 INTERFACE_INCLUDE_DIRECTORIES) + else() + # Module mode (Ubuntu) + set(LIBXML2_LIBRARIES ${LibXml2_LIBRARIES}) + set(LIBXML2_INCLUDE_DIR ${LibXml2_INCLUDE_DIRS}) + endif() +else() + find_package(LibXml2 REQUIRED) +endif() + +# Restore module path. +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) From 36a0c2221781ed1b3dd63693bad37fcebf59e7f2 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 19:30:54 +0500 Subject: [PATCH 149/657] FindUSD.cmake (untested) --- cmake/CMakeLists.txt | 44 +----------------------------------- cmake/FindUSD.cmake | 54 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 43 deletions(-) create mode 100644 cmake/FindUSD.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3514d1614a..96759c88d5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -312,49 +312,7 @@ endif() # Add USD support to serializers if(USD_SUPPORT) - UNIFY_ENVVARS_AND_CACHE(USD_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(USD_LIBRARY_DIR) - - if("${USD_INCLUDE_DIR}" STREQUAL "") - find_path(USD_INCLUDE_DIR pxr.h - PATHS - /usr/include/pxr - /usr/local/include/pxr - REQUIRED - ) - if(USD_INCLUDE_DIR) - message(STATUS "Found USD include files in: ${USD_INCLUDE_DIR}") - else() - message(FATAL_ERROR "Unable to find USD include directory, specify USD_INCLUDE_DIR manually.") - endif() - else() - set(USD_INCLUDE_DIR ${USD_INCLUDE_DIR} CACHE FILEPATH "USD header files") - message(STATUS "Looking for USD include files in: ${USD_INCLUDE_DIR}") - endif() - - set(USD_LIBRARIES - usd_usd - usd_usdGeom - usd_usdShade - usd_usdLux - usd_vt - usd_sdf - usd_tf - usd_gf - ) - - find_library(USD_LIBRARY - NAMES ${USD_LIBRARIES} - PATHS ${USD_LIBRARY_DIR}) - if(USD_LIBRARY) - message(STATUS "USD libraries ${USD_LIBRARIES} found in: ${USD_LIBRARY_DIR}") - link_directories(${USD_LIBRARY_DIR}) - else() - message(FATAL_ERROR "Unable to find USD libraries in: ${USD_LIBRARY_DIR}") - endif() - - add_definitions(-DWITH_USD) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_USD) + find_package(USD REQUIRED) endif(USD_SUPPORT) if (WITH_ROCKSDB) diff --git a/cmake/FindUSD.cmake b/cmake/FindUSD.cmake new file mode 100644 index 0000000000..8b134656c1 --- /dev/null +++ b/cmake/FindUSD.cmake @@ -0,0 +1,54 @@ +# +# Input variables: +# - `USD_INCLUDE_DIR` +# - `USD_LIBRARY_DIR` +# Input variables could also be provided as environment variables. +# TODO: Try to find USD config if varibales are not provided. +# TODO: does usd have a config file? +# +# Output variables: +# - `USD_LIBRARIES` + +UNIFY_ENVVARS_AND_CACHE(USD_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(USD_LIBRARY_DIR) + +if("${USD_INCLUDE_DIR}" STREQUAL "") + find_path(USD_INCLUDE_DIR pxr.h + PATHS + /usr/include/pxr + /usr/local/include/pxr + REQUIRED + ) + if(USD_INCLUDE_DIR) + message(STATUS "Found USD include files in: ${USD_INCLUDE_DIR}") + else() + message(FATAL_ERROR "Unable to find USD include directory, specify USD_INCLUDE_DIR manually.") + endif() +else() + set(USD_INCLUDE_DIR ${USD_INCLUDE_DIR} CACHE FILEPATH "USD header files") + message(STATUS "Looking for USD include files in: ${USD_INCLUDE_DIR}") +endif() + +set(USD_LIBRARIES + usd_usd + usd_usdGeom + usd_usdShade + usd_usdLux + usd_vt + usd_sdf + usd_tf + usd_gf + ) + +find_library(USD_LIBRARY + NAMES ${USD_LIBRARIES} + PATHS ${USD_LIBRARY_DIR}) +if(USD_LIBRARY) + message(STATUS "USD libraries ${USD_LIBRARIES} found in: ${USD_LIBRARY_DIR}") + link_directories(${USD_LIBRARY_DIR}) +else() + message(FATAL_ERROR "Unable to find USD libraries in: ${USD_LIBRARY_DIR}") +endif() + +add_definitions(-DWITH_USD) +set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_USD) From 12166ddbba1b93cec77f6a2df1f78a0c05ff8a6a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 19:33:07 +0500 Subject: [PATCH 150/657] HDF5Config.cmake - restore patched module path at the end --- cmake/HDF5Config.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/HDF5Config.cmake b/cmake/HDF5Config.cmake index f4ffe492f8..e58a3cae62 100644 --- a/cmake/HDF5Config.cmake +++ b/cmake/HDF5Config.cmake @@ -86,3 +86,6 @@ if(NOT HDF5_INCLUDE_DIR OR NOT HDF5_LIBRARY_DIR) endif() endif() endif() + +# Restore module path. +list(PREPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) From 158fe92644cfe2bc37be513d9838c95d9f2233cf Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 19:34:59 +0500 Subject: [PATCH 151/657] HDF5Config.cmake - use CMAKE_SOURCE_DIR instead PROJECT_SOURCE_DIR It doesn't really matter in this case - it matters really only for FindLibXml2, because `PROJECT_SOURCE_DIR` point to svgfill, when it's config executed, instead of `CMAKE_SOURCE_DIR` - so `CMAKE_SOURCE_DIR ` is never removed from the path, leading to cyclic calls. Adding for HDF5 too just for consistency. --- cmake/HDF5Config.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/HDF5Config.cmake b/cmake/HDF5Config.cmake index e58a3cae62..3be63d7239 100644 --- a/cmake/HDF5Config.cmake +++ b/cmake/HDF5Config.cmake @@ -1,5 +1,5 @@ # To avoid cyclic calls to this file -list(REMOVE_ITEM CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) +list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) if("${HDF5_INCLUDE_DIR}" STREQUAL "") message(STATUS "No HDF5 include directory specified") @@ -88,4 +88,4 @@ if(NOT HDF5_INCLUDE_DIR OR NOT HDF5_LIBRARY_DIR) endif() # Restore module path. -list(PREPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) From a46228a57eb9bb16569cb23e4be41ac3fd13be23 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 20 Nov 2025 21:16:57 +1100 Subject: [PATCH 152/657] Hotfix to generate IOS docs until we properly package bsdd --- src/bsdd/bsdd_json.py | 1 - src/bsdd/type_hints.py | 4 +--- src/ifcopenshell-python/docs/conf.py | 3 ++- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/bsdd/bsdd_json.py b/src/bsdd/bsdd_json.py index e5f15878ea..5edc8616fa 100644 --- a/src/bsdd/bsdd_json.py +++ b/src/bsdd/bsdd_json.py @@ -1,6 +1,5 @@ from __future__ import annotations -from pydantic import BaseModel from .type_hints import * from typing import Optional, Literal from datetime import datetime diff --git a/src/bsdd/type_hints.py b/src/bsdd/type_hints.py index ac9aa29923..b408e3b9a1 100644 --- a/src/bsdd/type_hints.py +++ b/src/bsdd/type_hints.py @@ -1,6 +1,4 @@ -from typing import Literal, Annotated -from datetime import datetime -from pydantic import BeforeValidator +from typing import Literal COUNTRY_CODE = Literal[ diff --git a/src/ifcopenshell-python/docs/conf.py b/src/ifcopenshell-python/docs/conf.py index 12311f465e..6b81633689 100644 --- a/src/ifcopenshell-python/docs/conf.py +++ b/src/ifcopenshell-python/docs/conf.py @@ -103,7 +103,8 @@ autoapi_dirs = [ # autoapi_dirs = ['../../bcf/bcf', '../../bsdd', '../../ifccsv', '../../ifcdiff', '../../ifcpatch/ifcpatch', '../../ifctester/ifctester'] # These are auto-generated based on the IFC schema, so exclude them -autoapi_ignore = ["*ifcopenshell/express/rules*"] +# Temporarily ignore bsdd files until they are packaged properly in the wheel. +autoapi_ignore = ["*ifcopenshell/express/rules*", "*bsdd/bsdd_json.py", "*bsdd/type_hints.py", "*bsdd/yml_to_classes.py"] # Custom autoapi templates to make it easier to read our docs autoapi_template_dir = "_autoapi_templates" From 3cee0811d4912218263cd0ef1a21bb7c2cc97d7b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 20 Nov 2025 22:06:24 +1100 Subject: [PATCH 153/657] Update VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index b60d71966a..7ada0d303f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.4 +0.8.5 From 1d01d1f18454a236a2864d70d98c3c3ad738bad6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 14:16:29 +0500 Subject: [PATCH 154/657] build-all.py - postpone 4396126 --- nix/build-all.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nix/build-all.py b/nix/build-all.py index 15f01145c7..1d254d5fdb 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -243,7 +243,9 @@ if WASM: # Pyodide still in transition from `FLAGS` to `FLAGS_INIT`. # `FLAGS_INIT` allow us to provide flags using environment variables # and providing `FLAGS` directly would break pyodide toolchain. - WASM_CMAKE_IS_USING_INIT_VARS = get_pyodide_build_version() >= (0, 30, 8) + # NOTE: changes in pyodide-build currently got postponed: + # https://github.com/pyodide/pyodide-build/pull/249 + WASM_CMAKE_IS_USING_INIT_VARS = get_pyodide_build_version() >= (99, 0, 0) # pyodide provide empty `CXXFLAGS`, leading to issues using C++ files compiled with `-fexceptions` # which is used by OCCT. From bd07078def32012d623ec9068eb997229ac39d49 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 20 Nov 2025 10:57:12 +0100 Subject: [PATCH 155/657] Remove spurious cd --- win/build-deps.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 957c058ca7..3a5555bebb 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -354,7 +354,6 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error set DEPENDENCY_NAME=hdf5 set DEPENDENCY_DIR=%DEPS_DIR%\hdf5-%HDF5_VERSION% -cd "%DEPENDENCY_DIR%" set HDF5_CMAKE_ZIP=hdf5-%HDF5_VERSION%.zip set HDF5_INSTALL_NAME=HDF5-%HDF5_VERSION%-win%ARCH_BITS% @@ -953,3 +952,4 @@ echo - https://msdn.microsoft.com/en-us/library/ms229859(v=vs.110).aspx echo. echo NB: This script needs to be ran from the directory directly containing it. echo. + From 5e6b96ee99daeea8cc5bbbfa9c9474afda20ac10 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 19 Nov 2025 19:38:45 +0500 Subject: [PATCH 156/657] cmake - remove wasm_sysroot as superseded by e833d0c --- cmake/CMakeLists.txt | 28 ---------------------------- cmake/FindLibXml2.cmake | 2 -- cmake/FindOpenCASCADE.cmake | 2 -- 3 files changed, 32 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 96759c88d5..aeb55bb063 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -230,26 +230,6 @@ foreach(option_flag IN LISTS option_flags) convert_env_var_to_bool("${option_flag}") endforeach() -set(CMAKE_FIND_ROOT_PATH_BACKUP "${CMAKE_FIND_ROOT_PATH}") - -macro(clear_wasm_sysroot) -if(WASM_BUILD) - # when using the nix/build-all.py build script we should not - # look into the sysroot for most of the dependencies but rather - # in the designated build/ folder created by the script. - set(CMAKE_FIND_ROOT_PATH "") -endif() -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) -endmacro() - -macro(restore_wasm_sysroot) -if(WASM_BUILD) - # reset to use sysroot - set(CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH_BACKUP}") -endif() -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -endmacro() - if(WITH_CGAL) if(NOT CGAL_INCLUDE_DIR) # CGAL is not respecting default Boost_USE_STATIC_LIBS value @@ -294,9 +274,7 @@ if(GLTF_SUPPORT) endif() if(NOT nlohmann_json_DIR) - clear_wasm_sysroot() find_path(json_header_path "nlohmann/json.hpp" HINTS ${JSON_INCLUDE_DIR}) - restore_wasm_sysroot() set(JSON_INCLUDE_DIR ${json_header_path}) if(json_header_path) @@ -394,19 +372,15 @@ if(USE_MMAP) add_definitions(-DUSE_MMAP) endif() -clear_wasm_sysroot() find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) -restore_wasm_sysroot() message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") message(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}") if(NOT MINIMAL_BUILD) # libxml2 is required for IFCXML (optional) and SVGFILL (mandatory) - clear_wasm_sysroot() if(IFCXML_SUPPORT) find_package(LibXml2 REQUIRED) endif() - restore_wasm_sysroot() endif() if(IFCXML_SUPPORT) @@ -783,10 +757,8 @@ if(BUILD_IFCGEOM) set(CGAL_LIBRARIES CGAL::CGAL) message(STATUS "Using found CGAL package at '${CGAL_DIR}'") elseif(WITH_CGAL AND NOT CGAL_DIR) - clear_wasm_sysroot() find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) - restore_wasm_sysroot() if(NOT libGMP) message(FATAL_ERROR "Unable to find GMP library files, aborting") endif() diff --git a/cmake/FindLibXml2.cmake b/cmake/FindLibXml2.cmake index 86be2f565b..62148c02ac 100644 --- a/cmake/FindLibXml2.cmake +++ b/cmake/FindLibXml2.cmake @@ -16,9 +16,7 @@ list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) if((NOT LIBXML2_INCLUDE_DIR AND NOT LIBXML2_LIBRARIES)) # First try config mode (probably works with vcpkg, Conan, macOS brew installs, but not on ubuntu 22.04) # CONFIG is provided using root path, so no need to clear sysroot here. - restore_wasm_sysroot() find_package(LibXml2 QUIET CONFIG) - clear_wasm_sysroot() if(NOT LibXml2_FOUND) # Fallback to CMake's builtin FindLibXml2 module (works on Ubuntu) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index af0f64cacd..0202888278 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -88,9 +88,7 @@ else(OCC_VERSION_STRING VERSION_LESS 7.8.0) list(APPEND OpenCASCADE_LIBRARIES TKDESTEP TKDEIGES) endif(OCC_VERSION_STRING VERSION_LESS 7.8.0) -clear_wasm_sysroot() find_library(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH) -restore_wasm_sysroot() if(libTKernel) message(STATUS "Required Open Cascade Library files found") From 88d09c83b739d630e525d61120f368f41e794a27 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 14:16:11 +0500 Subject: [PATCH 157/657] FindLibXml2 - `add_debug_variants` --- cmake/CMakeLists.txt | 4 ---- cmake/FindLibXml2.cmake | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index aeb55bb063..adec83256f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -389,10 +389,6 @@ if(IFCXML_SUPPORT) endif() if(BUILD_IFCGEOM) - if(MSVC AND NOT LibXml2_DIR) - add_debug_variants(LIBXML2_LIBRARIES "${LIBXML2_LIBRARIES}" d) - endif() - # Open CASCADE if(WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) diff --git a/cmake/FindLibXml2.cmake b/cmake/FindLibXml2.cmake index 62148c02ac..e0ee4975e5 100644 --- a/cmake/FindLibXml2.cmake +++ b/cmake/FindLibXml2.cmake @@ -38,5 +38,9 @@ else() find_package(LibXml2 REQUIRED) endif() +if(MSVC AND NOT LibXml2_DIR) + add_debug_variants(LIBXML2_LIBRARIES "${LIBXML2_LIBRARIES}" d) +endif() + # Restore module path. list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) From 3330e79556bc6257ad11adddd683700210dd4c92 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 16:33:37 +0500 Subject: [PATCH 158/657] FindLibXml2 - initialize from env variables --- cmake/CMakeLists.txt | 2 -- cmake/FindLibXml2.cmake | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index adec83256f..10760ae835 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -205,8 +205,6 @@ UNIFY_ENVVARS_AND_CACHE(EIGEN_DIR) if(NOT MINIMAL_BUILD) UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_LIBRARY_DIR) - UNIFY_ENVVARS_AND_CACHE(LIBXML2_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(LIBXML2_LIBRARIES) UNIFY_ENVVARS_AND_CACHE(PCRE_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(PYTHON_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(PYTHON_LIBRARY) diff --git a/cmake/FindLibXml2.cmake b/cmake/FindLibXml2.cmake index e0ee4975e5..0bfab4f2b6 100644 --- a/cmake/FindLibXml2.cmake +++ b/cmake/FindLibXml2.cmake @@ -13,6 +13,9 @@ # To avoid cyclic calls to this file list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) +UNIFY_ENVVARS_AND_CACHE(LIBXML2_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(LIBXML2_LIBRARIES) + if((NOT LIBXML2_INCLUDE_DIR AND NOT LIBXML2_LIBRARIES)) # First try config mode (probably works with vcpkg, Conan, macOS brew installs, but not on ubuntu 22.04) # CONFIG is provided using root path, so no need to clear sysroot here. From 5b43d2b75e94519c51666b8fa4b972cfa0954be4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 16:31:54 +0500 Subject: [PATCH 159/657] HDF5Config -> FindHDF5 See the reasoning in https://github.com/IfcOpenShell/IfcOpenShell/pull/7193#issuecomment-3552830928 --- cmake/{HDF5Config.cmake => FindHDF5.cmake} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cmake/{HDF5Config.cmake => FindHDF5.cmake} (100%) diff --git a/cmake/HDF5Config.cmake b/cmake/FindHDF5.cmake similarity index 100% rename from cmake/HDF5Config.cmake rename to cmake/FindHDF5.cmake From c1aa7028963185669305f1a06d7e2fb39fb2bd6d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 16:33:20 +0500 Subject: [PATCH 160/657] FindHDF5 - describe used variables, initialize from env --- cmake/CMakeLists.txt | 3 --- cmake/FindHDF5.cmake | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 10760ae835..1227d3c3f0 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -209,9 +209,6 @@ if(NOT MINIMAL_BUILD) UNIFY_ENVVARS_AND_CACHE(PYTHON_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(PYTHON_LIBRARY) UNIFY_ENVVARS_AND_CACHE(PYTHON_EXECUTABLE) - UNIFY_ENVVARS_AND_CACHE(HDF5_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(HDF5_LIBRARY_DIR) - UNIFY_ENVVARS_AND_CACHE(HDF5_LIBRARIES) UNIFY_ENVVARS_AND_CACHE(CGAL_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(CGAL_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(GMP_INCLUDE_DIR) diff --git a/cmake/FindHDF5.cmake b/cmake/FindHDF5.cmake index 3be63d7239..c29c3e6321 100644 --- a/cmake/FindHDF5.cmake +++ b/cmake/FindHDF5.cmake @@ -1,3 +1,21 @@ +# +# Input variables: +# - `HDF5_INCLUDE_DIR` +# - `HDF5_LIBRARY_DIR` +# - `HDF5_LIBRARIES` +# If input variables are not specified, try to find HDF5 config. +# Input variables could also be provided as environment variables. +# +# Output variables: +# - `HDF5_INCLUDE_DIR` +# - `HDF5_LIBRARY_DIR` +# - `HDF5_LIBRARIES` +# + +UNIFY_ENVVARS_AND_CACHE(HDF5_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(HDF5_LIBRARY_DIR) +UNIFY_ENVVARS_AND_CACHE(HDF5_LIBRARIES) + # To avoid cyclic calls to this file list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) From 1b8652a789212d87f9f4aa062a1408fec47f961e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 16:48:48 +0500 Subject: [PATCH 161/657] FindOpenCOLLADA.cmake --- cmake/CMakeLists.txt | 102 +------------------------------ cmake/FindOpenCOLLADA.cmake | 118 ++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+), 100 deletions(-) create mode 100644 cmake/FindOpenCOLLADA.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1227d3c3f0..a0af8835ce 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -203,9 +203,6 @@ UNIFY_ENVVARS_AND_CACHE(BOOST_LIBRARYDIR) UNIFY_ENVVARS_AND_CACHE(EIGEN_DIR) if(NOT MINIMAL_BUILD) - UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_LIBRARY_DIR) - UNIFY_ENVVARS_AND_CACHE(PCRE_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(PYTHON_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(PYTHON_LIBRARY) UNIFY_ENVVARS_AND_CACHE(PYTHON_EXECUTABLE) @@ -390,104 +387,9 @@ if(BUILD_IFCGEOM) endif(WITH_OPENCASCADE) endif(BUILD_IFCGEOM) -if(COLLADA_SUPPORT AND (NOT OPENCOLLADA_INCLUDE_DIR AND NOT OPENCOLLADA_LIBRARY_DIR)) - # If package is found, automatically sets - # OPENCOLLADA_INCLUDE_DIRS and OPENCOLLADA_LIBRARIES (list of targets, not paths). - find_package(OpenCOLLADA CONFIG) - if(OpenCOLLADA_DIR) - message(STATUS "Found OpenCOLLADA: '${OpenCOLLADA_DIR}'.") - set(OPENCOLLADA_FOUND TRUE) - else() - message(STATUS "OpenCOLLADA package not found, falling back to manual search.") - endif() +if(COLLADA_SUPPORT) + find_package(OpenCOLLADA REQUIRED) endif() -if(COLLADA_SUPPORT AND NOT OpenCOLLADA_DIR) - # Find OpenCOLLADA - if("${OPENCOLLADA_INCLUDE_DIR}" STREQUAL "") - message(STATUS "No OpenCOLLADA include directory specified") - set(OPENCOLLADA_INCLUDE_DIR "/usr/include/opencollada" CACHE FILEPATH "OpenCOLLADA header files") - else() - set(OPENCOLLADA_INCLUDE_DIR "${OPENCOLLADA_INCLUDE_DIR}" CACHE FILEPATH "OpenCOLLADA header files") - endif() - - if("${OPENCOLLADA_LIBRARY_DIR}" STREQUAL "") - message(STATUS "No OpenCOLLADA library directory specified") - find_library(OPENCOLLADA_FRAMEWORK_LIB NAMES OpenCOLLADAFramework - PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib) - get_filename_component(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH) - endif() - - find_library(OpenCOLLADAFramework NAMES OpenCOLLADAFramework OpenCOLLADAFrameworkd PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH) - - if(OpenCOLLADAFramework) - message(STATUS "OpenCOLLADA library files found") - else() - message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA libraries. " - "Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.") - endif() - - set(OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR}" CACHE FILEPATH "OpenCOLLADA library files") - - set(OPENCOLLADA_INCLUDE_DIRS "${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils" "${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter") - - find_file(COLLADASWStreamWriter_h "COLLADASWStreamWriter.h" ${OPENCOLLADA_INCLUDE_DIRS}) - - if(COLLADASWStreamWriter_h) - message(STATUS "OpenCOLLADA header files found") - set(OPENCOLLADA_FOUND TRUE) - - set(OPENCOLLADA_LIBRARY_NAMES - GeneratedSaxParser MathMLSolver OpenCOLLADABaseUtils OpenCOLLADAFramework OpenCOLLADASaxFrameworkLoader - OpenCOLLADAStreamWriter UTF buffer ftoa - ) - - # Use the found OpenCOLLADAFramework as a template for all other OpenCOLLADA libraries - foreach(lib ${OPENCOLLADA_LIBRARY_NAMES}) - # Make sure we'll handle the Windows/MSVC debug postfix convention too. - string(REPLACE OpenCOLLADAFrameworkd "${lib}" lib_path "${OpenCOLLADAFramework}") - string(REPLACE OpenCOLLADAFramework "${lib}" lib_path "${lib_path}") - list(APPEND OPENCOLLADA_LIBRARIES "${lib_path}") - endforeach() - - if("${PCRE_LIBRARY_DIR}" STREQUAL "") - if(WIN32) - find_library(pcre_library NAMES pcre pcred PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH) - else() - find_library(pcre_library NAMES pcre PATHS ${OPENCOLLADA_LIBRARY_DIR}) - endif() - - get_filename_component(PCRE_LIBRARY_DIR ${pcre_library} PATH) - else() - find_library(pcre_library NAMES pcre pcred PATHS ${PCRE_LIBRARY_DIR} NO_DEFAULT_PATH) - endif() - - if(pcre_library) - set(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_LIBRARY_DIR} ${PCRE_LIBRARY_DIR}) - - if(MSVC) - # Add release lib regardless whether release or debug found. Debug version will be appended below. - list(APPEND OPENCOLLADA_LIBRARIES "${PCRE_LIBRARY_DIR}/pcre.lib") - else() - list(APPEND OPENCOLLADA_LIBRARIES "${pcre_library}") - endif() - else() - message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find PCRE. " - "Disable COLLADA_SUPPORT or fix PCRE_LIBRARY_DIR path to proceed.") - endif() - - if(MSVC) - add_debug_variants(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES}" d) - endif() - else() - message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA headers. " - "Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.") - endif() -endif(COLLADA_SUPPORT AND NOT OpenCOLLADA_DIR) -if(COLLADA_SUPPORT AND OPENCOLLADA_FOUND) - add_definitions(-DWITH_OPENCOLLADA) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_OPENCOLLADA) -endif() - if(HDF5_SUPPORT) find_package(HDF5 REQUIRED COMPONENTS C CXX) diff --git a/cmake/FindOpenCOLLADA.cmake b/cmake/FindOpenCOLLADA.cmake new file mode 100644 index 0000000000..141ef98d82 --- /dev/null +++ b/cmake/FindOpenCOLLADA.cmake @@ -0,0 +1,118 @@ + +# +# Input variables: +# - `OPENCOLLADA_INCLUDE_DIR` +# - `OPENCOLLADA_LIBRARY_DIR` +# - `PCRE_LIBRARY_DIR` +# If input variables are not specified, try to find OpenCOLLADA config. +# Input variables could also be provided as environment variables. +# +# Output variables: +# - `OPENCOLLADA_INCLUDE_DIR` +# - `OPENCOLLADA_LIBRARY_DIR` +# - `OPENCOLLADA_LIBRARIES` +# + +UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_LIBRARY_DIR) +UNIFY_ENVVARS_AND_CACHE(PCRE_LIBRARY_DIR) + +if(NOT OPENCOLLADA_INCLUDE_DIR AND NOT OPENCOLLADA_LIBRARY_DIR) + # If package is found, automatically sets + # OPENCOLLADA_INCLUDE_DIRS and OPENCOLLADA_LIBRARIES (list of targets, not paths). + find_package(OpenCOLLADA CONFIG) + if(OpenCOLLADA_DIR) + message(STATUS "Found OpenCOLLADA: '${OpenCOLLADA_DIR}'.") + set(OPENCOLLADA_FOUND TRUE) + else() + message(STATUS "OpenCOLLADA package not found, falling back to manual search.") + endif() +endif() + +if(NOT OpenCOLLADA_DIR) + # Find OpenCOLLADA + if("${OPENCOLLADA_INCLUDE_DIR}" STREQUAL "") + message(STATUS "No OpenCOLLADA include directory specified") + set(OPENCOLLADA_INCLUDE_DIR "/usr/include/opencollada" CACHE FILEPATH "OpenCOLLADA header files") + else() + set(OPENCOLLADA_INCLUDE_DIR "${OPENCOLLADA_INCLUDE_DIR}" CACHE FILEPATH "OpenCOLLADA header files") + endif() + + if("${OPENCOLLADA_LIBRARY_DIR}" STREQUAL "") + message(STATUS "No OpenCOLLADA library directory specified") + find_library(OPENCOLLADA_FRAMEWORK_LIB NAMES OpenCOLLADAFramework + PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib) + get_filename_component(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH) + endif() + + find_library(OpenCOLLADAFramework NAMES OpenCOLLADAFramework OpenCOLLADAFrameworkd PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH) + + if(OpenCOLLADAFramework) + message(STATUS "OpenCOLLADA library files found") + else() + message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA libraries. " + "Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.") + endif() + + set(OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR}" CACHE FILEPATH "OpenCOLLADA library files") + + set(OPENCOLLADA_INCLUDE_DIRS "${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils" "${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter") + + find_file(COLLADASWStreamWriter_h "COLLADASWStreamWriter.h" ${OPENCOLLADA_INCLUDE_DIRS}) + + if(COLLADASWStreamWriter_h) + message(STATUS "OpenCOLLADA header files found") + set(OPENCOLLADA_FOUND TRUE) + + set(OPENCOLLADA_LIBRARY_NAMES + GeneratedSaxParser MathMLSolver OpenCOLLADABaseUtils OpenCOLLADAFramework OpenCOLLADASaxFrameworkLoader + OpenCOLLADAStreamWriter UTF buffer ftoa + ) + + # Use the found OpenCOLLADAFramework as a template for all other OpenCOLLADA libraries + foreach(lib ${OPENCOLLADA_LIBRARY_NAMES}) + # Make sure we'll handle the Windows/MSVC debug postfix convention too. + string(REPLACE OpenCOLLADAFrameworkd "${lib}" lib_path "${OpenCOLLADAFramework}") + string(REPLACE OpenCOLLADAFramework "${lib}" lib_path "${lib_path}") + list(APPEND OPENCOLLADA_LIBRARIES "${lib_path}") + endforeach() + + if("${PCRE_LIBRARY_DIR}" STREQUAL "") + if(WIN32) + find_library(pcre_library NAMES pcre pcred PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH) + else() + find_library(pcre_library NAMES pcre PATHS ${OPENCOLLADA_LIBRARY_DIR}) + endif() + + get_filename_component(PCRE_LIBRARY_DIR ${pcre_library} PATH) + else() + find_library(pcre_library NAMES pcre pcred PATHS ${PCRE_LIBRARY_DIR} NO_DEFAULT_PATH) + endif() + + if(pcre_library) + set(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_LIBRARY_DIR} ${PCRE_LIBRARY_DIR}) + + if(MSVC) + # Add release lib regardless whether release or debug found. Debug version will be appended below. + list(APPEND OPENCOLLADA_LIBRARIES "${PCRE_LIBRARY_DIR}/pcre.lib") + else() + list(APPEND OPENCOLLADA_LIBRARIES "${pcre_library}") + endif() + else() + message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find PCRE. " + "Disable COLLADA_SUPPORT or fix PCRE_LIBRARY_DIR path to proceed.") + endif() + + if(MSVC) + add_debug_variants(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES}" d) + endif() + else() + message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA headers. " + "Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.") + endif() +endif(NOT OpenCOLLADA_DIR) + +if(OPENCOLLADA_FOUND) + add_definitions(-DWITH_OPENCOLLADA) + set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_OPENCOLLADA) +endif() From 57a724e80f0a4dc5aee8b8c6bad93187dd632c09 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 16:55:19 +0500 Subject: [PATCH 162/657] FindCGAL.cmake --- cmake/CMakeLists.txt | 24 +----------------------- cmake/FindCGAL.cmake | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 23 deletions(-) create mode 100644 cmake/FindCGAL.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a0af8835ce..7cd439b7df 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -206,12 +206,6 @@ if(NOT MINIMAL_BUILD) UNIFY_ENVVARS_AND_CACHE(PYTHON_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(PYTHON_LIBRARY) UNIFY_ENVVARS_AND_CACHE(PYTHON_EXECUTABLE) - UNIFY_ENVVARS_AND_CACHE(CGAL_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(CGAL_LIBRARY_DIR) - UNIFY_ENVVARS_AND_CACHE(GMP_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(GMP_LIBRARY_DIR) - UNIFY_ENVVARS_AND_CACHE(MPFR_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(MPFR_LIBRARY_DIR) endif() # Get a list of all OPTION flags from the CMakeLists.txt @@ -223,28 +217,12 @@ foreach(option_flag IN LISTS option_flags) endforeach() if(WITH_CGAL) - if(NOT CGAL_INCLUDE_DIR) - # CGAL is not respecting default Boost_USE_STATIC_LIBS value - # and sometiems it's getting in the way. - if(NOT DEFINED Boost_USE_STATIC_LIBS) - set(CGAL_Boost_USE_STATIC_LIBS OFF) - else() - set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}") - endif() find_package(CGAL REQUIRED) - if(NOT CGAL_DIR) - message( - FATAL_ERROR - "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." - ) - endif() - message(STATUS "CGAL: found config at '${CGAL_DIR}'.") + if(TARGET CGAL::CGAL) link_libraries(CGAL::CGAL) endif() - add_definitions(-DIFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) - list(APPEND GEOMETRY_KERNELS cgal) endif() diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake new file mode 100644 index 0000000000..caf13ec791 --- /dev/null +++ b/cmake/FindCGAL.cmake @@ -0,0 +1,42 @@ +# +# Input variables: +# - `CGAL_INCLUDE_DIR` +# - `CGAL_LIBRARY_DIR` +# - `GMP_INCLUDE_DIR` +# - `GMP_LIBRARY_DIR` +# - `MPFR_INCLUDE_DIR` +# - `MPFR_LIBRARY_DIR` +# If input variables are not specified, try to find HDF5 config. +# Input variables could also be provided as environment variables. +# +# Output variables: +# - `CGAL_INCLUDE_DIR` +# + +UNIFY_ENVVARS_AND_CACHE(CGAL_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(CGAL_LIBRARY_DIR) +UNIFY_ENVVARS_AND_CACHE(GMP_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(GMP_LIBRARY_DIR) +UNIFY_ENVVARS_AND_CACHE(MPFR_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(MPFR_LIBRARY_DIR) + +if(NOT CGAL_INCLUDE_DIR) + # CGAL is not respecting default Boost_USE_STATIC_LIBS value + # and sometiems it's getting in the way. + if(NOT DEFINED Boost_USE_STATIC_LIBS) + set(CGAL_Boost_USE_STATIC_LIBS OFF) + else() + set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}") + endif() + find_package(CGAL CONFIG REQUIRED) + if(NOT CGAL_DIR) + message( + FATAL_ERROR + "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." + ) + endif() + message(STATUS "CGAL: found config at '${CGAL_DIR}'.") +endif() + +add_definitions(-DIFOPSH_WITH_CGAL) +set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) From 4f5ebef5daffd75b060929814f190099aa0d1225 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 17:17:29 +0500 Subject: [PATCH 163/657] cmake - use `HDF5_INCLUDE_DIR` instead `HDF5_INCLUDE_DIRS` As this is the variable defined by `FindHDF5`. --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 7cd439b7df..821ceed891 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -504,7 +504,7 @@ endif() include_directories(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} ${EIGEN_DIR} ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ) From f56a97512aa88cf8fafb2b43ebd7bf805813c620 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 19:37:17 +0500 Subject: [PATCH 164/657] Rename IFC_GEOM_EXPORTS replaced in #7340 --- src/ifcgeom/kernels/ifc_geomlibrary_api.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcgeom/kernels/ifc_geomlibrary_api.h b/src/ifcgeom/kernels/ifc_geomlibrary_api.h index 61ba3c3b20..91aeda7364 100644 --- a/src/ifcgeom/kernels/ifc_geomlibrary_api.h +++ b/src/ifcgeom/kernels/ifc_geomlibrary_api.h @@ -22,7 +22,7 @@ #ifdef IFC_SHARED_BUILD #ifdef _WIN32 -#ifdef IFC_GEOMLIBRARY_EXPORTS +#ifdef IFC_GEOM_EXPORTS #define IFC_GEOMLIBRARY_API __declspec(dllexport) #else #define IFC_GEOMLIBRARY_API __declspec(dllimport) From 692ef5ecea850e8de349ba2e2119257300bd0da9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 20 Nov 2025 20:01:56 +0500 Subject: [PATCH 165/657] cmake - fix error finding `Eigen::Eigen` target #7390 `EIgen::Eigen` target used in #7340 for linking exists only if there's a cmake config, while there are cases when there's just include directory. Added same name interface target to mimic config. --- cmake/CMakeLists.txt | 20 +++----------------- cmake/FindEigen3.cmake | 27 +++++++++++++++++++++++++++ win/run-cmake.bat | 2 ++ 3 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 cmake/FindEigen3.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 821ceed891..1cb01a814e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -200,7 +200,6 @@ endif() UNIFY_ENVVARS_AND_CACHE(BOOST_ROOT) UNIFY_ENVVARS_AND_CACHE(BOOST_LIBRARYDIR) -UNIFY_ENVVARS_AND_CACHE(EIGEN_DIR) if(NOT MINIMAL_BUILD) UNIFY_ENVVARS_AND_CACHE(PYTHON_INCLUDE_DIR) @@ -487,25 +486,12 @@ else() endif(MSVC) -# Ensure other dependencies are provided. -if(NOT EXISTS "${EIGEN_DIR}") - find_package(Eigen3 CONFIG) - if(Eigen3_DIR) - message(STATUS "Eigen3: found config at '${Eigen3_DIR}'.") - else() - message( - FATAL_ERROR - "EIGEN_DIR is not provided or provided folder doesn't exist (current value: '${EIGEN_DIR}'). " - "Also couldn't find Eigen3 as a package." - ) - endif() - link_libraries(Eigen3::Eigen) -endif() - +find_package(Eigen3 REQUIRED) +link_libraries(Eigen3::Eigen) include_directories(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} - ${EIGEN_DIR} ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} + ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ) diff --git a/cmake/FindEigen3.cmake b/cmake/FindEigen3.cmake new file mode 100644 index 0000000000..e886310e89 --- /dev/null +++ b/cmake/FindEigen3.cmake @@ -0,0 +1,27 @@ +# +# Input variables: +# - `EIGEN_DIR` +# If input variables are not specified, try to find Eigen3 config. +# Input variables could also be provided as environment variables. +# +# Output targets: +# - `Eigen3::Eigen` + +UNIFY_ENVVARS_AND_CACHE(EIGEN_DIR) + +if(EXISTS "${EIGEN_DIR}") + # Mimic Eigen3Config.cmake target. + add_library(Eigen3::Eigen INTERFACE IMPORTED) + target_include_directories(Eigen3::Eigen INTERFACE "${EIGEN_DIR}") +else() + find_package(Eigen3 CONFIG) + if(Eigen3_DIR) + message(STATUS "Eigen3: found config at '${Eigen3_DIR}'.") + else() + message( + FATAL_ERROR + "EIGEN_DIR is not provided or provided folder doesn't exist (current value: '${EIGEN_DIR}'). " + "Also couldn't find Eigen3 as a package." + ) + endif() +endif() diff --git a/win/run-cmake.bat b/win/run-cmake.bat index 9dfbbd6df3..68863fc847 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -110,6 +110,8 @@ set GMP_INCLUDE_DIR=%INSTALL_DIR%\mpir set GMP_LIBRARY_DIR=%INSTALL_DIR%\mpir set MPFR_INCLUDE_DIR=%INSTALL_DIR%\mpfr set MPFR_LIBRARY_DIR=%INSTALL_DIR%\mpfr +:: We don't install Eigen currently, +:: so there's no Eigen3config.cmake and therefore we provide path explicitly. set EIGEN_DIR=%INSTALL_DIR%\Eigen set USD_INCLUDE_DIR=%INSTALL_DIR%\usd\include set USD_LIBRARY_DIR=%INSTALL_DIR%\usd\lib From d3fcf39c76ca506608996007fc050731a64f3a77 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 21 Nov 2025 11:49:35 +0500 Subject: [PATCH 166/657] Windows build scripts - `ECHO_ON` env variable for debugging --- win/build-all.cmd | 2 +- win/build-deps.cmd | 2 +- win/build-ifcopenshell.bat | 2 +- win/build-type-cfg.cmd | 2 +- win/install-ifcopenshell.bat | 2 +- win/run-cmake.bat | 2 +- win/set-python-to-path.bat | 2 +- win/utils/cecho.cmd | 2 ++ win/vs-cfg.cmd | 2 +- 9 files changed, 10 insertions(+), 8 deletions(-) diff --git a/win/build-all.cmd b/win/build-all.cmd index 4f29f0edd3..28ff229907 100644 --- a/win/build-all.cmd +++ b/win/build-all.cmd @@ -23,7 +23,7 @@ :: Usage example for doing an optimized vs2015-x64 build with debug information and using IFC 4: :: > build-all.cmd vs2015-x64 RelWithDebInfo -DUSE_IFC4=1 -DENABLE_BUILD_OPTIMIZATIONS=1 -@echo off +@if not defined ECHO_ON ( echo off ) setlocal EnableDelayedExpansion diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 3a5555bebb..e8fc0924d7 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -24,7 +24,7 @@ :: Example usage (all arguments are optional): :: build-deps.cmd vs2022-x64 RelWithDebInfo Build -@echo off +@if not defined ECHO_ON ( echo off ) echo. for %%Q in ("%~dp0\.") DO set "batpath=%%~fQ" diff --git a/win/build-ifcopenshell.bat b/win/build-ifcopenshell.bat index 7f8233cb54..24d43e3a1a 100755 --- a/win/build-ifcopenshell.bat +++ b/win/build-ifcopenshell.bat @@ -21,7 +21,7 @@ :: a deduced generator will be used for %1 and BUILD_CFG_DEFAULT for %2 (both set in vs-cfg.cmd) :: Possible extra parameters are passed for the MSBuild call. -@echo off +@if not defined ECHO_ON ( echo off ) set PROJECT_NAME=IfcOpenShell echo. diff --git a/win/build-type-cfg.cmd b/win/build-type-cfg.cmd index acb75d64ad..773c3f300b 100644 --- a/win/build-type-cfg.cmd +++ b/win/build-type-cfg.cmd @@ -20,7 +20,7 @@ :: This script initializes various CMake build configuration type related variables. :: This batch file expects CMake build configuration type as %1. -@echo off +@if not defined ECHO_ON ( echo off ) :: Set up variables depending on the used build configuration type. set BUILD_CFG=%1 diff --git a/win/install-ifcopenshell.bat b/win/install-ifcopenshell.bat index 592ec85b89..77b89b2f4c 100755 --- a/win/install-ifcopenshell.bat +++ b/win/install-ifcopenshell.bat @@ -21,7 +21,7 @@ :: a deduced generator will be used for %1 and BUILD_CFG_DEFAULT for %2 (both set in vs-cfg.cmd) :: Possible extra parameters are passed for the MSBuild call. -@echo off +@if not defined ECHO_ON ( echo off ) set PROJECT_NAME=IfcOpenShell echo. diff --git a/win/run-cmake.bat b/win/run-cmake.bat index 68863fc847..7126cf9219 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -17,7 +17,7 @@ :: :: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -@echo off +@if not defined ECHO_ON ( echo off ) echo. set PROJECT_NAME=IfcOpenShell diff --git a/win/set-python-to-path.bat b/win/set-python-to-path.bat index 5c7ebe00bc..08e3f7f5e3 100755 --- a/win/set-python-to-path.bat +++ b/win/set-python-to-path.bat @@ -19,7 +19,7 @@ :: Pass x86 or x64 as %1, if not specified x64 assumed. -@echo off +@if not defined ECHO_ON ( echo off ) set TARGET_ARCH=%1 if "%TARGET_ARCH%"=="" set TARGET_ARCH=x64 if not exist "%~dp0BuildDepsCache-%TARGET_ARCH%.txt". ( diff --git a/win/utils/cecho.cmd b/win/utils/cecho.cmd index f0eb1b3749..97361c881a 100644 --- a/win/utils/cecho.cmd +++ b/win/utils/cecho.cmd @@ -1,3 +1,4 @@ +:: Don't check for `ECHO_ON` or it will get too verbose without any benefit. @echo off setlocal ENABLEDELAYEDEXPANSION @@ -38,5 +39,6 @@ if defined BGC ( echo|set /p="!STYLE!!TEXT!!ESC![0m" echo. +if defined ECHO_ON ( echo on ) endlocal exit /b 0 diff --git a/win/vs-cfg.cmd b/win/vs-cfg.cmd index b086d6db5a..794291792b 100644 --- a/win/vs-cfg.cmd +++ b/win/vs-cfg.cmd @@ -36,7 +36,7 @@ :: :: NOTE: The delayed environment variable expansion needs to be enabled before calling this. -@echo off +@if not defined ECHO_ON ( echo off ) set GENERATOR=%1 From 1b249b1013f00e5c933a03f517ce23b2a2c83f3c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 21 Nov 2025 12:41:46 +0500 Subject: [PATCH 167/657] build-deps - fix very very old bug with `GitCloneAndCheckoutRevision` not always checking out revision Since this if-block happens in parentheses, then all `%VAR%` are expanded at the start and then `%ERRORLEVEL%` and `%RET%` values have no relation to the actual result of `git clone`. So if user were (un)lucky, then `%RET%` would be not yet set to "0" (by the previous function call), then it would skip checking out revision. `GitCloneOrPullRepository` had similar issue, but it was never used anywhere. --- win/build-deps.cmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index e8fc0924d7..409a2f2f8e 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -836,7 +836,7 @@ if not exist "%~2". ( call cecho.cmd 0 13 "Cloning %DEPENDENCY_NAME% into %~2." pushd "%DEPS_DIR%" call git clone %1 %2 - set RET=%ERRORLEVEL% + set RET=!ERRORLEVEL! ) else ( call cecho.cmd 0 13 "%DEPENDENCY_NAME% already cloned. Pulling latest changes." git reset --hard @@ -855,8 +855,8 @@ if not exist "%~2". ( call cecho.cmd 0 13 "Cloning %DEPENDENCY_NAME% into %~2." pushd "%DEPS_DIR%" call git clone %1 %2 - set RET=%ERRORLEVEL% - if not "%RET%"=="0" exit /b %RET% + set RET=!ERRORLEVEL! + if not "!RET!"=="0" exit /b !RET! popd ) else ( call cecho.cmd 0 13 "%DEPENDENCY_NAME% already cloned." From 32496c40b3577aee05c41f277b031f642af9aa64 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 21 Nov 2025 13:24:55 +0500 Subject: [PATCH 168/657] build-deps - fix missing `popd` for mpfr dir leading to issues installing hdf5 #7390 --- win/build-deps.cmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 409a2f2f8e..8c3cec70e4 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -328,7 +328,7 @@ set DEPENDENCY_NAME=mpfr set DEPENDENCY_DIR=%DEPS_DIR%\mpfr call :GitCloneAndCheckoutRevision https://github.com/aothms/mpfr.git "%DEPENDENCY_DIR%" 2ebbe10fd029a480cf6e8a64c493afa9f3654251 IF NOT %ERRORLEVEL%==0 GOTO :Error -cd "%DEPENDENCY_DIR%" +pushd "%DEPENDENCY_DIR%" git reset --hard powershell -c "get-content %~dp0patches\mpfr.patch | %%{$_ -replace \"sdk\",\"%UCRTVersion%\"} | %%{$_ -replace \"fn\",\"lib_mpfr\"}" | git apply --unidiff-zero --ignore-whitespace IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -349,6 +349,7 @@ IF NOT EXIST lib\%VS_PLATFORM%\%DEBUG_OR_RELEASE%\mpfr.lib GOTO :Error IF NOT EXIST "%INSTALL_DIR%\mpfr". mkdir "%INSTALL_DIR%\mpfr" copy lib\%VS_PLATFORM%\%DEBUG_OR_RELEASE%\* "%INSTALL_DIR%\mpfr" IF NOT %ERRORLEVEL%==0 GOTO :Error +popd :HDF5 From a559b72e1802054d6eec2ec0f6c894f96f71c052 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 21 Nov 2025 13:28:49 +0500 Subject: [PATCH 169/657] build-deps - fix boost project cache reset targeting wrong path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Noticed by another "The system cannot find the path specified." in logs 😅 --- win/build-deps.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 8c3cec70e4..a95ad39b1d 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -424,7 +424,7 @@ set BOOST_LIBS=--with-system --with-regex --with-thread --with-program_options - :: NOTE Boost is fast to build with limited set of libraries so build it always. cd "%DEPENDENCY_DIR%" call cecho.cmd 0 13 "Building %DEPENDENCY_NAME% %BOOST_LIBS% Please be patient, this will take a while." -IF EXIST "%DEPENDENCY_DIR%\bin.v2\project-cache.jam" del "%DEPS_DIR%\boost\bin.v2\project-cache.jam" +IF EXIST "%DEPENDENCY_DIR%\bin.v2\project-cache.jam" del "%DEPENDENCY_DIR%\bin.v2\project-cache.jam" call .\b2 toolset=%BOOST_TOOLSET% runtime-link=shared address-model=%ARCH_BITS% --abbreviate-paths -j%IFCOS_NUM_BUILD_PROCS% ^ variant=%DEBUG_OR_RELEASE_LOWERCASE% %BOOST_WIN_API% %BOOST_LIBS% stage --stagedir=%DEPENDENCY_INSTALL_DIR% From 68b021b0e6d7e12dff4c27da3247abc6cd64fd36 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 21 Nov 2025 13:25:08 +0500 Subject: [PATCH 170/657] build-deps - fix hdf5 warnings in logs (similar to 890665b77) --- win/build-deps.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index a95ad39b1d..bc2ce09882 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -370,7 +370,7 @@ call :DownloadFile ^ IF NOT %ERRORLEVEL%==0 GOTO :Error call :ExtractArchive %HDF5_CMAKE_ZIP% "%DEPS_DIR%" "%DEPS_DIR%\hdf5-%HDF5_VERSION%" IF NOT %ERRORLEVEL%==0 GOTO :Error -ren "%DEPS_DIR%\hdf5-hdf5-%HDF5_VERSION%" "hdf5-%HDF5_VERSION%" +if exist "%DEPS_DIR%\hdf5-hdf5-%HDF5_VERSION%" ren "%DEPS_DIR%\hdf5-hdf5-%HDF5_VERSION%" "hdf5-%HDF5_VERSION%" pushd "%DEPENDENCY_DIR%" call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%HDF5_INSTALL_NAME%" ^ -DHDF5_ENABLE_Z_LIB_SUPPORT=OFF -DBUILD_TESTING=OFF ^ From 9eedbc6f72e0481fcfe64e4c4db40f355dd9cff1 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 21 Nov 2025 16:50:34 +0500 Subject: [PATCH 171/657] FindOpenCASCADE - fix linking issue with non-configs #7390 Unexpected consequence of #7365 - previously `OPENCASCADE_LIBRARIES` supposed to be a list of libraries filepaths, but after refactor `OpenCASCADE_LIBRARIES` end up being both list of library names and list of filepaths. And since link directories for the names was not provided, it failed to find the libraries to link. If using OpenCASCADEconfig it wouldn't fail as cmake would evaluate library names as imported target names. To fix it and simplify it even further, in case of manually provided paths, it now creates `OpenCASCADE_INTERFACE` target and stores it in `OpenCASCADE_LIBRARIES` - target will automatically have all the includes, library names and library dirs. --- cmake/CMakeLists.txt | 4 +-- cmake/FindOpenCASCADE.cmake | 47 ++++++++++++------------------ src/ifcgeom/kernels/CMakeLists.txt | 27 ++++++++++------- src/ifcmax/CMakeLists.txt | 4 +-- 4 files changed, 38 insertions(+), 44 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1cb01a814e..ed9487c6fc 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -489,7 +489,7 @@ endif(MSVC) find_package(Eigen3 REQUIRED) link_libraries(Eigen3::Eigen) -include_directories(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS} +include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} @@ -657,7 +657,7 @@ if(BUILD_IFCGEOM) find_package(Threads) endif() - target_link_libraries(IfcGeom IfcParse ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(IfcGeom IfcParse ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} ${OpenCASCADE_LIBRARIES}) endif(BUILD_IFCGEOM) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index 0202888278..e6e5cb4b96 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -5,9 +5,7 @@ # If input variables are not specified, try to find OpenCASCADE config. # Input variables could also be provided as environment variables. # -# Output variables: -# - `OCC_INCLUDE_DIR` -# - `OCC_LIBRARY_DIR` +# Output variables # - `OpenCASCADE_LIBRARIES` # @@ -24,6 +22,17 @@ if(OCC_LIBRARY_DIR) message(STATUS "Looking for Open CASCADE library files in: ${OCC_LIBRARY_DIR}") endif() + +if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) + # OCE is not supported for find_package, because it's using a different name (`oce`) + # and also has an odd directory structure (install/lib/oce-0.18/*.cmake). + # find_package creates variables: + # - `OpenCASCADE_INCLUDE_DIR` + # - `OpenCASCADE_LIBRARIES` + find_package(OpenCASCADE CONFIG REQUIRED) + return() +endif() + # No specific paths specified, try to find package. if(OCC_INCLUDE_DIR AND OCC_LIBRARY_DIR) message( @@ -45,23 +54,6 @@ if(OCC_INCLUDE_DIR AND OCC_LIBRARY_DIR) ) string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT}) set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}") -elseif(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) - # OCE is not supported for find_package, because it's using a different name (`oce`) - # and also has an odd directory structure (install/lib/oce-0.18/*.cmake). - find_package(OpenCASCADE CONFIG REQUIRED) - set(OCC_INCLUDE_DIR ${OpenCASCADE_INCLUDE_DIR}) - # Do not use OpenCASCADE_LIBRARY_DIR for OCC_LIBRARY_DIR - check target property explicitly. - # On Windows there is a case with OpenCASCADE_LIBRARY_DIR points to `lib` folder, - # while TKernel is actually in `libi`. - get_target_property(TKERNEL_LIB_PATH TKernel LOCATION) - get_filename_component(OCC_LIBRARY_DIR "${TKERNEL_LIB_PATH}" DIRECTORY) - set(OCC_VERSION_STRING ${OpenCASCADE_VERSION}) - message( - STATUS - "Found Open CASCADE package at '${OpenCASCADE_DIR}', " - "deducing from it OCC_INCLUDE_DIR: '${OCC_INCLUDE_DIR}' " - "and OCC_LIBRARY_DIR: '${OCC_LIBRARY_DIR}'." - ) else() message( FATAL_ERROR @@ -99,15 +91,6 @@ else() ) endif() -# Use the found libTKernel as a template for all other OCC libraries -# TODO Extract this into macro/function -foreach(lib ${OpenCASCADE_LIBRARIES}) - # Make sure we'll handle the Windows/MSVC debug postfix convention too. - string(REPLACE TKerneld "${lib}" lib_path "${libTKernel}") - string(REPLACE TKernel "${lib}" lib_path "${lib_path}") - list(APPEND OpenCASCADE_LIBRARIES "${lib_path}") -endforeach() - if(MSVC) add_definitions(-DHAVE_NO_DLL) add_debug_variants(OpenCASCADE_LIBRARIES "${OpenCASCADE_LIBRARIES}" d) @@ -147,3 +130,9 @@ if(OCCT_STATIC) set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES} "dl") endif() endif() + +add_library(OpenCASCADE_INTERFACE INTERFACE IMPORTED) +target_include_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_INCLUDE_DIR}") +target_link_libraries(OpenCASCADE_INTERFACE INTERFACE ${OpenCASCADE_LIBRARIES}) +target_link_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_LIBRARY_DIR}") +set(OpenCASCADE_LIBRARIES OpenCASCADE_INTERFACE) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 832ccb09af..729b4c9118 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -4,29 +4,34 @@ foreach(kernel ${GEOMETRY_KERNELS}) file(GLOB IFCGEOM_CPP_FILES ${kernel}/*.cpp) set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES}) - add_library(geometry_kernel_${kernel} OBJECT ${IFCGEOM_FILES}) - set_property(TARGET geometry_kernel_${kernel} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOM_EXPORTS") - list(APPEND kernel_libraries geometry_kernel_${kernel}) - target_link_libraries(geometry_kernel_${kernel} ${${KERNEL_UPPER}_LIBRARIES}) + set(KERNEL_TARGET "geometry_kernel_${kernel}") - install(TARGETS geometry_kernel_${kernel} + add_library(${KERNEL_TARGET} OBJECT ${IFCGEOM_FILES}) + set_property(TARGET ${KERNEL_TARGET} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOM_EXPORTS") + list(APPEND kernel_libraries ${KERNEL_TARGET}) + target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES}) + + install(TARGETS ${KERNEL_TARGET} ARCHIVE DESTINATION ${LIBDIR} LIBRARY DESTINATION ${LIBDIR} RUNTIME DESTINATION ${BINDIR} ) if(${kernel} STREQUAL "cgal") - set_property(TARGET geometry_kernel_${kernel} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") + set_property(TARGET ${KERNEL_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") - add_library(geometry_kernel_${kernel}_simple OBJECT ${IFCGEOM_FILES}) - set_target_properties(geometry_kernel_${kernel}_simple PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") - list(APPEND kernel_libraries geometry_kernel_${kernel}_simple) - target_link_libraries(geometry_kernel_${kernel}_simple ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) - install(TARGETS geometry_kernel_${kernel}_simple + set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple") + add_library(${KERNEL_TARGET_SIMPLE} OBJECT ${IFCGEOM_FILES}) + set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") + list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) + target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) + install(TARGETS ${KERNEL_TARGET_SIMPLE} ARCHIVE DESTINATION ${LIBDIR} LIBRARY DESTINATION ${LIBDIR} RUNTIME DESTINATION ${BINDIR} ) + elseif(${kernel} STREQUAL "opencascade") + target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) endif() install(FILES ${IFCGEOM_H_FILES} diff --git a/src/ifcmax/CMakeLists.txt b/src/ifcmax/CMakeLists.txt index 354ac34433..7b9657155a 100644 --- a/src/ifcmax/CMakeLists.txt +++ b/src/ifcmax/CMakeLists.txt @@ -35,12 +35,12 @@ if(HAS_MAX) message(STATUS "Building IFCMax library for Autodesk 3ds Max SDK ${max_year}") - include_directories(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS} ${ICU_INCLUDE_DIR} + include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} ${ICU_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${max_sdk}/include ) # All recent versions of 3ds Max (2014 and newer) are 64-bit only so assume lib/x64 directory - link_directories(${LINK_DIRECTORIES} ${IfcOpenShell_BINARY_DIR} ${OCC_LIBRARY_DIR} ${OPENCOLLADA_LIBRARY_DIR} + link_directories(${LINK_DIRECTORIES} ${IfcOpenShell_BINARY_DIR} ${OPENCOLLADA_LIBRARY_DIR} ${ICU_LIBRARY_DIR} ${Boost_LIBRARY_DIRS} ${max_sdk}/lib/x64/Release ) From 7e48d712a20d94b2e97f0cbeb2bd85fb46804bb4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 21 Nov 2025 17:20:23 +0500 Subject: [PATCH 172/657] cmake - fix error building with GLTF_SUPPORT=OFF (487a4f3, #7390) --- src/serializers/JsonSerializer.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/serializers/JsonSerializer.cpp b/src/serializers/JsonSerializer.cpp index ed3c4ac3d5..d14e4aff0e 100644 --- a/src/serializers/JsonSerializer.cpp +++ b/src/serializers/JsonSerializer.cpp @@ -1,3 +1,24 @@ +/******************************************************************************** +* * +* 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 . * +* * +********************************************************************************/ + +#ifdef WITH_GLTF + #include "JsonSerializer.h" #include @@ -40,3 +61,5 @@ JsonSerializerFactory::Factory& JsonSerializerFactory::implementations() { static JsonSerializerFactory::Factory impl; return impl; } + +#endif From 7c210721e6e4b1118a25a6e7768f7148555b15a1 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Sat, 22 Nov 2025 00:16:31 +0500 Subject: [PATCH 173/657] build-deps - add pushd/popd for consistency --- win/build-deps.cmd | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index bc2ce09882..4e9ac70aed 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -274,7 +274,7 @@ call :DownloadFile https://download.osgeo.org/proj/proj-9.2.1.zip "%DEPS_DIR%" p 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%" +pushd "%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 ^ @@ -286,6 +286,7 @@ 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 +popd :mpir @@ -299,7 +300,7 @@ set DEPENDENCY_NAME=mpir set DEPENDENCY_DIR=%DEPS_DIR%\mpir call :GitCloneAndCheckoutRevision https://github.com/BrianGladman/mpir.git "%DEPENDENCY_DIR%" IF NOT %ERRORLEVEL%==0 GOTO :Error -cd "%DEPENDENCY_DIR%" +pushd "%DEPENDENCY_DIR%" git reset --hard git clean -fdx REM There probably need to be quotes here around the filename @@ -316,6 +317,7 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error IF NOT EXIST "%INSTALL_DIR%\mpir". mkdir "%INSTALL_DIR%\mpir" copy ..\..\lib\%VS_PLATFORM%\%DEBUG_OR_RELEASE%\* "%INSTALL_DIR%\mpir" IF NOT %ERRORLEVEL%==0 GOTO :Error +popd :mpfr From 450ce689ba1b18d3d52f9ce5147053459a0413b3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Sat, 22 Nov 2025 01:02:36 +0500 Subject: [PATCH 174/657] build-deps - fix `set` resetting `ERRORLEVEL` in commands logged in 52d3bae54 #7390 --- win/build-deps.cmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 4e9ac70aed..b850c8b924 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -814,8 +814,8 @@ if not exist "%~3". ( ) else ( call cecho.cmd 0 13 "%DEPENDENCY_NAME% already downloaded. Skipping." ) -set LAST_ACTION=DownloadFile '%DEPENDENCY_NAME%'. set RET=%ERRORLEVEL% +set LAST_ACTION=DownloadFile '%DEPENDENCY_NAME%'. popd exit /b %RET% @@ -828,8 +828,9 @@ if not exist "%~3". ( ) else ( call cecho.cmd 0 13 "%DEPENDENCY_NAME% already extracted into %~3. Skipping." ) +set RET=%ERRORLEVEL% set LAST_ACTION=ExtractArchive '%DEPENDENCY_NAME%'. -exit /b %ERRORLEVEL% +exit /b %RET% :: GitCloneOrPullRepository - Clones or pulls (if repository already cloned) a Git repository :: Params: %1 gitUrl, %2 destDir From 07005a9d3b4fcb6c17ccfcfbb1331c5221792981 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Sat, 22 Nov 2025 00:58:33 +0500 Subject: [PATCH 175/657] build-deps - switch to freetype github archives for stability #7390 --- win/build-deps.cmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index b850c8b924..5c5b634d8b 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -484,12 +484,13 @@ IF EXIST "%INSTALL_DIR%\opencascade-%OCCT_VERSION%" ( :: OCCT has many dependencies but FreeType is the only mandatory set DEPENDENCY_NAME=FreeType set DEPENDENCY_DIR=%DEPS_DIR%\freetype-2.7.1 -set FREETYPE_ZIP=ft271.zip +set FREETYPE_ZIP=VER-2-7-1.zip cd "%DEPS_DIR%" -call :DownloadFile https://download-mirror.savannah.gnu.org/releases/freetype/ft271.zip "%DEPS_DIR%" %FREETYPE_ZIP% +call :DownloadFile https://github.com/freetype/freetype/archive/refs/tags/%FREETYPE_ZIP% "%DEPS_DIR%" %FREETYPE_ZIP% if not %ERRORLEVEL%==0 goto :Error call :ExtractArchive %FREETYPE_ZIP% "%DEPS_DIR%" "%DEPENDENCY_DIR%" if not %ERRORLEVEL%==0 goto :Error +if exist "%DEPS_DIR%\freetype-VER-2-7-1" ren "%DEPS_DIR%\freetype-VER-2-7-1" "freetype-2.7.1" cd "%DEPENDENCY_DIR%" :: NOTE FreeType is built as a static library by default call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\freetype" From 452d0f602338d6380240bad2843f7eae456d089b Mon Sep 17 00:00:00 2001 From: Gorgious Date: Fri, 21 Nov 2025 23:22:07 +0100 Subject: [PATCH 176/657] fix - handle float64 checksums from files saved in previous Blender versions Files saved in previous Blender versions stored position checksums as float64 (24 bytes for location, 72 bytes for rotation), but the current code only expected float32 format. This caused a shape mismatch error (6,) vs (3,) when comparing checksums during save operations. Added byte size detection in is_moved() methods to automatically handle both old float64 and new float32 checksum formats, ensuring backward compatibility with files from previous versions. Fixes ValueError when saving IFC files loaded from older Blender versions. --- .../bonsai/bim/module/drawing/decoration.py | 22 +++++++++++++++---- src/bonsai/bonsai/tool/ifc.py | 22 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 3860dcb58c..0ffc714ac9 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -1739,13 +1739,27 @@ class CutDecorator: self.cache_camera_matrix() return True # Let's be conservative obj = bpy.context.scene.camera - loc_check = np.frombuffer(eval(DecoratorData.camera_location_checksum), dtype=np.float32) - loc_real = np.array(obj.matrix_world.translation).flatten() + + # Handle both old float64 and new float32 checksums for version compatibility + loc_checksum_bytes = eval(DecoratorData.camera_location_checksum) + if len(loc_checksum_bytes) == 24: # Old format: 3 * 8 bytes (float64) + loc_check = np.frombuffer(loc_checksum_bytes, dtype=np.float64).astype(np.float32) + else: # New format: 3 * 4 bytes (float32) + loc_check = np.frombuffer(loc_checksum_bytes, dtype=np.float32) + + loc_real = np.array(obj.matrix_world.translation, dtype=np.float32).flatten() if not np.allclose(loc_check, loc_real, atol=1e-4): # 0.1 mm self.cache_camera_matrix() return True - rot_check = np.frombuffer(eval(DecoratorData.camera_rotation_checksum), dtype=np.float32).reshape(3, 3) - rot_real = np.array(obj.matrix_world.to_3x3()) + + # Handle both old float64 and new float32 checksums for version compatibility + rot_checksum_bytes = eval(DecoratorData.camera_rotation_checksum) + if len(rot_checksum_bytes) == 72: # Old format: 9 * 8 bytes (float64) + rot_check = np.frombuffer(rot_checksum_bytes, dtype=np.float64).astype(np.float32).reshape(3, 3) + else: # New format: 9 * 4 bytes (float32) + rot_check = np.frombuffer(rot_checksum_bytes, dtype=np.float32).reshape(3, 3) + + rot_real = np.array(obj.matrix_world.to_3x3(), dtype=np.float32) rot_dot = np.dot(rot_check, rot_real.T) angle_rad = np.arccos(np.clip((np.trace(rot_dot) - 1) / 2, -1, 1)) if angle_rad > 0.0017453292519943296: # 0.1 degrees diff --git a/src/bonsai/bonsai/tool/ifc.py b/src/bonsai/bonsai/tool/ifc.py index dfb2370272..9f1c84e6d1 100644 --- a/src/bonsai/bonsai/tool/ifc.py +++ b/src/bonsai/bonsai/tool/ifc.py @@ -110,12 +110,26 @@ class Ifc(bonsai.core.tool.Ifc): oprops = tool.Blender.get_object_bim_props(obj) if not oprops.location_checksum: return True # Let's be conservative - loc_check = np.frombuffer(eval(oprops.location_checksum), dtype=np.float32) - loc_real = np.array(obj.matrix_world.translation).flatten() + + # Handle both old float64 and new float32 checksums for version compatibility + loc_checksum_bytes = eval(oprops.location_checksum) + if len(loc_checksum_bytes) == 24: # Old format: 3 * 8 bytes (float64) + loc_check = np.frombuffer(loc_checksum_bytes, dtype=np.float64).astype(np.float32) + else: # New format: 3 * 4 bytes (float32) + loc_check = np.frombuffer(loc_checksum_bytes, dtype=np.float32) + + loc_real = np.array(obj.matrix_world.translation, dtype=np.float32).flatten() if not np.allclose(loc_check, loc_real, atol=1e-4): # 0.1 mm return True - rot_check = np.frombuffer(eval(oprops.rotation_checksum), dtype=np.float32).reshape(3, 3) - rot_real = np.array(obj.matrix_world.to_3x3()) + + # Handle both old float64 and new float32 checksums for version compatibility + rot_checksum_bytes = eval(oprops.rotation_checksum) + if len(rot_checksum_bytes) == 72: # Old format: 9 * 8 bytes (float64) + rot_check = np.frombuffer(rot_checksum_bytes, dtype=np.float64).astype(np.float32).reshape(3, 3) + else: # New format: 9 * 4 bytes (float32) + rot_check = np.frombuffer(rot_checksum_bytes, dtype=np.float32).reshape(3, 3) + + rot_real = np.array(obj.matrix_world.to_3x3(), dtype=np.float32) rot_dot = np.dot(rot_check, rot_real.T) angle_rad = np.arccos(np.clip((np.trace(rot_dot) - 1) / 2, -1, 1)) if angle_rad > 0.0017453292519943296: # 0.1 degrees From 65e8ca17d2fc63a3b4060ef5590624ec2de8a90d Mon Sep 17 00:00:00 2001 From: Gorgious Date: Fri, 21 Nov 2025 23:54:20 +0100 Subject: [PATCH 177/657] fix - apply object scale before using it to void an element #6378 --- src/bonsai/bonsai/bim/module/void/operator.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/void/operator.py b/src/bonsai/bonsai/bim/module/void/operator.py index b7281a1ea7..0d2136d1d7 100644 --- a/src/bonsai/bonsai/bim/module/void/operator.py +++ b/src/bonsai/bonsai/bim/module/void/operator.py @@ -102,6 +102,19 @@ class AddOpening(bpy.types.Operator, tool.Ifc.Operator): element_had_openings = tool.Geometry.has_openings(voided_element) body_context = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body") if not element2: + # Apply scale transformation for vanilla Blender objects before creating IFC representation + # This ensures the opening geometry matches the visual scale of the object + if tool.Geometry.is_scaled(obj2): + if obj2.data: + # Make mesh data single-user if it's shared + if obj2.data.users > 1: + obj2.data = obj2.data.copy() + context_override = {} + context_override["object"] = context_override["active_object"] = obj2 + context_override["selected_objects"] = context_override["selected_editable_objects"] = [obj2] + with bpy.context.temp_override(**context_override): + bpy.ops.object.transform_apply(location=False, rotation=False, scale=True) + element2 = bonsai.core.root.assign_class( tool.Ifc, tool.Collector, From 481676e51b65cb93e520b9f073123f22a06b212b Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sat, 22 Nov 2025 00:04:57 +0100 Subject: [PATCH 178/657] fix - recalculate normals for wall-mounted handrail railings Fixes inverted normals on SweptDiskSolid end caps by recalculating face normals after IFC geometry is loaded into Blender. Fixes #6483 --- src/bonsai/bonsai/bim/module/model/railing.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/model/railing.py b/src/bonsai/bonsai/bim/module/model/railing.py index 5e8d7a70dc..7939758c2b 100644 --- a/src/bonsai/bonsai/bim/module/model/railing.py +++ b/src/bonsai/bonsai/bim/module/model/railing.py @@ -106,6 +106,13 @@ def update_railing_modifier_ifc_data(context: bpy.types.Context) -> None: model_representation = ifcopenshell.api.geometry.add_railing_representation(ifc_file, **representation_data) tool.Model.replace_object_ifc_representation(body, obj, model_representation) + # recalculate normals to ensure correct shading + mesh = obj.data + if isinstance(mesh, bpy.types.Mesh): + bm = tool.Blender.get_bmesh_for_mesh(mesh, clean=False) + bmesh.ops.recalc_face_normals(bm, faces=bm.faces[:]) + tool.Blender.apply_bmesh(mesh, bm) + elif props.railing_type == "FRAMELESS_PANEL": tool.Model.add_body_representation(obj) From ca2058d56b3b494e0504d7956d1fce647f014870 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sat, 22 Nov 2025 00:30:01 +0100 Subject: [PATCH 179/657] Fix #4974 - remap parent relationships when duplicating objects --- src/bonsai/bonsai/tool/geometry.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index 83a9435665..27eed8c9fd 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -2096,6 +2096,7 @@ class Geometry(bonsai.core.tool.Geometry): decomposition_relationships = tool.Root.get_decomposition_relationships(objects_to_duplicate) connection_relationships = tool.Root.get_connection_relationships(objects_to_duplicate) old_to_new: dict[ifcopenshell.entity_instance, list[ifcopenshell.entity_instance]] = {} + old_obj_name_to_new_obj_name: dict[str, str] = {} for obj in objects_to_duplicate: element = tool.Ifc.get_entity(obj) @@ -2147,6 +2148,7 @@ class Geometry(bonsai.core.tool.Geometry): collection.objects.link(new_obj) obj.select_set(False) new_obj.select_set(True) + old_obj_name_to_new_obj_name[obj.name] = new_obj.name if not element: continue @@ -2179,6 +2181,19 @@ class Geometry(bonsai.core.tool.Geometry): if new.is_a("IfcRelSpaceBoundary"): tool.Boundary.decorate_boundary(new_obj) + # Remap Blender parent relationships for duplicated objects + for old_obj_name, new_obj_name in old_obj_name_to_new_obj_name.items(): + new_obj = bpy.data.objects.get(new_obj_name) + if new_obj and new_obj.parent and new_obj.parent.name in old_obj_name_to_new_obj_name: + # Store world matrix before reparenting to preserve transform + world_matrix = new_obj.matrix_world.copy() + new_parent_name = old_obj_name_to_new_obj_name[new_obj.parent.name] + new_parent = bpy.data.objects.get(new_parent_name) + if new_parent: + new_obj.parent = new_parent + # Restore world transform by setting matrix_world + new_obj.matrix_world = world_matrix + # Recreate aggregate relationship for old in old_to_new.keys(): if old.is_a("IfcElementAssembly"): From 584d37de509f9646f6f82f37223d4000f4c75229 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sat, 22 Nov 2025 01:16:39 +0100 Subject: [PATCH 180/657] Fix #6048 (and #7373 ?) Adding a distance with a unit for an IfcSpatialElement in the Spatial Decomposition list doesn't save value Support imperial units Spatial element empty is moved in the 3d viewport accordingly --- src/bonsai/bonsai/bim/module/spatial/prop.py | 34 ++- src/bonsai/bonsai/tool/spatial.py | 2 +- src/bonsai/bonsai/tool/unit.py | 269 +++++++++++++++++++ 3 files changed, 295 insertions(+), 10 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/spatial/prop.py b/src/bonsai/bonsai/bim/module/spatial/prop.py index 0b3652ca86..34d2866266 100644 --- a/src/bonsai/bonsai/bim/module/spatial/prop.py +++ b/src/bonsai/bonsai/bim/module/spatial/prop.py @@ -36,6 +36,7 @@ import bonsai.core.geometry import ifcopenshell import ifcopenshell.api.attribute import ifcopenshell.util.unit +from bonsai.tool.unit import parse_distance_string from typing import TYPE_CHECKING, Union, Literal @@ -48,18 +49,33 @@ def get_subelement_class( def update_elevation(self: "BIMContainer", context: bpy.types.Context) -> None: - try: - elevation = float(self.elevation) - if self.elevation != str(elevation): - self.elevation = str(elevation) - return - except: - elevation = 0 + # Try to parse the input string with unit support first + is_valid, parsed_elevation = parse_distance_string(self.elevation, use_project_unit=True) + + if is_valid: + elevation = parsed_elevation + else: + # Fall back to direct float conversion for backward compatibility + try: + elevation = float(self.elevation) + except Exception as e: + print(f"Elevation parsing failed for '{self.elevation}': {e}") + elevation = 0 + + formatted = tool.Unit.format_distance(elevation) + + # Only update the string if it's different from the formatted version + # This prevents infinite loops and normalizes the display + if self.elevation != formatted: + self.elevation = formatted + return # Return early to let the property update trigger this function again + + # Update the object's position in the 3D scene if ifc_definition_id := self.ifc_definition_id: entity = tool.Ifc.get().by_id(ifc_definition_id) if obj := tool.Ifc.get_object(entity): - unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - obj.matrix_world[2][3] = elevation * unit_scale + # elevation is already in meters, set it directly + obj.matrix_world[2][3] = elevation bonsai.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj) diff --git a/src/bonsai/bonsai/tool/spatial.py b/src/bonsai/bonsai/tool/spatial.py index 454d6b5b32..f21375cd63 100644 --- a/src/bonsai/bonsai/tool/spatial.py +++ b/src/bonsai/bonsai/tool/spatial.py @@ -496,7 +496,7 @@ class Spatial(bonsai.core.tool.Spatial): new.long_name = element.LongName or "" if not element.is_a("IfcProject"): elevation = ifcopenshell.util.placement.get_storey_elevation(element) - new["elevation"] = tool.Unit.format_value(elevation) + new["elevation"] = tool.Unit.format_distance(elevation) new.is_expanded = element.id() not in cls.contracted_containers new.level_index = level_index children = ifcopenshell.util.element.get_parts(element) diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index 81bc92bd94..d1be61e75f 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -24,15 +24,284 @@ import ifcopenshell import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool +from lark import Lark, Transformer from typing import Union, Literal, Any, TYPE_CHECKING, assert_never if TYPE_CHECKING: from bonsai.bim.module.unit.prop import BIMUnitProperties +def parse_distance_string(input_string: str, use_project_unit: bool = True) -> tuple[bool, float]: + """ + Parse a distance string with optional unit suffixes and convert to meters. + + This function parses distance inputs with units (e.g., "5m", "10ft", "3.5cm") + and converts them to meters (SI units) for use in IFC models. + + Supports: + - Metric units: mm, cm, dm, m + - Imperial units: ft/feet ('), in/inches (") + - Arithmetic expressions: +, -, *, / + - Fractions for imperial units (e.g., 1/2") + - Formula mode: values starting with "=" + + :param input_string: The string to parse (e.g., "5m", "10ft", "10'6\"", "3.5cm", "12in") + :param use_project_unit: If True, uses project unit scale; if False, uses Blender unit scale + :return: Tuple (is_valid, value_in_meters) where is_valid indicates successful parsing + and value_in_meters is the converted value in meters + + Examples: + >>> parse_distance_string("5m") + (True, 5.0) + >>> parse_distance_string("30cm") + (True, 0.3) + >>> parse_distance_string("10ft") + (True, 3.048) + >>> parse_distance_string("12in") + (True, 0.3048) + >>> parse_distance_string("5'6\"") + (True, 1.6764) + >>> parse_distance_string("invalid") + (False, 0.0) + """ + + grammar_imperial = """ + start: (FORMULA dim expr) | dim + dim: imperial + + FORMULA: "=" + + imperial: feet_inches | feet_only | inches_only | plain_number + feet_only: NUMBER (FEET_SYM | FEET_TEXT) + inches_only: (NUMBER | fraction) (INCH_SYM | INCH_TEXT) + feet_inches: NUMBER (FEET_SYM | FEET_TEXT) "-"? (NUMBER | fraction) (INCH_SYM | INCH_TEXT) + plain_number: NUMBER + fraction: NUMBER "/" NUMBER + + expr: (ADD | SUB) dim | (MUL | DIV) NUMBER + + NUMBER: /-?\\d+(?:\\.\\d+)?/ + FEET_SYM: "'" + FEET_TEXT: "ft" + INCH_SYM: "\\"" + INCH_TEXT: "in" + ADD: "+" + SUB: "-" + MUL: "*" + DIV: "/" + + %ignore " " + """ + + grammar_metric = """ + start: FORMULA? dim expr? + dim: metric + + FORMULA: "=" + + metric: NUMBER (MM | CM | DM | M | DEG)? + + expr: (ADD | SUB | MUL | DIV) dim + + NUMBER: /-?\\d+(?:\\.\\d+)?/ + MM: "mm" + CM: "cm" + DM: "dm" + M: "m" + DEG: "°" + ADD: "+" + SUB: "-" + MUL: "*" + DIV: "/" + + %ignore " " + """ + + class InputTransform(Transformer): + def NUMBER(self, n): + return float(n) + + def fraction(self, numbers): + return numbers[0] / numbers[1] + + def plain_number(self, args): + # A plain number in imperial context is assumed to be feet + feet = args[0] + # Convert feet to meters (1 foot = 0.3048 meters) + return feet * 0.3048 + + def feet_only(self, args): + # args[0] is the number of feet, args[1] is the unit token (we can ignore it) + feet = args[0] + # Convert feet to meters (1 foot = 0.3048 meters) + return feet * 0.3048 + + def inches_only(self, args): + # args[0] is the number (or fraction) of inches, args[1] is the unit token + inches = args[0] + # Convert inches to meters (1 inch = 0.0254 meters) + return inches * 0.0254 + + def feet_inches(self, args): + # Grammar: NUMBER (FEET_SYM | FEET_TEXT) "-"? (NUMBER | fraction) (INCH_SYM | INCH_TEXT) + # args will be: [feet_number, feet_unit_token, inches_number, inch_unit_token] + # or with optional dash: [feet_number, feet_unit_token, dash_token, inches_number, inch_unit_token] + # We need to extract just the numbers + feet = args[0] + # Find the inches value - it's the first number after the feet number + inches = None + for arg in args[1:]: + if isinstance(arg, (int, float)): + inches = arg + break + if inches is None: + inches = 0 + # Convert to meters + total_meters = (feet * 0.3048) + (inches * 0.0254) + return total_meters + + def imperial(self, args): + # Just return the value from the sub-rule (feet_only, inches_only, or feet_inches) + return args[0] + + def metric(self, args): + # args[0] is the NUMBER, args[1] if present is the unit + value = args[0] + if len(args) > 1: + unit = str(args[1]) + # Convert to meters based on unit + if unit == "mm": + value = value / 1000.0 + elif unit == "cm": + value = value / 100.0 + elif unit == "dm": + value = value / 10.0 + elif unit == "m": + value = value # already in meters + elif unit == "°": + value = value # degrees, pass through + # If no unit specified, assume it's already in the project's unit system + return value + + def dim(self, args): + return args[0] + + def expr(self, args): + op = args[0] + value = float(args[1]) + if op == "+": + return lambda x: x + value + elif op == "-": + return lambda x: x - value + elif op == "*": + return lambda x: x * value + elif op == "/": + return lambda x: x / value + + def FORMULA(self, args): + return args[0] + + def start(self, args): + i = 0 + if args[0] == "=": + i += 1 + else: + if len(args) > 1: + raise ValueError("Invalid input.") + dimension = args[i] + if len(args) > i + 1: + expression = args[i + 1] + return expression(dimension) + else: + return dimension + + try: + # Determine unit scale + if use_project_unit and tool.Ifc.get(): + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + else: + unit_scale = tool.Blender.get_unit_scale() + + # Try to parse with the project's default grammar first + if bpy.context.scene.unit_settings.system == "IMPERIAL": + primary_parser = Lark(grammar_imperial) + fallback_parser = Lark(grammar_metric) + else: + primary_parser = Lark(grammar_metric) + fallback_parser = Lark(grammar_imperial) + + # Try parsing with primary grammar + parse_tree = None + try: + parse_tree = primary_parser.parse(input_string) + print(f"Primary parser succeeded for '{input_string}'") + except Exception as e: + print(f"Primary parser failed for '{input_string}': {e}") + # If primary fails, try fallback grammar (allows metric in imperial projects and vice versa) + try: + parse_tree = fallback_parser.parse(input_string) + print(f"Fallback parser succeeded for '{input_string}'") + except Exception as e2: + print(f"Fallback parser failed for '{input_string}': {e2}") + pass + + if parse_tree is None: + print(f"No parse tree for '{input_string}'") + return False, 0.0 + + # Transform the parse tree to get the numeric result + transformer = InputTransform() + result = transformer.transform(parse_tree) + print(f"Parsed '{input_string}' -> {result} meters (unit_scale={unit_scale})") + result = round(result, 4) + + return True, result + except Exception as e: + print(f"Parse exception for '{input_string}': {e}") + return False, 0.0 + + class Unit(bonsai.core.tool.Unit): UNIT_TYPE = Literal["LENGTHUNIT", "AREAUNIT", "VOLUMEUNIT"] + @staticmethod + def format_distance(meters: float, use_imperial: bool = None) -> str: + """ + Format a distance value in meters to a string in the project's unit system. + + :param meters: The distance value in meters + :param use_imperial: If True, format as imperial; if False, format as metric; if None, auto-detect from scene + :return: Formatted string with units + """ + if use_imperial is None: + use_imperial = bpy.context.scene.unit_settings.system == "IMPERIAL" + + if use_imperial: + # Convert meters to feet + total_feet = meters / 0.3048 + feet = int(total_feet) + inches = (total_feet - feet) * 12 + + # If inches is very close to 0, just show feet + if abs(inches) < 0.01: + if feet == 0: + return "0'" + return f"{feet}'" + # If feet is 0, just show inches + elif feet == 0: + return f"{inches:.4g}\"" + # Show both feet and inches + else: + return f"{feet}'{inches:.4g}\"" + else: + # Use metric - choose appropriate unit + if abs(meters) >= 1.0: + return f"{meters:.4g}m" + elif abs(meters) >= 0.01: + return f"{meters * 100:.4g}cm" + else: + return f"{meters * 1000:.4g}mm" + @classmethod def get_unit_props(cls) -> BIMUnitProperties: return bpy.context.scene.BIMUnitProperties From 87283874a16563c948110ddf61d7d5380869f150 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Sat, 22 Nov 2025 08:34:26 +0100 Subject: [PATCH 181/657] Add simple examples for ifc5d import from csv --- src/ifc5d/Ex1 - BoQ without query.csv | 10 ++++++++++ src/ifc5d/Ex2 - SoR.csv | 7 +++++++ src/ifc5d/Ex3 - BoQ with query.csv | 10 ++++++++++ src/ifc5d/Ex4 - BoQ with description.csv | 10 ++++++++++ src/ifc5d/Ex5 - SoR_with_description.csv | 7 +++++++ src/ifc5d/Ex6 - BoQ with categories.csv | 10 ++++++++++ src/ifc5d/Ex7 - BoQ with Rates.csv | 10 ++++++++++ src/ifc5d/README.md | 9 ++++++++- 8 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/ifc5d/Ex1 - BoQ without query.csv create mode 100644 src/ifc5d/Ex2 - SoR.csv create mode 100644 src/ifc5d/Ex3 - BoQ with query.csv create mode 100644 src/ifc5d/Ex4 - BoQ with description.csv create mode 100644 src/ifc5d/Ex5 - SoR_with_description.csv create mode 100644 src/ifc5d/Ex6 - BoQ with categories.csv create mode 100644 src/ifc5d/Ex7 - BoQ with Rates.csv diff --git a/src/ifc5d/Ex1 - BoQ without query.csv b/src/ifc5d/Ex1 - BoQ without query.csv new file mode 100644 index 0000000000..85dc89019e --- /dev/null +++ b/src/ifc5d/Ex1 - BoQ without query.csv @@ -0,0 +1,10 @@ +Index,Identification,Name,Unit,Value,Quantity +1,E.01,Walls,m3,, +2,E.01.01,Ground floor walls,m3,100,42 +2,E.01.02,First floor walls,m3,200,35 +1,A.02,Paintings,m2,, +2,A.03,Paintings with water,m2,, +3,B.05,White paintings,m2,25,45 +3,B.06,Colored paintings,m2,32,33 +2,C-01,Paintings with machine,m2,17,133 +2,C-02,Decorated paintings,m2,40,8 diff --git a/src/ifc5d/Ex2 - SoR.csv b/src/ifc5d/Ex2 - SoR.csv new file mode 100644 index 0000000000..07615e4f7d --- /dev/null +++ b/src/ifc5d/Ex2 - SoR.csv @@ -0,0 +1,7 @@ +Index,Identification,Name,Unit,Value,Quantity +1,A,Group A,,, +2,A.02,Paintings,m2,20,1 +2,A.03,Paintings with water,m2,23,1 +1,C,Group C,,, +2,C-01,Paintings with machine,m2,32,1 +2,C-02,Decorated paintings,m2,40,2 diff --git a/src/ifc5d/Ex3 - BoQ with query.csv b/src/ifc5d/Ex3 - BoQ with query.csv new file mode 100644 index 0000000000..d96d1adcd8 --- /dev/null +++ b/src/ifc5d/Ex3 - BoQ with query.csv @@ -0,0 +1,10 @@ +Index,Identification,Name,Unit,Value,Quantity,Query,Property +1,E.01,Walls,m3,,,, +2,E.01.01,Ground floor walls,m3,100,,"IfcWall, location=""Ground Floor""",GrossVolume +2,E.01.02,First floor walls,m3,200,,"IfcWall, location=""First Floor""",GrossVolume +1,A.02,Paintings,m2,,,, +2,A.03,Paintings with water,m2,,,, +3,B.05,White paintings,m2,25,45,, +3,B.06,Colored paintings,m2,32,33,, +2,C-01,Paintings with machine,m2,17,133,, +2,C-02,Decorated paintings,m2,40,8,, diff --git a/src/ifc5d/Ex4 - BoQ with description.csv b/src/ifc5d/Ex4 - BoQ with description.csv new file mode 100644 index 0000000000..ce3d5350cc --- /dev/null +++ b/src/ifc5d/Ex4 - BoQ with description.csv @@ -0,0 +1,10 @@ +Index,Identification,Name,Unit,Value,Quantity,Description +1,E.01,Walls,m3,,, +2,E.01.01,Ground floor walls,m3,100,42,"Semi-solid blocks of plain-faced common brick, with an apparent density (excluding holes) of 800 kg/m³; minor drilling 45%; apparent thermal conductivity 0.21 W/mK; characteristic mechanical strength parallel to the holes greater than or equal to 10 N/mm2, perpendicular to the holes greater than or equal to 2N/mm2" +2,E.01.02,First floor walls,m3,200,35,"Semi-solid blocks of plain-faced common brick, with an apparent density (excluding holes) of 800 kg/m³; minor drilling 45%; apparent thermal conductivity 0.21 W/mK; characteristic mechanical strength parallel to the holes greater than or equal to 10 N/mm2, perpendicular to the holes greater than or equal to 2N/mm2" +1,A.02,Painting,m2,,,"Painting with washable water-based wall paint for indoor/outdoor. The price includes and compensates the costs for the supply of paint, any scaffolding up to a maximum height of 4 m from the support surface, the costs for the protection of furniture, fixed systems or the protection of floors, the cleaning of the surfaces to be treated through the use of rags or net purposes in order to remove residues that can be easily removed. The cost of occasional and partial grouting of surfaces, in order to eliminate any small scratches, including sanding of the grouted parts, is also to be considered included and compensated. For 2 coats with brush or roller." +2,A.03,Washable painting,m2,,,"Supply and installation of washable tempera paint for interiors and exteriors. The price includes and compensates for the costs of supplying the paint, any scaffolding up to a maximum height of 4 meters from the support surface, the costs of protecting furnishings, fixed installations, or floors, and cleaning the surfaces to be treated using rags or clean brushes to remove easily removable residues. On previously prepared plaster. Apply two coats with a brush or roller. (Tempera colors from the color chart)." +3,B.05,White paintings,m2,25,45, +3,B.06,Colored paintings,m2,32,33, +2,C-01,External painting,m2,17,133,"Painting with plastic coating. The price includes and compensates for the costs of supplying the paint, any scaffolding up to a maximum height of 4 meters from the support surface, the costs of protecting furnishings, fixed systems, or floors, and cleaning the surfaces to be treated using rags or clean brushes to remove easily removable residues. On already prepared plaster. For 2 coats (interior textured finish)." +2,C-02,Decorated paintings,m2,40,8, diff --git a/src/ifc5d/Ex5 - SoR_with_description.csv b/src/ifc5d/Ex5 - SoR_with_description.csv new file mode 100644 index 0000000000..0517abcbde --- /dev/null +++ b/src/ifc5d/Ex5 - SoR_with_description.csv @@ -0,0 +1,7 @@ +Index,Identification,Name,Unit,Value,Quantity,Description +1,A,Group A,,,, +2,A.02,Paintings,m2,20,1,Paint made by the best painter in the world +2,A.03,Paintings with water,m2,23,1, +1,C,Group C,,,, +2,C-01,Paintings with machine,m2,32,1,Best painting in the world painted with the best painted machine accordingly with ISO9001 +2,C-02,Decorated paintings,m2,40,2, diff --git a/src/ifc5d/Ex6 - BoQ with categories.csv b/src/ifc5d/Ex6 - BoQ with categories.csv new file mode 100644 index 0000000000..b87f708333 --- /dev/null +++ b/src/ifc5d/Ex6 - BoQ with categories.csv @@ -0,0 +1,10 @@ +Index,Identification,Name,Unit,Material,Labor,Quantity +1,E.01,Walls,m3,,, +2,E.01.01,Ground floor walls,m3,55,45,42 +2,E.01.02,First floor walls,m3,120,80,35 +1,A.02,Painting,m2,,, +2,A.03,Washable painting,m2,,, +3,B.05,White paintings,m2,,,45 +3,B.06,Colored paintings,m2,,,33 +2,C-01,External painting,m2,,,133 +2,C-02,Decorated paintings,m2,,,8 diff --git a/src/ifc5d/Ex7 - BoQ with Rates.csv b/src/ifc5d/Ex7 - BoQ with Rates.csv new file mode 100644 index 0000000000..c7875efd38 --- /dev/null +++ b/src/ifc5d/Ex7 - BoQ with Rates.csv @@ -0,0 +1,10 @@ +Index,Identification,Name,Unit,Value,Quantity,RateSchedule,RateID +1,E.01,Walls,m3,,,, +2,E.01.01,Ground floor walls,m3,100,42,, +2,E.01.02,First floor walls,m3,200,35,, +1,A.02,Paintings,m2,,,, +2,A.03,Paintings with water,m2,,,, +3,B.05,White paintings,m2,,45,Ex2 - SoR,A.03 +3,B.06,Colored paintings,m2,32,33,, +2,C-01,Paintings with machine,m2,17,133,, +2,C-02,Decorated paintings,m2,40,8,, diff --git a/src/ifc5d/README.md b/src/ifc5d/README.md index 63e133463e..ba37664a88 100644 --- a/src/ifc5d/README.md +++ b/src/ifc5d/README.md @@ -32,6 +32,13 @@ csv2ifc.execute() ``` See example files as a CSV file format reference: +- Ex1 - BoQ without query.csv (a simple Bill of Quantities) +- Ex2 - SoR.csv (a simple Schedule of Rates) +- Ex3 - BoQ with query.csv (a simple BoQ with the query function) +- Ex4 - BoQ with description.csv (a simple BoQ with description column) +- Ex5 - SoR_with_description.csv (a simple SoR with description column) +- Ex6 - BoQ with categories.csv (a simple BoQ with categories columns) +- Ex7 - BoQ with Rates.csv (a simple BoQ that connect to an existing SoR. It needs an already loaded SoR.) - `sample_cost_schedule_house_FR.csv` / `.ods` - `schedule.csv`, `rates.csv` (schedule of rates example) @@ -124,4 +131,4 @@ path = "directory/cost_schedule" writer = Ifc5DOdsWriter(file=file, output=path) writer.write() -``` \ No newline at end of file +``` From 27d0b04db5f55b88cc7a1030c529327d066a5b73 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Sat, 22 Nov 2025 08:50:50 +0100 Subject: [PATCH 182/657] black --- src/bonsai/bonsai/tool/unit.py | 2 +- src/ifcopenshell-python/docs/conf.py | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index d1be61e75f..e94f34996f 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -289,7 +289,7 @@ class Unit(bonsai.core.tool.Unit): return f"{feet}'" # If feet is 0, just show inches elif feet == 0: - return f"{inches:.4g}\"" + return f'{inches:.4g}"' # Show both feet and inches else: return f"{feet}'{inches:.4g}\"" diff --git a/src/ifcopenshell-python/docs/conf.py b/src/ifcopenshell-python/docs/conf.py index 6b81633689..dc15ece371 100644 --- a/src/ifcopenshell-python/docs/conf.py +++ b/src/ifcopenshell-python/docs/conf.py @@ -104,7 +104,12 @@ autoapi_dirs = [ # These are auto-generated based on the IFC schema, so exclude them # Temporarily ignore bsdd files until they are packaged properly in the wheel. -autoapi_ignore = ["*ifcopenshell/express/rules*", "*bsdd/bsdd_json.py", "*bsdd/type_hints.py", "*bsdd/yml_to_classes.py"] +autoapi_ignore = [ + "*ifcopenshell/express/rules*", + "*bsdd/bsdd_json.py", + "*bsdd/type_hints.py", + "*bsdd/yml_to_classes.py", +] # Custom autoapi templates to make it easier to read our docs autoapi_template_dir = "_autoapi_templates" From 1cdd44996b9e3d00e120efedd84e7f8af805773e Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 1 Sep 2025 09:47:41 +0200 Subject: [PATCH 183/657] Add classification system to the Object Information, Clasifiction References Subpanel --- .../bonsai/bim/module/classification/data.py | 11 ++++++++ .../bonsai/bim/module/classification/ui.py | 26 +++++++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/classification/data.py b/src/bonsai/bonsai/bim/module/classification/data.py index acc88af10a..c3a54aa372 100644 --- a/src/bonsai/bonsai/bim/module/classification/data.py +++ b/src/bonsai/bonsai/bim/module/classification/data.py @@ -104,6 +104,17 @@ class ReferencesData: if element: for reference in ifcopenshell.util.classification.get_references(element): data = reference.get_info() + + if reference.ReferencedSource: + if reference.ReferencedSource.is_a("IfcClassification"): + data["ClassificationSystemName"] = reference.ReferencedSource.Name + elif reference.ReferencedSource.is_a("IfcClassificationReference"): + current = reference.ReferencedSource + while current.ReferencedSource and current.ReferencedSource.is_a("IfcClassificationReference"): + current = current.ReferencedSource + if current.ReferencedSource and current.ReferencedSource.is_a("IfcClassification"): + data["ClassificationSystemName"] = current.ReferencedSource.Name + del data["ReferencedSource"] results.append(data) return results diff --git a/src/bonsai/bonsai/bim/module/classification/ui.py b/src/bonsai/bonsai/bim/module/classification/ui.py index 344c247af2..acd27803b2 100644 --- a/src/bonsai/bonsai/bim/module/classification/ui.py +++ b/src/bonsai/bonsai/bim/module/classification/ui.py @@ -252,18 +252,34 @@ class ReferenceUI: def draw_reference_ui(self, reference: dict[str, Any]) -> None: row = self.layout.row(align=True) + + split = row.split(factor=0.3) + col1 = split.column() + split = split.split(factor=0.3) + col2 = split.column() + split = split.split(factor=0.7) + col3 = split.column() + col4 = split.column() + + if reference.get("ClassificationSystemName"): + col1.label(text=reference["ClassificationSystemName"], icon="OUTLINER_COLLECTION") + else: + col1.label(text="") + if self.file.schema == "IFC2X3": name = reference["ItemReference"] or "No Identification" else: name = reference["Identification"] or "No Identification" - row.label(text=name, icon="ASSET_MANAGER") - row.label(text=reference["Name"] or "") + col2.label(text=name, icon="ASSET_MANAGER") + col3.label(text=reference["Name"] or "") + + button_row = col4.row(align=True) if reference["Location"]: - row.operator("bim.open_uri", icon="URL", text="").uri = reference["Location"] + button_row.operator("bim.open_uri", icon="URL", text="").uri = reference["Location"] if not self.props.active_reference_id: - op = row.operator("bim.enable_editing_classification_reference", text="", icon="GREASEPENCIL") + op = button_row.operator("bim.enable_editing_classification_reference", text="", icon="GREASEPENCIL") op.reference = reference["id"] - op = row.operator("bim.remove_classification_reference", text="", icon="X") + op = button_row.operator("bim.remove_classification_reference", text="", icon="X") op.reference = reference["id"] op.obj = self.obj op.obj_type = self.data.obj_type From a4743b5e0420231e3993b26ad92035f60ed19c2d Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 29 Sep 2025 17:26:41 +0200 Subject: [PATCH 184/657] refactor using row in uy and util.classification.get_classifiation(reference) --- .../bonsai/bim/module/classification/data.py | 12 +------ .../bonsai/bim/module/classification/ui.py | 33 +++++++++---------- 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/classification/data.py b/src/bonsai/bonsai/bim/module/classification/data.py index c3a54aa372..a1fa3a6d58 100644 --- a/src/bonsai/bonsai/bim/module/classification/data.py +++ b/src/bonsai/bonsai/bim/module/classification/data.py @@ -104,17 +104,7 @@ class ReferencesData: if element: for reference in ifcopenshell.util.classification.get_references(element): data = reference.get_info() - - if reference.ReferencedSource: - if reference.ReferencedSource.is_a("IfcClassification"): - data["ClassificationSystemName"] = reference.ReferencedSource.Name - elif reference.ReferencedSource.is_a("IfcClassificationReference"): - current = reference.ReferencedSource - while current.ReferencedSource and current.ReferencedSource.is_a("IfcClassificationReference"): - current = current.ReferencedSource - if current.ReferencedSource and current.ReferencedSource.is_a("IfcClassification"): - data["ClassificationSystemName"] = current.ReferencedSource.Name - + data["ifcClassificationReference"] = reference del data["ReferencedSource"] results.append(data) return results diff --git a/src/bonsai/bonsai/bim/module/classification/ui.py b/src/bonsai/bonsai/bim/module/classification/ui.py index acd27803b2..14223274f0 100644 --- a/src/bonsai/bonsai/bim/module/classification/ui.py +++ b/src/bonsai/bonsai/bim/module/classification/ui.py @@ -21,6 +21,8 @@ import bpy import bonsai.bim.helper import bonsai.tool as tool import bonsai.bim.module.classification.prop as classification_prop +import ifcopenshell.util.classification + from bpy.types import Panel, UIList from bonsai.bim.module.classification.data import ( ClassificationsData, @@ -253,33 +255,28 @@ class ReferenceUI: def draw_reference_ui(self, reference: dict[str, Any]) -> None: row = self.layout.row(align=True) - split = row.split(factor=0.3) - col1 = split.column() - split = split.split(factor=0.3) - col2 = split.column() - split = split.split(factor=0.7) - col3 = split.column() - col4 = split.column() - - if reference.get("ClassificationSystemName"): - col1.label(text=reference["ClassificationSystemName"], icon="OUTLINER_COLLECTION") - else: - col1.label(text="") + classification_entity = ifcopenshell.util.classification.get_classification( + reference["ifcClassificationReference"] + ) + classification_name = classification_entity.Name if classification_entity else "" + row.label(text=classification_name, icon="OUTLINER_COLLECTION") if self.file.schema == "IFC2X3": name = reference["ItemReference"] or "No Identification" else: name = reference["Identification"] or "No Identification" - col2.label(text=name, icon="ASSET_MANAGER") - col3.label(text=reference["Name"] or "") + row.label(text=name, icon="ASSET_MANAGER") - button_row = col4.row(align=True) + # Name + row.label(text=reference.get("Name") or "") + + # Buttons if reference["Location"]: - button_row.operator("bim.open_uri", icon="URL", text="").uri = reference["Location"] + row.operator("bim.open_uri", icon="URL", text="").uri = reference["Location"] if not self.props.active_reference_id: - op = button_row.operator("bim.enable_editing_classification_reference", text="", icon="GREASEPENCIL") + op = row.operator("bim.enable_editing_classification_reference", text="", icon="GREASEPENCIL") op.reference = reference["id"] - op = button_row.operator("bim.remove_classification_reference", text="", icon="X") + op = row.operator("bim.remove_classification_reference", text="", icon="X") op.reference = reference["id"] op.obj = self.obj op.obj_type = self.data.obj_type From c3c63370bacc47a63c44b74c616892064b257317 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 29 Sep 2025 17:42:20 +0200 Subject: [PATCH 185/657] sort rows black formatting --- src/bonsai/bonsai/bim/module/classification/ui.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/classification/ui.py b/src/bonsai/bonsai/bim/module/classification/ui.py index 14223274f0..abb915ef13 100644 --- a/src/bonsai/bonsai/bim/module/classification/ui.py +++ b/src/bonsai/bonsai/bim/module/classification/ui.py @@ -154,7 +154,15 @@ class ReferenceUI: row = self.layout.row(align=True) row.label(text="No References") - for reference in self.data.data["references"]: + def get_classification_name(reference): + classification_entity = ifcopenshell.util.classification.get_classification( + reference["ifcClassificationReference"] + ) + return classification_entity.Name if classification_entity else "" + + sorted_references = sorted(self.data.data["references"], key=get_classification_name) + + for reference in sorted_references: if self.props.active_reference_id == reference["id"]: self.draw_editable_ui() else: @@ -266,11 +274,7 @@ class ReferenceUI: else: name = reference["Identification"] or "No Identification" row.label(text=name, icon="ASSET_MANAGER") - - # Name row.label(text=reference.get("Name") or "") - - # Buttons if reference["Location"]: row.operator("bim.open_uri", icon="URL", text="").uri = reference["Location"] if not self.props.active_reference_id: From ffc538da8730eecf641442eaf1dc768a68f3b627 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 29 Sep 2025 17:45:45 +0200 Subject: [PATCH 186/657] cleanup consistent calling --- src/bonsai/bonsai/bim/module/classification/ui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/classification/ui.py b/src/bonsai/bonsai/bim/module/classification/ui.py index abb915ef13..51ef3dd303 100644 --- a/src/bonsai/bonsai/bim/module/classification/ui.py +++ b/src/bonsai/bonsai/bim/module/classification/ui.py @@ -274,7 +274,7 @@ class ReferenceUI: else: name = reference["Identification"] or "No Identification" row.label(text=name, icon="ASSET_MANAGER") - row.label(text=reference.get("Name") or "") + row.label(text=reference["Name"] or "") if reference["Location"]: row.operator("bim.open_uri", icon="URL", text="").uri = reference["Location"] if not self.props.active_reference_id: From 63921e3fd87fa09d1b1283bb1a0ab7ba5e22762b Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sat, 22 Nov 2025 13:32:19 +0100 Subject: [PATCH 187/657] Improve formatting for imperial units for the elevation of spatial elements elevation in the spatial decomposition panel (Re #7373) --- src/bonsai/bonsai/tool/unit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index e94f34996f..26387cfc33 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -292,7 +292,7 @@ class Unit(bonsai.core.tool.Unit): return f'{inches:.4g}"' # Show both feet and inches else: - return f"{feet}'{inches:.4g}\"" + return f"{feet}' - {inches:.4g}\"" else: # Use metric - choose appropriate unit if abs(meters) >= 1.0: From a77f1b9fd1c93b866cd02a46912a6810683143f2 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sat, 22 Nov 2025 15:28:51 +0100 Subject: [PATCH 188/657] Fix bug where one could setup negative lengths in the parametric door properties that whould throw an error when validating the geometry --- src/bonsai/bonsai/bim/module/model/prop.py | 68 +++++++++++++++++++--- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index fd5397fe36..083ad4ba39 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -892,13 +892,35 @@ class BIMDoorProperties(PropertyGroup): default="SINGLE_SWING_LEFT", update=update_door, ) - overall_height: bpy.props.FloatProperty(name="Overall Height", default=2.0, subtype="DISTANCE", update=update_door) - overall_width: bpy.props.FloatProperty(name="Overall Width", default=0.9, subtype="DISTANCE", update=update_door) + overall_height: bpy.props.FloatProperty( + name="Overall Height", + default=2.0, + min=0, + subtype="DISTANCE", + update=update_door, + ) + overall_width: bpy.props.FloatProperty( + name="Overall Width", + default=0.9, + min=0, + subtype="DISTANCE", + update=update_door, + ) # lining properties - lining_depth: bpy.props.FloatProperty(name="Lining Depth", default=0.050, subtype="DISTANCE", update=update_door) + lining_depth: bpy.props.FloatProperty( + name="Lining Depth", + default=0.050, + min=0, + subtype="DISTANCE", + update=update_door, + ) lining_thickness: bpy.props.FloatProperty( - name="Lining Thickness", default=0.050, subtype="DISTANCE", update=update_door + name="Lining Thickness", + default=0.050, + min=0, + subtype="DISTANCE", + update=update_door, ) lining_offset: bpy.props.FloatProperty( name="Lining Offset", @@ -920,6 +942,7 @@ class BIMDoorProperties(PropertyGroup): name="Transom Thickness", description="Set values > 0 to add a transom.\n" "`0.050 mm` is good as default value", default=0.000, + min=0, subtype="DISTANCE", update=update_door, ) @@ -927,6 +950,7 @@ class BIMDoorProperties(PropertyGroup): name="Transom Offset", description="Distance from the bottom door opening to the beginning of the transom (unlike windows)", default=1.525, + min=0, subtype="DISTANCE", update=update_door, ) @@ -935,20 +959,32 @@ class BIMDoorProperties(PropertyGroup): name="Casing Thickness", description="Set values > 0 and LiningOffset = 0 to add a casing.", default=0.075, + min=0, + subtype="DISTANCE", + update=update_door, + ) + casing_depth: bpy.props.FloatProperty( + name="Casing Depth", + default=0.005, + min=0, subtype="DISTANCE", update=update_door, ) - casing_depth: bpy.props.FloatProperty(name="Casing Depth", default=0.005, subtype="DISTANCE", update=update_door) threshold_thickness: bpy.props.FloatProperty( name="Threshold Thickness", description="Set values > 0 to add a threshold.", default=0.025, + min=0, subtype="DISTANCE", update=update_door, ) threshold_depth: bpy.props.FloatProperty( - name="Threshold Depth", default=0.1, subtype="DISTANCE", update=update_door + name="Threshold Depth", + default=0.1, + min=0, + subtype="DISTANCE", + update=update_door, ) threshold_offset: bpy.props.FloatProperty( name="Threshold Offset", @@ -959,7 +995,13 @@ class BIMDoorProperties(PropertyGroup): ) # panel properties - panel_depth: bpy.props.FloatProperty(name="Panel Depth", default=0.035, subtype="DISTANCE", update=update_door) + panel_depth: bpy.props.FloatProperty( + name="Panel Depth", + default=0.035, + min=0, + subtype="DISTANCE", + update=update_door, + ) panel_width_ratio: bpy.props.FloatProperty( name="Panel Width Ratio", description="Width of this panel, given as ratio " "relative to the total clear opening width of the door", @@ -969,10 +1011,18 @@ class BIMDoorProperties(PropertyGroup): update=update_door, ) frame_thickness: bpy.props.FloatProperty( - name="Window Frame Thickness", default=0.035, subtype="DISTANCE", update=update_door + name="Window Frame Thickness", + default=0.035, + min=0, + subtype="DISTANCE", + update=update_door, ) frame_depth: bpy.props.FloatProperty( - name="Window Frame Depth", default=0.035, subtype="DISTANCE", update=update_door + name="Window Frame Depth", + default=0.035, + min=0, + subtype="DISTANCE", + update=update_door, ) # Material properties From 9c39ac0a489658dde27e13293246d3d1913097b9 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sat, 22 Nov 2025 18:12:50 +0100 Subject: [PATCH 189/657] You can now edit default parameters when generating a new parametric geometry for Door, Window, Railing, Roof and Stair types. UI is in the addon preferences. --- src/bonsai/bonsai/bim/__init__.py | 37 ++- src/bonsai/bonsai/bim/module/model/door.py | 9 +- src/bonsai/bonsai/bim/module/model/prop.py | 35 +++ src/bonsai/bonsai/bim/module/model/railing.py | 2 + src/bonsai/bonsai/bim/module/model/roof.py | 2 + src/bonsai/bonsai/bim/module/model/stair.py | 2 + src/bonsai/bonsai/bim/module/model/ui.py | 220 ++++++++++-------- src/bonsai/bonsai/bim/module/model/window.py | 5 + src/bonsai/bonsai/bim/ui.py | 67 ++++++ 9 files changed, 277 insertions(+), 102 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 79fc5fdd54..68bb5773c5 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -148,7 +148,7 @@ classes = [ ui.BIM_UL_clipping_plane, ui.BIM_UL_generic, ui.DocPreferences, - ui.BIM_ADDON_preferences, + # ui.DefaultParameters and ui.BIM_ADDON_preferences are registered separately after modules (see late_classes below) # Tabs panel ui.BIM_PT_tabs, # Project overview @@ -225,14 +225,33 @@ def on_register(scene): is_registering = False -def register(): - for cls in classes: +# Classes that need to be registered after modules (due to cross-module dependencies) +late_classes = ( + ui.DefaultParameters, # Register before BIM_ADDON_preferences + ui.BIM_ADDON_preferences, +) + + +def register_classes(classes_to_register): + for cls in classes_to_register: # Prevent crashes in Blender 4.4.0, see #6420. if issubclass(cls, (ImportHelper, ExportHelper)): assert getattr(cls, "bl_description", "") or cls.__doc__, cls bpy.utils.register_class(cls) + +def unregister_classes(classes_to_unregister): + for cls in reversed(classes_to_unregister): + if getattr(cls, "is_registered", None) is None: + bpy.utils.unregister_class(cls) + elif cls.is_registered: + bpy.utils.unregister_class(cls) + + +def register(): + register_classes(classes) + bpy.app.handlers.depsgraph_update_post.append(on_register) bpy.app.handlers.undo_post.append(handler.undo_post) bpy.app.handlers.redo_post.append(handler.redo_post) @@ -256,6 +275,9 @@ def register(): for mod in modules.values(): mod.register() + # Delay registering classes that depend on module classes + register_classes(late_classes) + wm = bpy.context.window_manager if wm.keyconfigs.addon: km = wm.keyconfigs.addon.keymaps.new(name="Window", space_type="EMPTY") @@ -287,11 +309,7 @@ def unregister(): bpy.utils.previews.remove(icons) - for cls in reversed(classes): - if getattr(cls, "is_registered", None) is None: - bpy.utils.unregister_class(cls) - elif cls.is_registered: - bpy.utils.unregister_class(cls) + unregister_classes(classes) bpy.app.handlers.load_post.remove(handler.load_post) bpy.app.handlers.load_post.remove(handler.loadIfcStore) @@ -306,6 +324,9 @@ def unregister(): bpy.types.UI_MT_button_context_menu.remove(ui.draw_custom_context_menu) bpy.types.STATUSBAR_HT_header.remove(ui.draw_statusbar) + # Unregister late classes before modules + unregister_classes(late_classes) + for mod in reversed(list(modules.values())): mod.unregister() diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index abd96f7319..d73a16deff 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -291,6 +291,8 @@ def update_door_modifier_bmesh(context: bpy.types.Context) -> None: obj = context.active_object assert obj props = tool.Model.get_door_props(obj) + if not props.is_editing: + return overall_width = props.overall_width overall_height = props.overall_height @@ -408,7 +410,10 @@ def update_door_modifier_bmesh(context: bpy.types.Context) -> None: if door_swing_type == "LEFT": bm_mirror( - bm, door_handle_verts, mirror_axes=V_(1, 0, 0), mirror_point=panel_position + V_(panel_size.x / 2, 0, 0) + bm, + door_handle_verts, + mirror_axes=V_(1, 0, 0), + mirror_point=panel_position + V_(panel_size.x / 2, 0, 0), ) door_handle_mirrored_verts = bm_mirror( @@ -528,6 +533,8 @@ class AddDoor(bpy.types.Operator, tool.Ifc.Operator): assert element props = tool.Model.get_door_props(obj) + tool.Blender.get_addon_preferences().default_parameters.door.copy_to(props) + door_data = props.get_general_kwargs(convert_to_project_units=True) lining_props = props.get_lining_kwargs(convert_to_project_units=True) panel_props = props.get_panel_kwargs(convert_to_project_units=True) diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 083ad4ba39..dc9285114e 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -645,6 +645,15 @@ class BIMStairProperties(PropertyGroup): for prop_name in kwargs: setattr(self, prop_name, kwargs[prop_name]) + def copy_to(self, target_props: "BIMStairProperties") -> None: + """Copy preset values to target stair properties.""" + target_props.custom_tread_lock = self.custom_tread_lock + for prop_name, prop_value in self.get_props_kwargs().items(): + # Skip custom_first_last_tread_run if it contains None values (when lock is enabled) + if prop_name == "custom_first_last_tread_run" and None in prop_value: + continue + setattr(target_props, prop_name, prop_value) + class BIMSverchokProperties(PropertyGroup): node_group: bpy.props.PointerProperty(name="Node Group", type=NodeTree) @@ -863,6 +872,14 @@ class BIMWindowProperties(PropertyGroup): for prop_name in kwargs: setattr(self, prop_name, kwargs[prop_name]) + def copy_to(self, target_props: "BIMWindowProperties") -> None: + """Copy preset values to target window properties, excluding materials.""" + exclude_props = {"lining_material", "framing_material", "glazing_material"} + for kwargs_dict in (self.get_general_kwargs(), self.get_lining_kwargs(), self.get_panel_kwargs()): + for prop_name, prop_value in kwargs_dict.items(): + if prop_name not in exclude_props: + setattr(target_props, prop_name, prop_value) + DoorType = Literal[ "SINGLE_SWING_LEFT", @@ -1130,6 +1147,14 @@ class BIMDoorProperties(PropertyGroup): for prop_name in kwargs: setattr(self, prop_name, kwargs[prop_name]) + def copy_to(self, target_props: "BIMDoorProperties") -> None: + """Copy properties to target door properties, excluding materials.""" + exclude_props = {"lining_material", "framing_material", "glazing_material"} + for kwargs_dict in (self.get_general_kwargs(), self.get_lining_kwargs(), self.get_panel_kwargs()): + for prop_name, prop_value in kwargs_dict.items(): + if prop_name not in exclude_props: + setattr(target_props, prop_name, prop_value) + RailingType = Literal["FRAMELESS_PANEL", "WALL_MOUNTED_HANDRAIL"] CapType = Literal["TO_END_POST_AND_FLOOR", "TO_END_POST", "TO_FLOOR", "TO_WALL", "180", "NONE"] @@ -1229,6 +1254,11 @@ class BIMRailingProperties(PropertyGroup): for prop_name in kwargs: setattr(self, prop_name, kwargs[prop_name]) + def copy_to(self, target_props: "BIMRailingProperties") -> None: + """Copy preset values to target railing properties.""" + for prop_name, prop_value in self.get_general_kwargs().items(): + setattr(target_props, prop_name, prop_value) + def to_angle(percentage: float) -> float: return math.atan(percentage / 100) @@ -1331,6 +1361,11 @@ class BIMRoofProperties(PropertyGroup): for prop_name in kwargs: setattr(self, prop_name, kwargs[prop_name]) + def copy_to(self, target_props: "BIMRoofProperties") -> None: + """Copy preset values to target roof properties.""" + for prop_name, prop_value in self.get_general_kwargs().items(): + setattr(target_props, prop_name, prop_value) + class SnapMousePoint(PropertyGroup): x: bpy.props.FloatProperty(name="X") diff --git a/src/bonsai/bonsai/bim/module/model/railing.py b/src/bonsai/bonsai/bim/module/model/railing.py index 7939758c2b..4f6fc348f0 100644 --- a/src/bonsai/bonsai/bim/module/model/railing.py +++ b/src/bonsai/bonsai/bim/module/model/railing.py @@ -342,6 +342,8 @@ class AddRailing(bpy.types.Operator, tool.Ifc.Operator): props = tool.Model.get_railing_props(obj) si_conversion = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + tool.Blender.get_addon_preferences().default_parameters.railing.copy_to(props) + railing_data = props.get_general_kwargs(convert_to_project_units=True) path_data = get_path_data(obj) diff --git a/src/bonsai/bonsai/bim/module/model/roof.py b/src/bonsai/bonsai/bim/module/model/roof.py index dfcf4ebbf1..daf41b86dd 100644 --- a/src/bonsai/bonsai/bim/module/model/roof.py +++ b/src/bonsai/bonsai/bim/module/model/roof.py @@ -570,6 +570,8 @@ class AddRoof(bpy.types.Operator, tool.Ifc.Operator): props = tool.Model.get_roof_props(obj) si_conversion = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + tool.Blender.get_addon_preferences().default_parameters.roof.copy_to(props) + # rejecting original roof shape to be safe # taking into account only it's bounding box dimensions if obj.dimensions.x == 0 or obj.dimensions.y == 0: diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index b359153f20..38480089e3 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -188,6 +188,8 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): props = tool.Model.get_stair_props(obj) ifc_file = tool.Ifc.get() + tool.Blender.get_addon_preferences().default_parameters.stair.copy_to(props) + # Use the special method that includes custom_tread_lock for IFC storage stair_data = props.get_props_kwargs_for_ifc_export(convert_to_project_units=True) pset = tool.Pset.get_element_pset(element, "BBIM_Stair") diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index 535d6f0ad3..5d89e7bfee 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -305,48 +305,9 @@ class BIM_PT_stair(bpy.types.Panel): row.operator("bim.finish_editing_stair", icon="CHECKMARK", text="Finish Editing") row.operator("bim.cancel_editing_stair", icon="CANCEL", text="") row = self.layout.row(align=True) - for prop_name in props.get_props_kwargs(): - # Skip custom_tread_lock as it's handled with custom_first_last_tread_run - if prop_name == "custom_tread_lock": - continue - prop_value = getattr(props, prop_name) + draw_stair_properties(self.layout, props) - # Special handling for custom_first_last_tread_run - if prop_name == "custom_first_last_tread_run": - # Draw the lock toggle - row_lock = self.layout.row(align=True) - lock_text = ( - "Lock First/Last Treads" if not props.custom_tread_lock else "Unlock First/Last Treads" - ) - row_lock.prop( - props, - "custom_tread_lock", - text=lock_text, - icon="LOCKED" if props.custom_tread_lock else "UNLOCKED", - ) - - # Only show the custom values input if unlocked - if not props.custom_tread_lock: - 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="") - elif isinstance(prop_value, Iterable) and not isinstance(prop_value, str): - prop_readable_name = props.bl_rna.properties[prop_name].name - self.layout.label(text=f"{prop_readable_name}:") - self.layout.prop(props, prop_name, text="") - else: - self.layout.prop(props, prop_name) - - if prop_name == "height": # Weak but we just want to insert this inside props drawing - row_length = self.layout.row(align=True) - row_length.prop(props, "total_length_target") - row_length.prop( - props, - "total_length_lock", - text="", - icon="LOCKED" if props.total_length_lock else "UNLOCKED", - ) regenerate_stair_mesh(obj) else: calculated_params = StairData.data["calculated_params"] @@ -440,39 +401,11 @@ class BIM_PT_window(bpy.types.Panel): row.label(text="Window parameters", icon="OUTLINER_OB_LATTICE") if props.is_editing: - number_of_panels, panels_data = props.window_types_panels[props.window_type] row = self.layout.row(align=True) row.operator("bim.finish_editing_window", icon="CHECKMARK", text="Finish Editing") row.operator("bim.cancel_editing_window", icon="CANCEL", text="") - general_props = props.get_general_kwargs() - for prop in general_props: - self.layout.prop(props, prop) - - lining_props = props.get_lining_kwargs() - self.layout.label(text="Lining properties") - for prop in lining_props: - self.layout.prop(props, prop) - - panel_props = props.get_panel_kwargs() - self.layout.label(text="Panel properties") - - panel_box = self.layout.box() - row = panel_box.row() - cols = [row.column(align=True) for i in range(number_of_panels + 1)] - - cols[0].label(text="") - - for panel_i in range(number_of_panels): - r = cols[panel_i + 1].row() - r.alignment = "CENTER" - r.label(text=f"#{panel_i}") - r = cols[panel_i + 1].row() - - for prop in panel_props: - cols[0].label(text=f"{props.bl_rna.properties[prop].name}") - for panel_i in range(number_of_panels): - cols[panel_i + 1].prop(props, prop, index=panel_i, text="") + draw_window_properties(self.layout, props) self.layout.use_property_split = True self.layout.label(text="Material Properties") @@ -560,19 +493,7 @@ class BIM_PT_door(bpy.types.Panel): row.operator("bim.finish_editing_door", icon="CHECKMARK", text="Finish Editing") row.operator("bim.cancel_editing_door", icon="CANCEL", text="") - general_props = props.get_general_kwargs() - for prop in general_props: - self.layout.prop(props, prop) - - lining_props = props.get_lining_kwargs() - self.layout.label(text="Lining Properties") - for prop in lining_props: - self.layout.prop(props, prop) - - panel_props = props.get_panel_kwargs() - self.layout.label(text="Panel Properties") - for prop in panel_props: - self.layout.prop(props, prop) + draw_door_properties(self.layout, props) self.layout.use_property_split = True self.layout.label(text="Material Properties") @@ -643,14 +564,7 @@ class BIM_PT_railing(bpy.types.Panel): row.operator("bim.finish_editing_railing", icon="CHECKMARK", text="Finish Editing") row.operator("bim.cancel_editing_railing", icon="CANCEL", text="") - general_props = props.get_general_kwargs() - for prop in general_props: - if prop == "support_spacing" and props.use_manual_supports: - row = self.layout.row() - row.prop(props, prop) - row.active = False - continue - self.layout.prop(props, prop) + draw_railing_properties(self.layout, props) update_railing_modifier_bmesh(context) @@ -708,9 +622,7 @@ class BIM_PT_roof(bpy.types.Panel): row.operator("bim.finish_editing_roof", icon="CHECKMARK", text="Finish Editing") row.operator("bim.cancel_editing_roof", icon="CANCEL", text="") - general_props = props.get_general_kwargs() - for prop in general_props: - self.layout.prop(props, prop) + draw_roof_properties(self.layout, props) update_roof_modifier_bmesh(obj) elif props.is_editing_path: @@ -776,6 +688,128 @@ class BIM_PT_external_parametric_geometry(bpy.types.Panel): row.prop(input, "default_value", text=input.name) +def draw_door_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: + """Draw door properties UI (shared between properties panel and preferences).""" + # General properties + general_props = props.get_general_kwargs() + for prop in general_props: + layout.prop(props, prop) + + # Lining properties + layout.label(text="Lining Properties") + lining_props = props.get_lining_kwargs() + for prop in lining_props: + layout.prop(props, prop) + + # Panel properties + layout.label(text="Panel Properties") + panel_props = props.get_panel_kwargs() + for prop in panel_props: + layout.prop(props, prop) + + +def draw_window_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: + """Draw window properties UI (shared between properties panel and preferences).""" + number_of_panels, panels_data = props.window_types_panels[props.window_type] + + # General and lining properties + general_props = props.get_general_kwargs() + for prop in general_props: + layout.prop(props, prop) + + layout.label(text="Lining Properties") + lining_props = props.get_lining_kwargs() + for prop in lining_props: + layout.prop(props, prop) + + # Panel properties (special layout for multiple panels) + panel_props = props.get_panel_kwargs() + layout.label(text="Panel Properties") + + panel_box = layout.box() + row = panel_box.row() + cols = [row.column(align=True) for i in range(number_of_panels + 1)] + + cols[0].label(text="") + + for panel_i in range(number_of_panels): + r = cols[panel_i + 1].row() + r.alignment = "CENTER" + r.label(text=f"#{panel_i}") + r = cols[panel_i + 1].row() + + for prop in panel_props: + cols[0].label(text=f"{props.bl_rna.properties[prop].name}") + for panel_i in range(number_of_panels): + cols[panel_i + 1].prop(props, prop, index=panel_i, text="") + + +def draw_railing_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: + """Draw railing properties UI (shared between properties panel and preferences).""" + general_props = props.get_general_kwargs() + for prop in general_props: + if prop == "support_spacing" and props.use_manual_supports: + row = layout.row() + row.prop(props, prop) + row.active = False + continue + layout.prop(props, prop) + + +def draw_roof_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: + """Draw roof properties UI (shared between properties panel and preferences).""" + # General properties + general_props = props.get_general_kwargs() + for prop in general_props: + layout.prop(props, prop) + + +def draw_stair_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: + """Draw stair properties UI (shared between properties panel and preferences).""" + for prop_name in props.get_props_kwargs(): + # Skip custom_tread_lock as it's handled with custom_first_last_tread_run + if prop_name == "custom_tread_lock": + continue + + prop_value = getattr(props, prop_name) + + # Special handling for custom_first_last_tread_run + if prop_name == "custom_first_last_tread_run": + # Draw the lock toggle + row_lock = layout.row(align=True) + lock_text = ( + "Lock First/Last Treads" if not props.custom_tread_lock else "Unlock First/Last Treads" + ) + row_lock.prop( + props, + "custom_tread_lock", + text=lock_text, + icon="LOCKED" if props.custom_tread_lock else "UNLOCKED", + ) + + # Only show the custom values input if unlocked + if not props.custom_tread_lock: + prop_readable_name = props.bl_rna.properties[prop_name].name + layout.label(text=f"{prop_readable_name}:") + layout.prop(props, prop_name, text="") + elif isinstance(prop_value, Iterable) and not isinstance(prop_value, str): + prop_readable_name = props.bl_rna.properties[prop_name].name + layout.label(text=f"{prop_readable_name}:") + layout.prop(props, prop_name, text="") + else: + layout.prop(props, prop_name) + + if prop_name == "height": # Weak but we just want to insert this inside props drawing + row_length = layout.row(align=True) + row_length.prop(props, "total_length_target") + row_length.prop( + props, + "total_length_lock", + text="", + icon="LOCKED" if props.total_length_lock else "UNLOCKED", + ) + + def add_menu(self: bpy.types.Menu, context: bpy.types.Context) -> None: self.layout.operator_context = "INVOKE_REGION_WIN" self.layout.operator("bim.add_element", icon_value=bonsai.bim.icons["IFC"].icon_id, text="IFC Element") diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index 1aebc8cd0b..c166ff7d54 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -258,6 +258,9 @@ def update_window_modifier_bmesh(context: bpy.types.Context) -> None: obj = context.active_object assert obj props = tool.Model.get_window_props(obj) + if not props.is_editing: + return + panel_schema = DEFAULT_PANEL_SCHEMAS[props.window_type] accumulated_height = [0] * len(panel_schema[0]) built_panels = [] @@ -451,6 +454,8 @@ class AddWindow(bpy.types.Operator, tool.Ifc.Operator): assert element props = tool.Model.get_window_props(obj) + tool.Blender.get_addon_preferences().default_parameters.window.copy_to(props) + window_data = props.get_general_kwargs(convert_to_project_units=True) lining_props = props.get_lining_kwargs(convert_to_project_units=True) panel_props = props.get_panel_kwargs(convert_to_project_units=True) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 25137cf639..e99ed4bb5d 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -38,6 +38,20 @@ from ifcopenshell.util.file import IfcHeaderExtractor from bonsai.bim.prop import Attribute from bonsai.bim.module.bsdd.prop import BIMBSDDProperties, BSDDProperty from bonsai.bim.module.pset.prop import IfcProperty +from bonsai.bim.module.model.prop import ( + BIMDoorProperties, + BIMWindowProperties, + BIMRailingProperties, + BIMRoofProperties, + BIMStairProperties, +) +from bonsai.bim.module.model.ui import ( + draw_door_properties, + draw_window_properties, + draw_railing_properties, + draw_roof_properties, + draw_stair_properties, +) from typing import Optional, TYPE_CHECKING, Literal from natsort import natsorted import textwrap @@ -320,6 +334,14 @@ class DocPreferences(bpy.types.PropertyGroup): classes_no_cut: str +class DefaultParameters(bpy.types.PropertyGroup): + door: bpy.props.PointerProperty(type=BIMDoorProperties) + window: bpy.props.PointerProperty(type=BIMWindowProperties) + railing: bpy.props.PointerProperty(type=BIMRailingProperties) + roof: bpy.props.PointerProperty(type=BIMRoofProperties) + stair: bpy.props.PointerProperty(type=BIMStairProperties) + + class BIM_ADDON_preferences(bpy.types.AddonPreferences): bl_idname = tool.Blender.get_blender_addon_package_name() svg2pdf_command: StringProperty( @@ -523,6 +545,11 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): subtype="DIR_PATH", ) doc: bpy.props.PointerProperty(type=DocPreferences) + default_parameters: bpy.props.PointerProperty( + type=DefaultParameters, + name="Default Parameters", + description="Default parameters for BIM elements", + ) if TYPE_CHECKING: svg2pdf_command: str @@ -557,6 +584,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): cache_dir: str pset_dir: str doc: DocPreferences + default_parameters: DefaultParameters def draw(self, context: bpy.types.Context) -> None: layout = self.layout @@ -581,6 +609,12 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Colors", self.draw_decorator_colors) bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Directories", self.draw_directories) bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Drawing", self.draw_drawing_settings) + bonsai.bim.helper.draw_expandable_panel( + self.layout, + context, + "Default Parameters", + self.draw_default_parameters, + ) bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Other", self.draw_other_settings) def draw_commands(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: @@ -639,6 +673,39 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): layout.row().prop(self, "decorator_color_error") layout.row().prop(self, "decorator_color_background") + def draw_default_parameters(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + box = layout.box() + bonsai.bim.helper.draw_expandable_panel( + box, + context, + "Door", + lambda _layout, _context: draw_door_properties(_layout, self.default_parameters.door), + ) + bonsai.bim.helper.draw_expandable_panel( + box, + context, + "Window", + lambda _layout, _context: draw_window_properties(_layout, self.default_parameters.window), + ) + bonsai.bim.helper.draw_expandable_panel( + box, + context, + "Railing", + lambda _layout, _context: draw_railing_properties(_layout, self.default_parameters.railing), + ) + bonsai.bim.helper.draw_expandable_panel( + box, + context, + "Roof", + lambda _layout, _context: draw_roof_properties(_layout, self.default_parameters.roof), + ) + bonsai.bim.helper.draw_expandable_panel( + box, + context, + "Stair", + lambda _layout, _context: draw_stair_properties(_layout, self.default_parameters.stair), + ) + def draw_other_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "opening_focus_opacity") layout.prop(self, "should_disable_undo_on_save") From 19b9a55404ecfa7ba0712809fa2e9948846a2e4c Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sat, 22 Nov 2025 20:12:49 +0100 Subject: [PATCH 190/657] Add posibility to edit classification system name in menu after invoking enable_editing_classification_reference --- .../bonsai/bim/module/classification/operator.py | 10 ++++++++-- src/bonsai/bonsai/bim/module/classification/prop.py | 1 + src/bonsai/bonsai/bim/module/classification/ui.py | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/classification/operator.py b/src/bonsai/bonsai/bim/module/classification/operator.py index 600b86a3d5..a6fd0c6df5 100644 --- a/src/bonsai/bonsai/bim/module/classification/operator.py +++ b/src/bonsai/bonsai/bim/module/classification/operator.py @@ -257,7 +257,9 @@ class EnableEditingClassificationReference(bpy.types.Operator): def execute(self, context): props = tool.Classification.get_classification_reference_props() props.reference_attributes.clear() - bonsai.bim.helper.import_attributes(tool.Ifc.get().by_id(self.reference), props.reference_attributes) + ifc_reference = tool.Ifc.get().by_id(self.reference) + bonsai.bim.helper.import_attributes(ifc_reference, props.reference_attributes) + props.classification_system_name = ifc_reference.ReferencedSource.Name or "" props.active_reference_id = self.reference return {"FINISHED"} @@ -324,9 +326,13 @@ class EditClassificationReference(bpy.types.Operator, tool.Ifc.Operator): props = tool.Classification.get_classification_reference_props() attributes = bonsai.bim.helper.export_attributes(props.reference_attributes) ifc_file = tool.Ifc.get() + reference_entity = ifc_file.by_id(props.active_reference_id) + referenced_source = reference_entity.ReferencedSource + if props.classification_system_name: + referenced_source.Name = props.classification_system_name ifcopenshell.api.classification.edit_reference( ifc_file, - reference=ifc_file.by_id(props.active_reference_id), + reference=reference_entity, attributes=attributes, ) bpy.ops.bim.disable_editing_classification_reference() diff --git a/src/bonsai/bonsai/bim/module/classification/prop.py b/src/bonsai/bonsai/bim/module/classification/prop.py index d85e4e8c4e..4e2de0119d 100644 --- a/src/bonsai/bonsai/bim/module/classification/prop.py +++ b/src/bonsai/bonsai/bim/module/classification/prop.py @@ -95,6 +95,7 @@ class BIMClassificationReferenceProperties(PropertyGroup): classifications: EnumProperty(items=get_classifications, name="Classifications") reference_attributes: CollectionProperty(name="Reference Attributes", type=Attribute) active_reference_id: IntProperty(name="Active Reference Id") + classification_system_name: StringProperty(name="Classification System Name") if TYPE_CHECKING: is_adding: bool diff --git a/src/bonsai/bonsai/bim/module/classification/ui.py b/src/bonsai/bonsai/bim/module/classification/ui.py index 51ef3dd303..077f97553f 100644 --- a/src/bonsai/bonsai/bim/module/classification/ui.py +++ b/src/bonsai/bonsai/bim/module/classification/ui.py @@ -258,6 +258,9 @@ class ReferenceUI: row = self.layout.row(align=True) row.operator("bim.edit_classification_reference", text="Save changes", icon="CHECKMARK") row.operator("bim.disable_editing_classification_reference", text="", icon="CANCEL") + row = self.layout.row() + row.prop(self.props, "classification_system_name", text="Classification System Name") + bonsai.bim.helper.draw_attributes(self.props.reference_attributes, self.layout) def draw_reference_ui(self, reference: dict[str, Any]) -> None: From b7b6e4aadfd1a5ca28ab4745e63fa23290bd9b11 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 22 Nov 2025 13:49:30 -0600 Subject: [PATCH 191/657] Consolidate format_distance functions and fix imperial unit formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced duplicate format_distance in unit.py with comprehensive MeasureIt-ARCH version from helper.py. Fixed critical floating point errors by changing inPerFoot from 11.9999 to 12.0, eliminating spurious fractions on whole numbers. Implemented auto-precision detection to simplify fractions (64/256 → 1/4) while preserving precise values like 3/256 when needed. Enhanced imperial parsing to support flexible input formats (optional symbols, mixed fractions, leading decimals) and fixed suppress_zero_inches functionality in dimension annotations. --- .../bonsai/bim/module/drawing/decoration.py | 11 +- .../bonsai/bim/module/drawing/helper.py | 113 ++++++++++++++---- src/bonsai/bonsai/bim/module/spatial/prop.py | 29 +++-- src/bonsai/bonsai/bim/module/spatial/ui.py | 2 +- src/bonsai/bonsai/tool/unit.py | 88 ++++++-------- 5 files changed, 161 insertions(+), 82 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 0ffc714ac9..8f15282bc4 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -489,7 +489,7 @@ class BaseDecorator: self.draw_label(context, text=text, line_no=line_number_start, multiline=True, **draw_label_kwargs) @cache - def format_value(self, context, value, custom_unit=None): + def format_value(self, context, value, suppress_zero_inches=False, custom_unit=None): drawing_pset_data = DrawingsData.data["active_drawing_pset_data"] precision = drawing_pset_data.get("MetricPrecision", None) if not precision: @@ -500,7 +500,7 @@ class BaseDecorator: value, precision=precision, decimal_places=decimal_places, - suppress_zero_inches=True, + suppress_zero_inches=suppress_zero_inches, custom_unit=custom_unit, ) @@ -743,7 +743,12 @@ class DimensionDecorator(BaseDecorator): if not show_description_only: length = (v1 - v0).length - text = self.format_value(context, length, custom_unit=dimension_data["custom_unit"]) + text = self.format_value( + context, + length, + suppress_zero_inches=dimension_data["suppress_zero_inches"], + custom_unit=dimension_data["custom_unit"] + ) if isinstance(self, DiameterDecorator): text = "D" + text text = text_prefix + text + text_suffix diff --git a/src/bonsai/bonsai/bim/module/drawing/helper.py b/src/bonsai/bonsai/bim/module/drawing/helper.py index 474abc496f..8f2246a636 100644 --- a/src/bonsai/bonsai/bim/module/drawing/helper.py +++ b/src/bonsai/bonsai/bim/module/drawing/helper.py @@ -121,6 +121,44 @@ class BoundingBox: retVal = True return retVal +def find_best_precision(fractional_inches, max_precision=256, base_tolerance=0.0001): + """ + Find the simplest fraction denominator that accurately represents the value. + Uses a sliding tolerance - smaller denominators get more tolerance. + + :param fractional_inches: The fractional part of inches (0.0 to 1.0) + :param max_precision: Maximum denominator to try (256 for imperial) + :param base_tolerance: Base tolerance in inches (very strict) + :return: Best denominator (power of 2: 2, 4, 8, 16, 32, 64, 128, 256) + """ + if abs(fractional_inches) < 0.00001: + return 1 # No fraction needed + + # Try denominators from coarsest to finest: 2, 4, 8, 16, 32, 64, 128, 256 + for exp in range(1, 9): # 2^1 to 2^8 + denom = 2 ** exp + if denom > max_precision: + break + + # Find nearest numerator for this denominator + numer = round(fractional_inches * denom) + + # Skip if numerator is 0 + if numer == 0: + continue + + # Check if this fraction is close enough + fraction_value = numer / denom + error = abs(fraction_value - fractional_inches) + + # Very strict tolerance - only simplify if it's a near-perfect match + # This keeps 3/256 as 3/256, but allows floating point errors to be cleaned up + if error < base_tolerance: + return denom + + # If no simpler fraction works, use max precision + return max_precision + # This function stolen from https://github.com/kevancress/MeasureIt_ARCH/blob/dcf607ce0896aa2284463c6b4ae9cd023fc54cbe/measureit_arch_baseclass.py # MeasureIt-ARCH is GPL-v3 @@ -187,14 +225,19 @@ def format_distance( if unit_length == "INCHES": toInches = 1 if unit_length == "FEET": - toInches = 11.9999 + toInches = 12 else: toInches = 39.3700787401574887 - inPerFoot = 11.9999 + inPerFoot = 12.0 if isArea: toInches = 1550 - inPerFoot = 143.999 + inPerFoot = 144 + + + decInches = value * toInches + decFeet = decInches / 12 + if not precision: precision = 256 elif precision == "1": @@ -203,8 +246,6 @@ def format_distance( precision = int(precision.split("/")[1]) base = int(precision) - decInches = value * toInches - decFeet = decInches / 12 # Separate ft and inches # Unless Inches are the specified Length Unit or unit_fraction is False @@ -217,23 +258,36 @@ def format_distance( else: feet = 0 - # Separate Fractional Inches + # Separate Fractional Inches decInches = abs(decInches) # ignore the sign for inches inches = math.floor(decInches) # remove decimal - if inches != 0: - frac = round(base * (decInches - inches)) + + # Clean up floating point errors + fractional_inches = decInches - inches + tolerance = 0.01 # About 1/100 of an inch + + # If the fractional part is very small, treat it as zero + if fractional_inches < tolerance: + frac = 0 + # If very close to the next whole inch, round up + elif fractional_inches > (1.0 - tolerance): + frac = 0 + inches += 1 else: - frac = round(base * (decInches)) + # Calculate fraction normally + if inches != 0: + frac = round(base * fractional_inches) + else: + frac = round(base * fractional_inches) + # Set proper numerator and denominator if frac != base: - numcycles = int(math.log2(base)) - for i in range(numcycles): - if frac % 2 == 0: - frac = int(frac / 2) - base = int(base / 2) - else: - break + # Simplify using GCD + from math import gcd + divisor = gcd(int(frac), int(base)) + frac = int(frac / divisor) + base = int(base / divisor) else: frac = 0 inches += 1 @@ -252,31 +306,48 @@ def format_distance( frac = None if not isArea: add_inches = bool(inches) or not suppress_zero_inches or (inches == 0 and frac) + tx_dist = "" if feet: tx_dist += str(feet) + "'" if not feet and not add_inches: tx_dist += str(feet) + "'" - if feet and add_inches: + + # Add "0' - " when we have inches but no feet + # But only add " - " separator if we actually have inches to show + if not feet and add_inches: + tx_dist += "0' - " + elif feet and add_inches: tx_dist += " - " + if not feet and value < 0: tx_dist += "-" if add_inches: - if feet == 0 and inches == 0: - pass + if feet == 0 and inches == 0 and not frac: + # Special case: exactly zero, show "0" + tx_dist += "0" + elif feet == 0 and inches == 0: + pass # Has fraction, will be added below else: tx_dist += str(inches) if add_inches and frac: if feet == 0 and inches == 0: - pass + pass # Has fraction, will be added below else: tx_dist += " " if frac: tx_dist += str(frac) + "/" + str(base) if add_inches or frac: - tx_dist += '"' + # Only add inch symbol if we actually added inch content + if inches > 0 or frac > 0 or feet == 0: + tx_dist += '"' + + + if precision == "12" and unit_system == "IMPERIAL": tx_dist = str(round(decFeet)) + "'" + if tx_dist == '"': + tx_dist = "0' - 0\"" else: fmt = "%1.3f" sq_feet = round(value * toInches / inPerFoot, 4) diff --git a/src/bonsai/bonsai/bim/module/spatial/prop.py b/src/bonsai/bonsai/bim/module/spatial/prop.py index 34d2866266..b7ae727a26 100644 --- a/src/bonsai/bonsai/bim/module/spatial/prop.py +++ b/src/bonsai/bonsai/bim/module/spatial/prop.py @@ -54,6 +54,27 @@ def update_elevation(self: "BIMContainer", context: bpy.types.Context) -> None: if is_valid: elevation = parsed_elevation + + # Format the string if it needs normalization: + # - Plain numbers (no units): "4" → "4' - 0"" + # - Missing symbols: "5'3" → "5' - 3"" + # - Inconsistent formatting: "5' 3 3/256" → "5' - 3 3/256"" + input_str = self.elevation.strip() + + # Check if input needs formatting (has feet/inch symbols or is plain number) + needs_formatting = ( + input_str.replace(".", "").replace("-", "").replace(" ", "").replace("/", "").isdigit() # Plain number + or "'" in input_str # Has feet symbol + or '"' in input_str # Has inch symbol + or " " in input_str.replace(" - ", "") # Has spaces (but not the formatted " - ") + ) + + # Only format if the current string doesn't match our standard format + if needs_formatting: + formatted = tool.Unit.format_distance(elevation) + if self.elevation != formatted: + self.elevation = formatted + return else: # Fall back to direct float conversion for backward compatibility try: @@ -62,14 +83,6 @@ def update_elevation(self: "BIMContainer", context: bpy.types.Context) -> None: print(f"Elevation parsing failed for '{self.elevation}': {e}") elevation = 0 - formatted = tool.Unit.format_distance(elevation) - - # Only update the string if it's different from the formatted version - # This prevents infinite loops and normalizes the display - if self.elevation != formatted: - self.elevation = formatted - return # Return early to let the property update trigger this function again - # Update the object's position in the 3D scene if ifc_definition_id := self.ifc_definition_id: entity = tool.Ifc.get().by_id(ifc_definition_id) diff --git a/src/bonsai/bonsai/bim/module/spatial/ui.py b/src/bonsai/bonsai/bim/module/spatial/ui.py index 0372a6f77e..ffb7773ac2 100644 --- a/src/bonsai/bonsai/bim/module/spatial/ui.py +++ b/src/bonsai/bonsai/bim/module/spatial/ui.py @@ -277,7 +277,7 @@ class BIM_UL_containers_manager(UIList): if item: row = layout.row(align=True) icon = self.icon_by_class.get(item.ifc_class, "META_PLANE") - split = row.split(factor=0.85) + split = row.split(factor=0.8) if item.long_name: split2 = split.split(factor=0.7) row = split2.row(align=True) diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index 26387cfc33..d01d51f3cb 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -65,7 +65,7 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t (False, 0.0) """ - grammar_imperial = """ + grammar_imperial = r""" start: (FORMULA dim expr) | dim dim: imperial @@ -73,18 +73,22 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t imperial: feet_inches | feet_only | inches_only | plain_number feet_only: NUMBER (FEET_SYM | FEET_TEXT) - inches_only: (NUMBER | fraction) (INCH_SYM | INCH_TEXT) - feet_inches: NUMBER (FEET_SYM | FEET_TEXT) "-"? (NUMBER | fraction) (INCH_SYM | INCH_TEXT) + inches_only: inch_value (INCH_SYM | INCH_TEXT) + feet_inches: NUMBER (FEET_SYM | FEET_TEXT) DASH? inch_value (INCH_SYM | INCH_TEXT)? plain_number: NUMBER + + inch_value: NUMBER fraction | fraction | NUMBER + fraction: NUMBER "/" NUMBER expr: (ADD | SUB) dim | (MUL | DIV) NUMBER - NUMBER: /-?\\d+(?:\\.\\d+)?/ + NUMBER: /-?(?:\d+\.?\d*|\.\d+)/ FEET_SYM: "'" FEET_TEXT: "ft" - INCH_SYM: "\\"" + INCH_SYM: "\"" INCH_TEXT: "in" + DASH: "-" ADD: "+" SUB: "-" MUL: "*" @@ -93,7 +97,7 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t %ignore " " """ - grammar_metric = """ + grammar_metric = r""" start: FORMULA? dim expr? dim: metric @@ -103,7 +107,7 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t expr: (ADD | SUB | MUL | DIV) dim - NUMBER: /-?\\d+(?:\\.\\d+)?/ + NUMBER: /-?(?:\d+\.?\d*|\.\d+)/ MM: "mm" CM: "cm" DM: "dm" @@ -124,6 +128,15 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t def fraction(self, numbers): return numbers[0] / numbers[1] + def inch_value(self, args): + # Can be: NUMBER fraction, fraction, or NUMBER + if len(args) == 2: + # NUMBER fraction (e.g., "9 1/64") + return args[0] + args[1] + else: + # Just fraction or just NUMBER + return args[0] + def plain_number(self, args): # A plain number in imperial context is assumed to be feet feet = args[0] @@ -137,18 +150,15 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t return feet * 0.3048 def inches_only(self, args): - # args[0] is the number (or fraction) of inches, args[1] is the unit token + # args[0] is the inch_value, args[1] is the unit token inches = args[0] # Convert inches to meters (1 inch = 0.0254 meters) return inches * 0.0254 def feet_inches(self, args): - # Grammar: NUMBER (FEET_SYM | FEET_TEXT) "-"? (NUMBER | fraction) (INCH_SYM | INCH_TEXT) - # args will be: [feet_number, feet_unit_token, inches_number, inch_unit_token] - # or with optional dash: [feet_number, feet_unit_token, dash_token, inches_number, inch_unit_token] - # We need to extract just the numbers + # Extract feet and inches values feet = args[0] - # Find the inches value - it's the first number after the feet number + # Find the inch_value (it's a number, not a token) inches = None for arg in args[1:]: if isinstance(arg, (int, float)): @@ -234,30 +244,24 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t parse_tree = None try: parse_tree = primary_parser.parse(input_string) - print(f"Primary parser succeeded for '{input_string}'") except Exception as e: - print(f"Primary parser failed for '{input_string}': {e}") # If primary fails, try fallback grammar (allows metric in imperial projects and vice versa) try: parse_tree = fallback_parser.parse(input_string) - print(f"Fallback parser succeeded for '{input_string}'") except Exception as e2: - print(f"Fallback parser failed for '{input_string}': {e2}") pass if parse_tree is None: - print(f"No parse tree for '{input_string}'") return False, 0.0 # Transform the parse tree to get the numeric result transformer = InputTransform() result = transformer.transform(parse_tree) - print(f"Parsed '{input_string}' -> {result} meters (unit_scale={unit_scale})") - result = round(result, 4) + result = round(result, 6) return True, result + except Exception as e: - print(f"Parse exception for '{input_string}': {e}") return False, 0.0 @@ -265,42 +269,28 @@ class Unit(bonsai.core.tool.Unit): UNIT_TYPE = Literal["LENGTHUNIT", "AREAUNIT", "VOLUMEUNIT"] @staticmethod - def format_distance(meters: float, use_imperial: bool = None) -> str: + def format_distance(meters: float, use_imperial: bool = None, **kwargs) -> str: """ Format a distance value in meters to a string in the project's unit system. :param meters: The distance value in meters :param use_imperial: If True, format as imperial; if False, format as metric; if None, auto-detect from scene + :param kwargs: Additional arguments to pass to the underlying format_distance function + (hide_units, precision, decimal_places, etc.) :return: Formatted string with units """ - if use_imperial is None: - use_imperial = bpy.context.scene.unit_settings.system == "IMPERIAL" + # Import the comprehensive format_distance from the helper module + from bonsai.bim.module.drawing import helper - if use_imperial: - # Convert meters to feet - total_feet = meters / 0.3048 - feet = int(total_feet) - inches = (total_feet - feet) * 12 - - # If inches is very close to 0, just show feet - if abs(inches) < 0.01: - if feet == 0: - return "0'" - return f"{feet}'" - # If feet is 0, just show inches - elif feet == 0: - return f'{inches:.4g}"' - # Show both feet and inches - else: - return f"{feet}' - {inches:.4g}\"" - else: - # Use metric - choose appropriate unit - if abs(meters) >= 1.0: - return f"{meters:.4g}m" - elif abs(meters) >= 0.01: - return f"{meters * 100:.4g}cm" - else: - return f"{meters * 1000:.4g}mm" + # The comprehensive function expects value in scene units, not meters + # So we pass meters directly since it handles unit conversion internally + return helper.format_distance( + meters, + hide_units=kwargs.get("hide_units", False), + precision=kwargs.get("precision"), + decimal_places=kwargs.get("decimal_places"), + **kwargs, + ) @classmethod def get_unit_props(cls) -> BIMUnitProperties: From 57bc709b6fef6381bbb2810da15e568290c4a77a Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 22 Nov 2025 14:39:13 -0600 Subject: [PATCH 192/657] Fix imperial unit conversion for plan and section level decorators Level annotations were incorrectly converting feet to meters and back, causing values like 3ft to display as 9'10". Updated format_value() to accept in_unit_length parameter and pass it to format_distance(), since Blender's Z coordinates are already in project units. - Add in_unit_length parameter to BaseDecorator.format_value() - Set in_unit_length=True in PlanLevelDecorator.draw_labels() - Set in_unit_length=True in SectionLevelDecorator.draw_labels() --- src/bonsai/bonsai/bim/module/drawing/decoration.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 8f15282bc4..88c6d063e5 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -489,7 +489,7 @@ class BaseDecorator: self.draw_label(context, text=text, line_no=line_number_start, multiline=True, **draw_label_kwargs) @cache - def format_value(self, context, value, suppress_zero_inches=False, custom_unit=None): + def format_value(self, context, value, suppress_zero_inches=False, custom_unit=None, in_unit_length=False): drawing_pset_data = DrawingsData.data["active_drawing_pset_data"] precision = drawing_pset_data.get("MetricPrecision", None) if not precision: @@ -502,6 +502,7 @@ class BaseDecorator: decimal_places=decimal_places, suppress_zero_inches=suppress_zero_inches, custom_unit=custom_unit, + in_unit_length=in_unit_length, ) def draw_asterisk(self, context: bpy.types.Context, pos: Vector, rotation: float = 0.0, scale: float = 1.0) -> None: @@ -1203,7 +1204,7 @@ class PlanLevelDecorator(BaseDecorator): abs_z = verts[0].z z = helper.get_relative_z(obj, element, abs_z) - rl = self.format_value(context, z) + rl = self.format_value(context, z, in_unit_length=True) text = "{}{}".format("" if z < 0 else "+", rl) return text @@ -1276,7 +1277,7 @@ class SectionLevelDecorator(BaseDecorator): def get_text(): z = verts[0].z - rl = self.format_value(context, z) + rl = self.format_value(context, z, in_unit_length=True) text = "RL {}{}".format("" if z < 0 else "+", rl) return text @@ -1291,7 +1292,6 @@ class SectionLevelDecorator(BaseDecorator): ) break # support only 1 label - class BreakDecorator(BaseDecorator): """Decorator for breakline objects - first edge of a mesh with zigzag thingy in the middle From 2be142eff23b82b2f2d99685edfbd7392e7c029a Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 6 Oct 2025 13:36:44 +0200 Subject: [PATCH 193/657] Add unwrapping of UV for IfcReferenceImage --- .../bonsai/bim/module/drawing/operator.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 5077b0bbf0..9e5cb3330c 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3701,6 +3701,13 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): layout.prop(self, "use_existing_object_by_name") def _execute(self, context): + space = tool.Blender.get_view3d_space() + if space and space.shading.type == "SOLID" and space.shading.color_type != "TEXTURE": + self.report( + {"WARNING"}, + 'Please change to "Texture" in "Object Color" for Viewport Shading: Solid to see the reference image properly.', + ) + abs_path = Path(self.filepath).absolute().resolve() image_filepath = Path(tool.Ifc.get_uri(self.filepath, use_relative_path=self.use_relative_path)) ifc_file = tool.Ifc.get() @@ -3716,6 +3723,20 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): plane_scale = (Vector(image.size) / min(image.size)).to_3d() matrix = Matrix.LocRotScale(None, None, plane_scale) bmesh.ops.create_grid(bm, x_segments=1, y_segments=1, size=1, matrix=matrix, calc_uvs=False) + + if not bm.loops.layers.uv: + uv_layer = bm.loops.layers.uv.new() + else: + uv_layer = bm.loops.layers.uv.active + + aspect_ratio = image.size[1] / image.size[0] + for face in bm.faces: + for loop in face.loops: + vert = loop.vert + v = (vert.co.y * 0.5) + 0.5 + u = (vert.co.x * 0.5 * aspect_ratio) + 0.5 + loop[uv_layer].uv = (u, v) + tool.Blender.apply_bmesh(mesh, bm) if self.use_existing_object_by_name: From d8263349cd6312a9d915794e67d21cfbf80b6fd7 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 6 Oct 2025 14:22:15 +0200 Subject: [PATCH 194/657] Add UV mapping for IfcAnnotation images in IfcImporter --- src/bonsai/bonsai/bim/import_ifc.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 539ec89736..1f4ebaaa9b 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -888,7 +888,34 @@ class IfcImporter: self.set_matrix_world( obj, tool.Loader.apply_blender_offset_to_matrix_world(obj, self.get_element_matrix(element)) ) - + if element.is_a("IfcAnnotation") and getattr(element, "ObjectType", None) == "IMAGE": + image = None + if obj.data and obj.data.materials and obj.data.materials[0]: + material = obj.data.materials[0] + if material.use_nodes and material.node_tree: + for node in material.node_tree.nodes: + if node.type == 'TEX_IMAGE' and node.image: + image = node.image + break + if image: + import bmesh + bm = bmesh.new() + bm.from_mesh(obj.data) + if not bm.loops.layers.uv: + uv_layer = bm.loops.layers.uv.new() + else: + uv_layer = bm.loops.layers.uv.active + aspect_ratio = image.size[1] / image.size[0] + for face in bm.faces: + for loop in face.loops: + vert = loop.vert + v = (vert.co.y * 0.5) + 0.5 + u = (vert.co.x * 0.5 * aspect_ratio) + 0.5 + loop[uv_layer].uv = (u, v) + bm.to_mesh(obj.data) + bm.free() + obj.data.update() + return obj def load_existing_meshes(self) -> None: From ec51c67373973300c540f55aef77cc94d6162a28 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 7 Oct 2025 17:56:46 +0200 Subject: [PATCH 195/657] For ifcReferenceImage by default set color type to "Texture" and warn user --- src/bonsai/bonsai/bim/module/drawing/operator.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 9e5cb3330c..0653c37835 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3702,10 +3702,11 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): def _execute(self, context): space = tool.Blender.get_view3d_space() - if space and space.shading.type == "SOLID" and space.shading.color_type != "TEXTURE": + if space.shading.color_type != "TEXTURE": + space.shading.color_type = "TEXTURE" self.report( {"WARNING"}, - 'Please change to "Texture" in "Object Color" for Viewport Shading: Solid to see the reference image properly.', + '"Object Color" for Viewport Shading: Solid changed to "Texture" to see the reference image properly.', ) abs_path = Path(self.filepath).absolute().resolve() From 069873053ad3563cfeede852a25a78b01e8c41ef Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 8 Oct 2025 01:23:52 +0200 Subject: [PATCH 196/657] Add Image Scaling Tool and integrate with workspace hotkeys --- src/bonsai/bonsai/bim/import_ifc.py | 30 ++- .../bonsai/bim/module/project/__init__.py | 3 +- .../bonsai/bim/module/project/operator.py | 197 ++++++++++++++++++ .../bonsai/bim/module/project/workspace.py | 23 ++ 4 files changed, 244 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 1f4ebaaa9b..027e220992 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -888,6 +888,7 @@ class IfcImporter: self.set_matrix_world( obj, tool.Loader.apply_blender_offset_to_matrix_world(obj, self.get_element_matrix(element)) ) + if element.is_a("IfcAnnotation") and getattr(element, "ObjectType", None) == "IMAGE": image = None if obj.data and obj.data.materials and obj.data.materials[0]: @@ -905,17 +906,30 @@ class IfcImporter: uv_layer = bm.loops.layers.uv.new() else: uv_layer = bm.loops.layers.uv.active - aspect_ratio = image.size[1] / image.size[0] - for face in bm.faces: - for loop in face.loops: - vert = loop.vert - v = (vert.co.y * 0.5) + 0.5 - u = (vert.co.x * 0.5 * aspect_ratio) + 0.5 - loop[uv_layer].uv = (u, v) + + if bm.verts: + min_x = min(v.co.x for v in bm.verts) + max_x = max(v.co.x for v in bm.verts) + min_y = min(v.co.y for v in bm.verts) + max_y = max(v.co.y for v in bm.verts) + + width = max_x - min_x + height = max_y - min_y + + for face in bm.faces: + for loop in face.loops: + vert = loop.vert + u = (vert.co.x - min_x) / width if width > 0 else 0.5 + v = (vert.co.y - min_y) / height if height > 0 else 0.5 + + u = max(0.0, min(1.0, u)) + v = max(0.0, min(1.0, v)) + + loop[uv_layer].uv = (u, v) + bm.to_mesh(obj.data) bm.free() obj.data.update() - return obj def load_existing_meshes(self) -> None: diff --git a/src/bonsai/bonsai/bim/module/project/__init__.py b/src/bonsai/bonsai/bim/module/project/__init__.py index 1316eb0325..bae6a119d6 100644 --- a/src/bonsai/bonsai/bim/module/project/__init__.py +++ b/src/bonsai/bonsai/bim/module/project/__init__.py @@ -42,6 +42,7 @@ classes = ( operator.ExportIFC, operator.FlipClippingPlane, operator.IFCFileHandlerOperator, + operator.ImageScalingTool, operator.LinkIfc, operator.LoadLink, operator.LoadLinkedProject, @@ -130,4 +131,4 @@ def unregister(): if kc: for km, kmi in addon_keymaps: km.keymap_items.remove(kmi) - addon_keymaps.clear() + addon_keymaps.clear() \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 2f5b9c906e..30eedd038e 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -2842,3 +2842,200 @@ class ClearMeasurement(bpy.types.Operator): MeasureDecorator.uninstall() tool.Blender.update_viewport() return {"FINISHED"} + +class ImageScalingTool(bpy.types.Operator, PolylineOperator): + bl_idname = "bim.image_scaling_tool" + bl_label = "Image Scaling Tool" + bl_options = {"REGISTER", "UNDO"} + + @classmethod + def poll(cls, context): + return context.space_data.type == "VIEW_3D" + + def __init__(self, *args, **kwargs): + bpy.types.Operator.__init__(self, *args, **kwargs) + PolylineOperator.__init__(self) + self.input_options = ["DISTANCE"] + self.input_ui = tool.Polyline.create_input_ui(input_options=self.input_options) + self.selected_points = [] + self.target_object = None + self.current_distance_value = "" + self.is_typing_distance = False + self.calculated_distance = 0.0 + + if tool.Ifc.get(): + self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + else: + self.unit_scale = tool.Blender.get_unit_scale() + + def modal(self, context, event): + if not self.target_object or not context.active_object or context.active_object != self.target_object: + self.report({"ERROR"}, "Image annotation was deselected. Tool cancelled.") + return self.cancel_tool(context) + + PolylineDecorator.update(event, self.tool_state, self.input_ui, self.snapping_points[0]) + tool.Blender.update_viewport() + + self.handle_lock_axis(context, event) + + if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}: + self.handle_mouse_move(context, event) + return {"PASS_THROUGH"} + + self.handle_custom_instructions(context) + self.handle_mouse_move(context, event) + self.choose_axis(event, z=True) + self.choose_plane(event) + self.handle_snap_selection(context, event) + + if event.type == "LEFTMOUSE" and event.value == "PRESS": + if len(self.selected_points) < 2: + snapped_point = self.snapping_points[0] + point_3d = snapped_point['point'].copy() + self.selected_points.append(point_3d) + + if len(self.selected_points) == 2: + self.calculate_distance() + self.current_distance_value = f"{self.calculated_distance:.3f}" + self.is_typing_distance = False + self.input_ui.set_value("DISTANCE", self.calculated_distance) + + elif len(self.selected_points) == 2: + if event.type in {"RET", "NUMPAD_ENTER"} and event.value == "PRESS": + return self.apply_scaling(context) + + if event.unicode and event.unicode.isprintable() and event.value == "PRESS": + if event.unicode.isdigit() or event.unicode == ".": + if not self.is_typing_distance: + self.current_distance_value = event.unicode + self.is_typing_distance = True + else: + self.current_distance_value += event.unicode + + distance_value = float(self.current_distance_value) + self.input_ui.set_value("DISTANCE", distance_value) + + elif event.type in {"BACK_SPACE", "DEL"} and event.value == "PRESS": + if len(self.current_distance_value) > 0: + self.current_distance_value = self.current_distance_value[:-1] + distance_value = float(self.current_distance_value) if self.current_distance_value else self.calculated_distance + self.input_ui.set_value("DISTANCE", distance_value) + + self.handle_keyboard_input(context, event) + + result = self.handle_cancelation(context, event) + if result is not None: + return result + + return {"RUNNING_MODAL"} + + def invoke(self, context, event): + active_obj = context.active_object + self.target_object = active_obj + super().invoke(context, event) + return {"RUNNING_MODAL"} + + def cancel_tool(self, context): + context.workspace.status_text_set(text=None) + if hasattr(self, 'tool_state'): + self.tool_state.plane_method = None + PolylineDecorator.uninstall() + tool.Blender.update_viewport() + return {"CANCELLED"} + + def handle_custom_instructions(self, context): + if len(self.selected_points) == 0: + instruction_text = "Click First Point on Image" + elif len(self.selected_points) == 1: + instruction_text = "Click Second Point on Image" + elif len(self.selected_points) == 2: + if self.is_typing_distance: + instruction_text = f"Distance: {self.current_distance_value} - Press Enter to Apply" + else: + instruction_text = f"Measured: {self.calculated_distance:.3f} - Type New Distance or Press Enter" + else: + instruction_text = "Image Scaling Tool" + + context.workspace.status_text_set(text=instruction_text) + + def calculate_distance(self): + if len(self.selected_points) == 2: + point1 = self.selected_points[0] + point2 = self.selected_points[1] + distance_3d = (point2 - point1).length + self.calculated_distance = distance_3d / self.unit_scale + + def apply_scaling(self, context): + if len(self.selected_points) != 2: + self.report({"ERROR"}, "Two points must be selected") + return {"CANCELLED"} + + target_distance = float(self.current_distance_value) + + if target_distance <= 0: + self.report({"ERROR"}, "Distance must be positive") + return {"CANCELLED"} + + if self.calculated_distance <= 0: + self.report({"ERROR"}, "Selected points are too close together") + return {"CANCELLED"} + + scale_factor = target_distance / self.calculated_distance + + if self.target_object: + import bmesh + + mesh = self.target_object.data + + bm = bmesh.new() + bm.from_mesh(mesh) + + bmesh.ops.scale(bm, vec=(scale_factor, scale_factor, 1.0), verts=bm.verts) + + if bm.loops.layers.uv: + uv_layer = bm.loops.layers.uv.active + + min_x = min(v.co.x for v in bm.verts) + max_x = max(v.co.x for v in bm.verts) + min_y = min(v.co.y for v in bm.verts) + max_y = max(v.co.y for v in bm.verts) + + width = max_x - min_x + height = max_y - min_y + + for face in bm.faces: + for loop in face.loops: + vert = loop.vert + u = (vert.co.x - min_x) / width if width > 0 else 0.5 + v = (vert.co.y - min_y) / height if height > 0 else 0.5 + + u = max(0.0, min(1.0, u)) + v = max(0.0, min(1.0, v)) + loop[uv_layer].uv = (u, v) + + bm.to_mesh(mesh) + bm.free() + mesh.update() + + element = tool.Ifc.get_entity(self.target_object) + if element and element.Representation: + for representation in element.Representation.Representations: + for item in representation.Items: + if item.is_a('IfcPolygonalFaceSet') and item.Coordinates: + new_coords = [] + for vertex in mesh.vertices: + co = self.target_object.matrix_world @ vertex.co + new_coords.append([co.x, co.y, co.z]) + + item.Coordinates.CoordList = new_coords + + self.report({"INFO"}, f"Applied scale factor: {scale_factor:.4f}") + + context.workspace.status_text_set(text=None) + self.tool_state.plane_method = None + PolylineDecorator.uninstall() + tool.Blender.update_viewport() + + return {"FINISHED"} + + diff --git a/src/bonsai/bonsai/bim/module/project/workspace.py b/src/bonsai/bonsai/bim/module/project/workspace.py index e7b9220fc1..a5ec38a5ee 100644 --- a/src/bonsai/bonsai/bim/module/project/workspace.py +++ b/src/bonsai/bonsai/bim/module/project/workspace.py @@ -38,6 +38,7 @@ class ExploreTool(bpy.types.WorkSpaceTool): ("bim.explore_hotkey", {"type": "F", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_F")]}), ("bim.explore_hotkey", {"type": "C", "value": "PRESS", "alt": True}, {"properties": [("hotkey", "A_C")]}), ("bim.explore_hotkey", {"type": "M", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_M")]}), + ("bim.explore_hotkey", {"type": "S", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_S")]}), ) def draw_settings(context, layout, ws_tool): @@ -71,6 +72,13 @@ class ExploreTool(bpy.types.WorkSpaceTool): row = layout.row(align=True) op = row.operator("bim.clear_measurement", text="", icon="X") + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="", icon="EVENT_S") + row = layout.row(align=True) + op = row.operator("bim.explore_hotkey", text="Image Scaling Tool", icon="IMAGE_PLANE") + op.hotkey = "S_S" + class ExploreHotkey(bpy.types.Operator): bl_idname = "bim.explore_hotkey" @@ -110,3 +118,18 @@ class ExploreHotkey(bpy.types.Operator): bpy.ops.bim.measure_face_area_tool("INVOKE_DEFAULT") else: bpy.ops.bim.measure_tool("INVOKE_DEFAULT", measure_type=measure_type) + + def hotkey_S_S(self): + active_obj = bpy.context.active_object + selected_objects = tool.Blender.get_selected_objects() + element = tool.Ifc.get_entity(active_obj) if active_obj else None + + if (not active_obj or + not element or + not element.is_a("IfcAnnotation") or + len(selected_objects) != 1 or + not tool.Drawing.is_annotation_object_type(element, "IMAGE")): + self.report({"ERROR"}, "Please select one image annotation first.") + return + + bpy.ops.bim.image_scaling_tool("INVOKE_DEFAULT") From 834634aedbc9484b2752ac94e1594e3fafdf9f30 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 3 Nov 2025 10:16:50 +0100 Subject: [PATCH 197/657] Properly AddReferenceImage operator initialization (ready for IFC edit mode) --- src/bonsai/bonsai/bim/module/drawing/operator.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 0653c37835..7ef2a1603b 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3758,6 +3758,16 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): ) tool.Blender.remove_data_block(temp_mesh) + + element = tool.Ifc.get_entity(obj) + if element and isinstance(obj.data, bpy.types.Mesh): + representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") + if representation and representation.Items: + item_id = representation.Items[0].id() + num_faces = len(obj.data.polygons) + obj.data["ios_item_ids"] = [item_id] * num_faces + tool.Blender.Attribute.fill_attribute(obj.data, "ios_item_ids", "FACE", "INT", [item_id] * num_faces) + tool.Blender.set_active_object(obj) material = bpy.data.materials.new(name=image_filepath.stem) From 43b12d55d441775ec9db0a38f72d0ba08cdc8d9c Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 3 Nov 2025 11:17:44 +0100 Subject: [PATCH 198/657] Add dimensions dialog for reference image and update scaling logic --- .../bonsai/bim/module/drawing/operator.py | 120 ++++++++++++++++-- 1 file changed, 108 insertions(+), 12 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 7ef2a1603b..25965966b3 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3688,18 +3688,92 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): description="Existing object name to add a style with reference image to. If not provided will create a new object.", options={"SKIP_SAVE"}, ) + + x_length: bpy.props.FloatProperty( + name="X Length", + description="Width of the reference image in project units", + default=1.0, + min=0.001, + soft_min=0.01, + precision=3, + ) + y_length: bpy.props.FloatProperty( + name="Y Length", + description="Height of the reference image in project units", + default=1.0, + min=0.001, + soft_min=0.01, + precision=3, + ) + + _show_dimensions_dialog: bpy.props.BoolProperty(default=False, options={"HIDDEN", "SKIP_SAVE"}) def draw(self, context): layout = self.layout - if Path(tool.Ifc.get_path()).is_file(): - layout.prop(self, "use_relative_path") + + if getattr(self, '_show_dimensions_dialog', False): + if tool.Ifc.get(): + length_unit = ifcopenshell.util.unit.get_project_unit(tool.Ifc.get(), "LENGTHUNIT") + if length_unit: + unit_name = ifcopenshell.util.unit.get_full_unit_name(length_unit).lower() + else: + unit_name = "project units" + layout.label(text=f"Set Reference Image Dimensions (in {unit_name}):") + else: + layout.label(text="Set Reference Image Dimensions (in project units):") + layout.separator() + layout.prop(self, "x_length") + layout.prop(self, "y_length") else: - self.use_relative_path = False - layout.label(text="Save the .ifc file first ") - layout.label(text="to use relative paths.") - layout.prop(self, "override_existing_image") - layout.prop(self, "use_existing_object_by_name") + if Path(tool.Ifc.get_path()).is_file(): + layout.prop(self, "use_relative_path") + else: + self.use_relative_path = False + layout.label(text="Save the .ifc file first ") + layout.label(text="to use relative paths.") + layout.prop(self, "override_existing_image") + layout.prop(self, "use_existing_object_by_name") + + def invoke(self, context, event): + if not getattr(self, '_show_dimensions_dialog', False): + context.window_manager.fileselect_add(self) + return {'RUNNING_MODAL'} + else: + return context.window_manager.invoke_props_dialog(self) + def execute(self, context): + if not getattr(self, '_show_dimensions_dialog', False): + abs_path = Path(self.filepath).absolute().resolve() + if self.override_existing_image: + params = {"check_existing": True, "force_reload": True} + else: + params = {"check_existing": False} + + try: + image = load_image(abs_path.name, str(abs_path.parent), **params) + + image_width_px = image.size[0] + image_height_px = image.size[1] + aspect_ratio = image_width_px / image_height_px + + if aspect_ratio >= 1.0: + self.x_length = 1.0 + self.y_length = 1.0 / aspect_ratio + else: + self.x_length = aspect_ratio + self.y_length = 1.0 + + bpy.data.images.remove(image) + + except Exception as e: + self.report({'ERROR'}, f"Failed to load image: {str(e)}") + return {'CANCELLED'} + + self._show_dimensions_dialog = True + return context.window_manager.invoke_props_dialog(self) + + return self._execute(context) + def _execute(self, context): space = tool.Blender.get_view3d_space() if space.shading.color_type != "TEXTURE": @@ -3717,11 +3791,13 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): params = {"check_existing": True, "force_reload": True} else: params = {"check_existing": False} - image = load_image(abs_path.name, abs_path.parent, **params) + image = load_image(abs_path.name, str(abs_path.parent), **params) def bm_add_image_plane(mesh): bm = tool.Blender.get_bmesh_for_mesh(mesh, clean=True) - plane_scale = (Vector(image.size) / min(image.size)).to_3d() + + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file) + plane_scale = Vector((self.x_length * unit_scale / 2.0, self.y_length * unit_scale / 2.0, 1.0)) matrix = Matrix.LocRotScale(None, None, plane_scale) bmesh.ops.create_grid(bm, x_segments=1, y_segments=1, size=1, matrix=matrix, calc_uvs=False) @@ -3730,12 +3806,22 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): else: uv_layer = bm.loops.layers.uv.active - aspect_ratio = image.size[1] / image.size[0] + min_x = min(v.co.x for v in bm.verts) + max_x = max(v.co.x for v in bm.verts) + min_y = min(v.co.y for v in bm.verts) + max_y = max(v.co.y for v in bm.verts) + + width = max_x - min_x + height = max_y - min_y + for face in bm.faces: for loop in face.loops: vert = loop.vert - v = (vert.co.y * 0.5) + 0.5 - u = (vert.co.x * 0.5 * aspect_ratio) + 0.5 + u = (vert.co.x - min_x) / width if width > 0 else 0.5 + v = (vert.co.y - min_y) / height if height > 0 else 0.5 + + u = max(0.0, min(1.0, u)) + v = max(0.0, min(1.0, v)) loop[uv_layer].uv = (u, v) tool.Blender.apply_bmesh(mesh, bm) @@ -3767,6 +3853,14 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): num_faces = len(obj.data.polygons) obj.data["ios_item_ids"] = [item_id] * num_faces tool.Blender.Attribute.fill_attribute(obj.data, "ios_item_ids", "FACE", "INT", [item_id] * num_faces) + + for item in representation.Items: + if item.is_a('IfcPolygonalFaceSet') and item.Coordinates: + new_coords = [] + for vertex in obj.data.vertices: + co = obj.matrix_world @ vertex.co + new_coords.append([co.x, co.y, co.z]) + item.Coordinates.CoordList = new_coords tool.Blender.set_active_object(obj) @@ -3807,6 +3901,8 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): ) tool.Style.reload_material_from_ifc(material) tool.Geometry.record_object_materials(obj) + + return {'FINISHED'} class ConvertSVGToDXF(bpy.types.Operator): From d2dfeb79a3f13d801e8a44aa079f99998ea84efe Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sat, 22 Nov 2025 22:20:39 +0100 Subject: [PATCH 199/657] Refactor AddReferenceImage to use public property for dimensions dialog --- src/bonsai/bonsai/bim/module/drawing/operator.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 25965966b3..7397c93f63 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3706,12 +3706,12 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): precision=3, ) - _show_dimensions_dialog: bpy.props.BoolProperty(default=False, options={"HIDDEN", "SKIP_SAVE"}) + show_dimensions_dialog: bpy.props.BoolProperty(default=False, options={"HIDDEN", "SKIP_SAVE"}) def draw(self, context): layout = self.layout - if getattr(self, '_show_dimensions_dialog', False): + if getattr(self, 'show_dimensions_dialog', False): if tool.Ifc.get(): length_unit = ifcopenshell.util.unit.get_project_unit(tool.Ifc.get(), "LENGTHUNIT") if length_unit: @@ -3735,14 +3735,14 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): layout.prop(self, "use_existing_object_by_name") def invoke(self, context, event): - if not getattr(self, '_show_dimensions_dialog', False): + if not getattr(self, 'show_dimensions_dialog', False): context.window_manager.fileselect_add(self) return {'RUNNING_MODAL'} else: return context.window_manager.invoke_props_dialog(self) def execute(self, context): - if not getattr(self, '_show_dimensions_dialog', False): + if not getattr(self, 'show_dimensions_dialog', False): abs_path = Path(self.filepath).absolute().resolve() if self.override_existing_image: params = {"check_existing": True, "force_reload": True} @@ -3769,7 +3769,7 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): self.report({'ERROR'}, f"Failed to load image: {str(e)}") return {'CANCELLED'} - self._show_dimensions_dialog = True + self.show_dimensions_dialog = True return context.window_manager.invoke_props_dialog(self) return self._execute(context) From 0d0b6cc6b2ce37e626df15f947035ac0509b5c9f Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 22 Nov 2025 15:40:47 -0600 Subject: [PATCH 200/657] Additional fixes to https://github.com/IfcOpenShell/IfcOpenShell/commit/57bc709b6fef6381bbb2810da15e568290c4a77a --- src/bonsai/bonsai/bim/module/drawing/decoration.py | 10 +++++++++- src/bonsai/bonsai/tool/drawing.py | 7 ++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 88c6d063e5..bf4972df2d 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -1203,7 +1203,11 @@ class PlanLevelDecorator(BaseDecorator): def get_text(): abs_z = verts[0].z z = helper.get_relative_z(obj, element, abs_z) - + + # Z is in meters (Blender world space), convert to project units (feet) + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + z = z / unit_scale # Convert meters to feet + rl = self.format_value(context, z, in_unit_length=True) text = "{}{}".format("" if z < 0 else "+", rl) return text @@ -1277,6 +1281,10 @@ class SectionLevelDecorator(BaseDecorator): def get_text(): z = verts[0].z + # Z is in meters (Blender world space), convert to project units (feet) + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + z = z / unit_scale # Convert meters to feet + rl = self.format_value(context, z, in_unit_length=True) text = "RL {}{}".format("" if z < 0 else "+", rl) return text diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index ce0b392834..9e9bfcd43c 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -1625,7 +1625,12 @@ class Drawing(bonsai.core.tool.Drawing): xmin, xmax, ymin, ymax = helper.ortho_view_frame(camera.data)[:4] rl = ifcopenshell.util.placement.get_local_placement(storey.ObjectPlacement)[2][3] - y = (camera.matrix_world.inverted() @ Vector((0.0, 0.0, rl))).y + + # Convert RL from project units (feet) to meters for Blender world space + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + rl_meters = rl * unit_scale + + y = (camera.matrix_world.inverted() @ Vector((0.0, 0.0, rl_meters))).y if y < ymin or y > ymax: return From bfd5b1bede1772032014b024587449e3be52e814 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 22 Nov 2025 16:53:28 -0600 Subject: [PATCH 201/657] add to https://github.com/IfcOpenShell/IfcOpenShell/commit/57bc709b6fef6381bbb2810da15e568290c4a77a: Fix elevation display by converting from project units to meters on import When importing spatial decomposition, get_storey_elevation() returns values in the project's unit system (e.g., feet), but format_distance() expects values in meters. Added unit_scale conversion (elevation * unit_scale) before formatting to ensure elevations display correctly regardless of project units. --- src/bonsai/bonsai/tool/spatial.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/spatial.py b/src/bonsai/bonsai/tool/spatial.py index f21375cd63..a177a237e8 100644 --- a/src/bonsai/bonsai/tool/spatial.py +++ b/src/bonsai/bonsai/tool/spatial.py @@ -496,7 +496,9 @@ class Spatial(bonsai.core.tool.Spatial): new.long_name = element.LongName or "" if not element.is_a("IfcProject"): elevation = ifcopenshell.util.placement.get_storey_elevation(element) - new["elevation"] = tool.Unit.format_distance(elevation) + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + elevation_in_meters = elevation * unit_scale + new.elevation = tool.Unit.format_distance(elevation_in_meters) new.is_expanded = element.id() not in cls.contracted_containers new.level_index = level_index children = ifcopenshell.util.element.get_parts(element) From 461404cd451616105f5cd60066e2bc5d0321ca65 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 23 Nov 2025 11:16:47 +0100 Subject: [PATCH 202/657] Don't terminate parsing on invalid entity names --- src/ifcparse/IfcFile.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ifcparse/IfcFile.cpp b/src/ifcparse/IfcFile.cpp index d0b2dd030e..9e26b24442 100644 --- a/src/ifcparse/IfcFile.cpp +++ b/src/ifcparse/IfcFile.cpp @@ -705,6 +705,7 @@ std::optionaldeclaration_by_name(TokenFunc::asStringRef(token_stream_[2])); } catch (const IfcException& ex) { Logger::Message(Logger::LOG_ERROR, std::string(ex.what()) + " at offset " + std::to_string(token_stream_[2].startPos)); + current_id = 0; goto advance; } From d7ac5f24418ebaa6e76dcf98b4f129661f9c5571 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 23 Nov 2025 08:09:13 -0600 Subject: [PATCH 203/657] Fix #7397 - don't delete aggregate if relatingobject is a IfcSpatialElement --- src/bonsai/bonsai/bim/module/aggregate/operator.py | 4 ++++ src/bonsai/bonsai/bim/module/geometry/operator.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/aggregate/operator.py b/src/bonsai/bonsai/bim/module/aggregate/operator.py index 5fa6885335..e94199b208 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/operator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/operator.py @@ -127,6 +127,10 @@ class BIM_OT_aggregate_unassign_object(bpy.types.Operator, tool.Ifc.Operator): # Second pass: delete aggregates that now have no parts deleted_aggregates = [] for aggregate in aggregates_to_check: + # Skip spatial elements - they should not be deleted even if empty + if aggregate.is_a("IfcSpatialElement"): + continue + related_objects = ifcopenshell.util.element.get_parts(aggregate) if len(related_objects) == 0: aggregate_name = aggregate.Name or f"{aggregate.is_a()} #{aggregate.id()}" diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index a27849da31..903473b1b6 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -975,6 +975,10 @@ class OverrideDelete(bpy.types.Operator): except: continue + # Skip spatial elements - they should not be deleted even if empty + if aggregate.is_a("IfcSpatialElement"): + continue + related_objects = ifcopenshell.util.element.get_parts(aggregate) if len(related_objects) == 0: aggregate_name = aggregate.Name or f"{aggregate.is_a()} #{aggregate.id()}" From 3dd7290ee1b160b9f3012d0b73079ad4de4ee086 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sun, 23 Nov 2025 15:43:59 +0100 Subject: [PATCH 204/657] Display default parameters for parametric elements under "Model" in the preferences --- src/bonsai/bonsai/bim/ui.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index e99ed4bb5d..d77ca54223 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -609,12 +609,6 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Colors", self.draw_decorator_colors) bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Directories", self.draw_directories) bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Drawing", self.draw_drawing_settings) - bonsai.bim.helper.draw_expandable_panel( - self.layout, - context, - "Default Parameters", - self.draw_default_parameters, - ) bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Other", self.draw_other_settings) def draw_commands(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: @@ -637,6 +631,12 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): layout.prop(self, "occurrence_name_style") if self.occurrence_name_style == "CUSTOM": layout.prop(self, "occurrence_name_function") + bonsai.bim.helper.draw_expandable_panel( + layout, + context, + "Default Parameters", + self.draw_default_parameters, + ) def draw_directories(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "data_dir") From 592c51b526cbc5edba320bcb35d273c6f7778ccc Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sun, 23 Nov 2025 20:16:27 +0100 Subject: [PATCH 205/657] Add interactive gizmo system for editing parmeterized door Implement visual parameter manipulation in 3D viewport with reusable gizmo components. Features snap-to-mesh (Ctrl), precision mode (Shift), and real-time feedback. Includes cone gizmos for dimensions, arc gizmo for swing direction, and icon gizmos for edit controls. Gizmos are globally are individually toggleable in the addon preferences. May be expanded upon later to add gizmos to other paramaterized elements (window, railing, roof, stairs, array, ...). Unfortunately gizmos can't tap into the builtin snap system or bonsai snap system which is built for modal operators so gizmos implement yet another custom rather naive snap system. --- src/bonsai/bonsai/bim/__init__.py | 12 +- src/bonsai/bonsai/bim/gizmo.py | 770 ++++++++++++++++++ .../bonsai/bim/module/model/__init__.py | 2 + src/bonsai/bonsai/bim/module/model/door.py | 329 +++++++- src/bonsai/bonsai/bim/module/model/prop.py | 8 +- src/bonsai/bonsai/bim/ui.py | 62 ++ 6 files changed, 1174 insertions(+), 9 deletions(-) create mode 100644 src/bonsai/bonsai/bim/gizmo.py diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 68bb5773c5..f7adfb6319 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -21,7 +21,7 @@ import bpy import bpy.utils.previews import importlib from bpy_extras.io_utils import ImportHelper, ExportHelper -from . import handler, ui, prop, operator +from . import handler, ui, prop, operator, gizmo from typing import Union from collections.abc import Callable @@ -148,6 +148,8 @@ classes = [ ui.BIM_UL_clipping_plane, ui.BIM_UL_generic, ui.DocPreferences, + ui.GizmoPreferencesDoor, # Register before GizmoPreferences + ui.GizmoPreferences, # ui.DefaultParameters and ui.BIM_ADDON_preferences are registered separately after modules (see late_classes below) # Tabs panel ui.BIM_PT_tabs, @@ -202,6 +204,14 @@ classes = [ ui.BIM_PT_section_with_cappings, ui.BIM_PT_decorators_overlay, ui.BIM_PT_snappping, + # Gizmos + gizmo.GizmoArrow, + gizmo.GizmoCone, + gizmo.GizmoLock, + gizmo.GizmoArc, + gizmo.GizmoPen, + gizmo.GizmoValidate, + gizmo.GizmoCancel, ] for mod in modules.values(): diff --git a/src/bonsai/bonsai/bim/gizmo.py b/src/bonsai/bonsai/bim/gizmo.py new file mode 100644 index 0000000000..9c9816b03e --- /dev/null +++ b/src/bonsai/bonsai/bim/gizmo.py @@ -0,0 +1,770 @@ +# Bonsai - OpenBIM Blender Add-on +# Copyright (C) 2020, 2021 Dion Moult +# +# This file is part of Bonsai. +# +# Bonsai is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Bonsai 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Bonsai. If not, see . + +""" +Shared gizmo components for reuse across modules. +""" + +import bpy +import math +from typing import Optional, Tuple, List +from mathutils import Vector +from mathutils.bvhtree import BVHTree +from mathutils.geometry import intersect_line_line +from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d +import gpu +from gpu_extras.batch import batch_for_shader + + +SNAP_CIRCLE_SEGMENTS = 16 +SNAP_CIRCLE_RADIUS = 0.1 +SNAP_CIRCLE_COLOR = (1.0, 0.5, 0.0, 1.0) +SNAP_LINE_WIDTH = 3.0 +SNAP_MAX_RADIUS = 10.0 + +ARROW_SHAFT_LENGTH = 0.8 +ARROW_HEAD_LENGTH = 0.2 +ARROW_WIDTH = 0.015 +ARROW_HEAD_WIDTH_MULTIPLIER = 10 +ARROW_CIRCLE_SEGMENTS = 8 + +CONE_LENGTH = 1.0 +CONE_RADIUS = 0.35 +CONE_SEGMENTS = 16 + +ARC_SEGMENTS = 24 +ARC_LINE_WIDTH = 0.015 + +PRECISION_MODE_MULTIPLIER = 0.1 + +class SnapManager: + """Manages snap point visualization and mesh snapping.""" + + def __init__(self): + self._snap_point: Optional[Tuple[float, float, float]] = None + self._draw_handler = None + self._shader = None + + def set_snap_point(self, point: Optional[Tuple[float, float, float]]) -> None: + """Set snap point and register draw handler if needed.""" + self._snap_point = point + if self._draw_handler is None and point is not None: + self._draw_handler = bpy.types.SpaceView3D.draw_handler_add( + self._draw, (), 'WINDOW', 'POST_VIEW' + ) + self._redraw_viewport() + + def clear(self) -> None: + """Clear snap point and unregister handler.""" + self._snap_point = None + if self._draw_handler is not None: + bpy.types.SpaceView3D.draw_handler_remove(self._draw_handler, 'WINDOW') + self._draw_handler = None + self._redraw_viewport() + + def _draw(self) -> None: + """Draw snap point circles.""" + if self._snap_point is None: + return + + if self._shader is None: + self._shader = gpu.shader.from_builtin('UNIFORM_COLOR') + + self._shader.bind() + self._shader.uniform_float("color", SNAP_CIRCLE_COLOR) + gpu.state.line_width_set(SNAP_LINE_WIDTH) + + for plane in ('XY', 'XZ', 'YZ'): + vertices = generate_circle_vertices( + self._snap_point, SNAP_CIRCLE_RADIUS, SNAP_CIRCLE_SEGMENTS, plane + ) + batch = batch_for_shader(self._shader, 'LINE_STRIP', {"pos": vertices}) + batch.draw(self._shader) + + gpu.state.line_width_set(1.0) + + @staticmethod + def _redraw_viewport() -> None: + """Force 3D viewport redraw.""" + for area in bpy.context.screen.areas: + if area.type == 'VIEW_3D': + area.tag_redraw() + + @staticmethod + def snap_to_mesh( + location: Vector, + context: bpy.types.Context, + axis_vector: Vector, + active_obj: bpy.types.Object + ) -> Vector: + """Snap a location to the nearest mesh element if snapping is enabled. + + Args: + location: The world space location to snap + context: The Blender context + axis_vector: The axis direction of the gizmo + active_obj: The active object to exclude from snapping + + Returns: + The snapped location or original location if snapping is disabled + """ + tool_settings = context.scene.tool_settings + + if not tool_settings.use_snap: + return location + + snap_elements = tool_settings.snap_elements_base + + mesh_objects = [ + obj + for obj in context.visible_objects + if obj.type == "MESH" and obj != active_obj and obj.visible_get() + ] + + if not mesh_objects: + return location + + nearby_objects = [] + for obj in mesh_objects: + bbox_corners = [obj.matrix_world @ Vector(corner) for corner in obj.bound_box] + + for corner in bbox_corners: + if (corner - location).length <= SNAP_MAX_RADIUS: + nearby_objects.append(obj) + break + + if not nearby_objects: + return location + + closest_point = None + closest_distance = float("inf") + + for obj in nearby_objects: + if not obj.data.vertices: + continue + + depsgraph = context.evaluated_depsgraph_get() + obj_eval = obj.evaluated_get(depsgraph) + mesh = obj_eval.to_mesh() + + if not mesh.vertices: + obj_eval.to_mesh_clear() + continue + + world_vertices = [obj.matrix_world @ v.co for v in mesh.vertices] + + if 'VERTEX' in snap_elements: + for v_co in world_vertices: + dist = (v_co - location).length + if dist < closest_distance: + closest_distance = dist + closest_point = v_co + + if 'EDGE' in snap_elements: + for edge in mesh.edges: + v1 = world_vertices[edge.vertices[0]] + v2 = world_vertices[edge.vertices[1]] + + edge_vec = v2 - v1 + edge_len_sq = edge_vec.length_squared + + if edge_len_sq > 0: + t = max(0, min(1, (location - v1).dot(edge_vec) / edge_len_sq)) + closest_on_edge = v1 + t * edge_vec + dist = (closest_on_edge - location).length + + if dist < closest_distance: + closest_distance = dist + closest_point = closest_on_edge + + if 'FACE' in snap_elements: + bvh = BVHTree.FromPolygons( + world_vertices, [p.vertices for p in mesh.polygons] + ) + + nearest_loc, normal, index, dist = bvh.find_nearest(location) + + if nearest_loc and dist < closest_distance: + closest_distance = dist + closest_point = nearest_loc + + obj_eval.to_mesh_clear() + + if closest_point and closest_distance < SNAP_MAX_RADIUS: + return closest_point + + return location + + +_snap_manager = SnapManager() + + +def set_snap_point(point: Optional[Tuple[float, float, float]]) -> None: + _snap_manager.set_snap_point(point) + + +def clear_snap_point() -> None: + _snap_manager.clear() + + +def snap_to_mesh( + location: Vector, + context: bpy.types.Context, + axis_vector: Vector, + active_obj: bpy.types.Object +) -> Vector: + return _snap_manager.snap_to_mesh(location, context, axis_vector, active_obj) + + +def generate_circle_vertices( + center: Tuple[float, float, float], + radius: float, + segments: int, + plane: str = 'XY' +) -> List[Tuple[float, float, float]]: + """Generate circle vertices in specified plane. + + Args: + center: (x, y, z) tuple for circle center + radius: Circle radius + segments: Number of segments + plane: 'XY', 'XZ', or 'YZ' + + Returns: + List of (x, y, z) vertices + """ + vertices = [] + for i in range(segments + 1): + angle = (2 * math.pi * i) / segments + cos_a = radius * math.cos(angle) + sin_a = radius * math.sin(angle) + + if plane == 'XY': + vertices.append((center[0] + cos_a, center[1] + sin_a, center[2])) + elif plane == 'XZ': + vertices.append((center[0] + cos_a, center[1], center[2] + sin_a)) + else: + vertices.append((center[0], center[1] + cos_a, center[2] + sin_a)) + + return vertices + + +def create_quarter_circle_arc( + radius: float = 1.0, + segments: int = ARC_SEGMENTS, + direction: str = "LEFT", + line_width: float = ARC_LINE_WIDTH +) -> Tuple[Tuple[float, float, float], ...]: + """Create a quarter circle arc with cross-section thickness for visibility from all angles. + + Args: + radius: Radius of the arc + segments: Number of segments for smoothness + direction: 'LEFT' for counterclockwise (0 to 90°), 'RIGHT' for clockwise (0 to -90°) + line_width: Width of the arc line in both perpendicular directions + + Returns: + Tuple of arc triangles for drawing geometry visible from all angles + """ + half_width = line_width / 2 + + arc_points = [] + if direction == "LEFT": + for i in range(segments + 1): + angle = (math.pi / 2) * (i / segments) + x = radius * math.cos(angle) + y = radius * math.sin(angle) + arc_points.append((x, y)) + else: + for i in range(segments + 1): + angle = (math.pi / 2) * (i / segments) + x = -radius * math.cos(angle) + y = radius * math.sin(angle) + arc_points.append((x, y)) + + arc_triangles = [] + for i in range(len(arc_points) - 1): + x1, y1 = arc_points[i] + x2, y2 = arc_points[i + 1] + + dx, dy = x2 - x1, y2 - y1 + length = (dx**2 + dy**2) ** 0.5 + if length > 0: + px, py = -dy / length * half_width, dx / length * half_width + + arc_triangles.extend([ + (x1 + px, y1 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 + px, y2 + py, 0.0), + ]) + arc_triangles.extend([ + (x2 + px, y2 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 - px, y2 - py, 0.0), + ]) + + arc_triangles.extend([ + (x1, y1, -half_width), + (x2, y2, -half_width), + (x1, y1, +half_width), + ]) + arc_triangles.extend([ + (x1, y1, +half_width), + (x2, y2, -half_width), + (x2, y2, +half_width), + ]) + + return tuple(arc_triangles) + + +class GizmoMovable(bpy.types.Gizmo): + """Base class for movable gizmos with snapping and precision controls. + + This class provides common functionality for gizmos that can be dragged + to modify values, including: + - Snap to mesh support (toggle with Ctrl) + - Precision mode (hold Shift for 10x slower movement) + - Header text with value and modifier hints + - Consistent invoke/exit/modal behavior + """ + + __slots__ = ( + "custom_shape", + "init_value", + "move_get_cb", + "move_set_cb", + "axis", + "local_axis", + "start_location", + "active_obj", + "initial_snap_state", + ) + + def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set: + self.init_value = self.move_get_cb() if self.move_get_cb else 0.0 + self.start_location = self.matrix_basis.translation.copy() + self.active_obj = context.active_object + self.initial_snap_state = context.scene.tool_settings.use_snap + return {"RUNNING_MODAL"} + + def exit(self, context: bpy.types.Context, cancel: bool) -> None: + context.area.header_text_set(None) + if cancel and self.move_set_cb: + self.move_set_cb(self.init_value) + if hasattr(self, "initial_snap_state"): + context.scene.tool_settings.use_snap = self.initial_snap_state + clear_snap_point() + + def get_axis_direction(self) -> Vector: + return self.axis + + def modal(self, context: bpy.types.Context, event: bpy.types.Event, tweak) -> set: + region = context.region + rv3d = context.region_data + tool_settings = context.scene.tool_settings + + tool_settings.use_snap = not self.initial_snap_state if event.ctrl else self.initial_snap_state + + current_coord = (event.mouse_region_x, event.mouse_region_y) + view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) + view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) + + axis_direction = self.get_axis_direction() + + result = intersect_line_line( + view_origin, view_origin + view_direction * 1000, + self.start_location, self.start_location + axis_direction * 1000 + ) + current_3d = result[1] if result else self.start_location + + delta = (current_3d - self.start_location).dot(axis_direction) + + if tool_settings.use_snap and self.active_obj: + snapped_pos = snap_to_mesh(current_3d, context, axis_direction, self.active_obj) + if snapped_pos != current_3d: + delta = (snapped_pos - self.start_location).dot(axis_direction) + set_snap_point(snapped_pos) + else: + clear_snap_point() + else: + clear_snap_point() + + if event.shift: + delta *= PRECISION_MODE_MULTIPLIER + + if self.move_set_cb: + self.move_set_cb(self.init_value + delta) + + self._update_header(context, self.init_value + delta, tool_settings.use_snap, event.shift) + + return {"RUNNING_MODAL"} + + def _update_header( + self, + context: bpy.types.Context, + value: float, + is_snapping: bool, + is_precision: bool + ) -> None: + header_text = f"Value: {value:.3f}m" + hints = [] + if is_snapping: + hints.append("Snapping: ON") + if is_precision: + hints.append("Precision Mode (0.1x)") + hints.extend(["Ctrl: Toggle Snap", "Shift: Precision"]) + + if hints: + header_text += " | " + " | ".join(hints) + context.area.header_text_set(header_text) + + +class GizmoLock(bpy.types.Gizmo): + """Reusable lock icon gizmo that switches between closed and open states.""" + + bl_idname = "VIEW3D_GT_lock" + + __slots__ = ( + "custom_shape_closed", + "custom_shape_open", + "prop_path", + ) + + tris_closed = ( + (0.16803650558, 0.18791499734, 0.0), (-0.07805634290, 0.18791499734, 0.0), (0.16803650558, 0.44701099396, 0.0), + (0.16803650558, 0.44701099396, 0.0), (-0.07805634290, 0.18791499734, 0.0), (-0.07805634290, 0.44701099396, 0.0), + (0.20165449381, 0.13603900373, 0.0), (-0.11167433113, 0.13603900373, 0.0), (0.20165449381, -0.44701099396, 0.0), + (0.20165449381, -0.44701099396, 0.0), (-0.11167433113, 0.13603900373, 0.0), (-0.11167433113, -0.44701099396, 0.0), + (-0.07805634290, 0.18791499734, 0.0), (-0.39353451133, 0.18791499734, 0.0), (-0.07805634290, 0.44701099396, 0.0), + (-0.07805634290, 0.44701099396, 0.0), (-0.39353451133, 0.18791499734, 0.0), (-0.39353451133, 0.30746498704, 0.0), + (-0.44701099396, 0.18791499734, 0.0), (-0.44701099396, -0.04477182776, 0.0), (-0.39353451133, 0.18791499734, 0.0), + (-0.39353451133, 0.18791499734, 0.0), (-0.44701099396, -0.04477182776, 0.0), (-0.39353451133, -0.04477182776, 0.0), + ) + + tris_open = ( + (0.16803650558, 0.18791499734, 0.0), (-0.07805634290, 0.18791499734, 0.0), (0.16803650558, 0.44701099396, 0.0), + (0.16803650558, 0.44701099396, 0.0), (-0.07805634290, 0.18791499734, 0.0), (-0.07805634290, 0.44701099396, 0.0), + (0.20165449381, 0.13603900373, 0.0), (-0.11167433113, 0.13603900373, 0.0), (0.20165449381, -0.44701099396, 0.0), + (0.20165449381, -0.44701099396, 0.0), (-0.11167433113, 0.13603900373, 0.0), (-0.11167433113, -0.44701099396, 0.0), + (0.16803650558, 0.44701099396, 0.0), (-0.07805634290, 0.44701099396, 0.0), (0.16803650558, 0.70610702038, 0.0), + (0.16803650558, 0.70610702038, 0.0), (-0.07805634290, 0.44701099396, 0.0), (-0.07805634290, 0.58656096458, 0.0), + (-0.11167433113, 0.44701099396, 0.0), (-0.11167433113, 0.73432201147, 0.0), (-0.07805634290, 0.44701099396, 0.0), + (-0.07805634290, 0.44701099396, 0.0), (-0.11167433113, 0.73432201147, 0.0), (-0.07805634290, 0.73432201147, 0.0), + ) + + def get_custom_shape(self, context: bpy.types.Context): + obj = context.active_object + if not obj: + return self.custom_shape_closed + + try: + is_open = obj.path_resolve(self.prop_path) + return self.custom_shape_open if is_open else self.custom_shape_closed + except: + return self.custom_shape_closed + + def setup(self) -> None: + self.custom_shape_closed = self.new_custom_shape("TRIS", self.tris_closed) + self.custom_shape_open = self.new_custom_shape("TRIS", self.tris_open) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.get_custom_shape(context)) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.get_custom_shape(context), select_id=select_id) + + +class GizmoArc(bpy.types.Gizmo): + """Reusable quarter circle arc gizmo.""" + + bl_idname = "VIEW3D_GT_arc" + + __slots__ = ( + "custom_shape_left", + "custom_shape_right", + "prop_path", + ) + + def setup(self) -> None: + """Create quarter circle shapes for both LEFT and RIGHT directions.""" + arc_left = create_quarter_circle_arc(radius=1.0, direction="LEFT") + arc_right = create_quarter_circle_arc(radius=1.0, direction="RIGHT") + + self.custom_shape_left = self.new_custom_shape(type="TRIS", verts=arc_left) + self.custom_shape_right = self.new_custom_shape(type="TRIS", verts=arc_right) + + def _get_shape_for_direction(self, context: bpy.types.Context): + obj = context.active_object + if not obj: + return self.custom_shape_left + + try: + direction_value = obj.path_resolve(self.prop_path) + if "RIGHT" in str(direction_value): + return self.custom_shape_right + except: + pass + + return self.custom_shape_left + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self._get_shape_for_direction(context)) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self._get_shape_for_direction(context), select_id=select_id) + + +class GizmoPen(bpy.types.Gizmo): + """Reusable pen/edit icon gizmo for entering edit mode.""" + + bl_idname = "VIEW3D_GT_pen" + + __slots__ = ("custom_shape",) + + tris = ( + (-0.07595771551132202, -0.2948460578918457, 0.0), + (0.16886109113693237, 0.23203276097774506, 0.0), + (0.062240585684776306, 0.28157487511634827, 0.0), + (0.07201281189918518, 0.30260589718818665, 0.0), + (0.21042980253696442, 0.321493536233902, 0.0), + (0.17863331735134125, 0.25306373834609985, 0.0), + (0.062240585684776306, 0.28157487511634827, 0.0), + (-0.1825782209634781, -0.2453039139509201, 0.0), + (-0.07595771551132202, -0.2948460578918457, 0.0), + (-0.1825782209634781, -0.2453039139509201, 0.0), + (-0.19114767014980316, -0.4032624065876007, 0.0), + (-0.07595771551132202, -0.2948460578918457, 0.0), + (0.07201281189918518, 0.30260589718818665, 0.0), + (0.10380929708480835, 0.371035635471344, 0.0), + (0.21042980253696442, 0.321493536233902, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoValidate(bpy.types.Gizmo): + """Reusable validate/checkmark icon gizmo for confirming edits.""" + + bl_idname = "VIEW3D_GT_validate" + + __slots__ = ("custom_shape",) + + tris = ( + (0.36775994300842285, 0.205583393573761, 0.0), + (0.030080009251832962, -0.1881658434867859, 0.0), + (0.030080009251832962, -0.3380376696586609, 0.0), + (-0.22017201781272888, -0.16090886294841766, 0.0), + (0.030080009251832962, -0.1881658434867859, 0.0), + (-0.22017201781272888, -0.011037036776542664, 0.0), + (0.36775994300842285, 0.205583393573761, 0.0), + (0.36775994300842285, 0.355455219745636, 0.0), + (0.030080009251832962, -0.1881658434867859, 0.0), + (-0.22017201781272888, -0.16090886294841766, 0.0), + (0.030080009251832962, -0.3380376696586609, 0.0), + (0.030080009251832962, -0.1881658434867859, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoCancel(bpy.types.Gizmo): + """Reusable cancel/X icon gizmo for canceling edits.""" + + bl_idname = "VIEW3D_GT_cancel" + + __slots__ = ("custom_shape",) + + tris = ( + (0.0, 0.048707593232393265, 0.0), + (0.0, -0.048707593232393265, 0.0), + (0.048707593232393265, 0.0, 0.0), + (0.0, 0.048707593232393265, 0.0), + (-0.21918421983718872, 0.2678918242454529, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (-0.21918421983718872, 0.2678918242454529, 0.0), + (-0.2678918242454529, 0.21918421983718872, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (-0.2678918242454529, -0.21918421983718872, 0.0), + (-0.21918421983718872, -0.2678918242454529, 0.0), + (0.2678918242454529, 0.21918421983718872, 0.0), + (0.21918421983718872, 0.2678918242454529, 0.0), + (0.0, 0.048707593232393265, 0.0), + (0.21918421983718872, -0.2678918242454529, 0.0), + (0.2678918242454529, -0.21918421983718872, 0.0), + (0.048707593232393265, 0.0, 0.0), + (0.048707593232393265, 0.0, 0.0), + (0.2678918242454529, 0.21918421983718872, 0.0), + (0.0, 0.048707593232393265, 0.0), + (0.0, 0.048707593232393265, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (0.0, -0.048707593232393265, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (-0.21918421983718872, -0.2678918242454529, 0.0), + (0.0, -0.048707593232393265, 0.0), + (0.0, -0.048707593232393265, 0.0), + (0.21918421983718872, -0.2678918242454529, 0.0), + (0.048707593232393265, 0.0, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoArrow(GizmoMovable): + """Arrow gizmo for directional value editing.""" + + bl_idname = "BIM_GT_gizmo_arrow" + bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) + + def _get_arrow_triangles(self) -> Tuple[Tuple[float, float, float], ...]: + """Generate arrow geometry along +X axis.""" + triangles = [] + + triangles.extend([ + (0, -ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), + (0, +ARROW_WIDTH, 0), + ]) + triangles.extend([ + (0, +ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, +ARROW_WIDTH, 0), + ]) + + triangles.extend([ + (0, 0, -ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), + (0, 0, +ARROW_WIDTH), + ]) + triangles.extend([ + (0, 0, +ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, +ARROW_WIDTH), + ]) + + head_width = ARROW_WIDTH * ARROW_HEAD_WIDTH_MULTIPLIER + triangles.extend([ + (ARROW_SHAFT_LENGTH, -head_width, 0), + (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, +head_width, 0), + ]) + + triangles.extend([ + (ARROW_SHAFT_LENGTH, 0, -head_width), + (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, 0, +head_width), + ]) + + for i in range(ARROW_CIRCLE_SEGMENTS): + angle1 = (2 * math.pi * i) / ARROW_CIRCLE_SEGMENTS + angle2 = (2 * math.pi * (i + 1)) / ARROW_CIRCLE_SEGMENTS + + y1 = head_width * math.cos(angle1) + z1 = head_width * math.sin(angle1) + y2 = head_width * math.cos(angle2) + z2 = head_width * math.sin(angle2) + + triangles.extend([ + (ARROW_SHAFT_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, y1, z1), + (ARROW_SHAFT_LENGTH, y2, z2), + ]) + + return tuple(triangles) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self._get_arrow_triangles()) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoCone(GizmoMovable): + """Cone gizmo for directional value editing with local axis support.""" + + bl_idname = "BIM_GT_gizmo_cone" + bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) + + def get_axis_direction(self) -> Vector: + if hasattr(self, "local_axis") and self.active_obj: + obj_rotation = self.active_obj.matrix_world.to_3x3() + axis_direction = obj_rotation @ self.local_axis + axis_direction.normalize() + return axis_direction + return self.axis + + def _get_cone_triangles(self) -> Tuple[Tuple[float, float, float], ...]: + """Generate cone geometry along +X axis.""" + triangles = [] + cone_tip_x = CONE_LENGTH + + for i in range(CONE_SEGMENTS): + angle1 = (2 * math.pi * i) / CONE_SEGMENTS + angle2 = (2 * math.pi * (i + 1)) / CONE_SEGMENTS + + y1 = CONE_RADIUS * math.cos(angle1) + z1 = CONE_RADIUS * math.sin(angle1) + y2 = CONE_RADIUS * math.cos(angle2) + z2 = CONE_RADIUS * math.sin(angle2) + + triangles.extend([ + (cone_tip_x, 0, 0), + (0, y1, z1), + (0, y2, z2), + ]) + + triangles.extend([ + (0, 0, 0), + (0, y2, z2), + (0, y1, z1), + ]) + + return tuple(triangles) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self._get_cone_triangles()) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index fa9ce7cafa..dd4bfc0c3b 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -178,6 +178,8 @@ classes = ( door.FinishEditingDoor, door.EnableEditingDoor, door.RemoveDoor, + door.ToggleDoorSwing, + door.GizmoDoorEdition, railing.BIM_OT_add_railing, railing.CopyRailingParameters, railing.AddRailing, diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index d73a16deff..945cb64687 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -34,6 +34,7 @@ import bonsai.core.geometry as core import bonsai.core.root from bonsai.bim.module.model.window import create_bm_window, create_bm_box +import math from mathutils import Vector, Matrix from typing import Union, Any, Optional @@ -278,7 +279,7 @@ def create_bm_door_lining( new_faces = [bm.faces.new([new_verts[vi] for vi in face[1]]) for face in faces] extruded = bmesh.ops.extrude_face_region(bm, geom=new_faces) - extrusion_vector = Vector((0, 1, 0)) * depth + extrusion_vector = V_(0, 1, 0) * depth translate_verts = [v for v in extruded["geom"] if isinstance(v, bmesh.types.BMVert)] bmesh.ops.translate(bm, vec=extrusion_vector, verts=translate_verts) @@ -487,10 +488,10 @@ class BIM_OT_add_door(bpy.types.Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} @classmethod - def poll(cls, context): + def poll(cls, context: bpy.types.Context) -> bool: return tool.Ifc.get() and context.mode == "OBJECT" - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: ifc_file = tool.Ifc.get() if not ifc_file: self.report({"ERROR"}, "You need to start IFC project first to create a door.") @@ -553,7 +554,7 @@ class AddDoor(bpy.types.Operator, tool.Ifc.Operator): ) update_door_modifier_representation(obj) - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: for obj in tool.Blender.get_selected_objects(): if not tool.Blender.Modifier.is_eligible_for_door_modifier(obj): continue @@ -564,6 +565,7 @@ class AddDoor(bpy.types.Operator, tool.Ifc.Operator): class CancelEditingDoor(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.cancel_editing_door" bl_label = "Cancel Editing Door on Selected Objects" + bl_description = "Cancel editing and revert door parameters to their previous values" bl_options = {"REGISTER", "UNDO"} def cancel_editing_door_on_object(self, obj: bpy.types.Object) -> None: @@ -598,6 +600,7 @@ class CancelEditingDoor(bpy.types.Operator, tool.Ifc.Operator): class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.finish_editing_door" bl_label = "Finish Editing Door on Selected Objects" + bl_description = "Apply changes and finish editing door parameters" bl_options = {"REGISTER", "UNDO"} def finish_editing_door_on_object(self, obj): @@ -634,6 +637,7 @@ class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator): class EnableEditingDoor(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_door" bl_label = "Enable Editing Door on Selected Objects" + bl_description = "Enter edit mode to modify door parameters interactively" bl_options = {"REGISTER", "UNDO"} def edit_door_on_obj(self, obj): @@ -677,3 +681,320 @@ class RemoveDoor(bpy.types.Operator, tool.Ifc.Operator): for obj in tool.Blender.get_selected_objects(): self.remove_door_on_object(obj) return {"FINISHED"} + + +class ToggleDoorSwing(bpy.types.Operator, tool.Ifc.Operator): + """Toggle door swing direction between LEFT and RIGHT""" + + bl_idname = "bim.toggle_door_swing" + bl_label = "Toggle Door Swing" + bl_options = {"REGISTER", "UNDO"} + + def _execute(self, context): + obj = tool.Blender.get_active_object() + if not obj: + return {"CANCELLED"} + + element = tool.Ifc.get_entity(obj) + if not element or not tool.Blender.Modifier.is_door(element): + return {"CANCELLED"} + + props = tool.Model.get_door_props(obj) + current_type = props.door_type + + if "LEFT" in current_type: + props.door_type = current_type.replace("LEFT", "RIGHT") + elif "RIGHT" in current_type: + props.door_type = current_type.replace("RIGHT", "LEFT") + + return {"FINISHED"} + + +class GizmoDoorEdition(bpy.types.GizmoGroup): + bl_idname = "OBJECT_GGT_bim_door_edition" + bl_label = "Door Editing Gizmo" + bl_space_type = "VIEW_3D" + bl_region_type = "WINDOW" + bl_options = {"3D", "PERSISTENT"} + + COLOR_RED = (1.0, 0.2, 0.2) + COLOR_GREEN = (0.1, 0.8, 0.1) + COLOR_BLUE = (0.2, 0.2, 1.0) + ARROW_SCALE = 0.25 + + @classmethod + def get_arrow_color_from_axis(cls, axis): + """Get arrow color based on axis direction (X=red, Y=green, Z=blue).""" + if axis[0] != 0: + return cls.COLOR_RED + elif axis[1] != 0: + return cls.COLOR_GREEN + else: + return cls.COLOR_BLUE + gizmo_props = [ + {"attr_name": "overall_height", "axis": (0, 0, 1)}, + {"attr_name": "overall_width", "axis": (1, 0, 0)}, + {"attr_name": "threshold_thickness", "axis": (0, 0, 1)}, + {"attr_name": "threshold_depth", "axis": (0, 1, 0)}, + {"attr_name": "lining_depth", "axis": (0, 1, 0)}, + {"attr_name": "lining_thickness", "axis": (1, 0, 0)}, + {"attr_name": "transom_offset", "axis": (0, 0, 1)}, + {"attr_name": "transom_thickness", "axis": (0, 0, 1)}, + ] + + @classmethod + def poll(cls, context): + """Show gizmo only when a single door object is selected and active.""" + prefs = tool.Blender.get_addon_preferences() + if not prefs.gizmos.draw_gizmos_in_3d_viewport: + return False + + obj = tool.Blender.get_active_object(is_selected=True) + if not obj: + return False + + if len(tool.Blender.get_selected_objects()) != 1: + return False + + element = tool.Ifc.get_entity(obj) + if not element or not tool.Blender.Modifier.is_door(element): + return False + return True + + def get_axis_rotation_matrix(self, axis): + """Get rotation matrix to align arrow (default +X direction) with the given axis. + + Args: + axis: Tuple of (x, y, z) representing the target axis direction + + Returns: + Rotation matrix to align arrow with the axis + """ + axis_vec = V_(*axis).normalized() + default_dir = V_(1, 0, 0) + return default_dir.rotation_difference(axis_vec).to_matrix().to_4x4() + + def get_gizmo_matrix_overall_height(self, props): + translation = Matrix.Translation(V_(props.overall_width - 0.05, 0.0, props.overall_height)) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def get_gizmo_matrix_overall_width(self, props): + translation = Matrix.Translation(V_(props.overall_width, 0.0, props.overall_height - 0.05)) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_threshold_thickness(self, props): + translation = Matrix.Translation( + V_( + props.overall_width / 2, + props.threshold_offset + props.threshold_depth / 2, + props.threshold_thickness, + ) + ) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def get_gizmo_matrix_threshold_depth(self, props): + translation = Matrix.Translation( + V_(props.overall_width / 2, props.threshold_depth, props.threshold_thickness / 2) + ) + rotation = self.get_axis_rotation_matrix((0, 1, 0)) + return translation @ rotation + + def get_gizmo_matrix_lining_depth(self, props): + translation = Matrix.Translation( + V_(props.overall_width / 2, props.lining_depth + props.lining_offset, props.overall_height) + ) + rotation = self.get_axis_rotation_matrix((0, 1, 0)) + return translation @ rotation + + def get_gizmo_matrix_lining_thickness(self, props): + translation = Matrix.Translation( + V_(props.lining_thickness, props.lining_depth / 2 + props.lining_offset, props.overall_height / 2) + ) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_transom_offset(self, props): + translation = Matrix.Translation(V_(props.overall_width / 2, 0.0, props.transom_offset)) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def get_gizmo_matrix_transom_thickness(self, props): + translation = Matrix.Translation( + V_(props.overall_width / 2, 0.0, props.transom_offset + props.transom_thickness) + ) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def setup(self, context): + prefs = tool.Blender.get_addon_preferences() + default_color = prefs.decorations_colour[:3] + highlight_color = prefs.decorator_color_selected[:3] + inactive_color = prefs.decorator_color_background[:3] + special_color = prefs.decorator_color_special[:3] + + def add_gizmo_prop(prop_config): + attr_name = prop_config["attr_name"] + gizmo = self.gizmos.new("BIM_GT_gizmo_cone") + + def move_get(): + obj = bpy.context.active_object + if not obj: + return 0.0 + props = tool.Model.get_door_props(obj) + return getattr(props, attr_name) + + def move_set(value): + obj = bpy.context.active_object + if not obj: + return + props = tool.Model.get_door_props(obj) + setattr(props, attr_name, max(0.0, value)) + + # Set callbacks on the gizmo instance + gizmo.move_get_cb = move_get + gizmo.move_set_cb = move_set + gizmo.axis = V_(*prop_config["axis"]) + gizmo.local_axis = V_(*prop_config["axis"]) + + gizmo.color = self.get_arrow_color_from_axis(prop_config["axis"]) + gizmo.color_highlight = highlight_color + gizmo.alpha = 0.99 + gizmo.use_draw_modal = True + gizmo.use_draw_scale = True + + setattr(self, f"gizmo_{attr_name}", gizmo) + + for prop_config in self.gizmo_props: + add_gizmo_prop(prop_config) + + self.gizmo_door_type = self.gizmos.new("VIEW3D_GT_arc") + self.gizmo_door_type.use_draw_scale = False + self.gizmo_door_type.color = special_color + self.gizmo_door_type.alpha = 0.5 + self.gizmo_door_type.color_highlight = highlight_color + self.gizmo_door_type.prop_path = "BIMDoorProperties.door_type" + self.gizmo_door_type.target_set_operator("bim.toggle_door_swing") + + # Flip arc gizmo - mirrors the swing arc along X axis, flips door when clicked + self.gizmo_flip_arc = self.gizmos.new("VIEW3D_GT_arc") + self.gizmo_flip_arc.use_draw_scale = False + self.gizmo_flip_arc.color = inactive_color + self.gizmo_flip_arc.alpha = 0.5 + self.gizmo_flip_arc.color_highlight = highlight_color + self.gizmo_flip_arc.prop_path = "BIMDoorProperties.door_type" + op = self.gizmo_flip_arc.target_set_operator("bim.flip_object") + op.flip_local_axes = "XY" + + self.pen_gizmo = self.gizmos.new("VIEW3D_GT_pen") + self.pen_gizmo.use_draw_scale = False + self.pen_gizmo.color = default_color + self.pen_gizmo.color_highlight = highlight_color + self.pen_gizmo.alpha = 0.8 + self.pen_gizmo.target_set_operator("bim.enable_editing_door") + + self.validate_gizmo = self.gizmos.new("VIEW3D_GT_validate") + self.validate_gizmo.use_draw_scale = False + self.validate_gizmo.color = self.COLOR_GREEN + self.validate_gizmo.color_highlight = highlight_color + self.validate_gizmo.alpha = 0.8 + self.validate_gizmo.target_set_operator("bim.finish_editing_door") + + self.cancel_gizmo = self.gizmos.new("VIEW3D_GT_cancel") + self.cancel_gizmo.use_draw_scale = False + self.cancel_gizmo.color = self.COLOR_RED + self.cancel_gizmo.color_highlight = highlight_color + self.cancel_gizmo.alpha = 0.8 + self.cancel_gizmo.target_set_operator("bim.cancel_editing_door") + + def refresh(self, context): + obj = context.active_object + if not obj: + return + + props = tool.Model.get_door_props(obj) + mw = obj.matrix_world + self.update_arrows(mw, props) + self.update_swing_gizmo(mw, props) + self.update_editing_gizmos(mw, props) + + def update_arrows(self, mw, props): + """Update arrow gizmos position and visibility based on editing state.""" + prefs = tool.Blender.get_addon_preferences() + door_gizmo_prefs = prefs.gizmos.door + + for prop_config in self.gizmo_props: + attr_name = prop_config["attr_name"] + gizmo = getattr(self, f"gizmo_{attr_name}", None) + if gizmo is None: + continue + + if not getattr(door_gizmo_prefs, attr_name, True): + gizmo.hide = True + continue + + if ( + not props.is_editing + or (attr_name == "threshold_depth" and props.threshold_thickness == 0.0) + or (attr_name == "transom_offset" and props.transom_thickness == 0.0) + ): + gizmo.hide = True + continue + + # Update position and show arrow when editing + gizmo.hide = False + matrix_method = getattr(self, f"get_gizmo_matrix_{attr_name}", None) + if matrix_method: + gizmo.matrix_basis = mw @ matrix_method(props) + gizmo.matrix_offset = Matrix.Scale(self.ARROW_SCALE, 4) + + def update_swing_gizmo(self, mw, props): + """Update swing gizmo position and color based on editing state.""" + prefs = tool.Blender.get_addon_preferences() + door_gizmo_prefs = prefs.gizmos.door + + self.gizmo_door_type.hide = not props.is_editing or not door_gizmo_prefs.swing_arc + self.gizmo_flip_arc.hide = not props.is_editing or not door_gizmo_prefs.flip_arc + + # If both are hidden, no need to calculate transforms + if self.gizmo_door_type.hide and self.gizmo_flip_arc.hide: + return + + # Calculate base swing transformation (common to both arcs) + swing_x_offset = props.overall_width if "RIGHT" in props.door_type else 0.0 + base_swing_transform = Matrix.Translation(V_(swing_x_offset, 0, 0)) @ Matrix.Scale(props.overall_width, 4) + + if not self.gizmo_door_type.hide: + self.gizmo_door_type.matrix_basis = mw @ base_swing_transform + self.gizmo_door_type.color = prefs.decorations_colour[:3] + + if not self.gizmo_flip_arc.hide: + mirror_x = Matrix.Scale(-1, 4, (0, 1, 0)) + self.gizmo_flip_arc.matrix_basis = mw @ base_swing_transform @ mirror_x + + def update_editing_gizmos(self, mw, props): + """Update editing control gizmos (pen/validate/cancel) visibility and position.""" + + icon_z = props.overall_height + 0.5 + local_transform = ( + Matrix.Translation(V_(0, 0.0, icon_z)) + @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + @ Matrix.Scale(0.5, 4) + ) + icon_matrix_base = mw @ local_transform + + if props.is_editing: + self.pen_gizmo.hide = True + self.validate_gizmo.hide = False + self.validate_gizmo.matrix_basis = icon_matrix_base + self.cancel_gizmo.hide = False + cancel_local = Matrix.Translation(V_(0.5, 0.0, 0.0)) @ local_transform + self.cancel_gizmo.matrix_basis = mw @ cancel_local + + else: + self.pen_gizmo.hide = False + self.pen_gizmo.matrix_basis = icon_matrix_base + self.validate_gizmo.hide = True + self.cancel_gizmo.hide = True diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index dc9285114e..303ce43d41 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -928,14 +928,14 @@ class BIMDoorProperties(PropertyGroup): lining_depth: bpy.props.FloatProperty( name="Lining Depth", default=0.050, - min=0, + min=0.001, subtype="DISTANCE", update=update_door, ) lining_thickness: bpy.props.FloatProperty( name="Lining Thickness", default=0.050, - min=0, + min=0.001, subtype="DISTANCE", update=update_door, ) @@ -983,7 +983,7 @@ class BIMDoorProperties(PropertyGroup): casing_depth: bpy.props.FloatProperty( name="Casing Depth", default=0.005, - min=0, + min=0.001, subtype="DISTANCE", update=update_door, ) @@ -999,7 +999,7 @@ class BIMDoorProperties(PropertyGroup): threshold_depth: bpy.props.FloatProperty( name="Threshold Depth", default=0.1, - min=0, + min=0.001, subtype="DISTANCE", update=update_door, ) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index d77ca54223..3372808fcf 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -242,6 +242,48 @@ class BIM_UL_generic(bpy.types.UIList): layout.label(text="", translate=False) +class GizmoPreferencesDoor(bpy.types.PropertyGroup): + """Property group for door gizmo visibility settings.""" + + overall_height: BoolProperty(name="Overall Height", default=True) + overall_width: BoolProperty(name="Overall Width", default=True) + threshold_thickness: BoolProperty(name="Threshold Thickness", default=True) + threshold_depth: BoolProperty(name="Threshold Depth", default=True) + lining_depth: BoolProperty(name="Lining Depth", default=True) + lining_thickness: BoolProperty(name="Lining Thickness", default=True) + transom_offset: BoolProperty(name="Transom Offset", default=True) + transom_thickness: BoolProperty(name="Transom Thickness", default=True) + swing_arc: BoolProperty(name="Swing Arc", default=True, description="Show door swing direction arc") + flip_arc: BoolProperty(name="Flip Arc", default=True, description="Show flip door orientation arc") + + if TYPE_CHECKING: + overall_height: bool + overall_width: bool + threshold_thickness: bool + threshold_depth: bool + lining_depth: bool + lining_thickness: bool + transom_offset: bool + transom_thickness: bool + swing_arc: bool + flip_arc: bool + + +class GizmoPreferences(bpy.types.PropertyGroup): + """Property group for all gizmo visibility settings.""" + + draw_gizmos_in_3d_viewport: BoolProperty( + name="Draw Gizmos In 3D Viewport", + default=True, + description="Show interactive gizmos in the 3D viewport for parametric elements", + ) + door: bpy.props.PointerProperty(type=GizmoPreferencesDoor) + + if TYPE_CHECKING: + draw_gizmos_in_3d_viewport: bool + door: GizmoPreferencesDoor + + class DocPreferences(bpy.types.PropertyGroup): sheets_dir: StringProperty( default=os.path.join("sheets") + os.path.sep, @@ -515,6 +557,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): name="Occurrence Name Function", description="Code that will be evaluated to generate occurrence name for CUSTOM occurrence name style", ) + gizmos: bpy.props.PointerProperty(type=GizmoPreferences) def update_data_dir(self, context: bpy.types.Context) -> None: import bonsai.bim.schema @@ -580,6 +623,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): should_always_cache: bool occurrence_name_style: Literal["CLASS", "TYPE", "CUSTOM"] occurrence_name_function: str + gizmos: GizmoPreferences data_dir: str cache_dir: str pset_dir: str @@ -627,6 +671,24 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): layout.prop(self, "should_use_snap") layout.prop(self, "should_play_chaching_sound") + layout.prop(self.gizmos, "draw_gizmos_in_3d_viewport") + if self.gizmos.draw_gizmos_in_3d_viewport: + bonsai.bim.helper.draw_expandable_panel( + layout, + context, + "Gizmos Parameters", + self.draw_gizmo_parameters, + ) + + def draw_gizmo_parameters(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + box = layout.box() + bonsai.bim.helper.draw_expandable_panel(box, context, "Parametric Door", self.draw_door_gizmo_parameters) + + def draw_door_gizmo_parameters(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + door_gizmos = self.gizmos.door + for prop in door_gizmos.__annotations__: + layout.prop(door_gizmos, prop) + def draw_model_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "occurrence_name_style") if self.occurrence_name_style == "CUSTOM": From 97a501036b43ef432ec511f332978bb40d77e68a Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 23 Nov 2025 18:22:40 -0600 Subject: [PATCH 206/657] Have dimensions like `4' - 1/2"` read like `4' - 0 1/2"`, as is more the convention. --- src/ifcopenshell-python/ifcopenshell/util/unit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/unit.py b/src/ifcopenshell-python/ifcopenshell/util/unit.py index a364ed2467..cc767fe3a7 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/unit.py +++ b/src/ifcopenshell-python/ifcopenshell/util/unit.py @@ -773,8 +773,9 @@ def format_length( if output_unit == "foot": return f"{feet}' - {whole} {remainder}/{frac.denominator}\"" return f'{(feet * 12) + whole} {remainder}/{frac.denominator}"' + # When we have a proper fraction (numerator < denominator), show "0 frac" if output_unit == "foot": - return f"{feet}' - {frac.numerator}/{frac.denominator}\"" + return f"{feet}' - 0 {frac.numerator}/{frac.denominator}\"" return f'{feet * 12} {frac.numerator}/{frac.denominator}"' elif unit_system == "metric": rounded_val = round(value / precision) * precision From 497ebc55e7acd2c28afe897f5f741f53516e2a97 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 24 Nov 2025 10:59:03 +0500 Subject: [PATCH 207/657] black . --- src/bonsai/bonsai/bim/gizmo.py | 291 ++++++++++-------- .../bonsai/bim/module/aggregate/operator.py | 2 +- .../bonsai/bim/module/drawing/decoration.py | 13 +- .../bonsai/bim/module/drawing/helper.py | 34 +- src/bonsai/bonsai/bim/module/model/door.py | 1 + src/bonsai/bonsai/bim/module/model/ui.py | 4 +- src/bonsai/bonsai/tool/drawing.py | 4 +- 7 files changed, 191 insertions(+), 158 deletions(-) diff --git a/src/bonsai/bonsai/bim/gizmo.py b/src/bonsai/bonsai/bim/gizmo.py index 9c9816b03e..cdd5fe02a4 100644 --- a/src/bonsai/bonsai/bim/gizmo.py +++ b/src/bonsai/bonsai/bim/gizmo.py @@ -52,6 +52,7 @@ ARC_LINE_WIDTH = 0.015 PRECISION_MODE_MULTIPLIER = 0.1 + class SnapManager: """Manages snap point visualization and mesh snapping.""" @@ -64,16 +65,14 @@ class SnapManager: """Set snap point and register draw handler if needed.""" self._snap_point = point if self._draw_handler is None and point is not None: - self._draw_handler = bpy.types.SpaceView3D.draw_handler_add( - self._draw, (), 'WINDOW', 'POST_VIEW' - ) + self._draw_handler = bpy.types.SpaceView3D.draw_handler_add(self._draw, (), "WINDOW", "POST_VIEW") self._redraw_viewport() def clear(self) -> None: """Clear snap point and unregister handler.""" self._snap_point = None if self._draw_handler is not None: - bpy.types.SpaceView3D.draw_handler_remove(self._draw_handler, 'WINDOW') + bpy.types.SpaceView3D.draw_handler_remove(self._draw_handler, "WINDOW") self._draw_handler = None self._redraw_viewport() @@ -83,17 +82,15 @@ class SnapManager: return if self._shader is None: - self._shader = gpu.shader.from_builtin('UNIFORM_COLOR') + self._shader = gpu.shader.from_builtin("UNIFORM_COLOR") self._shader.bind() self._shader.uniform_float("color", SNAP_CIRCLE_COLOR) gpu.state.line_width_set(SNAP_LINE_WIDTH) - for plane in ('XY', 'XZ', 'YZ'): - vertices = generate_circle_vertices( - self._snap_point, SNAP_CIRCLE_RADIUS, SNAP_CIRCLE_SEGMENTS, plane - ) - batch = batch_for_shader(self._shader, 'LINE_STRIP', {"pos": vertices}) + for plane in ("XY", "XZ", "YZ"): + vertices = generate_circle_vertices(self._snap_point, SNAP_CIRCLE_RADIUS, SNAP_CIRCLE_SEGMENTS, plane) + batch = batch_for_shader(self._shader, "LINE_STRIP", {"pos": vertices}) batch.draw(self._shader) gpu.state.line_width_set(1.0) @@ -102,15 +99,12 @@ class SnapManager: def _redraw_viewport() -> None: """Force 3D viewport redraw.""" for area in bpy.context.screen.areas: - if area.type == 'VIEW_3D': + if area.type == "VIEW_3D": area.tag_redraw() @staticmethod def snap_to_mesh( - location: Vector, - context: bpy.types.Context, - axis_vector: Vector, - active_obj: bpy.types.Object + location: Vector, context: bpy.types.Context, axis_vector: Vector, active_obj: bpy.types.Object ) -> Vector: """Snap a location to the nearest mesh element if snapping is enabled. @@ -131,9 +125,7 @@ class SnapManager: snap_elements = tool_settings.snap_elements_base mesh_objects = [ - obj - for obj in context.visible_objects - if obj.type == "MESH" and obj != active_obj and obj.visible_get() + obj for obj in context.visible_objects if obj.type == "MESH" and obj != active_obj and obj.visible_get() ] if not mesh_objects: @@ -168,14 +160,14 @@ class SnapManager: world_vertices = [obj.matrix_world @ v.co for v in mesh.vertices] - if 'VERTEX' in snap_elements: + if "VERTEX" in snap_elements: for v_co in world_vertices: dist = (v_co - location).length if dist < closest_distance: closest_distance = dist closest_point = v_co - if 'EDGE' in snap_elements: + if "EDGE" in snap_elements: for edge in mesh.edges: v1 = world_vertices[edge.vertices[0]] v2 = world_vertices[edge.vertices[1]] @@ -192,10 +184,8 @@ class SnapManager: closest_distance = dist closest_point = closest_on_edge - if 'FACE' in snap_elements: - bvh = BVHTree.FromPolygons( - world_vertices, [p.vertices for p in mesh.polygons] - ) + if "FACE" in snap_elements: + bvh = BVHTree.FromPolygons(world_vertices, [p.vertices for p in mesh.polygons]) nearest_loc, normal, index, dist = bvh.find_nearest(location) @@ -223,19 +213,13 @@ def clear_snap_point() -> None: def snap_to_mesh( - location: Vector, - context: bpy.types.Context, - axis_vector: Vector, - active_obj: bpy.types.Object + location: Vector, context: bpy.types.Context, axis_vector: Vector, active_obj: bpy.types.Object ) -> Vector: return _snap_manager.snap_to_mesh(location, context, axis_vector, active_obj) def generate_circle_vertices( - center: Tuple[float, float, float], - radius: float, - segments: int, - plane: str = 'XY' + center: Tuple[float, float, float], radius: float, segments: int, plane: str = "XY" ) -> List[Tuple[float, float, float]]: """Generate circle vertices in specified plane. @@ -254,9 +238,9 @@ def generate_circle_vertices( cos_a = radius * math.cos(angle) sin_a = radius * math.sin(angle) - if plane == 'XY': + if plane == "XY": vertices.append((center[0] + cos_a, center[1] + sin_a, center[2])) - elif plane == 'XZ': + elif plane == "XZ": vertices.append((center[0] + cos_a, center[1], center[2] + sin_a)) else: vertices.append((center[0], center[1] + cos_a, center[2] + sin_a)) @@ -265,10 +249,7 @@ def generate_circle_vertices( def create_quarter_circle_arc( - radius: float = 1.0, - segments: int = ARC_SEGMENTS, - direction: str = "LEFT", - line_width: float = ARC_LINE_WIDTH + radius: float = 1.0, segments: int = ARC_SEGMENTS, direction: str = "LEFT", line_width: float = ARC_LINE_WIDTH ) -> Tuple[Tuple[float, float, float], ...]: """Create a quarter circle arc with cross-section thickness for visibility from all angles. @@ -307,27 +288,35 @@ def create_quarter_circle_arc( if length > 0: px, py = -dy / length * half_width, dx / length * half_width - arc_triangles.extend([ - (x1 + px, y1 + py, 0.0), - (x1 - px, y1 - py, 0.0), - (x2 + px, y2 + py, 0.0), - ]) - arc_triangles.extend([ - (x2 + px, y2 + py, 0.0), - (x1 - px, y1 - py, 0.0), - (x2 - px, y2 - py, 0.0), - ]) + arc_triangles.extend( + [ + (x1 + px, y1 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 + px, y2 + py, 0.0), + ] + ) + arc_triangles.extend( + [ + (x2 + px, y2 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 - px, y2 - py, 0.0), + ] + ) - arc_triangles.extend([ - (x1, y1, -half_width), - (x2, y2, -half_width), - (x1, y1, +half_width), - ]) - arc_triangles.extend([ - (x1, y1, +half_width), - (x2, y2, -half_width), - (x2, y2, +half_width), - ]) + arc_triangles.extend( + [ + (x1, y1, -half_width), + (x2, y2, -half_width), + (x1, y1, +half_width), + ] + ) + arc_triangles.extend( + [ + (x1, y1, +half_width), + (x2, y2, -half_width), + (x2, y2, +half_width), + ] + ) return tuple(arc_triangles) @@ -387,8 +376,10 @@ class GizmoMovable(bpy.types.Gizmo): axis_direction = self.get_axis_direction() result = intersect_line_line( - view_origin, view_origin + view_direction * 1000, - self.start_location, self.start_location + axis_direction * 1000 + view_origin, + view_origin + view_direction * 1000, + self.start_location, + self.start_location + axis_direction * 1000, ) current_3d = result[1] if result else self.start_location @@ -414,13 +405,7 @@ class GizmoMovable(bpy.types.Gizmo): return {"RUNNING_MODAL"} - def _update_header( - self, - context: bpy.types.Context, - value: float, - is_snapping: bool, - is_precision: bool - ) -> None: + def _update_header(self, context: bpy.types.Context, value: float, is_snapping: bool, is_precision: bool) -> None: header_text = f"Value: {value:.3f}m" hints = [] if is_snapping: @@ -446,25 +431,57 @@ class GizmoLock(bpy.types.Gizmo): ) tris_closed = ( - (0.16803650558, 0.18791499734, 0.0), (-0.07805634290, 0.18791499734, 0.0), (0.16803650558, 0.44701099396, 0.0), - (0.16803650558, 0.44701099396, 0.0), (-0.07805634290, 0.18791499734, 0.0), (-0.07805634290, 0.44701099396, 0.0), - (0.20165449381, 0.13603900373, 0.0), (-0.11167433113, 0.13603900373, 0.0), (0.20165449381, -0.44701099396, 0.0), - (0.20165449381, -0.44701099396, 0.0), (-0.11167433113, 0.13603900373, 0.0), (-0.11167433113, -0.44701099396, 0.0), - (-0.07805634290, 0.18791499734, 0.0), (-0.39353451133, 0.18791499734, 0.0), (-0.07805634290, 0.44701099396, 0.0), - (-0.07805634290, 0.44701099396, 0.0), (-0.39353451133, 0.18791499734, 0.0), (-0.39353451133, 0.30746498704, 0.0), - (-0.44701099396, 0.18791499734, 0.0), (-0.44701099396, -0.04477182776, 0.0), (-0.39353451133, 0.18791499734, 0.0), - (-0.39353451133, 0.18791499734, 0.0), (-0.44701099396, -0.04477182776, 0.0), (-0.39353451133, -0.04477182776, 0.0), + (0.16803650558, 0.18791499734, 0.0), + (-0.07805634290, 0.18791499734, 0.0), + (0.16803650558, 0.44701099396, 0.0), + (0.16803650558, 0.44701099396, 0.0), + (-0.07805634290, 0.18791499734, 0.0), + (-0.07805634290, 0.44701099396, 0.0), + (0.20165449381, 0.13603900373, 0.0), + (-0.11167433113, 0.13603900373, 0.0), + (0.20165449381, -0.44701099396, 0.0), + (0.20165449381, -0.44701099396, 0.0), + (-0.11167433113, 0.13603900373, 0.0), + (-0.11167433113, -0.44701099396, 0.0), + (-0.07805634290, 0.18791499734, 0.0), + (-0.39353451133, 0.18791499734, 0.0), + (-0.07805634290, 0.44701099396, 0.0), + (-0.07805634290, 0.44701099396, 0.0), + (-0.39353451133, 0.18791499734, 0.0), + (-0.39353451133, 0.30746498704, 0.0), + (-0.44701099396, 0.18791499734, 0.0), + (-0.44701099396, -0.04477182776, 0.0), + (-0.39353451133, 0.18791499734, 0.0), + (-0.39353451133, 0.18791499734, 0.0), + (-0.44701099396, -0.04477182776, 0.0), + (-0.39353451133, -0.04477182776, 0.0), ) tris_open = ( - (0.16803650558, 0.18791499734, 0.0), (-0.07805634290, 0.18791499734, 0.0), (0.16803650558, 0.44701099396, 0.0), - (0.16803650558, 0.44701099396, 0.0), (-0.07805634290, 0.18791499734, 0.0), (-0.07805634290, 0.44701099396, 0.0), - (0.20165449381, 0.13603900373, 0.0), (-0.11167433113, 0.13603900373, 0.0), (0.20165449381, -0.44701099396, 0.0), - (0.20165449381, -0.44701099396, 0.0), (-0.11167433113, 0.13603900373, 0.0), (-0.11167433113, -0.44701099396, 0.0), - (0.16803650558, 0.44701099396, 0.0), (-0.07805634290, 0.44701099396, 0.0), (0.16803650558, 0.70610702038, 0.0), - (0.16803650558, 0.70610702038, 0.0), (-0.07805634290, 0.44701099396, 0.0), (-0.07805634290, 0.58656096458, 0.0), - (-0.11167433113, 0.44701099396, 0.0), (-0.11167433113, 0.73432201147, 0.0), (-0.07805634290, 0.44701099396, 0.0), - (-0.07805634290, 0.44701099396, 0.0), (-0.11167433113, 0.73432201147, 0.0), (-0.07805634290, 0.73432201147, 0.0), + (0.16803650558, 0.18791499734, 0.0), + (-0.07805634290, 0.18791499734, 0.0), + (0.16803650558, 0.44701099396, 0.0), + (0.16803650558, 0.44701099396, 0.0), + (-0.07805634290, 0.18791499734, 0.0), + (-0.07805634290, 0.44701099396, 0.0), + (0.20165449381, 0.13603900373, 0.0), + (-0.11167433113, 0.13603900373, 0.0), + (0.20165449381, -0.44701099396, 0.0), + (0.20165449381, -0.44701099396, 0.0), + (-0.11167433113, 0.13603900373, 0.0), + (-0.11167433113, -0.44701099396, 0.0), + (0.16803650558, 0.44701099396, 0.0), + (-0.07805634290, 0.44701099396, 0.0), + (0.16803650558, 0.70610702038, 0.0), + (0.16803650558, 0.70610702038, 0.0), + (-0.07805634290, 0.44701099396, 0.0), + (-0.07805634290, 0.58656096458, 0.0), + (-0.11167433113, 0.44701099396, 0.0), + (-0.11167433113, 0.73432201147, 0.0), + (-0.07805634290, 0.44701099396, 0.0), + (-0.07805634290, 0.44701099396, 0.0), + (-0.11167433113, 0.73432201147, 0.0), + (-0.07805634290, 0.73432201147, 0.0), ) def get_custom_shape(self, context: bpy.types.Context): @@ -656,40 +673,52 @@ class GizmoArrow(GizmoMovable): """Generate arrow geometry along +X axis.""" triangles = [] - triangles.extend([ - (0, -ARROW_WIDTH, 0), - (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), - (0, +ARROW_WIDTH, 0), - ]) - triangles.extend([ - (0, +ARROW_WIDTH, 0), - (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), - (ARROW_SHAFT_LENGTH, +ARROW_WIDTH, 0), - ]) + triangles.extend( + [ + (0, -ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), + (0, +ARROW_WIDTH, 0), + ] + ) + triangles.extend( + [ + (0, +ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, +ARROW_WIDTH, 0), + ] + ) - triangles.extend([ - (0, 0, -ARROW_WIDTH), - (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), - (0, 0, +ARROW_WIDTH), - ]) - triangles.extend([ - (0, 0, +ARROW_WIDTH), - (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), - (ARROW_SHAFT_LENGTH, 0, +ARROW_WIDTH), - ]) + triangles.extend( + [ + (0, 0, -ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), + (0, 0, +ARROW_WIDTH), + ] + ) + triangles.extend( + [ + (0, 0, +ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, +ARROW_WIDTH), + ] + ) head_width = ARROW_WIDTH * ARROW_HEAD_WIDTH_MULTIPLIER - triangles.extend([ - (ARROW_SHAFT_LENGTH, -head_width, 0), - (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), - (ARROW_SHAFT_LENGTH, +head_width, 0), - ]) + triangles.extend( + [ + (ARROW_SHAFT_LENGTH, -head_width, 0), + (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, +head_width, 0), + ] + ) - triangles.extend([ - (ARROW_SHAFT_LENGTH, 0, -head_width), - (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), - (ARROW_SHAFT_LENGTH, 0, +head_width), - ]) + triangles.extend( + [ + (ARROW_SHAFT_LENGTH, 0, -head_width), + (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, 0, +head_width), + ] + ) for i in range(ARROW_CIRCLE_SEGMENTS): angle1 = (2 * math.pi * i) / ARROW_CIRCLE_SEGMENTS @@ -700,11 +729,13 @@ class GizmoArrow(GizmoMovable): y2 = head_width * math.cos(angle2) z2 = head_width * math.sin(angle2) - triangles.extend([ - (ARROW_SHAFT_LENGTH, 0, 0), - (ARROW_SHAFT_LENGTH, y1, z1), - (ARROW_SHAFT_LENGTH, y2, z2), - ]) + triangles.extend( + [ + (ARROW_SHAFT_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, y1, z1), + (ARROW_SHAFT_LENGTH, y2, z2), + ] + ) return tuple(triangles) @@ -746,17 +777,21 @@ class GizmoCone(GizmoMovable): y2 = CONE_RADIUS * math.cos(angle2) z2 = CONE_RADIUS * math.sin(angle2) - triangles.extend([ - (cone_tip_x, 0, 0), - (0, y1, z1), - (0, y2, z2), - ]) + triangles.extend( + [ + (cone_tip_x, 0, 0), + (0, y1, z1), + (0, y2, z2), + ] + ) - triangles.extend([ - (0, 0, 0), - (0, y2, z2), - (0, y1, z1), - ]) + triangles.extend( + [ + (0, 0, 0), + (0, y2, z2), + (0, y1, z1), + ] + ) return tuple(triangles) diff --git a/src/bonsai/bonsai/bim/module/aggregate/operator.py b/src/bonsai/bonsai/bim/module/aggregate/operator.py index e94199b208..32d06dd94e 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/operator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/operator.py @@ -130,7 +130,7 @@ class BIM_OT_aggregate_unassign_object(bpy.types.Operator, tool.Ifc.Operator): # Skip spatial elements - they should not be deleted even if empty if aggregate.is_a("IfcSpatialElement"): continue - + related_objects = ifcopenshell.util.element.get_parts(aggregate) if len(related_objects) == 0: aggregate_name = aggregate.Name or f"{aggregate.is_a()} #{aggregate.id()}" diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index bf4972df2d..581b8225c0 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -745,10 +745,10 @@ class DimensionDecorator(BaseDecorator): if not show_description_only: length = (v1 - v0).length text = self.format_value( - context, - length, + context, + length, suppress_zero_inches=dimension_data["suppress_zero_inches"], - custom_unit=dimension_data["custom_unit"] + custom_unit=dimension_data["custom_unit"], ) if isinstance(self, DiameterDecorator): text = "D" + text @@ -1203,11 +1203,11 @@ class PlanLevelDecorator(BaseDecorator): def get_text(): abs_z = verts[0].z z = helper.get_relative_z(obj, element, abs_z) - + # Z is in meters (Blender world space), convert to project units (feet) unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) z = z / unit_scale # Convert meters to feet - + rl = self.format_value(context, z, in_unit_length=True) text = "{}{}".format("" if z < 0 else "+", rl) return text @@ -1284,7 +1284,7 @@ class SectionLevelDecorator(BaseDecorator): # Z is in meters (Blender world space), convert to project units (feet) unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) z = z / unit_scale # Convert meters to feet - + rl = self.format_value(context, z, in_unit_length=True) text = "RL {}{}".format("" if z < 0 else "+", rl) return text @@ -1300,6 +1300,7 @@ class SectionLevelDecorator(BaseDecorator): ) break # support only 1 label + class BreakDecorator(BaseDecorator): """Decorator for breakline objects - first edge of a mesh with zigzag thingy in the middle diff --git a/src/bonsai/bonsai/bim/module/drawing/helper.py b/src/bonsai/bonsai/bim/module/drawing/helper.py index 8f2246a636..3943e8fd2f 100644 --- a/src/bonsai/bonsai/bim/module/drawing/helper.py +++ b/src/bonsai/bonsai/bim/module/drawing/helper.py @@ -121,11 +121,12 @@ class BoundingBox: retVal = True return retVal + def find_best_precision(fractional_inches, max_precision=256, base_tolerance=0.0001): """ Find the simplest fraction denominator that accurately represents the value. Uses a sliding tolerance - smaller denominators get more tolerance. - + :param fractional_inches: The fractional part of inches (0.0 to 1.0) :param max_precision: Maximum denominator to try (256 for imperial) :param base_tolerance: Base tolerance in inches (very strict) @@ -133,29 +134,29 @@ def find_best_precision(fractional_inches, max_precision=256, base_tolerance=0.0 """ if abs(fractional_inches) < 0.00001: return 1 # No fraction needed - + # Try denominators from coarsest to finest: 2, 4, 8, 16, 32, 64, 128, 256 for exp in range(1, 9): # 2^1 to 2^8 - denom = 2 ** exp + denom = 2**exp if denom > max_precision: break - + # Find nearest numerator for this denominator numer = round(fractional_inches * denom) - + # Skip if numerator is 0 if numer == 0: continue - + # Check if this fraction is close enough fraction_value = numer / denom error = abs(fraction_value - fractional_inches) - + # Very strict tolerance - only simplify if it's a near-perfect match # This keeps 3/256 as 3/256, but allows floating point errors to be cleaned up if error < base_tolerance: return denom - + # If no simpler fraction works, use max precision return max_precision @@ -233,11 +234,10 @@ def format_distance( if isArea: toInches = 1550 inPerFoot = 144 - decInches = value * toInches decFeet = decInches / 12 - + if not precision: precision = 256 elif precision == "1": @@ -258,10 +258,10 @@ def format_distance( else: feet = 0 - # Separate Fractional Inches + # Separate Fractional Inches decInches = abs(decInches) # ignore the sign for inches inches = math.floor(decInches) # remove decimal - + # Clean up floating point errors fractional_inches = decInches - inches tolerance = 0.01 # About 1/100 of an inch @@ -280,11 +280,11 @@ def format_distance( else: frac = round(base * fractional_inches) - # Set proper numerator and denominator if frac != base: # Simplify using GCD from math import gcd + divisor = gcd(int(frac), int(base)) frac = int(frac / divisor) base = int(base / divisor) @@ -312,14 +312,14 @@ def format_distance( tx_dist += str(feet) + "'" if not feet and not add_inches: tx_dist += str(feet) + "'" - + # Add "0' - " when we have inches but no feet # But only add " - " separator if we actually have inches to show if not feet and add_inches: tx_dist += "0' - " elif feet and add_inches: tx_dist += " - " - + if not feet and value < 0: tx_dist += "-" if add_inches: @@ -341,13 +341,11 @@ def format_distance( # Only add inch symbol if we actually added inch content if inches > 0 or frac > 0 or feet == 0: tx_dist += '"' - - if precision == "12" and unit_system == "IMPERIAL": tx_dist = str(round(decFeet)) + "'" if tx_dist == '"': - tx_dist = "0' - 0\"" + tx_dist = "0' - 0\"" else: fmt = "%1.3f" sq_feet = round(value * toInches / inPerFoot, 4) diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index 945cb64687..7a12b724cf 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -731,6 +731,7 @@ class GizmoDoorEdition(bpy.types.GizmoGroup): return cls.COLOR_GREEN else: return cls.COLOR_BLUE + gizmo_props = [ {"attr_name": "overall_height", "axis": (0, 0, 1)}, {"attr_name": "overall_width", "axis": (1, 0, 0)}, diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index 5d89e7bfee..3cf37e91ca 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -777,9 +777,7 @@ def draw_stair_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyG if prop_name == "custom_first_last_tread_run": # Draw the lock toggle row_lock = layout.row(align=True) - lock_text = ( - "Lock First/Last Treads" if not props.custom_tread_lock else "Unlock First/Last Treads" - ) + lock_text = "Lock First/Last Treads" if not props.custom_tread_lock else "Unlock First/Last Treads" row_lock.prop( props, "custom_tread_lock", diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 9e9bfcd43c..8fc500a223 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -1625,11 +1625,11 @@ class Drawing(bonsai.core.tool.Drawing): xmin, xmax, ymin, ymax = helper.ortho_view_frame(camera.data)[:4] rl = ifcopenshell.util.placement.get_local_placement(storey.ObjectPlacement)[2][3] - + # Convert RL from project units (feet) to meters for Blender world space unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) rl_meters = rl * unit_scale - + y = (camera.matrix_world.inverted() @ Vector((0.0, 0.0, rl_meters))).y if y < ymin or y > ymax: return From 1d0b4675c0f750f85b1dab699b530a443190fa36 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 24 Nov 2025 11:01:17 +0500 Subject: [PATCH 208/657] Ruff - fix usage of deprecated `Tuple`, `List` --- src/bonsai/bonsai/bim/gizmo.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/gizmo.py b/src/bonsai/bonsai/bim/gizmo.py index cdd5fe02a4..adf677683a 100644 --- a/src/bonsai/bonsai/bim/gizmo.py +++ b/src/bonsai/bonsai/bim/gizmo.py @@ -22,7 +22,7 @@ Shared gizmo components for reuse across modules. import bpy import math -from typing import Optional, Tuple, List +from typing import Optional from mathutils import Vector from mathutils.bvhtree import BVHTree from mathutils.geometry import intersect_line_line @@ -57,11 +57,11 @@ class SnapManager: """Manages snap point visualization and mesh snapping.""" def __init__(self): - self._snap_point: Optional[Tuple[float, float, float]] = None + self._snap_point: Optional[tuple[float, float, float]] = None self._draw_handler = None self._shader = None - def set_snap_point(self, point: Optional[Tuple[float, float, float]]) -> None: + def set_snap_point(self, point: Optional[tuple[float, float, float]]) -> None: """Set snap point and register draw handler if needed.""" self._snap_point = point if self._draw_handler is None and point is not None: @@ -204,7 +204,7 @@ class SnapManager: _snap_manager = SnapManager() -def set_snap_point(point: Optional[Tuple[float, float, float]]) -> None: +def set_snap_point(point: Optional[tuple[float, float, float]]) -> None: _snap_manager.set_snap_point(point) @@ -219,8 +219,8 @@ def snap_to_mesh( def generate_circle_vertices( - center: Tuple[float, float, float], radius: float, segments: int, plane: str = "XY" -) -> List[Tuple[float, float, float]]: + center: tuple[float, float, float], radius: float, segments: int, plane: str = "XY" +) -> list[tuple[float, float, float]]: """Generate circle vertices in specified plane. Args: @@ -250,7 +250,7 @@ def generate_circle_vertices( def create_quarter_circle_arc( radius: float = 1.0, segments: int = ARC_SEGMENTS, direction: str = "LEFT", line_width: float = ARC_LINE_WIDTH -) -> Tuple[Tuple[float, float, float], ...]: +) -> tuple[tuple[float, float, float], ...]: """Create a quarter circle arc with cross-section thickness for visibility from all angles. Args: @@ -669,7 +669,7 @@ class GizmoArrow(GizmoMovable): bl_idname = "BIM_GT_gizmo_arrow" bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) - def _get_arrow_triangles(self) -> Tuple[Tuple[float, float, float], ...]: + def _get_arrow_triangles(self) -> tuple[tuple[float, float, float], ...]: """Generate arrow geometry along +X axis.""" triangles = [] @@ -763,7 +763,7 @@ class GizmoCone(GizmoMovable): return axis_direction return self.axis - def _get_cone_triangles(self) -> Tuple[Tuple[float, float, float], ...]: + def _get_cone_triangles(self) -> tuple[tuple[float, float, float], ...]: """Generate cone geometry along +X axis.""" triangles = [] cone_tip_x = CONE_LENGTH From 9d437b5bc34e677d7c548e225a5573fa46b427d2 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 25 Nov 2025 09:19:18 +0100 Subject: [PATCH 209/657] Mark simple type instance file ownership #7226 --- src/ifcparse/IfcParse.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index 3a7c373a7d..f0f880b7d6 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -1607,6 +1607,11 @@ void IfcParse::impl::in_memory_file_storage::read_from_stream(IfcParse::FileRead // Move the storage of simple type instances so that they are retained during the lifetime of the file read_simple_type_instances = streamer.stealInstances(); + // Set file ownership on simple type instances, so that when adding them to other files, proper copies are created + for (auto& inst : read_simple_type_instances) { + inst->file_ = file; + } + Logger::Status("\rDone scanning file "); delete tokens; From ceeca752ea6af0c14c2796aee1dd720191fbdc97 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Tue, 25 Nov 2025 18:44:32 +0000 Subject: [PATCH 210/657] Fix build error from OCC with VTK support OpenCASCADE may be built with VTK support. Try to find VTK first to avoid CMake errors when OpenCASCADE's config references VTK targets. --- cmake/FindOpenCASCADE.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index e6e5cb4b96..74268a7b5a 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -12,6 +12,10 @@ UNIFY_ENVVARS_AND_CACHE(OCC_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(OCC_LIBRARY_DIR) +# OpenCASCADE may be built with VTK support. Try to find VTK first to avoid +# CMake errors when OpenCASCADE's config references VTK targets. +find_package(VTK QUIET) + if(OCC_INCLUDE_DIR) set(OCC_INCLUDE_DIR ${OCC_INCLUDE_DIR} CACHE FILEPATH "Open CASCADE header files") message(STATUS "Looking for Open CASCADE include files in: ${OCC_INCLUDE_DIR}") From cbd26896ba835a5f1c2ebd9f6e1725e8b08cf6e7 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Tue, 25 Nov 2025 18:45:59 +0000 Subject: [PATCH 211/657] Propagate CMP0167 policy to fix cmake warnings --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ed9487c6fc..78f96d0e70 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -37,6 +37,7 @@ if(POLICY CMP0144) # 3.27 endif() if(POLICY CMP0167) # 3.30 cmake_policy(SET CMP0167 OLD) + set(CMAKE_POLICY_DEFAULT_CMP0167 OLD) # Propagate to subdirectories and find modules. endif() if(NOT CMAKE_BUILD_TYPE) From 5ab6deb12163ddf1593b52d5ad1b43ebc303115d Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Tue, 25 Nov 2025 23:08:52 +0000 Subject: [PATCH 212/657] Revert cbd2689 Propagate CMP0167 policy --- cmake/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 78f96d0e70..ed9487c6fc 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -37,7 +37,6 @@ if(POLICY CMP0144) # 3.27 endif() if(POLICY CMP0167) # 3.30 cmake_policy(SET CMP0167 OLD) - set(CMAKE_POLICY_DEFAULT_CMP0167 OLD) # Propagate to subdirectories and find modules. endif() if(NOT CMAKE_BUILD_TYPE) From a675365dfdea3a8bff0d5083ee4a7ce1cc8cc6e8 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Wed, 26 Nov 2025 22:53:38 +0000 Subject: [PATCH 213/657] Correct fix for OCC built with VTK support --- cmake/FindOpenCASCADE.cmake | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index 74268a7b5a..438d2a9873 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -12,10 +12,6 @@ UNIFY_ENVVARS_AND_CACHE(OCC_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(OCC_LIBRARY_DIR) -# OpenCASCADE may be built with VTK support. Try to find VTK first to avoid -# CMake errors when OpenCASCADE's config references VTK targets. -find_package(VTK QUIET) - if(OCC_INCLUDE_DIR) set(OCC_INCLUDE_DIR ${OCC_INCLUDE_DIR} CACHE FILEPATH "Open CASCADE header files") message(STATUS "Looking for Open CASCADE include files in: ${OCC_INCLUDE_DIR}") @@ -33,6 +29,11 @@ if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) # find_package creates variables: # - `OpenCASCADE_INCLUDE_DIR` # - `OpenCASCADE_LIBRARIES` + + # OpenCASCADE may be built with VTK support. Try to find VTK first to avoid + # CMake errors when OpenCASCADE's config references VTK targets. + find_package(VTK QUIET) + find_package(OpenCASCADE CONFIG REQUIRED) return() endif() From 5a4d60e08cdc7e6644357cbd7d87e9cbc6e67a2f Mon Sep 17 00:00:00 2001 From: myoualid Date: Thu, 27 Nov 2025 13:30:38 +0100 Subject: [PATCH 214/657] util functions to retrieve material profiles and material layers for an element --- .../ifcopenshell/util/element.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index 7bbe8bdc99..750dde4fd3 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -35,6 +35,8 @@ MATERIAL_TYPE = Literal[ "IfcMaterialList", ] +PrioritisedLayer = namedtuple("PrioritisedLayer", "priority material thickness") +PrioritisedProfile = namedtuple("PrioritisedProfile", "priority material profile") def get_pset( element: ifcopenshell.entity_instance, @@ -1845,3 +1847,40 @@ def has_openings(element: ifcopenshell.entity_instance) -> bool: :return: True if element has openings. """ return bool(next(get_openings(element), False)) + + +def get_material_layers(element: ifcopenshell.entity_instance) -> list[PrioritisedLayer]: + """ + Retrieves all material layers assigned to an element. + :param element: The IFC element + :return: A list of IfcMaterialLayer entities + + Example: + .. code:: python + element = ifcopenshell.by_type("IfcWall")[0] + material_layers = ifcopenshell.util.element.get_material_layers(element) + """ + material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) + if not material or not material.is_a("IfcMaterialLayerSet"): + return [] + return [PrioritisedLayer(getattr(layer, "Priority", 0) or 0, layer.Material, layer.LayerThickness) for layer in material.MaterialLayers] + + +def get_material_profiles(element: ifcopenshell.entity_instance) -> list[PrioritisedProfile]: + """ + Retrieves all material profiles assigned to an element. + + :param element: The IFC element + :return: A list of IfcMaterialProfile entities + + Example: + + .. code:: python + + element = ifcopenshell.by_type("IfcBeam")[0] + material_profiles = ifcopenshell.util.element.get_material_profiles(element) + """ + material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) + if not material or not material.is_a("IfcMaterialProfileSet") : + return [] + return [PrioritisedProfile(getattr(material_profile, "Priority", 0) or 0, material_profile.Material, material_profile.Profile) for material_profile in material.MaterialProfiles] From fcf561400472a8c4a4258c4f59e61e14526aaac3 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 27 Nov 2025 09:50:31 -0600 Subject: [PATCH 215/657] Is user saving .blend file? --- src/bonsai/bonsai/__init__.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/__init__.py b/src/bonsai/bonsai/__init__.py index ea0c4ca753..b0edc0daba 100644 --- a/src/bonsai/bonsai/__init__.py +++ b/src/bonsai/bonsai/__init__.py @@ -97,8 +97,8 @@ def initialize_bbim_semver(): def get_debug_info(): bbim_version = bbim_semver["version"] - - return { + + debug_info = { "os": platform.system(), "os_version": platform.version(), "python_version": platform.python_version(), @@ -112,6 +112,25 @@ def get_debug_info(): "last_actions": last_actions, "last_error": last_error, } + + # Add .blend file save information + if bpy.data.is_saved: + debug_info["blend_file_path"] = bpy.data.filepath + debug_info["blend_file_dirty"] = bpy.data.is_dirty + else: + debug_info["blend_file_path"] = "Not saved" + debug_info["blend_file_dirty"] = "N/A" + + # Add IFC file information + bim_props = tool.Blender.get_bim_props() + if bim_props.ifc_file: + debug_info["ifc_file_path"] = bim_props.ifc_file + debug_info["ifc_is_dirty"] = bim_props.is_dirty + else: + debug_info["ifc_file_path"] = "No IFC loaded" + debug_info["ifc_is_dirty"] = "N/A" + + return debug_info def format_debug_info(info: dict): From c828c1b08da1904230bf56210e9595c8aa0bd63d Mon Sep 17 00:00:00 2001 From: Gorgious Date: Thu, 27 Nov 2025 22:56:27 +0100 Subject: [PATCH 216/657] Refactor parametric element gizmos - Add gizmos for windows and stairs - Add BaseParametricGizmoGroup mixin for doors, windows, and stairs - Improve snapping with screen-space distance calculation - Add GizmoPlus, GizmoMinus, GizmoCycle icon gizmos - Add GizmoPropConfig dataclass for cleaner gizmo configuration --- src/bonsai/bonsai/bim/__init__.py | 5 + src/bonsai/bonsai/bim/gizmo.py | 825 +++++++++++++++--- .../bonsai/bim/module/model/__init__.py | 5 + src/bonsai/bonsai/bim/module/model/door.py | 317 +++---- src/bonsai/bonsai/bim/module/model/prop.py | 24 +- src/bonsai/bonsai/bim/module/model/stair.py | 311 ++++++- src/bonsai/bonsai/bim/module/model/window.py | 206 ++++- src/bonsai/bonsai/bim/ui.py | 101 ++- 8 files changed, 1464 insertions(+), 330 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index f7adfb6319..98cbbbd3d8 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -149,6 +149,8 @@ classes = [ ui.BIM_UL_generic, ui.DocPreferences, ui.GizmoPreferencesDoor, # Register before GizmoPreferences + ui.GizmoPreferencesWindow, # Register before GizmoPreferences + ui.GizmoPreferencesStair, # Register before GizmoPreferences ui.GizmoPreferences, # ui.DefaultParameters and ui.BIM_ADDON_preferences are registered separately after modules (see late_classes below) # Tabs panel @@ -212,6 +214,9 @@ classes = [ gizmo.GizmoPen, gizmo.GizmoValidate, gizmo.GizmoCancel, + gizmo.GizmoPlus, + gizmo.GizmoMinus, + gizmo.GizmoCycle, ] for mod in modules.values(): diff --git a/src/bonsai/bonsai/bim/gizmo.py b/src/bonsai/bonsai/bim/gizmo.py index adf677683a..2f6cc2a08e 100644 --- a/src/bonsai/bonsai/bim/gizmo.py +++ b/src/bonsai/bonsai/bim/gizmo.py @@ -20,22 +20,50 @@ Shared gizmo components for reuse across modules. """ +__all__ = [ + # Dataclasses + "GizmoPropConfig", + # Functions + "set_snap_point", + "clear_snap_point", + "snap_to_mesh", + "generate_circle_vertices", + "create_circle_arc", + # Gizmo classes + "GizmoMovable", + "GizmoLock", + "GizmoArc", + "GizmoPen", + "GizmoValidate", + "GizmoCancel", + "GizmoPlus", + "GizmoMinus", + "GizmoCycle", + "GizmoArrow", + "GizmoCone", + # Mixin classes + "BaseParametricGizmoGroup", +] + +from typing import Any + import bpy import math -from typing import Optional -from mathutils import Vector +from dataclasses import dataclass +from mathutils import Vector, Matrix from mathutils.bvhtree import BVHTree from mathutils.geometry import intersect_line_line -from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d +from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d, location_3d_to_region_2d import gpu from gpu_extras.batch import batch_for_shader +import bonsai.tool as tool -SNAP_CIRCLE_SEGMENTS = 16 -SNAP_CIRCLE_RADIUS = 0.1 -SNAP_CIRCLE_COLOR = (1.0, 0.5, 0.0, 1.0) -SNAP_LINE_WIDTH = 3.0 -SNAP_MAX_RADIUS = 10.0 +SNAP_POINT_SIZE = 10.0 +SNAP_POINT_COLOR = (1.0, 0.5, 0.0, 1.0) +SNAP_MAX_RADIUS = 5.0 +SNAP_SCREEN_DISTANCE = 30 # Maximum screen-space distance for snapping (in pixels) +SNAP_WORLD_DISTANCE = 0.2 # Maximum world-space distance for snapping (in meters) ARROW_SHAFT_LENGTH = 0.8 ARROW_HEAD_LENGTH = 0.2 @@ -52,16 +80,38 @@ ARC_LINE_WIDTH = 0.015 PRECISION_MODE_MULTIPLIER = 0.1 +RAY_CAST_DISTANCE = 1000 # Distance to extend rays for intersection calculations +DEFAULT_POINT_SIZE = 1.0 # Default GPU point size + + +@dataclass +class GizmoPropConfig: + """Configuration for a gizmo property. + + Attributes: + attr_name: Name of the property attribute on the element's props + axis: Direction axis as (x, y, z) tuple, determines gizmo color and direction. + Color convention follows Blender's standard axis colors: + - X axis (1, 0, 0) or (-1, 0, 0) -> Red + - Y axis (0, 1, 0) or (0, -1, 0) -> Green + - Z axis (0, 0, 1) or (0, 0, -1) -> Blue + invert_delta: If True, inverts the drag direction for this gizmo + """ + + attr_name: str + axis: tuple[int, int, int] + invert_delta: bool = False + class SnapManager: """Manages snap point visualization and mesh snapping.""" def __init__(self): - self._snap_point: Optional[tuple[float, float, float]] = None + self._snap_point: tuple[float, float, float] | Vector | None = None self._draw_handler = None self._shader = None - def set_snap_point(self, point: Optional[tuple[float, float, float]]) -> None: + def set_snap_point(self, point: tuple[float, float, float] | Vector | None) -> None: """Set snap point and register draw handler if needed.""" self._snap_point = point if self._draw_handler is None and point is not None: @@ -77,7 +127,7 @@ class SnapManager: self._redraw_viewport() def _draw(self) -> None: - """Draw snap point circles.""" + """Draw snap point as a dot.""" if self._snap_point is None: return @@ -85,15 +135,13 @@ class SnapManager: self._shader = gpu.shader.from_builtin("UNIFORM_COLOR") self._shader.bind() - self._shader.uniform_float("color", SNAP_CIRCLE_COLOR) - gpu.state.line_width_set(SNAP_LINE_WIDTH) + self._shader.uniform_float("color", SNAP_POINT_COLOR) + gpu.state.point_size_set(SNAP_POINT_SIZE) - for plane in ("XY", "XZ", "YZ"): - vertices = generate_circle_vertices(self._snap_point, SNAP_CIRCLE_RADIUS, SNAP_CIRCLE_SEGMENTS, plane) - batch = batch_for_shader(self._shader, "LINE_STRIP", {"pos": vertices}) - batch.draw(self._shader) + batch = batch_for_shader(self._shader, "POINTS", {"pos": [self._snap_point]}) + batch.draw(self._shader) - gpu.state.line_width_set(1.0) + gpu.state.point_size_set(DEFAULT_POINT_SIZE) @staticmethod def _redraw_viewport() -> None: @@ -102,9 +150,113 @@ class SnapManager: if area.type == "VIEW_3D": area.tag_redraw() + @staticmethod + def _calc_snap_distance( + point_3d: Vector, + location: Vector, + mouse_coords: tuple[float, float] | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + ) -> float: + """Calculate distance - screen-space if mouse coords available, else world-space.""" + if mouse_coords is not None and region is not None and rv3d is not None: + point_2d = location_3d_to_region_2d(region, rv3d, point_3d) + if point_2d is not None: + return (Vector(mouse_coords) - point_2d).length + return float("inf") + return (point_3d - location).length + + @staticmethod + def _find_closest_vertex( + world_vertices: list[Vector], + location: Vector, + mouse_coords: tuple[float, float] | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + closest_point: Vector | None, + closest_distance: float, + ) -> tuple[Vector | None, float]: + """Find the closest vertex to snap to.""" + for v_co in world_vertices: + dist = SnapManager._calc_snap_distance(v_co, location, mouse_coords, region, rv3d) + if dist < closest_distance: + closest_distance = dist + closest_point = v_co + return closest_point, closest_distance + + @staticmethod + def _find_closest_edge_point( + mesh: bpy.types.Mesh, + world_vertices: list[Vector], + location: Vector, + mouse_coords: tuple[float, float] | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + closest_point: Vector | None, + closest_distance: float, + ) -> tuple[Vector | None, float]: + """Find the closest point on an edge to snap to.""" + for edge in mesh.edges: + v1 = world_vertices[edge.vertices[0]] + v2 = world_vertices[edge.vertices[1]] + + edge_vec = v2 - v1 + edge_len_sq = edge_vec.length_squared + + if edge_len_sq > 0: + t = max(0, min(1, (location - v1).dot(edge_vec) / edge_len_sq)) + closest_on_edge = v1 + t * edge_vec + dist = SnapManager._calc_snap_distance(closest_on_edge, location, mouse_coords, region, rv3d) + + if dist < closest_distance: + closest_distance = dist + closest_point = closest_on_edge + return closest_point, closest_distance + + @staticmethod + def _find_closest_face_point( + mesh: bpy.types.Mesh, + world_vertices: list[Vector], + location: Vector, + mouse_coords: tuple[float, float] | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + closest_point: Vector | None, + closest_distance: float, + ) -> tuple[Vector | None, float]: + """Find the closest point on a face to snap to.""" + bvh = BVHTree.FromPolygons(world_vertices, [p.vertices for p in mesh.polygons]) + nearest_loc, normal, index, dist = bvh.find_nearest(location) + + if nearest_loc: + screen_dist = SnapManager._calc_snap_distance(nearest_loc, location, mouse_coords, region, rv3d) + if screen_dist < closest_distance: + closest_distance = screen_dist + closest_point = nearest_loc + return closest_point, closest_distance + + @staticmethod + def _get_nearby_objects( + mesh_objects: list[bpy.types.Object], + location: Vector, + ) -> list[bpy.types.Object]: + """Filter objects to those within SNAP_MAX_RADIUS of location.""" + nearby_objects = [] + for obj in mesh_objects: + bbox_corners = [obj.matrix_world @ Vector(corner) for corner in obj.bound_box] + for corner in bbox_corners: + if (corner - location).length <= SNAP_MAX_RADIUS: + nearby_objects.append(obj) + break + return nearby_objects + @staticmethod def snap_to_mesh( - location: Vector, context: bpy.types.Context, axis_vector: Vector, active_obj: bpy.types.Object + location: Vector, + context: bpy.types.Context, + axis_vector: Vector, + active_obj: bpy.types.Object, + mouse_coords: tuple[float, float] | None = None, ) -> Vector: """Snap a location to the nearest mesh element if snapping is enabled. @@ -113,6 +265,7 @@ class SnapManager: context: The Blender context axis_vector: The axis direction of the gizmo active_obj: The active object to exclude from snapping + mouse_coords: Optional (x, y) mouse position in region coordinates for screen-space distance Returns: The snapped location or original location if snapping is disabled @@ -131,19 +284,16 @@ class SnapManager: if not mesh_objects: return location - nearby_objects = [] - for obj in mesh_objects: - bbox_corners = [obj.matrix_world @ Vector(corner) for corner in obj.bound_box] - - for corner in bbox_corners: - if (corner - location).length <= SNAP_MAX_RADIUS: - nearby_objects.append(obj) - break + nearby_objects = SnapManager._get_nearby_objects(mesh_objects, location) if not nearby_objects: return location - closest_point = None + region = context.region + rv3d = context.region_data + use_screen_distance = mouse_coords is not None and region is not None and rv3d is not None + + closest_point: Vector | None = None closest_distance = float("inf") for obj in nearby_objects: @@ -161,41 +311,25 @@ class SnapManager: world_vertices = [obj.matrix_world @ v.co for v in mesh.vertices] if "VERTEX" in snap_elements: - for v_co in world_vertices: - dist = (v_co - location).length - if dist < closest_distance: - closest_distance = dist - closest_point = v_co + closest_point, closest_distance = SnapManager._find_closest_vertex( + world_vertices, location, mouse_coords, region, rv3d, closest_point, closest_distance + ) if "EDGE" in snap_elements: - for edge in mesh.edges: - v1 = world_vertices[edge.vertices[0]] - v2 = world_vertices[edge.vertices[1]] - - edge_vec = v2 - v1 - edge_len_sq = edge_vec.length_squared - - if edge_len_sq > 0: - t = max(0, min(1, (location - v1).dot(edge_vec) / edge_len_sq)) - closest_on_edge = v1 + t * edge_vec - dist = (closest_on_edge - location).length - - if dist < closest_distance: - closest_distance = dist - closest_point = closest_on_edge + closest_point, closest_distance = SnapManager._find_closest_edge_point( + mesh, world_vertices, location, mouse_coords, region, rv3d, closest_point, closest_distance + ) if "FACE" in snap_elements: - bvh = BVHTree.FromPolygons(world_vertices, [p.vertices for p in mesh.polygons]) - - nearest_loc, normal, index, dist = bvh.find_nearest(location) - - if nearest_loc and dist < closest_distance: - closest_distance = dist - closest_point = nearest_loc + closest_point, closest_distance = SnapManager._find_closest_face_point( + mesh, world_vertices, location, mouse_coords, region, rv3d, closest_point, closest_distance + ) obj_eval.to_mesh_clear() - if closest_point and closest_distance < SNAP_MAX_RADIUS: + # Use screen-space threshold (pixels) or fall back to world-space + max_distance = SNAP_SCREEN_DISTANCE if use_screen_distance else SNAP_WORLD_DISTANCE + if closest_point and closest_distance < max_distance: return closest_point return location @@ -204,7 +338,7 @@ class SnapManager: _snap_manager = SnapManager() -def set_snap_point(point: Optional[tuple[float, float, float]]) -> None: +def set_snap_point(point: tuple[float, float, float] | Vector | None) -> None: _snap_manager.set_snap_point(point) @@ -213,13 +347,17 @@ def clear_snap_point() -> None: def snap_to_mesh( - location: Vector, context: bpy.types.Context, axis_vector: Vector, active_obj: bpy.types.Object + location: Vector, + context: bpy.types.Context, + axis_vector: Vector, + active_obj: bpy.types.Object, + mouse_coords: tuple[float, float] | None = None, ) -> Vector: - return _snap_manager.snap_to_mesh(location, context, axis_vector, active_obj) + return _snap_manager.snap_to_mesh(location, context, axis_vector, active_obj, mouse_coords) def generate_circle_vertices( - center: tuple[float, float, float], radius: float, segments: int, plane: str = "XY" + center: tuple[float, float, float] | Vector, radius: float, segments: int, plane: str = "XY" ) -> list[tuple[float, float, float]]: """Generate circle vertices in specified plane. @@ -248,32 +386,42 @@ def generate_circle_vertices( return vertices -def create_quarter_circle_arc( - radius: float = 1.0, segments: int = ARC_SEGMENTS, direction: str = "LEFT", line_width: float = ARC_LINE_WIDTH +def create_circle_arc( + radius: float = 1.0, + segments: int = ARC_SEGMENTS, + direction: str = "LEFT", + line_width: float = ARC_LINE_WIDTH, + angle_min: float = 0.0, + angle_max: float = 90.0, ) -> tuple[tuple[float, float, float], ...]: - """Create a quarter circle arc with cross-section thickness for visibility from all angles. + """Create a circle arc with cross-section thickness for visibility from all angles. Args: radius: Radius of the arc segments: Number of segments for smoothness - direction: 'LEFT' for counterclockwise (0 to 90°), 'RIGHT' for clockwise (0 to -90°) + direction: 'LEFT' for counterclockwise, 'RIGHT' for clockwise (mirrors along X) line_width: Width of the arc line in both perpendicular directions + angle_min: Start angle in degrees (default 0°) + angle_max: End angle in degrees (default 90°) Returns: Tuple of arc triangles for drawing geometry visible from all angles """ half_width = line_width / 2 + angle_min_rad = math.radians(angle_min) + angle_max_rad = math.radians(angle_max) + angle_range = angle_max_rad - angle_min_rad arc_points = [] if direction == "LEFT": for i in range(segments + 1): - angle = (math.pi / 2) * (i / segments) + angle = angle_min_rad + angle_range * (i / segments) x = radius * math.cos(angle) y = radius * math.sin(angle) arc_points.append((x, y)) else: for i in range(segments + 1): - angle = (math.pi / 2) * (i / segments) + angle = angle_min_rad + angle_range * (i / segments) x = -radius * math.cos(angle) y = radius * math.sin(angle) arc_points.append((x, y)) @@ -342,6 +490,7 @@ class GizmoMovable(bpy.types.Gizmo): "start_location", "active_obj", "initial_snap_state", + "invert_delta", ) def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set: @@ -377,16 +526,16 @@ class GizmoMovable(bpy.types.Gizmo): result = intersect_line_line( view_origin, - view_origin + view_direction * 1000, + view_origin + view_direction * RAY_CAST_DISTANCE, self.start_location, - self.start_location + axis_direction * 1000, + self.start_location + axis_direction * RAY_CAST_DISTANCE, ) current_3d = result[1] if result else self.start_location delta = (current_3d - self.start_location).dot(axis_direction) if tool_settings.use_snap and self.active_obj: - snapped_pos = snap_to_mesh(current_3d, context, axis_direction, self.active_obj) + snapped_pos = snap_to_mesh(current_3d, context, axis_direction, self.active_obj, current_coord) if snapped_pos != current_3d: delta = (snapped_pos - self.start_location).dot(axis_direction) set_snap_point(snapped_pos) @@ -398,6 +547,9 @@ class GizmoMovable(bpy.types.Gizmo): if event.shift: delta *= PRECISION_MODE_MULTIPLIER + if getattr(self, "invert_delta", False): + delta = -delta + if self.move_set_cb: self.move_set_cb(self.init_value + delta) @@ -431,60 +583,97 @@ class GizmoLock(bpy.types.Gizmo): ) tris_closed = ( - (0.16803650558, 0.18791499734, 0.0), - (-0.07805634290, 0.18791499734, 0.0), - (0.16803650558, 0.44701099396, 0.0), - (0.16803650558, 0.44701099396, 0.0), - (-0.07805634290, 0.18791499734, 0.0), - (-0.07805634290, 0.44701099396, 0.0), - (0.20165449381, 0.13603900373, 0.0), - (-0.11167433113, 0.13603900373, 0.0), - (0.20165449381, -0.44701099396, 0.0), - (0.20165449381, -0.44701099396, 0.0), - (-0.11167433113, 0.13603900373, 0.0), - (-0.11167433113, -0.44701099396, 0.0), - (-0.07805634290, 0.18791499734, 0.0), - (-0.39353451133, 0.18791499734, 0.0), - (-0.07805634290, 0.44701099396, 0.0), - (-0.07805634290, 0.44701099396, 0.0), - (-0.39353451133, 0.18791499734, 0.0), - (-0.39353451133, 0.30746498704, 0.0), - (-0.44701099396, 0.18791499734, 0.0), - (-0.44701099396, -0.04477182776, 0.0), - (-0.39353451133, 0.18791499734, 0.0), - (-0.39353451133, 0.18791499734, 0.0), - (-0.44701099396, -0.04477182776, 0.0), - (-0.39353451133, -0.04477182776, 0.0), + (-0.12838619947433472, 1.3143587112426758, 0.0), + (0.025773197412490845, 1.411454677581787, 0.0), + (-0.0144234299659729, 1.541273593902588, 0.0), + (-0.0144234299659729, 1.541273593902588, 0.0), + (0.025773197412490845, 1.411454677581787, 0.0), + (0.20782703161239624, 1.4184625148773193, 0.0), + (0.23792517185211182, 1.5509872436523438, 0.0), + (0.20782703161239624, 1.4184625148773193, 0.0), + (0.3689943850040436, 1.3335046768188477, 0.0), + (0.4613226056098938, 1.433225393295288, 0.0), + (0.3689943850040436, 1.3335046768188477, 0.0), + (0.4660903215408325, 1.1793451309204102, 0.0), + (0.5959094166755676, 1.2195416688919067, 0.0), + (0.4660903215408325, 1.1793451309204102, 0.0), + (0.47309836745262146, 0.997291088104248, 0.0), + (0.6056233048439026, 0.9671931266784668, 0.0), + (0.47309836745262146, 0.997291088104248, 0.0), + (0.3881405293941498, 0.8361238241195679, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (0.48786139488220215, 4.5077928945147505e-08, 0.0), + (0.48786139488220215, 0.7437955141067505, 0.0), + (-0.12838619947433472, 1.3143587112426758, 0.0), + (-0.0144234299659729, 1.541273593902588, 0.0), + (-0.22810709476470947, 1.406686782836914, 0.0), + (-0.0144234299659729, 1.541273593902588, 0.0), + (0.20782703161239624, 1.4184625148773193, 0.0), + (0.23792517185211182, 1.5509872436523438, 0.0), + (0.23792517185211182, 1.5509872436523438, 0.0), + (0.3689943850040436, 1.3335046768188477, 0.0), + (0.4613226056098938, 1.433225393295288, 0.0), + (0.4613226056098938, 1.433225393295288, 0.0), + (0.4660903215408325, 1.1793451309204102, 0.0), + (0.5959094166755676, 1.2195416688919067, 0.0), + (0.5959094166755676, 1.2195416688919067, 0.0), + (0.47309836745262146, 0.997291088104248, 0.0), + (0.6056233048439026, 0.9671931266784668, 0.0), + (0.6056233048439026, 0.9671931266784668, 0.0), + (0.3881405293941498, 0.8361238241195679, 0.0), + (0.48786142468452454, 0.74379563331604, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (-0.48786139488220215, 4.5077928945147505e-08, 0.0), + (0.48786139488220215, 4.5077928945147505e-08, 0.0), ) tris_open = ( - (0.16803650558, 0.18791499734, 0.0), - (-0.07805634290, 0.18791499734, 0.0), - (0.16803650558, 0.44701099396, 0.0), - (0.16803650558, 0.44701099396, 0.0), - (-0.07805634290, 0.18791499734, 0.0), - (-0.07805634290, 0.44701099396, 0.0), - (0.20165449381, 0.13603900373, 0.0), - (-0.11167433113, 0.13603900373, 0.0), - (0.20165449381, -0.44701099396, 0.0), - (0.20165449381, -0.44701099396, 0.0), - (-0.11167433113, 0.13603900373, 0.0), - (-0.11167433113, -0.44701099396, 0.0), - (0.16803650558, 0.44701099396, 0.0), - (-0.07805634290, 0.44701099396, 0.0), - (0.16803650558, 0.70610702038, 0.0), - (0.16803650558, 0.70610702038, 0.0), - (-0.07805634290, 0.44701099396, 0.0), - (-0.07805634290, 0.58656096458, 0.0), - (-0.11167433113, 0.44701099396, 0.0), - (-0.11167433113, 0.73432201147, 0.0), - (-0.07805634290, 0.44701099396, 0.0), - (-0.07805634290, 0.44701099396, 0.0), - (-0.11167433113, 0.73432201147, 0.0), - (-0.07805634290, 0.73432201147, 0.0), + (-0.3519617021083832, 0.7437955141067505, 0.0), + (-0.3048076927661896, 0.9197763204574585, 0.0), + (-0.4225003123283386, 0.9877263307571411, 0.0), + (-0.4225003123283386, 0.9877263307571411, 0.0), + (-0.3048076927661896, 0.9197763204574585, 0.0), + (-0.1759808510541916, 1.0486031770706177, 0.0), + (-0.24393069744110107, 1.1662957668304443, 0.0), + (-0.1759808510541916, 1.0486031770706177, 0.0), + (2.9078805141580233e-08, 1.0957571268081665, 0.0), + (2.9078805141580233e-08, 1.2316569089889526, 0.0), + (2.9078805141580233e-08, 1.0957571268081665, 0.0), + (0.1759808510541916, 1.0486031770706177, 0.0), + (0.243930846452713, 1.1662957668304443, 0.0), + (0.1759808510541916, 1.0486031770706177, 0.0), + (0.30480796098709106, 0.9197763204574585, 0.0), + (0.4225005805492401, 0.9877263307571411, 0.0), + (0.30480796098709106, 0.9197763204574585, 0.0), + (0.35196200013160706, 0.7437955141067505, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (0.48786139488220215, 4.5077928945147505e-08, 0.0), + (0.48786139488220215, 0.7437955141067505, 0.0), + (-0.3519617021083832, 0.7437955141067505, 0.0), + (-0.4225003123283386, 0.9877263307571411, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (-0.4225003123283386, 0.9877263307571411, 0.0), + (-0.1759808510541916, 1.0486031770706177, 0.0), + (-0.24393069744110107, 1.1662957668304443, 0.0), + (-0.24393069744110107, 1.1662957668304443, 0.0), + (2.9078805141580233e-08, 1.0957571268081665, 0.0), + (2.9078805141580233e-08, 1.2316569089889526, 0.0), + (2.9078805141580233e-08, 1.2316569089889526, 0.0), + (0.1759808510541916, 1.0486031770706177, 0.0), + (0.243930846452713, 1.1662957668304443, 0.0), + (0.243930846452713, 1.1662957668304443, 0.0), + (0.30480796098709106, 0.9197763204574585, 0.0), + (0.4225005805492401, 0.9877263307571411, 0.0), + (0.4225005805492401, 0.9877263307571411, 0.0), + (0.35196200013160706, 0.7437955141067505, 0.0), + (0.487861692905426, 0.74379563331604, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (-0.48786139488220215, 4.5077928945147505e-08, 0.0), + (0.48786139488220215, 4.5077928945147505e-08, 0.0), ) - def get_custom_shape(self, context: bpy.types.Context): + def get_custom_shape(self, context: bpy.types.Context) -> object: + """Get the appropriate custom shape based on lock state.""" obj = context.active_object if not obj: return self.custom_shape_closed @@ -492,7 +681,7 @@ class GizmoLock(bpy.types.Gizmo): try: is_open = obj.path_resolve(self.prop_path) return self.custom_shape_open if is_open else self.custom_shape_closed - except: + except (ValueError, KeyError, AttributeError): return self.custom_shape_closed def setup(self) -> None: @@ -507,7 +696,7 @@ class GizmoLock(bpy.types.Gizmo): class GizmoArc(bpy.types.Gizmo): - """Reusable quarter circle arc gizmo.""" + """Reusable arc gizmo for door swing visualization.""" bl_idname = "VIEW3D_GT_arc" @@ -518,14 +707,15 @@ class GizmoArc(bpy.types.Gizmo): ) def setup(self) -> None: - """Create quarter circle shapes for both LEFT and RIGHT directions.""" - arc_left = create_quarter_circle_arc(radius=1.0, direction="LEFT") - arc_right = create_quarter_circle_arc(radius=1.0, direction="RIGHT") + """Create arc shapes for both LEFT and RIGHT directions.""" + arc_left = create_circle_arc(radius=1.0, direction="LEFT", angle_min=2.0, angle_max=90.0) + arc_right = create_circle_arc(radius=1.0, direction="RIGHT", angle_min=2.0, angle_max=90.0) self.custom_shape_left = self.new_custom_shape(type="TRIS", verts=arc_left) self.custom_shape_right = self.new_custom_shape(type="TRIS", verts=arc_right) - def _get_shape_for_direction(self, context: bpy.types.Context): + def _get_shape_for_direction(self, context: bpy.types.Context) -> object: + """Get the appropriate arc shape based on door swing direction.""" obj = context.active_object if not obj: return self.custom_shape_left @@ -534,7 +724,7 @@ class GizmoArc(bpy.types.Gizmo): direction_value = obj.path_resolve(self.prop_path) if "RIGHT" in str(direction_value): return self.custom_shape_right - except: + except (ValueError, KeyError, AttributeError): pass return self.custom_shape_left @@ -663,6 +853,180 @@ class GizmoCancel(bpy.types.Gizmo): self.draw_custom_shape(self.custom_shape, select_id=select_id) +class GizmoPlus(bpy.types.Gizmo): + """Reusable plus/+ icon gizmo for incrementing values.""" + + bl_idname = "VIEW3D_GT_plus" + + __slots__ = ("custom_shape",) + + # Plus sign triangles (cross shape) - 50% larger + tris = ( + # Horizontal bar + (-0.375, -0.075, 0.0), + (-0.375, 0.075, 0.0), + (0.375, 0.075, 0.0), + (-0.375, -0.075, 0.0), + (0.375, 0.075, 0.0), + (0.375, -0.075, 0.0), + # Vertical bar + (-0.075, -0.375, 0.0), + (-0.075, 0.375, 0.0), + (0.075, 0.375, 0.0), + (-0.075, -0.375, 0.0), + (0.075, 0.375, 0.0), + (0.075, -0.375, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoMinus(bpy.types.Gizmo): + """Reusable minus/- icon gizmo for decrementing values.""" + + bl_idname = "VIEW3D_GT_minus" + + __slots__ = ("custom_shape",) + + # Minus sign triangles (horizontal bar) - 50% larger + tris = ( + (-0.375, -0.075, 0.0), + (-0.375, 0.075, 0.0), + (0.375, 0.075, 0.0), + (-0.375, -0.075, 0.0), + (0.375, 0.075, 0.0), + (0.375, -0.075, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: + """Generate circular arrow geometry (↻ style) covering ~300 degrees.""" + triangles = [] + radius = 0.375 # 50% larger than original 0.25 + line_width = 0.06 # 50% larger than original 0.04 + half_width = line_width / 2 + + # Arc from ~30 degrees to ~330 degrees (300 degree arc) + segments = 20 + start_angle = math.radians(30) + end_angle = math.radians(330) + angle_range = end_angle - start_angle + + # Generate arc points + arc_points = [] + for i in range(segments + 1): + angle = start_angle + angle_range * (i / segments) + x = radius * math.cos(angle) + y = radius * math.sin(angle) + arc_points.append((x, y)) + + # Create triangles for the arc (flat ribbon in XY plane with Z thickness) + for i in range(len(arc_points) - 1): + x1, y1 = arc_points[i] + x2, y2 = arc_points[i + 1] + + # Direction perpendicular to arc segment (for width in XY plane) + dx, dy = x2 - x1, y2 - y1 + length = (dx**2 + dy**2) ** 0.5 + if length > 0: + px, py = -dy / length * half_width, dx / length * half_width + + # XY plane triangles + triangles.extend([ + (x1 + px, y1 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 + px, y2 + py, 0.0), + ]) + triangles.extend([ + (x2 + px, y2 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 - px, y2 - py, 0.0), + ]) + + # XZ plane triangles (for visibility from other angles) + triangles.extend([ + (x1, y1, -half_width), + (x2, y2, -half_width), + (x1, y1, +half_width), + ]) + triangles.extend([ + (x1, y1, +half_width), + (x2, y2, -half_width), + (x2, y2, +half_width), + ]) + + # Arrowhead at the end of the arc (pointing in direction of cycling) + arrow_size = 0.18 # 50% larger than original 0.12 + end_x, end_y = arc_points[-1] + # Direction tangent to the arc at the end + prev_x, prev_y = arc_points[-2] + tangent_x = end_x - prev_x + tangent_y = end_y - prev_y + tangent_len = (tangent_x**2 + tangent_y**2) ** 0.5 + if tangent_len > 0: + tangent_x /= tangent_len + tangent_y /= tangent_len + + # Arrow tip extends in the tangent direction + tip_x = end_x + tangent_x * arrow_size * 0.5 + tip_y = end_y + tangent_y * arrow_size * 0.5 + + # Arrow base perpendicular to tangent + perp_x = -tangent_y * arrow_size + perp_y = tangent_x * arrow_size + + # Arrowhead triangle (XY plane) + triangles.extend([ + (tip_x, tip_y, 0.0), + (end_x - perp_x * 0.5, end_y - perp_y * 0.5, 0.0), + (end_x + perp_x * 0.5, end_y + perp_y * 0.5, 0.0), + ]) + + # Arrowhead triangle (XZ plane for depth) + triangles.extend([ + (tip_x, tip_y, 0.0), + (end_x, end_y, -arrow_size * 0.5), + (end_x, end_y, +arrow_size * 0.5), + ]) + + return tuple(triangles) + + +class GizmoCycle(bpy.types.Gizmo): + """Reusable circular arrow icon gizmo for cycling through enum values.""" + + bl_idname = "VIEW3D_GT_cycle" + + __slots__ = ("custom_shape",) + + tris = _generate_circular_arrow_tris() + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + class GizmoArrow(GizmoMovable): """Arrow gizmo for directional value editing.""" @@ -803,3 +1167,214 @@ class GizmoCone(GizmoMovable): def draw_select(self, context: bpy.types.Context, select_id: int) -> None: self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class BaseParametricGizmoGroup: + """Base mixin class for parametric element gizmo groups (doors, windows, etc.). + + This class provides shared functionality for gizmo groups that edit + parametric BIM elements. Subclasses should define: + - gizmo_props: list of property configurations + - get_props(obj): method to get the element's properties + - get_gizmo_prefs(): method to get gizmo preferences + - element_type_check(element): method to check if element is the right type + - Operator bl_idnames for enable_editing, finish_editing, cancel_editing + + Example subclass: + class GizmoDoorEdition(bpy.types.GizmoGroup, BaseParametricGizmoGroup): + bl_idname = "OBJECT_GGT_bim_door_edition" + ... + """ + + COLOR_RED = (1.0, 0.2, 0.2) + COLOR_GREEN = (0.1, 0.8, 0.1) + COLOR_BLUE = (0.2, 0.2, 1.0) + ARROW_SCALE = 0.25 + + # Subclasses must define these + gizmo_props: list[GizmoPropConfig] = [] + enable_editing_operator: str = "" + finish_editing_operator: str = "" + cancel_editing_operator: str = "" + + @classmethod + def get_arrow_color_from_axis(cls, axis: tuple[int, int, int]) -> tuple[float, float, float]: + """Get arrow color based on axis direction (X=red, Y=green, Z=blue).""" + if axis[0] != 0: + return cls.COLOR_RED + elif axis[1] != 0: + return cls.COLOR_GREEN + return cls.COLOR_BLUE + + def get_axis_rotation_matrix(self, axis: tuple[int, int, int]) -> Matrix: + """Get rotation matrix to align arrow with the given axis.""" + axis_vec = Vector(axis).normalized() + default_dir = Vector((1, 0, 0)) + return default_dir.rotation_difference(axis_vec).to_matrix().to_4x4() + + @classmethod + def is_element_type(cls, element) -> bool: + """Check if the element is of the correct type. Must be overridden by subclass.""" + raise NotImplementedError("Subclass must implement is_element_type()") + + @classmethod + def poll(cls, context) -> bool: + """Show gizmo only when a single element of the correct type is selected and active.""" + prefs = tool.Blender.get_addon_preferences() + if not prefs.gizmos.draw_gizmos_in_3d_viewport: + return False + + obj = tool.Blender.get_active_object(is_selected=True) + if not obj: + return False + + if len(tool.Blender.get_selected_objects()) != 1: + return False + + element = tool.Ifc.get_entity(obj) + if not element or not cls.is_element_type(element): + return False + return True + + def get_props(self, obj: bpy.types.Object) -> Any: + """Get properties for the element. Must be overridden by subclass.""" + raise NotImplementedError("Subclass must implement get_props()") + + def get_gizmo_prefs(self) -> Any: + """Get gizmo preferences for this element type. Must be overridden by subclass.""" + raise NotImplementedError("Subclass must implement get_gizmo_prefs()") + + def get_prop_min_value(self, attr_name: str) -> float: + """Get minimum value for a property. Override to customize.""" + return 0.0 + + def should_hide_gizmo(self, attr_name: str, props) -> bool: + """Check if a specific gizmo should be hidden. Override to add visibility rules.""" + return not props.is_editing + + def get_element_height(self, props) -> float: + """Get the element height for icon positioning. Override if property name differs.""" + return getattr(props, "overall_height", getattr(props, "height", 1.0)) + + def setup_property_gizmos(self, context: bpy.types.Context) -> None: + """Set up gizmos for all properties in gizmo_props.""" + prefs = tool.Blender.get_addon_preferences() + highlight_color = prefs.decorator_color_selected[:3] + + for prop_config in self.gizmo_props: + attr_name = prop_config.attr_name + invert_delta = prop_config.invert_delta + gizmo = self.gizmos.new("BIM_GT_gizmo_cone") + + # Create closures that capture attr_name + def make_move_get(name): + def move_get(): + obj = bpy.context.active_object + if not obj: + return 0.0 + props = self.get_props(obj) + return getattr(props, name) + + return move_get + + def make_move_set(name): + def move_set(value): + obj = bpy.context.active_object + if not obj: + return + props = self.get_props(obj) + min_val = self.get_prop_min_value(name) + setattr(props, name, max(min_val, value)) + + return move_set + + gizmo.move_get_cb = make_move_get(attr_name) + gizmo.move_set_cb = make_move_set(attr_name) + gizmo.axis = Vector(prop_config.axis) + gizmo.local_axis = Vector(prop_config.axis) + gizmo.invert_delta = invert_delta + + gizmo.color = self.get_arrow_color_from_axis(prop_config.axis) + gizmo.color_highlight = highlight_color + gizmo.alpha = 0.99 + gizmo.use_draw_modal = True + gizmo.use_draw_scale = True + + setattr(self, f"gizmo_{attr_name}", gizmo) + + def setup_editing_gizmos(self, context: bpy.types.Context) -> None: + """Set up pen, validate, and cancel gizmos for editing mode.""" + prefs = tool.Blender.get_addon_preferences() + default_color = prefs.decorations_colour[:3] + highlight_color = prefs.decorator_color_selected[:3] + + self.pen_gizmo = self.gizmos.new("VIEW3D_GT_pen") + self.pen_gizmo.use_draw_scale = False + self.pen_gizmo.color = default_color + self.pen_gizmo.color_highlight = highlight_color + self.pen_gizmo.alpha = 0.8 + self.pen_gizmo.target_set_operator(self.enable_editing_operator) + + self.validate_gizmo = self.gizmos.new("VIEW3D_GT_validate") + self.validate_gizmo.use_draw_scale = False + self.validate_gizmo.color = self.COLOR_GREEN + self.validate_gizmo.color_highlight = highlight_color + self.validate_gizmo.alpha = 0.8 + self.validate_gizmo.target_set_operator(self.finish_editing_operator) + + self.cancel_gizmo = self.gizmos.new("VIEW3D_GT_cancel") + self.cancel_gizmo.use_draw_scale = False + self.cancel_gizmo.color = self.COLOR_RED + self.cancel_gizmo.color_highlight = highlight_color + self.cancel_gizmo.alpha = 0.8 + self.cancel_gizmo.target_set_operator(self.cancel_editing_operator) + + def update_property_gizmos(self, mw, props) -> None: + """Update arrow gizmos position and visibility based on editing state.""" + gizmo_prefs = self.get_gizmo_prefs() + + for prop_config in self.gizmo_props: + attr_name = prop_config.attr_name + gizmo = getattr(self, f"gizmo_{attr_name}", None) + if gizmo is None: + continue + + # Check preferences + if not getattr(gizmo_prefs, attr_name, True): + gizmo.hide = True + continue + + # Check visibility rules + if self.should_hide_gizmo(attr_name, props): + gizmo.hide = True + continue + + # Update position and show arrow + gizmo.hide = False + matrix_method = getattr(self, f"get_gizmo_matrix_{attr_name}", None) + if matrix_method: + gizmo.matrix_basis = mw @ matrix_method(props) + gizmo.matrix_offset = Matrix.Scale(self.ARROW_SCALE, 4) + + def update_editing_gizmos(self, mw, props) -> None: + """Update editing control gizmos (pen/validate/cancel) visibility and position.""" + icon_z = self.get_element_height(props) + 0.5 + local_transform = ( + Matrix.Translation(Vector((0, 0.0, icon_z))) + @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + @ Matrix.Scale(0.5, 4) + ) + icon_matrix_base = mw @ local_transform + + if props.is_editing: + self.pen_gizmo.hide = True + self.validate_gizmo.hide = False + self.validate_gizmo.matrix_basis = icon_matrix_base + self.cancel_gizmo.hide = False + cancel_local = Matrix.Translation(Vector((0.5, 0.0, 0.0))) @ local_transform + self.cancel_gizmo.matrix_basis = mw @ cancel_local + else: + self.pen_gizmo.hide = False + self.pen_gizmo.matrix_basis = icon_matrix_base + self.validate_gizmo.hide = True + self.cancel_gizmo.hide = True diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index dd4bfc0c3b..f33d851887 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -161,6 +161,10 @@ classes = ( stair.FinishEditingStair, stair.EnableEditingStair, stair.RemoveStair, + stair.ToggleStairTotalLengthLock, + stair.AdjustStairTreads, + stair.CycleStairType, + stair.GizmoStairEdition, sverchok_modifier.CreateNewSverchokGraph, sverchok_modifier.UpdateDataFromSverchok, sverchok_modifier.DeleteSverchokGraph, @@ -172,6 +176,7 @@ classes = ( window.FinishEditingWindow, window.EnableEditingWindow, window.RemoveWindow, + window.GizmoWindowEdition, door.BIM_OT_add_door, door.AddDoor, door.CancelEditingDoor, diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index 7a12b724cf..d470e921bd 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -33,10 +33,10 @@ import bonsai.core.geometry import bonsai.core.geometry as core import bonsai.core.root from bonsai.bim.module.model.window import create_bm_window, create_bm_box +from bonsai.bim import gizmo +from bonsai.bim.gizmo import GizmoPropConfig -import math from mathutils import Vector, Matrix -from typing import Union, Any, Optional import json import collections @@ -193,8 +193,8 @@ def bm_mirror( def create_bm_extruded_profile( bm: bmesh.types.BMesh, points: list[Vector], - edges: Optional[list[tuple[int, int]]] = None, - faces: Optional[list[list[int]]] = None, + edges: list[tuple[int, int]] | None = None, + faces: list[list[int]] | None = None, position: Vector = V_(0, 0, 0).freeze(), magnitude: float = 1.0, extrusion_vector: Vector = V_(0, 0, 1).freeze(), @@ -473,6 +473,7 @@ def update_door_modifier_bmesh(context: bpy.types.Context) -> None: lining_offset_verts = lining_verts + door_verts + window_lining_verts + frame_verts + glass_verts bmesh.ops.translate(bm, vec=V_(0, lining_offset, 0), verts=lining_offset_verts) bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=0.0001) + bmesh.ops.recalc_face_normals(bm, faces=bm.faces) if bpy.context.active_object.mode == "EDIT": bmesh.update_edit_mesh(obj.data) @@ -684,104 +685,118 @@ class RemoveDoor(bpy.types.Operator, tool.Ifc.Operator): class ToggleDoorSwing(bpy.types.Operator, tool.Ifc.Operator): - """Toggle door swing direction between LEFT and RIGHT""" + """Toggle door swing direction and optionally flip door geometry. + + Shift+Click (when flip_geometry=True): Flip geometry only without changing door direction""" bl_idname = "bim.toggle_door_swing" bl_label = "Toggle Door Swing" bl_options = {"REGISTER", "UNDO"} + flip_geometry: bpy.props.BoolProperty(name="Flip Geometry", default=False) + flip_local_axes: bpy.props.EnumProperty( + name="Flip Local Axes", items=(("XY", "XY", ""), ("YZ", "YZ", ""), ("XZ", "XZ", "")), default="XY" + ) + skip_direction_change: bpy.props.BoolProperty( + name="Skip Direction Change", default=False, options={"HIDDEN", "SKIP_SAVE"} + ) + + def invoke(self, context, event): + self.skip_direction_change = event.shift + return self.execute(context) + + def _toggle_swing_direction(self, obj: bpy.types.Object) -> bool: + """Toggle door swing direction between LEFT and RIGHT.""" + props = tool.Model.get_door_props(obj) + current_type = props.door_type + + if "LEFT" in current_type: + props.door_type = current_type.replace("LEFT", "RIGHT") + return True + elif "RIGHT" in current_type: + props.door_type = current_type.replace("RIGHT", "LEFT") + return True + return False + def _execute(self, context): obj = tool.Blender.get_active_object() if not obj: return {"CANCELLED"} element = tool.Ifc.get_entity(obj) - if not element or not tool.Blender.Modifier.is_door(element): + if not element: return {"CANCELLED"} - props = tool.Model.get_door_props(obj) - current_type = props.door_type + is_door = tool.Blender.Modifier.is_door(element) - if "LEFT" in current_type: - props.door_type = current_type.replace("LEFT", "RIGHT") - elif "RIGHT" in current_type: - props.door_type = current_type.replace("RIGHT", "LEFT") + if self.flip_geometry: + tool.Geometry.flip_object(obj, self.flip_local_axes) + if not self.skip_direction_change and is_door: + self._toggle_swing_direction(obj) + elif is_door: + self._toggle_swing_direction(obj) + else: + return {"CANCELLED"} return {"FINISHED"} -class GizmoDoorEdition(bpy.types.GizmoGroup): +class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): bl_idname = "OBJECT_GGT_bim_door_edition" bl_label = "Door Editing Gizmo" bl_space_type = "VIEW_3D" bl_region_type = "WINDOW" bl_options = {"3D", "PERSISTENT"} - COLOR_RED = (1.0, 0.2, 0.2) - COLOR_GREEN = (0.1, 0.8, 0.1) - COLOR_BLUE = (0.2, 0.2, 1.0) - ARROW_SCALE = 0.25 - - @classmethod - def get_arrow_color_from_axis(cls, axis): - """Get arrow color based on axis direction (X=red, Y=green, Z=blue).""" - if axis[0] != 0: - return cls.COLOR_RED - elif axis[1] != 0: - return cls.COLOR_GREEN - else: - return cls.COLOR_BLUE + enable_editing_operator = "bim.enable_editing_door" + finish_editing_operator = "bim.finish_editing_door" + cancel_editing_operator = "bim.cancel_editing_door" gizmo_props = [ - {"attr_name": "overall_height", "axis": (0, 0, 1)}, - {"attr_name": "overall_width", "axis": (1, 0, 0)}, - {"attr_name": "threshold_thickness", "axis": (0, 0, 1)}, - {"attr_name": "threshold_depth", "axis": (0, 1, 0)}, - {"attr_name": "lining_depth", "axis": (0, 1, 0)}, - {"attr_name": "lining_thickness", "axis": (1, 0, 0)}, - {"attr_name": "transom_offset", "axis": (0, 0, 1)}, - {"attr_name": "transom_thickness", "axis": (0, 0, 1)}, + GizmoPropConfig("overall_height", (0, 0, 1)), + GizmoPropConfig("overall_width", (1, 0, 0)), + GizmoPropConfig("threshold_thickness", (0, 0, 1)), + GizmoPropConfig("threshold_depth", (0, 1, 0)), + GizmoPropConfig("lining_depth", (0, 1, 0)), + GizmoPropConfig("lining_thickness", (-1, 0, 0)), + GizmoPropConfig("transom_offset", (0, 0, 1)), + GizmoPropConfig("transom_thickness", (0, 0, 1)), + GizmoPropConfig("casing_thickness", (-1, 0, 0)), + GizmoPropConfig("casing_depth", (0, 1, 0)), ] @classmethod - def poll(cls, context): - """Show gizmo only when a single door object is selected and active.""" + def is_element_type(cls, element) -> bool: + return tool.Blender.Modifier.is_door(element) + + def get_props(self, obj): + return tool.Model.get_door_props(obj) + + def get_gizmo_prefs(self): prefs = tool.Blender.get_addon_preferences() - if not prefs.gizmos.draw_gizmos_in_3d_viewport: - return False + return prefs.gizmos.door - obj = tool.Blender.get_active_object(is_selected=True) - if not obj: - return False - - if len(tool.Blender.get_selected_objects()) != 1: - return False - - element = tool.Ifc.get_entity(obj) - if not element or not tool.Blender.Modifier.is_door(element): - return False - return True - - def get_axis_rotation_matrix(self, axis): - """Get rotation matrix to align arrow (default +X direction) with the given axis. - - Args: - axis: Tuple of (x, y, z) representing the target axis direction - - Returns: - Rotation matrix to align arrow with the axis - """ - axis_vec = V_(*axis).normalized() - default_dir = V_(1, 0, 0) - return default_dir.rotation_difference(axis_vec).to_matrix().to_4x4() + def should_hide_gizmo(self, attr_name, props): + """Door-specific visibility rules for gizmos.""" + if not props.is_editing: + return True + if attr_name == "threshold_depth" and props.threshold_thickness == 0.0: + return True + if attr_name == "transom_offset" and props.transom_thickness == 0.0: + return True + if attr_name == "casing_thickness" and props.lining_offset != 0.0: + return True + if attr_name == "casing_depth" and (props.lining_offset != 0.0 or props.casing_thickness == 0.0): + return True + return False def get_gizmo_matrix_overall_height(self, props): - translation = Matrix.Translation(V_(props.overall_width - 0.05, 0.0, props.overall_height)) + translation = Matrix.Translation(V_(props.overall_width - 0.05, props.lining_offset, props.overall_height)) rotation = self.get_axis_rotation_matrix((0, 0, 1)) return translation @ rotation def get_gizmo_matrix_overall_width(self, props): - translation = Matrix.Translation(V_(props.overall_width, 0.0, props.overall_height - 0.05)) + translation = Matrix.Translation(V_(props.overall_width, props.lining_offset, props.overall_height - 0.05)) rotation = self.get_axis_rotation_matrix((1, 0, 0)) return translation @ rotation @@ -789,7 +804,7 @@ class GizmoDoorEdition(bpy.types.GizmoGroup): translation = Matrix.Translation( V_( props.overall_width / 2, - props.threshold_offset + props.threshold_depth / 2, + props.threshold_offset + props.threshold_depth / 2 + props.lining_offset, props.threshold_thickness, ) ) @@ -798,7 +813,7 @@ class GizmoDoorEdition(bpy.types.GizmoGroup): def get_gizmo_matrix_threshold_depth(self, props): translation = Matrix.Translation( - V_(props.overall_width / 2, props.threshold_depth, props.threshold_thickness / 2) + V_(props.overall_width / 2, props.threshold_depth + props.lining_offset, props.threshold_thickness / 2) ) rotation = self.get_axis_rotation_matrix((0, 1, 0)) return translation @ rotation @@ -812,146 +827,86 @@ class GizmoDoorEdition(bpy.types.GizmoGroup): def get_gizmo_matrix_lining_thickness(self, props): translation = Matrix.Translation( - V_(props.lining_thickness, props.lining_depth / 2 + props.lining_offset, props.overall_height / 2) + V_(props.overall_width - props.lining_thickness, props.lining_depth / 2, props.overall_height / 2) ) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) + rotation = self.get_axis_rotation_matrix((-1, 0, 0)) return translation @ rotation def get_gizmo_matrix_transom_offset(self, props): - translation = Matrix.Translation(V_(props.overall_width / 2, 0.0, props.transom_offset)) + translation = Matrix.Translation(V_(props.overall_width / 2, props.lining_offset, props.transom_offset)) rotation = self.get_axis_rotation_matrix((0, 0, 1)) return translation @ rotation def get_gizmo_matrix_transom_thickness(self, props): translation = Matrix.Translation( - V_(props.overall_width / 2, 0.0, props.transom_offset + props.transom_thickness) + V_(props.overall_width / 2, props.lining_offset, props.transom_offset + props.transom_thickness) ) rotation = self.get_axis_rotation_matrix((0, 0, 1)) return translation @ rotation + @staticmethod + def _get_casing_gizmo_base_position(props) -> tuple[float, float, float]: + """Get common base position for casing gizmos.""" + x = -props.casing_thickness + props.lining_thickness + y_base = props.lining_depth + props.lining_offset + z = props.overall_height / 2 + return x, y_base, z + + def get_gizmo_matrix_casing_thickness(self, props): + x, y_base, z = self._get_casing_gizmo_base_position(props) + translation = Matrix.Translation(V_(x, y_base + props.casing_depth / 2, z)) + rotation = self.get_axis_rotation_matrix((-1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_casing_depth(self, props): + x, y_base, z = self._get_casing_gizmo_base_position(props) + translation = Matrix.Translation(V_(x, y_base + props.casing_depth, z)) + rotation = self.get_axis_rotation_matrix((0, 1, 0)) + return translation @ rotation + def setup(self, context): + # Use base class methods for common gizmos + self.setup_property_gizmos(context) + self.setup_editing_gizmos(context) + + # Door-specific: swing arc gizmos prefs = tool.Blender.get_addon_preferences() - default_color = prefs.decorations_colour[:3] highlight_color = prefs.decorator_color_selected[:3] inactive_color = prefs.decorator_color_background[:3] special_color = prefs.decorator_color_special[:3] - def add_gizmo_prop(prop_config): - attr_name = prop_config["attr_name"] - gizmo = self.gizmos.new("BIM_GT_gizmo_cone") - - def move_get(): - obj = bpy.context.active_object - if not obj: - return 0.0 - props = tool.Model.get_door_props(obj) - return getattr(props, attr_name) - - def move_set(value): - obj = bpy.context.active_object - if not obj: - return - props = tool.Model.get_door_props(obj) - setattr(props, attr_name, max(0.0, value)) - - # Set callbacks on the gizmo instance - gizmo.move_get_cb = move_get - gizmo.move_set_cb = move_set - gizmo.axis = V_(*prop_config["axis"]) - gizmo.local_axis = V_(*prop_config["axis"]) - - gizmo.color = self.get_arrow_color_from_axis(prop_config["axis"]) - gizmo.color_highlight = highlight_color - gizmo.alpha = 0.99 - gizmo.use_draw_modal = True - gizmo.use_draw_scale = True - - setattr(self, f"gizmo_{attr_name}", gizmo) - - for prop_config in self.gizmo_props: - add_gizmo_prop(prop_config) - self.gizmo_door_type = self.gizmos.new("VIEW3D_GT_arc") self.gizmo_door_type.use_draw_scale = False self.gizmo_door_type.color = special_color self.gizmo_door_type.alpha = 0.5 self.gizmo_door_type.color_highlight = highlight_color self.gizmo_door_type.prop_path = "BIMDoorProperties.door_type" - self.gizmo_door_type.target_set_operator("bim.toggle_door_swing") + op = self.gizmo_door_type.target_set_operator("bim.toggle_door_swing") + op.flip_geometry = False - # Flip arc gizmo - mirrors the swing arc along X axis, flips door when clicked + # Flip arc gizmo - mirrors the swing arc along X axis, flips door and toggles direction when clicked self.gizmo_flip_arc = self.gizmos.new("VIEW3D_GT_arc") self.gizmo_flip_arc.use_draw_scale = False self.gizmo_flip_arc.color = inactive_color self.gizmo_flip_arc.alpha = 0.5 self.gizmo_flip_arc.color_highlight = highlight_color self.gizmo_flip_arc.prop_path = "BIMDoorProperties.door_type" - op = self.gizmo_flip_arc.target_set_operator("bim.flip_object") + op = self.gizmo_flip_arc.target_set_operator("bim.toggle_door_swing") + op.flip_geometry = True op.flip_local_axes = "XY" - self.pen_gizmo = self.gizmos.new("VIEW3D_GT_pen") - self.pen_gizmo.use_draw_scale = False - self.pen_gizmo.color = default_color - self.pen_gizmo.color_highlight = highlight_color - self.pen_gizmo.alpha = 0.8 - self.pen_gizmo.target_set_operator("bim.enable_editing_door") - - self.validate_gizmo = self.gizmos.new("VIEW3D_GT_validate") - self.validate_gizmo.use_draw_scale = False - self.validate_gizmo.color = self.COLOR_GREEN - self.validate_gizmo.color_highlight = highlight_color - self.validate_gizmo.alpha = 0.8 - self.validate_gizmo.target_set_operator("bim.finish_editing_door") - - self.cancel_gizmo = self.gizmos.new("VIEW3D_GT_cancel") - self.cancel_gizmo.use_draw_scale = False - self.cancel_gizmo.color = self.COLOR_RED - self.cancel_gizmo.color_highlight = highlight_color - self.cancel_gizmo.alpha = 0.8 - self.cancel_gizmo.target_set_operator("bim.cancel_editing_door") - def refresh(self, context): obj = context.active_object if not obj: return - props = tool.Model.get_door_props(obj) + props = self.get_props(obj) mw = obj.matrix_world - self.update_arrows(mw, props) - self.update_swing_gizmo(mw, props) + self.update_property_gizmos(mw, props) + self.update_swing_gizmos(mw, props) self.update_editing_gizmos(mw, props) - def update_arrows(self, mw, props): - """Update arrow gizmos position and visibility based on editing state.""" - prefs = tool.Blender.get_addon_preferences() - door_gizmo_prefs = prefs.gizmos.door - - for prop_config in self.gizmo_props: - attr_name = prop_config["attr_name"] - gizmo = getattr(self, f"gizmo_{attr_name}", None) - if gizmo is None: - continue - - if not getattr(door_gizmo_prefs, attr_name, True): - gizmo.hide = True - continue - - if ( - not props.is_editing - or (attr_name == "threshold_depth" and props.threshold_thickness == 0.0) - or (attr_name == "transom_offset" and props.transom_thickness == 0.0) - ): - gizmo.hide = True - continue - - # Update position and show arrow when editing - gizmo.hide = False - matrix_method = getattr(self, f"get_gizmo_matrix_{attr_name}", None) - if matrix_method: - gizmo.matrix_basis = mw @ matrix_method(props) - gizmo.matrix_offset = Matrix.Scale(self.ARROW_SCALE, 4) - - def update_swing_gizmo(self, mw, props): + def update_swing_gizmos(self, mw, props): """Update swing gizmo position and color based on editing state.""" prefs = tool.Blender.get_addon_preferences() door_gizmo_prefs = prefs.gizmos.door @@ -965,37 +920,13 @@ class GizmoDoorEdition(bpy.types.GizmoGroup): # Calculate base swing transformation (common to both arcs) swing_x_offset = props.overall_width if "RIGHT" in props.door_type else 0.0 - base_swing_transform = Matrix.Translation(V_(swing_x_offset, 0, 0)) @ Matrix.Scale(props.overall_width, 4) + base_swing_transform = Matrix.Translation(V_(swing_x_offset, props.lining_offset, 0)) @ Matrix.Scale(props.overall_width, 4) if not self.gizmo_door_type.hide: self.gizmo_door_type.matrix_basis = mw @ base_swing_transform self.gizmo_door_type.color = prefs.decorations_colour[:3] if not self.gizmo_flip_arc.hide: - mirror_x = Matrix.Scale(-1, 4, (0, 1, 0)) - self.gizmo_flip_arc.matrix_basis = mw @ base_swing_transform @ mirror_x - - def update_editing_gizmos(self, mw, props): - """Update editing control gizmos (pen/validate/cancel) visibility and position.""" - - icon_z = props.overall_height + 0.5 - local_transform = ( - Matrix.Translation(V_(0, 0.0, icon_z)) - @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) - @ Matrix.Scale(0.5, 4) - ) - icon_matrix_base = mw @ local_transform - - if props.is_editing: - self.pen_gizmo.hide = True - self.validate_gizmo.hide = False - self.validate_gizmo.matrix_basis = icon_matrix_base - self.cancel_gizmo.hide = False - cancel_local = Matrix.Translation(V_(0.5, 0.0, 0.0)) @ local_transform - self.cancel_gizmo.matrix_basis = mw @ cancel_local - - else: - self.pen_gizmo.hide = False - self.pen_gizmo.matrix_basis = icon_matrix_base - self.validate_gizmo.hide = True - self.cancel_gizmo.hide = True + # Mirror the flip arc along Y axis to show the opposite swing direction + mirror_y = Matrix.Scale(-1, 4, (0, 1, 0)) + self.gizmo_flip_arc.matrix_basis = mw @ base_swing_transform @ mirror_y diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 303ce43d41..9f61e751c2 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -214,10 +214,17 @@ class BIMModelProperties(PropertyGroup): # Used for things like windows, other hosted furniture, and MEP rl2: bpy.props.FloatProperty(name="RL", default=1, subtype="DISTANCE", description="Z offset for windows") # Used for plan calculation points such as in room generation - rl3: bpy.props.FloatProperty(name="RL", default=1, subtype="DISTANCE", description="Z offset for space calculation") + rl3: bpy.props.FloatProperty( + name="RL", default=1, subtype="DISTANCE", description="Z offset for space calculation" + ) type_page: bpy.props.IntProperty(name="Type Page", default=1, min=1, update=update_type_page) x_angle: bpy.props.FloatProperty( - name="X Angle", default=0, subtype="ANGLE", min=math.radians(-180), max=math.radians(180), update=update_x_angle + name="X Angle", + default=0, + subtype="ANGLE", + min=math.radians(-180), + max=math.radians(180), + update=update_x_angle, ) type_name: bpy.props.StringProperty(name="Name", default="TYPEX") boundary_class: bpy.props.EnumProperty(items=get_boundary_class, name="Boundary Class") @@ -238,7 +245,9 @@ class BIMModelProperties(PropertyGroup): default="TOP", description="Offset convention to reference line", ) - offset: bpy.props.FloatProperty(name="Offset", default=0.0, description="Material usage offset from reference line") + offset: bpy.props.FloatProperty( + name="Offset", default=0.0, description="Material usage offset from reference line" + ) show_wall_axis: bpy.props.BoolProperty( name="Show Wall Axis", default=False, @@ -717,9 +726,11 @@ class BIMWindowProperties(PropertyGroup): overall_width: bpy.props.FloatProperty(name="Overall Width", default=0.6, subtype="DISTANCE", update=update_window) # lining properties - lining_depth: bpy.props.FloatProperty(name="Lining Depth", default=0.050, subtype="DISTANCE", update=update_window) + lining_depth: bpy.props.FloatProperty( + name="Lining Depth", default=0.050, min=0.001, subtype="DISTANCE", update=update_window + ) lining_thickness: bpy.props.FloatProperty( - name="Lining Thickness", default=0.050, subtype="DISTANCE", update=update_window + name="Lining Thickness", default=0.050, min=0.001, subtype="DISTANCE", update=update_window ) lining_offset: bpy.props.FloatProperty( name="Lining Offset", default=0.050, subtype="DISTANCE", update=update_window @@ -748,12 +759,13 @@ class BIMWindowProperties(PropertyGroup): update=update_window, ) transom_thickness: bpy.props.FloatProperty( - name="Transom Thickness", default=0.050, subtype="DISTANCE", update=update_window + name="Transom Thickness", default=0.050, min=0.001, subtype="DISTANCE", update=update_window ) first_transom_offset: bpy.props.FloatProperty( name="First Transom Offset", description="Distance from the first lining to the first transom center", default=0.3, + min=0.001, subtype="DISTANCE", update=update_window, ) diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index 38480089e3..a6bd0ad8af 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -19,6 +19,7 @@ import bpy import json import bmesh +import math import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.element @@ -26,7 +27,9 @@ import ifcopenshell.util.representation import ifcopenshell.util.unit import bonsai.core.root import bonsai.tool as tool -from mathutils import Vector +from bonsai.bim import gizmo +from bonsai.bim.gizmo import GizmoPropConfig +from mathutils import Vector, Matrix from bmesh.types import BMVert from bpy.types import Operator from bpy.props import FloatProperty, IntProperty @@ -293,3 +296,309 @@ class RemoveStair(bpy.types.Operator, tool.Ifc.Operator): ifcopenshell.api.pset.remove_pset(tool.Ifc.get(), product=element, pset=pset) return {"FINISHED"} + + +class ToggleStairTotalLengthLock(bpy.types.Operator): + """Toggle the total length lock for stair editing""" + + bl_idname = "bim.toggle_stair_total_length_lock" + bl_label = "Toggle Stair Total Length Lock" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Model.get_stair_props(obj) + props.total_length_lock = not props.total_length_lock + + return {"FINISHED"} + + +class AdjustStairTreads(bpy.types.Operator): + """Adjust the number of treads""" + + bl_idname = "bim.adjust_stair_treads" + bl_label = "Adjust Stair Treads" + bl_options = {"REGISTER", "UNDO"} + + increment: IntProperty(name="Increment", default=1) + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Model.get_stair_props(obj) + new_value = props.number_of_treads + self.increment + if new_value >= 1: + props.number_of_treads = new_value + + return {"FINISHED"} + + +class CycleStairType(bpy.types.Operator): + """Cycle through stair types. Shift+click to cycle in reverse.""" + + bl_idname = "bim.cycle_stair_type" + bl_label = "Cycle Stair Type" + bl_options = {"REGISTER", "UNDO"} + + reverse: bpy.props.BoolProperty(name="Reverse", default=False, options={"HIDDEN", "SKIP_SAVE"}) + + def invoke(self, context, event): + self.reverse = event.shift + return self.execute(context) + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Model.get_stair_props(obj) + types = ["CONCRETE", "WOOD/STEEL", "GENERIC"] + try: + current_idx = types.index(props.stair_type) + except ValueError: + current_idx = 0 + direction = -1 if self.reverse else 1 + props.stair_type = types[(current_idx + direction) % len(types)] + + return {"FINISHED"} + + +class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): + bl_idname = "OBJECT_GGT_bim_stair_edition" + bl_label = "Stair Editing Gizmo" + bl_space_type = "VIEW_3D" + bl_region_type = "WINDOW" + bl_options = {"3D", "PERSISTENT"} + + enable_editing_operator = "bim.enable_editing_stair" + finish_editing_operator = "bim.finish_editing_stair" + cancel_editing_operator = "bim.cancel_editing_stair" + + gizmo_props = [ + GizmoPropConfig("width", (0, 1, 0)), + GizmoPropConfig("height", (0, 0, 1)), + GizmoPropConfig("tread_run", (1, 0, 0)), + GizmoPropConfig("tread_depth", (0, 0, -1)), + GizmoPropConfig("nosing_length", (-1, 0, 0)), + GizmoPropConfig("nosing_depth", (0, 0, -1)), + GizmoPropConfig("total_length_target", (1, 0, 0)), + GizmoPropConfig("base_slab_depth", (0, 0, -1)), + GizmoPropConfig("top_slab_depth", (0, 0, -1)), + ] + + @classmethod + def is_element_type(cls, element) -> bool: + return tool.Blender.Modifier.is_stair(element) + + def get_props(self, obj): + return tool.Model.get_stair_props(obj) + + def get_gizmo_prefs(self): + prefs = tool.Blender.get_addon_preferences() + return prefs.gizmos.stair + + def should_hide_gizmo(self, attr_name, props): + """Stair-specific visibility rules for gizmos.""" + if not props.is_editing: + return True + # Hide concrete-specific gizmos for non-concrete stairs + if attr_name in ("base_slab_depth", "top_slab_depth") and props.stair_type != "CONCRETE": + return True + # Hide tread_depth for generic stairs (has no tread geometry) + if attr_name == "tread_depth" and props.stair_type == "GENERIC": + return True + # Hide nosing_depth when nosing_length is 0 or for Wood/Steel stair types + if attr_name == "nosing_depth" and (props.nosing_length == 0.0 or props.stair_type == "WOOD/STEEL"): + return True + return False + + @staticmethod + def _get_stair_total_run(props) -> float: + """Calculate the total horizontal run of the stair.""" + return props.tread_run * props.number_of_treads + + @staticmethod + def _get_first_riser_height(props) -> float: + """Calculate the height of the first riser.""" + return props.height / (props.number_of_treads + 1) + + def get_gizmo_matrix_width(self, props): + translation = Matrix.Translation(Vector((0, props.width, 0))) + rotation = self.get_axis_rotation_matrix((0, 1, 0)) + return translation @ rotation + + def get_gizmo_matrix_height(self, props): + total_run = self._get_stair_total_run(props) + translation = Matrix.Translation(Vector((total_run, props.width / 2, props.height))) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def get_gizmo_matrix_tread_run(self, props): + riser_height = self._get_first_riser_height(props) + translation = Matrix.Translation(Vector((props.tread_run, props.width / 2, riser_height))) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_tread_depth(self, props): + riser_height = self._get_first_riser_height(props) + translation = Matrix.Translation(Vector((props.tread_run / 2, props.width / 2, riser_height - props.tread_depth))) + rotation = self.get_axis_rotation_matrix((0, 0, -1)) + return translation @ rotation + + def get_gizmo_matrix_nosing_length(self, props): + riser_height = self._get_first_riser_height(props) + translation = Matrix.Translation(Vector((-props.nosing_length, props.width / 2, riser_height))) + rotation = self.get_axis_rotation_matrix((-1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_nosing_depth(self, props): + riser_height = self._get_first_riser_height(props) + translation = Matrix.Translation(Vector((-props.nosing_length, props.width / 2, riser_height - props.nosing_depth))) + rotation = self.get_axis_rotation_matrix((0, 0, -1)) + return translation @ rotation + + def get_gizmo_matrix_total_length_target(self, props): + translation = Matrix.Translation(Vector((props.total_length_target, props.width / 2, props.height))) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_base_slab_depth(self, props): + translation = Matrix.Translation(Vector((0, props.width / 2, -props.base_slab_depth))) + rotation = self.get_axis_rotation_matrix((0, 0, -1)) + return translation @ rotation + + def get_gizmo_matrix_top_slab_depth(self, props): + total_run = self._get_stair_total_run(props) + translation = Matrix.Translation(Vector((total_run, props.width / 2, props.height - props.top_slab_depth))) + rotation = self.get_axis_rotation_matrix((0, 0, -1)) + return translation @ rotation + + def setup(self, context): + self.setup_property_gizmos(context) + self.setup_editing_gizmos(context) + + # Stair-specific gizmos + prefs = tool.Blender.get_addon_preferences() + highlight_color = prefs.decorator_color_selected[:3] + + # Total length lock gizmo + self.lock_gizmo = self.gizmos.new("VIEW3D_GT_lock") + self.lock_gizmo.use_draw_scale = False + self.lock_gizmo.color = self.COLOR_BLUE + self.lock_gizmo.color_highlight = highlight_color + self.lock_gizmo.alpha = 0.8 + self.lock_gizmo.prop_path = "BIMStairProperties.total_length_lock" + self.lock_gizmo.target_set_operator("bim.toggle_stair_total_length_lock") + + # Plus gizmo for increasing treads + self.plus_gizmo = self.gizmos.new("VIEW3D_GT_plus") + self.plus_gizmo.use_draw_scale = False + self.plus_gizmo.color = self.COLOR_GREEN + self.plus_gizmo.color_highlight = highlight_color + self.plus_gizmo.alpha = 0.8 + op = self.plus_gizmo.target_set_operator("bim.adjust_stair_treads") + op.increment = 1 + + # Minus gizmo for decreasing treads + self.minus_gizmo = self.gizmos.new("VIEW3D_GT_minus") + self.minus_gizmo.use_draw_scale = False + self.minus_gizmo.color = self.COLOR_RED + self.minus_gizmo.color_highlight = highlight_color + self.minus_gizmo.alpha = 0.8 + op = self.minus_gizmo.target_set_operator("bim.adjust_stair_treads") + op.increment = -1 + + # Cycle gizmo for stair type + default_color = prefs.decorations_colour[:3] + self.cycle_gizmo = self.gizmos.new("VIEW3D_GT_cycle") + self.cycle_gizmo.use_draw_scale = False + self.cycle_gizmo.color = default_color + self.cycle_gizmo.color_highlight = highlight_color + self.cycle_gizmo.alpha = 0.8 + self.cycle_gizmo.target_set_operator("bim.cycle_stair_type") + + def refresh(self, context): + obj = context.active_object + if not obj: + return + + props = self.get_props(obj) + mw = obj.matrix_world + self.update_property_gizmos(mw, props) + self.update_editing_gizmos(mw, props) + self.update_lock_gizmo(mw, props) + self.update_tread_count_gizmos(mw, props) + self.update_cycle_gizmo(mw, props) + + def update_lock_gizmo(self, mw, props): + """Update lock gizmo position and visibility.""" + gizmo_prefs = self.get_gizmo_prefs() + self.lock_gizmo.hide = not props.is_editing or not gizmo_prefs.lock + + if self.lock_gizmo.hide: + return + + # Update color based on lock state: red when locked, green when unlocked + self.lock_gizmo.color = self.COLOR_RED if props.total_length_lock else self.COLOR_GREEN + + total_run = self._get_stair_total_run(props) + lock_x = total_run + props.tread_run + 0.5 + local_transform = ( + Matrix.Translation(Vector((lock_x, props.width / 2, props.height))) + @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + @ Matrix.Scale(0.2, 4) + ) + self.lock_gizmo.matrix_basis = mw @ local_transform + + def update_tread_count_gizmos(self, mw, props): + """Update plus and minus gizmos for tread count adjustment.""" + gizmo_prefs = self.get_gizmo_prefs() + + # Plus gizmo - always visible when editing (if preference enabled) + self.plus_gizmo.hide = not props.is_editing or not gizmo_prefs.plus + # Minus gizmo - hidden when number_of_treads is 1 (if preference enabled) + self.minus_gizmo.hide = not props.is_editing or props.number_of_treads <= 1 or not gizmo_prefs.minus + + if self.plus_gizmo.hide and self.minus_gizmo.hide: + return + + total_run = self._get_stair_total_run(props) + base_x = total_run + props.tread_run + 0.5 + + if not self.plus_gizmo.hide: + plus_local_transform = ( + Matrix.Translation(Vector((base_x + 0.25, props.width / 2, props.height + 0.15))) + @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + @ Matrix.Scale(0.2, 4) + ) + self.plus_gizmo.matrix_basis = mw @ plus_local_transform + + if not self.minus_gizmo.hide: + minus_local_transform = ( + Matrix.Translation(Vector((base_x + 0.5, props.width / 2, props.height + 0.15))) + @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + @ Matrix.Scale(0.2, 4) + ) + self.minus_gizmo.matrix_basis = mw @ minus_local_transform + + def update_cycle_gizmo(self, mw, props): + """Update cycle gizmo position - 0.5m above lock gizmo.""" + gizmo_prefs = self.get_gizmo_prefs() + self.cycle_gizmo.hide = not props.is_editing or not gizmo_prefs.cycle + + if self.cycle_gizmo.hide: + return + + total_run = self._get_stair_total_run(props) + cycle_x = total_run + props.tread_run + 0.5 # Same X as lock + local_transform = ( + Matrix.Translation(Vector((cycle_x, props.width / 2, props.height + 0.5))) # +0.5m above lock + @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + @ Matrix.Scale(0.2, 4) + ) + self.cycle_gizmo.matrix_basis = mw @ local_transform diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index c166ff7d54..9f3f68d4b3 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -28,6 +28,8 @@ import ifcopenshell.api.pset import bonsai.tool as tool import bonsai.core.root import bonsai.core.geometry +from bonsai.bim import gizmo +from bonsai.bim.gizmo import GizmoPropConfig from ifcopenshell.api.geometry.add_window_representation import DEFAULT_PANEL_SCHEMAS import ifcopenshell.api import ifcopenshell.api.material @@ -36,8 +38,7 @@ import ifcopenshell.util.representation import ifcopenshell.util.shape_builder import ifcopenshell.util.unit from bmesh.types import BMVert -from mathutils import Vector -from typing import Optional, Union +from mathutils import Vector, Matrix V_ = tool.Blender.V_ @@ -139,7 +140,7 @@ def update_window_modifier_representation(context: bpy.types.Context) -> None: def create_bm_window_frame( - bm: bmesh.types.BMesh, size: Vector, thickness: Union[float, list[float]], position: Vector = V_(0, 0, 0).freeze() + bm: bmesh.types.BMesh, size: Vector, thickness: float | list[float], position: Vector = V_(0, 0, 0).freeze() ) -> list[bmesh.types.BMVert]: """`thickness` of the profile is defined as list in the following order: `(LEFT, TOP, RIGHT, BOTTOM)` @@ -226,7 +227,7 @@ def create_bm_window( frame_thickness: float, glass_thickness: float, position: Vector, - x_offsets: Optional[list] = None, + x_offsets: list | None = None, ) -> tuple[list[bmesh.types.BMVert], list[bmesh.types.BMVert], list[bmesh.types.BMVert]]: """`lining_thickness` and `x_offsets` are expected to be defined as a list, similarly to `create_bm_window_frame` `thickness` argument""" @@ -391,6 +392,7 @@ def update_window_modifier_bmesh(context: bpy.types.Context) -> None: bmesh.ops.translate(bm, vec=V_(0, lining_offset, 0), verts=bm.verts) bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=0.0001) + bmesh.ops.recalc_face_normals(bm, faces=bm.faces) if bpy.context.active_object.mode == "EDIT": bmesh.update_edit_mesh(obj.data) @@ -575,3 +577,199 @@ class RemoveWindow(bpy.types.Operator, tool.Ifc.Operator): ifcopenshell.api.pset.remove_pset(tool.Ifc.get(), product=element, pset=pset) return {"FINISHED"} + + +class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): + bl_idname = "OBJECT_GGT_bim_window_edition" + bl_label = "Window Editing Gizmo" + bl_space_type = "VIEW_3D" + bl_region_type = "WINDOW" + bl_options = {"3D", "PERSISTENT"} + + enable_editing_operator = "bim.enable_editing_window" + finish_editing_operator = "bim.finish_editing_window" + cancel_editing_operator = "bim.cancel_editing_window" + + gizmo_props = [ + GizmoPropConfig("overall_height", (0, 0, 1)), + GizmoPropConfig("overall_width", (1, 0, 0)), + GizmoPropConfig("lining_depth", (0, 1, 0)), + GizmoPropConfig("lining_thickness", (1, 0, 0)), + GizmoPropConfig("lining_to_panel_offset_x", (1, 0, 0)), + GizmoPropConfig("lining_to_panel_offset_y", (0, 1, 0)), + GizmoPropConfig("mullion_thickness", (1, 0, 0)), + GizmoPropConfig("first_mullion_offset", (1, 0, 0)), + GizmoPropConfig("second_mullion_offset", (1, 0, 0)), + GizmoPropConfig("transom_thickness", (0, 0, 1)), + GizmoPropConfig("first_transom_offset", (0, 0, 1)), + GizmoPropConfig("second_transom_offset", (0, 0, 1)), + ] + + @classmethod + def is_element_type(cls, element) -> bool: + return tool.Blender.Modifier.is_window(element) + + def get_props(self, obj): + return tool.Model.get_window_props(obj) + + def get_gizmo_prefs(self): + prefs = tool.Blender.get_addon_preferences() + return prefs.gizmos.window + + def should_hide_gizmo(self, attr_name, props): + """Window-specific visibility rules for gizmos.""" + if not props.is_editing: + return True + + has_mullion = self._has_mullion(props) + has_second_mullion = self._has_second_mullion(props) + has_transom = self._has_transom(props) + has_second_transom = self._has_second_transom(props) + + if attr_name == "mullion_thickness" and not has_mullion: + return True + if attr_name == "first_mullion_offset" and not has_mullion: + return True + if attr_name == "second_mullion_offset" and not has_second_mullion: + return True + if attr_name == "transom_thickness" and not has_transom: + return True + if attr_name == "first_transom_offset" and not has_transom: + return True + if attr_name == "second_transom_offset" and not has_second_transom: + return True + return False + + def get_gizmo_matrix_overall_height(self, props): + translation = Matrix.Translation(V_(props.overall_width - 0.05, props.lining_offset, props.overall_height)) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def get_gizmo_matrix_overall_width(self, props): + translation = Matrix.Translation(V_(props.overall_width, props.lining_offset, props.overall_height - 0.05)) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_lining_depth(self, props): + translation = Matrix.Translation( + V_(props.overall_width / 2, props.lining_depth + props.lining_offset, props.overall_height) + ) + rotation = self.get_axis_rotation_matrix((0, 1, 0)) + return translation @ rotation + + def get_gizmo_matrix_lining_thickness(self, props): + translation = Matrix.Translation( + V_(props.lining_thickness, props.lining_depth / 2 + props.lining_offset, props.overall_height / 2) + ) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + @staticmethod + def _get_lining_to_panel_offset_y_full(props) -> float: + """Get the full Y offset for lining-to-panel positioning.""" + return (props.lining_depth - props.frame_depth[0]) + props.lining_to_panel_offset_y + + def get_gizmo_matrix_lining_to_panel_offset_x(self, props): + y_full = self._get_lining_to_panel_offset_y_full(props) + translation = Matrix.Translation( + V_(props.lining_to_panel_offset_x, y_full + props.lining_offset, props.lining_thickness) + ) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_lining_to_panel_offset_y(self, props): + y_full = self._get_lining_to_panel_offset_y_full(props) + translation = Matrix.Translation( + V_(props.lining_to_panel_offset_x, y_full + props.frame_depth[0] + props.lining_offset, props.lining_thickness) + ) + rotation = self.get_axis_rotation_matrix((0, 1, 0)) + return translation @ rotation + + def get_gizmo_matrix_mullion_thickness(self, props): + translation = Matrix.Translation( + V_(props.first_mullion_offset + props.mullion_thickness / 2, props.lining_offset, props.overall_height / 2) + ) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_first_mullion_offset(self, props): + translation = Matrix.Translation( + V_(props.first_mullion_offset, props.lining_offset, props.overall_height / 2) + ) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_second_mullion_offset(self, props): + translation = Matrix.Translation( + V_(props.second_mullion_offset, props.lining_offset, props.overall_height / 2) + ) + rotation = self.get_axis_rotation_matrix((1, 0, 0)) + return translation @ rotation + + def get_gizmo_matrix_transom_thickness(self, props): + translation = Matrix.Translation( + V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset + props.transom_thickness / 2) + ) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def get_gizmo_matrix_first_transom_offset(self, props): + translation = Matrix.Translation( + V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset) + ) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def get_gizmo_matrix_second_transom_offset(self, props): + translation = Matrix.Translation( + V_(props.overall_width / 2, props.lining_offset, props.second_transom_offset) + ) + rotation = self.get_axis_rotation_matrix((0, 0, 1)) + return translation @ rotation + + def _has_mullion(self, props): + """Check if the window type uses mullions (vertical dividers).""" + window_type = props.window_type + return window_type in ( + "DOUBLE_PANEL_VERTICAL", + "TRIPLE_PANEL_BOTTOM", + "TRIPLE_PANEL_TOP", + "TRIPLE_PANEL_LEFT", + "TRIPLE_PANEL_RIGHT", + "TRIPLE_PANEL_VERTICAL", + ) + + def _has_second_mullion(self, props): + """Check if the window type uses a second mullion.""" + return props.window_type == "TRIPLE_PANEL_VERTICAL" + + def _has_transom(self, props): + """Check if the window type uses transoms (horizontal dividers).""" + window_type = props.window_type + return window_type in ( + "DOUBLE_PANEL_HORIZONTAL", + "TRIPLE_PANEL_BOTTOM", + "TRIPLE_PANEL_TOP", + "TRIPLE_PANEL_LEFT", + "TRIPLE_PANEL_RIGHT", + "TRIPLE_PANEL_HORIZONTAL", + ) + + def _has_second_transom(self, props): + """Check if the window type uses a second transom.""" + return props.window_type == "TRIPLE_PANEL_HORIZONTAL" + + def setup(self, context): + # Use base class methods for common gizmos + self.setup_property_gizmos(context) + self.setup_editing_gizmos(context) + + def refresh(self, context): + obj = context.active_object + if not obj: + return + + props = self.get_props(obj) + mw = obj.matrix_world + self.update_property_gizmos(mw, props) + self.update_editing_gizmos(mw, props) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 3372808fcf..a5105a0947 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -253,6 +253,8 @@ class GizmoPreferencesDoor(bpy.types.PropertyGroup): lining_thickness: BoolProperty(name="Lining Thickness", default=True) transom_offset: BoolProperty(name="Transom Offset", default=True) transom_thickness: BoolProperty(name="Transom Thickness", default=True) + casing_thickness: BoolProperty(name="Casing Thickness", default=True) + casing_depth: BoolProperty(name="Casing Depth", default=True) swing_arc: BoolProperty(name="Swing Arc", default=True, description="Show door swing direction arc") flip_arc: BoolProperty(name="Flip Arc", default=True, description="Show flip door orientation arc") @@ -265,10 +267,76 @@ class GizmoPreferencesDoor(bpy.types.PropertyGroup): lining_thickness: bool transom_offset: bool transom_thickness: bool + casing_thickness: bool + casing_depth: bool swing_arc: bool flip_arc: bool +class GizmoPreferencesWindow(bpy.types.PropertyGroup): + """Property group for window gizmo visibility settings.""" + + overall_height: BoolProperty(name="Overall Height", default=True) + overall_width: BoolProperty(name="Overall Width", default=True) + lining_depth: BoolProperty(name="Lining Depth", default=True) + lining_thickness: BoolProperty(name="Lining Thickness", default=True) + lining_to_panel_offset_x: BoolProperty(name="Lining to Panel Offset X", default=True) + lining_to_panel_offset_y: BoolProperty(name="Lining to Panel Offset Y", default=True) + mullion_thickness: BoolProperty(name="Mullion Thickness", default=True) + first_mullion_offset: BoolProperty(name="First Mullion Offset", default=True) + second_mullion_offset: BoolProperty(name="Second Mullion Offset", default=True) + transom_thickness: BoolProperty(name="Transom Thickness", default=True) + first_transom_offset: BoolProperty(name="First Transom Offset", default=True) + second_transom_offset: BoolProperty(name="Second Transom Offset", default=True) + + if TYPE_CHECKING: + overall_height: bool + overall_width: bool + lining_depth: bool + lining_thickness: bool + lining_to_panel_offset_x: bool + lining_to_panel_offset_y: bool + mullion_thickness: bool + first_mullion_offset: bool + second_mullion_offset: bool + transom_thickness: bool + first_transom_offset: bool + second_transom_offset: bool + + +class GizmoPreferencesStair(bpy.types.PropertyGroup): + """Property group for stair gizmo visibility settings.""" + + width: BoolProperty(name="Width", default=True) + height: BoolProperty(name="Height", default=True) + tread_run: BoolProperty(name="Tread Run", default=True) + tread_depth: BoolProperty(name="Tread Depth", default=True) + nosing_length: BoolProperty(name="Nosing Length", default=True) + nosing_depth: BoolProperty(name="Nosing Depth", default=True) + total_length_target: BoolProperty(name="Total Length Target", default=True) + base_slab_depth: BoolProperty(name="Base Slab Depth", default=True) + top_slab_depth: BoolProperty(name="Top Slab Depth", default=True) + lock: BoolProperty(name="Total Length Lock", default=True) + plus: BoolProperty(name="Add Tread (+)", default=True) + minus: BoolProperty(name="Remove Tread (-)", default=True) + cycle: BoolProperty(name="Cycle Stair Type", default=True) + + if TYPE_CHECKING: + width: bool + height: bool + tread_run: bool + tread_depth: bool + nosing_length: bool + nosing_depth: bool + total_length_target: bool + base_slab_depth: bool + top_slab_depth: bool + lock: bool + plus: bool + minus: bool + cycle: bool + + class GizmoPreferences(bpy.types.PropertyGroup): """Property group for all gizmo visibility settings.""" @@ -278,10 +346,14 @@ class GizmoPreferences(bpy.types.PropertyGroup): description="Show interactive gizmos in the 3D viewport for parametric elements", ) door: bpy.props.PointerProperty(type=GizmoPreferencesDoor) + window: bpy.props.PointerProperty(type=GizmoPreferencesWindow) + stair: bpy.props.PointerProperty(type=GizmoPreferencesStair) if TYPE_CHECKING: draw_gizmos_in_3d_viewport: bool door: GizmoPreferencesDoor + window: GizmoPreferencesWindow + stair: GizmoPreferencesStair class DocPreferences(bpy.types.PropertyGroup): @@ -681,13 +753,40 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): ) def draw_gizmo_parameters(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + layout.label(text="Toggle visibility of gizmos in editing mode") box = layout.box() bonsai.bim.helper.draw_expandable_panel(box, context, "Parametric Door", self.draw_door_gizmo_parameters) + bonsai.bim.helper.draw_expandable_panel(box, context, "Parametric Window", self.draw_window_gizmo_parameters) + bonsai.bim.helper.draw_expandable_panel(box, context, "Parametric Stair", self.draw_stair_gizmo_parameters) def draw_door_gizmo_parameters(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + from bonsai.bim.module.model.door import GizmoDoorEdition + door_gizmos = self.gizmos.door + gizmo_prop_names = {p.attr_name for p in GizmoDoorEdition.gizmo_props} + gizmo_prop_names.update(("swing_arc", "flip_arc")) for prop in door_gizmos.__annotations__: - layout.prop(door_gizmos, prop) + if prop in gizmo_prop_names: + layout.prop(door_gizmos, prop) + + def draw_window_gizmo_parameters(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + from bonsai.bim.module.model.window import GizmoWindowEdition + + window_gizmos = self.gizmos.window + gizmo_prop_names = {p.attr_name for p in GizmoWindowEdition.gizmo_props} + for prop in window_gizmos.__annotations__: + if prop in gizmo_prop_names: + layout.prop(window_gizmos, prop) + + def draw_stair_gizmo_parameters(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + from bonsai.bim.module.model.stair import GizmoStairEdition + + stair_gizmos = self.gizmos.stair + gizmo_prop_names = {p.attr_name for p in GizmoStairEdition.gizmo_props} + special_gizmo_names = {"lock", "plus", "minus"} + for prop in stair_gizmos.__annotations__: + if prop in gizmo_prop_names or prop in special_gizmo_names: + layout.prop(stair_gizmos, prop) def draw_model_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "occurrence_name_style") From 7221e72cfad68040f9f2725297d246b3eb9d8404 Mon Sep 17 00:00:00 2001 From: Diego Mateos Date: Thu, 27 Nov 2025 14:21:01 +0100 Subject: [PATCH 217/657] fix some target folders to respect parent cmake --- src/ifcconvert/CMakeLists.txt | 6 +++++- src/ifcgeomserver/CMakeLists.txt | 6 +++++- src/ifcmax/CMakeLists.txt | 6 +++++- src/serializers/CMakeLists.txt | 6 +++++- src/serializers/schema_dependent/CMakeLists.txt | 8 ++++++-- 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index 108e0e7588..60bc2fee52 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -14,4 +14,8 @@ if(WITH_RELATIONSHIP_VALIDATION) set_property(TARGET IfcConvert APPEND_STRING PROPERTY COMPILE_FLAGS " -DWITH_RELATIONSHIP_VALIDATION") endif() -install(TARGETS IfcConvert) \ No newline at end of file +install(TARGETS IfcConvert + ARCHIVE DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} + LIBRARY DESTINATION ${LIBDIR} +) diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt index ff56607ff2..c0b232c277 100644 --- a/src/ifcgeomserver/CMakeLists.txt +++ b/src/ifcgeomserver/CMakeLists.txt @@ -5,4 +5,8 @@ set(SOURCE_FILES ${CPP_FILES}) add_executable(IfcGeomServer ${SOURCE_FILES}) target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OpenCASCADE_LIBRARIES}) -install(TARGETS IfcGeomServer) +install(TARGETS IfcGeomServer + ARCHIVE DESTINATION ${LIBDIR} + LIBRARY DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} +) diff --git a/src/ifcmax/CMakeLists.txt b/src/ifcmax/CMakeLists.txt index 7b9657155a..38e83e8cb2 100644 --- a/src/ifcmax/CMakeLists.txt +++ b/src/ifcmax/CMakeLists.txt @@ -79,7 +79,11 @@ if(HAS_MAX) set_target_properties(IfcMax_${max_year} PROPERTIES SUFFIX ".dli") - install(TARGETS IfcMax_${max_year} RUNTIME DESTINATION ${BINDIR}) + install(TARGETS IfcMax_${max_year} + ARCHIVE DESTINATION ${LIBDIR} + LIBRARY DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} + ) endforeach() else() message(STATUS "Autodesk 3ds Max SDK not found, is required to build IFCMax.") diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index 8059bdb79c..9b54e553d6 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -19,7 +19,11 @@ endif() target_link_libraries(Serializers ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} IfcGeom ${OPENCASCADE_LIBRARIES} ${kernel_libraries} IfcParse) -install(TARGETS Serializers) +install(TARGETS Serializers + ARCHIVE DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} + LIBRARY DESTINATION ${LIBDIR} +) install(FILES ${SERIALIZERS_H_FILES} DESTINATION ${INCLUDEDIR}/serializers/ diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt index 0240953505..55910ca153 100644 --- a/src/serializers/schema_dependent/CMakeLists.txt +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -12,8 +12,12 @@ foreach(schema ${SCHEMA_VERSIONS}) target_link_libraries(Serializers_ifc${schema} IfcGeom ${OPENCASCADE_LIBRARIES} ${HDF5_LIBRARIES}) endif() - install(TARGETS Serializers_ifc${schema}) + install(TARGETS Serializers_ifc${schema} + ARCHIVE DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} + LIBRARY DESTINATION ${LIBDIR} + ) endforeach() -set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) \ No newline at end of file +set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) From 37d29e5d472d3e518fd18ddeb01b4217905d25a9 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Fri, 21 Nov 2025 19:56:21 +0100 Subject: [PATCH 218/657] cmake: Use same PRIVATE scope for Serializers target --- src/serializers/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index 9b54e553d6..56cbfc7c32 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -17,7 +17,7 @@ if(WITH_PROJ) target_link_libraries(Serializers PRIVATE proj::proj) endif() -target_link_libraries(Serializers ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} IfcGeom ${OPENCASCADE_LIBRARIES} ${kernel_libraries} IfcParse) +target_link_libraries(Serializers PRIVATE ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} IfcGeom ${OPENCASCADE_LIBRARIES} ${kernel_libraries} IfcParse) install(TARGETS Serializers ARCHIVE DESTINATION ${LIBDIR} From 8fb10d2ff3fe882c4397341d7851d406af4a9680 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sun, 23 Nov 2025 16:16:17 +0100 Subject: [PATCH 219/657] cmake: Use OBJECT target instead of STATIC one to avoid mix static and shared targets in a same build --- cmake/CMakeLists.txt | 9 +++------ src/serializers/schema_dependent/CMakeLists.txt | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ed9487c6fc..a594dedf23 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -595,13 +595,13 @@ if(BUILD_CONVERT OR BUILD_IFCPYTHON) foreach(schema ${SCHEMA_VERSIONS}) set(GEOM_SERIALIZER_SCHEMA_LIBRARIES ${GEOM_SERIALIZER_SCHEMA_LIBRARIES} GeometrySerializers_ifc${schema}) - add_library(geometry_serializer_ifc${schema} STATIC ../src/ifcgeom/Serialization/schema/Serialization.cpp) + add_library(geometry_serializer_ifc${schema} OBJECT ../src/ifcgeom/Serialization/schema/Serialization.cpp) set_target_properties(geometry_serializer_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS -DIfcSchema=Ifc${schema}") target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES}) list(APPEND geometry_serializer_libraries geometry_serializer_ifc${schema}) endforeach() - add_library(geometry_serializer STATIC ../src/ifcgeom/Serialization/Serialization.h ../src/ifcgeom/Serialization/Serialization.cpp) + add_library(geometry_serializer OBJECT ../src/ifcgeom/Serialization/Serialization.h ../src/ifcgeom/Serialization/Serialization.cpp) set_target_properties(geometry_serializer PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS") target_link_libraries(geometry_serializer ${geometry_serializer_libraries} IfcParse) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} geometry_serializer ${geometry_serializer_libraries}) @@ -636,12 +636,9 @@ if(BUILD_IFCGEOM) file(GLOB IFCGEOM_CPP_FILES ../src/ifcgeom/mapping/*.cpp) set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES} ${IFCGEOM_I_FILES}) - add_library(geometry_mapping_ifc${schema} STATIC ${IFCGEOM_FILES}) + add_library(geometry_mapping_ifc${schema} OBJECT ${IFCGEOM_FILES}) set_target_properties(geometry_mapping_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") target_link_libraries(geometry_mapping_ifc${schema} IfcParse) - if (NOT BUILD_SHARED_LIBS) - target_link_libraries(geometry_mapping_ifc${schema} IfcGeom) - endif() list(APPEND mapping_libraries geometry_mapping_ifc${schema}) endforeach() diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt index 55910ca153..40f17d283d 100644 --- a/src/serializers/schema_dependent/CMakeLists.txt +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -3,7 +3,7 @@ file(GLOB SERIALIZERS_S_CPP_FILES *.cpp) set(SERIALIZERS_S_FILES ${SERIALIZERS_S_H_FILES} ${SERIALIZERS_S_CPP_FILES}) foreach(schema ${SCHEMA_VERSIONS}) - add_library(Serializers_ifc${schema} STATIC ${SERIALIZERS_S_FILES}) + add_library(Serializers_ifc${schema} OBJECT ${SERIALIZERS_S_FILES}) set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} Serializers_ifc${schema}) set_target_properties(Serializers_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") if(WASM_BUILD) From e4c82e2c92b0fb06b71f67b99216b12bea2705a6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 24 Nov 2025 12:08:53 +0500 Subject: [PATCH 220/657] FindOpenCASCADE - log found config --- cmake/FindOpenCASCADE.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index 438d2a9873..6a144c04f2 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -35,6 +35,7 @@ if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) find_package(VTK QUIET) find_package(OpenCASCADE CONFIG REQUIRED) + message(STATUS "Found OpenCASCADE config: ${OpenCASCADE_DIR}") return() endif() From bcb63f450bbda6a543becbd7cbe55999287b3ab2 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 24 Nov 2025 13:00:07 +0500 Subject: [PATCH 221/657] build-deps - make rocksdb installation minimal --- win/build-deps.cmd | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 5c5b634d8b..776864ab84 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -717,6 +717,10 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\rocksdb" ^ -DROCKSDB_INSTALL_ON_WINDOWS=On ^ -DFAIL_ON_WARNINGS=Off ^ -DWITH_TESTS=OFF ^ + -DWITH_TOOLS=OFF ^ + -DWITH_BENCHMARK_TOOLS=OFF ^ + -DWITH_CORE_TOOLS=OFF ^ + -DROCKSDB_BUILD_SHARED=OFF ^ -DWITH_ZSTD=On ^ -DPORTABLE=1 IF NOT %ERRORLEVEL%==0 GOTO :Error From 5b5609314736a2fd26bd77719bfe7550b87c24e9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 28 Nov 2025 18:41:48 +0500 Subject: [PATCH 222/657] black . --- src/bonsai/bonsai/__init__.py | 8 +-- src/bonsai/bonsai/bim/gizmo.py | 72 +++++++++++-------- src/bonsai/bonsai/bim/module/model/door.py | 4 +- src/bonsai/bonsai/bim/module/model/prop.py | 8 +-- src/bonsai/bonsai/bim/module/model/stair.py | 8 ++- src/bonsai/bonsai/bim/module/model/window.py | 22 +++--- .../ifcopenshell/util/element.py | 15 +++- 7 files changed, 78 insertions(+), 59 deletions(-) diff --git a/src/bonsai/bonsai/__init__.py b/src/bonsai/bonsai/__init__.py index b0edc0daba..ab5d46607b 100644 --- a/src/bonsai/bonsai/__init__.py +++ b/src/bonsai/bonsai/__init__.py @@ -97,7 +97,7 @@ def initialize_bbim_semver(): def get_debug_info(): bbim_version = bbim_semver["version"] - + debug_info = { "os": platform.system(), "os_version": platform.version(), @@ -112,7 +112,7 @@ def get_debug_info(): "last_actions": last_actions, "last_error": last_error, } - + # Add .blend file save information if bpy.data.is_saved: debug_info["blend_file_path"] = bpy.data.filepath @@ -120,7 +120,7 @@ def get_debug_info(): else: debug_info["blend_file_path"] = "Not saved" debug_info["blend_file_dirty"] = "N/A" - + # Add IFC file information bim_props = tool.Blender.get_bim_props() if bim_props.ifc_file: @@ -129,7 +129,7 @@ def get_debug_info(): else: debug_info["ifc_file_path"] = "No IFC loaded" debug_info["ifc_is_dirty"] = "N/A" - + return debug_info diff --git a/src/bonsai/bonsai/bim/gizmo.py b/src/bonsai/bonsai/bim/gizmo.py index 2f6cc2a08e..baab019a7d 100644 --- a/src/bonsai/bonsai/bim/gizmo.py +++ b/src/bonsai/bonsai/bim/gizmo.py @@ -948,28 +948,36 @@ def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: px, py = -dy / length * half_width, dx / length * half_width # XY plane triangles - triangles.extend([ - (x1 + px, y1 + py, 0.0), - (x1 - px, y1 - py, 0.0), - (x2 + px, y2 + py, 0.0), - ]) - triangles.extend([ - (x2 + px, y2 + py, 0.0), - (x1 - px, y1 - py, 0.0), - (x2 - px, y2 - py, 0.0), - ]) + triangles.extend( + [ + (x1 + px, y1 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 + px, y2 + py, 0.0), + ] + ) + triangles.extend( + [ + (x2 + px, y2 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 - px, y2 - py, 0.0), + ] + ) # XZ plane triangles (for visibility from other angles) - triangles.extend([ - (x1, y1, -half_width), - (x2, y2, -half_width), - (x1, y1, +half_width), - ]) - triangles.extend([ - (x1, y1, +half_width), - (x2, y2, -half_width), - (x2, y2, +half_width), - ]) + triangles.extend( + [ + (x1, y1, -half_width), + (x2, y2, -half_width), + (x1, y1, +half_width), + ] + ) + triangles.extend( + [ + (x1, y1, +half_width), + (x2, y2, -half_width), + (x2, y2, +half_width), + ] + ) # Arrowhead at the end of the arc (pointing in direction of cycling) arrow_size = 0.18 # 50% larger than original 0.12 @@ -992,18 +1000,22 @@ def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: perp_y = tangent_x * arrow_size # Arrowhead triangle (XY plane) - triangles.extend([ - (tip_x, tip_y, 0.0), - (end_x - perp_x * 0.5, end_y - perp_y * 0.5, 0.0), - (end_x + perp_x * 0.5, end_y + perp_y * 0.5, 0.0), - ]) + triangles.extend( + [ + (tip_x, tip_y, 0.0), + (end_x - perp_x * 0.5, end_y - perp_y * 0.5, 0.0), + (end_x + perp_x * 0.5, end_y + perp_y * 0.5, 0.0), + ] + ) # Arrowhead triangle (XZ plane for depth) - triangles.extend([ - (tip_x, tip_y, 0.0), - (end_x, end_y, -arrow_size * 0.5), - (end_x, end_y, +arrow_size * 0.5), - ]) + triangles.extend( + [ + (tip_x, tip_y, 0.0), + (end_x, end_y, -arrow_size * 0.5), + (end_x, end_y, +arrow_size * 0.5), + ] + ) return tuple(triangles) diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index d470e921bd..5cc9f03bea 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -920,7 +920,9 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): # Calculate base swing transformation (common to both arcs) swing_x_offset = props.overall_width if "RIGHT" in props.door_type else 0.0 - base_swing_transform = Matrix.Translation(V_(swing_x_offset, props.lining_offset, 0)) @ Matrix.Scale(props.overall_width, 4) + base_swing_transform = Matrix.Translation(V_(swing_x_offset, props.lining_offset, 0)) @ Matrix.Scale( + props.overall_width, 4 + ) if not self.gizmo_door_type.hide: self.gizmo_door_type.matrix_basis = mw @ base_swing_transform diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 9f61e751c2..3b30a85c43 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -214,9 +214,7 @@ class BIMModelProperties(PropertyGroup): # Used for things like windows, other hosted furniture, and MEP rl2: bpy.props.FloatProperty(name="RL", default=1, subtype="DISTANCE", description="Z offset for windows") # Used for plan calculation points such as in room generation - rl3: bpy.props.FloatProperty( - name="RL", default=1, subtype="DISTANCE", description="Z offset for space calculation" - ) + rl3: bpy.props.FloatProperty(name="RL", default=1, subtype="DISTANCE", description="Z offset for space calculation") type_page: bpy.props.IntProperty(name="Type Page", default=1, min=1, update=update_type_page) x_angle: bpy.props.FloatProperty( name="X Angle", @@ -245,9 +243,7 @@ class BIMModelProperties(PropertyGroup): default="TOP", description="Offset convention to reference line", ) - offset: bpy.props.FloatProperty( - name="Offset", default=0.0, description="Material usage offset from reference line" - ) + offset: bpy.props.FloatProperty(name="Offset", default=0.0, description="Material usage offset from reference line") show_wall_axis: bpy.props.BoolProperty( name="Show Wall Axis", default=False, diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index a6bd0ad8af..5cf264a9a3 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -446,7 +446,9 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): def get_gizmo_matrix_tread_depth(self, props): riser_height = self._get_first_riser_height(props) - translation = Matrix.Translation(Vector((props.tread_run / 2, props.width / 2, riser_height - props.tread_depth))) + translation = Matrix.Translation( + Vector((props.tread_run / 2, props.width / 2, riser_height - props.tread_depth)) + ) rotation = self.get_axis_rotation_matrix((0, 0, -1)) return translation @ rotation @@ -458,7 +460,9 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): def get_gizmo_matrix_nosing_depth(self, props): riser_height = self._get_first_riser_height(props) - translation = Matrix.Translation(Vector((-props.nosing_length, props.width / 2, riser_height - props.nosing_depth))) + translation = Matrix.Translation( + Vector((-props.nosing_length, props.width / 2, riser_height - props.nosing_depth)) + ) rotation = self.get_axis_rotation_matrix((0, 0, -1)) return translation @ rotation diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index 9f3f68d4b3..36a49cc082 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -680,7 +680,11 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): def get_gizmo_matrix_lining_to_panel_offset_y(self, props): y_full = self._get_lining_to_panel_offset_y_full(props) translation = Matrix.Translation( - V_(props.lining_to_panel_offset_x, y_full + props.frame_depth[0] + props.lining_offset, props.lining_thickness) + V_( + props.lining_to_panel_offset_x, + y_full + props.frame_depth[0] + props.lining_offset, + props.lining_thickness, + ) ) rotation = self.get_axis_rotation_matrix((0, 1, 0)) return translation @ rotation @@ -693,16 +697,12 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return translation @ rotation def get_gizmo_matrix_first_mullion_offset(self, props): - translation = Matrix.Translation( - V_(props.first_mullion_offset, props.lining_offset, props.overall_height / 2) - ) + translation = Matrix.Translation(V_(props.first_mullion_offset, props.lining_offset, props.overall_height / 2)) rotation = self.get_axis_rotation_matrix((1, 0, 0)) return translation @ rotation def get_gizmo_matrix_second_mullion_offset(self, props): - translation = Matrix.Translation( - V_(props.second_mullion_offset, props.lining_offset, props.overall_height / 2) - ) + translation = Matrix.Translation(V_(props.second_mullion_offset, props.lining_offset, props.overall_height / 2)) rotation = self.get_axis_rotation_matrix((1, 0, 0)) return translation @ rotation @@ -714,16 +714,12 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return translation @ rotation def get_gizmo_matrix_first_transom_offset(self, props): - translation = Matrix.Translation( - V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset) - ) + translation = Matrix.Translation(V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset)) rotation = self.get_axis_rotation_matrix((0, 0, 1)) return translation @ rotation def get_gizmo_matrix_second_transom_offset(self, props): - translation = Matrix.Translation( - V_(props.overall_width / 2, props.lining_offset, props.second_transom_offset) - ) + translation = Matrix.Translation(V_(props.overall_width / 2, props.lining_offset, props.second_transom_offset)) rotation = self.get_axis_rotation_matrix((0, 0, 1)) return translation @ rotation diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index 750dde4fd3..067febd115 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -38,6 +38,7 @@ MATERIAL_TYPE = Literal[ PrioritisedLayer = namedtuple("PrioritisedLayer", "priority material thickness") PrioritisedProfile = namedtuple("PrioritisedProfile", "priority material profile") + def get_pset( element: ifcopenshell.entity_instance, name: str, @@ -1863,7 +1864,10 @@ def get_material_layers(element: ifcopenshell.entity_instance) -> list[Prioritis material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) if not material or not material.is_a("IfcMaterialLayerSet"): return [] - return [PrioritisedLayer(getattr(layer, "Priority", 0) or 0, layer.Material, layer.LayerThickness) for layer in material.MaterialLayers] + return [ + PrioritisedLayer(getattr(layer, "Priority", 0) or 0, layer.Material, layer.LayerThickness) + for layer in material.MaterialLayers + ] def get_material_profiles(element: ifcopenshell.entity_instance) -> list[PrioritisedProfile]: @@ -1881,6 +1885,11 @@ def get_material_profiles(element: ifcopenshell.entity_instance) -> list[Priorit material_profiles = ifcopenshell.util.element.get_material_profiles(element) """ material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) - if not material or not material.is_a("IfcMaterialProfileSet") : + if not material or not material.is_a("IfcMaterialProfileSet"): return [] - return [PrioritisedProfile(getattr(material_profile, "Priority", 0) or 0, material_profile.Material, material_profile.Profile) for material_profile in material.MaterialProfiles] + return [ + PrioritisedProfile( + getattr(material_profile, "Priority", 0) or 0, material_profile.Material, material_profile.Profile + ) + for material_profile in material.MaterialProfiles + ] From 5a8f557e7f0b0943c8c0b5c152ee69c40aee4fdd Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Fri, 28 Nov 2025 10:41:34 -0600 Subject: [PATCH 223/657] Fix #7398: move purge funtions with other purge functions --- src/bonsai/bonsai/bim/module/debug/ui.py | 17 ----------------- src/bonsai/bonsai/bim/module/project/ui.py | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/debug/ui.py b/src/bonsai/bonsai/bim/module/debug/ui.py index 76c2ac79f7..58af7b9f72 100644 --- a/src/bonsai/bonsai/bim/module/debug/ui.py +++ b/src/bonsai/bonsai/bim/module/debug/ui.py @@ -109,23 +109,6 @@ class BIM_PT_debug(Panel): row.prop(props, "display_type", text="") row.operator("bim.override_display_type").display = props.display_type - layout.operator("bim.purge_unused_representations") - - row = layout.row(align=True) - row.prop(props, "ifc_class_purge", text="") - row.operator("bim.purge_unused_elements_by_class", text="Purge Orphaned", icon="TRASH") - row.operator("bim.print_unused_elements_stats", text="", icon="INFO") - - if context.active_object and (data := context.active_object.data): - mprops = tool.Geometry.get_mesh_props(data) - 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 - layout.label(text="Inspector:") row = layout.row(align=True) diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 03b4222008..505816b49b 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -635,6 +635,7 @@ class BIM_PT_purge(Panel): bl_parent_id = "BIM_PT_tab_quality_control" def draw(self, context): + props = tool.Debug.get_debug_props() layout = self.layout layout.operator("bim.purge_unused_objects", text="Purge Unused Profiles").object_type = "PROFILE" layout.operator("bim.purge_unused_objects", text="Purge Unused Types").object_type = "TYPE" @@ -655,3 +656,23 @@ class BIM_PT_purge(Panel): row.operator("bim.purge_unused_objects", text="Purge Unused").object_type = object_type merge_op = row.operator("bim.merge_identical_objects", text="Merge Identical") merge_op.object_type = object_type + + layout.operator("bim.purge_unused_representations") + + row = layout.row(align=True) + row.prop(props, "ifc_class_purge", text="") + row.operator("bim.purge_unused_elements_by_class", text="Purge Orphaned", icon="TRASH") + row.operator("bim.print_unused_elements_stats", text="", icon="INFO") + + if context.active_object and (data := context.active_object.data): + mprops = tool.Geometry.get_mesh_props(data) + 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 + + + From 121acfe6b3e5b13f44619fb1a6353a7a73d4d773 Mon Sep 17 00:00:00 2001 From: Stephen Boddy Date: Fri, 28 Nov 2025 18:37:10 +0000 Subject: [PATCH 224/657] Minor Feature: Add ability to hide the clash decorator in the 3D view. --- .../bonsai/bim/module/clash/__init__.py | 1 + .../bonsai/bim/module/clash/operator.py | 21 +++++++++++++++++++ src/bonsai/bonsai/bim/module/clash/ui.py | 1 + 3 files changed, 23 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/clash/__init__.py b/src/bonsai/bonsai/bim/module/clash/__init__.py index fa6acf5b47..a3ada1bc72 100644 --- a/src/bonsai/bonsai/bim/module/clash/__init__.py +++ b/src/bonsai/bonsai/bim/module/clash/__init__.py @@ -24,6 +24,7 @@ classes = ( operator.AddClashSource, operator.ExecuteIfcClash, operator.ExportClashSets, + operator.HideClash, operator.ImportClashSets, operator.LoadSmartGroupsForActiveClashSet, operator.RemoveClashSet, diff --git a/src/bonsai/bonsai/bim/module/clash/operator.py b/src/bonsai/bonsai/bim/module/clash/operator.py index 4509c0083a..19ee3d076a 100644 --- a/src/bonsai/bonsai/bim/module/clash/operator.py +++ b/src/bonsai/bonsai/bim/module/clash/operator.py @@ -443,6 +443,27 @@ class SelectClash(bpy.types.Operator): return {"FINISHED"} +class HideClash(bpy.types.Operator): + bl_idname = "bim.hide_clash" + bl_label = "Hide Clash" + bl_options = {"REGISTER", "UNDO"} + bl_description = "Hide the clash decorator" + + @classmethod + def poll(cls, context): + if not ClashDecorator.is_installed: + cls.poll_message_set("No clash selected.") + return False + return True + + def execute(self, context): + ClashDecorator.uninstall() + for area in context.screen.areas: + if area.type=="VIEW_3D": + area.tag_redraw() + return {"FINISHED"} + + class SmartClashGroup(bpy.types.Operator): bl_idname = "bim.smart_clash_group" bl_label = "Smart Group Clashes" diff --git a/src/bonsai/bonsai/bim/module/clash/ui.py b/src/bonsai/bonsai/bim/module/clash/ui.py index f0ad45baa3..5e3711efe0 100644 --- a/src/bonsai/bonsai/bim/module/clash/ui.py +++ b/src/bonsai/bonsai/bim/module/clash/ui.py @@ -165,6 +165,7 @@ class BIM_PT_ifcclash(Panel): layout.template_list("BIM_UL_clashes", "", props.active_clash_set, "clashes", props, "active_clash_index") row = layout.row() row.operator("bim.select_clash") + row.operator("bim.hide_clash", text="", icon="HIDE_ON") else: row.label(text="Clashes Are Not Loaded", icon="PIVOT_CURSOR") From 1e212f7b231fda13537dc4d846f5ac46217ea6c5 Mon Sep 17 00:00:00 2001 From: Stephen Boddy Date: Fri, 28 Nov 2025 18:44:06 +0000 Subject: [PATCH 225/657] black --- src/bonsai/bonsai/bim/module/clash/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/clash/operator.py b/src/bonsai/bonsai/bim/module/clash/operator.py index 19ee3d076a..3463b8fc10 100644 --- a/src/bonsai/bonsai/bim/module/clash/operator.py +++ b/src/bonsai/bonsai/bim/module/clash/operator.py @@ -459,7 +459,7 @@ class HideClash(bpy.types.Operator): def execute(self, context): ClashDecorator.uninstall() for area in context.screen.areas: - if area.type=="VIEW_3D": + if area.type == "VIEW_3D": area.tag_redraw() return {"FINISHED"} From ffe9f65b3c7333d7d106cc846616a8a9833bc7d4 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Fri, 28 Nov 2025 23:22:42 +0100 Subject: [PATCH 226/657] Refactor and improve parametric gizmo system - You can now input values using the keyboard once you clicked on a gizmo - Gizmos now support click > move > click in addition to drag and drop (yay carpal tunnel !) - Optimize snapping performance - Consolidate door and window type in model.py - You can now cycle through window and door types using the cycle gizmo - Pen, validate, cancel, lock, and cycle gizmos are now billboards and follow view direction - Draggable gizmos are now billboard 2D arrows instead of 3D cones --- src/bonsai/bonsai/bim/__init__.py | 2 + src/bonsai/bonsai/bim/gizmo.py | 1123 +++++++++++++---- .../bonsai/bim/module/model/__init__.py | 2 + src/bonsai/bonsai/bim/module/model/door.py | 42 +- src/bonsai/bonsai/bim/module/model/prop.py | 35 +- src/bonsai/bonsai/bim/module/model/stair.py | 134 +- src/bonsai/bonsai/bim/module/model/window.py | 45 +- src/bonsai/bonsai/tool/model.py | 23 + 8 files changed, 1073 insertions(+), 333 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 98cbbbd3d8..7e51aea545 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -207,7 +207,9 @@ classes = [ ui.BIM_PT_decorators_overlay, ui.BIM_PT_snappping, # Gizmos + gizmo.BIM_OT_gizmo_value_input, gizmo.GizmoArrow, + gizmo.GizmoArrow2D, gizmo.GizmoCone, gizmo.GizmoLock, gizmo.GizmoArc, diff --git a/src/bonsai/bonsai/bim/gizmo.py b/src/bonsai/bonsai/bim/gizmo.py index baab019a7d..ded59fecdd 100644 --- a/src/bonsai/bonsai/bim/gizmo.py +++ b/src/bonsai/bonsai/bim/gizmo.py @@ -23,12 +23,19 @@ Shared gizmo components for reuse across modules. __all__ = [ # Dataclasses "GizmoPropConfig", + "NumericInputState", # Functions "set_snap_point", "clear_snap_point", "snap_to_mesh", + "build_snap_cache", + "clear_snap_cache", + "get_billboard_rotation", + "get_camera_direction", "generate_circle_vertices", "create_circle_arc", + # Operators + "BIM_OT_gizmo_value_input", # Gizmo classes "GizmoMovable", "GizmoLock", @@ -40,6 +47,7 @@ __all__ = [ "GizmoMinus", "GizmoCycle", "GizmoArrow", + "GizmoArrow2D", "GizmoCone", # Mixin classes "BaseParametricGizmoGroup", @@ -49,21 +57,24 @@ from typing import Any import bpy import math +import numpy as np from dataclasses import dataclass from mathutils import Vector, Matrix -from mathutils.bvhtree import BVHTree +from mathutils.kdtree import KDTree from mathutils.geometry import intersect_line_line from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d, location_3d_to_region_2d import gpu from gpu_extras.batch import batch_for_shader import bonsai.tool as tool +from bonsai.tool.unit import parse_distance_string SNAP_POINT_SIZE = 10.0 SNAP_POINT_COLOR = (1.0, 0.5, 0.0, 1.0) SNAP_MAX_RADIUS = 5.0 -SNAP_SCREEN_DISTANCE = 30 # Maximum screen-space distance for snapping (in pixels) +SNAP_SCREEN_DISTANCE = 15 # Maximum screen-space distance for snapping (in pixels) SNAP_WORLD_DISTANCE = 0.2 # Maximum world-space distance for snapping (in meters) +SNAP_KD_CANDIDATES = 16 # Number of KD-tree candidates (3D nearest may differ from screen nearest) ARROW_SHAFT_LENGTH = 0.8 ARROW_HEAD_LENGTH = 0.2 @@ -83,33 +94,103 @@ PRECISION_MODE_MULTIPLIER = 0.1 RAY_CAST_DISTANCE = 1000 # Distance to extend rays for intersection calculations DEFAULT_POINT_SIZE = 1.0 # Default GPU point size +# Characters allowed for keyboard numeric input (supports units and formulas) +_DIGITS = set("0123456789") +_OPERATORS = {".", "-", "+", "*", "/"} +_METRIC_UNITS = {"m", "c", "d"} # m, cm, dm, mm +_IMPERIAL_UNITS = {"f", "t", "i", "n", "'", '"'} # ft, in, ', " +_SPECIAL = {"=", " "} # Formula prefix, spaces + +NUMERIC_INPUT_CHARS = _DIGITS | _OPERATORS | _METRIC_UNITS | _IMPERIAL_UNITS | _SPECIAL + +# Module-level storage for gizmo callback (Blender ID properties don't support functions) +_gizmo_value_input_callback: dict[str, Any] = {} + + +@dataclass +class SnapCache: + """Unified snap cache with combined KD-tree for vertex snapping.""" + + # Combined KD-tree with all world vertices from all objects + kd_tree: KDTree + # All world vertices indexed by global vertex index + all_vertices: list[Vector] + + +@dataclass +class NumericInputState: + """State for keyboard numeric input during gizmo operations.""" + + characters: list[str] + parsed_value: float + is_active: bool + is_valid: bool + + @classmethod + def create_default(cls) -> "NumericInputState": + return cls(characters=[], parsed_value=0.0, is_active=False, is_valid=True) + + def reset(self) -> None: + self.characters.clear() + self.parsed_value = 0.0 + self.is_active = False + self.is_valid = True + + def get_input_string(self) -> str: + return "".join(self.characters) + + def is_relative_mode(self) -> bool: + input_str = self.get_input_string() + return input_str.startswith("+") or input_str.startswith("-") + + def calculate_final_value(self, init_value: float, invert_delta: bool = False) -> float: + if self.is_relative_mode(): + delta = self.parsed_value + if invert_delta: + delta = -delta + return init_value + delta + return self.parsed_value + + def parse(self) -> None: + """Parse the current input string and update parsed_value and is_valid.""" + if not self.characters: + self.parsed_value = 0.0 + self.is_valid = True + return + + input_str = self.get_input_string() + is_valid, value = parse_distance_string(input_str) + + if is_valid: + self.parsed_value = value + self.is_valid = True + else: + try: + self.parsed_value = float(input_str) + self.is_valid = True + except ValueError: + self.parsed_value = 0.0 + self.is_valid = False + @dataclass class GizmoPropConfig: - """Configuration for a gizmo property. - - Attributes: - attr_name: Name of the property attribute on the element's props - axis: Direction axis as (x, y, z) tuple, determines gizmo color and direction. - Color convention follows Blender's standard axis colors: - - X axis (1, 0, 0) or (-1, 0, 0) -> Red - - Y axis (0, 1, 0) or (0, -1, 0) -> Green - - Z axis (0, 0, 1) or (0, 0, -1) -> Blue - invert_delta: If True, inverts the drag direction for this gizmo - """ + """Configuration for a gizmo property.""" attr_name: str axis: tuple[int, int, int] invert_delta: bool = False + delta_scale: float = 1.0 # Multiplier for the delta (e.g., 2.0 for symmetric thickness properties) class SnapManager: - """Manages snap point visualization and mesh snapping.""" + """Manages snap point visualization and mesh snapping with caching.""" def __init__(self): self._snap_point: tuple[float, float, float] | Vector | None = None self._draw_handler = None self._shader = None + self._snap_cache: SnapCache | None = None def set_snap_point(self, point: tuple[float, float, float] | Vector | None) -> None: """Set snap point and register draw handler if needed.""" @@ -150,90 +231,109 @@ class SnapManager: if area.type == "VIEW_3D": area.tag_redraw() + def build_snap_cache(self, context: bpy.types.Context, active_obj: bpy.types.Object) -> None: + """Build unified cache with combined KD-tree for vertex snapping. + + Uses foreach_get for fast vertex data extraction and NumPy for + batch matrix transformation. + """ + self._snap_cache = None + + mesh_objects = [ + obj for obj in context.visible_objects + if obj.type == "MESH" and obj != active_obj and obj.visible_get() + ] + + if not mesh_objects: + return + + depsgraph = context.evaluated_depsgraph_get() + all_vertices: list[Vector] = [] + + for obj in mesh_objects: + mesh_data = obj.data + if not hasattr(mesh_data, "vertices") or not mesh_data.vertices: + continue + + obj_eval = obj.evaluated_get(depsgraph) + mesh = obj_eval.to_mesh() + + try: + vertex_count = len(mesh.vertices) + if vertex_count == 0: + continue + + coords = np.empty(vertex_count * 3, dtype=np.float32) + mesh.vertices.foreach_get("co", coords) # type: ignore[arg-type] + coords = coords.reshape(-1, 3) + + matrix = np.array(obj_eval.matrix_world, dtype=np.float32) + ones = np.ones((vertex_count, 1), dtype=np.float32) + coords_h = np.hstack([coords, ones]) + world_coords = (coords_h @ matrix.T)[:, :3] + + all_vertices.extend(Vector(co) for co in world_coords) + finally: + obj_eval.to_mesh_clear() + + if not all_vertices: + return + + kd_tree = KDTree(len(all_vertices)) + for i, v in enumerate(all_vertices): + kd_tree.insert(v, i) + kd_tree.balance() + + self._snap_cache = SnapCache( + kd_tree=kd_tree, + all_vertices=all_vertices, + ) + + def clear_snap_cache(self) -> None: + self._snap_cache = None + @staticmethod - def _calc_snap_distance( + def _calc_snap_distance_sq( point_3d: Vector, location: Vector, - mouse_coords: tuple[float, float] | None, + mouse_vec: Vector | None, region: bpy.types.Region | None, rv3d: bpy.types.RegionView3D | None, ) -> float: - """Calculate distance - screen-space if mouse coords available, else world-space.""" - if mouse_coords is not None and region is not None and rv3d is not None: + """Calculate squared distance - screen-space if mouse coords available, else world-space.""" + if mouse_vec is not None and region is not None and rv3d is not None: point_2d = location_3d_to_region_2d(region, rv3d, point_3d) if point_2d is not None: - return (Vector(mouse_coords) - point_2d).length + return (mouse_vec - point_2d).length_squared return float("inf") - return (point_3d - location).length + return (point_3d - location).length_squared @staticmethod def _find_closest_vertex( world_vertices: list[Vector], location: Vector, - mouse_coords: tuple[float, float] | None, + mouse_vec: Vector | None, region: bpy.types.Region | None, rv3d: bpy.types.RegionView3D | None, closest_point: Vector | None, - closest_distance: float, + closest_dist_sq: float, + kd_tree: KDTree | None = None, ) -> tuple[Vector | None, float]: - """Find the closest vertex to snap to.""" - for v_co in world_vertices: - dist = SnapManager._calc_snap_distance(v_co, location, mouse_coords, region, rv3d) - if dist < closest_distance: - closest_distance = dist - closest_point = v_co - return closest_point, closest_distance - - @staticmethod - def _find_closest_edge_point( - mesh: bpy.types.Mesh, - world_vertices: list[Vector], - location: Vector, - mouse_coords: tuple[float, float] | None, - region: bpy.types.Region | None, - rv3d: bpy.types.RegionView3D | None, - closest_point: Vector | None, - closest_distance: float, - ) -> tuple[Vector | None, float]: - """Find the closest point on an edge to snap to.""" - for edge in mesh.edges: - v1 = world_vertices[edge.vertices[0]] - v2 = world_vertices[edge.vertices[1]] - - edge_vec = v2 - v1 - edge_len_sq = edge_vec.length_squared - - if edge_len_sq > 0: - t = max(0, min(1, (location - v1).dot(edge_vec) / edge_len_sq)) - closest_on_edge = v1 + t * edge_vec - dist = SnapManager._calc_snap_distance(closest_on_edge, location, mouse_coords, region, rv3d) - - if dist < closest_distance: - closest_distance = dist - closest_point = closest_on_edge - return closest_point, closest_distance - - @staticmethod - def _find_closest_face_point( - mesh: bpy.types.Mesh, - world_vertices: list[Vector], - location: Vector, - mouse_coords: tuple[float, float] | None, - region: bpy.types.Region | None, - rv3d: bpy.types.RegionView3D | None, - closest_point: Vector | None, - closest_distance: float, - ) -> tuple[Vector | None, float]: - """Find the closest point on a face to snap to.""" - bvh = BVHTree.FromPolygons(world_vertices, [p.vertices for p in mesh.polygons]) - nearest_loc, normal, index, dist = bvh.find_nearest(location) - - if nearest_loc: - screen_dist = SnapManager._calc_snap_distance(nearest_loc, location, mouse_coords, region, rv3d) - if screen_dist < closest_distance: - closest_distance = screen_dist - closest_point = nearest_loc - return closest_point, closest_distance + """Find the closest vertex to snap to using KD-tree if available.""" + if kd_tree is not None: + for _, idx, _ in kd_tree.find_n(location, SNAP_KD_CANDIDATES): + v_co = world_vertices[idx] + dist_sq = SnapManager._calc_snap_distance_sq(v_co, location, mouse_vec, region, rv3d) + if dist_sq < closest_dist_sq: + closest_dist_sq = dist_sq + closest_point = v_co + else: + for v_co in world_vertices: + dist_sq = SnapManager._calc_snap_distance_sq(v_co, location, mouse_vec, region, rv3d) + if dist_sq < closest_dist_sq: + closest_dist_sq = dist_sq + closest_point = v_co + return closest_point, closest_dist_sq @staticmethod def _get_nearby_objects( @@ -241,99 +341,144 @@ class SnapManager: location: Vector, ) -> list[bpy.types.Object]: """Filter objects to those within SNAP_MAX_RADIUS of location.""" + radius_sq = SNAP_MAX_RADIUS * SNAP_MAX_RADIUS nearby_objects = [] + for obj in mesh_objects: bbox_corners = [obj.matrix_world @ Vector(corner) for corner in obj.bound_box] - for corner in bbox_corners: - if (corner - location).length <= SNAP_MAX_RADIUS: - nearby_objects.append(obj) - break + if not bbox_corners: + continue + + bbox_min = Vector(( + min(c.x for c in bbox_corners), + min(c.y for c in bbox_corners), + min(c.z for c in bbox_corners), + )) + bbox_max = Vector(( + max(c.x for c in bbox_corners), + max(c.y for c in bbox_corners), + max(c.z for c in bbox_corners), + )) + + closest = Vector(( + max(bbox_min.x, min(location.x, bbox_max.x)), + max(bbox_min.y, min(location.y, bbox_max.y)), + max(bbox_min.z, min(location.z, bbox_max.z)), + )) + + if (location - closest).length_squared <= radius_sq: + nearby_objects.append(obj) + return nearby_objects - @staticmethod def snap_to_mesh( + self, location: Vector, context: bpy.types.Context, - axis_vector: Vector, active_obj: bpy.types.Object, mouse_coords: tuple[float, float] | None = None, ) -> Vector: - """Snap a location to the nearest mesh element if snapping is enabled. + """Snap a location to the nearest vertex if snapping is enabled. - Args: - location: The world space location to snap - context: The Blender context - axis_vector: The axis direction of the gizmo - active_obj: The active object to exclude from snapping - mouse_coords: Optional (x, y) mouse position in region coordinates for screen-space distance - - Returns: - The snapped location or original location if snapping is disabled + Only vertex snapping is supported. Returns the original location if + snapping is disabled or VERTEX is not in the snap elements. """ tool_settings = context.scene.tool_settings if not tool_settings.use_snap: return location - snap_elements = tool_settings.snap_elements_base - - mesh_objects = [ - obj for obj in context.visible_objects if obj.type == "MESH" and obj != active_obj and obj.visible_get() - ] - - if not mesh_objects: - return location - - nearby_objects = SnapManager._get_nearby_objects(mesh_objects, location) - - if not nearby_objects: + if "VERTEX" not in tool_settings.snap_elements_base: return location region = context.region rv3d = context.region_data use_screen_distance = mouse_coords is not None and region is not None and rv3d is not None + mouse_vec = Vector(mouse_coords) if mouse_coords is not None else None closest_point: Vector | None = None - closest_distance = float("inf") + closest_dist_sq = float("inf") - for obj in nearby_objects: - if not obj.data.vertices: - continue + if self._snap_cache is not None: + closest_point, closest_dist_sq = self._snap_from_cache( + location, mouse_vec, region, rv3d + ) + else: + closest_point, closest_dist_sq = self._snap_without_cache( + location, context, active_obj, mouse_vec, region, rv3d + ) - depsgraph = context.evaluated_depsgraph_get() - obj_eval = obj.evaluated_get(depsgraph) - mesh = obj_eval.to_mesh() - - if not mesh.vertices: - obj_eval.to_mesh_clear() - continue - - world_vertices = [obj.matrix_world @ v.co for v in mesh.vertices] - - if "VERTEX" in snap_elements: - closest_point, closest_distance = SnapManager._find_closest_vertex( - world_vertices, location, mouse_coords, region, rv3d, closest_point, closest_distance - ) - - if "EDGE" in snap_elements: - closest_point, closest_distance = SnapManager._find_closest_edge_point( - mesh, world_vertices, location, mouse_coords, region, rv3d, closest_point, closest_distance - ) - - if "FACE" in snap_elements: - closest_point, closest_distance = SnapManager._find_closest_face_point( - mesh, world_vertices, location, mouse_coords, region, rv3d, closest_point, closest_distance - ) - - obj_eval.to_mesh_clear() - - # Use screen-space threshold (pixels) or fall back to world-space - max_distance = SNAP_SCREEN_DISTANCE if use_screen_distance else SNAP_WORLD_DISTANCE - if closest_point and closest_distance < max_distance: + max_dist_sq = SNAP_SCREEN_DISTANCE ** 2 if use_screen_distance else SNAP_WORLD_DISTANCE ** 2 + if closest_point and closest_dist_sq < max_dist_sq: return closest_point return location + def _snap_from_cache( + self, + location: Vector, + mouse_vec: Vector | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + ) -> tuple[Vector | None, float]: + """Find closest vertex using cached KD-tree.""" + if self._snap_cache is None: + return None, float("inf") + + cache = self._snap_cache + return SnapManager._find_closest_vertex( + cache.all_vertices, location, mouse_vec, region, rv3d, + None, float("inf"), cache.kd_tree + ) + + def _snap_without_cache( + self, + location: Vector, + context: bpy.types.Context, + active_obj: bpy.types.Object, + mouse_vec: Vector | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + ) -> tuple[Vector | None, float]: + """Find closest vertex without cache (fallback path).""" + mesh_objects = [ + obj for obj in context.visible_objects + if obj.type == "MESH" and obj != active_obj and obj.visible_get() + ] + + if not mesh_objects: + return None, float("inf") + + nearby_objects = SnapManager._get_nearby_objects(mesh_objects, location) + if not nearby_objects: + return None, float("inf") + + closest_point: Vector | None = None + closest_dist_sq = float("inf") + depsgraph = context.evaluated_depsgraph_get() + + for obj in nearby_objects: + mesh_data = obj.data + if not hasattr(mesh_data, "vertices") or not mesh_data.vertices: + continue + + obj_eval = obj.evaluated_get(depsgraph) + mesh = obj_eval.to_mesh() + + try: + if not mesh or not mesh.vertices: + continue + + world_vertices = [obj_eval.matrix_world @ v.co for v in mesh.vertices] + closest_point, closest_dist_sq = SnapManager._find_closest_vertex( + world_vertices, location, mouse_vec, region, rv3d, + closest_point, closest_dist_sq + ) + finally: + obj_eval.to_mesh_clear() + + return closest_point, closest_dist_sq + _snap_manager = SnapManager() @@ -349,27 +494,44 @@ def clear_snap_point() -> None: def snap_to_mesh( location: Vector, context: bpy.types.Context, - axis_vector: Vector, active_obj: bpy.types.Object, mouse_coords: tuple[float, float] | None = None, ) -> Vector: - return _snap_manager.snap_to_mesh(location, context, axis_vector, active_obj, mouse_coords) + return _snap_manager.snap_to_mesh(location, context, active_obj, mouse_coords) + + +def build_snap_cache(context: bpy.types.Context, active_obj: bpy.types.Object) -> None: + _snap_manager.build_snap_cache(context, active_obj) + + +def clear_snap_cache() -> None: + _snap_manager.clear_snap_cache() + + +def get_billboard_rotation(context: bpy.types.Context) -> Matrix: + """Get rotation matrix that makes an object face the camera.""" + rv3d = context.region_data + if rv3d is None: + return Matrix.Identity(4) + return rv3d.view_matrix.to_3x3().transposed().to_4x4() + + +def get_camera_direction(context: bpy.types.Context, position: Vector) -> Vector | None: + """Get normalized direction from position towards camera.""" + rv3d = context.region_data + if rv3d is None: + return None + + if rv3d.is_perspective: + view_origin = rv3d.view_matrix.inverted().translation + return (view_origin - position).normalized() + return Vector(rv3d.view_matrix.inverted().col[2][:3]).normalized() def generate_circle_vertices( center: tuple[float, float, float] | Vector, radius: float, segments: int, plane: str = "XY" ) -> list[tuple[float, float, float]]: - """Generate circle vertices in specified plane. - - Args: - center: (x, y, z) tuple for circle center - radius: Circle radius - segments: Number of segments - plane: 'XY', 'XZ', or 'YZ' - - Returns: - List of (x, y, z) vertices - """ + """Generate circle vertices in specified plane ('XY', 'XZ', or 'YZ').""" vertices = [] for i in range(segments + 1): angle = (2 * math.pi * i) / segments @@ -394,19 +556,7 @@ def create_circle_arc( angle_min: float = 0.0, angle_max: float = 90.0, ) -> tuple[tuple[float, float, float], ...]: - """Create a circle arc with cross-section thickness for visibility from all angles. - - Args: - radius: Radius of the arc - segments: Number of segments for smoothness - direction: 'LEFT' for counterclockwise, 'RIGHT' for clockwise (mirrors along X) - line_width: Width of the arc line in both perpendicular directions - angle_min: Start angle in degrees (default 0°) - angle_max: End angle in degrees (default 90°) - - Returns: - Tuple of arc triangles for drawing geometry visible from all angles - """ + """Create a circle arc with cross-section thickness for visibility from all angles.""" half_width = line_width / 2 angle_min_rad = math.radians(angle_min) angle_max_rad = math.radians(angle_max) @@ -469,15 +619,246 @@ def create_circle_arc( return tuple(arc_triangles) -class GizmoMovable(bpy.types.Gizmo): - """Base class for movable gizmos with snapping and precision controls. +class BIM_OT_gizmo_value_input(bpy.types.Operator): + """Enter a numeric value for a gizmo property. Click or Enter to confirm, ESC to cancel.""" - This class provides common functionality for gizmos that can be dragged - to modify values, including: - - Snap to mesh support (toggle with Ctrl) - - Precision mode (hold Shift for 10x slower movement) - - Header text with value and modifier hints - - Consistent invoke/exit/modal behavior + bl_idname = "bim.gizmo_value_input" + bl_label = "Gizmo Value Input" + bl_options = {"REGISTER", "UNDO", "INTERNAL"} + + prop_name: bpy.props.StringProperty(name="Property Name", default="Value") + init_value: bpy.props.FloatProperty(name="Initial Value", default=0.0) + invert_delta: bpy.props.BoolProperty(name="Invert Delta", default=False) + + def invoke(self, context, event): + self._keyboard_input = NumericInputState.create_default() + self._move_set_cb = _gizmo_value_input_callback.get("move_set_cb") + self._active_gizmo = _gizmo_value_input_callback.get("active_gizmo") + self._gizmo_group = _gizmo_value_input_callback.get("gizmo_group") + self._hidden_gizmos: list[bpy.types.Gizmo] = [] + self._original_color: tuple[float, float, float] | None = None + + # Mouse movement context + self._start_location: Vector = _gizmo_value_input_callback.get("start_location", Vector()) + self._axis_direction: Vector = _gizmo_value_input_callback.get("axis_direction", Vector((0, 0, 1))) + self._active_obj: bpy.types.Object | None = _gizmo_value_input_callback.get("active_obj") + self._delta_scale: float = _gizmo_value_input_callback.get("delta_scale", 1.0) + self._mouse_delta: float = 0.0 + + # Snapping state + self._initial_snap_state: bool = context.scene.tool_settings.use_snap + self._snap_cache_built: bool = False + self._is_snapping: bool = False + + self._hide_other_gizmos() + self._set_highlight_color() + + context.window_manager.modal_handler_add(self) + self._update_header(context) + return {"RUNNING_MODAL"} + + def _set_highlight_color(self) -> None: + if not self._active_gizmo: + return + self._original_color = tuple(self._active_gizmo.color) + self._active_gizmo.color = self._active_gizmo.color_highlight + + def _restore_color(self) -> None: + if self._active_gizmo and self._original_color: + self._active_gizmo.color = self._original_color + + def _hide_other_gizmos(self) -> None: + if not self._gizmo_group or not self._active_gizmo: + return + + # Store hidden gizmos so update_property_gizmos respects it. + hidden_set: set[bpy.types.Gizmo] = set() + for gizmo in self._gizmo_group.gizmos: + if gizmo != self._active_gizmo: + gizmo.hide = True + hidden_set.add(gizmo) + self._hidden_gizmos.append(gizmo) + + # Store in module-level dict so gizmo group methods can check it + _gizmo_value_input_callback["hidden_gizmos"] = hidden_set + + def _restore_gizmo_visibility(self) -> None: + # Clear the hidden set first so refresh doesn't re-hide. + _gizmo_value_input_callback.pop("hidden_gizmos", None) + for gizmo in self._hidden_gizmos: + gizmo.hide = False + self._hidden_gizmos.clear() + + def modal(self, context, event): + kb = self._keyboard_input + + # Character input + if event.value == "PRESS" and event.ascii and event.ascii.lower() in NUMERIC_INPUT_CHARS: + kb.characters.append(event.ascii) + kb.is_active = True + kb.parse() + self._apply_value() + self._update_header(context) + return {"RUNNING_MODAL"} + + if event.type == "BACK_SPACE" and event.value == "PRESS": + if kb.characters: + kb.characters.pop() + kb.parse() + self._apply_value() + self._update_header(context) + return {"RUNNING_MODAL"} + + if event.type in {"RET", "NUMPAD_ENTER"} and event.value == "PRESS": + if kb.is_valid: + self._apply_value() + self._cleanup(context) + return {"FINISHED"} + + if event.type == "LEFTMOUSE" and event.value == "PRESS": + if kb.characters: + if kb.is_valid: + self._apply_value() + self._cleanup(context) + return {"FINISHED"} + self._cleanup(context) + return {"CANCELLED"} + + if event.type == "ESC" and event.value == "PRESS": + if self._move_set_cb: + self._move_set_cb(self.init_value) + self._cleanup(context) + return {"CANCELLED"} + + if event.type == "RIGHTMOUSE" and event.value == "PRESS": + if self._move_set_cb: + self._move_set_cb(self.init_value) + self._cleanup(context) + return {"CANCELLED"} + + # Mouse movement - only when not typing + if event.type == "MOUSEMOVE" and not kb.characters: + self._handle_mouse_move(context, event) + return {"RUNNING_MODAL"} + + return {"RUNNING_MODAL"} + + def _handle_mouse_move(self, context, event) -> None: + region = context.region + rv3d = context.region_data + tool_settings = context.scene.tool_settings + if not region or not rv3d: + return + + # Ctrl toggles snapping + self._is_snapping = not self._initial_snap_state if event.ctrl else self._initial_snap_state + + # Build snap cache lazily on first Ctrl press + if self._is_snapping and not self._snap_cache_built and self._active_obj: + build_snap_cache(context, self._active_obj) + self._snap_cache_built = True + + current_coord = (event.mouse_region_x, event.mouse_region_y) + view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) + view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) + + result = intersect_line_line( + view_origin, + view_origin + view_direction * RAY_CAST_DISTANCE, + self._start_location, + self._start_location + self._axis_direction * RAY_CAST_DISTANCE, + ) + current_3d = result[1] if result else self._start_location + + delta = (current_3d - self._start_location).dot(self._axis_direction) + + # Snapping + if self._is_snapping and self._active_obj: + # Temporarily set tool_settings for snap_to_mesh + original_snap = tool_settings.use_snap + tool_settings.use_snap = True + snapped_pos = snap_to_mesh(current_3d, context, self._active_obj, current_coord) + tool_settings.use_snap = original_snap + if snapped_pos != current_3d: + delta = (snapped_pos - self._start_location).dot(self._axis_direction) + set_snap_point(snapped_pos) + else: + clear_snap_point() + else: + clear_snap_point() + + # Precision mode with Shift + if event.shift: + delta *= PRECISION_MODE_MULTIPLIER + + if self.invert_delta: + delta = -delta + + delta *= self._delta_scale + self._mouse_delta = delta + + if self._move_set_cb: + self._move_set_cb(self.init_value + delta) + + self._update_header(context) + + def _apply_value(self) -> None: + if not self._move_set_cb or not self._keyboard_input.is_valid: + return + final_value = self._keyboard_input.calculate_final_value(self.init_value, self.invert_delta) + self._move_set_cb(final_value) + + def _update_header(self, context) -> None: + if not context.area: + return + kb = self._keyboard_input + + if kb.characters: + # Typing mode - show keyboard input + input_str = kb.get_input_string() + preview = kb.calculate_final_value(self.init_value, self.invert_delta) + validity = "" if kb.is_valid else " [invalid]" + header = f"{self.prop_name}: {preview:.3f}m | Input: {input_str}_{validity}" + header += " | Click/Enter: Confirm | ESC: Cancel" + else: + # Mouse mode - show current value from mouse delta + current_value = self.init_value + self._mouse_delta + header = f"{self.prop_name}: {current_value:.3f}m" + hints = [] + if self._is_snapping: + hints.append("Snapping: ON") + hints.extend(["Ctrl: Snap", "Shift: Precision", "Type: Enter Value"]) + header += " | " + " | ".join(hints) + header += " | Click/Enter: Confirm | ESC: Cancel" + + context.area.header_text_set(header) + + def _cleanup(self, context) -> None: + try: + if context.area: + context.area.header_text_set(None) + finally: + try: + self._restore_color() + finally: + try: + self._restore_gizmo_visibility() + # Trigger gizmo group refresh to recalculate positions based on new values + if self._gizmo_group and hasattr(self._gizmo_group, "refresh"): + self._gizmo_group.refresh(context) + # Force viewport redraw to update gizmo display + if context.area: + context.area.tag_redraw() + finally: + clear_snap_point() + clear_snap_cache() + _gizmo_value_input_callback.clear() + + +class GizmoMovable(bpy.types.Gizmo): + """Base class for draggable gizmos. Ctrl: snap, Shift: precision, Keyboard: direct input. + + Click without dragging enters a keyboard-only input mode for accessibility. """ __slots__ = ( @@ -491,24 +872,80 @@ class GizmoMovable(bpy.types.Gizmo): "active_obj", "initial_snap_state", "invert_delta", + "delta_scale", + "prop_name", + "keyboard_input", + "gizmo_group", + "_snap_cache_built", + "_start_mouse_pos", + "_has_dragged", ) + # Threshold in pixels for considering mouse movement as a drag + DRAG_THRESHOLD = 5 + def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set: self.init_value = self.move_get_cb() if self.move_get_cb else 0.0 self.start_location = self.matrix_basis.translation.copy() self.active_obj = context.active_object self.initial_snap_state = context.scene.tool_settings.use_snap + self.keyboard_input = NumericInputState.create_default() + self._snap_cache_built = False + self._start_mouse_pos = (event.mouse_region_x, event.mouse_region_y) + self._has_dragged = False + if not hasattr(self, "prop_name") or self.prop_name is None: + self.prop_name = "Value" + # Build cache immediately only if snap is already enabled + if self.initial_snap_state and self.active_obj: + build_snap_cache(context, self.active_obj) + self._snap_cache_built = True return {"RUNNING_MODAL"} def exit(self, context: bpy.types.Context, cancel: bool) -> None: - context.area.header_text_set(None) - if cancel and self.move_set_cb: + if context.area: + context.area.header_text_set(None) + if hasattr(self, "keyboard_input"): + self.keyboard_input.reset() + + # Check for click-without-drag: invoke keyboard input operator for accessibility + should_invoke_keyboard = ( + not cancel + and hasattr(self, "_has_dragged") + and not self._has_dragged + and self.move_set_cb is not None + ) + + if should_invoke_keyboard: + # Store callback and gizmo references in module-level dict + _gizmo_value_input_callback["move_set_cb"] = self.move_set_cb + _gizmo_value_input_callback["active_gizmo"] = self + _gizmo_value_input_callback["gizmo_group"] = getattr(self, "gizmo_group", None) + # Store context for mouse movement support + _gizmo_value_input_callback["start_location"] = self.start_location.copy() + _gizmo_value_input_callback["axis_direction"] = self.get_axis_direction() + _gizmo_value_input_callback["active_obj"] = self.active_obj + _gizmo_value_input_callback["delta_scale"] = getattr(self, "delta_scale", 1.0) + bpy.ops.bim.gizmo_value_input( + "INVOKE_DEFAULT", + prop_name=getattr(self, "prop_name", "Value"), + init_value=self.init_value, + invert_delta=getattr(self, "invert_delta", False), + ) + elif cancel and self.move_set_cb: self.move_set_cb(self.init_value) + if hasattr(self, "initial_snap_state"): context.scene.tool_settings.use_snap = self.initial_snap_state clear_snap_point() + clear_snap_cache() def get_axis_direction(self) -> Vector: + """Get the world-space axis direction, transforming local_axis if set.""" + if hasattr(self, "local_axis") and self.active_obj: + obj_rotation = self.active_obj.matrix_world.to_3x3() + axis_direction: Vector = obj_rotation @ self.local_axis + axis_direction.normalize() + return axis_direction return self.axis def modal(self, context: bpy.types.Context, event: bpy.types.Event, tweak) -> set: @@ -516,9 +953,31 @@ class GizmoMovable(bpy.types.Gizmo): rv3d = context.region_data tool_settings = context.scene.tool_settings + keyboard_result = self._handle_keyboard_input(context, event) + if keyboard_result is not None: + return keyboard_result + + if self.keyboard_input.is_active: + return {"RUNNING_MODAL"} + + if not region or not rv3d: + return {"RUNNING_MODAL"} + tool_settings.use_snap = not self.initial_snap_state if event.ctrl else self.initial_snap_state + # Build snap cache lazily on first Ctrl press if not already built + if tool_settings.use_snap and not self._snap_cache_built and self.active_obj: + build_snap_cache(context, self.active_obj) + self._snap_cache_built = True + current_coord = (event.mouse_region_x, event.mouse_region_y) + + # Detect if user has dragged beyond threshold + if not self._has_dragged and hasattr(self, "_start_mouse_pos"): + dx = current_coord[0] - self._start_mouse_pos[0] + dy = current_coord[1] - self._start_mouse_pos[1] + if (dx * dx + dy * dy) > (self.DRAG_THRESHOLD ** 2): + self._has_dragged = True view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) @@ -535,7 +994,7 @@ class GizmoMovable(bpy.types.Gizmo): delta = (current_3d - self.start_location).dot(axis_direction) if tool_settings.use_snap and self.active_obj: - snapped_pos = snap_to_mesh(current_3d, context, axis_direction, self.active_obj, current_coord) + snapped_pos = snap_to_mesh(current_3d, context, self.active_obj, current_coord) if snapped_pos != current_3d: delta = (snapped_pos - self.start_location).dot(axis_direction) set_snap_point(snapped_pos) @@ -550,29 +1009,99 @@ class GizmoMovable(bpy.types.Gizmo): if getattr(self, "invert_delta", False): delta = -delta - if self.move_set_cb: - self.move_set_cb(self.init_value + delta) + # Apply delta scale (e.g., 2.0 for symmetric thickness properties) + delta_scale = getattr(self, "delta_scale", 1.0) + delta *= delta_scale - self._update_header(context, self.init_value + delta, tool_settings.use_snap, event.shift) + kb = self.keyboard_input + final_delta = kb.parsed_value if kb.parsed_value != 0.0 else delta + + if self.move_set_cb: + self.move_set_cb(self.init_value + final_delta) + + self._update_header(context, self.init_value + final_delta, tool_settings.use_snap, event.shift) return {"RUNNING_MODAL"} + def _handle_keyboard_input( + self, context: bpy.types.Context, event: bpy.types.Event + ) -> set[str] | None: + """Handle keyboard numeric input.""" + kb = self.keyboard_input + + if event.value == "PRESS" and event.ascii and event.ascii.lower() in NUMERIC_INPUT_CHARS: + kb.characters.append(event.ascii) + kb.is_active = True + kb.parse() + self._apply_keyboard_value() + self._update_header_typing(context) + return {"RUNNING_MODAL"} + + if event.type == "BACK_SPACE" and event.value == "PRESS": + if kb.characters: + kb.characters.pop() + kb.parse() + self._apply_keyboard_value() + self._update_header_typing(context) + elif kb.is_active: + kb.reset() + if self.move_set_cb: + self.move_set_cb(self.init_value) + return {"RUNNING_MODAL"} + + if event.type in {"RET", "NUMPAD_ENTER"} and event.value == "PRESS": + if kb.is_active and kb.is_valid: + final_value = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) + kb.characters.clear() + kb.is_active = False + self._update_header(context, final_value, False, False) + return {"RUNNING_MODAL"} + + if event.type == "ESC" and event.value == "PRESS" and kb.is_active: + kb.reset() + if self.move_set_cb: + self.move_set_cb(self.init_value) + return {"RUNNING_MODAL"} + + return None + + def _apply_keyboard_value(self) -> None: + kb = self.keyboard_input + if self.move_set_cb and kb.is_valid: + final_value = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) + self.move_set_cb(final_value) + + def _update_header_typing(self, context: bpy.types.Context) -> None: + if not context.area: + return + kb = self.keyboard_input + input_str = kb.get_input_string() + preview = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) + + validity = "" if kb.is_valid else " [invalid]" + prop_display = getattr(self, "prop_name", "Value") + + header = f"{prop_display}: {preview:.3f}m | Input: {input_str}_{validity}" + header += " | Enter: Confirm | Backspace: Delete | ESC: Cancel" + context.area.header_text_set(header) + def _update_header(self, context: bpy.types.Context, value: float, is_snapping: bool, is_precision: bool) -> None: - header_text = f"Value: {value:.3f}m" + if not context.area: + return + prop_display = getattr(self, "prop_name", "Value") hints = [] if is_snapping: hints.append("Snapping: ON") if is_precision: - hints.append("Precision Mode (0.1x)") - hints.extend(["Ctrl: Toggle Snap", "Shift: Precision"]) + hints.append("Precision (0.1x)") + hints.extend(["Ctrl: Snap", "Shift: Precision", "Type: Enter Value"]) - if hints: - header_text += " | " + " | ".join(hints) + header_text = f"{prop_display}: {value:.3f}m | " + " | ".join(hints) context.area.header_text_set(header_text) class GizmoLock(bpy.types.Gizmo): - """Reusable lock icon gizmo that switches between closed and open states.""" + """Lock icon gizmo that switches between closed and open states.""" bl_idname = "VIEW3D_GT_lock" @@ -696,7 +1225,7 @@ class GizmoLock(bpy.types.Gizmo): class GizmoArc(bpy.types.Gizmo): - """Reusable arc gizmo for door swing visualization.""" + """Arc gizmo for door swing visualization.""" bl_idname = "VIEW3D_GT_arc" @@ -707,7 +1236,7 @@ class GizmoArc(bpy.types.Gizmo): ) def setup(self) -> None: - """Create arc shapes for both LEFT and RIGHT directions.""" + """Create arc shapes for LEFT and RIGHT directions.""" arc_left = create_circle_arc(radius=1.0, direction="LEFT", angle_min=2.0, angle_max=90.0) arc_right = create_circle_arc(radius=1.0, direction="RIGHT", angle_min=2.0, angle_max=90.0) @@ -715,7 +1244,7 @@ class GizmoArc(bpy.types.Gizmo): self.custom_shape_right = self.new_custom_shape(type="TRIS", verts=arc_right) def _get_shape_for_direction(self, context: bpy.types.Context) -> object: - """Get the appropriate arc shape based on door swing direction.""" + """Get arc shape based on door swing direction.""" obj = context.active_object if not obj: return self.custom_shape_left @@ -737,7 +1266,7 @@ class GizmoArc(bpy.types.Gizmo): class GizmoPen(bpy.types.Gizmo): - """Reusable pen/edit icon gizmo for entering edit mode.""" + """Pen/edit icon gizmo for entering edit mode.""" bl_idname = "VIEW3D_GT_pen" @@ -772,7 +1301,7 @@ class GizmoPen(bpy.types.Gizmo): class GizmoValidate(bpy.types.Gizmo): - """Reusable validate/checkmark icon gizmo for confirming edits.""" + """Validate/checkmark icon gizmo for confirming edits.""" bl_idname = "VIEW3D_GT_validate" @@ -804,7 +1333,7 @@ class GizmoValidate(bpy.types.Gizmo): class GizmoCancel(bpy.types.Gizmo): - """Reusable cancel/X icon gizmo for canceling edits.""" + """Cancel/X icon gizmo for canceling edits.""" bl_idname = "VIEW3D_GT_cancel" @@ -854,22 +1383,19 @@ class GizmoCancel(bpy.types.Gizmo): class GizmoPlus(bpy.types.Gizmo): - """Reusable plus/+ icon gizmo for incrementing values.""" + """Plus icon gizmo for incrementing values.""" bl_idname = "VIEW3D_GT_plus" __slots__ = ("custom_shape",) - # Plus sign triangles (cross shape) - 50% larger tris = ( - # Horizontal bar (-0.375, -0.075, 0.0), (-0.375, 0.075, 0.0), (0.375, 0.075, 0.0), (-0.375, -0.075, 0.0), (0.375, 0.075, 0.0), (0.375, -0.075, 0.0), - # Vertical bar (-0.075, -0.375, 0.0), (-0.075, 0.375, 0.0), (0.075, 0.375, 0.0), @@ -889,13 +1415,12 @@ class GizmoPlus(bpy.types.Gizmo): class GizmoMinus(bpy.types.Gizmo): - """Reusable minus/- icon gizmo for decrementing values.""" + """Minus icon gizmo for decrementing values.""" bl_idname = "VIEW3D_GT_minus" __slots__ = ("custom_shape",) - # Minus sign triangles (horizontal bar) - 50% larger tris = ( (-0.375, -0.075, 0.0), (-0.375, 0.075, 0.0), @@ -916,19 +1441,17 @@ class GizmoMinus(bpy.types.Gizmo): def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: - """Generate circular arrow geometry (↻ style) covering ~300 degrees.""" + """Generate circular arrow geometry covering ~300 degrees.""" triangles = [] - radius = 0.375 # 50% larger than original 0.25 - line_width = 0.06 # 50% larger than original 0.04 + radius = 0.375 + line_width = 0.10 half_width = line_width / 2 - # Arc from ~30 degrees to ~330 degrees (300 degree arc) segments = 20 start_angle = math.radians(30) end_angle = math.radians(330) angle_range = end_angle - start_angle - # Generate arc points arc_points = [] for i in range(segments + 1): angle = start_angle + angle_range * (i / segments) @@ -936,18 +1459,15 @@ def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: y = radius * math.sin(angle) arc_points.append((x, y)) - # Create triangles for the arc (flat ribbon in XY plane with Z thickness) for i in range(len(arc_points) - 1): x1, y1 = arc_points[i] x2, y2 = arc_points[i + 1] - # Direction perpendicular to arc segment (for width in XY plane) dx, dy = x2 - x1, y2 - y1 length = (dx**2 + dy**2) ** 0.5 if length > 0: px, py = -dy / length * half_width, dx / length * half_width - # XY plane triangles triangles.extend( [ (x1 + px, y1 + py, 0.0), @@ -963,7 +1483,6 @@ def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: ] ) - # XZ plane triangles (for visibility from other angles) triangles.extend( [ (x1, y1, -half_width), @@ -979,10 +1498,8 @@ def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: ] ) - # Arrowhead at the end of the arc (pointing in direction of cycling) - arrow_size = 0.18 # 50% larger than original 0.12 + arrow_size = 0.30 end_x, end_y = arc_points[-1] - # Direction tangent to the arc at the end prev_x, prev_y = arc_points[-2] tangent_x = end_x - prev_x tangent_y = end_y - prev_y @@ -991,15 +1508,12 @@ def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: tangent_x /= tangent_len tangent_y /= tangent_len - # Arrow tip extends in the tangent direction tip_x = end_x + tangent_x * arrow_size * 0.5 tip_y = end_y + tangent_y * arrow_size * 0.5 - # Arrow base perpendicular to tangent perp_x = -tangent_y * arrow_size perp_y = tangent_x * arrow_size - # Arrowhead triangle (XY plane) triangles.extend( [ (tip_x, tip_y, 0.0), @@ -1008,7 +1522,6 @@ def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: ] ) - # Arrowhead triangle (XZ plane for depth) triangles.extend( [ (tip_x, tip_y, 0.0), @@ -1021,7 +1534,7 @@ def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: class GizmoCycle(bpy.types.Gizmo): - """Reusable circular arrow icon gizmo for cycling through enum values.""" + """Circular arrow icon gizmo for cycling through enum values.""" bl_idname = "VIEW3D_GT_cycle" @@ -1046,7 +1559,6 @@ class GizmoArrow(GizmoMovable): bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) def _get_arrow_triangles(self) -> tuple[tuple[float, float, float], ...]: - """Generate arrow geometry along +X axis.""" triangles = [] triangles.extend( @@ -1125,22 +1637,81 @@ class GizmoArrow(GizmoMovable): self.draw_custom_shape(self.custom_shape, select_id=select_id) +class GizmoArrow2D(GizmoMovable): + """Flat 2D arrow that rotates around its axis to face the camera.""" + + bl_idname = "BIM_GT_gizmo_arrow_2d" + bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) + + ARROW_2D_SHAFT_LENGTH = 0.5 + ARROW_2D_HEAD_LENGTH = 0.5 + ARROW_2D_WIDTH = 0.25 + ARROW_2D_HEAD_WIDTH = 0.75 + + def _get_arrow_2d_triangles(self) -> tuple[tuple[float, float, float], ...]: + """Generate flat arrow geometry in XY plane, pointing along +X.""" + shaft = self.ARROW_2D_SHAFT_LENGTH + head = self.ARROW_2D_HEAD_LENGTH + w = self.ARROW_2D_WIDTH / 2 + hw = self.ARROW_2D_HEAD_WIDTH / 2 + + return ( + # Shaft + (0, -w, 0), (shaft, -w, 0), (0, w, 0), + (0, w, 0), (shaft, -w, 0), (shaft, w, 0), + # Head + (shaft, -hw, 0), (shaft + head, 0, 0), (shaft, hw, 0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self._get_arrow_2d_triangles()) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + def draw_prepare(self, context: bpy.types.Context) -> None: + """Rotate around arrow axis to face camera.""" + position = self.matrix_basis.translation + to_camera = get_camera_direction(context, position) + if to_camera is None: + return + + axis_world = Vector(self.matrix_basis.col[0][:3]).normalized() + to_camera_projected = to_camera - axis_world * to_camera.dot(axis_world) + + if to_camera_projected.length_squared < 1e-6: + return + + to_camera_projected.normalize() + + local_z_world = Vector(self.matrix_basis.col[2][:3]).normalized() + local_z_projected = local_z_world - axis_world * local_z_world.dot(axis_world) + + if local_z_projected.length_squared < 1e-6: + return + + local_z_projected.normalize() + + cross = local_z_projected.cross(to_camera_projected) + dot = local_z_projected.dot(to_camera_projected) + sign = 1.0 if cross.dot(axis_world) >= 0 else -1.0 + angle = sign * math.acos(max(-1.0, min(1.0, dot))) + + axis_rot = Matrix.Rotation(angle, 4, "X") + current_scale = self.matrix_offset.to_scale() if self.matrix_offset else Vector((1, 1, 1)) + self.matrix_offset = axis_rot @ Matrix.Scale(current_scale[0], 4) + + class GizmoCone(GizmoMovable): - """Cone gizmo for directional value editing with local axis support.""" + """Cone gizmo for directional value editing.""" bl_idname = "BIM_GT_gizmo_cone" bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) - def get_axis_direction(self) -> Vector: - if hasattr(self, "local_axis") and self.active_obj: - obj_rotation = self.active_obj.matrix_world.to_3x3() - axis_direction = obj_rotation @ self.local_axis - axis_direction.normalize() - return axis_direction - return self.axis - def _get_cone_triangles(self) -> tuple[tuple[float, float, float], ...]: - """Generate cone geometry along +X axis.""" triangles = [] cone_tip_x = CONE_LENGTH @@ -1182,25 +1753,11 @@ class GizmoCone(GizmoMovable): class BaseParametricGizmoGroup: - """Base mixin class for parametric element gizmo groups (doors, windows, etc.). - - This class provides shared functionality for gizmo groups that edit - parametric BIM elements. Subclasses should define: - - gizmo_props: list of property configurations - - get_props(obj): method to get the element's properties - - get_gizmo_prefs(): method to get gizmo preferences - - element_type_check(element): method to check if element is the right type - - Operator bl_idnames for enable_editing, finish_editing, cancel_editing - - Example subclass: - class GizmoDoorEdition(bpy.types.GizmoGroup, BaseParametricGizmoGroup): - bl_idname = "OBJECT_GGT_bim_door_edition" - ... - """ + """Base mixin for parametric element gizmo groups (doors, windows, etc.).""" COLOR_RED = (1.0, 0.2, 0.2) COLOR_GREEN = (0.1, 0.8, 0.1) - COLOR_BLUE = (0.2, 0.2, 1.0) + COLOR_BLUE = (0.3, 0.3, 1.0) ARROW_SCALE = 0.25 # Subclasses must define these @@ -1208,10 +1765,10 @@ class BaseParametricGizmoGroup: enable_editing_operator: str = "" finish_editing_operator: str = "" cancel_editing_operator: str = "" + cycle_type_operator: str = "" @classmethod def get_arrow_color_from_axis(cls, axis: tuple[int, int, int]) -> tuple[float, float, float]: - """Get arrow color based on axis direction (X=red, Y=green, Z=blue).""" if axis[0] != 0: return cls.COLOR_RED elif axis[1] != 0: @@ -1219,19 +1776,16 @@ class BaseParametricGizmoGroup: return cls.COLOR_BLUE def get_axis_rotation_matrix(self, axis: tuple[int, int, int]) -> Matrix: - """Get rotation matrix to align arrow with the given axis.""" axis_vec = Vector(axis).normalized() default_dir = Vector((1, 0, 0)) return default_dir.rotation_difference(axis_vec).to_matrix().to_4x4() @classmethod def is_element_type(cls, element) -> bool: - """Check if the element is of the correct type. Must be overridden by subclass.""" raise NotImplementedError("Subclass must implement is_element_type()") @classmethod def poll(cls, context) -> bool: - """Show gizmo only when a single element of the correct type is selected and active.""" prefs = tool.Blender.get_addon_preferences() if not prefs.gizmos.draw_gizmos_in_3d_viewport: return False @@ -1249,36 +1803,29 @@ class BaseParametricGizmoGroup: return True def get_props(self, obj: bpy.types.Object) -> Any: - """Get properties for the element. Must be overridden by subclass.""" raise NotImplementedError("Subclass must implement get_props()") def get_gizmo_prefs(self) -> Any: - """Get gizmo preferences for this element type. Must be overridden by subclass.""" raise NotImplementedError("Subclass must implement get_gizmo_prefs()") def get_prop_min_value(self, attr_name: str) -> float: - """Get minimum value for a property. Override to customize.""" return 0.0 def should_hide_gizmo(self, attr_name: str, props) -> bool: - """Check if a specific gizmo should be hidden. Override to add visibility rules.""" return not props.is_editing def get_element_height(self, props) -> float: - """Get the element height for icon positioning. Override if property name differs.""" return getattr(props, "overall_height", getattr(props, "height", 1.0)) def setup_property_gizmos(self, context: bpy.types.Context) -> None: - """Set up gizmos for all properties in gizmo_props.""" prefs = tool.Blender.get_addon_preferences() highlight_color = prefs.decorator_color_selected[:3] for prop_config in self.gizmo_props: attr_name = prop_config.attr_name invert_delta = prop_config.invert_delta - gizmo = self.gizmos.new("BIM_GT_gizmo_cone") + gizmo = self.gizmos.new("BIM_GT_gizmo_arrow_2d") - # Create closures that capture attr_name def make_move_get(name): def move_get(): obj = bpy.context.active_object @@ -1305,6 +1852,10 @@ class BaseParametricGizmoGroup: gizmo.axis = Vector(prop_config.axis) gizmo.local_axis = Vector(prop_config.axis) gizmo.invert_delta = invert_delta + gizmo.delta_scale = prop_config.delta_scale + + gizmo.prop_name = attr_name.replace("_", " ").title() + gizmo.gizmo_group = self gizmo.color = self.get_arrow_color_from_axis(prop_config.axis) gizmo.color_highlight = highlight_color @@ -1315,7 +1866,6 @@ class BaseParametricGizmoGroup: setattr(self, f"gizmo_{attr_name}", gizmo) def setup_editing_gizmos(self, context: bpy.types.Context) -> None: - """Set up pen, validate, and cancel gizmos for editing mode.""" prefs = tool.Blender.get_addon_preferences() default_color = prefs.decorations_colour[:3] highlight_color = prefs.decorator_color_selected[:3] @@ -1341,9 +1891,18 @@ class BaseParametricGizmoGroup: self.cancel_gizmo.alpha = 0.8 self.cancel_gizmo.target_set_operator(self.cancel_editing_operator) + if self.cycle_type_operator: + self.cycle_gizmo = self.gizmos.new("VIEW3D_GT_cycle") + self.cycle_gizmo.use_draw_scale = False + self.cycle_gizmo.color = default_color + self.cycle_gizmo.color_highlight = highlight_color + self.cycle_gizmo.alpha = 0.8 + self.cycle_gizmo.target_set_operator(self.cycle_type_operator) + def update_property_gizmos(self, mw, props) -> None: - """Update arrow gizmos position and visibility based on editing state.""" gizmo_prefs = self.get_gizmo_prefs() + # Check if keyboard input modal is hiding gizmos + hidden_by_modal = _gizmo_value_input_callback.get("hidden_gizmos", set()) for prop_config in self.gizmo_props: attr_name = prop_config.attr_name @@ -1351,42 +1910,72 @@ class BaseParametricGizmoGroup: if gizmo is None: continue - # Check preferences + # Respect gizmos hidden by keyboard input modal + if gizmo in hidden_by_modal: + gizmo.hide = True + continue + if not getattr(gizmo_prefs, attr_name, True): gizmo.hide = True continue - # Check visibility rules if self.should_hide_gizmo(attr_name, props): gizmo.hide = True continue - # Update position and show arrow gizmo.hide = False matrix_method = getattr(self, f"get_gizmo_matrix_{attr_name}", None) if matrix_method: gizmo.matrix_basis = mw @ matrix_method(props) gizmo.matrix_offset = Matrix.Scale(self.ARROW_SCALE, 4) - def update_editing_gizmos(self, mw, props) -> None: - """Update editing control gizmos (pen/validate/cancel) visibility and position.""" + def update_editing_gizmos(self, context: bpy.types.Context, mw, props) -> None: icon_z = self.get_element_height(props) + 0.5 + billboard_rot = get_billboard_rotation(context) + # Check if keyboard input modal is hiding gizmos + hidden_by_modal = _gizmo_value_input_callback.get("hidden_gizmos", set()) + local_transform = ( Matrix.Translation(Vector((0, 0.0, icon_z))) - @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + @ billboard_rot @ Matrix.Scale(0.5, 4) ) icon_matrix_base = mw @ local_transform if props.is_editing: self.pen_gizmo.hide = True - self.validate_gizmo.hide = False + self.validate_gizmo.hide = self.validate_gizmo in hidden_by_modal self.validate_gizmo.matrix_basis = icon_matrix_base - self.cancel_gizmo.hide = False + self.cancel_gizmo.hide = self.cancel_gizmo in hidden_by_modal cancel_local = Matrix.Translation(Vector((0.5, 0.0, 0.0))) @ local_transform self.cancel_gizmo.matrix_basis = mw @ cancel_local + if self.cycle_type_operator: + self.cycle_gizmo.hide = self.cycle_gizmo in hidden_by_modal + cycle_transform = ( + Matrix.Translation(Vector((0, 0.0, icon_z))) + @ billboard_rot + @ Matrix.Scale(0.30, 4) + ) + cycle_local = Matrix.Translation(Vector((0.87, 0.0, 0.0))) @ cycle_transform + self.cycle_gizmo.matrix_basis = mw @ cycle_local else: - self.pen_gizmo.hide = False + self.pen_gizmo.hide = self.pen_gizmo in hidden_by_modal self.pen_gizmo.matrix_basis = icon_matrix_base self.validate_gizmo.hide = True self.cancel_gizmo.hide = True + if self.cycle_type_operator: + self.cycle_gizmo.hide = True + + def draw_prepare(self, context: bpy.types.Context) -> None: + """Called before drawing - updates gizmos to face camera.""" + obj = context.active_object + if not obj: + return + props = self.get_props(obj) + mw = obj.matrix_world + self.update_editing_gizmos(context, mw, props) + + for prop_config in self.gizmo_props: + gizmo = getattr(self, f"gizmo_{prop_config.attr_name}", None) + if gizmo and hasattr(gizmo, "draw_prepare") and not gizmo.hide: + gizmo.draw_prepare(context) diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index f33d851887..5629b1a3cc 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -176,6 +176,7 @@ classes = ( window.FinishEditingWindow, window.EnableEditingWindow, window.RemoveWindow, + window.CycleWindowType, window.GizmoWindowEdition, door.BIM_OT_add_door, door.AddDoor, @@ -184,6 +185,7 @@ classes = ( door.EnableEditingDoor, door.RemoveDoor, door.ToggleDoorSwing, + door.CycleDoorType, door.GizmoDoorEdition, railing.BIM_OT_add_railing, railing.CopyRailingParameters, diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index 5cc9f03bea..95280b62ca 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -41,6 +41,7 @@ from mathutils import Vector, Matrix import json import collections import collections.abc +from typing import get_args V_ = tool.Blender.V_ @@ -741,6 +742,38 @@ class ToggleDoorSwing(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} +class CycleDoorType(bpy.types.Operator, tool.Ifc.Operator): + """Cycle through available door types. Shift+click to cycle in reverse.""" + + bl_idname = "bim.cycle_door_type" + bl_label = "Cycle Door Type" + bl_options = {"REGISTER", "UNDO"} + + reverse: bpy.props.BoolProperty(name="Reverse", default=False, options={"HIDDEN", "SKIP_SAVE"}) + + def invoke(self, context, event): + self.reverse = event.shift + return self.execute(context) + + def _execute(self, context): + obj = tool.Blender.get_active_object() + if not obj: + return {"CANCELLED"} + + element = tool.Ifc.get_entity(obj) + if not element or not tool.Blender.Modifier.is_door(element): + return {"CANCELLED"} + + props = tool.Model.get_door_props(obj) + door_types = get_args(tool.Model.DoorType) + current_index = door_types.index(props.door_type) if props.door_type in door_types else 0 + direction = -1 if self.reverse else 1 + next_index = (current_index + direction) % len(door_types) + props.door_type = door_types[next_index] + + return {"FINISHED"} + + class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): bl_idname = "OBJECT_GGT_bim_door_edition" bl_label = "Door Editing Gizmo" @@ -751,6 +784,7 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): enable_editing_operator = "bim.enable_editing_door" finish_editing_operator = "bim.finish_editing_door" cancel_editing_operator = "bim.cancel_editing_door" + cycle_type_operator = "bim.cycle_door_type" gizmo_props = [ GizmoPropConfig("overall_height", (0, 0, 1)), @@ -833,11 +867,15 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return translation @ rotation def get_gizmo_matrix_transom_offset(self, props): - translation = Matrix.Translation(V_(props.overall_width / 2, props.lining_offset, props.transom_offset)) + # Position at the bottom of the transom (transom extends upward from offset) + translation = Matrix.Translation( + V_(props.overall_width / 2, props.lining_offset, props.transom_offset) + ) rotation = self.get_axis_rotation_matrix((0, 0, 1)) return translation @ rotation def get_gizmo_matrix_transom_thickness(self, props): + # Position at the top of the transom (offset + thickness) translation = Matrix.Translation( V_(props.overall_width / 2, props.lining_offset, props.transom_offset + props.transom_thickness) ) @@ -904,7 +942,7 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): mw = obj.matrix_world self.update_property_gizmos(mw, props) self.update_swing_gizmos(mw, props) - self.update_editing_gizmos(mw, props) + self.update_editing_gizmos(context, mw, props) def update_swing_gizmos(self, mw, props): """Update swing gizmo position and color based on editing state.""" diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 3b30a85c43..e04e9dea95 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -671,19 +671,6 @@ def window_type_prop_update(self, context): update_window(self, context) -WindowType = Literal[ - "SINGLE_PANEL", - "DOUBLE_PANEL_HORIZONTAL", - "DOUBLE_PANEL_VERTICAL", - "TRIPLE_PANEL_BOTTOM", - "TRIPLE_PANEL_TOP", - "TRIPLE_PANEL_LEFT", - "TRIPLE_PANEL_RIGHT", - "TRIPLE_PANEL_HORIZONTAL", - "TRIPLE_PANEL_VERTICAL", -] - - # default prop values are in mm and converted later class BIMWindowProperties(PropertyGroup): non_si_units_props = ( @@ -712,7 +699,7 @@ class BIMWindowProperties(PropertyGroup): is_editing: bpy.props.BoolProperty(default=False) window_type: bpy.props.EnumProperty( name="Window Type", - items=[(i, i, "") for i in get_args(WindowType)], + items=[(i, i, "") for i in get_args(tool.Model.WindowType)], default="SINGLE_PANEL", update=window_type_prop_update, ) @@ -788,7 +775,7 @@ class BIMWindowProperties(PropertyGroup): if TYPE_CHECKING: is_editing: bool - window_type: WindowType + window_type: tool.Model.WindowType overall_height: float overall_width: float lining_depth: float @@ -822,7 +809,7 @@ class BIMWindowProperties(PropertyGroup): return tool.Model.convert_data_to_project_units(kwargs, ["window_type"]) def get_lining_kwargs( - self, window_type: Optional[WindowType] = None, convert_to_project_units: bool = False + self, window_type: Optional[tool.Model.WindowType] = None, convert_to_project_units: bool = False ) -> dict[str, Any]: if not window_type: window_type = self.window_type @@ -889,18 +876,6 @@ class BIMWindowProperties(PropertyGroup): setattr(target_props, prop_name, prop_value) -DoorType = Literal[ - "SINGLE_SWING_LEFT", - "SINGLE_SWING_RIGHT", - "DOUBLE_SWING_LEFT", - "DOUBLE_SWING_RIGHT", - "DOUBLE_DOOR_SINGLE_SWING", - "SLIDING_TO_LEFT", - "SLIDING_TO_RIGHT", - "DOUBLE_DOOR_SLIDING", -] - - class BIMDoorProperties(PropertyGroup): non_si_units_props = ( "is_editing", @@ -913,7 +888,7 @@ class BIMDoorProperties(PropertyGroup): is_editing: bpy.props.BoolProperty(default=False) door_type: bpy.props.EnumProperty( name="Door Operation Type", - items=tuple((i, i, "") for i in get_args(DoorType)), + items=tuple((i, i, "") for i in get_args(tool.Model.DoorType)), default="SINGLE_SWING_LEFT", update=update_door, ) @@ -1057,7 +1032,7 @@ class BIMDoorProperties(PropertyGroup): if TYPE_CHECKING: is_editing: bool - door_type: DoorType + door_type: tool.Model.DoorType overall_height: float overall_width: float diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index 5cf264a9a3..8ced98b0d1 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -34,6 +34,7 @@ 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 typing import get_args def regenerate_stair_mesh(obj: bpy.types.Object) -> None: @@ -357,13 +358,10 @@ class CycleStairType(bpy.types.Operator): return {"CANCELLED"} props = tool.Model.get_stair_props(obj) - types = ["CONCRETE", "WOOD/STEEL", "GENERIC"] - try: - current_idx = types.index(props.stair_type) - except ValueError: - current_idx = 0 + stair_types = get_args(tool.Model.StairType) + current_idx = stair_types.index(props.stair_type) if props.stair_type in stair_types else 0 direction = -1 if self.reverse else 1 - props.stair_type = types[(current_idx + direction) % len(types)] + props.stair_type = stair_types[(current_idx + direction) % len(stair_types)] return {"FINISHED"} @@ -375,6 +373,13 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): bl_region_type = "WINDOW" bl_options = {"3D", "PERSISTENT"} + # Gizmo layout offsets (meters) + GIZMO_X_OFFSET = 0.5 # Horizontal offset from stair end + GIZMO_PLUS_X_OFFSET = 0.25 # Additional X offset for plus button + GIZMO_MINUS_X_OFFSET = 0.5 # Additional X offset for minus button + GIZMO_BUTTON_Z_OFFSET = 0.15 # Vertical offset for +/- buttons above lock + GIZMO_CYCLE_Z_OFFSET = 0.5 # Vertical offset for cycle gizmo above lock + enable_editing_operator = "bim.enable_editing_stair" finish_editing_operator = "bim.finish_editing_stair" cancel_editing_operator = "bim.cancel_editing_stair" @@ -432,6 +437,13 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): rotation = self.get_axis_rotation_matrix((0, 1, 0)) return translation @ rotation + def get_gizmo_matrix_width_top(self, props): + """Position for the secondary width gizmo at the top of the stairs.""" + total_run = self._get_stair_total_run(props) + translation = Matrix.Translation(Vector((total_run, props.width, props.height))) + rotation = self.get_axis_rotation_matrix((0, 1, 0)) + return translation @ rotation + def get_gizmo_matrix_height(self, props): total_run = self._get_stair_total_run(props) translation = Matrix.Translation(Vector((total_run, props.width / 2, props.height))) @@ -490,6 +502,41 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): prefs = tool.Blender.get_addon_preferences() highlight_color = prefs.decorator_color_selected[:3] + # Secondary width gizmo at the top of the stairs (linked to same width property) + self.gizmo_width_top = self.gizmos.new("BIM_GT_gizmo_arrow_2d") + + def make_width_get(): + def move_get(): + obj = bpy.context.active_object + if not obj: + return 0.0 + props = self.get_props(obj) + return props.width + return move_get + + def make_width_set(): + def move_set(value): + obj = bpy.context.active_object + if not obj: + return + props = self.get_props(obj) + props.width = max(0.0, value) + return move_set + + self.gizmo_width_top.move_get_cb = make_width_get() + self.gizmo_width_top.move_set_cb = make_width_set() + self.gizmo_width_top.axis = Vector((0, 1, 0)) + self.gizmo_width_top.local_axis = Vector((0, 1, 0)) + self.gizmo_width_top.invert_delta = False + self.gizmo_width_top.delta_scale = 1.0 + self.gizmo_width_top.prop_name = "Width" + self.gizmo_width_top.gizmo_group = self + self.gizmo_width_top.color = self.COLOR_GREEN + self.gizmo_width_top.color_highlight = highlight_color + self.gizmo_width_top.alpha = 0.99 + self.gizmo_width_top.use_draw_modal = True + self.gizmo_width_top.use_draw_scale = True + # Total length lock gizmo self.lock_gizmo = self.gizmos.new("VIEW3D_GT_lock") self.lock_gizmo.use_draw_scale = False @@ -533,65 +580,81 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): props = self.get_props(obj) mw = obj.matrix_world + billboard_rot = gizmo.get_billboard_rotation(context) self.update_property_gizmos(mw, props) - self.update_editing_gizmos(mw, props) - self.update_lock_gizmo(mw, props) - self.update_tread_count_gizmos(mw, props) - self.update_cycle_gizmo(mw, props) + self.update_editing_gizmos(context, mw, props) + self.update_width_top_gizmo(mw, props) + self.update_lock_gizmo(mw, props, billboard_rot) + self.update_tread_count_gizmos(mw, props, billboard_rot) + self.update_cycle_gizmo(mw, props, billboard_rot) - def update_lock_gizmo(self, mw, props): - """Update lock gizmo position and visibility.""" + def update_width_top_gizmo(self, mw, props): + """Update the secondary width gizmo at the top of the stairs.""" + gizmo_prefs = self.get_gizmo_prefs() + # Use same visibility as the main width gizmo + self.gizmo_width_top.hide = not props.is_editing or not getattr(gizmo_prefs, "width", True) + + if self.gizmo_width_top.hide: + return + + self.gizmo_width_top.matrix_basis = mw @ self.get_gizmo_matrix_width_top(props) + self.gizmo_width_top.matrix_offset = Matrix.Scale(self.ARROW_SCALE, 4) + + def update_lock_gizmo(self, mw, props, billboard_rot): gizmo_prefs = self.get_gizmo_prefs() self.lock_gizmo.hide = not props.is_editing or not gizmo_prefs.lock if self.lock_gizmo.hide: return - # Update color based on lock state: red when locked, green when unlocked self.lock_gizmo.color = self.COLOR_RED if props.total_length_lock else self.COLOR_GREEN total_run = self._get_stair_total_run(props) - lock_x = total_run + props.tread_run + 0.5 + lock_x = total_run + props.tread_run + self.GIZMO_X_OFFSET local_transform = ( Matrix.Translation(Vector((lock_x, props.width / 2, props.height))) - @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + @ billboard_rot @ Matrix.Scale(0.2, 4) ) self.lock_gizmo.matrix_basis = mw @ local_transform - def update_tread_count_gizmos(self, mw, props): - """Update plus and minus gizmos for tread count adjustment.""" + def update_tread_count_gizmos(self, mw, props, billboard_rot): gizmo_prefs = self.get_gizmo_prefs() - # Plus gizmo - always visible when editing (if preference enabled) self.plus_gizmo.hide = not props.is_editing or not gizmo_prefs.plus - # Minus gizmo - hidden when number_of_treads is 1 (if preference enabled) self.minus_gizmo.hide = not props.is_editing or props.number_of_treads <= 1 or not gizmo_prefs.minus if self.plus_gizmo.hide and self.minus_gizmo.hide: return total_run = self._get_stair_total_run(props) - base_x = total_run + props.tread_run + 0.5 + base_x = total_run + props.tread_run + self.GIZMO_X_OFFSET if not self.plus_gizmo.hide: plus_local_transform = ( - Matrix.Translation(Vector((base_x + 0.25, props.width / 2, props.height + 0.15))) - @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + Matrix.Translation(Vector(( + base_x + self.GIZMO_PLUS_X_OFFSET, + props.width / 2, + props.height + self.GIZMO_BUTTON_Z_OFFSET + ))) + @ billboard_rot @ Matrix.Scale(0.2, 4) ) self.plus_gizmo.matrix_basis = mw @ plus_local_transform if not self.minus_gizmo.hide: minus_local_transform = ( - Matrix.Translation(Vector((base_x + 0.5, props.width / 2, props.height + 0.15))) - @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + Matrix.Translation(Vector(( + base_x + self.GIZMO_MINUS_X_OFFSET, + props.width / 2, + props.height + self.GIZMO_BUTTON_Z_OFFSET + ))) + @ billboard_rot @ Matrix.Scale(0.2, 4) ) self.minus_gizmo.matrix_basis = mw @ minus_local_transform - def update_cycle_gizmo(self, mw, props): - """Update cycle gizmo position - 0.5m above lock gizmo.""" + def update_cycle_gizmo(self, mw, props, billboard_rot): gizmo_prefs = self.get_gizmo_prefs() self.cycle_gizmo.hide = not props.is_editing or not gizmo_prefs.cycle @@ -599,10 +662,23 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return total_run = self._get_stair_total_run(props) - cycle_x = total_run + props.tread_run + 0.5 # Same X as lock + cycle_x = total_run + props.tread_run + self.GIZMO_X_OFFSET local_transform = ( - Matrix.Translation(Vector((cycle_x, props.width / 2, props.height + 0.5))) # +0.5m above lock - @ Matrix.Rotation(math.radians(90), 4, (1.0, 0.0, 0.0)) + Matrix.Translation(Vector(( + cycle_x, + props.width / 2, + props.height + self.GIZMO_CYCLE_Z_OFFSET + ))) + @ billboard_rot @ Matrix.Scale(0.2, 4) ) self.cycle_gizmo.matrix_basis = mw @ local_transform + + def draw_prepare(self, context): + """Called before drawing - updates gizmos to face camera.""" + # Call base class implementation + super().draw_prepare(context) + + # Also update the secondary width gizmo to face camera + if hasattr(self, "gizmo_width_top") and not self.gizmo_width_top.hide: + self.gizmo_width_top.draw_prepare(context) diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index 36a49cc082..4bd4141c89 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -39,6 +39,7 @@ import ifcopenshell.util.shape_builder import ifcopenshell.util.unit from bmesh.types import BMVert from mathutils import Vector, Matrix +from typing import get_args V_ = tool.Blender.V_ @@ -579,6 +580,31 @@ class RemoveWindow(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} +class CycleWindowType(bpy.types.Operator, tool.Ifc.Operator): + """Cycle through available window types.""" + + bl_idname = "bim.cycle_window_type" + bl_label = "Cycle Window Type" + bl_options = {"REGISTER", "UNDO"} + + def _execute(self, context): + obj = tool.Blender.get_active_object() + if not obj: + return {"CANCELLED"} + + element = tool.Ifc.get_entity(obj) + if not element or not tool.Blender.Modifier.is_window(element): + return {"CANCELLED"} + + props = tool.Model.get_window_props(obj) + window_types = list(get_args(tool.Model.WindowType)) + current_index = window_types.index(props.window_type) if props.window_type in window_types else 0 + next_index = (current_index + 1) % len(window_types) + props.window_type = window_types[next_index] + + return {"FINISHED"} + + class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): bl_idname = "OBJECT_GGT_bim_window_edition" bl_label = "Window Editing Gizmo" @@ -589,6 +615,7 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): enable_editing_operator = "bim.enable_editing_window" finish_editing_operator = "bim.finish_editing_window" cancel_editing_operator = "bim.cancel_editing_window" + cycle_type_operator = "bim.cycle_window_type" gizmo_props = [ GizmoPropConfig("overall_height", (0, 0, 1)), @@ -597,10 +624,10 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): GizmoPropConfig("lining_thickness", (1, 0, 0)), GizmoPropConfig("lining_to_panel_offset_x", (1, 0, 0)), GizmoPropConfig("lining_to_panel_offset_y", (0, 1, 0)), - GizmoPropConfig("mullion_thickness", (1, 0, 0)), + GizmoPropConfig("mullion_thickness", (1, 0, 0), delta_scale=2.0), GizmoPropConfig("first_mullion_offset", (1, 0, 0)), GizmoPropConfig("second_mullion_offset", (1, 0, 0)), - GizmoPropConfig("transom_thickness", (0, 0, 1)), + GizmoPropConfig("transom_thickness", (0, 0, 1), delta_scale=2.0), GizmoPropConfig("first_transom_offset", (0, 0, 1)), GizmoPropConfig("second_transom_offset", (0, 0, 1)), ] @@ -690,6 +717,7 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return translation @ rotation def get_gizmo_matrix_mullion_thickness(self, props): + # Position at the right edge of the mullion (offset + thickness/2) so gizmo movement matches property 1:1 translation = Matrix.Translation( V_(props.first_mullion_offset + props.mullion_thickness / 2, props.lining_offset, props.overall_height / 2) ) @@ -697,7 +725,10 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return translation @ rotation def get_gizmo_matrix_first_mullion_offset(self, props): - translation = Matrix.Translation(V_(props.first_mullion_offset, props.lining_offset, props.overall_height / 2)) + # Position at the left edge of the mullion (offset - thickness/2) + translation = Matrix.Translation( + V_(props.first_mullion_offset - props.mullion_thickness / 2, props.lining_offset, props.overall_height / 2) + ) rotation = self.get_axis_rotation_matrix((1, 0, 0)) return translation @ rotation @@ -707,6 +738,7 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return translation @ rotation def get_gizmo_matrix_transom_thickness(self, props): + # Position at the top edge of the transom (offset + thickness/2) so gizmo movement matches property 1:1 translation = Matrix.Translation( V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset + props.transom_thickness / 2) ) @@ -714,7 +746,10 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return translation @ rotation def get_gizmo_matrix_first_transom_offset(self, props): - translation = Matrix.Translation(V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset)) + # Position at the bottom edge of the transom (offset - thickness/2) + translation = Matrix.Translation( + V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset - props.transom_thickness / 2) + ) rotation = self.get_axis_rotation_matrix((0, 0, 1)) return translation @ rotation @@ -768,4 +803,4 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): props = self.get_props(obj) mw = obj.matrix_world self.update_property_gizmos(mw, props) - self.update_editing_gizmos(mw, props) + self.update_editing_gizmos(context, mw, props) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 0627b400ed..0bc9ef4b68 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1401,6 +1401,29 @@ class Model(bonsai.core.tool.Model): StairType = Literal["CONCRETE", "WOOD/STEEL", "GENERIC"] + DoorType = Literal[ + "SINGLE_SWING_LEFT", + "SINGLE_SWING_RIGHT", + "DOUBLE_SWING_LEFT", + "DOUBLE_SWING_RIGHT", + "DOUBLE_DOOR_SINGLE_SWING", + "SLIDING_TO_LEFT", + "SLIDING_TO_RIGHT", + "DOUBLE_DOOR_SLIDING", + ] + + WindowType = Literal[ + "SINGLE_PANEL", + "DOUBLE_PANEL_HORIZONTAL", + "DOUBLE_PANEL_VERTICAL", + "TRIPLE_PANEL_BOTTOM", + "TRIPLE_PANEL_TOP", + "TRIPLE_PANEL_LEFT", + "TRIPLE_PANEL_RIGHT", + "TRIPLE_PANEL_HORIZONTAL", + "TRIPLE_PANEL_VERTICAL", + ] + @classmethod def generate_stair_2d_profile( cls, From 1b2ad6c93f633df46d55f65bf97e730461fd7e6c Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 29 Nov 2025 15:13:38 -0600 Subject: [PATCH 227/657] Add interactive dialog for type duplication with assignment option Add dialog to DuplicateType operator allowing users to set name, description, and optionally assign the active object to the duplicated type. Add duplicate button to product UI in type panel with auto-assignment enabled by default. --- src/bonsai/bonsai/bim/module/type/operator.py | 40 ++++++++++++++++++- src/bonsai/bonsai/bim/module/type/ui.py | 4 ++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index 13cf08be2c..b836d2c224 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -322,6 +322,15 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Duplicate Type" bl_options = {"REGISTER", "UNDO"} element: bpy.props.IntProperty() + name: bpy.props.StringProperty(name="Name") + description: bpy.props.StringProperty(name="Description") + assign_active_object: bpy.props.BoolProperty(default=False) + + if TYPE_CHECKING: + element: int + name: str + description: str + assign_active_object: bool def _execute(self, context): element = tool.Ifc.get().by_id(self.element) @@ -332,8 +341,23 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): if obj.data: new_obj.data = obj.data.copy() new = bonsai.core.root.copy_class(tool.Ifc, tool.Collector, tool.Geometry, tool.Root, obj=new_obj) - new.Name += " Copy" + + # Apply the name and description from the dialog + new.Name = self.name + if self.description: + new.Description = self.description + bpy.ops.bim.load_type_thumbnails() + + # Assign active object to the new type if requested + if self.assign_active_object and context.active_object: + active_element = tool.Ifc.get_entity(context.active_object) + if active_element and active_element.is_a("IfcObject"): + core.assign_type(tool.Ifc, tool.Type, element=active_element, type=new) + prefs = tool.Blender.get_addon_preferences() + if prefs.occurrence_name_style == "TYPE": + context.active_object.name = tool.Model.generate_occurrence_name(new, active_element.is_a()) + if obj in context.selectable_objects: tool.Blender.select_and_activate_single_object(context, new_obj) else: @@ -347,3 +371,17 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): props.ifc_class = new.is_a() props.relating_type_id = str(tool.Blender.get_ifc_definition_id(new_obj)) return {"FINISHED"} + + def invoke(self, context, event): + element = tool.Ifc.get().by_id(self.element) + self.name = (element.Name or "Unnamed") + " Copy" + self.description = element.Description or "" + return context.window_manager.invoke_props_dialog(self) + + def draw(self, context): + self.layout.prop(self, "name") + self.layout.prop(self, "description") + if context.active_object: + active_element = tool.Ifc.get_entity(context.active_object) + if active_element and active_element.is_a("IfcObject"): + self.layout.prop(self, "assign_active_object", text="Assign Active Object to New Type") diff --git a/src/bonsai/bonsai/bim/module/type/ui.py b/src/bonsai/bonsai/bim/module/type/ui.py index f749ceb07e..a6347482ee 100644 --- a/src/bonsai/bonsai/bim/module/type/ui.py +++ b/src/bonsai/bonsai/bim/module/type/ui.py @@ -96,6 +96,10 @@ class BIM_PT_type(Panel): op = row.operator("bim.select_type", icon="OBJECT_DATA", text="") op.relating_type = 0 # will only select the relating types of only the selected objects row.operator("bim.select_similar_type", icon="RESTRICT_SELECT_OFF", text="") + # Add duplicate button here with assign_active_object enabled + op = row.operator("bim.duplicate_type", icon="DUPLICATE", text="") + op.element = TypeData.data["relating_type"]["id"] + op.assign_active_object = True row.operator("bim.enable_editing_type", icon="GREASEPENCIL", text="") row.operator("bim.unassign_type", icon="X", text="") else: From 8d617c87c8e3d406be166dcbc4beb9673636f773 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 29 Nov 2025 15:53:08 -0600 Subject: [PATCH 228/657] Extend github.com/IfcOpenShell/IfcOpenShell/commit/1b2ad6c93f633df46d55f65bf97e730461fd7e6c - apply new type to all the selected objects. --- src/bonsai/bonsai/bim/module/type/operator.py | 30 ++++++++++--------- src/bonsai/bonsai/bim/module/type/ui.py | 4 +-- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index b836d2c224..08f07c6402 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -324,13 +324,13 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): element: bpy.props.IntProperty() name: bpy.props.StringProperty(name="Name") description: bpy.props.StringProperty(name="Description") - assign_active_object: bpy.props.BoolProperty(default=False) + assign_selected_objects: bpy.props.BoolProperty(default=False) if TYPE_CHECKING: element: int name: str description: str - assign_active_object: bool + assign_selected_objects: bool def _execute(self, context): element = tool.Ifc.get().by_id(self.element) @@ -349,14 +349,16 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): bpy.ops.bim.load_type_thumbnails() - # Assign active object to the new type if requested - if self.assign_active_object and context.active_object: - active_element = tool.Ifc.get_entity(context.active_object) - if active_element and active_element.is_a("IfcObject"): - core.assign_type(tool.Ifc, tool.Type, element=active_element, type=new) - prefs = tool.Blender.get_addon_preferences() - if prefs.occurrence_name_style == "TYPE": - context.active_object.name = tool.Model.generate_occurrence_name(new, active_element.is_a()) + # Assign selected objects to the new type if requested + if self.assign_selected_objects: + selected_objects = tool.Blender.get_selected_objects() + prefs = tool.Blender.get_addon_preferences() + for selected_obj in selected_objects: + selected_element = tool.Ifc.get_entity(selected_obj) + if selected_element and selected_element.is_a("IfcObject"): + core.assign_type(tool.Ifc, tool.Type, element=selected_element, type=new) + if prefs.occurrence_name_style == "TYPE": + selected_obj.name = tool.Model.generate_occurrence_name(new, selected_element.is_a()) if obj in context.selectable_objects: tool.Blender.select_and_activate_single_object(context, new_obj) @@ -381,7 +383,7 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): def draw(self, context): self.layout.prop(self, "name") self.layout.prop(self, "description") - if context.active_object: - active_element = tool.Ifc.get_entity(context.active_object) - if active_element and active_element.is_a("IfcObject"): - self.layout.prop(self, "assign_active_object", text="Assign Active Object to New Type") + selected_objects = tool.Blender.get_selected_objects() + ifc_objects = [obj for obj in selected_objects if tool.Ifc.get_entity(obj) and tool.Ifc.get_entity(obj).is_a("IfcObject")] + if ifc_objects: + self.layout.prop(self, "assign_selected_objects", text=f"Assign {len(ifc_objects)} Selected Object(s) to New Type") diff --git a/src/bonsai/bonsai/bim/module/type/ui.py b/src/bonsai/bonsai/bim/module/type/ui.py index a6347482ee..a368f38867 100644 --- a/src/bonsai/bonsai/bim/module/type/ui.py +++ b/src/bonsai/bonsai/bim/module/type/ui.py @@ -96,10 +96,10 @@ class BIM_PT_type(Panel): op = row.operator("bim.select_type", icon="OBJECT_DATA", text="") op.relating_type = 0 # will only select the relating types of only the selected objects row.operator("bim.select_similar_type", icon="RESTRICT_SELECT_OFF", text="") - # Add duplicate button here with assign_active_object enabled + # Add duplicate button here with assign_selected_objects enabled op = row.operator("bim.duplicate_type", icon="DUPLICATE", text="") op.element = TypeData.data["relating_type"]["id"] - op.assign_active_object = True + op.assign_selected_objects = True row.operator("bim.enable_editing_type", icon="GREASEPENCIL", text="") row.operator("bim.unassign_type", icon="X", text="") else: From bd57cc87352c79a2425d71af73a2cd1085f5168f Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 30 Nov 2025 09:56:19 +0100 Subject: [PATCH 229/657] Move sweep directrix closer to origin #7408 --- .../kernels/opencascade/sweep_along_curve.cpp | 58 +++++++++++++++++-- src/ifcgeom/taxonomy.h | 52 +++++++---------- 2 files changed, 76 insertions(+), 34 deletions(-) diff --git a/src/ifcgeom/kernels/opencascade/sweep_along_curve.cpp b/src/ifcgeom/kernels/opencascade/sweep_along_curve.cpp index 0cfcf7a355..c971291868 100644 --- a/src/ifcgeom/kernels/opencascade/sweep_along_curve.cpp +++ b/src/ifcgeom/kernels/opencascade/sweep_along_curve.cpp @@ -84,6 +84,50 @@ namespace { } bool OpenCascadeKernel::convert(const taxonomy::sweep_along_curve::ptr scs, TopoDS_Shape& result) { + using namespace ifcopenshell::geometry; + + bool applied_temporary_offset = false; + Eigen::Vector3d mean; + + auto curve = scs->curve; + + // Apply temporary offset if the geometry is far away from origin + // Re: https://github.com/IfcOpenShell/IfcOpenShell/issues/7408 + // The norm2 that used as a treshold is actually really small though + // is this a coincedence that it solves the problem in this one test case? + if (curve->kind() == taxonomy::LOOP && std::dynamic_pointer_cast(curve)->is_polyhedron()) { + Eigen::Vector3d sum = Eigen::Vector3d::Zero(); + size_t count = 0; + + visit_2(std::dynamic_pointer_cast(curve), [&](const taxonomy::point3::ptr& p) { + const Eigen::Vector3d& coords = p->ccomponents(); + + sum += coords; + ++count; + }); + + mean = (count > 0) ? (sum / static_cast(count)).eval() : Eigen::Vector3d::Zero().eval(); + + if (mean.norm() > 1.e2) { + curve = taxonomy::loop::ptr((taxonomy::loop*)scs->curve->clone_()); + applied_temporary_offset = true; + std::set unique_points; + for (auto& e : std::dynamic_pointer_cast(curve)->children) { + auto* a = boost::get(&e->start); + auto* b = boost::get(&e->end); + if (a) { + unique_points.insert(*a); + } + if (b) { + unique_points.insert(*b); + } + } + for (auto& p : unique_points) { + p->components() -= mean; + } + } + } + auto w = convert_curve(scs->curve); if (w.which() != 2) { Logger::Error("Unsupported directrix"); @@ -207,13 +251,13 @@ bool OpenCascadeKernel::convert(const taxonomy::sweep_along_curve::ptr scs, Topo for (int i = 0; i < 2; ++i) { for (TopExp_Explorer exp(face, TopAbs_WIRE); exp.More(); exp.Next()) { const auto& section = TopoDS::Wire(exp.Current()); - if (section.IsSame(outer) != i == 0) { + if (section.IsSame(outer) != (i == 0)) { continue; } BRepOffsetAPI_MakePipeShell builder(wire); builder.Add(section); - builder.SetTransitionMode(contains_circular_segments(wire) && wire_is_c1_continuous(wire, 1.e-2) ? BRepBuilderAPI_Transformed : BRepBuilderAPI_RightCorner); + builder.SetTransitionMode(contains_circular_segments(wire) && wire_is_c1_continuous(wire, 1.e-2) ? BRepBuilderAPI_Transformed : BRepBuilderAPI_RightCorner); if (directrix_on_plane) { builder.SetMode(pln.Axis().Direction()); } else if (!is_plane) { @@ -238,8 +282,8 @@ bool OpenCascadeKernel::convert(const taxonomy::sweep_along_curve::ptr scs, Topo mf1.reset(new BRepBuilderAPI_MakeFace(f1)); } - for (TopExp_Explorer exp(builder.Shape(), TopAbs_FACE); exp.More(); exp.Next()) { - BB.Add(comp, exp.Current()); + for (TopExp_Explorer exp2(builder.Shape(), TopAbs_FACE); exp2.More(); exp2.Next()) { + BB.Add(comp, exp2.Current()); } } } @@ -254,6 +298,12 @@ bool OpenCascadeKernel::convert(const taxonomy::sweep_along_curve::ptr scs, Topo result = BRepBuilderAPI_MakeSolid(comp).Solid(); + if (applied_temporary_offset) { + gp_Trsf trsf; + trsf.SetTranslation(gp_Vec(-mean.x(), -mean.y(), -mean.z())); + result.Move(trsf); + } + return true; } diff --git a/src/ifcgeom/taxonomy.h b/src/ifcgeom/taxonomy.h index bba587654e..d3ec5c5e17 100644 --- a/src/ifcgeom/taxonomy.h +++ b/src/ifcgeom/taxonomy.h @@ -1649,42 +1649,34 @@ typedef item const* ptr; } template - void visit_2(const typename U::ptr& c, const Fn& fn) { + void visit_2(const typename U::ptr& collection, const Fn& fn) { static_assert(std::is_same::value, "@todo Only implemented for point3"); - for (auto& i : c->children) { + for (auto& child : collection->children) { // @todo Sad... now that we have templated collection members, // we can't generally use collection_base anymore as a cast target. - if (auto s = taxonomy::dcast(i)) { - visit_2(s, fn); - } - else if (auto s = taxonomy::dcast(i)) { - visit_2(s, fn); - } - else if (auto s = taxonomy::dcast(i)) { - visit_2(s, fn); - } - else if (auto s = taxonomy::dcast(i)) { - visit_2(s, fn); - } - else if (auto s = taxonomy::dcast(i)) { - visit_2(s, fn); - } - else if (auto s = taxonomy::dcast(i)) { - visit_2(s, fn); - } - else if (auto s = taxonomy::dcast(i)) { - visit_2(s, fn); - } - else if (auto pt = taxonomy::dcast(i)) { + if (auto col = std::dynamic_pointer_cast(child)) { + visit_2(col, fn); + } else if (auto loop = std::dynamic_pointer_cast(child)) { + visit_2(loop, fn); + } else if (auto face = std::dynamic_pointer_cast(child)) { + visit_2(face, fn); + } else if (auto shell = std::dynamic_pointer_cast(child)) { + visit_2(shell, fn); + } else if (auto solid = std::dynamic_pointer_cast(child)) { + visit_2(solid, fn); + } else if (auto loft = std::dynamic_pointer_cast(child)) { + visit_2(loft, fn); + } else if (auto bl = std::dynamic_pointer_cast(child)) { + visit_2(bl, fn); + } else if (auto pt = std::dynamic_pointer_cast(child)) { fn(pt); - } - else if (auto l = taxonomy::dcast(i)) { + } else if (auto ed = std::dynamic_pointer_cast(child)) { // @todo maybe make edge a collection then as well? - if (l->start.which() == 1) { - fn(boost::get(l->start)); + if (ed->start.which() == 1) { + fn(boost::get(ed->start)); } - if (l->end.which() == 1) { - fn(boost::get(l->end)); + if (ed->end.which() == 1) { + fn(boost::get(ed->end)); } } } From 8f3e67b747e766ae98b23f6237fbffc474fc1c0b Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sun, 30 Nov 2025 10:36:24 +0100 Subject: [PATCH 230/657] Prevent user from setting parametric stair properties to a value that can't generate valid geometry --- src/bonsai/bonsai/bim/module/model/prop.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index e04e9dea95..681fc4d167 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -498,15 +498,15 @@ class BIMStairProperties(PropertyGroup): non_si_units_props = ("is_editing", "number_of_treads", "has_top_nib", "stair_type", "custom_tread_lock") 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") + width: bpy.props.FloatProperty(name="Width", default=1.2, min=0.01, subtype="DISTANCE") + height: bpy.props.FloatProperty(name="Height", default=1.0, min=0.01, subtype="DISTANCE") number_of_treads: bpy.props.IntProperty( - name="Number of Treads", default=6, soft_min=1, update=update_number_of_treads + name="Number of Treads", default=6, soft_min=1, min=0, update=update_number_of_treads ) total_length_target: bpy.props.FloatProperty( name="Total Length Target", default=3.0, - soft_min=0.01, + min=0.01, subtype="DISTANCE", update=update_total_length_target, description="Total Length Target, might not be exactly respected depending on the parameters", @@ -516,12 +516,12 @@ class BIMStairProperties(PropertyGroup): name="Lock Total Length", description="Lock Total Length when changing number of treads or tread run", ) - tread_depth: bpy.props.FloatProperty(name="Tread Depth", default=0.25, soft_min=0.01, subtype="DISTANCE") + tread_depth: bpy.props.FloatProperty(name="Tread Depth", default=0.25, min=0.01, subtype="DISTANCE") tread_run: bpy.props.FloatProperty( - name="Tread Run", default=0.3, soft_min=0.01, subtype="DISTANCE", update=update_tread_run + name="Tread Run", default=0.3, min=0.01, subtype="DISTANCE", update=update_tread_run ) - 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") + base_slab_depth: bpy.props.FloatProperty(name="Base Slab Depth", default=0.25, min=0, subtype="DISTANCE") + top_slab_depth: bpy.props.FloatProperty(name="Top Slab Depth", default=0.25, min=0, subtype="DISTANCE") has_top_nib: bpy.props.BoolProperty(name="Has Top Nib", default=True) stair_type: bpy.props.EnumProperty( name="Stair Type", @@ -542,7 +542,7 @@ class BIMStairProperties(PropertyGroup): min=0, unit="LENGTH", size=2, - update=update_custom_first_last_tread_run, # Added update callback + update=update_custom_first_last_tread_run, ) nosing_length: bpy.props.FloatProperty( name="Nosing Length", From 81bf187ee6fb33ac806e8ea842a1de6a8307fba5 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Fri, 28 Nov 2025 17:40:22 +0100 Subject: [PATCH 231/657] cmake: put IFCXML_SUPPORT related config in IfcParse cmake config file --- cmake/CMakeLists.txt | 12 ------------ src/ifcparse/CMakeLists.txt | 4 +++- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a594dedf23..2344e52df8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -345,18 +345,6 @@ find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") message(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}") -if(NOT MINIMAL_BUILD) - # libxml2 is required for IFCXML (optional) and SVGFILL (mandatory) - if(IFCXML_SUPPORT) - find_package(LibXml2 REQUIRED) - endif() -endif() - -if(IFCXML_SUPPORT) - add_definitions(-DWITH_IFCXML) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML) -endif() - if(BUILD_IFCGEOM) # Open CASCADE if(WITH_OPENCASCADE) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index dd1f47eea6..5714c754de 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -35,12 +35,14 @@ add_library(IfcParse ${IFCPARSE_FILES}) set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") if(IFCXML_SUPPORT) + find_package(LibXml2 REQUIRED) + add_definitions(-DWITH_IFCXML) + set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML) if(LibXml2_DIR) target_compile_definitions(IfcParse PRIVATE ${LIBXML2_DEFINITIONS}) endif() - add_definitions(-DWITH_IFCXML) target_link_libraries(IfcParse LibXml2::LibXml2) endif() From 658713f142d1a25f2fb4d74c336a509ca0b194a1 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Tue, 25 Nov 2025 11:45:40 +0100 Subject: [PATCH 232/657] Remove svgfill as git module to add it directly in next commit --- .gitmodules | 3 --- src/svgfill | 1 - 2 files changed, 4 deletions(-) delete mode 160000 src/svgfill diff --git a/.gitmodules b/.gitmodules index 4aa9fd774c..3c158b5748 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,9 +5,6 @@ [submodule "src/ifcopenshell-python/ifcopenshell/mvd"] path = src/ifcopenshell-python/ifcopenshell/mvd url = https://github.com/opensourceBIM/python-mvdxml/ -[submodule "src/svgfill"] - path = src/svgfill - url = https://github.com/IfcOpenShell/svgfill [submodule "src/ifcopenshell-python/test/Sample-BIM-Files"] path = src/ifcopenshell-python/test/Sample-BIM-Files url = https://github.com/IfcOpenShell/ids-test-files diff --git a/src/svgfill b/src/svgfill deleted file mode 160000 index ba09c29b81..0000000000 --- a/src/svgfill +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ba09c29b81325c27d77cd41be84d7e84c9c06f5b From 9775dfc2c1ff7d8b6eb8f7fa0cda7005a33d23fd Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Tue, 25 Nov 2025 13:50:45 +0100 Subject: [PATCH 233/657] Add svgfill directly in IfcOpenShell git repo --- src/.gitattributes => .gitattributes | 0 .gitmodules | 3 + src/svgfill/3rdparty/svgpp | 1 + src/svgfill/CMakeLists.txt | 163 +++ src/svgfill/README.md | 65 + src/svgfill/examples/rects.svg | 80 ++ src/svgfill/examples/rects_output.svg | 1 + src/svgfill/src/arrange_polygons.cpp | 1774 +++++++++++++++++++++++++ src/svgfill/src/graph_2d.h | 509 +++++++ src/svgfill/src/main.cpp | 127 ++ src/svgfill/src/progress.h | 122 ++ src/svgfill/src/svgfill.cpp | 633 +++++++++ src/svgfill/src/svgfill.h | 119 ++ 13 files changed, 3597 insertions(+) rename src/.gitattributes => .gitattributes (100%) create mode 160000 src/svgfill/3rdparty/svgpp create mode 100644 src/svgfill/CMakeLists.txt create mode 100644 src/svgfill/README.md create mode 100644 src/svgfill/examples/rects.svg create mode 100644 src/svgfill/examples/rects_output.svg create mode 100644 src/svgfill/src/arrange_polygons.cpp create mode 100644 src/svgfill/src/graph_2d.h create mode 100644 src/svgfill/src/main.cpp create mode 100644 src/svgfill/src/progress.h create mode 100644 src/svgfill/src/svgfill.cpp create mode 100644 src/svgfill/src/svgfill.h diff --git a/src/.gitattributes b/.gitattributes similarity index 100% rename from src/.gitattributes rename to .gitattributes diff --git a/.gitmodules b/.gitmodules index 3c158b5748..ac12797d0b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -17,3 +17,6 @@ [submodule "src/pyodide/demo-app/wheels"] path = src/pyodide/demo-app/wheels url = https://github.com/IfcOpenShell/wasm-wheels +[submodule "src/svgfill/3rdparty/svgpp"] + path = src/svgfill/3rdparty/svgpp + url = https://github.com/svgpp/svgpp diff --git a/src/svgfill/3rdparty/svgpp b/src/svgfill/3rdparty/svgpp new file mode 160000 index 0000000000..5f1870aa7b --- /dev/null +++ b/src/svgfill/3rdparty/svgpp @@ -0,0 +1 @@ +Subproject commit 5f1870aa7b757718ff5f86bdfb55966fa4f217f9 diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt new file mode 100644 index 0000000000..155c016389 --- /dev/null +++ b/src/svgfill/CMakeLists.txt @@ -0,0 +1,163 @@ +cmake_minimum_required (VERSION 3.10) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +project (svgfill) + +cmake_policy(SET CMP0074 NEW) # find_package() uses _ROOT variables. +if (POLICY CMP0144) +cmake_policy(SET CMP0144 NEW) # find_package() uses upper-case _ROOT variables. +endif() +if(POLICY CMP0167) # 3.30 find_package(Boost) to use BoostConfig instead of FindBoost. + cmake_policy(SET CMP0167 OLD) +endif() + +include(GNUInstallDirs) + +# Specify paths to install files +if(NOT BINDIR) + set(BINDIR bin) +endif() +if(NOT IS_ABSOLUTE ${BINDIR}) + set(BINDIR ${CMAKE_INSTALL_BINDIR}) +endif() +message(STATUS "BINDIR: ${BINDIR}") + +if(NOT INCLUDEDIR) + set(INCLUDEDIR include) +endif() +if(NOT IS_ABSOLUTE ${INCLUDEDIR}) + set(INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}) +endif() +message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") + +if(NOT LIBDIR) + set(LIBDIR lib) +endif() +if(NOT IS_ABSOLUTE ${LIBDIR}) + set(LIBDIR ${CMAKE_INSTALL_LIBDIR}) +endif() +message(STATUS "LIBDIR: ${LIBDIR}") + +set(CGAL_LIBRARY_NAMES libCGAL_Core libCGAL_ImageIO libCGAL) + +if(NOT CGAL_INCLUDE_DIR) + find_package(CGAL REQUIRED) + if(NOT CGAL_DIR) + message( + FATAL_ERROR + "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." + ) + endif() + message(STATUS "CGAL: found config at '${CGAL_DIR}'.") + set(CGAL_LIBRARIES CGAL::CGAL) +else() + set(CGAL_INCLUDE_DIR ${CGAL_INCLUDE_DIR} CACHE FILEPATH "CGAL header files") + message(STATUS "Looking for CGAL include files in: ${CGAL_INCLUDE_DIR}") + + if(NOT "${CGAL_LIBRARY_DIR}" STREQUAL "") + set(CGAL_LIBRARY_DIR ${CGAL_LIBRARY_DIR} CACHE FILEPATH "CGAL library files") + message(STATUS "Looking for CGAL library files in: ${CGAL_LIBRARY_DIR}") + endif() + + if(WASM_BUILD) + set(CMAKE_FIND_ROOT_PATH_BACKUP "${CMAKE_FIND_ROOT_PATH}") + set(CMAKE_FIND_ROOT_PATH "") + endif() + + find_library(libCGAL NAMES CGAL PATHS ${CGAL_LIBRARY_DIR} NO_DEFAULT_PATH) + + if(libCGAL) + message(STATUS "CGAL library files found") + foreach(lib ${CGAL_LIBRARY_NAMES}) + string(REPLACE libCGAL "${lib}" lib_path "${libCGAL}") + list(APPEND CGAL_LIBRARIES "${lib_path}") + endforeach() + else() + if(NOT "${CGAL_LIBRARY_DIR}" STREQUAL "") + file(GLOB CGAL_LIBRARIES ${CGAL_LIBRARY_DIR}/CGAL*.lib) + list(LENGTH CGAL_LIBRARY_NAMES num_cgal_library_names) + list(LENGTH CGAL_LIBRARIES num_cgal_libraries) + link_directories("${CGAL_LIBRARY_DIR}") + if(NOT "${num_cgal_library_names}" STREQUAL "${num_cgal_libraries}") + message(FATAL_ERROR "Unable to find CGAL library files, aborting") + endif() + message(STATUS "CGAL library files found") + endif() + endif() + find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) + find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) + if(NOT libGMP) + message(FATAL_ERROR "Unable to find GMP library files, aborting") + endif() + if(NOT libMPFR) + message(FATAL_ERROR "Unable to find MPFR library files, aborting") + endif() + + list(APPEND CGAL_LIBRARIES "${libMPFR}") + list(APPEND CGAL_LIBRARIES "${libGMP}") +endif(NOT CGAL_INCLUDE_DIR) + +if(WIN32 AND ("$ENV{CONDA_BUILD}" STREQUAL "")) + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_MULTITHREADED ON) + if (USE_STATIC_MSVC_RUNTIME) + set(Boost_USE_STATIC_RUNTIME ON) + endif() +else() + # Disable Boost's autolinking as the libraries to be linked to are supplied + # already by CMake, and it's going to conflict if there are multiple, as is + # the case in conda-forge's libboost feedstock. + add_definitions(-DBOOST_ALL_NO_LIB) + if(WIN32) + # Necessary for boost version >= 1.67 + set(BCRYPT_LIBRARIES "bcrypt.lib") + endif() +endif() + +if (MSVC) + add_definitions(-bigobj) +endif() + +find_package(Boost) +message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") +find_package(LibXml2 REQUIRED) + +if(WASM_BUILD) + set(CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH_BACKUP}") +endif() + + + +include_directories(${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} + ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include +) + +file(GLOB LIB_H_FILES src/*.h) +file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp) +set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES}) +add_library(svgfill ${LIB_SRC_FILES}) +if(LibXml2_DIR) + find_package(LibXml2 CONFIG REQUIRED) + target_compile_definitions(svgfill PRIVATE ${LIBXML2_DEFINITIONS}) +endif() +target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} ${LIBXML2_LIBRARIES} ${CGAL_LIBRARIES}) + +add_executable(svgfill_exe src/main.cpp) +target_link_libraries(svgfill_exe svgfill) +set_property(TARGET svgfill_exe PROPERTY OUTPUT_NAME svgfill) +if(WIN32) + # both the library and the executable now result in a file with basename svgfill, + # on linux the the library is prefixed with lib as libsvgfill.a. Windows does not + # have this mechanism, so on windows the linker would be created an import library + # for the executable, also named svgfill.lib. This naming conflict results in: + # LINK : fatal error LNK1149: output filename matches input filename + # This flag tells the linker not to generate an import library and therefore no + # conflict occurs. + target_link_options(svgfill_exe PRIVATE "/NOIMPLIB") +endif() + +install(TARGETS svgfill_exe DESTINATION ${BINDIR}) +install(TARGETS svgfill DESTINATION ${LIBDIR}) +install(FILES ${LIB_H_FILES} DESTINATION ${INCLUDEDIR}) diff --git a/src/svgfill/README.md b/src/svgfill/README.md new file mode 100644 index 0000000000..dc0348af7c --- /dev/null +++ b/src/svgfill/README.md @@ -0,0 +1,65 @@ +svgfill +======= + +An application to fill areas bounded by unconnected lines in SVG. + +Dependencies +------------ + +* [CGAL 2D Arrangements](https://doc.cgal.org/latest/Arrangement_on_surface_2/index.html) GPL +* [SVG++](http://svgpp.org/) Boost software license + +Compilation +----------- + +Installation is shown based on the IfcOpenShell build script directory output: + + git clone --recursive https://github.com/IfcOpenShell/svgfill + cd svgfill + mkdir build + cd build + + # windows + + set IFCOPENSHELL_ROOT=..\path\to\ifcopenshell\directory\ + cmake -DBOOST_ROOT=%IFCOPENSHELL_ROOT%\deps\boost_1_67_0 ^ + -DBOOST_LIBRARYDIR=%IFCOPENSHELL_ROOT%\deps\boost_1_67_0\stage\vs2017-Win32\lib ^ + -DLIBXML2_INCLUDE_DIR=%IFCOPENSHELL_ROOT%\deps\OpenCOLLADA\Externals\LibXML\include ^ + -DLIBXML2_LIBRARIES=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\OpenCOLLADA\lib\opencollada\xml.lib ^ + -DCGAL_INCLUDE_DIR=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\cgal\include ^ + -DCGAL_LIBRARY_DIR=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\cgal\lib ^ + -DGMP_INCLUDE_DIR=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\mpir ^ + -DGMP_LIBRARY_DIR=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\mpir ^ + -DMPFR_INCLUDE_DIR=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\mpfr ^ + -DMPFR_LIBRARY_DIR=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\mpfr ^ + .. + + # nix + + IFCOPENSHELL_INSTALL=~/IfcOpenShell/build/$(uname -s)/$(uname -m)/install + cmake -DBOOST_ROOT=${IFCOPENSHELL_INSTALL}/boost-1.69.0 \ + -DLIBXML2_INCLUDE_DIR=${IFCOPENSHELL_INSTALL}/libxml2-2.9.9/include/libxml2 \ + -DLIBXML2_LIBRARIES=${IFCOPENSHELL_INSTALL}/libxml2-2.9.9/lib/libxml2.a \ + -DCGAL_INCLUDE_DIR=${IFCOPENSHELL_INSTALL}/cgal-5.2/include \ + -DCGAL_LIBRARY_DIR=${IFCOPENSHELL_INSTALL}/cgal-5.2/lib \ + -DGMP_INCLUDE_DIR=${IFCOPENSHELL_INSTALL}/gmp-6.1.2/include \ + -DGMP_LIBRARY_DIR=${IFCOPENSHELL_INSTALL}/gmp-6.1.2/lib \ + -DMPFR_INCLUDE_DIR=${IFCOPENSHELL_INSTALL}/mpfr-3.1.5/include \ + -DMPFR_LIBRARY_DIR=${IFCOPENSHELL_INSTALL}/mpfr-3.1.5/lib \ + .. + +License +------- + +LGPL + +Example +------- + +in: + +![](examples/rects.svg) + +out: + +![](examples/rects_output.svg) diff --git a/src/svgfill/examples/rects.svg b/src/svgfill/examples/rects.svg new file mode 100644 index 0000000000..23f1bc841d --- /dev/null +++ b/src/svgfill/examples/rects.svg @@ -0,0 +1,80 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/svgfill/examples/rects_output.svg b/src/svgfill/examples/rects_output.svg new file mode 100644 index 0000000000..c16c588993 --- /dev/null +++ b/src/svgfill/examples/rects_output.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/svgfill/src/arrange_polygons.cpp b/src/svgfill/src/arrange_polygons.cpp new file mode 100644 index 0000000000..7bddc2e41a --- /dev/null +++ b/src/svgfill/src/arrange_polygons.cpp @@ -0,0 +1,1774 @@ +// #define SVGFILL_DEBUG +// #define SVGFILL_MAIN + +#ifndef SVGFILL_MAIN +#include "svgfill.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "graph_2d.h" + +#if CGAL_VERSION_NR >= 1060000000 +#define variant_get std::get_if +#define my_shared_ptr std::shared_ptr +#else +#define variant_get boost::get +#define my_shared_ptr boost::shared_ptr +#endif + +typedef CGAL::Exact_predicates_exact_constructions_kernel K; +typedef CGAL::Polygon_2 Polygon_2; +typedef CGAL::Polygon_with_holes_2 Polygon_with_holes_2; +typedef K::Point_2 Point_2; +typedef K::Segment_2 Segment_2; +typedef std::vector Polygon_list; +typedef CGAL::Arr_segment_traits_2 Traits_2; +typedef typename Traits_2::Point_2 Arr_Point_2; +typedef typename Traits_2::X_monotone_curve_2 Arr_Segment_2; +typedef CGAL::Arrangement_2 Arrangement_2; + +template +using Triangle = std::array, 3>; + +template +Polygon_2 convert_polygon(const CGAL::Polygon_2& poly) { + Polygon_2 exact_poly; + typedef CGAL::Cartesian_converter Converter_Epick_to_Epeck; + Converter_Epick_to_Epeck converter; + for (auto vit = poly.vertices_begin(); vit != poly.vertices_end(); ++vit) { + exact_poly.push_back(converter(*vit)); // Convert each vertex + } + return exact_poly; +} + +template +void remove_close_points(P& p, double eps = 1.e-2) { + std::vector> ps; + ps.reserve(p.size()); + auto I = p.begin(); + auto J = I + 1; + for (;; ++J) { + bool last = false; + if (J == p.end()) { + J = p.begin(); + last = true; + } + // std::cout << "d " << std::sqrt(CGAL::to_double(CGAL::squared_distance(*I, *J))) << std::endl; + if (CGAL::squared_distance(*I, *J) > (eps * eps)) { + ps.push_back(*J); + I = J; + } + if (last) { + break; + } + } + if (ps.size() >= 2 && CGAL::squared_distance(ps.front(), ps.back()) <= eps * eps) { + // Remove the last point if it is too close to the first point + ps.pop_back(); + } + if (ps.size() != p.size()) { + // std::cerr << "Removed " << (p.size() - ps.size()) << " close points from polygon" << std::endl; + p = P(ps.begin(), ps.end()); + } +} + +std::vector create_and_convert_offset_polygon(double offset_distance, const Polygon_2& polygon_) { + auto polygon = polygon_; + if (!polygon.is_counterclockwise_oriented()) { + polygon.reverse_orientation(); + } + + remove_close_points(polygon); + + // Create the offset polygons using Epick kernel + // create_exterior_skeleton_and_offset_polygons_2() + std::vector>> offset_polygons; + + if (offset_distance >= 0.) { + offset_polygons = CGAL::create_exterior_skeleton_and_offset_polygons_2(offset_distance, polygon); + // erase the first outer frame + offset_polygons.erase(offset_polygons.begin()); + offset_polygons.front()->reverse_orientation(); + } else { + offset_polygons = CGAL::create_interior_skeleton_and_offset_polygons_2(-offset_distance, polygon); + } + + // Convert each offset polygon back to the Epeck kernel + std::vector exact_offset_polygons; + for (auto& inexact_poly_ptr : offset_polygons) { + remove_close_points(*inexact_poly_ptr); + Polygon_2 exact_poly = convert_polygon(*inexact_poly_ptr); + exact_offset_polygons.push_back(exact_poly); + } + + return exact_offset_polygons; +} + +template +T take_first_if_single_item(const std::vector& vec) { + if (vec.size() == 0) { + throw std::runtime_error("Expected at least one item"); + } + if (true || vec.size() == 1) { + return vec.front(); + } + throw std::runtime_error("Expected a single item"); +} + +template +boost::optional maybe_take_first_if_single_item(const std::vector& vec) { + if (vec.size() == 0) { + return boost::none; + } + if (true || vec.size() == 1) { + return vec.front(); + } +} + +template +boost::optional subtract_retain_largest(const T& lhs, const T& rhs) { + std::vector result; + boost::optional mp; + + CGAL::difference(lhs, rhs, std::back_inserter(result)); + + std::sort(result.begin(), result.end(), [](const Polygon_with_holes_2& a, const Polygon_with_holes_2& b) { + return a.outer_boundary().area() < b.outer_boundary().area(); + }); + + if (result.size() > 0) { + if (result.front().has_holes()) { + return boost::none; + } + return result.front().outer_boundary(); + } + + return boost::none; +} + +// Function to write polygons as line segments in OBJ format +void write_polygon_to_obj(std::ofstream& ofs, size_t& vertex_index, bool as_line, const Polygon_2& polygon, const std::string& name) { + ofs << "o " << name << "\n"; // Object name + + // Write vertices + for (auto vit = polygon.vertices_begin(); vit != polygon.vertices_end(); ++vit) { + ofs << "v " << CGAL::to_double(vit->x()) << " " << CGAL::to_double(vit->y()) << " 0\n"; + } + + if (as_line) { + // Write line segments (edges) + for (size_t j = 0; j < polygon.size(); ++j) { + ofs << "l " << vertex_index + j << " " << vertex_index + (j + 1) % polygon.size() << "\n"; + } + } else { + ofs << "f"; + for (size_t j = 0; j < polygon.size(); ++j) { + ofs << " " << vertex_index + j; + } + ofs << "\n"; + } + + vertex_index += polygon.size(); +} + +Polygon_2 circ_to_poly(typename Arrangement_2::Ccb_halfedge_const_circulator circ) +{ + Polygon_2 poly; + auto curr = circ; + do { + poly.push_back(curr->source()->point()); + } while (++curr != circ); + return poly; +} + +Polygon_with_holes_2 circ_to_poly(typename Arrangement_2::Ccb_halfedge_const_circulator circ, typename Arrangement_2::Inner_ccb_const_iterator a, typename Arrangement_2::Inner_ccb_const_iterator b) +{ + Polygon_with_holes_2 poly(circ_to_poly(circ)); + for (auto it = a; it != b; ++it) { + poly.add_hole(circ_to_poly(*it)); + } + return poly; +} + +void write_polygon_to_svg(std::ostream& ofs, const Polygon_2& polygon) { + ofs << "x()) << "," << CGAL::to_double(vit->y()) << " "; + } + ofs << "\" style=\"fill:none;stroke-width:1\" />\n"; +} + +// Function to write a Polygon_with_holes_2 to an SVG file +void write_polygon_with_holes_to_svg(std::ostream& ofs, const Polygon_with_holes_2& polygon_with_holes) { + // Write the outer boundary (main polygon) + if (!polygon_with_holes.is_unbounded()) { + write_polygon_to_svg(ofs, polygon_with_holes.outer_boundary()); + } + + // Write the holes (if any) with a different color (e.g., red) + for (auto hit = polygon_with_holes.holes_begin(); hit != polygon_with_holes.holes_end(); ++hit) { + write_polygon_to_svg(ofs, *hit); + } +} + +Polygon_2 fuse_with_offset(const std::vector& polygons, double polygon_offset_distance) { + // Find the outer perimeter using offset - union - negative offset + std::vector offset_polygons; + for (auto& r : polygons) { + auto ps = create_and_convert_offset_polygon(polygon_offset_distance, r); + for (auto& p : ps) { + if (!p.is_simple()) { + /*{ + std::cerr << "["; + bool first = true; + for (auto& pp : r) { + if (!first) { + std::cerr << ","; + } + first = false; + std::cerr << "(" << pp.x() << "," << pp.y() << ")"; + } + std::cerr << "]" << std::endl; + } + { + std::cerr << "["; + bool first = true; + for (auto& pp : p) { + if (!first) { + std::cerr << ","; + } + first = false; + std::cerr << "(" << pp.x() << "," << pp.y() << ")"; + } + std::cerr << "]" << std::endl; + }*/ + throw std::runtime_error("Complex polygon originated from offset"); + } + } + offset_polygons.insert(offset_polygons.end(), ps.begin(), ps.end()); + } + + // Perform Boolean union on the offset polygons + std::vector unioned_polygons; + CGAL::join(offset_polygons.begin(), offset_polygons.end(), std::back_inserter(unioned_polygons)); + Polygon_2 fused_removed_close_points = unioned_polygons.front().outer_boundary(); + remove_close_points(unioned_polygons.front().outer_boundary(), polygon_offset_distance); + + // Apply negative offset to get the outer perimeter polygon + auto inner_offset = create_and_convert_offset_polygon( + // Slightly smaller inset distance for non-manifold situs? + -polygon_offset_distance + 1.e-8, + fused_removed_close_points); + + if (inner_offset.size() != 1) { + throw std::runtime_error("Unexpected union outcome - num outer perimiters: " + std::to_string(inner_offset.size())); + } + + return inner_offset.front(); +} + +void arrange_cgal_polygons(const std::vector& input_polygons_, std::vector& output_polygons, double polygon_offset_distance = -1.) { + static const double OVERLAP_RESOLUTION_DISTANCE = 1.e-2; + // even larger amount of inset so that outer perimeter is safely within all input polygons even when overlap resolution is applied + // no, `1.e-2 + 1.e-5` creates issues with the outer perimeter, are there other tolerances in play? + static const double OUTER_PERIMITER_ADDITIONAL_INSET_AMOUNT = 1.e-5; + + if (polygon_offset_distance < 0.) { + double total_edge_length = 0.; + size_t num_edges = 0; + for (auto& p : input_polygons_) { + for (auto it = p.edges_begin(); it != p.edges_end(); ++it) { + total_edge_length += std::sqrt(CGAL::to_double(CGAL::squared_distance(it->start(), it->end()))); + num_edges += 1; + } + } + polygon_offset_distance = total_edge_length / num_edges / 2; + } + + auto input_polygons__ = input_polygons_; + decltype(input_polygons__) input_polygons; + + for (auto& i : input_polygons__) { + std::vector> ps(i.begin(), i.end()); + if (ps.front() == ps.back()) { + ps.pop_back(); + } + input_polygons.emplace_back(ps.begin(), ps.end()); + } + + for (auto& polygon : input_polygons) { + if (!polygon.is_counterclockwise_oriented()) { + polygon.reverse_orientation(); + } + } + + for (auto& polygon : input_polygons) { + remove_close_points(polygon); + } + +#ifdef SVGFILL_DEBUG + std::ofstream obj("obj.obj"); + size_t vi = 1; + + std::ofstream svg("svg.svg"); + svg << "\n"; + + for (auto it = input_polygons.begin(); it != input_polygons.end(); ++it) { + write_polygon_to_obj(obj, vi, true, *it, "input_poly_" + std::to_string(std::distance(input_polygons.begin(), it))); + write_polygon_to_svg(svg, *it); + } + + obj << std::flush; +#endif + + typedef CGAL::Box_intersection_d::Box_with_handle_d Box; + std::vector>> input_triangulated; + + std::vector boxes; + for (auto it = input_polygons.begin(); it != input_polygons.end(); ++it) { + constexpr double offset = 1.e-3; + auto b = it->bbox(); + boxes.emplace_back( + CGAL::Bbox_2(b.xmin() - offset, b.ymin() - offset, b.xmax() + offset, b.ymax() + offset), + std::distance(input_polygons.begin(), it) + ); + + if (!it->is_simple()) { +#ifdef SVGFILL_DEBUG + write_polygon_to_obj(obj, vi, true, *it, "self-intersecting"); +#endif + throw std::runtime_error("Self-intersecting input"); + } + + CGAL::Polygon_triangulation_decomposition_2 decompositor; + std::vector temp; + decompositor(*it, std::back_inserter(temp)); + input_triangulated.emplace_back(); + for (auto& pol : temp) { + auto it = pol.vertices_circulator(); + const auto& p = *(it++); + const auto& q = *(it++); + const auto& r = *(it++); + input_triangulated.back().emplace_back(p, q, r); + } + } + + std::set> overlaps; + + CGAL::box_self_intersection_d(boxes.begin(), boxes.end(), [&input_triangulated, &overlaps](const Box& a, const Box& b) { + for (auto& t1 : input_triangulated[a.handle()]) { + bool registered_overlap = false; + for (auto& t2 : input_triangulated[b.handle()]) { + if (CGAL::squared_distance(t1, t2) < (1.e-3 * 1.e-3)) { + overlaps.insert({ + (a.handle() < b.handle()) ? a.handle() : b.handle(), + (a.handle() < b.handle()) ? b.handle() : a.handle() + }); + registered_overlap = true; + break; + } + } + if (registered_overlap) { + // no need to check other triangles + break; + } + } + }); + + if (true) { + // solve overlaps by means of subtraction + // loop over overlaps and subtract the smaller polygon from the larger one + + std::set eliminated_polies; + std::map overlap_counts; + for (auto& p : overlaps) { + overlap_counts[p.first]++; + overlap_counts[p.second]++; + } + + for (const auto& edge : overlaps) { + // Skip eliminated + if (eliminated_polies.find(edge.first) != eliminated_polies.end() || + eliminated_polies.find(edge.second) != eliminated_polies.end()) { + continue; + } + + // Many overlaps indicate an aggregated polygon, skip them + /* + if (overlap_counts[edge.first] > 10 || overlap_counts[edge.second] > 10) { + if (overlap_counts[edge.first] > 10) { + eliminated_polies.insert(edge.first); + } + if (overlap_counts[edge.second] > 10) { + eliminated_polies.insert(edge.second); + } + continue; + } + */ + + // these are pointers now, because otherwise swap would not work? + auto* poly1 = &input_polygons[edge.first]; + auto* poly2 = &input_polygons[edge.second]; + + // Populate eliminated_polies with small polygons + // This can happen over time when modifications are made to the polygons to solve overlaps + bool skip = false; + if (poly1->area() < 1.e-2) { + eliminated_polies.insert(edge.first); + skip = true; + } + if (poly2->area() < 1.e-2) { + eliminated_polies.insert(edge.second); + skip = true; + } + // Small slivers are also just eliminated + if (!maybe_take_first_if_single_item(create_and_convert_offset_polygon(-1.e-1, *poly1))) { + eliminated_polies.insert(edge.first); + skip = true; + } + if (!maybe_take_first_if_single_item(create_and_convert_offset_polygon(-1.e-1, *poly2))) { + eliminated_polies.insert(edge.second); + skip = true; + } + if (skip) { + continue; + } + + // Skip polygons that have a very high intersection over union + // ratio, which indicates that they are very likely duplicates + if (CGAL::do_intersect(*poly1, *poly2)) { + std::vector result; + CGAL::intersection(*poly1, *poly2, std::back_inserter(result)); + typename K::FT intersection_area = 0; + for (auto& r : result) { + auto poly_area = r.outer_boundary().area(); + for (auto& h : r.holes()) { + poly_area -= h.area(); + } + intersection_area += poly_area; + } + CGAL::Polygon_with_holes_2 poly12; + CGAL::join(*poly1, *poly2, poly12); + typename K::FT union_area = poly12.outer_boundary().area(); + for (auto& h : poly12.holes()) { + union_area -= h.area(); + } + if (union_area > 0 && intersection_area / union_area > 0.99) { + // std::cerr << intersection_area / union_area << std::endl; + eliminated_polies.insert(edge.first); + continue; + } + } + + if (!(poly1->is_simple() && poly2->is_simple())) { + continue; + } + + { + std::vector result; + // std::cerr << poly1.area() << " " << poly2.area() << std::endl; + // std::cerr.flush(); + + boost::optional mp1, mp2, mp3, mp4; + bool swap = false; + + swap = poly1->area() <= poly2->area(); + if (swap) { + std::swap(poly1, poly2); + } + + bool success = false; + if ((mp1 = maybe_take_first_if_single_item(create_and_convert_offset_polygon(OVERLAP_RESOLUTION_DISTANCE, *poly2)))) { + if ((mp2 = subtract_retain_largest(*poly1, *mp1))) { + if ((mp3 = maybe_take_first_if_single_item(create_and_convert_offset_polygon(OVERLAP_RESOLUTION_DISTANCE * 2, *mp2)))) { + if ((mp4 = subtract_retain_largest(*poly2, *mp3))) { + *poly1 = *mp2; + *poly2 = *mp4; + success = true; + } + } + } + } + + /* + if (swap) { + // swap back to retain original ordering + // what's the point in swapping back here? + std::swap(poly1, poly2); + } + */ + + if (!success) { + eliminated_polies.insert(swap ? edge.first : edge.second); + continue; + } + } + } + + // iterate over the eliminated polygons and remove them from the input polygons + for (auto it = eliminated_polies.rbegin(); it != eliminated_polies.rend(); ++it) { + input_polygons.erase(input_polygons.begin() + *it); + } + } + + /* + if constexpr (false) { + // solve overlap by means of union into components + std::vector> adj(input_polygons.size()); + for (const auto& edge : overlaps) { + adj[edge.first].push_back(edge.second); + adj[edge.second].push_back(edge.first); + } + + std::vector visited(input_polygons.size(), false); + std::vector> connected_components; + + for (size_t v = 0; v < input_polygons.size(); ++v) { + if (!visited[v]) { + connected_components.emplace_back(); + + std::stack stack; + stack.push(v); + visited[v] = true; + + while (!stack.empty()) { + size_t u = stack.top(); + stack.pop(); + connected_components.back().push_back(u); + + for (size_t neighbor : adj[u]) { + if (!visited[neighbor]) { + visited[neighbor] = true; + stack.push(neighbor); + } + } + } + } + } + + std::vector fused_polies; + + for (auto& comp : connected_components) { + std::vector comp_polies; + if (comp.size() == 1) { + fused_polies.push_back(input_polygons[comp.front()]); + } else { + for (auto& c : comp) { + comp_polies.push_back(input_polygons[c]); + } + fused_polies.push_back(fuse_with_offset(comp_polies, 1.e-2)); + } + } + +#ifdef SVGFILL_DEBUG + for (auto it = fused_polies.begin(); it != fused_polies.end(); ++it) { + write_polygon_to_obj(obj, vi, true, *it, "fused_poly_" + std::to_string(std::distance(fused_polies.begin(), it))); + write_polygon_to_svg(svg, *it); + } +#endif + + input_polygons = fused_polies; + } + */ + + { + // [NB Nov 6] we cannot do this anymore because it could revert the spacing between input polygons + // that touch in the corner. + // Now that overlaps/touches at corners are handled more locally only a small indent is produced + // which would be undone by means of an inset+offset. + // + // [NB Nov 10] this is actually still necessary though, but we apply a much smaller distance now + // to keep the overlap eliminations in tact + // + // Inset-offset to remove tiny details that may cause enourmous spikes in offsets + for (auto& r : input_polygons) { + auto ps = create_and_convert_offset_polygon(-polygon_offset_distance / 10000., r); + if (ps.size() == 1) { + auto r2 = ps.front(); + ps = create_and_convert_offset_polygon(+polygon_offset_distance / 10000., r2); + if (ps.size() == 1) { + r = ps.front(); + } + } + } + } + +#ifdef SVGFILL_DEBUG + for (auto it = input_polygons.begin(); it != input_polygons.end(); ++it) { + write_polygon_to_obj(obj, vi, true, *it, "processed_input_poly_" + std::to_string(std::distance(input_polygons.begin(), it))); + write_polygon_to_svg(svg, *it); + } +#endif + + // Unfortunately CGAL does not seem to have a ready to use aabb primitive for segments in 2D, + // so we have to use 3D segments and aabb tree for 2D polygons. + std::list> all_segs; + std::unordered_map*, decltype(input_polygons.begin())> seg_to_poly; + + for (auto it = input_polygons.begin(); it != input_polygons.end(); ++it) { + for (auto eit = it->edges_begin(); eit != it->edges_end(); ++eit) { + CGAL::Segment_3 seg3d( + CGAL::Point_3(eit->source().x(), eit->source().y(), 0), + CGAL::Point_3(eit->target().x(), eit->target().y(), 0) + ); + all_segs.push_back(seg3d); + seg_to_poly[&all_segs.back()] = it; + } + } + + using TreeTraits = CGAL::AABB_traits>::iterator>>; + using Tree = CGAL::AABB_tree; + + Tree tree(all_segs.begin(), all_segs.end()); + tree.accelerate_distance_queries(); + + auto input_polygon_boundary = + [&](const Point_2& p, double tol = 1e-5) -> decltype(input_polygons.begin()) + { + // Find closest point & corresponding segment + auto closest = tree.closest_point_and_primitive(CGAL::Point_3(p.x(), p.y(), 0)); + const auto& closest_pt = closest.first; + auto seg_ptr = &*closest.second; + + double d = CGAL::to_double(CGAL::squared_distance(p, Point_2(closest_pt.x(), closest_pt.y()))); + if (d < (tol * tol)) { + return seg_to_poly.find(seg_ptr)->second; + } + return input_polygons.end(); + }; + + /* + auto input_polygon_boundary = [&input_polygons](const CGAL::Point_2& p, double tol = 1.e-5) { + // unfortunately some imprecision slept into the code so we can't + // so we can't just use has_on_boundary() anymore + double D = std::numeric_limits::infinity(); + for (auto it = input_polygons.begin(); it != input_polygons.end(); ++it) { + for (auto jt = it->edges_begin(); jt != it->edges_end(); ++jt) { + const auto& seg = *jt; + auto d = std::sqrt(CGAL::to_double(CGAL::squared_distance(seg, p))); + if (d < D) { + D = d; + } + if (d < tol) { + return it; + } + } + } + return input_polygons.end(); + }; + */ + + auto close_input_point = [&input_polygons](const CGAL::Point_2& P) { + CGAL::Point_2 closest; + double closest_distance = std::numeric_limits::infinity(); + auto input_it = input_polygons.end(); + + // unfortunately some imprecision slept into the code so we can't + // so we can't just use has_on_boundary() anymore + for (auto it = input_polygons.begin(); it != input_polygons.end(); ++it) { + for (auto& p : *it) { + auto d = std::sqrt(CGAL::to_double(CGAL::squared_distance(P, p))); + if (d < closest_distance) { + closest_distance = d; + closest = p; + input_it = it; + } + } + } + + return std::make_pair(input_it, closest); + }; + + auto project_input_point = [&input_polygons](const CGAL::Point_2& P) { + CGAL::Point_2 closest; + typename K::FT closest_sq_distance = std::numeric_limits::infinity(); + auto input_it = input_polygons.end(); + + // unfortunately some imprecision slept into the code so we can't + // so we can't just use has_on_boundary() anymore + for (auto it = input_polygons.begin(); it != input_polygons.end(); ++it) { + for (auto jt = it->edges_begin(); jt != it->edges_end(); ++jt) { + auto Pp = jt->supporting_line().projection(P); + auto d = CGAL::squared_distance(Pp, P); + if (d < closest_sq_distance) { + closest_sq_distance = d; + closest = Pp; + input_it = it; + } + } + } + + return std::make_pair(input_it, closest); + }; + + // Find the outer perimeter using offset - union - negative offset + std::vector offset_polygons; + for (auto& r : input_polygons) { + auto R = r; + if (!R.is_counterclockwise_oriented()) { + R.reverse_orientation(); + } + + // Overlap removal can also result in close points causing problems when converted into non-exact nt + remove_close_points(R); + + auto ps = create_and_convert_offset_polygon(polygon_offset_distance, R); + for (auto& p : ps) { + if (!p.is_simple()) { + /*{ + std::cerr << "input ["; + bool first = true; + for (auto& pp : r) { + if (!first) { + std::cerr << ","; + } + first = false; + std::cerr << "(" << pp.x() << "," << pp.y() << ")"; + } + std::cerr << "]" << std::endl; + } + + { + std::cerr << "["; + bool first = true; + for (auto& pp : p) { + if (!first) { + std::cerr << ","; + } + first = false; + std::cerr << "(" << pp.x() << "," << pp.y() << ")"; + } + std::cerr << "]" << std::endl; + }*/ + + throw std::runtime_error("Complex polygon originated from offset"); + } + } + offset_polygons.insert(offset_polygons.end(), ps.begin(), ps.end()); + } + +#ifdef SVGFILL_DEBUG + for (auto it = offset_polygons.begin(); it != offset_polygons.end(); ++it) { + write_polygon_to_obj(obj, vi, true, *it, "offset_poly_" + std::to_string(std::distance(offset_polygons.begin(), it))); + write_polygon_to_svg(svg, *it); + } +#endif + + // Perform Boolean union on the offset polygons + std::vector unioned_polygons; + CGAL::join(offset_polygons.begin(), offset_polygons.end(), std::back_inserter(unioned_polygons)); + + if (unioned_polygons.size() > 1) { + // @todo this is currently one of the major limitations in the code that still can be eliminated + // by grouping the input polygons by their perimiter polygon in unioned_polygons + std::sort(unioned_polygons.begin(), unioned_polygons.end(), [](auto& p, auto& q) { return p.outer_boundary().area() > q.outer_boundary().area(); }); + } + +#ifdef SVGFILL_DEBUG + write_polygon_to_obj(obj, vi, true, unioned_polygons.front().outer_boundary(), "offset_poly_joined"); + write_polygon_to_svg(svg, unioned_polygons.front().outer_boundary()); + +#endif + + Polygon_2 fused_removed_close_points; + { + std::vector> ps; + auto& p = unioned_polygons.front().outer_boundary(); + ps.reserve(p.size()); + auto I = p.begin(); + auto J = I + 1; + for (;; ++J) { + bool last = false; + if (J == p.end()) { + J = p.begin(); + last = true; + } + // if (CGAL::squared_distance(*I, *J) > (polygon_offset_distance * polygon_offset_distance)) { + if (CGAL::squared_distance(*I, *J) > (1.e-4 * 1.e-4)) { + ps.push_back(*J); + I = J; + } + if (last) { + break; + } + } + fused_removed_close_points = Polygon_2(ps.begin(), ps.end()); + } + + // Apply negative offset to get the outer perimeter polygon + auto inner_offset = create_and_convert_offset_polygon( + // Because polygon_offset is inexact, make sure our inset distance is slightly larger + // std::nexttoward(-polygon_offset_distance, -std::numeric_limits::infinity()), + + // 1.e-8 even was too little and still resulted in slivers of triangle around the perimeter + -polygon_offset_distance - OUTER_PERIMITER_ADDITIONAL_INSET_AMOUNT, + fused_removed_close_points); + +#ifdef SVGFILL_DEBUG + write_polygon_to_obj(obj, vi, true, inner_offset.front(), "joined_inset"); + write_polygon_to_svg(svg, inner_offset.front()); +#endif + + /* + // there is non-insignificant chance that around the outer boundary, vertices are located in + // between of the input polyhedra, but intermediate vertices result in triangles that will no longer + // span between the two spaces with two edges and therefore cause the topological centre line + // to no run up to the center. Eliminate all vertices that are not on the polyhedral boundary of polygon. + + // this theory proved to be false. once we have topological end points in our graph that are + // connected to input polyhedra to form closed cells, we move those topological end points to + // the average of the input polyhedra corner points, thus effectively also moving them outwards. + { + for (auto& i : inner_offset) { + std::vector> ps; + for (auto& p : i) { + if (input_polygon_boundary(p, 1.e-3) != input_polygons.end()) { + ps.push_back(p); + } + } + i = Polygon_2(ps.begin(), ps.end()); + } + } + +#ifdef SVGFILL_DEBUG + write_polygon_to_obj(obj, vi, true, inner_offset.front(), "joined_inset_cleaned"); + write_polygon_to_svg(svg, inner_offset.front()); +#endif + */ + + // Subtract original polygons from outer perimeter + std::vector difference_result, difference_result_subdivided; + for (auto& i : inner_offset) { + std::vector working_copy; + working_copy.emplace_back(i); + + for (auto& r : input_polygons) { + std::vector temp_working_copy; + for (auto& wc : working_copy) { + CGAL::difference(wc, r, std::back_inserter(temp_working_copy)); + } + working_copy = temp_working_copy; + } + difference_result.insert(difference_result.end(), working_copy.begin(), working_copy.end()); + } + + // subdivide difference_result to have better behave triangulation + + { + const double max_distance = polygon_offset_distance / 8.; + auto subdivide_polygon = [max_distance](const Polygon_2& p) { + std::vector points; + for (auto it = p.edges_begin(); it != p.edges_end(); ++it) { + const auto& seg = *it; + auto num_splits = (int)std::ceil(std::sqrt(CGAL::to_double(seg.squared_length())) / max_distance) - 1; + points.push_back(seg.source()); + for (auto i = 0; i < num_splits; ++i) { + auto d = (seg.target() - seg.source()) / (num_splits + 1) * (i + 1); + points.push_back(seg.source() + d); + } + } + return Polygon_2(points.begin(), points.end()); + }; + + for (auto& pwh : difference_result) { + // Subdivide outer boundary + Polygon_2 outer = subdivide_polygon(pwh.outer_boundary()); + // Subdivide holes + std::vector holes; + for (auto hit = pwh.holes_begin(); hit != pwh.holes_end(); ++hit) { + holes.push_back(subdivide_polygon(*hit)); + } + // Construct new Polygon_with_holes_2 + difference_result_subdivided.push_back(Polygon_with_holes_2(outer, holes.begin(), holes.end())); + } + } + +#ifdef SVGFILL_DEBUG + for (auto it = difference_result_subdivided.begin(); it != difference_result_subdivided.end(); ++it) { + auto i = std::distance(difference_result_subdivided.begin(), it); + write_polygon_to_obj(obj, vi, true, it->outer_boundary(), "difference_result_subdivided_" + std::to_string(i)); + write_polygon_to_svg(svg, it->outer_boundary()); + for (auto& p : it->holes()) { + write_polygon_to_obj(obj, vi, true, p, "difference_result_subdivided_" + std::to_string(i)); + write_polygon_to_svg(svg, p); + } + } +#endif + + std::list> triangular_polygons; + + for (auto& pwh : difference_result_subdivided) { + CGAL::Polygon_triangulation_decomposition_2 decompositor; + decompositor(pwh, std::back_inserter(triangular_polygons)); + } + + triangular_polygons.erase(std::remove_if(triangular_polygons.begin(), triangular_polygons.end(), [](const CGAL::Polygon_2& p) { + return CGAL::to_double(p.area()) < 1.e-8; + }), triangular_polygons.end()); + +#ifdef SVGFILL_DEBUG + for (auto it = triangular_polygons.begin(); it != triangular_polygons.end(); ++it) { + write_polygon_to_obj(obj, vi, false, *it, "tri_" + std::to_string(std::distance(triangular_polygons.begin(), it))); + write_polygon_to_svg(svg, *it); + } +#endif + + // Build maps of triangle -> edge and edge -> triangle in order to do traversal on the 'corridor mesh' + std::map, std::vector*>> segment_to_facet; + std::map, std::vector*>> segment_to_input_facet; + std::map, Point_2> segment_to_midpoint; + std::map> midpoint_to_segment; + std::map*, std::vector>> facet_to_segment; + + for (auto& tri : triangular_polygons) { + for (size_t i = 0; i < 3; ++i) { + size_t j = (i + 1) % 3; + auto& pi = tri.vertex(i); + auto& pj = tri.vertex(j); + const bool orientation = std::lexicographical_compare(pi.cartesian_begin(), pi.cartesian_end(), pj.cartesian_begin(), pj.cartesian_end()); + std::pair seg(orientation ? pi : pj, orientation ? pj : pi); + segment_to_facet[seg].push_back(&tri); + facet_to_segment[&tri].push_back(seg); + } + } + + // This part is the most computationally expensive. Caching effectively halves the lookup time here, since every vertex has two outgoing edges. + std::map input_polygon_boundary_cache; + auto cached_input_polygon_boundary = [&](const Point_2& p, double tol = 1e-5) -> decltype(input_polygons.begin()) + { + auto it = input_polygon_boundary_cache.find(p); + if (it == input_polygon_boundary_cache.end()) { + auto index = input_polygon_boundary(p, tol); + input_polygon_boundary_cache[p] = index; + return index; + } else { + return it->second; + } + }; + + // Register midpoints on the edges within the 'corridor mesh' that span multiple input polygons + for (auto& p : segment_to_facet) { + auto center = CGAL::ORIGIN + (((p.first.first - CGAL::ORIGIN) + (p.first.second - CGAL::ORIGIN)) / 2); + + auto p1index = cached_input_polygon_boundary(p.first.first); + auto p2index = cached_input_polygon_boundary(p.first.second); + + segment_to_input_facet[p.first].push_back(&*p1index); + segment_to_input_facet[p.first].push_back(&*p2index); + + if (p1index != input_polygons.end() && p2index != input_polygons.end() && p1index != p2index) { + segment_to_midpoint[p.first] = center; + midpoint_to_segment[center] = p.first; + } + + if (p1index != input_polygons.end() && p2index != input_polygons.end() && p1index != p2index) { + segment_to_midpoint[p.first] = center; + midpoint_to_segment[center] = p.first; + } + } + +#ifdef SVGFILL_DEBUG + obj << "o network_1\n"; +#endif + + // Observe corridor mesh topology to join edge midpoints into a network + std::map> line_graph; + for (auto& p : segment_to_midpoint) { + for (auto& q : segment_to_facet[p.first]) { + for (auto& r : facet_to_segment[q]) { + if (p.first == r) { + continue; + } + decltype(segment_to_midpoint)::const_iterator it; + if ((it = segment_to_midpoint.find(r)) != segment_to_midpoint.end()) { + line_graph[p.second].push_back(it->second); + +#ifdef SVGFILL_DEBUG + obj << "v " << CGAL::to_double(p.second.x()) << " " << CGAL::to_double(p.second.y()) << " 0\n"; + obj << "v " << CGAL::to_double(it->second.x()) << " " << CGAL::to_double(it->second.y()) << " 0\n"; + obj << "l " << vi++; + obj << " " << vi++ << "\n"; + + svg << "second.x()) << "\" y2=\"" << CGAL::to_double(it->second.y()) << "\" />"; +#endif + } + } + } + } + + // Find triangles in this network often occuring at junctions in the corridor mesh + std::set> triangles; + std::function&)> find_triangles_recursive; + find_triangles_recursive = [&](std::vector& path) -> void { + // If depth reaches 3, check for a triangle + if (path.size() == 3) { + // Check if we can complete the triangle by going from the current point back to the start + const std::vector& neighbors_current = line_graph.at(path.back()); + if (std::find(neighbors_current.begin(), neighbors_current.end(), path.front()) != neighbors_current.end()) { + // We found a triangle, add it to the set + Triangle triangle = { path[0], path[1], path[2] }; + std::sort(triangle.begin(), triangle.end()); + triangles.insert(triangle); + } + return; + } + + // Otherwise, continue exploring neighbors + const std::vector& neighbors = line_graph.at(path.back()); + for (const Point_2& neighbor : neighbors) { + if (std::find(path.begin(), path.end(), neighbor) == path.end()) { + path.push_back(neighbor); + find_triangles_recursive(path); + path.pop_back(); // Backtrack + } + } + }; + + for (auto& p : line_graph) { + std::vector ps = { p.first }; + find_triangles_recursive(ps); + } + + // For every triangle found in the network we eliminate one edge to break the cycle + // The edge we eliminate is the edge with the greatest angle with any of it's neighbours + + // non exact time, we need sqrt + using SK = CGAL::Simple_cartesian; + CGAL::Cartesian_converter C{}; + +#ifdef SVGFILL_DEBUG + obj << "o eliminated\n"; +#endif + + std::set> eliminated_segments; + + for (auto& t : triangles) { + Triangle st; + std::transform(t.begin(), t.end(), st.begin(), C); + + double global_min_abs_dot = std::numeric_limits::infinity(); + size_t global_min_abs_dot_index; + + for (size_t i = 0; i < 3; ++i) { + auto j = (i + 2) % 3; + auto e0 = st[i] - st[j]; + e0 /= std::sqrt(e0.squared_length()); + + double max_abs_dot = 0.; + + { + auto& ni = line_graph[t[i]]; + for (auto& n : ni) { + if (std::find(t.begin(), t.end(), n) == t.end()) { + // not contained in triangle + auto sn = C(n); + auto en = sn - st[i]; + en /= std::sqrt(en.squared_length()); + auto dot = std::abs(en * e0); + + if (dot > max_abs_dot) { + max_abs_dot = dot; + } + } + } + } + + { + auto& nj = line_graph[t[j]]; + for (auto& n : nj) { + if (std::find(t.begin(), t.end(), n) == t.end()) { + // not contained in triangle + auto sn = C(n); + auto en = sn - st[j]; + en /= std::sqrt(en.squared_length()); + auto dot = std::abs(en * e0); + + if (dot > max_abs_dot) { + max_abs_dot = dot; + } + } + } + + } + + if (max_abs_dot < global_min_abs_dot) { + global_min_abs_dot = max_abs_dot; + global_min_abs_dot_index = i; + } + } + + { + auto i = global_min_abs_dot_index; + auto j = (i + 2) % 3; + + eliminated_segments.insert({ t[i], t[j] }); + eliminated_segments.insert({ t[j], t[i] }); + +#ifdef SVGFILL_DEBUG + obj << "v " << st[j].x() << " " << st[j].y() << " 0\n"; + obj << "v " << st[i].x() << " " << st[i].y() << " 0\n"; + obj << "l " << vi++; + obj << " " << vi++ << "\n"; + + svg << ""; +#endif + } + + } + + Graph2D G2(line_graph); + for (auto& e : eliminated_segments) { + G2.remove_edge(e.first, e.second); + } + + auto G = G2.weld_vertices(); + +#ifdef SVGFILL_DEBUG + obj << "o network_2\n"; + for (auto it = G.edges_begin(); it != G.edges_end(); ++it) { + obj << "v " << CGAL::to_double(it->first.x()) << " " << CGAL::to_double(it->first.y()) << " 0\n"; + obj << "v " << CGAL::to_double(it->second.x()) << " " << CGAL::to_double(it->second.y()) << " 0\n"; + obj << "l " << vi++; + obj << " " << vi++ << "\n"; + } + obj << std::flush; +#endif + + auto is_parallel_2degree_node = [](decltype(G)::vertex_const_iterator vit) { + auto it = vit->second.begin(); + auto& P = *it++; + auto& Q = *it++; + auto e1 = P - vit->first; + auto e2 = vit->first - Q; + if (e1.squared_length() == 0 || e2.squared_length() == 0) { + // @todo why does this happen? + return false; + } + e1 /= std::sqrt(CGAL::to_double(e1.squared_length())); + e2 /= std::sqrt(CGAL::to_double(e2.squared_length())); + return std::abs(CGAL::to_double(e1 * e2)) > (1. - 1.e-5); + }; + + { + // Remove colinear vertices + size_t n_vertices_removed = 0; + for (auto vit = G.vertices_begin(); vit != G.vertices_end();) { + if (vit->second.size() == 2) { + if (is_parallel_2degree_node(vit)) { + vit = G.eliminate_vertex(vit); + ++n_vertices_removed; + } else { + ++vit; + } + } else { + ++vit; + } + } + // std::cout << "Eliminated " << n_vertices_removed << " vertices" << std::endl; + } + + // Ortho edge slide + { + std::list> edges_to_remove, edges_to_insert; + + for (auto vit = G.vertices_begin(); vit != G.vertices_end(); ++vit) { + auto& selected = vit->first; + + if (vit->second.size() >= 3) { + for (auto vjt = vit->second.begin(); vjt != vit->second.end(); ++vjt) { + auto& neighbour = *vjt; + bool processed_neighbour = false; + + if (G.find(neighbour)->second.size() == 2 && !is_parallel_2degree_node(G.find(neighbour))) { + auto vkt = G.find(neighbour)->second.begin(); + if (selected == *vkt) { + vkt++; + } + auto& other = *vkt; + + if ((other - neighbour).squared_length() < (neighbour - selected).squared_length()) { + continue; + } + + auto incoming = CGAL::Ray_2(other, neighbour - other); + boost::optional> closest_neighbouring_segment; + boost::optional> closest_intersection_point; + K::FT sq_distance_along_ray = std::numeric_limits::infinity(); + + for (auto vlt = vit->second.begin(); vlt != vit->second.end(); ++vlt) { + auto& other_neighbour = *vlt; + if (vlt != vjt) { + CGAL::Segment_2 neighbouring_segment(selected, other_neighbour); + auto x = CGAL::intersection(incoming, neighbouring_segment); + if (x) { + if (auto* xp = variant_get>(&*x)) { + auto dist = ((*xp) - other).squared_length(); + if (dist < sq_distance_along_ray) { + closest_neighbouring_segment = neighbouring_segment; + closest_intersection_point = *xp; + sq_distance_along_ray = dist; + } + } + } + } + } + + if (closest_intersection_point && closest_neighbouring_segment) { + edges_to_remove.push_back(*closest_neighbouring_segment); + edges_to_remove.push_back({ neighbour, selected }); + edges_to_insert.push_back({ closest_neighbouring_segment->source(), *closest_intersection_point }); + edges_to_insert.push_back({ closest_neighbouring_segment->target(), *closest_intersection_point }); + edges_to_insert.push_back({ neighbour, *closest_intersection_point }); + + processed_neighbour = true; + } + } + if (processed_neighbour) { + // Only one neigbour is processed because otherwise we obtain intersections + break; + } + } + } + } + + for (auto& s : edges_to_remove) { + G.remove_edge(s.source(), s.target()); + } + + + for (auto& s : edges_to_insert) { + G.insert(s.source(), s.target()); + } + +#ifdef SVGFILL_DEBUG + obj << "o network_3\n"; + for (auto it = G.edges_begin(); it != G.edges_end(); ++it) { + obj << "v " << CGAL::to_double(it->first.x()) << " " << CGAL::to_double(it->first.y()) << " 0\n"; + obj << "v " << CGAL::to_double(it->second.x()) << " " << CGAL::to_double(it->second.y()) << " 0\n"; + obj << "l " << vi++; + obj << " " << vi++ << "\n"; + } +#endif + } + + // Now plot the edges on an arrangement in order to find planar cycles + // and merge the corridor-halves with their neighbouring input polygon + + Arrangement_2 arr; + + for (auto it = G.edges_begin(); it != G.edges_end(); ++it) { + if (it->first == it->second) { + continue; + } + CGAL::insert(arr, Segment_2(it->first, it->second)); + } + + std::list> move_ops; + std::list> edge_ops; + + for (auto it = G.vertices_begin(); it != G.vertices_end(); ++it) { + if (it->second.size() == 1) { + auto& M = it->first; + + decltype(midpoint_to_segment)::mapped_type* q = nullptr; + + if (midpoint_to_segment.find(M) == midpoint_to_segment.end()) { + typename K::FT min_sq_distance = std::numeric_limits::infinity(); + for (auto& pa : midpoint_to_segment) { + if (CGAL::squared_distance(pa.first, M) < min_sq_distance) { + q = &pa.second; + min_sq_distance = CGAL::squared_distance(pa.first, M); + } + } + } else { + q = &midpoint_to_segment[M]; + } + + if (q == nullptr) { + continue; + } + + bool handled_as_graph_path = false; + + // distance from unioned - shoot ray? + if (segment_to_input_facet[*q].size() == 2) { + for (auto& bnd : inner_offset) { + // if point M is contained in bnd interior: + if (bnd.has_on_bounded_side(M)) { + auto& incoming = *it->second.begin(); + // create ray incoming -> M + CGAL::Ray_2 ray(incoming, M - incoming); + // intersect ray with boundary + boost::optional> closest_segment; + boost::optional> closest_intersection_point; + K::FT sq_distance_along_ray = std::numeric_limits::infinity(); + for (auto jt = bnd.edges_begin(); jt != bnd.edges_end(); ++jt) { + const auto& seg = *jt; + auto x = CGAL::intersection(ray, seg); + if (x) { + if (auto* xp = variant_get>(&*x)) { + auto dist = ((*xp) - M).squared_length(); + if (dist < sq_distance_along_ray) { + closest_segment = seg; + closest_intersection_point = *xp; + sq_distance_along_ray = dist; + } + } + } + } + + if (closest_intersection_point) { + Graph2D GGG(bnd); + GGG.refine(*GGG.query(*closest_intersection_point, 0.01), *closest_intersection_point); + + std::array>, 2> input_points = { { {}, {} } }; + + size_t i = 0; + for (auto& fac : segment_to_input_facet[*q]) { + for (auto it = fac->vertices_begin(); it != fac->vertices_end(); ++it) { + auto seg = GGG.query(*it, 0.01); + if (seg) { + if (seg->source() != *it && seg->target() != *it) { + GGG.refine(*seg, *it); + } + input_points[i].insert(*it); + } + } + i++; + } + + auto a1 = GGG.shorted_path(*closest_intersection_point, input_points[0]); + auto a2 = GGG.shorted_path(*closest_intersection_point, input_points[1]); + + if (!a1.empty() && !a2.empty()) { + + if (M != *closest_intersection_point) { + edge_ops.push_front({ M, *closest_intersection_point }); + } + for (auto it = a1.begin(); it != a1.end() && std::next(it) != a1.end(); ++it) { + edge_ops.push_front({ *it, *(std::next(it)) }); + } + for (auto it = a2.begin(); it != a2.end() && std::next(it) != a2.end(); ++it) { + edge_ops.push_front({ *it, *(std::next(it)) }); + } + + handled_as_graph_path = true; + break; + } + } + } + } + } + + if (!handled_as_graph_path) { + // else we choose to map point to the midpoint of the found two close points. + + auto pq = close_input_point(q->first); + auto pr = close_input_point(q->second); + + auto Q = pq.second; + auto R = pr.second; + + if (Q == R) { + // this can happen in situations like this: + // where Q and R are co-located, because the point R' is further away + // in that case M + M-Q should gives is x that we then project onto the + // input boundary + // + // + // ┌───────┐ + // │ │ + // │ │ + // │ │ + // └───────o <--Q,R + // + // ────────o <--M + // + // ┌───────x───────────────o <---R' + // │ │ + // │ │ + // │ │ + // │ │ + // └───────────────────────┘ + + // @todo is this projection actually necessary or is it already 'exact enough'? + R = project_input_point(M + (M - Q)).second; + } + + auto avg = CGAL::ORIGIN + ((Q - CGAL::ORIGIN) + (R - CGAL::ORIGIN)) / 2; + + move_ops.push_front({ M, avg }); + edge_ops.push_front({ avg, Q }); + edge_ops.push_front({ avg, R }); + + } + } + } + +#ifdef SVGFILL_DEBUG + obj << "o network_4\n"; +#endif + + // note that we actually don't move but draw an edge + for (auto& pq : move_ops) { + if (pq.first == pq.second) { + continue; + } + CGAL::insert(arr, Segment_2(pq.first, pq.second)); + +#ifdef SVGFILL_DEBUG + obj << "v " << CGAL::to_double(pq.first.x()) << " " << CGAL::to_double(pq.first.y()) << " 0\n"; + obj << "v " << CGAL::to_double(pq.second.x()) << " " << CGAL::to_double(pq.second.y()) << " 0\n"; + obj << "l " << vi++; + obj << " " << vi++ << "\n"; +#endif + } + + + for (auto& pq : edge_ops) { + if (pq.first == pq.second) { + continue; + } + CGAL::insert(arr, Segment_2(pq.first, pq.second)); + +#ifdef SVGFILL_DEBUG + obj << "v " << CGAL::to_double(pq.first.x()) << " " << CGAL::to_double(pq.first.y()) << " 0\n"; + obj << "v " << CGAL::to_double(pq.second.x()) << " " << CGAL::to_double(pq.second.y()) << " 0\n"; + obj << "l " << vi++; + obj << " " << vi++ << "\n"; +#endif + } + + // Plot input polygons + for (auto& poly : input_polygons) { + for (size_t i = 0; i != poly.size(); ++i) { + auto j = (i + 1) % poly.size(); + if (poly.vertex(i) == poly.vertex(j)) { + continue; + } + CGAL::insert(arr, Segment_2(poly.vertex(i), poly.vertex(j))); + } + } + + +#ifdef SVGFILL_DEBUG + { + obj << "o arrangement_1\n"; + for (auto it = arr.edges_begin(); it != arr.edges_end(); ++it) { + auto& p = it->source()->point(); + auto& q = it->target()->point(); + obj << "v " << CGAL::to_double(p.x()) << " " << CGAL::to_double(p.y()) << " 0\n"; + obj << "v " << CGAL::to_double(q.x()) << " " << CGAL::to_double(q.y()) << " 0\n"; + obj << "l " << vi++; + obj << " " << vi++ << "\n"; + } + } +#endif + + /* { + // debug, add outer bounds so that we can plot the face for any remaining edges + auto poly = unioned_polygons.front().outer_boundary(); + for (size_t i = 0; i != poly.size(); ++i) { + auto j = (i + 1) % poly.size(); + CGAL::insert(arr, Segment_2(poly.vertex(i), poly.vertex(j))); + } + } */ + + // Now loop over the arrangement faces, when a face coincides with a point on the + // corridor network we know it needs to be joined with an input polygon. In that + // case the edges need to be eliminated that correspond to original geometry. + + size_t face_id = 0; + std::set edges_to_remove; + + for (auto it = arr.faces_begin(); it != arr.faces_end(); ++it) { + if (it->is_unbounded()) { + continue; + } + bool is_corridor = false; + { + auto curr = it->outer_ccb(); + do { + auto& p = curr++->source()->point(); + if (G.find(p) != G.vertices_end()) { + is_corridor = true; + break; + } + } while (curr != it->outer_ccb()); + + for (auto jt = it->inner_ccbs_begin(); jt != it->inner_ccbs_end(); ++jt) { + curr = *jt; + do { + auto& p = curr++->source()->point(); + if (G.find(p) != G.vertices_end()) { + is_corridor = true; + break; + } + } while (curr != *jt); + if (is_corridor) { + break; + } + } + } + + if (is_corridor) { + auto curr = it->outer_ccb(); + do { + auto& p = curr->source()->point(); + auto& q = curr->target()->point(); + auto center = CGAL::ORIGIN + (((p - CGAL::ORIGIN) + (q - CGAL::ORIGIN)) / 2); + auto p1index = input_polygon_boundary(center); + const bool on_orig_bound = p1index != input_polygons.end(); + if (on_orig_bound) { + if (edges_to_remove.find(curr->twin()) != edges_to_remove.end()) { + // std::cerr << "Warning trying to delete edge twice" << std::endl; + } else { + edges_to_remove.insert(curr); + } + } + curr++; + } while (curr != it->outer_ccb()); + + for (auto jt = it->inner_ccbs_begin(); jt != it->inner_ccbs_end(); ++jt) { + curr = *jt; + do { + auto& p = curr->source()->point(); + auto& q = curr->target()->point(); + auto center = CGAL::ORIGIN + (((p - CGAL::ORIGIN) + (q - CGAL::ORIGIN)) / 2); + auto p1index = input_polygon_boundary(center); + const bool on_orig_bound = p1index != input_polygons.end(); + if (on_orig_bound) { + if (edges_to_remove.find(curr->twin()) != edges_to_remove.end()) { + // std::cerr << "Warning trying to delete edge twice" << std::endl; + } else { + edges_to_remove.insert(curr); + } + } + curr++; + } while (curr != *jt); + if (is_corridor) { + break; + } + } + } + +#ifdef SVGFILL_DEBUG + write_polygon_to_svg(svg, circ_to_poly(it->outer_ccb())); + + obj << "o " << "face_"; + if (is_corridor) { + obj << "corri_"; + } + obj << face_id++ << "\n"; + + std::ostringstream oss; + + { + auto vv = vi; + auto curr = it->outer_ccb(); + do { + auto& p = curr->source()->point(); + obj << "v " << CGAL::to_double(p.x()) << " " << CGAL::to_double(p.y()) << " 0\n"; + oss << "l " << vi++; + ++curr; + if (curr == it->outer_ccb()) { + oss << " " << vv << "\n"; + } else { + oss << " " << vi << "\n"; + } + } while (curr != it->outer_ccb()); + } + + for (auto jt = it->inner_ccbs_begin(); jt != it->inner_ccbs_end(); ++jt) { + auto vv = vi; + auto curr = *jt; + do { + auto& p = curr->source()->point(); + obj << "v " << CGAL::to_double(p.x()) << " " << CGAL::to_double(p.y()) << " 0\n"; + oss << "l " << vi++; + ++curr; + if (curr == *jt) { + oss << " " << vv << "\n"; + } else { + oss << " " << vi << "\n"; + } + } while (curr != *jt); + } + + obj << oss.str(); +#endif + } + + size_t remove_id = 0; + for (auto& e : edges_to_remove) { +#ifdef SVGFILL_DEBUG + obj << "o " << "remove_" << remove_id++ << "\n"; + { + auto& p = e->source()->point(); + obj << "v " << CGAL::to_double(p.x()) << " " << CGAL::to_double(p.y()) << " 0\n"; + } + { + auto& p = e->target()->point(); + obj << "v " << CGAL::to_double(p.x()) << " " << CGAL::to_double(p.y()) << " 0\n"; + } + obj << "l " << vi++; + obj << " " << vi++ << std::endl; +#endif + CGAL::remove_edge(arr, e); + } + + for (auto it = arr.faces_begin(); it != arr.faces_end(); ++it) { + if (it->is_unbounded()) { + continue; + } + + output_polygons.push_back(circ_to_poly(it->outer_ccb())); + +#ifdef SVGFILL_DEBUG + write_polygon_to_svg(svg, circ_to_poly(it->outer_ccb())); + + obj << "o " << "merged_face_"; + obj << face_id++ << "\n"; + + std::ostringstream oss; + + { + auto vv = vi; + auto curr = it->outer_ccb(); + do { + auto& p = curr->source()->point(); + obj << "v " << CGAL::to_double(p.x()) << " " << CGAL::to_double(p.y()) << " 0\n"; + oss << "l " << vi++; + ++curr; + if (curr == it->outer_ccb()) { + oss << " " << vv << "\n"; + } else { + oss << " " << vi << "\n"; + } + } while (curr != it->outer_ccb()); + } + + for (auto jt = it->inner_ccbs_begin(); jt != it->inner_ccbs_end(); ++jt) { + auto vv = vi; + auto curr = *jt; + do { + auto& p = curr->source()->point(); + obj << "v " << CGAL::to_double(p.x()) << " " << CGAL::to_double(p.y()) << " 0\n"; + oss << "l " << vi++; + ++curr; + if (curr == *jt) { + oss << " " << vv << "\n"; + } else { + oss << " " << vi << "\n"; + } + } while (curr != *jt); + } + + obj << oss.str(); +#endif + } + +#ifdef SVGFILL_DEBUG + svg << "\n"; +#endif +} + +#ifndef SVGFILL_MAIN + +bool svgfill::arrange_polygons(const std::vector& polygons, std::vector& arranged) +{ + std::vector cgal_polygons, cgal_polygons_out; + std::transform(polygons.begin(), polygons.end(), std::back_inserter(cgal_polygons), [](auto& poly) { + Polygon_2 result; + std::transform(poly.boundary.begin(), poly.boundary.end(), std::back_inserter(result), [](auto& p) { + return Point_2(p[0], p[1]); + }); + return result; + }); + arrange_cgal_polygons(cgal_polygons, cgal_polygons_out); + std::transform(cgal_polygons_out.begin(), cgal_polygons_out.end(), std::back_inserter(arranged), [](auto& poly) { + svgfill::polygon_2 result; + std::transform(poly.begin(), poly.end(), std::back_inserter(result.boundary), [](auto& pt) { + return svgfill::point_2{ + CGAL::to_double(pt.cartesian(0)), + CGAL::to_double(pt.cartesian(1)), + }; + }); + return result; + }); + return true; +} + +#else + +template +Polygon_2 create_rectangle(T x_min, T y_min, T x_max, T y_max) { + Polygon_2 rectangle; + rectangle.push_back(Point_2(x_min, y_min)); + rectangle.push_back(Point_2(x_max, y_min)); + rectangle.push_back(Point_2(x_max, y_max)); + rectangle.push_back(Point_2(x_min, y_max)); + return rectangle; +} + +#include + +int main(int argc, char** argv) { + std::vector input_polygons, output; + + if (argc == 2) { + using json = nlohmann::json; + std::ifstream file(argv[1]); + json jsonData; + file >> jsonData; + size_t i = 0; + for (const auto& item : jsonData.items()) { + std::cout << "i " << i << std::endl; + i++; + input_polygons.clear(); + const auto& polygonsData = item.value(); + for (const auto& polygonData : polygonsData) { + input_polygons.emplace_back(); + for (const auto& pointData : polygonData) { + double x = pointData[0]; + double y = pointData[1]; + input_polygons.back().push_back(CGAL::Point_2(x, y)); + } + } + arrange_cgal_polygons(input_polygons, output); + break; + } + return 0; + } else { + Polygon_2 rect1 = create_rectangle(0, 0, 2, 1); + Polygon_2 rect2 = create_rectangle(2.2, 0, 4, 1.1); + Polygon_2 rect3 = create_rectangle(0, 1.2, 2, 4); + Polygon_2 rect4 = create_rectangle(2.2, 1.2, 6, 4); + Polygon_2 rect5 = create_rectangle(4.2, 0, 6, 1.1); + + input_polygons = { rect1, rect2, rect3, rect4, rect5 }; + } + arrange_cgal_polygons(input_polygons, output); + + return 0; +} + +#endif diff --git a/src/svgfill/src/graph_2d.h b/src/svgfill/src/graph_2d.h new file mode 100644 index 0000000000..aaaa059b4e --- /dev/null +++ b/src/svgfill/src/graph_2d.h @@ -0,0 +1,509 @@ +#ifndef GRAPH_2D_H +#define GRAPH_2D_H + +#ifdef SVGFILL_DEBUG +#include +#endif + +template +class Graph2D { +public: + typedef typename Kernel::Point_2 Point_2; + typedef std::pair Edge; + + Graph2D() {} + + Graph2D(const std::map>& input_adjacency_list) { + for (const auto& kv : input_adjacency_list) { + const Point_2& u = kv.first; + const std::vector& neighbors = kv.second; + for (const Point_2& v : neighbors) { + if (u != v) { // no self-edges + adjacency_list[u].insert(v); + adjacency_list[v].insert(u); // Since it's undirected + } + } + } + assert_symmetric(); + } + + Graph2D(const CGAL::Polygon_2& loop) { + for (auto it = loop.vertices_begin(); it != loop.vertices_end(); ++it) { + auto next_it = std::next(it); + if (next_it == loop.vertices_end()) { + next_it = loop.vertices_begin(); + } + adjacency_list[*it].insert(*next_it); + adjacency_list[*next_it].insert(*it); + } + } + + bool is_loop() const { + if (adjacency_list.size() < 3) { + return false; + } + for (const auto& p : adjacency_list) { + if (p.second.size() != 2) { + return false; + } + } + return true; + } + + auto find(const Point_2& p) { + return adjacency_list.find(p); + } + + boost::optional< CGAL::Segment_2 > query(const Point_2& p, typename Kernel::FT eps) { + boost::optional< CGAL::Segment_2 > closest_segment; + typename Kernel::FT closest_distance = std::numeric_limits::infinity(); + for (auto& p1 : adjacency_list) { + for (auto& p2 : p1.second) { + CGAL::Segment_2seg(p1.first, p2); + auto dist = CGAL::squared_distance(p, seg); + if (dist < eps * eps && dist < closest_distance) { + closest_distance = dist; + closest_segment = seg; + } + } + } + return closest_segment; + } + + void refine(const CGAL::Segment_2& seg, const Point_2& p) { + remove_edge(seg.source(), seg.target()); + insert(seg.source(), p); + insert(p, seg.target()); + } + + std::vector shorted_path(const Point_2& start, const Point_2& goal) const { + auto& adj = adjacency_list; + if (adj.count(start) == 0 || adj.count(goal) == 0) return {}; + + std::map predecessor; + std::queue q; + + // seed BFS + predecessor[start] = start; // mark start as "seen" + q.push(start); + + // BFS + bool found = false; + while (!q.empty() && !found) { + Point_2 u = q.front(); q.pop(); + for (auto& v : adj.at(u)) { + // if v has no predecessor yet, it's unseen + if (!predecessor.count(v)) { + predecessor[v] = u; + q.push(v); + if (v == goal) { found = true; break; } + } + } + } + + if (!found) return {}; + + // reconstruct path + std::vector path; + for (Point_2 cur = goal; cur != start; cur = predecessor[cur]) + path.push_back(cur); + path.push_back(start); + std::reverse(path.begin(), path.end()); + return path; + } + + + std::vector shorted_path(const Point_2& start, const std::set& goal) const { + auto& adj = adjacency_list; + if (adj.count(start) == 0) return {}; + + std::map predecessor; + std::queue q; + + // seed BFS + predecessor[start] = start; // mark start as "seen" + q.push(start); + + Point_2 used_goal; + + // BFS + bool found = false; + while (!q.empty() && !found) { + Point_2 u = q.front(); q.pop(); + for (auto& v : adj.at(u)) { + // if v has no predecessor yet, it's unseen + if (!predecessor.count(v)) { + predecessor[v] = u; + q.push(v); + if (goal.find(v) != goal.end()) { + found = true; + used_goal = v; + break; + } + } + } + } + + if (!found) return {}; + + // reconstruct path + std::vector path; + for (Point_2 cur = used_goal; cur != start; cur = predecessor[cur]) + path.push_back(cur); + path.push_back(start); + std::reverse(path.begin(), path.end()); + return path; + } + + + void move(const Point_2& from, const Point_2& to) { + // @todo should check for intersections? + auto it = adjacency_list.find(from); + if (it != adjacency_list.end()) { + auto neighbours = it->second; + for (auto& n : neighbours) { + adjacency_list[n].erase(from); + adjacency_list[n].insert(to); + } + adjacency_list.erase(it); + adjacency_list.insert({ to, neighbours }); + } + } + + bool is_valid() const { + typedef CGAL::Box_intersection_d::Box_with_handle_d Box; + std::vector boxes; + std::vector> segments; + for (const auto& p : adjacency_list) { + for (const auto& q : p.second) { + if (p.first < q) { + segments.emplace_back(p.first, q); + } + } + } + for (auto it = segments.begin(); it != segments.end(); ++it) { + boxes.emplace_back(it->bbox(), std::distance(segments.begin(), it)); + } + bool any = false; + CGAL::box_self_intersection_d(boxes.begin(), boxes.end(), [this, &segments, &any](const Box& a, const Box& b) { + auto& seg1 = segments[a.handle()]; + auto& seg2 = segments[b.handle()]; + // Skip topologically connected segments + if (seg1.source() == seg2.source() || seg1.source() == seg2.target() || seg1.target() == seg2.source() || seg1.target() == seg2.target()) { + return; + } + if (CGAL::do_intersect(seg1, seg2)) { + any = true; + } + }); + return any; + } + + // Eliminates a vertex with exactly two neighbors by connecting its neighbors + typename std::map>::iterator eliminate_vertex(typename std::map>::iterator it) { + if (it == adjacency_list.end()) { + // Vertex not found + return adjacency_list.end(); + } + const std::set& neighbors = it->second; + if (neighbors.size() != 2) { + // Not exactly two neighbors + return adjacency_list.end(); + } + // Get the two neighbors + auto neighbor_it = neighbors.begin(); + auto u = *neighbor_it++; + auto w = *neighbor_it; + auto v = it->first; + + // Remove all edge between v and u + adjacency_list[u].erase(v); + adjacency_list[v].erase(u); + + // Remove all edge between v and w + adjacency_list[w].erase(v); + adjacency_list[v].erase(w); + + // Add edge between u and w + adjacency_list[u].insert(w); + adjacency_list[w].insert(u); + + // Remove v from adjacency_list + auto jt = adjacency_list.erase(it); + + assert_symmetric(); + + return jt; + } + + Graph2D weld_vertices() const { + std::set points; + for (auto& p : adjacency_list) { + points.insert(p.first); + for (auto& q : p.second) { + points.insert(q); + } + } + + using It = typename std::set::iterator; + using Box = CGAL::Box_intersection_d::Box_with_handle_d; + + std::vector boxes; + for (auto it = points.begin(); it != points.end(); ++it) { + constexpr double offset = 1.e-3; + auto b = it->bbox(); + boxes.emplace_back( + CGAL::Bbox_2(b.xmin() - offset, b.ymin() - offset, b.xmax() + offset, b.ymax() + offset), + &*it + ); + } + + std::vector> overlaps; + + CGAL::box_self_intersection_d(boxes.begin(), boxes.end(), [&overlaps](const Box& a, const Box& b) { + overlaps.emplace_back(a.handle(), b.handle()); + }); + + std::map> input_adjacency_list; + + { + std::map> adj; + for (const auto& edge : overlaps) { + adj[edge.first].push_back(edge.second); + adj[edge.second].push_back(edge.first); + } + for (auto& p : points) { + adj[&p]; + } + + std::map visited; + std::vector> connected_components; + + for (auto& p : adj) { + if (!visited[p.first]) { + connected_components.emplace_back(); + + std::stack stack; + stack.push(p.first); + visited[p.first] = true; + + while (!stack.empty()) { + auto u = stack.top(); + stack.pop(); + connected_components.back().push_back(u); + + for (auto& neighbor : adj[u]) { + if (!visited[neighbor]) { + visited[neighbor] = true; + stack.push(neighbor); + } + } + } + } + } + + std::map mapping; + + for (auto& comp : connected_components) { + Point_2 avg(0, 0); + for (auto& c : comp) { + avg += (*c - CGAL::ORIGIN); + } + avg = CGAL::ORIGIN + ((avg - CGAL::ORIGIN) / comp.size()); + + for (auto& c : comp) { + mapping[*c] = avg; + } + } + + for (auto& comp : connected_components) { + for (auto& c : comp) { + const auto& C = mapping[*c]; + for (auto& n : adjacency_list.find(*c)->second) { + const auto& N = mapping[n]; + if (C != N) { + if (std::find(input_adjacency_list[C].begin(), input_adjacency_list[C].end(), N) == input_adjacency_list[C].end()) { + input_adjacency_list[C].push_back(N); + } + } + } + } + } + } + + return Graph2D(input_adjacency_list); + } + + void assert_symmetric() { +#ifdef SVGFILL_DEBUG +#if 0 + for (auto& p : adjacency_list) { + if (p.second.find(p.first) != p.second.end()) { + std::cout << "!! " << p.first << " self-edge" << std::endl; + throw std::runtime_error("self-edge"); + } + } + nlohmann::json json_obj = nlohmann::json::array(); + for (auto& p : adjacency_list) { + if (p.second.size() == 0) { + continue; + } + + nlohmann::json pair = nlohmann::json::array(); + nlohmann::json coord = nlohmann::json::array(); + nlohmann::json values = nlohmann::json::array(); + coord.push_back( + CGAL::to_double(p.first.x()) + ); + coord.push_back( + CGAL::to_double(p.first.y()) + ); + pair.push_back(coord); + for (auto& q : p.second) { + auto& r = adjacency_list[q]; + for (auto& s : r) { + nlohmann::json coord = nlohmann::json::array(); + coord.push_back( + CGAL::to_double(s.x()) + ); + coord.push_back( + CGAL::to_double(s.y()) + ); + values.push_back(coord); + } + if (r.find(p.first) == r.end()) { + for (auto& s : r) { + std::cout << " " << s << std::endl; + } + std::cout << "!! " << p.first << " not found in neighbours of " << q << std::endl; + throw std::runtime_error("internal error"); + } + } + pair.push_back(values); + json_obj.push_back( + pair + ); + } + + static int fff = 0; + std::ofstream file("graph_" + std::to_string(fff++) + ".json"); + file << json_obj.dump(2); +#endif +#endif + } + + void remove_edge(const Point_2& u, const Point_2& v) { + adjacency_list[u].erase(v); + adjacency_list[v].erase(u); + assert_symmetric(); + } + + void insert(const Point_2& u, const Point_2& v) { + adjacency_list[u].insert(v); + adjacency_list[v].insert(u); + assert_symmetric(); + } + + // Iterators over vertices + typedef typename std::map>::const_iterator vertex_const_iterator; + typedef typename std::map>::iterator vertex_iterator; + + vertex_const_iterator vertices_begin() const { + return adjacency_list.cbegin(); + } + + vertex_const_iterator vertices_end() const { + return adjacency_list.cend(); + } + + vertex_iterator vertices_begin() { + return adjacency_list.begin(); + } + + vertex_iterator vertices_end() { + return adjacency_list.end(); + } + + // Edge iterator class + class EdgeIterator { + public: + typedef std::forward_iterator_tag iterator_category; + typedef Edge value_type; + typedef ptrdiff_t difference_type; + typedef const Edge* pointer; + typedef const Edge& reference; + + EdgeIterator() : outer_it_(), inner_it_(), graph_(nullptr) {} + EdgeIterator(const Graph2D* graph, typename std::map>::const_iterator outer_it) + : outer_it_(outer_it), graph_(graph) { + if (outer_it_ != graph_->adjacency_list.end()) { + inner_it_ = outer_it_->second.begin(); + advance_to_valid(); + } + } + + reference operator*() const { + current_edge_ = Edge(outer_it_->first, *inner_it_); + return current_edge_; + } + + pointer operator->() const { + current_edge_ = Edge(outer_it_->first, *inner_it_); + return ¤t_edge_; + } + + EdgeIterator& operator++() { + ++inner_it_; + advance_to_valid(); + return *this; + } + + EdgeIterator operator++(int) { + EdgeIterator tmp = *this; + ++(*this); + return tmp; + } + + bool operator==(const EdgeIterator& other) const { + return outer_it_ == other.outer_it_ && (outer_it_ == graph_->adjacency_list.end() || inner_it_ == other.inner_it_); + } + + bool operator!=(const EdgeIterator& other) const { + return !(*this == other); + } + + private: + void advance_to_valid() { + while (outer_it_ != graph_->adjacency_list.end()) { + while (inner_it_ != outer_it_->second.end() && *inner_it_ < outer_it_->first) { + ++inner_it_; + } + if (inner_it_ != outer_it_->second.end()) { + break; + } + ++outer_it_; + if (outer_it_ != graph_->adjacency_list.end()) { + inner_it_ = outer_it_->second.begin(); + } + } + } + + mutable Edge current_edge_; + typename std::map>::const_iterator outer_it_; + typename std::set::const_iterator inner_it_; + const Graph2D* graph_; + }; + + EdgeIterator edges_begin() const { + return EdgeIterator(this, adjacency_list.begin()); + } + + EdgeIterator edges_end() const { + return EdgeIterator(this, adjacency_list.end()); + } + +private: + std::map> adjacency_list; +}; + +#endif diff --git a/src/svgfill/src/main.cpp b/src/svgfill/src/main.cpp new file mode 100644 index 0000000000..93ecfb6462 --- /dev/null +++ b/src/svgfill/src/main.cpp @@ -0,0 +1,127 @@ +/**************************************************************************** + * SVG fill * + * * + * Copyright(C) 2020 AECgeeks and Bimforce * + * * + * This program 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. * + * * + * This program 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 this program; if not, write to the Free Software Foundation, * + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ****************************************************************************/ + +#include "svgfill.h" +#include "progress.h" + +#include +#include +#include + +#include +#include +#include +#include +#include + +int main(int argc, char** argv) { + bool valid_command_line = false; + bool random_color = false; + double eps = 1.e-5; + boost::optional class_name; + + std::vector flags; + std::vector args; + svgfill::solver s = svgfill::FILTERED_CARTESIAN_QUOTIENT; + std::map solver_mapping { + {"cartesian_double", svgfill::CARTESIAN_DOUBLE}, + {"cartesian_quotient", svgfill::CARTESIAN_QUOTIENT}, + {"filtered_cartesian_quotient", svgfill::FILTERED_CARTESIAN_QUOTIENT}, + {"exact_predicates", svgfill::EXACT_PREDICATES}, + {"exact_constructions", svgfill::EXACT_CONSTRUCTIONS}, + }; + progress_bar::style progress_style = progress_bar::BAR; + + for (int i = 1; i < argc; ++i) { + std::string a = argv[i]; + if (boost::starts_with(a, "-")) { + flags.push_back(a); + } + else { + args.push_back(a); + } + } + std::string fn, ofn; + + if (args.size() == 2) { + fn = args[0]; + ofn = args[1]; + valid_command_line = true; + } + + for (auto& f : flags) { + if (f == "--random-color") { + random_color = true; + } + else if (f == "-q") { + progress_style = progress_bar::DOTS; + } + else if (boost::starts_with(f, "--class=")) { + class_name = f.substr(strlen("--class=")); + } + else if (boost::starts_with(f, "--solver=")) { + std::string solver_str = f.substr(strlen("--solver=")); + auto it = solver_mapping.find(solver_str); + if (it == solver_mapping.end()) { + valid_command_line = false; + } + else { + s = it->second; + } + } + else if (boost::starts_with(f, "--eps=")) { + std::string eps_str = f.substr(strlen("--eps=")); + eps = boost::lexical_cast(eps_str); + } + else { + valid_command_line = false; + } + } + + if (!valid_command_line) { + std::cerr << "Usage: " << argv[0] << " [--random-color] [--class=...] " << std::endl; + return 1; + } + + std::vector> segments; + std::vector> polygons; + + progress_bar p(std::cout, progress_style); + application_progress ap({1., 10., 1.}, p); + std::function pfn = [&ap](float f) { ap(f); }; + + std::ifstream fs(fn.c_str()); + std::string data(std::istreambuf_iterator{fs}, {}); + fs.close(); + + if (!svgfill::svg_to_line_segments(data, class_name, segments)) { + return 1; + } + ap.finished(); + + if (!svgfill::line_segments_to_polygons(s, eps, segments, polygons, pfn)) { + return 1; + } + + ap.finished(); + + std::ofstream ofs(ofn.c_str()); + ofs << svgfill::polygons_to_svg(polygons, random_color); +} diff --git a/src/svgfill/src/progress.h b/src/svgfill/src/progress.h new file mode 100644 index 0000000000..daf54a3e59 --- /dev/null +++ b/src/svgfill/src/progress.h @@ -0,0 +1,122 @@ +/*************************************************************************** +/* * +/* Copyright 2021 AECgeeks * +/* * +/* Permission is hereby granted, free of charge, to any person obtaining a * +/* copy of this software and associated documentation files (the * +/* "Software"), to deal in the Software without restriction, including * +/* without limitation the rights to use, copy, modify, merge, publish, * +/* distribute, sublicense, and/or sell copies of the Software, and to * +/* permit persons to whom the Software is furnished to do so, subject to * +/* the following conditions: * +/* * +/* The above copyright notice and this permission notice shall be included * +/* in all copies or substantial portions of the Software. * +/* * +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * +/* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * +/* * +/***************************************************************************/ + +// A trivial C++ progress bar + +#ifndef PROGRESS_H +#define PROGRESS_H + +#include +#include +#include +#include +#include +#include + +class progress_bar { + std::ostream& s_; + float max_; + size_t width_; + size_t* last_emitted_p_ = nullptr; + +public: + enum style { + BAR, DOTS + }; + +private: + style style_; + +public: + progress_bar(std::ostream& s = std::cerr, style st = BAR, float max = 1., size_t width = 50) + : s_(s) + , max_(max) + , width_(st == BAR ? width : 100U) + , style_(st) + {} + + void operator()(size_t p) { + if (last_emitted_p_ && p <= *last_emitted_p_) { + return; + } + + p = p > width_ ? width_ : p; + if (style_ == BAR) { + s_ << "\r[" + std::string(p, '#') + std::string(width_ - p, ' ') + "]" << std::flush; + } else { + s_ << std::string(p - (last_emitted_p_ ? *last_emitted_p_ : 0U), '.') << std::flush; + } + + if (last_emitted_p_) { + *last_emitted_p_ = p; + } + else { + last_emitted_p_ = new size_t(p); + } + } + + void operator()(float p) { + (*this)((size_t) (p / max_ * width_)); + } + + ~progress_bar() { + delete last_emitted_p_; + } +}; + +class application_progress { + std::vector estimates_; + size_t phase_ = 0; + std::function callback_; + float total_; + +public: + void operator()(float p) { + auto progress = std::accumulate(estimates_.begin(), estimates_.begin() + phase_, 0.f); + progress += p * estimates_[phase_]; + callback_(progress / total_); + } + + application_progress(const std::vector& estimates, const std::function& callback) + : estimates_(estimates) + , callback_(callback) + { + total_ = std::accumulate(estimates_.begin(), estimates_.end(), 0.f); + (*this)(0.); + } + + void finished() { + ++phase_; + (*this)(0.); + } + + ~application_progress() { + phase_ = estimates_.size() - 2; + finished(); + } + +}; + +#endif \ No newline at end of file diff --git a/src/svgfill/src/svgfill.cpp b/src/svgfill/src/svgfill.cpp new file mode 100644 index 0000000000..8a2a1bb008 --- /dev/null +++ b/src/svgfill/src/svgfill.cpp @@ -0,0 +1,633 @@ +/**************************************************************************** + * SVG fill * + * * + * Copyright(C) 2020 AECgeeks and Bimforce * + * * + * This program 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. * + * * + * This program 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 this program; if not, write to the Free Software Foundation, * + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ****************************************************************************/ + +#include "svgfill.h" + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace svgpp; + +class Context +{ +private: + size_t depth_ = 0; + int enabled_at_ = -1; + svgfill::point_2 start_, xy_; + +public: + boost::optional class_name; + std::vector> segments; + + void on_enter_element(tag::element::any) + { + ++depth_; + } + + void on_enter_element(tag::element::g) + { + ++depth_; + if (enabled_at_ == -1 && !class_name.is_initialized()) { + enabled_at_ = depth_; + segments.emplace_back(); + } + } + + void on_exit_element() + { + if (depth_-- == enabled_at_) { + enabled_at_ = -1; + } + } + + template + void set(tag::attribute::id, Str const & s) { + } + + template + void set(tag::attribute::class_, Str const & s) { + if (enabled_at_ == -1 && class_name.is_initialized() && std::string(s.begin(), s.size()).find(*class_name) != std::string::npos) { + enabled_at_ = depth_; + segments.emplace_back(); + } + } + + void transform_matrix(const boost::array & matrix) + {} + + void path_move_to(double x, double y, tag::coordinate::absolute) + { + start_ = xy_ = { x, y }; + } + + void path_line_to(double x, double y, tag::coordinate::absolute) + { + if (enabled_at_ != -1) { + svgfill::point_2 next{ x, y }; + segments.back().push_back({ xy_, next }); + xy_ = next; + } + } + + void path_cubic_bezier_to( + double x1, double y1, + double x2, double y2, + double x, double y, + tag::coordinate::absolute) {} + + void path_quadratic_bezier_to( + double x1, double y1, + double x, double y, + tag::coordinate::absolute) {} + + void path_elliptical_arc_to( + double rx, double ry, double x_axis_rotation, + bool large_arc_flag, bool sweep_flag, + double x, double y, + tag::coordinate::absolute) {} + + void path_close_subpath() { + if (enabled_at_ != -1) { + segments.back().push_back({ xy_, start_ }); + } + } + + void path_exit() {} +}; + +typedef +boost::mpl::set< + // SVG Structural Elements + tag::element::svg, + tag::element::g, + // SVG Shape Elements + tag::element::circle, + tag::element::ellipse, + tag::element::line, + tag::element::path, + tag::element::polygon, + tag::element::polyline, + tag::element::rect +>::type processed_elements_t; + +// This cryptic code just merges predefined sequences traits::shapes_attributes_by_element +// and traits::viewport_attributes with tag::attribute::transform and tag::attribute::xlink::href +// attributes into single MPL sequence +typedef +boost::mpl::fold< + boost::mpl::protect< + traits::shapes_attributes_by_element + >, + boost::mpl::set< + tag::attribute::id, + tag::attribute::class_ + >::type, + boost::mpl::insert +>::type processed_attributes_t; + +bool svgfill::svg_to_line_segments(const std::string& data, const boost::optional& class_name, std::vector>& segments) +{ + Context context; + context.class_name = class_name; + + xmlDoc* doc = xmlReadMemory(data.c_str(), data.size(), nullptr, nullptr, 0); + xmlNode* elem = xmlDocGetRootElement(doc); + + try { + document_traversal< + processed_elements, + processed_attributes + >::load_document(elem, context); + } + catch (std::exception& e) { + std::cerr << e.what() << std::endl; + return false; + } + + segments = context.segments; + + return true; +} + +bool svgfill::line_segments_to_polygons(solver s, double eps, const std::vector>& segments, std::vector>& polygons) +{ + std::function fn = [](float f) {}; + return line_segments_to_polygons(s, eps, segments, polygons, fn); +} + +bool svgfill::svg_to_polygons(const std::string& data, const boost::optional& class_name, std::vector& polygons) { + Context context; + context.class_name = class_name; + xmlDoc* doc = xmlReadMemory(data.c_str(), data.size(), nullptr, nullptr, 0); + xmlNode* elem = xmlDocGetRootElement(doc); + + try { + document_traversal< + processed_elements, + processed_attributes + >::load_document(elem, context); + } catch (std::exception& e) { + std::cerr << e.what() << std::endl; + return false; + } + std::function fn = [](float f) {}; + std::vector> ps; + if (!line_segments_to_polygons(svgfill::EXACT_PREDICATES, 0., context.segments, ps, fn)) { + return false; + } + if (ps.empty()) { + return false; + } + for (auto& p : ps) { + polygons.insert(polygons.end(), p.begin(), p.end()); + } + return true; +} + +template +class cgal_arrangement : public svgfill::abstract_arrangement { + typedef CGAL::Arr_segment_traits_2 Traits_2; + typedef typename Traits_2::Point_2 Point_2; + typedef typename Traits_2::X_monotone_curve_2 Segment_2; + typedef CGAL::Arrangement_2 Arrangement_2; + typedef CGAL::Polygon_2 Polygon_2; + typedef CGAL::Polygon_with_holes_2 Polygon_wh_2; + typedef typename Arrangement_2::Inner_ccb_const_iterator Inner_ccb_const_iterator; + typedef typename Arrangement_2::Ccb_halfedge_const_circulator Ccb_halfedge_const_circulator; + typedef typename Arrangement_2::Halfedge_handle Halfedge_handle; + typedef typename Arrangement_2::Face_handle Face_handle; + + Polygon_2 circ_to_poly(Ccb_halfedge_const_circulator circ) + { + Polygon_2 poly; + auto curr = circ; + do { + if (poly.size() == 0 || (*(poly.end() - 1)) != curr->source()->point()) { + poly.push_back(curr->source()->point()); + } + } while (++curr != circ); + return poly; + } + + CGAL::Triangle_2 poly_to_triangle(const Polygon_2& poly) + { + auto n = std::distance(poly.vertices_begin(), poly.vertices_end()); + if (n != 3) { + throw std::runtime_error("Unexpected number of points in polygon"); + } + auto p = *poly.vertices_begin(); + auto q = *next(poly.vertices_begin(), 1); + auto r = *next(poly.vertices_begin(), 2); + return CGAL::Triangle_2(p, q, r); + } + + Polygon_wh_2 circ_to_poly(Ccb_halfedge_const_circulator circ, Inner_ccb_const_iterator a, Inner_ccb_const_iterator b) + { + Polygon_wh_2 poly(circ_to_poly(circ)); + for (auto it = a; it != b; ++it) { + poly.add_hole(circ_to_poly(*it)); + } + return poly; + } + + svgfill::point_2 create_point(const Point_2& pt) + { + return svgfill::point_2{ + CGAL::to_double(pt.cartesian(0)), + CGAL::to_double(pt.cartesian(1)), + }; + } + + void set_point_inside(const Polygon_wh_2& inpoly, svgfill::polygon_2& outpoly) + { + /* + std::cout << std::endl; + for (auto& p : inpoly.outer_boundary()) { + std::cout << " " << p; + } + std::cout << std::endl; + */ + // create Delaunay triangulation and return the centroid of the largest triangle. + CGAL::Polygon_triangulation_decomposition_2 decompositor; + std::list decom_polies; + decompositor(inpoly, std::back_inserter(decom_polies)); + decom_polies.sort([](const Polygon_2& a, const Polygon_2& b) { + return a.area() > b.area(); + }); + if (!decom_polies.empty()) { + const Polygon_2& largest = decom_polies.front(); + auto triangle = poly_to_triangle(largest); + /* + for (auto& p : decom_polies) { + std::cout << "a " << CGAL::to_double(poly_to_triangle(largest).area()) << std::endl; + } + std::cout << "triangle area " << CGAL::to_double(triangle.area()) << std::endl; + */ + outpoly.point_inside = create_point(CGAL::centroid(triangle)); + } + } + + Arrangement_2 arr; + float total, i; + +public: + bool operator()(double eps, const std::vector& segments, std::function& progress) { + i = 0; + total = segments.size() + segments.size() / 2; + + for (auto& l : segments) { + Point_2 a(l[0][0], l[0][1]); + Point_2 b(l[1][0], l[1][1]); + if (a == b) { + continue; + } + if (eps != 0.) { + auto ab = b - a; + ab /= std::sqrt(CGAL::to_double(ab.squared_length())); + // This appears to work better generally, slightly nudge the + // end points to make sure segments intersect. + a -= ab * eps; + b += ab * eps; + } + Segment_2 seg(a, b); + CGAL::insert(arr, seg); + + if (progress) { + progress(i++ / total); + } + } + + return true; + } + + void remove_duplicates(svgfill::loop_2& l) { + auto norm2 = [](auto& a, auto& b) { + auto dx = a[0] - b[0]; + auto dy = a[1] - b[1]; + return std::sqrt(dx * dx + dy * dy); + }; + + while (l.size() > 1 && l.front() == l.back()) { + l.pop_back(); + } + + if (l.size() > 1) { + auto it = l.begin(); + auto next_it = std::next(it); + + while (next_it != l.end()) { + if (norm2(*it, *next_it) < 1.e-8) { + next_it = l.erase(next_it); + // 'it' remains the same; 'next_it' now points to the next element + } else { + // Move both iterators forward + ++it; + ++next_it; + } + } + } + } + + bool write(std::vector& polygons, std::function& progress) { + std::vector ps; + ps.reserve(std::distance(arr.faces_begin(), arr.faces_end())); + + for (auto it = arr.faces_begin(); it != arr.faces_end(); ++it) { + const auto& f = *it; + if (!f.is_unbounded()) { + ps.push_back(circ_to_poly( + f.outer_ccb(), + f.inner_ccbs_begin(), + f.inner_ccbs_end() + )); + } + + if (progress) { + progress(i++ / total); + } + } + + // Sort polygons (only taking into account outer boundary) to have inner + // loops drawn over outer boundaries. In SVG draw order is defined by + // position in the tree. + // @nb we do now add the inner boundaries to the path as well. + /* + std::sort(ps.begin(), ps.end(), [](const Polygon_wh_2& a, const Polygon_wh_2& b) { + return a.outer_boundary().area() > b.outer_boundary().area(); + }); + */ + + polygons.reserve(ps.size()); + + + + std::transform(ps.begin(), ps.end(), std::back_inserter(polygons), [this, &progress](const Polygon_wh_2& p) { + svgfill::polygon_2 p2; + std::transform(p.outer_boundary().vertices_begin(), p.outer_boundary().vertices_end(), std::back_inserter(p2.boundary), [this](const Point_2& pt) { + return create_point(pt); + }); + + /* + static int NN = 0; + std::cout << NN++ << std::endl; + for (auto& p : p2.boundary) { + std::cout << std::setprecision(20) << p[0] << "," << p[1] << " "; + } + std::cout << std::endl; + */ + + // duplicates need to be removed after conversion from epeck to double + remove_duplicates(p2.boundary); + + /* + std::cout << "> " << std::endl; + for (auto& p : p2.boundary) { + std::cout << std::setprecision(20) << p[0] << "," << p[1] << " "; + } + std::cout << std::endl; + */ + + std::transform(p.holes_begin(), p.holes_end(), std::back_inserter(p2.inner_boundaries), [this](const Polygon_2& poly) { + svgfill::loop_2 lp; + std::transform(poly.vertices_begin(), poly.vertices_end(), std::back_inserter(lp), [this](const Point_2& pt) { + return create_point(pt); + }); + remove_duplicates(lp); + return lp; + }); + set_point_inside(p, p2); + + if (progress) { + progress(i++ / total); + } + + return p2; + }); + + return true; + } + + std::vector get_face_pairs() { + std::vector ps; + ps.reserve(arr.number_of_edges() * 2); + size_t n = 0; + + std::map face_to_bounded_index; + for (auto it = arr.faces_begin(); it != arr.faces_end(); ++it) { + if (!it->is_unbounded()) { + face_to_bounded_index[it] = face_to_bounded_index.size(); + } + } + + for (auto it = arr.edges_begin(); it != arr.edges_end(); ++it, ++n) { + auto v0 = it->source()->point(); + double v0x = CGAL::to_double(v0.cartesian(0)); + double v0y = CGAL::to_double(v0.cartesian(1)); + auto v1 = it->target()->point(); + double v1x = CGAL::to_double(v1.cartesian(0)); + double v1y = CGAL::to_double(v1.cartesian(1)); + double l = std::sqrt((v1x - v0x) * (v1x - v0x) + (v1y - v0y) * (v1y - v0y)); + // std::cout << n << " l " << l << std::endl; + bool emitted = false; + if (l > 1.) { + // std::cout << std::to_string(n) << " " << v0x << " " << v0y << std::endl; + // std::cout << std::string(std::to_string(n).size(), ' ') << " " << v1x << " " << v1y << std::endl; + + auto afit = face_to_bounded_index.find(it->face()); + auto bfit = face_to_bounded_index.find(it->twin()->face()); + + if (afit != face_to_bounded_index.end() && bfit != face_to_bounded_index.end()) { + ps.push_back(afit->second); + ps.push_back(bfit->second); + emitted = true; + } + } + + if (!emitted) { + ps.push_back(-1); + ps.push_back(-1); + } + } + return ps; + } + + void merge(const std::vector& edge_indices) { + if (edge_indices.empty()) { + return; + } + + std::list to_remove; + auto eit = edge_indices.begin(); + size_t n = 0; + for (auto it = arr.edges_begin(); it != arr.edges_end(); ++it, ++n) { + if (n == *eit) { + ++eit; + to_remove.push_back(it); + if (eit == edge_indices.end()) { + break; + } + } + } + + for (auto& h : to_remove) { + /* + auto v0 = h->source()->point(); + std::cout << CGAL::to_double(v0.cartesian(0)) << " " << CGAL::to_double(v0.cartesian(1)) << std::endl; + auto v1 = h->target()->point(); + std::cout << CGAL::to_double(v1.cartesian(0)) << " " << CGAL::to_double(v1.cartesian(1)) << std::endl << std::endl; + */ + arr.remove_edge(h); + } + } + + size_t num_edges() { + return arr.number_of_edges(); + } + + size_t num_faces() { + return arr.number_of_faces(); + } +}; + +bool svgfill::line_segments_to_polygons(solver s, double eps, const std::vector>& segment_groups, std::vector>& polygons, std::function& progress) +{ + bool b = false; + for (auto& segments : segment_groups) { + context ctx(s, eps, progress); + ctx.add(segments); + if (ctx.build()) { + ctx.write(polygons); + b = true; + } + } + return b; +} + +namespace { + std::string format_pt(const svgfill::point_2& p) { + std::ostringstream oss; + oss << std::setprecision(std::numeric_limits::max_digits10); + oss << p[0] << "," << p[1]; + return oss.str(); + } + + std::string format_poly(const svgfill::loop_2& p) { + std::ostringstream oss; + for (auto it = p.begin(); it != p.end(); ++it) { + oss << ((it == p.begin()) ? "M" : " L"); + oss << format_pt(*it); + } + oss << " Z"; + return oss.str(); + } +} + +std::string svgfill::polygons_to_svg(const std::vector>& polygons, bool random_color) { + std::random_device rd; + std::mt19937 mt(rd()); + std::uniform_int_distribution dist(0, 360); + + std::ostringstream oss; + + oss << ""; + oss << ""; + + for (auto& g : polygons) { + oss << ""; + for (auto& p : g) { + const int h = dist(mt); + const int s = 50; + const int l = 50; + std::string style; + if (random_color) { + std::ostringstream oss; + oss << "style = \"fill: hsl(" << h << "," << s << "%, " << l << "%)\""; + style = oss.str(); + } + oss << ""; + } + oss << ""; + } + + oss << ""; + + return oss.str(); +} + + +std::string svgfill::polygons_to_svg(const std::vector& polygons, bool random_color) { + std::vector> pps = { polygons }; + return polygons_to_svg(pps, random_color); +} + +void svgfill::context::add(const std::vector& segments) { + segments_.insert(segments_.end(), segments.begin(), segments.end()); +} + +bool svgfill::context::build() { + if (solver_ == CARTESIAN_DOUBLE) { + arr_ = new cgal_arrangement>; + } else if (solver_ == CARTESIAN_QUOTIENT) { + arr_ = new cgal_arrangement>>; + } else if (solver_ == FILTERED_CARTESIAN_QUOTIENT) { + arr_ = new cgal_arrangement>>>; + } else if (solver_ == EXACT_PREDICATES) { + arr_ = new cgal_arrangement; + } else if (solver_ == EXACT_CONSTRUCTIONS) { + arr_ = new cgal_arrangement; + } + return (*arr_)(eps_, segments_, progress_); +} + +void svgfill::context::merge(const std::vector& edge_indices) { + arr_->merge(edge_indices); +} + +void svgfill::context::write(std::vector>& p) { + std::vector polygons; + arr_->write(polygons, progress_); + p.push_back(polygons); +} diff --git a/src/svgfill/src/svgfill.h b/src/svgfill/src/svgfill.h new file mode 100644 index 0000000000..396fc9c924 --- /dev/null +++ b/src/svgfill/src/svgfill.h @@ -0,0 +1,119 @@ +/**************************************************************************** + * SVG fill * + * * + * Copyright(C) 2020 AECgeeks and Bimforce * + * * + * This program 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. * + * * + * This program 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 this program; if not, write to the Free Software Foundation, * + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ****************************************************************************/ + +#ifndef SVGFILL_H +#define SVGFILL_H + +#ifdef IFC_SHARED_BUILD +#ifdef _WIN32 +#ifdef svgfill_EXPORTS +#define SVGFILL_API __declspec(dllexport) +#else +#define SVGFILL_API __declspec(dllimport) +#endif +#else // simply assume *nix + GCC-like compiler +#define SVGFILL_API __attribute__((visibility("default"))) +#endif +#else +#define SVGFILL_API +#endif + +#include + +#include +#include + +namespace svgfill { + typedef std::array point_2; + typedef std::array line_segment_2; + typedef std::vector loop_2; + struct SVGFILL_API polygon_2 { + loop_2 boundary; + std::vector inner_boundaries; + point_2 point_inside; + }; + + enum solver { + CARTESIAN_DOUBLE, + CARTESIAN_QUOTIENT, + FILTERED_CARTESIAN_QUOTIENT, + EXACT_PREDICATES, + EXACT_CONSTRUCTIONS + }; + + class SVGFILL_API abstract_arrangement { + public: + virtual ~abstract_arrangement() {} + virtual bool operator()(double eps, const std::vector& segments, std::function& progress) = 0; + virtual bool write(std::vector& polygons, std::function& progress) = 0; + virtual void merge(const std::vector& edge_indices) = 0; + virtual std::vector get_face_pairs() = 0; + virtual size_t num_edges() = 0; + virtual size_t num_faces() = 0; + }; + + class SVGFILL_API context { + private: + solver solver_; + double eps_; + std::vector segments_; + std::function progress_; + // std::vector polygons_; + abstract_arrangement* arr_; + + public: + context(solver s, double eps) + : solver_(s) + , eps_(eps) + , arr_(nullptr) + {} + + context(solver s, double eps, std::function& progress) + : solver_(s) + , eps_(eps) + , progress_(progress) + , arr_(nullptr) + {} + + void add(const std::vector& segments); + bool build(); + std::vector get_face_pairs() { + return arr_->get_face_pairs(); + } + void merge(const std::vector& edge_indices); + void write(std::vector>&); + size_t num_edges() { return arr_->num_edges(); } + size_t num_faces() { return arr_->num_faces(); } + + ~context() { + delete arr_; + } + }; + + SVGFILL_API bool svg_to_line_segments(const std::string& data, const boost::optional& class_name, std::vector>& segments); + SVGFILL_API bool line_segments_to_polygons(solver s, double eps, const std::vector>& segments, std::vector>& polygons); + SVGFILL_API bool line_segments_to_polygons(solver s, double eps, const std::vector>& segments, std::vector>& polygons, std::function& progress); + SVGFILL_API std::string polygons_to_svg(const std::vector>& polygons, bool random_color=false); + SVGFILL_API std::string polygons_to_svg(const std::vector& polygons, bool random_color = false); + SVGFILL_API bool svg_to_polygons(const std::string& data, const boost::optional& class_name, std::vector& polygons); + SVGFILL_API bool arrange_polygons(const std::vector& polygons, std::vector& arranged); +} + +#endif From 0724fac69847608cd90c63bb6784bc3f6b13fb35 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Fri, 28 Nov 2025 18:50:46 +0100 Subject: [PATCH 234/657] cmake: Enable svgfill only for Python wrapper --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2344e52df8..179c8e135b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -736,7 +736,7 @@ if(BUILD_IFCMAX) add_subdirectory(../src/ifcmax ifcmax) endif() -if(WITH_CGAL) +if(BUILD_IFCPYTHON AND WITH_CGAL) add_subdirectory(../src/svgfill svgfill) endif() From 083fab5255519adc65d06e577ac6150e6b7b2782 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Fri, 28 Nov 2025 16:45:40 +0100 Subject: [PATCH 235/657] cmake: Use standard install way For specific install customization, use CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_LIBDIR and CMAKE_INSTALL_INCLUDEDIR variables. See-Also: https://cmake.org/cmake/help/latest/guide/tutorial/Installation%20Commands%20and%20Concepts.html --- cmake/CMakeLists.txt | 33 ++----------------- src/ifcconvert/CMakeLists.txt | 6 +--- src/ifcgeom/kernels/CMakeLists.txt | 12 ++----- src/ifcgeomserver/CMakeLists.txt | 6 +--- src/ifcmax/CMakeLists.txt | 6 +--- src/ifcparse/CMakeLists.txt | 6 +--- src/serializers/CMakeLists.txt | 6 +--- .../schema_dependent/CMakeLists.txt | 6 +--- 8 files changed, 10 insertions(+), 71 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 179c8e135b..2a2aff9cc7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -159,15 +159,6 @@ endif() include(GNUInstallDirs) -# Specify paths to install files -if(NOT BINDIR) - set(BINDIR bin) -endif() -if(NOT IS_ABSOLUTE ${BINDIR}) - set(BINDIR ${CMAKE_INSTALL_BINDIR}) -endif() -message(STATUS "BINDIR: ${BINDIR}") - if(NOT INCLUDEDIR) set(INCLUDEDIR include) endif() @@ -176,16 +167,6 @@ if(NOT IS_ABSOLUTE ${INCLUDEDIR}) endif() message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") -if(NOT LIBDIR) - set(LIBDIR lib) -endif() -if(NOT IS_ABSOLUTE ${LIBDIR}) - set(LIBDIR ${CMAKE_INSTALL_LIBDIR}) -endif() -message(STATUS "LIBDIR: ${LIBDIR}") - -set(IFCOPENSHELL_LIBRARY_DIR "") # for *nix rpaths - if(BUILD_SHARED_LIBS) add_definitions(-DIFC_SHARED_BUILD) if(MSVC) @@ -194,8 +175,6 @@ if(BUILD_SHARED_LIBS) # There will be couple hundreds of these so suppress them away, https://msdn.microsoft.com/en-us/library/esew7y1w.aspx add_definitions(-wd4251) endif() - - set(IFCOPENSHELL_LIBRARY_DIR "${LIBDIR}") endif() UNIFY_ENVVARS_AND_CACHE(BOOST_ROOT) @@ -765,20 +744,12 @@ if(BUILD_IFCGEOM) ) endforeach() - install(TARGETS ${IFCGEOM_SCHEMA_LIBRARIES} ${kernel_libraries} IfcGeom - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) + install(TARGETS ${IFCGEOM_SCHEMA_LIBRARIES} ${kernel_libraries} IfcGeom) endif(BUILD_IFCGEOM) if(BUILD_CONVERT OR BUILD_IFCPYTHON) if(WITH_OPENCASCADE) - install(TARGETS geometry_serializer ${geometry_serializer_libraries} - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) + install(TARGETS geometry_serializer ${geometry_serializer_libraries}) endif() endif(BUILD_CONVERT OR BUILD_IFCPYTHON) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index 60bc2fee52..4a889a57bf 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -14,8 +14,4 @@ if(WITH_RELATIONSHIP_VALIDATION) set_property(TARGET IfcConvert APPEND_STRING PROPERTY COMPILE_FLAGS " -DWITH_RELATIONSHIP_VALIDATION") endif() -install(TARGETS IfcConvert - ARCHIVE DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - LIBRARY DESTINATION ${LIBDIR} -) +install(TARGETS IfcConvert) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 729b4c9118..d7c2e12bc7 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -11,11 +11,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) list(APPEND kernel_libraries ${KERNEL_TARGET}) target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES}) - install(TARGETS ${KERNEL_TARGET} - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) + install(TARGETS ${KERNEL_TARGET}) if(${kernel} STREQUAL "cgal") set_property(TARGET ${KERNEL_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") @@ -25,11 +21,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) - install(TARGETS ${KERNEL_TARGET_SIMPLE} - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) + install(TARGETS ${KERNEL_TARGET_SIMPLE}) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) endif() diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt index c0b232c277..ff56607ff2 100644 --- a/src/ifcgeomserver/CMakeLists.txt +++ b/src/ifcgeomserver/CMakeLists.txt @@ -5,8 +5,4 @@ set(SOURCE_FILES ${CPP_FILES}) add_executable(IfcGeomServer ${SOURCE_FILES}) target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OpenCASCADE_LIBRARIES}) -install(TARGETS IfcGeomServer - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} -) +install(TARGETS IfcGeomServer) diff --git a/src/ifcmax/CMakeLists.txt b/src/ifcmax/CMakeLists.txt index 38e83e8cb2..d306758b67 100644 --- a/src/ifcmax/CMakeLists.txt +++ b/src/ifcmax/CMakeLists.txt @@ -79,11 +79,7 @@ if(HAS_MAX) set_target_properties(IfcMax_${max_year} PROPERTIES SUFFIX ".dli") - install(TARGETS IfcMax_${max_year} - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) + install(TARGETS IfcMax_${max_year}) endforeach() else() message(STATUS "Autodesk 3ds Max SDK not found, is required to build IFCMax.") diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index 5714c754de..aa21cd524a 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -57,8 +57,4 @@ install(FILES ${IFCPARSE_H_FILES} DESTINATION ${INCLUDEDIR}/ifcparse ) -install(TARGETS IfcParse - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} -) +install(TARGETS IfcParse) diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index 56cbfc7c32..65ebc13169 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -19,11 +19,7 @@ endif() target_link_libraries(Serializers PRIVATE ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} IfcGeom ${OPENCASCADE_LIBRARIES} ${kernel_libraries} IfcParse) -install(TARGETS Serializers - ARCHIVE DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - LIBRARY DESTINATION ${LIBDIR} -) +install(TARGETS Serializers) install(FILES ${SERIALIZERS_H_FILES} DESTINATION ${INCLUDEDIR}/serializers/ diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt index 40f17d283d..deb9bc23c3 100644 --- a/src/serializers/schema_dependent/CMakeLists.txt +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -12,11 +12,7 @@ foreach(schema ${SCHEMA_VERSIONS}) target_link_libraries(Serializers_ifc${schema} IfcGeom ${OPENCASCADE_LIBRARIES} ${HDF5_LIBRARIES}) endif() - install(TARGETS Serializers_ifc${schema} - ARCHIVE DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - LIBRARY DESTINATION ${LIBDIR} - ) + install(TARGETS Serializers_ifc${schema}) endforeach() From 8f7cf76d98f76074c925f06abe65562cba9d6401 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sun, 30 Nov 2025 11:28:40 +0100 Subject: [PATCH 236/657] Fix wrong stair length calculation when having no custom first or last tread run --- src/bonsai/bonsai/tool/model.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 0bc9ef4b68..bfe8d6b020 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1349,6 +1349,7 @@ class Model(bonsai.core.tool.Model): 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 + use_custom_first_last_tread_run = not props.custom_tread_lock else: assert pset_data number_of_treads: int = pset_data["number_of_treads"] @@ -1360,29 +1361,23 @@ class Model(bonsai.core.tool.Model): ) first_tread_run, last_tread_run = custom_first_last_tread_run nosing_length = pset_data.get("nosing_length", 0) + use_custom_first_last_tread_run = not pset_data.get("custom_tread_lock", True) calculated_params: dict[str, Any] = {} 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 - # Start with all treads using default tread_run - n_default_tread_runs = number_of_rises + # Calculate total length taking into account custom first/last tread runs : length = 0.0 - - # If first tread has custom width (non-None), use it instead of default. - if first_tread_run is not None: - n_default_tread_runs -= 1 + default_rises = number_of_rises + if use_custom_first_last_tread_run and first_tread_run is not None: + default_rises -= 1 length += first_tread_run - - # If last tread has custom width (non-None), use it instead of default - if last_tread_run is not None: - n_default_tread_runs -= 1 + if use_custom_first_last_tread_run and last_tread_run is not None: + default_rises -= 1 length += last_tread_run - - # Add remaining default tread runs - length += tread_run * n_default_tread_runs + length += tread_run * default_rises # Handle nosing length effects on total length # Nosing overlaps don't affect tread run spacing, From 30184a3f6dd9cae93e73464fd4d7166a3407e296 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sat, 15 Nov 2025 20:31:13 +0100 Subject: [PATCH 237/657] cmake: Externalize geometry_serializer cmake config files to their own directory --- cmake/CMakeLists.txt | 34 ++----------------- src/examples/CMakeLists.txt | 24 ++++++------- src/ifcgeom/CMakeLists.txt | 7 +++- src/ifcgeom/Serialization/CMakeLists.txt | 15 ++++++++ .../Serialization/schema/CMakeLists.txt | 7 ++++ 5 files changed, 43 insertions(+), 44 deletions(-) create mode 100644 src/ifcgeom/Serialization/CMakeLists.txt create mode 100644 src/ifcgeom/Serialization/schema/CMakeLists.txt diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2a2aff9cc7..3d2bbb220b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -205,6 +205,9 @@ if(WITH_CGAL) endif() if(WITH_OPENCASCADE) + find_package(OpenCASCADE REQUIRED) + # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OPENCASCADE_LIBRARIES used by kernel generic cmake file + set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) add_definitions(-DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) list(APPEND GEOMETRY_KERNELS opencascade) @@ -324,13 +327,6 @@ find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") message(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}") -if(BUILD_IFCGEOM) - # Open CASCADE - if(WITH_OPENCASCADE) - find_package(OpenCASCADE REQUIRED) - endif(WITH_OPENCASCADE) -endif(BUILD_IFCGEOM) - if(COLLADA_SUPPORT) find_package(OpenCOLLADA REQUIRED) endif() @@ -557,24 +553,6 @@ if(BUILD_IFCGEOM) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES}) endif() -if(BUILD_CONVERT OR BUILD_IFCPYTHON) - if(WITH_OPENCASCADE) - foreach(schema ${SCHEMA_VERSIONS}) - set(GEOM_SERIALIZER_SCHEMA_LIBRARIES ${GEOM_SERIALIZER_SCHEMA_LIBRARIES} GeometrySerializers_ifc${schema}) - - add_library(geometry_serializer_ifc${schema} OBJECT ../src/ifcgeom/Serialization/schema/Serialization.cpp) - set_target_properties(geometry_serializer_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS -DIfcSchema=Ifc${schema}") - target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES}) - list(APPEND geometry_serializer_libraries geometry_serializer_ifc${schema}) - endforeach() - - add_library(geometry_serializer OBJECT ../src/ifcgeom/Serialization/Serialization.h ../src/ifcgeom/Serialization/Serialization.cpp) - set_target_properties(geometry_serializer PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS") - target_link_libraries(geometry_serializer ${geometry_serializer_libraries} IfcParse) - set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} geometry_serializer ${geometry_serializer_libraries}) - endif() -endif() - if(BUILD_IFCGEOM) # CGAL::CGAL target already has dependencies resolved. if(WITH_CGAL AND CGAL_DIR) @@ -747,12 +725,6 @@ if(BUILD_IFCGEOM) install(TARGETS ${IFCGEOM_SCHEMA_LIBRARIES} ${kernel_libraries} IfcGeom) endif(BUILD_IFCGEOM) -if(BUILD_CONVERT OR BUILD_IFCPYTHON) - if(WITH_OPENCASCADE) - install(TARGETS geometry_serializer ${geometry_serializer_libraries}) - endif() -endif(BUILD_CONVERT OR BUILD_IFCPYTHON) - # Cmake uninstall target if(NOT TARGET uninstall) configure_file( diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index eee834f5c7..1bdad7f032 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -18,22 +18,22 @@ ################################################################################ if(SCHEMA_VERSIONS MATCHES "2x3") -ADD_EXECUTABLE(IfcParseExamples IfcParseExamples.cpp) -TARGET_LINK_LIBRARIES(IfcParseExamples IfcParse) -set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples) -target_compile_features(IfcParseExamples PUBLIC cxx_std_17) + ADD_EXECUTABLE(IfcParseExamples IfcParseExamples.cpp) + TARGET_LINK_LIBRARIES(IfcParseExamples IfcParse) + set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples) + target_compile_features(IfcParseExamples PUBLIC cxx_std_17) -if (WITH_OPENCASCADE) + if(WITH_OPENCASCADE) -ADD_EXECUTABLE(IfcOpenHouse IfcOpenHouse.cpp) -TARGET_LINK_LIBRARIES(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) -set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples) + ADD_EXECUTABLE(IfcOpenHouse IfcOpenHouse.cpp) + TARGET_LINK_LIBRARIES(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) + set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples) -ADD_EXECUTABLE(IfcAdvancedHouse IfcAdvancedHouse.cpp) -TARGET_LINK_LIBRARIES(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) -set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) + ADD_EXECUTABLE(IfcAdvancedHouse IfcAdvancedHouse.cpp) + TARGET_LINK_LIBRARIES(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) + set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) -endif() + endif() endif(SCHEMA_VERSIONS MATCHES "2x3") if(SCHEMA_VERSIONS MATCHES "4x3_add2") diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 5e1bf299d0..dfea18038e 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -1,3 +1,8 @@ add_subdirectory(kernels) - set(kernel_libraries ${kernel_libraries} PARENT_SCOPE) + +if((BUILD_CONVERT OR BUILD_IFCPYTHON) AND WITH_OPENCASCADE) + add_subdirectory(Serialization) + set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} PARENT_SCOPE) +endif() + diff --git a/src/ifcgeom/Serialization/CMakeLists.txt b/src/ifcgeom/Serialization/CMakeLists.txt new file mode 100644 index 0000000000..e105effa6c --- /dev/null +++ b/src/ifcgeom/Serialization/CMakeLists.txt @@ -0,0 +1,15 @@ +add_subdirectory(schema) +set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) + +add_library(geometry_serializer STATIC Serialization.cpp) +set_target_properties(geometry_serializer PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS") +target_link_libraries(geometry_serializer ${geometry_serializer_libraries} IfcParse) +set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} "geometry_serializer" ${geometry_serializer_libraries}) +set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} PARENT_SCOPE) + +file(GLOB IFCGEOM_SERIALIZATION_H_FILE *.h) +install(FILES ${IFCGEOM_SERIALIZATION_H_FILE} + DESTINATION ${INCLUDEDIR}/ifcgeom/Serialization +) + +install(TARGETS geometry_serializer ${geometry_serializer_libraries}) diff --git a/src/ifcgeom/Serialization/schema/CMakeLists.txt b/src/ifcgeom/Serialization/schema/CMakeLists.txt new file mode 100644 index 0000000000..0ff0938674 --- /dev/null +++ b/src/ifcgeom/Serialization/schema/CMakeLists.txt @@ -0,0 +1,7 @@ +foreach(schema ${SCHEMA_VERSIONS}) + add_library(geometry_serializer_ifc${schema} STATIC Serialization.cpp) + target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES}) + set_target_properties(geometry_serializer_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS -DIfcSchema=Ifc${schema}") + list(APPEND geometry_serializer_libraries geometry_serializer_ifc${schema}) +endforeach() +set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) \ No newline at end of file From 986cb905b2c6b87f2bea2c38fd7d3ad0a6994ecb Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sat, 15 Nov 2025 20:31:13 +0100 Subject: [PATCH 238/657] cmake: Externalize geometry_serializer cmake config files to their own directory --- cmake/CMakeLists.txt | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3d2bbb220b..fd46a855a8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -205,6 +205,9 @@ if(WITH_CGAL) endif() if(WITH_OPENCASCADE) + find_package(OpenCASCADE REQUIRED) + # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OPENCASCADE_LIBRARIES used by kernel generic cmake file + set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) find_package(OpenCASCADE REQUIRED) # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OPENCASCADE_LIBRARIES used by kernel generic cmake file set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) @@ -327,6 +330,25 @@ find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") message(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}") +if(NOT MINIMAL_BUILD) + # libxml2 is required for IFCXML (optional) and SVGFILL (mandatory) + if(IFCXML_SUPPORT) + find_package(LibXml2 REQUIRED) + endif() +endif() + +if(IFCXML_SUPPORT) + add_definitions(-DWITH_IFCXML) + set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML) +endif() + +if(BUILD_IFCGEOM) + # Open CASCADE + if(WITH_OPENCASCADE) + find_package(OpenCASCADE REQUIRED) + endif(WITH_OPENCASCADE) +endif(BUILD_IFCGEOM) + if(COLLADA_SUPPORT) find_package(OpenCOLLADA REQUIRED) endif() From b7a919925337c18ed90446180d3460d24463d19e Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sun, 30 Nov 2025 13:33:56 +0100 Subject: [PATCH 239/657] cmake: Externalize geometry mapping target cmake config --- cmake/CMakeLists.txt | 57 ------------------------ src/ifcgeom/CMakeLists.txt | 23 ++++++++++ src/ifcgeom/Serialization/CMakeLists.txt | 3 +- src/ifcgeom/mapping/CMakeLists.txt | 16 +++++++ 4 files changed, 41 insertions(+), 58 deletions(-) create mode 100644 src/ifcgeom/mapping/CMakeLists.txt diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index fd46a855a8..38f3d48899 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -205,9 +205,6 @@ if(WITH_CGAL) endif() if(WITH_OPENCASCADE) - find_package(OpenCASCADE REQUIRED) - # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OPENCASCADE_LIBRARIES used by kernel generic cmake file - set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) find_package(OpenCASCADE REQUIRED) # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OPENCASCADE_LIBRARIES used by kernel generic cmake file set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) @@ -330,25 +327,6 @@ find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") message(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}") -if(NOT MINIMAL_BUILD) - # libxml2 is required for IFCXML (optional) and SVGFILL (mandatory) - if(IFCXML_SUPPORT) - find_package(LibXml2 REQUIRED) - endif() -endif() - -if(IFCXML_SUPPORT) - add_definitions(-DWITH_IFCXML) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML) -endif() - -if(BUILD_IFCGEOM) - # Open CASCADE - if(WITH_OPENCASCADE) - find_package(OpenCASCADE REQUIRED) - endif(WITH_OPENCASCADE) -endif(BUILD_IFCGEOM) - if(COLLADA_SUPPORT) find_package(OpenCOLLADA REQUIRED) endif() @@ -568,13 +546,6 @@ endif() add_subdirectory(../src/ifcparse ifcparse) set(IFCOPENSHELL_LIBRARIES IfcParse) -if(BUILD_IFCGEOM) - foreach(schema ${SCHEMA_VERSIONS}) - set(IFCGEOM_SCHEMA_LIBRARIES ${IFCGEOM_SCHEMA_LIBRARIES} geometry_mapping_ifc${schema}) - endforeach() - set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES}) -endif() - if(BUILD_IFCGEOM) # CGAL::CGAL target already has dependencies resolved. if(WITH_CGAL AND CGAL_DIR) @@ -595,34 +566,6 @@ if(BUILD_IFCGEOM) endif() add_subdirectory(../src/ifcgeom ifcgeom) - - # IfcGeom - foreach(schema ${SCHEMA_VERSIONS}) - file(GLOB IFCGEOM_I_FILES ../src/ifcgeom/mapping/*.i) - file(GLOB IFCGEOM_H_FILES ../src/ifcgeom/mapping/*.h) - file(GLOB IFCGEOM_CPP_FILES ../src/ifcgeom/mapping/*.cpp) - set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES} ${IFCGEOM_I_FILES}) - - add_library(geometry_mapping_ifc${schema} OBJECT ${IFCGEOM_FILES}) - set_target_properties(geometry_mapping_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") - target_link_libraries(geometry_mapping_ifc${schema} IfcParse) - list(APPEND mapping_libraries geometry_mapping_ifc${schema}) - endforeach() - - # IfcGeom (schema agnostic) - file(GLOB SCHEMA_AGNOSTIC_H_FILES ../src/ifcgeom/*.h) - file(GLOB SCHEMA_AGNOSTIC_CPP_FILES ../src/ifcgeom/*.cpp) - set(SCHEMA_AGNOSTIC_FILES ${SCHEMA_AGNOSTIC_H_FILES} ${SCHEMA_AGNOSTIC_CPP_FILES}) - - add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES}) - set_target_properties(IfcGeom PROPERTIES COMPILE_FLAGS -DIFC_GEOM_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") - - if(UNIX) - find_package(Threads) - endif() - - target_link_libraries(IfcGeom IfcParse ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} ${OpenCASCADE_LIBRARIES}) - endif(BUILD_IFCGEOM) if(BUILD_CONVERT OR BUILD_IFCPYTHON) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index dfea18038e..1c58f7d299 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -6,3 +6,26 @@ if((BUILD_CONVERT OR BUILD_IFCPYTHON) AND WITH_OPENCASCADE) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} PARENT_SCOPE) endif() +add_subdirectory(mapping) + +# IfcGeom (schema agnostic) +file(GLOB SCHEMA_AGNOSTIC_H_FILES *.h) +file(GLOB SCHEMA_AGNOSTIC_CPP_FILES *.cpp) +set(SCHEMA_AGNOSTIC_FILES ${SCHEMA_AGNOSTIC_H_FILES} ${SCHEMA_AGNOSTIC_CPP_FILES}) + +add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES}) +set_target_properties(IfcGeom PROPERTIES COMPILE_FLAGS -DIFC_GEOM_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") + +if(UNIX) + find_package(Threads) +endif() + +if(WASM_BUILD) + target_link_libraries(IfcGeom ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") +else() + target_link_libraries(IfcGeom IfcParse ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") +endif() + +install(FILES ${SCHEMA_AGNOSTIC_H_FILES} + DESTINATION ${INCLUDEDIR}/ifcgeom +) \ No newline at end of file diff --git a/src/ifcgeom/Serialization/CMakeLists.txt b/src/ifcgeom/Serialization/CMakeLists.txt index e105effa6c..9031c08148 100644 --- a/src/ifcgeom/Serialization/CMakeLists.txt +++ b/src/ifcgeom/Serialization/CMakeLists.txt @@ -1,5 +1,4 @@ add_subdirectory(schema) -set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) add_library(geometry_serializer STATIC Serialization.cpp) set_target_properties(geometry_serializer PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS") @@ -13,3 +12,5 @@ install(FILES ${IFCGEOM_SERIALIZATION_H_FILE} ) install(TARGETS geometry_serializer ${geometry_serializer_libraries}) + +set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) diff --git a/src/ifcgeom/mapping/CMakeLists.txt b/src/ifcgeom/mapping/CMakeLists.txt new file mode 100644 index 0000000000..4778f1d22b --- /dev/null +++ b/src/ifcgeom/mapping/CMakeLists.txt @@ -0,0 +1,16 @@ +foreach(schema ${SCHEMA_VERSIONS}) + file(GLOB IFCGEOM_I_FILES *.i) + file(GLOB IFCGEOM_H_FILES *.h) + file(GLOB IFCGEOM_CPP_FILES *.cpp) + set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES} ${IFCGEOM_I_FILES}) + + add_library(geometry_mapping_ifc${schema} OBJECT ${IFCGEOM_FILES}) + set_target_properties(geometry_mapping_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") + target_link_libraries(geometry_mapping_ifc${schema} IfcParse) + + list(APPEND mapping_libraries geometry_mapping_ifc${schema}) + + install(TARGETS geometry_mapping_ifc${schema}) +endforeach() + +set(mapping_libraries ${mapping_libraries} PARENT_SCOPE) From ad4fc76546bb76cf8893c138ee7b81686d86da54 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sun, 30 Nov 2025 21:55:36 +0100 Subject: [PATCH 240/657] Major refactor of parametric gizmo system: dimension lines and code consolidation Major changes: - Relocate gizmo infrastructure from bim/gizmo.py to module/drawing/gizmos.py - Replace arrow-based property gizmos with dimension line gizmos throughout - Add view-dependent positioning: gizmos automatically reposition based on camera angle to stay visible and avoid overlapping geometry - Add special icons for stair to deal with edge cases Code quality: - Add DRY helper methods for gizmo positioning across stair, door, and window - Remove redundant visibility logic - Extract integer input handling to dedicated module for reuse - Add comprehensive documentation for gizmo architecture --- src/bonsai/bonsai/bim/__init__.py | 15 +- src/bonsai/bonsai/bim/gizmo.py | 1981 --------- .../bonsai/bim/module/drawing/__init__.py | 17 +- .../bonsai/bim/module/drawing/gizmos.py | 3726 ++++++++++++++++- .../bonsai/bim/module/model/__init__.py | 2 + src/bonsai/bonsai/bim/module/model/door.py | 206 +- src/bonsai/bonsai/bim/module/model/stair.py | 602 ++- src/bonsai/bonsai/bim/module/model/window.py | 349 +- src/bonsai/bonsai/bim/ui.py | 22 +- src/bonsai/bonsai/tool/numeric_input.py | 168 + 10 files changed, 4528 insertions(+), 2560 deletions(-) delete mode 100644 src/bonsai/bonsai/bim/gizmo.py create mode 100644 src/bonsai/bonsai/tool/numeric_input.py diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 7e51aea545..3d865de16e 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -21,7 +21,7 @@ import bpy import bpy.utils.previews import importlib from bpy_extras.io_utils import ImportHelper, ExportHelper -from . import handler, ui, prop, operator, gizmo +from . import handler, ui, prop, operator from typing import Union from collections.abc import Callable @@ -206,19 +206,6 @@ classes = [ ui.BIM_PT_section_with_cappings, ui.BIM_PT_decorators_overlay, ui.BIM_PT_snappping, - # Gizmos - gizmo.BIM_OT_gizmo_value_input, - gizmo.GizmoArrow, - gizmo.GizmoArrow2D, - gizmo.GizmoCone, - gizmo.GizmoLock, - gizmo.GizmoArc, - gizmo.GizmoPen, - gizmo.GizmoValidate, - gizmo.GizmoCancel, - gizmo.GizmoPlus, - gizmo.GizmoMinus, - gizmo.GizmoCycle, ] for mod in modules.values(): diff --git a/src/bonsai/bonsai/bim/gizmo.py b/src/bonsai/bonsai/bim/gizmo.py deleted file mode 100644 index ded59fecdd..0000000000 --- a/src/bonsai/bonsai/bim/gizmo.py +++ /dev/null @@ -1,1981 +0,0 @@ -# Bonsai - OpenBIM Blender Add-on -# Copyright (C) 2020, 2021 Dion Moult -# -# This file is part of Bonsai. -# -# Bonsai is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Bonsai 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Bonsai. If not, see . - -""" -Shared gizmo components for reuse across modules. -""" - -__all__ = [ - # Dataclasses - "GizmoPropConfig", - "NumericInputState", - # Functions - "set_snap_point", - "clear_snap_point", - "snap_to_mesh", - "build_snap_cache", - "clear_snap_cache", - "get_billboard_rotation", - "get_camera_direction", - "generate_circle_vertices", - "create_circle_arc", - # Operators - "BIM_OT_gizmo_value_input", - # Gizmo classes - "GizmoMovable", - "GizmoLock", - "GizmoArc", - "GizmoPen", - "GizmoValidate", - "GizmoCancel", - "GizmoPlus", - "GizmoMinus", - "GizmoCycle", - "GizmoArrow", - "GizmoArrow2D", - "GizmoCone", - # Mixin classes - "BaseParametricGizmoGroup", -] - -from typing import Any - -import bpy -import math -import numpy as np -from dataclasses import dataclass -from mathutils import Vector, Matrix -from mathutils.kdtree import KDTree -from mathutils.geometry import intersect_line_line -from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d, location_3d_to_region_2d -import gpu -from gpu_extras.batch import batch_for_shader -import bonsai.tool as tool -from bonsai.tool.unit import parse_distance_string - - -SNAP_POINT_SIZE = 10.0 -SNAP_POINT_COLOR = (1.0, 0.5, 0.0, 1.0) -SNAP_MAX_RADIUS = 5.0 -SNAP_SCREEN_DISTANCE = 15 # Maximum screen-space distance for snapping (in pixels) -SNAP_WORLD_DISTANCE = 0.2 # Maximum world-space distance for snapping (in meters) -SNAP_KD_CANDIDATES = 16 # Number of KD-tree candidates (3D nearest may differ from screen nearest) - -ARROW_SHAFT_LENGTH = 0.8 -ARROW_HEAD_LENGTH = 0.2 -ARROW_WIDTH = 0.015 -ARROW_HEAD_WIDTH_MULTIPLIER = 10 -ARROW_CIRCLE_SEGMENTS = 8 - -CONE_LENGTH = 1.0 -CONE_RADIUS = 0.35 -CONE_SEGMENTS = 16 - -ARC_SEGMENTS = 24 -ARC_LINE_WIDTH = 0.015 - -PRECISION_MODE_MULTIPLIER = 0.1 - -RAY_CAST_DISTANCE = 1000 # Distance to extend rays for intersection calculations -DEFAULT_POINT_SIZE = 1.0 # Default GPU point size - -# Characters allowed for keyboard numeric input (supports units and formulas) -_DIGITS = set("0123456789") -_OPERATORS = {".", "-", "+", "*", "/"} -_METRIC_UNITS = {"m", "c", "d"} # m, cm, dm, mm -_IMPERIAL_UNITS = {"f", "t", "i", "n", "'", '"'} # ft, in, ', " -_SPECIAL = {"=", " "} # Formula prefix, spaces - -NUMERIC_INPUT_CHARS = _DIGITS | _OPERATORS | _METRIC_UNITS | _IMPERIAL_UNITS | _SPECIAL - -# Module-level storage for gizmo callback (Blender ID properties don't support functions) -_gizmo_value_input_callback: dict[str, Any] = {} - - -@dataclass -class SnapCache: - """Unified snap cache with combined KD-tree for vertex snapping.""" - - # Combined KD-tree with all world vertices from all objects - kd_tree: KDTree - # All world vertices indexed by global vertex index - all_vertices: list[Vector] - - -@dataclass -class NumericInputState: - """State for keyboard numeric input during gizmo operations.""" - - characters: list[str] - parsed_value: float - is_active: bool - is_valid: bool - - @classmethod - def create_default(cls) -> "NumericInputState": - return cls(characters=[], parsed_value=0.0, is_active=False, is_valid=True) - - def reset(self) -> None: - self.characters.clear() - self.parsed_value = 0.0 - self.is_active = False - self.is_valid = True - - def get_input_string(self) -> str: - return "".join(self.characters) - - def is_relative_mode(self) -> bool: - input_str = self.get_input_string() - return input_str.startswith("+") or input_str.startswith("-") - - def calculate_final_value(self, init_value: float, invert_delta: bool = False) -> float: - if self.is_relative_mode(): - delta = self.parsed_value - if invert_delta: - delta = -delta - return init_value + delta - return self.parsed_value - - def parse(self) -> None: - """Parse the current input string and update parsed_value and is_valid.""" - if not self.characters: - self.parsed_value = 0.0 - self.is_valid = True - return - - input_str = self.get_input_string() - is_valid, value = parse_distance_string(input_str) - - if is_valid: - self.parsed_value = value - self.is_valid = True - else: - try: - self.parsed_value = float(input_str) - self.is_valid = True - except ValueError: - self.parsed_value = 0.0 - self.is_valid = False - - -@dataclass -class GizmoPropConfig: - """Configuration for a gizmo property.""" - - attr_name: str - axis: tuple[int, int, int] - invert_delta: bool = False - delta_scale: float = 1.0 # Multiplier for the delta (e.g., 2.0 for symmetric thickness properties) - - -class SnapManager: - """Manages snap point visualization and mesh snapping with caching.""" - - def __init__(self): - self._snap_point: tuple[float, float, float] | Vector | None = None - self._draw_handler = None - self._shader = None - self._snap_cache: SnapCache | None = None - - def set_snap_point(self, point: tuple[float, float, float] | Vector | None) -> None: - """Set snap point and register draw handler if needed.""" - self._snap_point = point - if self._draw_handler is None and point is not None: - self._draw_handler = bpy.types.SpaceView3D.draw_handler_add(self._draw, (), "WINDOW", "POST_VIEW") - self._redraw_viewport() - - def clear(self) -> None: - """Clear snap point and unregister handler.""" - self._snap_point = None - if self._draw_handler is not None: - bpy.types.SpaceView3D.draw_handler_remove(self._draw_handler, "WINDOW") - self._draw_handler = None - self._redraw_viewport() - - def _draw(self) -> None: - """Draw snap point as a dot.""" - if self._snap_point is None: - return - - if self._shader is None: - self._shader = gpu.shader.from_builtin("UNIFORM_COLOR") - - self._shader.bind() - self._shader.uniform_float("color", SNAP_POINT_COLOR) - gpu.state.point_size_set(SNAP_POINT_SIZE) - - batch = batch_for_shader(self._shader, "POINTS", {"pos": [self._snap_point]}) - batch.draw(self._shader) - - gpu.state.point_size_set(DEFAULT_POINT_SIZE) - - @staticmethod - def _redraw_viewport() -> None: - """Force 3D viewport redraw.""" - for area in bpy.context.screen.areas: - if area.type == "VIEW_3D": - area.tag_redraw() - - def build_snap_cache(self, context: bpy.types.Context, active_obj: bpy.types.Object) -> None: - """Build unified cache with combined KD-tree for vertex snapping. - - Uses foreach_get for fast vertex data extraction and NumPy for - batch matrix transformation. - """ - self._snap_cache = None - - mesh_objects = [ - obj for obj in context.visible_objects - if obj.type == "MESH" and obj != active_obj and obj.visible_get() - ] - - if not mesh_objects: - return - - depsgraph = context.evaluated_depsgraph_get() - all_vertices: list[Vector] = [] - - for obj in mesh_objects: - mesh_data = obj.data - if not hasattr(mesh_data, "vertices") or not mesh_data.vertices: - continue - - obj_eval = obj.evaluated_get(depsgraph) - mesh = obj_eval.to_mesh() - - try: - vertex_count = len(mesh.vertices) - if vertex_count == 0: - continue - - coords = np.empty(vertex_count * 3, dtype=np.float32) - mesh.vertices.foreach_get("co", coords) # type: ignore[arg-type] - coords = coords.reshape(-1, 3) - - matrix = np.array(obj_eval.matrix_world, dtype=np.float32) - ones = np.ones((vertex_count, 1), dtype=np.float32) - coords_h = np.hstack([coords, ones]) - world_coords = (coords_h @ matrix.T)[:, :3] - - all_vertices.extend(Vector(co) for co in world_coords) - finally: - obj_eval.to_mesh_clear() - - if not all_vertices: - return - - kd_tree = KDTree(len(all_vertices)) - for i, v in enumerate(all_vertices): - kd_tree.insert(v, i) - kd_tree.balance() - - self._snap_cache = SnapCache( - kd_tree=kd_tree, - all_vertices=all_vertices, - ) - - def clear_snap_cache(self) -> None: - self._snap_cache = None - - @staticmethod - def _calc_snap_distance_sq( - point_3d: Vector, - location: Vector, - mouse_vec: Vector | None, - region: bpy.types.Region | None, - rv3d: bpy.types.RegionView3D | None, - ) -> float: - """Calculate squared distance - screen-space if mouse coords available, else world-space.""" - if mouse_vec is not None and region is not None and rv3d is not None: - point_2d = location_3d_to_region_2d(region, rv3d, point_3d) - if point_2d is not None: - return (mouse_vec - point_2d).length_squared - return float("inf") - return (point_3d - location).length_squared - - @staticmethod - def _find_closest_vertex( - world_vertices: list[Vector], - location: Vector, - mouse_vec: Vector | None, - region: bpy.types.Region | None, - rv3d: bpy.types.RegionView3D | None, - closest_point: Vector | None, - closest_dist_sq: float, - kd_tree: KDTree | None = None, - ) -> tuple[Vector | None, float]: - """Find the closest vertex to snap to using KD-tree if available.""" - if kd_tree is not None: - for _, idx, _ in kd_tree.find_n(location, SNAP_KD_CANDIDATES): - v_co = world_vertices[idx] - dist_sq = SnapManager._calc_snap_distance_sq(v_co, location, mouse_vec, region, rv3d) - if dist_sq < closest_dist_sq: - closest_dist_sq = dist_sq - closest_point = v_co - else: - for v_co in world_vertices: - dist_sq = SnapManager._calc_snap_distance_sq(v_co, location, mouse_vec, region, rv3d) - if dist_sq < closest_dist_sq: - closest_dist_sq = dist_sq - closest_point = v_co - return closest_point, closest_dist_sq - - @staticmethod - def _get_nearby_objects( - mesh_objects: list[bpy.types.Object], - location: Vector, - ) -> list[bpy.types.Object]: - """Filter objects to those within SNAP_MAX_RADIUS of location.""" - radius_sq = SNAP_MAX_RADIUS * SNAP_MAX_RADIUS - nearby_objects = [] - - for obj in mesh_objects: - bbox_corners = [obj.matrix_world @ Vector(corner) for corner in obj.bound_box] - if not bbox_corners: - continue - - bbox_min = Vector(( - min(c.x for c in bbox_corners), - min(c.y for c in bbox_corners), - min(c.z for c in bbox_corners), - )) - bbox_max = Vector(( - max(c.x for c in bbox_corners), - max(c.y for c in bbox_corners), - max(c.z for c in bbox_corners), - )) - - closest = Vector(( - max(bbox_min.x, min(location.x, bbox_max.x)), - max(bbox_min.y, min(location.y, bbox_max.y)), - max(bbox_min.z, min(location.z, bbox_max.z)), - )) - - if (location - closest).length_squared <= radius_sq: - nearby_objects.append(obj) - - return nearby_objects - - def snap_to_mesh( - self, - location: Vector, - context: bpy.types.Context, - active_obj: bpy.types.Object, - mouse_coords: tuple[float, float] | None = None, - ) -> Vector: - """Snap a location to the nearest vertex if snapping is enabled. - - Only vertex snapping is supported. Returns the original location if - snapping is disabled or VERTEX is not in the snap elements. - """ - tool_settings = context.scene.tool_settings - - if not tool_settings.use_snap: - return location - - if "VERTEX" not in tool_settings.snap_elements_base: - return location - - region = context.region - rv3d = context.region_data - use_screen_distance = mouse_coords is not None and region is not None and rv3d is not None - mouse_vec = Vector(mouse_coords) if mouse_coords is not None else None - - closest_point: Vector | None = None - closest_dist_sq = float("inf") - - if self._snap_cache is not None: - closest_point, closest_dist_sq = self._snap_from_cache( - location, mouse_vec, region, rv3d - ) - else: - closest_point, closest_dist_sq = self._snap_without_cache( - location, context, active_obj, mouse_vec, region, rv3d - ) - - max_dist_sq = SNAP_SCREEN_DISTANCE ** 2 if use_screen_distance else SNAP_WORLD_DISTANCE ** 2 - if closest_point and closest_dist_sq < max_dist_sq: - return closest_point - - return location - - def _snap_from_cache( - self, - location: Vector, - mouse_vec: Vector | None, - region: bpy.types.Region | None, - rv3d: bpy.types.RegionView3D | None, - ) -> tuple[Vector | None, float]: - """Find closest vertex using cached KD-tree.""" - if self._snap_cache is None: - return None, float("inf") - - cache = self._snap_cache - return SnapManager._find_closest_vertex( - cache.all_vertices, location, mouse_vec, region, rv3d, - None, float("inf"), cache.kd_tree - ) - - def _snap_without_cache( - self, - location: Vector, - context: bpy.types.Context, - active_obj: bpy.types.Object, - mouse_vec: Vector | None, - region: bpy.types.Region | None, - rv3d: bpy.types.RegionView3D | None, - ) -> tuple[Vector | None, float]: - """Find closest vertex without cache (fallback path).""" - mesh_objects = [ - obj for obj in context.visible_objects - if obj.type == "MESH" and obj != active_obj and obj.visible_get() - ] - - if not mesh_objects: - return None, float("inf") - - nearby_objects = SnapManager._get_nearby_objects(mesh_objects, location) - if not nearby_objects: - return None, float("inf") - - closest_point: Vector | None = None - closest_dist_sq = float("inf") - depsgraph = context.evaluated_depsgraph_get() - - for obj in nearby_objects: - mesh_data = obj.data - if not hasattr(mesh_data, "vertices") or not mesh_data.vertices: - continue - - obj_eval = obj.evaluated_get(depsgraph) - mesh = obj_eval.to_mesh() - - try: - if not mesh or not mesh.vertices: - continue - - world_vertices = [obj_eval.matrix_world @ v.co for v in mesh.vertices] - closest_point, closest_dist_sq = SnapManager._find_closest_vertex( - world_vertices, location, mouse_vec, region, rv3d, - closest_point, closest_dist_sq - ) - finally: - obj_eval.to_mesh_clear() - - return closest_point, closest_dist_sq - - -_snap_manager = SnapManager() - - -def set_snap_point(point: tuple[float, float, float] | Vector | None) -> None: - _snap_manager.set_snap_point(point) - - -def clear_snap_point() -> None: - _snap_manager.clear() - - -def snap_to_mesh( - location: Vector, - context: bpy.types.Context, - active_obj: bpy.types.Object, - mouse_coords: tuple[float, float] | None = None, -) -> Vector: - return _snap_manager.snap_to_mesh(location, context, active_obj, mouse_coords) - - -def build_snap_cache(context: bpy.types.Context, active_obj: bpy.types.Object) -> None: - _snap_manager.build_snap_cache(context, active_obj) - - -def clear_snap_cache() -> None: - _snap_manager.clear_snap_cache() - - -def get_billboard_rotation(context: bpy.types.Context) -> Matrix: - """Get rotation matrix that makes an object face the camera.""" - rv3d = context.region_data - if rv3d is None: - return Matrix.Identity(4) - return rv3d.view_matrix.to_3x3().transposed().to_4x4() - - -def get_camera_direction(context: bpy.types.Context, position: Vector) -> Vector | None: - """Get normalized direction from position towards camera.""" - rv3d = context.region_data - if rv3d is None: - return None - - if rv3d.is_perspective: - view_origin = rv3d.view_matrix.inverted().translation - return (view_origin - position).normalized() - return Vector(rv3d.view_matrix.inverted().col[2][:3]).normalized() - - -def generate_circle_vertices( - center: tuple[float, float, float] | Vector, radius: float, segments: int, plane: str = "XY" -) -> list[tuple[float, float, float]]: - """Generate circle vertices in specified plane ('XY', 'XZ', or 'YZ').""" - vertices = [] - for i in range(segments + 1): - angle = (2 * math.pi * i) / segments - cos_a = radius * math.cos(angle) - sin_a = radius * math.sin(angle) - - if plane == "XY": - vertices.append((center[0] + cos_a, center[1] + sin_a, center[2])) - elif plane == "XZ": - vertices.append((center[0] + cos_a, center[1], center[2] + sin_a)) - else: - vertices.append((center[0], center[1] + cos_a, center[2] + sin_a)) - - return vertices - - -def create_circle_arc( - radius: float = 1.0, - segments: int = ARC_SEGMENTS, - direction: str = "LEFT", - line_width: float = ARC_LINE_WIDTH, - angle_min: float = 0.0, - angle_max: float = 90.0, -) -> tuple[tuple[float, float, float], ...]: - """Create a circle arc with cross-section thickness for visibility from all angles.""" - half_width = line_width / 2 - angle_min_rad = math.radians(angle_min) - angle_max_rad = math.radians(angle_max) - angle_range = angle_max_rad - angle_min_rad - - arc_points = [] - if direction == "LEFT": - for i in range(segments + 1): - angle = angle_min_rad + angle_range * (i / segments) - x = radius * math.cos(angle) - y = radius * math.sin(angle) - arc_points.append((x, y)) - else: - for i in range(segments + 1): - angle = angle_min_rad + angle_range * (i / segments) - x = -radius * math.cos(angle) - y = radius * math.sin(angle) - arc_points.append((x, y)) - - arc_triangles = [] - for i in range(len(arc_points) - 1): - x1, y1 = arc_points[i] - x2, y2 = arc_points[i + 1] - - dx, dy = x2 - x1, y2 - y1 - length = (dx**2 + dy**2) ** 0.5 - if length > 0: - px, py = -dy / length * half_width, dx / length * half_width - - arc_triangles.extend( - [ - (x1 + px, y1 + py, 0.0), - (x1 - px, y1 - py, 0.0), - (x2 + px, y2 + py, 0.0), - ] - ) - arc_triangles.extend( - [ - (x2 + px, y2 + py, 0.0), - (x1 - px, y1 - py, 0.0), - (x2 - px, y2 - py, 0.0), - ] - ) - - arc_triangles.extend( - [ - (x1, y1, -half_width), - (x2, y2, -half_width), - (x1, y1, +half_width), - ] - ) - arc_triangles.extend( - [ - (x1, y1, +half_width), - (x2, y2, -half_width), - (x2, y2, +half_width), - ] - ) - - return tuple(arc_triangles) - - -class BIM_OT_gizmo_value_input(bpy.types.Operator): - """Enter a numeric value for a gizmo property. Click or Enter to confirm, ESC to cancel.""" - - bl_idname = "bim.gizmo_value_input" - bl_label = "Gizmo Value Input" - bl_options = {"REGISTER", "UNDO", "INTERNAL"} - - prop_name: bpy.props.StringProperty(name="Property Name", default="Value") - init_value: bpy.props.FloatProperty(name="Initial Value", default=0.0) - invert_delta: bpy.props.BoolProperty(name="Invert Delta", default=False) - - def invoke(self, context, event): - self._keyboard_input = NumericInputState.create_default() - self._move_set_cb = _gizmo_value_input_callback.get("move_set_cb") - self._active_gizmo = _gizmo_value_input_callback.get("active_gizmo") - self._gizmo_group = _gizmo_value_input_callback.get("gizmo_group") - self._hidden_gizmos: list[bpy.types.Gizmo] = [] - self._original_color: tuple[float, float, float] | None = None - - # Mouse movement context - self._start_location: Vector = _gizmo_value_input_callback.get("start_location", Vector()) - self._axis_direction: Vector = _gizmo_value_input_callback.get("axis_direction", Vector((0, 0, 1))) - self._active_obj: bpy.types.Object | None = _gizmo_value_input_callback.get("active_obj") - self._delta_scale: float = _gizmo_value_input_callback.get("delta_scale", 1.0) - self._mouse_delta: float = 0.0 - - # Snapping state - self._initial_snap_state: bool = context.scene.tool_settings.use_snap - self._snap_cache_built: bool = False - self._is_snapping: bool = False - - self._hide_other_gizmos() - self._set_highlight_color() - - context.window_manager.modal_handler_add(self) - self._update_header(context) - return {"RUNNING_MODAL"} - - def _set_highlight_color(self) -> None: - if not self._active_gizmo: - return - self._original_color = tuple(self._active_gizmo.color) - self._active_gizmo.color = self._active_gizmo.color_highlight - - def _restore_color(self) -> None: - if self._active_gizmo and self._original_color: - self._active_gizmo.color = self._original_color - - def _hide_other_gizmos(self) -> None: - if not self._gizmo_group or not self._active_gizmo: - return - - # Store hidden gizmos so update_property_gizmos respects it. - hidden_set: set[bpy.types.Gizmo] = set() - for gizmo in self._gizmo_group.gizmos: - if gizmo != self._active_gizmo: - gizmo.hide = True - hidden_set.add(gizmo) - self._hidden_gizmos.append(gizmo) - - # Store in module-level dict so gizmo group methods can check it - _gizmo_value_input_callback["hidden_gizmos"] = hidden_set - - def _restore_gizmo_visibility(self) -> None: - # Clear the hidden set first so refresh doesn't re-hide. - _gizmo_value_input_callback.pop("hidden_gizmos", None) - for gizmo in self._hidden_gizmos: - gizmo.hide = False - self._hidden_gizmos.clear() - - def modal(self, context, event): - kb = self._keyboard_input - - # Character input - if event.value == "PRESS" and event.ascii and event.ascii.lower() in NUMERIC_INPUT_CHARS: - kb.characters.append(event.ascii) - kb.is_active = True - kb.parse() - self._apply_value() - self._update_header(context) - return {"RUNNING_MODAL"} - - if event.type == "BACK_SPACE" and event.value == "PRESS": - if kb.characters: - kb.characters.pop() - kb.parse() - self._apply_value() - self._update_header(context) - return {"RUNNING_MODAL"} - - if event.type in {"RET", "NUMPAD_ENTER"} and event.value == "PRESS": - if kb.is_valid: - self._apply_value() - self._cleanup(context) - return {"FINISHED"} - - if event.type == "LEFTMOUSE" and event.value == "PRESS": - if kb.characters: - if kb.is_valid: - self._apply_value() - self._cleanup(context) - return {"FINISHED"} - self._cleanup(context) - return {"CANCELLED"} - - if event.type == "ESC" and event.value == "PRESS": - if self._move_set_cb: - self._move_set_cb(self.init_value) - self._cleanup(context) - return {"CANCELLED"} - - if event.type == "RIGHTMOUSE" and event.value == "PRESS": - if self._move_set_cb: - self._move_set_cb(self.init_value) - self._cleanup(context) - return {"CANCELLED"} - - # Mouse movement - only when not typing - if event.type == "MOUSEMOVE" and not kb.characters: - self._handle_mouse_move(context, event) - return {"RUNNING_MODAL"} - - return {"RUNNING_MODAL"} - - def _handle_mouse_move(self, context, event) -> None: - region = context.region - rv3d = context.region_data - tool_settings = context.scene.tool_settings - if not region or not rv3d: - return - - # Ctrl toggles snapping - self._is_snapping = not self._initial_snap_state if event.ctrl else self._initial_snap_state - - # Build snap cache lazily on first Ctrl press - if self._is_snapping and not self._snap_cache_built and self._active_obj: - build_snap_cache(context, self._active_obj) - self._snap_cache_built = True - - current_coord = (event.mouse_region_x, event.mouse_region_y) - view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) - view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) - - result = intersect_line_line( - view_origin, - view_origin + view_direction * RAY_CAST_DISTANCE, - self._start_location, - self._start_location + self._axis_direction * RAY_CAST_DISTANCE, - ) - current_3d = result[1] if result else self._start_location - - delta = (current_3d - self._start_location).dot(self._axis_direction) - - # Snapping - if self._is_snapping and self._active_obj: - # Temporarily set tool_settings for snap_to_mesh - original_snap = tool_settings.use_snap - tool_settings.use_snap = True - snapped_pos = snap_to_mesh(current_3d, context, self._active_obj, current_coord) - tool_settings.use_snap = original_snap - if snapped_pos != current_3d: - delta = (snapped_pos - self._start_location).dot(self._axis_direction) - set_snap_point(snapped_pos) - else: - clear_snap_point() - else: - clear_snap_point() - - # Precision mode with Shift - if event.shift: - delta *= PRECISION_MODE_MULTIPLIER - - if self.invert_delta: - delta = -delta - - delta *= self._delta_scale - self._mouse_delta = delta - - if self._move_set_cb: - self._move_set_cb(self.init_value + delta) - - self._update_header(context) - - def _apply_value(self) -> None: - if not self._move_set_cb or not self._keyboard_input.is_valid: - return - final_value = self._keyboard_input.calculate_final_value(self.init_value, self.invert_delta) - self._move_set_cb(final_value) - - def _update_header(self, context) -> None: - if not context.area: - return - kb = self._keyboard_input - - if kb.characters: - # Typing mode - show keyboard input - input_str = kb.get_input_string() - preview = kb.calculate_final_value(self.init_value, self.invert_delta) - validity = "" if kb.is_valid else " [invalid]" - header = f"{self.prop_name}: {preview:.3f}m | Input: {input_str}_{validity}" - header += " | Click/Enter: Confirm | ESC: Cancel" - else: - # Mouse mode - show current value from mouse delta - current_value = self.init_value + self._mouse_delta - header = f"{self.prop_name}: {current_value:.3f}m" - hints = [] - if self._is_snapping: - hints.append("Snapping: ON") - hints.extend(["Ctrl: Snap", "Shift: Precision", "Type: Enter Value"]) - header += " | " + " | ".join(hints) - header += " | Click/Enter: Confirm | ESC: Cancel" - - context.area.header_text_set(header) - - def _cleanup(self, context) -> None: - try: - if context.area: - context.area.header_text_set(None) - finally: - try: - self._restore_color() - finally: - try: - self._restore_gizmo_visibility() - # Trigger gizmo group refresh to recalculate positions based on new values - if self._gizmo_group and hasattr(self._gizmo_group, "refresh"): - self._gizmo_group.refresh(context) - # Force viewport redraw to update gizmo display - if context.area: - context.area.tag_redraw() - finally: - clear_snap_point() - clear_snap_cache() - _gizmo_value_input_callback.clear() - - -class GizmoMovable(bpy.types.Gizmo): - """Base class for draggable gizmos. Ctrl: snap, Shift: precision, Keyboard: direct input. - - Click without dragging enters a keyboard-only input mode for accessibility. - """ - - __slots__ = ( - "custom_shape", - "init_value", - "move_get_cb", - "move_set_cb", - "axis", - "local_axis", - "start_location", - "active_obj", - "initial_snap_state", - "invert_delta", - "delta_scale", - "prop_name", - "keyboard_input", - "gizmo_group", - "_snap_cache_built", - "_start_mouse_pos", - "_has_dragged", - ) - - # Threshold in pixels for considering mouse movement as a drag - DRAG_THRESHOLD = 5 - - def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set: - self.init_value = self.move_get_cb() if self.move_get_cb else 0.0 - self.start_location = self.matrix_basis.translation.copy() - self.active_obj = context.active_object - self.initial_snap_state = context.scene.tool_settings.use_snap - self.keyboard_input = NumericInputState.create_default() - self._snap_cache_built = False - self._start_mouse_pos = (event.mouse_region_x, event.mouse_region_y) - self._has_dragged = False - if not hasattr(self, "prop_name") or self.prop_name is None: - self.prop_name = "Value" - # Build cache immediately only if snap is already enabled - if self.initial_snap_state and self.active_obj: - build_snap_cache(context, self.active_obj) - self._snap_cache_built = True - return {"RUNNING_MODAL"} - - def exit(self, context: bpy.types.Context, cancel: bool) -> None: - if context.area: - context.area.header_text_set(None) - if hasattr(self, "keyboard_input"): - self.keyboard_input.reset() - - # Check for click-without-drag: invoke keyboard input operator for accessibility - should_invoke_keyboard = ( - not cancel - and hasattr(self, "_has_dragged") - and not self._has_dragged - and self.move_set_cb is not None - ) - - if should_invoke_keyboard: - # Store callback and gizmo references in module-level dict - _gizmo_value_input_callback["move_set_cb"] = self.move_set_cb - _gizmo_value_input_callback["active_gizmo"] = self - _gizmo_value_input_callback["gizmo_group"] = getattr(self, "gizmo_group", None) - # Store context for mouse movement support - _gizmo_value_input_callback["start_location"] = self.start_location.copy() - _gizmo_value_input_callback["axis_direction"] = self.get_axis_direction() - _gizmo_value_input_callback["active_obj"] = self.active_obj - _gizmo_value_input_callback["delta_scale"] = getattr(self, "delta_scale", 1.0) - bpy.ops.bim.gizmo_value_input( - "INVOKE_DEFAULT", - prop_name=getattr(self, "prop_name", "Value"), - init_value=self.init_value, - invert_delta=getattr(self, "invert_delta", False), - ) - elif cancel and self.move_set_cb: - self.move_set_cb(self.init_value) - - if hasattr(self, "initial_snap_state"): - context.scene.tool_settings.use_snap = self.initial_snap_state - clear_snap_point() - clear_snap_cache() - - def get_axis_direction(self) -> Vector: - """Get the world-space axis direction, transforming local_axis if set.""" - if hasattr(self, "local_axis") and self.active_obj: - obj_rotation = self.active_obj.matrix_world.to_3x3() - axis_direction: Vector = obj_rotation @ self.local_axis - axis_direction.normalize() - return axis_direction - return self.axis - - def modal(self, context: bpy.types.Context, event: bpy.types.Event, tweak) -> set: - region = context.region - rv3d = context.region_data - tool_settings = context.scene.tool_settings - - keyboard_result = self._handle_keyboard_input(context, event) - if keyboard_result is not None: - return keyboard_result - - if self.keyboard_input.is_active: - return {"RUNNING_MODAL"} - - if not region or not rv3d: - return {"RUNNING_MODAL"} - - tool_settings.use_snap = not self.initial_snap_state if event.ctrl else self.initial_snap_state - - # Build snap cache lazily on first Ctrl press if not already built - if tool_settings.use_snap and not self._snap_cache_built and self.active_obj: - build_snap_cache(context, self.active_obj) - self._snap_cache_built = True - - current_coord = (event.mouse_region_x, event.mouse_region_y) - - # Detect if user has dragged beyond threshold - if not self._has_dragged and hasattr(self, "_start_mouse_pos"): - dx = current_coord[0] - self._start_mouse_pos[0] - dy = current_coord[1] - self._start_mouse_pos[1] - if (dx * dx + dy * dy) > (self.DRAG_THRESHOLD ** 2): - self._has_dragged = True - view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) - view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) - - axis_direction = self.get_axis_direction() - - result = intersect_line_line( - view_origin, - view_origin + view_direction * RAY_CAST_DISTANCE, - self.start_location, - self.start_location + axis_direction * RAY_CAST_DISTANCE, - ) - current_3d = result[1] if result else self.start_location - - delta = (current_3d - self.start_location).dot(axis_direction) - - if tool_settings.use_snap and self.active_obj: - snapped_pos = snap_to_mesh(current_3d, context, self.active_obj, current_coord) - if snapped_pos != current_3d: - delta = (snapped_pos - self.start_location).dot(axis_direction) - set_snap_point(snapped_pos) - else: - clear_snap_point() - else: - clear_snap_point() - - if event.shift: - delta *= PRECISION_MODE_MULTIPLIER - - if getattr(self, "invert_delta", False): - delta = -delta - - # Apply delta scale (e.g., 2.0 for symmetric thickness properties) - delta_scale = getattr(self, "delta_scale", 1.0) - delta *= delta_scale - - kb = self.keyboard_input - final_delta = kb.parsed_value if kb.parsed_value != 0.0 else delta - - if self.move_set_cb: - self.move_set_cb(self.init_value + final_delta) - - self._update_header(context, self.init_value + final_delta, tool_settings.use_snap, event.shift) - - return {"RUNNING_MODAL"} - - def _handle_keyboard_input( - self, context: bpy.types.Context, event: bpy.types.Event - ) -> set[str] | None: - """Handle keyboard numeric input.""" - kb = self.keyboard_input - - if event.value == "PRESS" and event.ascii and event.ascii.lower() in NUMERIC_INPUT_CHARS: - kb.characters.append(event.ascii) - kb.is_active = True - kb.parse() - self._apply_keyboard_value() - self._update_header_typing(context) - return {"RUNNING_MODAL"} - - if event.type == "BACK_SPACE" and event.value == "PRESS": - if kb.characters: - kb.characters.pop() - kb.parse() - self._apply_keyboard_value() - self._update_header_typing(context) - elif kb.is_active: - kb.reset() - if self.move_set_cb: - self.move_set_cb(self.init_value) - return {"RUNNING_MODAL"} - - if event.type in {"RET", "NUMPAD_ENTER"} and event.value == "PRESS": - if kb.is_active and kb.is_valid: - final_value = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) - kb.characters.clear() - kb.is_active = False - self._update_header(context, final_value, False, False) - return {"RUNNING_MODAL"} - - if event.type == "ESC" and event.value == "PRESS" and kb.is_active: - kb.reset() - if self.move_set_cb: - self.move_set_cb(self.init_value) - return {"RUNNING_MODAL"} - - return None - - def _apply_keyboard_value(self) -> None: - kb = self.keyboard_input - if self.move_set_cb and kb.is_valid: - final_value = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) - self.move_set_cb(final_value) - - def _update_header_typing(self, context: bpy.types.Context) -> None: - if not context.area: - return - kb = self.keyboard_input - input_str = kb.get_input_string() - preview = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) - - validity = "" if kb.is_valid else " [invalid]" - prop_display = getattr(self, "prop_name", "Value") - - header = f"{prop_display}: {preview:.3f}m | Input: {input_str}_{validity}" - header += " | Enter: Confirm | Backspace: Delete | ESC: Cancel" - context.area.header_text_set(header) - - def _update_header(self, context: bpy.types.Context, value: float, is_snapping: bool, is_precision: bool) -> None: - if not context.area: - return - prop_display = getattr(self, "prop_name", "Value") - hints = [] - if is_snapping: - hints.append("Snapping: ON") - if is_precision: - hints.append("Precision (0.1x)") - hints.extend(["Ctrl: Snap", "Shift: Precision", "Type: Enter Value"]) - - header_text = f"{prop_display}: {value:.3f}m | " + " | ".join(hints) - context.area.header_text_set(header_text) - - -class GizmoLock(bpy.types.Gizmo): - """Lock icon gizmo that switches between closed and open states.""" - - bl_idname = "VIEW3D_GT_lock" - - __slots__ = ( - "custom_shape_closed", - "custom_shape_open", - "prop_path", - ) - - tris_closed = ( - (-0.12838619947433472, 1.3143587112426758, 0.0), - (0.025773197412490845, 1.411454677581787, 0.0), - (-0.0144234299659729, 1.541273593902588, 0.0), - (-0.0144234299659729, 1.541273593902588, 0.0), - (0.025773197412490845, 1.411454677581787, 0.0), - (0.20782703161239624, 1.4184625148773193, 0.0), - (0.23792517185211182, 1.5509872436523438, 0.0), - (0.20782703161239624, 1.4184625148773193, 0.0), - (0.3689943850040436, 1.3335046768188477, 0.0), - (0.4613226056098938, 1.433225393295288, 0.0), - (0.3689943850040436, 1.3335046768188477, 0.0), - (0.4660903215408325, 1.1793451309204102, 0.0), - (0.5959094166755676, 1.2195416688919067, 0.0), - (0.4660903215408325, 1.1793451309204102, 0.0), - (0.47309836745262146, 0.997291088104248, 0.0), - (0.6056233048439026, 0.9671931266784668, 0.0), - (0.47309836745262146, 0.997291088104248, 0.0), - (0.3881405293941498, 0.8361238241195679, 0.0), - (-0.48786139488220215, 0.7437955141067505, 0.0), - (0.48786139488220215, 4.5077928945147505e-08, 0.0), - (0.48786139488220215, 0.7437955141067505, 0.0), - (-0.12838619947433472, 1.3143587112426758, 0.0), - (-0.0144234299659729, 1.541273593902588, 0.0), - (-0.22810709476470947, 1.406686782836914, 0.0), - (-0.0144234299659729, 1.541273593902588, 0.0), - (0.20782703161239624, 1.4184625148773193, 0.0), - (0.23792517185211182, 1.5509872436523438, 0.0), - (0.23792517185211182, 1.5509872436523438, 0.0), - (0.3689943850040436, 1.3335046768188477, 0.0), - (0.4613226056098938, 1.433225393295288, 0.0), - (0.4613226056098938, 1.433225393295288, 0.0), - (0.4660903215408325, 1.1793451309204102, 0.0), - (0.5959094166755676, 1.2195416688919067, 0.0), - (0.5959094166755676, 1.2195416688919067, 0.0), - (0.47309836745262146, 0.997291088104248, 0.0), - (0.6056233048439026, 0.9671931266784668, 0.0), - (0.6056233048439026, 0.9671931266784668, 0.0), - (0.3881405293941498, 0.8361238241195679, 0.0), - (0.48786142468452454, 0.74379563331604, 0.0), - (-0.48786139488220215, 0.7437955141067505, 0.0), - (-0.48786139488220215, 4.5077928945147505e-08, 0.0), - (0.48786139488220215, 4.5077928945147505e-08, 0.0), - ) - - tris_open = ( - (-0.3519617021083832, 0.7437955141067505, 0.0), - (-0.3048076927661896, 0.9197763204574585, 0.0), - (-0.4225003123283386, 0.9877263307571411, 0.0), - (-0.4225003123283386, 0.9877263307571411, 0.0), - (-0.3048076927661896, 0.9197763204574585, 0.0), - (-0.1759808510541916, 1.0486031770706177, 0.0), - (-0.24393069744110107, 1.1662957668304443, 0.0), - (-0.1759808510541916, 1.0486031770706177, 0.0), - (2.9078805141580233e-08, 1.0957571268081665, 0.0), - (2.9078805141580233e-08, 1.2316569089889526, 0.0), - (2.9078805141580233e-08, 1.0957571268081665, 0.0), - (0.1759808510541916, 1.0486031770706177, 0.0), - (0.243930846452713, 1.1662957668304443, 0.0), - (0.1759808510541916, 1.0486031770706177, 0.0), - (0.30480796098709106, 0.9197763204574585, 0.0), - (0.4225005805492401, 0.9877263307571411, 0.0), - (0.30480796098709106, 0.9197763204574585, 0.0), - (0.35196200013160706, 0.7437955141067505, 0.0), - (-0.48786139488220215, 0.7437955141067505, 0.0), - (0.48786139488220215, 4.5077928945147505e-08, 0.0), - (0.48786139488220215, 0.7437955141067505, 0.0), - (-0.3519617021083832, 0.7437955141067505, 0.0), - (-0.4225003123283386, 0.9877263307571411, 0.0), - (-0.48786139488220215, 0.7437955141067505, 0.0), - (-0.4225003123283386, 0.9877263307571411, 0.0), - (-0.1759808510541916, 1.0486031770706177, 0.0), - (-0.24393069744110107, 1.1662957668304443, 0.0), - (-0.24393069744110107, 1.1662957668304443, 0.0), - (2.9078805141580233e-08, 1.0957571268081665, 0.0), - (2.9078805141580233e-08, 1.2316569089889526, 0.0), - (2.9078805141580233e-08, 1.2316569089889526, 0.0), - (0.1759808510541916, 1.0486031770706177, 0.0), - (0.243930846452713, 1.1662957668304443, 0.0), - (0.243930846452713, 1.1662957668304443, 0.0), - (0.30480796098709106, 0.9197763204574585, 0.0), - (0.4225005805492401, 0.9877263307571411, 0.0), - (0.4225005805492401, 0.9877263307571411, 0.0), - (0.35196200013160706, 0.7437955141067505, 0.0), - (0.487861692905426, 0.74379563331604, 0.0), - (-0.48786139488220215, 0.7437955141067505, 0.0), - (-0.48786139488220215, 4.5077928945147505e-08, 0.0), - (0.48786139488220215, 4.5077928945147505e-08, 0.0), - ) - - def get_custom_shape(self, context: bpy.types.Context) -> object: - """Get the appropriate custom shape based on lock state.""" - obj = context.active_object - if not obj: - return self.custom_shape_closed - - try: - is_open = obj.path_resolve(self.prop_path) - return self.custom_shape_open if is_open else self.custom_shape_closed - except (ValueError, KeyError, AttributeError): - return self.custom_shape_closed - - def setup(self) -> None: - self.custom_shape_closed = self.new_custom_shape("TRIS", self.tris_closed) - self.custom_shape_open = self.new_custom_shape("TRIS", self.tris_open) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.get_custom_shape(context)) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.get_custom_shape(context), select_id=select_id) - - -class GizmoArc(bpy.types.Gizmo): - """Arc gizmo for door swing visualization.""" - - bl_idname = "VIEW3D_GT_arc" - - __slots__ = ( - "custom_shape_left", - "custom_shape_right", - "prop_path", - ) - - def setup(self) -> None: - """Create arc shapes for LEFT and RIGHT directions.""" - arc_left = create_circle_arc(radius=1.0, direction="LEFT", angle_min=2.0, angle_max=90.0) - arc_right = create_circle_arc(radius=1.0, direction="RIGHT", angle_min=2.0, angle_max=90.0) - - self.custom_shape_left = self.new_custom_shape(type="TRIS", verts=arc_left) - self.custom_shape_right = self.new_custom_shape(type="TRIS", verts=arc_right) - - def _get_shape_for_direction(self, context: bpy.types.Context) -> object: - """Get arc shape based on door swing direction.""" - obj = context.active_object - if not obj: - return self.custom_shape_left - - try: - direction_value = obj.path_resolve(self.prop_path) - if "RIGHT" in str(direction_value): - return self.custom_shape_right - except (ValueError, KeyError, AttributeError): - pass - - return self.custom_shape_left - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self._get_shape_for_direction(context)) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self._get_shape_for_direction(context), select_id=select_id) - - -class GizmoPen(bpy.types.Gizmo): - """Pen/edit icon gizmo for entering edit mode.""" - - bl_idname = "VIEW3D_GT_pen" - - __slots__ = ("custom_shape",) - - tris = ( - (-0.07595771551132202, -0.2948460578918457, 0.0), - (0.16886109113693237, 0.23203276097774506, 0.0), - (0.062240585684776306, 0.28157487511634827, 0.0), - (0.07201281189918518, 0.30260589718818665, 0.0), - (0.21042980253696442, 0.321493536233902, 0.0), - (0.17863331735134125, 0.25306373834609985, 0.0), - (0.062240585684776306, 0.28157487511634827, 0.0), - (-0.1825782209634781, -0.2453039139509201, 0.0), - (-0.07595771551132202, -0.2948460578918457, 0.0), - (-0.1825782209634781, -0.2453039139509201, 0.0), - (-0.19114767014980316, -0.4032624065876007, 0.0), - (-0.07595771551132202, -0.2948460578918457, 0.0), - (0.07201281189918518, 0.30260589718818665, 0.0), - (0.10380929708480835, 0.371035635471344, 0.0), - (0.21042980253696442, 0.321493536233902, 0.0), - ) - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self.tris) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - -class GizmoValidate(bpy.types.Gizmo): - """Validate/checkmark icon gizmo for confirming edits.""" - - bl_idname = "VIEW3D_GT_validate" - - __slots__ = ("custom_shape",) - - tris = ( - (0.36775994300842285, 0.205583393573761, 0.0), - (0.030080009251832962, -0.1881658434867859, 0.0), - (0.030080009251832962, -0.3380376696586609, 0.0), - (-0.22017201781272888, -0.16090886294841766, 0.0), - (0.030080009251832962, -0.1881658434867859, 0.0), - (-0.22017201781272888, -0.011037036776542664, 0.0), - (0.36775994300842285, 0.205583393573761, 0.0), - (0.36775994300842285, 0.355455219745636, 0.0), - (0.030080009251832962, -0.1881658434867859, 0.0), - (-0.22017201781272888, -0.16090886294841766, 0.0), - (0.030080009251832962, -0.3380376696586609, 0.0), - (0.030080009251832962, -0.1881658434867859, 0.0), - ) - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self.tris) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - -class GizmoCancel(bpy.types.Gizmo): - """Cancel/X icon gizmo for canceling edits.""" - - bl_idname = "VIEW3D_GT_cancel" - - __slots__ = ("custom_shape",) - - tris = ( - (0.0, 0.048707593232393265, 0.0), - (0.0, -0.048707593232393265, 0.0), - (0.048707593232393265, 0.0, 0.0), - (0.0, 0.048707593232393265, 0.0), - (-0.21918421983718872, 0.2678918242454529, 0.0), - (-0.048707593232393265, 0.0, 0.0), - (-0.21918421983718872, 0.2678918242454529, 0.0), - (-0.2678918242454529, 0.21918421983718872, 0.0), - (-0.048707593232393265, 0.0, 0.0), - (-0.048707593232393265, 0.0, 0.0), - (-0.2678918242454529, -0.21918421983718872, 0.0), - (-0.21918421983718872, -0.2678918242454529, 0.0), - (0.2678918242454529, 0.21918421983718872, 0.0), - (0.21918421983718872, 0.2678918242454529, 0.0), - (0.0, 0.048707593232393265, 0.0), - (0.21918421983718872, -0.2678918242454529, 0.0), - (0.2678918242454529, -0.21918421983718872, 0.0), - (0.048707593232393265, 0.0, 0.0), - (0.048707593232393265, 0.0, 0.0), - (0.2678918242454529, 0.21918421983718872, 0.0), - (0.0, 0.048707593232393265, 0.0), - (0.0, 0.048707593232393265, 0.0), - (-0.048707593232393265, 0.0, 0.0), - (0.0, -0.048707593232393265, 0.0), - (-0.048707593232393265, 0.0, 0.0), - (-0.21918421983718872, -0.2678918242454529, 0.0), - (0.0, -0.048707593232393265, 0.0), - (0.0, -0.048707593232393265, 0.0), - (0.21918421983718872, -0.2678918242454529, 0.0), - (0.048707593232393265, 0.0, 0.0), - ) - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self.tris) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - -class GizmoPlus(bpy.types.Gizmo): - """Plus icon gizmo for incrementing values.""" - - bl_idname = "VIEW3D_GT_plus" - - __slots__ = ("custom_shape",) - - tris = ( - (-0.375, -0.075, 0.0), - (-0.375, 0.075, 0.0), - (0.375, 0.075, 0.0), - (-0.375, -0.075, 0.0), - (0.375, 0.075, 0.0), - (0.375, -0.075, 0.0), - (-0.075, -0.375, 0.0), - (-0.075, 0.375, 0.0), - (0.075, 0.375, 0.0), - (-0.075, -0.375, 0.0), - (0.075, 0.375, 0.0), - (0.075, -0.375, 0.0), - ) - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self.tris) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - -class GizmoMinus(bpy.types.Gizmo): - """Minus icon gizmo for decrementing values.""" - - bl_idname = "VIEW3D_GT_minus" - - __slots__ = ("custom_shape",) - - tris = ( - (-0.375, -0.075, 0.0), - (-0.375, 0.075, 0.0), - (0.375, 0.075, 0.0), - (-0.375, -0.075, 0.0), - (0.375, 0.075, 0.0), - (0.375, -0.075, 0.0), - ) - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self.tris) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - -def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: - """Generate circular arrow geometry covering ~300 degrees.""" - triangles = [] - radius = 0.375 - line_width = 0.10 - half_width = line_width / 2 - - segments = 20 - start_angle = math.radians(30) - end_angle = math.radians(330) - angle_range = end_angle - start_angle - - arc_points = [] - for i in range(segments + 1): - angle = start_angle + angle_range * (i / segments) - x = radius * math.cos(angle) - y = radius * math.sin(angle) - arc_points.append((x, y)) - - for i in range(len(arc_points) - 1): - x1, y1 = arc_points[i] - x2, y2 = arc_points[i + 1] - - dx, dy = x2 - x1, y2 - y1 - length = (dx**2 + dy**2) ** 0.5 - if length > 0: - px, py = -dy / length * half_width, dx / length * half_width - - triangles.extend( - [ - (x1 + px, y1 + py, 0.0), - (x1 - px, y1 - py, 0.0), - (x2 + px, y2 + py, 0.0), - ] - ) - triangles.extend( - [ - (x2 + px, y2 + py, 0.0), - (x1 - px, y1 - py, 0.0), - (x2 - px, y2 - py, 0.0), - ] - ) - - triangles.extend( - [ - (x1, y1, -half_width), - (x2, y2, -half_width), - (x1, y1, +half_width), - ] - ) - triangles.extend( - [ - (x1, y1, +half_width), - (x2, y2, -half_width), - (x2, y2, +half_width), - ] - ) - - arrow_size = 0.30 - end_x, end_y = arc_points[-1] - prev_x, prev_y = arc_points[-2] - tangent_x = end_x - prev_x - tangent_y = end_y - prev_y - tangent_len = (tangent_x**2 + tangent_y**2) ** 0.5 - if tangent_len > 0: - tangent_x /= tangent_len - tangent_y /= tangent_len - - tip_x = end_x + tangent_x * arrow_size * 0.5 - tip_y = end_y + tangent_y * arrow_size * 0.5 - - perp_x = -tangent_y * arrow_size - perp_y = tangent_x * arrow_size - - triangles.extend( - [ - (tip_x, tip_y, 0.0), - (end_x - perp_x * 0.5, end_y - perp_y * 0.5, 0.0), - (end_x + perp_x * 0.5, end_y + perp_y * 0.5, 0.0), - ] - ) - - triangles.extend( - [ - (tip_x, tip_y, 0.0), - (end_x, end_y, -arrow_size * 0.5), - (end_x, end_y, +arrow_size * 0.5), - ] - ) - - return tuple(triangles) - - -class GizmoCycle(bpy.types.Gizmo): - """Circular arrow icon gizmo for cycling through enum values.""" - - bl_idname = "VIEW3D_GT_cycle" - - __slots__ = ("custom_shape",) - - tris = _generate_circular_arrow_tris() - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self.tris) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - -class GizmoArrow(GizmoMovable): - """Arrow gizmo for directional value editing.""" - - bl_idname = "BIM_GT_gizmo_arrow" - bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) - - def _get_arrow_triangles(self) -> tuple[tuple[float, float, float], ...]: - triangles = [] - - triangles.extend( - [ - (0, -ARROW_WIDTH, 0), - (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), - (0, +ARROW_WIDTH, 0), - ] - ) - triangles.extend( - [ - (0, +ARROW_WIDTH, 0), - (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), - (ARROW_SHAFT_LENGTH, +ARROW_WIDTH, 0), - ] - ) - - triangles.extend( - [ - (0, 0, -ARROW_WIDTH), - (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), - (0, 0, +ARROW_WIDTH), - ] - ) - triangles.extend( - [ - (0, 0, +ARROW_WIDTH), - (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), - (ARROW_SHAFT_LENGTH, 0, +ARROW_WIDTH), - ] - ) - - head_width = ARROW_WIDTH * ARROW_HEAD_WIDTH_MULTIPLIER - triangles.extend( - [ - (ARROW_SHAFT_LENGTH, -head_width, 0), - (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), - (ARROW_SHAFT_LENGTH, +head_width, 0), - ] - ) - - triangles.extend( - [ - (ARROW_SHAFT_LENGTH, 0, -head_width), - (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), - (ARROW_SHAFT_LENGTH, 0, +head_width), - ] - ) - - for i in range(ARROW_CIRCLE_SEGMENTS): - angle1 = (2 * math.pi * i) / ARROW_CIRCLE_SEGMENTS - angle2 = (2 * math.pi * (i + 1)) / ARROW_CIRCLE_SEGMENTS - - y1 = head_width * math.cos(angle1) - z1 = head_width * math.sin(angle1) - y2 = head_width * math.cos(angle2) - z2 = head_width * math.sin(angle2) - - triangles.extend( - [ - (ARROW_SHAFT_LENGTH, 0, 0), - (ARROW_SHAFT_LENGTH, y1, z1), - (ARROW_SHAFT_LENGTH, y2, z2), - ] - ) - - return tuple(triangles) - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self._get_arrow_triangles()) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - -class GizmoArrow2D(GizmoMovable): - """Flat 2D arrow that rotates around its axis to face the camera.""" - - bl_idname = "BIM_GT_gizmo_arrow_2d" - bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) - - ARROW_2D_SHAFT_LENGTH = 0.5 - ARROW_2D_HEAD_LENGTH = 0.5 - ARROW_2D_WIDTH = 0.25 - ARROW_2D_HEAD_WIDTH = 0.75 - - def _get_arrow_2d_triangles(self) -> tuple[tuple[float, float, float], ...]: - """Generate flat arrow geometry in XY plane, pointing along +X.""" - shaft = self.ARROW_2D_SHAFT_LENGTH - head = self.ARROW_2D_HEAD_LENGTH - w = self.ARROW_2D_WIDTH / 2 - hw = self.ARROW_2D_HEAD_WIDTH / 2 - - return ( - # Shaft - (0, -w, 0), (shaft, -w, 0), (0, w, 0), - (0, w, 0), (shaft, -w, 0), (shaft, w, 0), - # Head - (shaft, -hw, 0), (shaft + head, 0, 0), (shaft, hw, 0), - ) - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self._get_arrow_2d_triangles()) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - def draw_prepare(self, context: bpy.types.Context) -> None: - """Rotate around arrow axis to face camera.""" - position = self.matrix_basis.translation - to_camera = get_camera_direction(context, position) - if to_camera is None: - return - - axis_world = Vector(self.matrix_basis.col[0][:3]).normalized() - to_camera_projected = to_camera - axis_world * to_camera.dot(axis_world) - - if to_camera_projected.length_squared < 1e-6: - return - - to_camera_projected.normalize() - - local_z_world = Vector(self.matrix_basis.col[2][:3]).normalized() - local_z_projected = local_z_world - axis_world * local_z_world.dot(axis_world) - - if local_z_projected.length_squared < 1e-6: - return - - local_z_projected.normalize() - - cross = local_z_projected.cross(to_camera_projected) - dot = local_z_projected.dot(to_camera_projected) - sign = 1.0 if cross.dot(axis_world) >= 0 else -1.0 - angle = sign * math.acos(max(-1.0, min(1.0, dot))) - - axis_rot = Matrix.Rotation(angle, 4, "X") - current_scale = self.matrix_offset.to_scale() if self.matrix_offset else Vector((1, 1, 1)) - self.matrix_offset = axis_rot @ Matrix.Scale(current_scale[0], 4) - - -class GizmoCone(GizmoMovable): - """Cone gizmo for directional value editing.""" - - bl_idname = "BIM_GT_gizmo_cone" - bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) - - def _get_cone_triangles(self) -> tuple[tuple[float, float, float], ...]: - triangles = [] - cone_tip_x = CONE_LENGTH - - for i in range(CONE_SEGMENTS): - angle1 = (2 * math.pi * i) / CONE_SEGMENTS - angle2 = (2 * math.pi * (i + 1)) / CONE_SEGMENTS - - y1 = CONE_RADIUS * math.cos(angle1) - z1 = CONE_RADIUS * math.sin(angle1) - y2 = CONE_RADIUS * math.cos(angle2) - z2 = CONE_RADIUS * math.sin(angle2) - - triangles.extend( - [ - (cone_tip_x, 0, 0), - (0, y1, z1), - (0, y2, z2), - ] - ) - - triangles.extend( - [ - (0, 0, 0), - (0, y2, z2), - (0, y1, z1), - ] - ) - - return tuple(triangles) - - def setup(self) -> None: - self.custom_shape = self.new_custom_shape("TRIS", self._get_cone_triangles()) - - def draw(self, context: bpy.types.Context) -> None: - self.draw_custom_shape(self.custom_shape) - - def draw_select(self, context: bpy.types.Context, select_id: int) -> None: - self.draw_custom_shape(self.custom_shape, select_id=select_id) - - -class BaseParametricGizmoGroup: - """Base mixin for parametric element gizmo groups (doors, windows, etc.).""" - - COLOR_RED = (1.0, 0.2, 0.2) - COLOR_GREEN = (0.1, 0.8, 0.1) - COLOR_BLUE = (0.3, 0.3, 1.0) - ARROW_SCALE = 0.25 - - # Subclasses must define these - gizmo_props: list[GizmoPropConfig] = [] - enable_editing_operator: str = "" - finish_editing_operator: str = "" - cancel_editing_operator: str = "" - cycle_type_operator: str = "" - - @classmethod - def get_arrow_color_from_axis(cls, axis: tuple[int, int, int]) -> tuple[float, float, float]: - if axis[0] != 0: - return cls.COLOR_RED - elif axis[1] != 0: - return cls.COLOR_GREEN - return cls.COLOR_BLUE - - def get_axis_rotation_matrix(self, axis: tuple[int, int, int]) -> Matrix: - axis_vec = Vector(axis).normalized() - default_dir = Vector((1, 0, 0)) - return default_dir.rotation_difference(axis_vec).to_matrix().to_4x4() - - @classmethod - def is_element_type(cls, element) -> bool: - raise NotImplementedError("Subclass must implement is_element_type()") - - @classmethod - def poll(cls, context) -> bool: - prefs = tool.Blender.get_addon_preferences() - if not prefs.gizmos.draw_gizmos_in_3d_viewport: - return False - - obj = tool.Blender.get_active_object(is_selected=True) - if not obj: - return False - - if len(tool.Blender.get_selected_objects()) != 1: - return False - - element = tool.Ifc.get_entity(obj) - if not element or not cls.is_element_type(element): - return False - return True - - def get_props(self, obj: bpy.types.Object) -> Any: - raise NotImplementedError("Subclass must implement get_props()") - - def get_gizmo_prefs(self) -> Any: - raise NotImplementedError("Subclass must implement get_gizmo_prefs()") - - def get_prop_min_value(self, attr_name: str) -> float: - return 0.0 - - def should_hide_gizmo(self, attr_name: str, props) -> bool: - return not props.is_editing - - def get_element_height(self, props) -> float: - return getattr(props, "overall_height", getattr(props, "height", 1.0)) - - def setup_property_gizmos(self, context: bpy.types.Context) -> None: - prefs = tool.Blender.get_addon_preferences() - highlight_color = prefs.decorator_color_selected[:3] - - for prop_config in self.gizmo_props: - attr_name = prop_config.attr_name - invert_delta = prop_config.invert_delta - gizmo = self.gizmos.new("BIM_GT_gizmo_arrow_2d") - - def make_move_get(name): - def move_get(): - obj = bpy.context.active_object - if not obj: - return 0.0 - props = self.get_props(obj) - return getattr(props, name) - - return move_get - - def make_move_set(name): - def move_set(value): - obj = bpy.context.active_object - if not obj: - return - props = self.get_props(obj) - min_val = self.get_prop_min_value(name) - setattr(props, name, max(min_val, value)) - - return move_set - - gizmo.move_get_cb = make_move_get(attr_name) - gizmo.move_set_cb = make_move_set(attr_name) - gizmo.axis = Vector(prop_config.axis) - gizmo.local_axis = Vector(prop_config.axis) - gizmo.invert_delta = invert_delta - gizmo.delta_scale = prop_config.delta_scale - - gizmo.prop_name = attr_name.replace("_", " ").title() - gizmo.gizmo_group = self - - gizmo.color = self.get_arrow_color_from_axis(prop_config.axis) - gizmo.color_highlight = highlight_color - gizmo.alpha = 0.99 - gizmo.use_draw_modal = True - gizmo.use_draw_scale = True - - setattr(self, f"gizmo_{attr_name}", gizmo) - - def setup_editing_gizmos(self, context: bpy.types.Context) -> None: - prefs = tool.Blender.get_addon_preferences() - default_color = prefs.decorations_colour[:3] - highlight_color = prefs.decorator_color_selected[:3] - - self.pen_gizmo = self.gizmos.new("VIEW3D_GT_pen") - self.pen_gizmo.use_draw_scale = False - self.pen_gizmo.color = default_color - self.pen_gizmo.color_highlight = highlight_color - self.pen_gizmo.alpha = 0.8 - self.pen_gizmo.target_set_operator(self.enable_editing_operator) - - self.validate_gizmo = self.gizmos.new("VIEW3D_GT_validate") - self.validate_gizmo.use_draw_scale = False - self.validate_gizmo.color = self.COLOR_GREEN - self.validate_gizmo.color_highlight = highlight_color - self.validate_gizmo.alpha = 0.8 - self.validate_gizmo.target_set_operator(self.finish_editing_operator) - - self.cancel_gizmo = self.gizmos.new("VIEW3D_GT_cancel") - self.cancel_gizmo.use_draw_scale = False - self.cancel_gizmo.color = self.COLOR_RED - self.cancel_gizmo.color_highlight = highlight_color - self.cancel_gizmo.alpha = 0.8 - self.cancel_gizmo.target_set_operator(self.cancel_editing_operator) - - if self.cycle_type_operator: - self.cycle_gizmo = self.gizmos.new("VIEW3D_GT_cycle") - self.cycle_gizmo.use_draw_scale = False - self.cycle_gizmo.color = default_color - self.cycle_gizmo.color_highlight = highlight_color - self.cycle_gizmo.alpha = 0.8 - self.cycle_gizmo.target_set_operator(self.cycle_type_operator) - - def update_property_gizmos(self, mw, props) -> None: - gizmo_prefs = self.get_gizmo_prefs() - # Check if keyboard input modal is hiding gizmos - hidden_by_modal = _gizmo_value_input_callback.get("hidden_gizmos", set()) - - for prop_config in self.gizmo_props: - attr_name = prop_config.attr_name - gizmo = getattr(self, f"gizmo_{attr_name}", None) - if gizmo is None: - continue - - # Respect gizmos hidden by keyboard input modal - if gizmo in hidden_by_modal: - gizmo.hide = True - continue - - if not getattr(gizmo_prefs, attr_name, True): - gizmo.hide = True - continue - - if self.should_hide_gizmo(attr_name, props): - gizmo.hide = True - continue - - gizmo.hide = False - matrix_method = getattr(self, f"get_gizmo_matrix_{attr_name}", None) - if matrix_method: - gizmo.matrix_basis = mw @ matrix_method(props) - gizmo.matrix_offset = Matrix.Scale(self.ARROW_SCALE, 4) - - def update_editing_gizmos(self, context: bpy.types.Context, mw, props) -> None: - icon_z = self.get_element_height(props) + 0.5 - billboard_rot = get_billboard_rotation(context) - # Check if keyboard input modal is hiding gizmos - hidden_by_modal = _gizmo_value_input_callback.get("hidden_gizmos", set()) - - local_transform = ( - Matrix.Translation(Vector((0, 0.0, icon_z))) - @ billboard_rot - @ Matrix.Scale(0.5, 4) - ) - icon_matrix_base = mw @ local_transform - - if props.is_editing: - self.pen_gizmo.hide = True - self.validate_gizmo.hide = self.validate_gizmo in hidden_by_modal - self.validate_gizmo.matrix_basis = icon_matrix_base - self.cancel_gizmo.hide = self.cancel_gizmo in hidden_by_modal - cancel_local = Matrix.Translation(Vector((0.5, 0.0, 0.0))) @ local_transform - self.cancel_gizmo.matrix_basis = mw @ cancel_local - if self.cycle_type_operator: - self.cycle_gizmo.hide = self.cycle_gizmo in hidden_by_modal - cycle_transform = ( - Matrix.Translation(Vector((0, 0.0, icon_z))) - @ billboard_rot - @ Matrix.Scale(0.30, 4) - ) - cycle_local = Matrix.Translation(Vector((0.87, 0.0, 0.0))) @ cycle_transform - self.cycle_gizmo.matrix_basis = mw @ cycle_local - else: - self.pen_gizmo.hide = self.pen_gizmo in hidden_by_modal - self.pen_gizmo.matrix_basis = icon_matrix_base - self.validate_gizmo.hide = True - self.cancel_gizmo.hide = True - if self.cycle_type_operator: - self.cycle_gizmo.hide = True - - def draw_prepare(self, context: bpy.types.Context) -> None: - """Called before drawing - updates gizmos to face camera.""" - obj = context.active_object - if not obj: - return - props = self.get_props(obj) - mw = obj.matrix_world - self.update_editing_gizmos(context, mw, props) - - for prop_config in self.gizmo_props: - gizmo = getattr(self, f"gizmo_{prop_config.attr_name}", None) - if gizmo and hasattr(gizmo, "draw_prepare") and not gizmo.hide: - gizmo.draw_prepare(context) diff --git a/src/bonsai/bonsai/bim/module/drawing/__init__.py b/src/bonsai/bonsai/bim/module/drawing/__init__.py index 187020fc77..8153671f09 100644 --- a/src/bonsai/bonsai/bim/module/drawing/__init__.py +++ b/src/bonsai/bonsai/bim/module/drawing/__init__.py @@ -111,9 +111,22 @@ classes = ( ui.BIM_PT_text, ui.BIM_UL_drawinglist, ui.BIM_UL_sheets, + # Core gizmos (shared across modules) + gizmos.BIM_OT_gizmo_value_input, + gizmos.GizmoArrow, + gizmos.GizmoArrow2D, + gizmos.GizmoCone, + gizmos.GizmoDimension, + gizmos.GizmoLock, + gizmos.GizmoArc, + gizmos.GizmoPen, + gizmos.GizmoValidate, + gizmos.GizmoCancel, + gizmos.GizmoPlus, + gizmos.GizmoMinus, + gizmos.GizmoCycle, + # Drawing-specific gizmos gizmos.UglyDotGizmo, - gizmos.DotGizmo, - gizmos.DimensionLabelGizmo, gizmos.ExtrusionGuidesGizmo, gizmos.ExtrusionWidget, workspace.LaunchAnnotationTypeManager, diff --git a/src/bonsai/bonsai/bim/module/drawing/gizmos.py b/src/bonsai/bonsai/bim/module/drawing/gizmos.py index 34458c0920..17b0b33159 100644 --- a/src/bonsai/bonsai/bim/module/drawing/gizmos.py +++ b/src/bonsai/bonsai/bim/module/drawing/gizmos.py @@ -1,4 +1,5 @@ # Bonsai - OpenBIM Blender Add-on +# Copyright (C) 2020, 2021 Dion Moult # Copyright (C) 2020, 2021 Maxim Vasilyev # # This file is part of Bonsai. @@ -16,48 +17,1348 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy +""" +Gizmo infrastructure for parametric BIM element editing. + +This module provides a framework for interactive 3D gizmos that allow users to +manipulate parametric properties of BIM elements (doors, windows, stairs) directly +in the viewport. + +Architecture Overview +===================== + +The gizmo system follows a configuration-driven approach where element-specific +gizmo groups (e.g., GizmoDoorEdition) inherit from BaseParametricGizmoGroup and +declare their gizmos via configuration dataclasses: + + class GizmoDoorEdition(bpy.types.GizmoGroup, BaseParametricGizmoGroup): + dimension_gizmo_props = [ + DimensionGizmoConfig("overall_width", axis=(1, 0, 0)), + DimensionGizmoConfig("overall_height", axis=(0, 0, 1)), + ] + +Key Components +============== + +Configuration Classes: + - DimensionGizmoConfig: Configures dimension line gizmos with text display + +Base Gizmo Classes: + - GizmoMovable: Base for draggable gizmos with keyboard input support + - GizmoDimension: Dimension line gizmo with arrows and text labels + - GizmoArrow2D: 2D arrow gizmo for property manipulation + +Mixin Classes: + - BaseParametricGizmoGroup: Provides common setup/update methods for gizmo groups + +Utility Classes: + - GPUStateScope: Context manager for GPU state save/restore + - NumericInputState: Tracks keyboard numeric input during modal operations + +Global State: + - _gizmo_modal_context: Module-level dataclass instance for modal operator communication + (workaround for Blender's ID property limitations) + +Data Flow +========= + +1. User selects a parametric element (door, window, stair) +2. GizmoGroup.poll() checks if gizmos should be shown +3. GizmoGroup.setup() creates gizmos based on configs +4. GizmoGroup.refresh() updates gizmo positions from element properties +5. User interacts with gizmo -> invoke() -> modal() -> exit() +6. Property changes are written back via move_set_cb callbacks +7. Element mesh is regenerated via operators (e.g., bim.finish_editing_door) + +Snapping System +=============== + +The module includes a mesh vertex snapping system: + - build_snap_cache(): Builds KD-tree from nearby object vertices + - snap_to_mesh(): Snaps 3D position to nearest vertex within threshold + - Uses screen-space distance filtering for accurate snapping + +View-Dependent Positioning +========================== + +Dimension gizmos automatically reposition based on camera view direction to avoid +overlapping with geometry. The get_local_view_direction() helper determines if the +camera is viewing from the positive or negative side of each axis. +""" + +__all__ = [ + "DimensionGizmoConfig", + "NumericInputState", + "GPUStateScope", + "set_snap_point", + "clear_snap_point", + "snap_to_mesh", + "build_snap_cache", + "clear_snap_cache", + "get_billboard_rotation", + "get_camera_direction", + "generate_circle_vertices", + "create_circle_arc", + "BIM_OT_gizmo_value_input", + "GizmoMovable", + "GizmoLock", + "GizmoArc", + "GizmoPen", + "GizmoValidate", + "GizmoCancel", + "GizmoPlus", + "GizmoMinus", + "GizmoCycle", + "GizmoArrow", + "GizmoArrow2D", + "GizmoCone", + "GizmoDimension", + "DimensionRenderer", + "BaseParametricGizmoGroup", + "UglyDotGizmo", + "ExtrusionGuidesGizmo", + "ExtrusionWidget", +] + +from typing import Any, Callable, Iterator + import blf +import bpy import gpu -import bonsai.tool as tool +import math +import numpy as np from bpy import types -from mathutils import Vector -from mathutils import geometry +from dataclasses import dataclass +from mathutils import Vector, Matrix +from mathutils.kdtree import KDTree +from mathutils.geometry import intersect_line_line +from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d, location_3d_to_region_2d from bpy_extras import view3d_utils -from bonsai.bim.module.drawing.shaders import DotsGizmoShader, ExtrusionGuidesShader +from gpu_extras.batch import batch_for_shader +import bonsai.tool as tool +from bonsai.tool.unit import parse_distance_string +from bonsai.bim.module.drawing.shaders import ExtrusionGuidesShader from ifcopenshell.util.unit import si_conversions -"""Gizmos under the hood +SNAP_POINT_SIZE = 10.0 +SNAP_POINT_COLOR = (1.0, 0.5, 0.0, 1.0) +SNAP_MAX_RADIUS = 50.0 +SNAP_SCREEN_DISTANCE = 15 +SNAP_WORLD_DISTANCE = 0.2 +# Query multiple 3D-nearest candidates because screen-nearest may differ from 3D-nearest +SNAP_KD_CANDIDATES = 64 -## Transforms: +ARROW_SHAFT_LENGTH = 0.8 +ARROW_HEAD_LENGTH = 0.2 +ARROW_WIDTH = 0.015 +ARROW_HEAD_WIDTH_MULTIPLIER = 10 +ARROW_CIRCLE_SEGMENTS = 8 -source/blender/windowmanager/gizmo/WM_gizmo_types.h -matrix_basis -- "Transformation of this gizmo." = placement in scene -matrix_offset -- "Custom offset from origin." = local transforms according to state/value -matrix_space -- "The space this gizmo is being modified in." used by some gizmos for undefined purposes -matrix_world -- final matrix, scaled according to viewport zoom and custom scale_basis +CONE_LENGTH = 1.0 +CONE_RADIUS = 0.35 +CONE_SEGMENTS = 16 -source/blender/windowmanager/gizmo/intern/wm_gizmo.c:WM_gizmo_calc_matrix_final_params -final = space @ (autoscale * (basis @ offset)) -final = space @ (basis @ offset) -- if gizmo.use_draw_scale == False -final = space @ ((autoscale * basis) @ offset) -- if gizmo.use_draw_offset_scale +ARC_SEGMENTS = 24 +ARC_LINE_WIDTH = 0.015 -source/blender/windowmanager/gizmo/intern/wm_gizmo.c:wm_gizmo_calculate_scale -autoscale = gizmo.scale_basis * magic(preferences, matrix_space, matrix_basis, context.region_data) -magic -- making 1.0 to match preferences.view.gizmo_size pixels (75 by default) +PRECISION_MODE_MULTIPLIER = 0.1 + +RAY_CAST_DISTANCE = 1000 +DEFAULT_POINT_SIZE = 1.0 + +# Characters allowed for keyboard numeric input (supports units and formulas) +_DIGITS = set("0123456789") +_OPERATORS = {".", "-", "+", "*", "/"} +_METRIC_UNITS = {"m", "c", "d"} # m, cm, dm, mm +_IMPERIAL_UNITS = {"f", "t", "i", "n", "'", '"'} # ft, in, ', " +_SPECIAL = {"=", " "} # Formula prefix, spaces + +NUMERIC_INPUT_CHARS = _DIGITS | _OPERATORS | _METRIC_UNITS | _IMPERIAL_UNITS | _SPECIAL -## Selection +@dataclass +class GizmoModalContext: + """Typed context for modal gizmo operations. -select_id -- apparently, id of a selectable part -test_select -- expected to return id of selection, doesn't seem to work -draw_select -- fake-draw of selection geometry for gpu-side cursor tracking + This replaces the untyped dict pattern for passing state between gizmos + and the BIM_OT_gizmo_value_input modal operator. Blender ID properties + don't support function callbacks, so we use this module-level instance. -""" + Attributes: + move_set_cb: Callback to set the property value + active_gizmo: The gizmo currently being manipulated + gizmo_group: The gizmo group containing the active gizmo + start_location: World-space position where interaction started + axis_direction: Direction vector for the gizmo axis + active_obj: The Blender object being edited + delta_scale: Multiplier for delta values (e.g., 2.0 for symmetric properties) + click_offset: Offset from click position to gizmo tip + hidden_gizmos: Set of gizmos hidden during modal operation + """ + + move_set_cb: Callable[[float], None] | None = None + active_gizmo: bpy.types.Gizmo | None = None + gizmo_group: bpy.types.GizmoGroup | None = None + start_location: Vector | None = None + axis_direction: Vector | None = None + active_obj: bpy.types.Object | None = None + delta_scale: float = 1.0 + click_offset: float = 0.0 + hidden_gizmos: set[bpy.types.Gizmo] | None = None + + def clear(self) -> None: + """Reset all fields to default values.""" + self.move_set_cb = None + self.active_gizmo = None + self.gizmo_group = None + self.start_location = None + self.axis_direction = None + self.active_obj = None + self.delta_scale = 1.0 + self.click_offset = 0.0 + self.hidden_gizmos = None -# some geometries for Gizmo.custom_shape shaders +# Module-level instance for modal gizmo context +_gizmo_modal_context = GizmoModalContext() + + +class GPUStateScope: + """Context manager for saving and restoring GPU state. + + Automatically saves GPU state on entry and restores it on exit, + ensuring proper cleanup even if an exception occurs. + + Usage: + with GPUStateScope(depth_test='NONE', blend='ALPHA'): + ... + + with GPUStateScope(depth_test='NONE', blend='ALPHA', ortho_2d=(width, height)): + # 2D screen-space drawing + ... + """ + + __slots__ = ( + "_saved_depth_test", + "_saved_blend", + "_saved_projection", + "_saved_modelview", + "_depth_test", + "_blend", + "_ortho_2d", + ) + + def __init__( + self, + depth_test: str | None = None, + blend: str | None = None, + ortho_2d: tuple[float, float] | None = None, + ): + """Initialize with optional state overrides. + + Args: + depth_test: Depth test mode ('NONE', 'LESS', 'LESS_EQUAL', etc.) or None to keep current + blend: Blend mode ('NONE', 'ALPHA', 'ALPHA_PREMULT', etc.) or None to keep current + ortho_2d: If provided, set up 2D orthographic projection with (width, height) + """ + self._depth_test = depth_test + self._blend = blend + self._ortho_2d = ortho_2d + self._saved_depth_test: str = "" + self._saved_blend: str = "" + self._saved_projection: Matrix | None = None + self._saved_modelview: Matrix | None = None + + def __enter__(self) -> "GPUStateScope": + self._saved_depth_test = gpu.state.depth_test_get() + self._saved_blend = gpu.state.blend_get() + + if self._depth_test is not None: + gpu.state.depth_test_set(self._depth_test) + if self._blend is not None: + gpu.state.blend_set(self._blend) + + if self._ortho_2d is not None: + self._saved_projection = gpu.matrix.get_projection_matrix() + self._saved_modelview = gpu.matrix.get_model_view_matrix() + + width, height = self._ortho_2d + ortho = Matrix.Identity(4) + ortho[0][0] = 2.0 / width + ortho[0][3] = -1.0 + ortho[1][1] = 2.0 / height + ortho[1][3] = -1.0 + ortho[2][2] = -1.0 + + gpu.matrix.load_matrix(Matrix.Identity(4)) + gpu.matrix.load_projection_matrix(ortho) + + return self + + def __exit__(self, exc_type, exc_val, exc_tb) -> None: + if self._saved_projection is not None: + gpu.matrix.load_projection_matrix(self._saved_projection) + if self._saved_modelview is not None: + gpu.matrix.load_matrix(self._saved_modelview) + + gpu.state.depth_test_set(self._saved_depth_test) + gpu.state.blend_set(self._saved_blend) + return None + + +class DimensionTextRenderer: + """Handles text rendering for dimension gizmos. + + Extracted from GizmoDimension to follow Single Responsibility Principle. + This class manages all text drawing operations including value text, + property tooltips, and text backgrounds. + + Usage: + renderer = DimensionTextRenderer.get_instance() + renderer.draw_value_text(context, screen_pos, perpendicular, value, color) + renderer.draw_property_tooltip(context, screen_pos, prop_name, color) + """ + + _instance: "DimensionTextRenderer | None" = None + _tri_shader = None + + # Text rendering parameters + VALUE_FONT_SIZE = 11 + TOOLTIP_FONT_SIZE = 10 + TEXT_PADDING = 3 + TOOLTIP_OFFSET = 15 + BACKGROUND_ALPHA = 0.7 + + @classmethod + def get_instance(cls) -> "DimensionTextRenderer": + """Get singleton instance of the text renderer.""" + if cls._instance is None: + cls._instance = cls() + return cls._instance + + @classmethod + def _get_tri_shader(cls): + """Get cached UNIFORM_COLOR shader for triangles.""" + if cls._tri_shader is None: + cls._tri_shader = gpu.shader.from_builtin("UNIFORM_COLOR") + return cls._tri_shader + + def draw_value_text( + self, + context: bpy.types.Context, + screen_pos: tuple[float, float], + perpendicular: Vector, + value: float, + color: tuple[float, float, float], + offset_sign: int = 1, + alignment: str = "center", + ) -> None: + """Draw formatted dimension value text at the given screen position. + + Args: + context: Blender context + screen_pos: Screen-space position (x, y) + perpendicular: Perpendicular direction vector for offset + value: Dimension value to format and display + color: Text color (r, g, b) + offset_sign: 1 for above/right, -1 for below/left + alignment: "center" or "start" + """ + text = tool.Unit.format_distance(value) + + font_id = 0 + font_size = tool.Blender.scale_font_size(self.VALUE_FONT_SIZE) + blf.size(font_id, font_size) + blf.enable(font_id, blf.SHADOW) + blf.shadow(font_id, 6, 0, 0, 0, 1) + + text_width, text_height = blf.dimensions(font_id, text) + offset_distance = (text_height + 4) * offset_sign + + if alignment == "start": + text_x = screen_pos[0] + perpendicular[0] * offset_distance + text_y = screen_pos[1] - text_height / 2 + perpendicular[1] * offset_distance + else: + text_x = screen_pos[0] - text_width / 2 + perpendicular[0] * offset_distance + text_y = screen_pos[1] - text_height / 2 + perpendicular[1] * offset_distance + + self._draw_text_background(context, text_x, text_y, text_width, text_height) + + blf.color(font_id, *color, 1.0) + blf.position(font_id, text_x, text_y, 0) + blf.draw(font_id, text) + blf.disable(font_id, blf.SHADOW) + + def draw_property_tooltip( + self, + context: bpy.types.Context, + screen_pos: tuple[float, float], + prop_name: str, + color: tuple[float, float, float], + ) -> None: + """Draw a tooltip showing the property name near the given screen position. + + Args: + context: Blender context + screen_pos: Screen-space position (x, y) + prop_name: Property name to display (will be converted to Title Case) + color: Text color (r, g, b) + """ + prop_display = prop_name.replace("_", " ").title() + + font_id = 0 + font_size = tool.Blender.scale_font_size(self.TOOLTIP_FONT_SIZE) + blf.size(font_id, font_size) + blf.enable(font_id, blf.SHADOW) + blf.shadow(font_id, 6, 0, 0, 0, 1) + + text_width, text_height = blf.dimensions(font_id, prop_display) + + tooltip_x = screen_pos[0] + self.TOOLTIP_OFFSET + tooltip_y = screen_pos[1] + self.TOOLTIP_OFFSET + + self._draw_text_background(context, tooltip_x, tooltip_y, text_width, text_height) + + blf.color(font_id, *color, 1.0) + blf.position(font_id, tooltip_x, tooltip_y, 0) + blf.draw(font_id, prop_display) + blf.disable(font_id, blf.SHADOW) + + def _draw_text_background( + self, + context: bpy.types.Context, + x: float, + y: float, + width: float, + height: float, + ) -> None: + """Draw a semi-transparent background behind text.""" + padding = self.TEXT_PADDING + theme = context.preferences.themes.items()[0][1] + bg_color = (*theme.user_interface.wcol_menu_back.inner[:3], self.BACKGROUND_ALPHA) + + vertices = [ + (x - padding, y - padding), + (x + width + padding, y - padding), + (x + width + padding, y + height + padding), + (x - padding, y + height + padding), + ] + indices = [(0, 1, 2), (0, 2, 3)] + + shader = self._get_tri_shader() + shader.bind() + batch = batch_for_shader(shader, "TRIS", {"pos": vertices}, indices=indices) + shader.uniform_float("color", bg_color) + batch.draw(shader) + + +class DimensionRenderer: + """Handles rendering of dimension line graphics. + + Extracted from GizmoDimension to follow Single Responsibility Principle. + This class manages all dimension drawing operations including lines, + arrows, and extension lines in screen space. + + Usage: + renderer = DimensionRenderer.get_instance() + renderer.draw(context, start_world, end_world, ...) + """ + + _instance: "DimensionRenderer | None" = None + _line_shader = None + _tri_shader = None + + # Visual parameters (in pixels) + ARROW_SIZE = 10 + EXTENSION_LENGTH = 4 + LINE_WIDTH = 2.0 + MIN_PIXELS_FOR_DETAILS = 35 + + @classmethod + def get_instance(cls) -> "DimensionRenderer": + """Get singleton instance of the dimension renderer.""" + if cls._instance is None: + cls._instance = cls() + return cls._instance + + @classmethod + def _get_line_shader(cls): + """Get cached POLYLINE_UNIFORM_COLOR shader.""" + if cls._line_shader is None: + cls._line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR") + return cls._line_shader + + @classmethod + def _get_tri_shader(cls): + """Get cached UNIFORM_COLOR shader for triangles.""" + if cls._tri_shader is None: + cls._tri_shader = gpu.shader.from_builtin("UNIFORM_COLOR") + return cls._tri_shader + + def draw( + self, + context: bpy.types.Context, + start_world: Vector, + end_world: Vector, + axis_world: Vector, + dimension_length: float, + color: tuple[float, float, float], + alpha: float, + is_highlight: bool, + highlight_color: tuple[float, float, float], + highlight_alpha: float, + show_start_arrow: bool = False, + show_end_arrow: bool = True, + show_extension_lines: bool = True, + text_offset_sign: int = 1, + text_alignment: str = "center", + prop_name: str | None = None, + ) -> None: + """Draw complete dimension graphics in screen space. + + Args: + context: Blender context + start_world: World-space start position + end_world: World-space end position + axis_world: Normalized axis direction in world space + dimension_length: Length of the dimension (for text display) + color: Base color (r, g, b) + alpha: Base alpha + is_highlight: Whether gizmo is highlighted/hovered + highlight_color: Highlight color (r, g, b) + highlight_alpha: Highlight alpha + show_start_arrow: Whether to show arrow at start + show_end_arrow: Whether to show arrow at end + show_extension_lines: Whether to show extension lines + text_offset_sign: 1 for above/right, -1 for below/left + text_alignment: "center" or "start" + prop_name: Property name for tooltip (shown when highlighted) + """ + if dimension_length < 0: + return + + region = context.region + rv3d = context.region_data + if not region or not rv3d: + return + + start_screen = location_3d_to_region_2d(region, rv3d, start_world) + end_screen = location_3d_to_region_2d(region, rv3d, end_world) + + if not start_screen or not end_screen: + return + + direction = Vector((end_screen[0] - start_screen[0], end_screen[1] - start_screen[1])) + length_screen = direction.length + + actual_value_is_zero = dimension_length <= 0.001 + + # When screen length is zero due to viewing angle (not actual value), skip drawing + if length_screen < 1 and not actual_value_is_zero: + return + + # When actual value is zero, determine direction from 3D axis projection + if length_screen < 1 and actual_value_is_zero: + test_world = start_world + axis_world * 0.1 + test_screen = location_3d_to_region_2d(region, rv3d, test_world) + if test_screen: + direction = Vector((test_screen[0] - start_screen[0], test_screen[1] - start_screen[1])) + if direction.length > 0.001: + direction.normalize() + else: + direction = Vector((1, 0)) + else: + direction = Vector((1, 0)) + else: + direction.normalize() + + perpendicular = Vector((-direction[1], direction[0])) + + vertices = [] + indices = [] + + line_start = (start_screen[0], start_screen[1]) + line_end = (end_screen[0], end_screen[1]) + + if show_start_arrow: + line_start = ( + start_screen[0] + direction[0] * self.ARROW_SIZE, + start_screen[1] + direction[1] * self.ARROW_SIZE, + ) + if show_end_arrow: + line_end = ( + end_screen[0] - direction[0] * self.ARROW_SIZE, + end_screen[1] - direction[1] * self.ARROW_SIZE, + ) + + vertices.append(line_start) + vertices.append(line_end) + indices.append((0, 1)) + + arrow_triangles = [] + + if show_start_arrow: + arrow_triangles.extend( + self._build_arrow_triangle(start_screen, direction, perpendicular, pointing_backward=False) + ) + + if show_end_arrow: + arrow_triangles.extend( + self._build_arrow_triangle(end_screen, direction, perpendicular, pointing_backward=True) + ) + + if show_extension_lines and length_screen >= self.MIN_PIXELS_FOR_DETAILS: + idx = len(vertices) + ext_start_top, ext_start_bottom = self._build_extension_line_vertices(start_screen, perpendicular) + vertices.append(ext_start_top) + vertices.append(ext_start_bottom) + indices.append((idx, idx + 1)) + + idx = len(vertices) + ext_end_top, ext_end_bottom = self._build_extension_line_vertices(end_screen, perpendicular) + vertices.append(ext_end_top) + vertices.append(ext_end_bottom) + indices.append((idx, idx + 1)) + + if is_highlight: + draw_color = (*highlight_color, highlight_alpha) + else: + draw_color = (*color, alpha) + + with GPUStateScope(depth_test="NONE", blend="ALPHA", ortho_2d=(region.width, region.height)): + shader = self._get_line_shader() + shader.bind() + shader.uniform_float("viewportSize", (region.width, region.height)) + shader.uniform_float("lineWidth", self.LINE_WIDTH) + shader.uniform_float("color", draw_color) + + line_batch = batch_for_shader(shader, "LINES", {"pos": vertices}, indices=indices) + line_batch.draw(shader) + + if arrow_triangles: + tri_shader = self._get_tri_shader() + tri_shader.bind() + tri_shader.uniform_float("color", draw_color) + tri_batch = batch_for_shader(tri_shader, "TRIS", {"pos": arrow_triangles}) + tri_batch.draw(tri_shader) + + if length_screen >= self.MIN_PIXELS_FOR_DETAILS: + center_screen = ( + (start_screen[0] + end_screen[0]) / 2, + (start_screen[1] + end_screen[1]) / 2, + ) + text_color = highlight_color if is_highlight else color + DimensionTextRenderer.get_instance().draw_value_text( + context, center_screen, perpendicular, dimension_length, text_color, text_offset_sign, text_alignment + ) + + if is_highlight and prop_name: + tooltip_color = highlight_color + DimensionTextRenderer.get_instance().draw_property_tooltip( + context, (end_screen[0], end_screen[1]), prop_name, tooltip_color + ) + + def _build_arrow_triangle( + self, position: Vector, direction: Vector, perpendicular: Vector, pointing_backward: bool + ) -> list[tuple[float, float]]: + """Build triangle vertices for an arrow head.""" + sign = -1 if pointing_backward else 1 + arrow_tip = (position[0], position[1]) + arrow_back_left = ( + position[0] + sign * direction[0] * self.ARROW_SIZE + perpendicular[0] * self.ARROW_SIZE * 0.5, + position[1] + sign * direction[1] * self.ARROW_SIZE + perpendicular[1] * self.ARROW_SIZE * 0.5, + ) + arrow_back_right = ( + position[0] + sign * direction[0] * self.ARROW_SIZE - perpendicular[0] * self.ARROW_SIZE * 0.5, + position[1] + sign * direction[1] * self.ARROW_SIZE - perpendicular[1] * self.ARROW_SIZE * 0.5, + ) + return [arrow_tip, arrow_back_left, arrow_back_right] + + def _build_extension_line_vertices( + self, position: Vector, perpendicular: Vector + ) -> tuple[tuple[float, float], tuple[float, float]]: + """Build extension line endpoints perpendicular to the dimension.""" + top = ( + position[0] + perpendicular[0] * self.EXTENSION_LENGTH, + position[1] + perpendicular[1] * self.EXTENSION_LENGTH, + ) + bottom = ( + position[0] - perpendicular[0] * self.EXTENSION_LENGTH, + position[1] - perpendicular[1] * self.EXTENSION_LENGTH, + ) + return (top, bottom) + + +@dataclass +class SnapCache: + """Unified snap cache with combined KD-tree for vertex snapping.""" + + # Combined KD-tree with all world vertices from all objects + kd_tree: KDTree + # All world vertices indexed by global vertex index (tuples for memory efficiency) + all_vertices: list[tuple[float, float, float]] + + +@dataclass +class NumericInputState: + """State for keyboard numeric input during gizmo operations.""" + + characters: list[str] + parsed_value: float + is_active: bool + is_valid: bool + + @classmethod + def create_default(cls) -> "NumericInputState": + return cls(characters=[], parsed_value=0.0, is_active=False, is_valid=True) + + def reset(self) -> None: + self.characters.clear() + self.parsed_value = 0.0 + self.is_active = False + self.is_valid = True + + def get_input_string(self) -> str: + return "".join(self.characters) + + def is_relative_mode(self) -> bool: + input_str = self.get_input_string() + return input_str.startswith("+") or input_str.startswith("-") + + def calculate_final_value(self, init_value: float, invert_delta: bool = False) -> float: + if self.is_relative_mode(): + delta = self.parsed_value + if invert_delta: + delta = -delta + return init_value + delta + return self.parsed_value + + def parse(self) -> None: + """Parse the current input string and update parsed_value and is_valid.""" + if not self.characters: + self.parsed_value = 0.0 + self.is_valid = True + return + + input_str = self.get_input_string() + is_valid, value = parse_distance_string(input_str) + + if is_valid: + self.parsed_value = value + self.is_valid = True + else: + try: + self.parsed_value = float(input_str) + self.is_valid = True + except ValueError: + self.parsed_value = 0.0 + self.is_valid = False + + +@dataclass +class DimensionGizmoConfig: + """Configuration for a dimension gizmo. + + Used to declaratively configure dimension line gizmos in BaseParametricGizmoGroup subclasses. + This enables a data-driven approach that reduces boilerplate code for setting up + dimension gizmos with consistent behavior. + + Color and prop_name are auto-derived if not specified: + - axis (1,0,0) or (-1,0,0) -> RED + - axis (0,1,0) or (0,-1,0) -> GREEN + - axis (0,0,1) or (0,0,-1) -> BLUE + - prop_name: "attr_name" -> "Attr Name" (underscores to spaces, title case) + + Examples: + # Basic dimension - uses attr_name to read/write property + DimensionGizmoConfig( + attr_name="overall_width", + axis=(1, 0, 0), + min_value=0.01, + ) + + # Custom value calculation - for computed properties + DimensionGizmoConfig( + attr_name="total_length", + axis=(1, 0, 0), + compute_value=lambda props: props.tread_run * props.num_treads, + apply_value=lambda props, val: setattr(props, "target_length", val), + ) + + # Conditional visibility - hide when not applicable + DimensionGizmoConfig( + attr_name="nosing_length", + axis=(-1, 0, 0), + visibility_condition=lambda props: props.nosing_length > 0, + ) + + Attributes: + attr_name: Property name to bind to (e.g., "overall_width"). Used to generate + gizmo attribute name as f"dimension_{attr_name}_gizmo". + axis: Direction tuple (x, y, z) for the dimension line. Determines color if not + specified and defines drag direction. Use negative values for reversed directions. + color: Optional override. One of "RED", "GREEN", "BLUE". Auto-derived from axis. + prop_name: Display name for tooltips. Defaults to attr_name with underscores + replaced by spaces and title-cased. + min_value: Minimum allowed value when dragging (default 0.0). + invert_delta: If True, reverses the drag direction effect. + delta_scale: Multiplier for drag delta (default 1.0). Use <1 for fine control. + text_offset_sign: 1 or -1 to position text above/below dimension line. + text_alignment: "start", "center", or "end" for text positioning along line. + show_start_arrow: Whether to show arrow at start point (default False). + show_end_arrow: Whether to show arrow at end point (default True). + compute_value: Optional function(props) -> float for computed dimension values. + If None, reads directly from getattr(props, attr_name). + apply_value: Optional function(props, value) to apply new values after drag. + If None, uses setattr(props, attr_name, value). + visibility_condition: Optional function(props) -> bool. If returns False, + the gizmo is hidden. Used for conditional gizmos. + """ + + attr_name: str + axis: tuple[int, int, int] + color: str | None = None + prop_name: str | None = None + min_value: float = 0.0 + invert_delta: bool = False + delta_scale: float = 1.0 + text_offset_sign: int = 1 + text_alignment: str = "center" + show_start_arrow: bool = False + show_end_arrow: bool = True + compute_value: Callable[[Any], float] | None = None + apply_value: Callable[[Any, float], None] | None = None + visibility_condition: Callable[[Any], bool] | None = None + + def __post_init__(self): + if self.color is None: + if self.axis[0] != 0: + self.color = "RED" + elif self.axis[1] != 0: + self.color = "GREEN" + else: + self.color = "BLUE" + + if self.prop_name is None: + self.prop_name = self.attr_name.replace("_", " ").title() + + +class SnapManager: + """Manages snap point visualization and mesh snapping with caching.""" + + def __init__(self): + self._snap_point: tuple[float, float, float] | Vector | None = None + self._draw_handler = None + self._shader = None + self._snap_cache: SnapCache | None = None + + def set_snap_point(self, point: tuple[float, float, float] | Vector | None) -> None: + """Set snap point and register draw handler if needed.""" + self._snap_point = point + if self._draw_handler is None and point is not None: + self._draw_handler = bpy.types.SpaceView3D.draw_handler_add(self._draw, (), "WINDOW", "POST_VIEW") + self._redraw_viewport() + + def clear(self) -> None: + """Clear snap point and unregister handler.""" + self._snap_point = None + if self._draw_handler is not None: + bpy.types.SpaceView3D.draw_handler_remove(self._draw_handler, "WINDOW") + self._draw_handler = None + self._redraw_viewport() + + def _draw(self) -> None: + """Draw snap point as a dot.""" + if self._snap_point is None: + return + + if self._shader is None: + self._shader = gpu.shader.from_builtin("UNIFORM_COLOR") + + self._shader.bind() + self._shader.uniform_float("color", SNAP_POINT_COLOR) + gpu.state.point_size_set(SNAP_POINT_SIZE) + + batch = batch_for_shader(self._shader, "POINTS", {"pos": [self._snap_point]}) + batch.draw(self._shader) + + gpu.state.point_size_set(DEFAULT_POINT_SIZE) + + @staticmethod + def _redraw_viewport() -> None: + """Force 3D viewport redraw.""" + for area in bpy.context.screen.areas: + if area.type == "VIEW_3D": + area.tag_redraw() + + def build_snap_cache( + self, context: bpy.types.Context, active_obj: bpy.types.Object, include_active: bool = False + ) -> None: + """Build unified cache with combined KD-tree for vertex snapping. + + Uses foreach_get for fast vertex data extraction and NumPy for + batch matrix transformation. + + Args: + context: The current Blender context. + active_obj: The active object being edited. + include_active: If True, include the active object's vertices in snapping targets. + """ + self._snap_cache = None + + mesh_objects = [obj for obj in context.visible_objects if obj.type == "MESH" and obj.visible_get()] + + if not include_active: + mesh_objects = [obj for obj in mesh_objects if obj != active_obj] + + if not mesh_objects: + return + + depsgraph = context.evaluated_depsgraph_get() + all_vertices: list[tuple[float, float, float]] = [] + + for obj in mesh_objects: + mesh_data = obj.data + if not hasattr(mesh_data, "vertices") or not mesh_data.vertices: + continue + + obj_eval = obj.evaluated_get(depsgraph) + mesh = obj_eval.to_mesh() + + try: + vertex_count = len(mesh.vertices) + if vertex_count == 0: + continue + + coords = np.empty(vertex_count * 3, dtype=np.float32) + mesh.vertices.foreach_get("co", coords) # type: ignore[arg-type] + coords = coords.reshape(-1, 3) + + matrix = np.array(obj_eval.matrix_world, dtype=np.float32) + ones = np.ones((vertex_count, 1), dtype=np.float32) + coords_h = np.hstack([coords, ones]) + world_coords = (coords_h @ matrix.T)[:, :3] + + all_vertices.extend(tuple(co) for co in world_coords) + finally: + obj_eval.to_mesh_clear() + + if not all_vertices: + return + + kd_tree = KDTree(len(all_vertices)) + for i, v in enumerate(all_vertices): + kd_tree.insert(v, i) + kd_tree.balance() + + self._snap_cache = SnapCache( + kd_tree=kd_tree, + all_vertices=all_vertices, + ) + + def clear_snap_cache(self) -> None: + self._snap_cache = None + + @staticmethod + def _calc_snap_distance_sq( + point_3d: Vector, + location: Vector, + mouse_vec: Vector | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + ) -> float: + """Calculate squared distance - screen-space if mouse coords available, else world-space.""" + if mouse_vec is not None and region is not None and rv3d is not None: + point_2d = location_3d_to_region_2d(region, rv3d, point_3d) + if point_2d is not None: + return (mouse_vec - point_2d).length_squared + return float("inf") + return (point_3d - location).length_squared + + @staticmethod + def _find_closest_vertex( + world_vertices: list[Vector], + location: Vector, + mouse_vec: Vector | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + closest_point: Vector | None, + closest_dist_sq: float, + kd_tree: KDTree | None = None, + ) -> tuple[Vector | None, float]: + """Find the closest vertex to snap to using KD-tree if available.""" + if kd_tree is not None: + for _, idx, _ in kd_tree.find_n(location, SNAP_KD_CANDIDATES): + v_co = world_vertices[idx] + dist_sq = SnapManager._calc_snap_distance_sq(v_co, location, mouse_vec, region, rv3d) + if dist_sq < closest_dist_sq: + closest_dist_sq = dist_sq + closest_point = v_co + else: + for v_co in world_vertices: + dist_sq = SnapManager._calc_snap_distance_sq(v_co, location, mouse_vec, region, rv3d) + if dist_sq < closest_dist_sq: + closest_dist_sq = dist_sq + closest_point = v_co + return closest_point, closest_dist_sq + + @staticmethod + def _get_nearby_objects( + mesh_objects: list[bpy.types.Object], + location: Vector, + ) -> list[bpy.types.Object]: + """Filter objects to those within SNAP_MAX_RADIUS of location.""" + radius_sq = SNAP_MAX_RADIUS * SNAP_MAX_RADIUS + nearby_objects = [] + + for obj in mesh_objects: + bbox_corners = [obj.matrix_world @ Vector(corner) for corner in obj.bound_box] + if not bbox_corners: + continue + + bbox_min = Vector( + ( + min(c.x for c in bbox_corners), + min(c.y for c in bbox_corners), + min(c.z for c in bbox_corners), + ) + ) + bbox_max = Vector( + ( + max(c.x for c in bbox_corners), + max(c.y for c in bbox_corners), + max(c.z for c in bbox_corners), + ) + ) + + closest = Vector( + ( + max(bbox_min.x, min(location.x, bbox_max.x)), + max(bbox_min.y, min(location.y, bbox_max.y)), + max(bbox_min.z, min(location.z, bbox_max.z)), + ) + ) + + if (location - closest).length_squared <= radius_sq: + nearby_objects.append(obj) + + return nearby_objects + + def snap_to_mesh( + self, + location: Vector, + context: bpy.types.Context, + active_obj: bpy.types.Object, + mouse_coords: tuple[float, float] | None = None, + include_active: bool = False, + ) -> Vector: + """Snap a location to the nearest vertex if snapping is enabled. + + Only vertex snapping is supported. Returns the original location if + snapping is disabled or VERTEX is not in the snap elements. + + Args: + location: The 3D location to snap from. + context: The current Blender context. + active_obj: The active object being edited. + mouse_coords: Optional mouse coordinates for screen-space distance. + include_active: If True, include the active object's vertices in snapping targets. + """ + tool_settings = context.scene.tool_settings + + if not tool_settings.use_snap: + return location + + if "VERTEX" not in tool_settings.snap_elements_base: + return location + + region = context.region + rv3d = context.region_data + use_screen_distance = mouse_coords is not None and region is not None and rv3d is not None + mouse_vec = Vector(mouse_coords) if mouse_coords is not None else None + + closest_point: Vector | None = None + closest_dist_sq = float("inf") + + if self._snap_cache is not None: + closest_point, closest_dist_sq = self._snap_from_cache(location, mouse_vec, region, rv3d) + else: + closest_point, closest_dist_sq = self._snap_without_cache( + location, context, active_obj, mouse_vec, region, rv3d, include_active + ) + + max_dist_sq = SNAP_SCREEN_DISTANCE**2 if use_screen_distance else SNAP_WORLD_DISTANCE**2 + if closest_point and closest_dist_sq < max_dist_sq: + return closest_point + + return location + + def _snap_from_cache( + self, + location: Vector, + mouse_vec: Vector | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + ) -> tuple[Vector | None, float]: + """Find closest vertex using cached KD-tree. + + Searches from both the target location AND a secondary location derived from + the mouse position to handle cases where click offset causes the mouse to be + far from the target location on screen. + """ + if self._snap_cache is None: + return None, float("inf") + + cache = self._snap_cache + + closest_point, closest_dist_sq = SnapManager._find_closest_vertex( + cache.all_vertices, location, mouse_vec, region, rv3d, None, float("inf"), cache.kd_tree + ) + + # Also search from mouse's 3D position to handle click offset cases + if mouse_vec is not None and region is not None and rv3d is not None: + mouse_origin = region_2d_to_origin_3d(region, rv3d, mouse_vec) + mouse_direction = region_2d_to_vector_3d(region, rv3d, mouse_vec) + view_distance = (location - mouse_origin).length + mouse_3d = mouse_origin + mouse_direction * view_distance + + closest_point, closest_dist_sq = SnapManager._find_closest_vertex( + cache.all_vertices, mouse_3d, mouse_vec, region, rv3d, closest_point, closest_dist_sq, cache.kd_tree + ) + + return closest_point, closest_dist_sq + + def _snap_without_cache( + self, + location: Vector, + context: bpy.types.Context, + active_obj: bpy.types.Object, + mouse_vec: Vector | None, + region: bpy.types.Region | None, + rv3d: bpy.types.RegionView3D | None, + include_active: bool = False, + ) -> tuple[Vector | None, float]: + """Find closest vertex without cache (fallback path).""" + mesh_objects = [obj for obj in context.visible_objects if obj.type == "MESH" and obj.visible_get()] + + if not include_active: + mesh_objects = [obj for obj in mesh_objects if obj != active_obj] + + if not mesh_objects: + return None, float("inf") + + nearby_objects = set(SnapManager._get_nearby_objects(mesh_objects, location)) + + if mouse_vec is not None and region is not None and rv3d is not None: + mouse_origin = region_2d_to_origin_3d(region, rv3d, mouse_vec) + mouse_direction = region_2d_to_vector_3d(region, rv3d, mouse_vec) + view_distance = (location - mouse_origin).length + mouse_3d = mouse_origin + mouse_direction * view_distance + nearby_objects.update(SnapManager._get_nearby_objects(mesh_objects, mouse_3d)) + + if not nearby_objects: + return None, float("inf") + + closest_point: Vector | None = None + closest_dist_sq = float("inf") + depsgraph = context.evaluated_depsgraph_get() + + for obj in nearby_objects: + mesh_data = obj.data + if not hasattr(mesh_data, "vertices") or not mesh_data.vertices: + continue + + obj_eval = obj.evaluated_get(depsgraph) + mesh = obj_eval.to_mesh() + + try: + if not mesh or not mesh.vertices: + continue + + world_vertices = [obj_eval.matrix_world @ v.co for v in mesh.vertices] + closest_point, closest_dist_sq = SnapManager._find_closest_vertex( + world_vertices, location, mouse_vec, region, rv3d, closest_point, closest_dist_sq + ) + finally: + obj_eval.to_mesh_clear() + + return closest_point, closest_dist_sq + + +_snap_manager = SnapManager() + + +def set_snap_point(point: tuple[float, float, float] | Vector | None) -> None: + _snap_manager.set_snap_point(point) + + +def clear_snap_point() -> None: + _snap_manager.clear() + + +def snap_to_mesh( + location: Vector, + context: bpy.types.Context, + active_obj: bpy.types.Object, + mouse_coords: tuple[float, float] | None = None, + include_active: bool = False, +) -> Vector: + return _snap_manager.snap_to_mesh(location, context, active_obj, mouse_coords, include_active) + + +def build_snap_cache( + context: bpy.types.Context, active_obj: bpy.types.Object, include_active: bool = False +) -> None: + _snap_manager.build_snap_cache(context, active_obj, include_active) + + +def clear_snap_cache() -> None: + _snap_manager.clear_snap_cache() + + +def get_billboard_rotation(context: bpy.types.Context) -> Matrix: + """Get rotation matrix that makes an object face the camera.""" + rv3d = context.region_data + if rv3d is None: + return Matrix.Identity(4) + return rv3d.view_matrix.to_3x3().transposed().to_4x4() + + +def get_camera_direction(context: bpy.types.Context, position: Vector) -> Vector | None: + """Get normalized direction from position towards camera.""" + rv3d = context.region_data + if rv3d is None: + return None + + if rv3d.is_perspective: + view_origin = rv3d.view_matrix.inverted().translation + return (view_origin - position).normalized() + return Vector(rv3d.view_matrix.inverted().col[2][:3]).normalized() + + +def generate_circle_vertices( + center: tuple[float, float, float] | Vector, radius: float, segments: int, plane: str = "XY" +) -> list[tuple[float, float, float]]: + """Generate circle vertices in specified plane ('XY', 'XZ', or 'YZ').""" + vertices = [] + for i in range(segments + 1): + angle = (2 * math.pi * i) / segments + cos_a = radius * math.cos(angle) + sin_a = radius * math.sin(angle) + + if plane == "XY": + vertices.append((center[0] + cos_a, center[1] + sin_a, center[2])) + elif plane == "XZ": + vertices.append((center[0] + cos_a, center[1], center[2] + sin_a)) + else: + vertices.append((center[0], center[1] + cos_a, center[2] + sin_a)) + + return vertices + + +def create_circle_arc( + radius: float = 1.0, + segments: int = ARC_SEGMENTS, + direction: str = "LEFT", + line_width: float = ARC_LINE_WIDTH, + angle_min: float = 0.0, + angle_max: float = 90.0, +) -> tuple[tuple[float, float, float], ...]: + """Create a circle arc with cross-section thickness for visibility from all angles.""" + half_width = line_width / 2 + angle_min_rad = math.radians(angle_min) + angle_max_rad = math.radians(angle_max) + angle_range = angle_max_rad - angle_min_rad + + arc_points = [] + if direction == "LEFT": + for i in range(segments + 1): + angle = angle_min_rad + angle_range * (i / segments) + x = radius * math.cos(angle) + y = radius * math.sin(angle) + arc_points.append((x, y)) + else: + for i in range(segments + 1): + angle = angle_min_rad + angle_range * (i / segments) + x = -radius * math.cos(angle) + y = radius * math.sin(angle) + arc_points.append((x, y)) + + arc_triangles = [] + for i in range(len(arc_points) - 1): + x1, y1 = arc_points[i] + x2, y2 = arc_points[i + 1] + + dx, dy = x2 - x1, y2 - y1 + length = (dx**2 + dy**2) ** 0.5 + if length > 0: + px, py = -dy / length * half_width, dx / length * half_width + + arc_triangles.extend( + [ + (x1 + px, y1 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 + px, y2 + py, 0.0), + ] + ) + arc_triangles.extend( + [ + (x2 + px, y2 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 - px, y2 - py, 0.0), + ] + ) + + arc_triangles.extend( + [ + (x1, y1, -half_width), + (x2, y2, -half_width), + (x1, y1, +half_width), + ] + ) + arc_triangles.extend( + [ + (x1, y1, +half_width), + (x2, y2, -half_width), + (x2, y2, +half_width), + ] + ) + + return tuple(arc_triangles) + + +# ============================================================================ +# Gizmos under the hood +# ============================================================================ +# +# ## Transforms: +# +# source/blender/windowmanager/gizmo/WM_gizmo_types.h +# matrix_basis -- "Transformation of this gizmo." = placement in scene +# matrix_offset -- "Custom offset from origin." = local transforms according to state/value +# matrix_space -- "The space this gizmo is being modified in." used by some gizmos for undefined purposes +# matrix_world -- final matrix, scaled according to viewport zoom and custom scale_basis +# +# source/blender/windowmanager/gizmo/intern/wm_gizmo.c:WM_gizmo_calc_matrix_final_params +# final = space @ (autoscale * (basis @ offset)) +# final = space @ (basis @ offset) -- if gizmo.use_draw_scale == False +# final = space @ ((autoscale * basis) @ offset) -- if gizmo.use_draw_offset_scale +# +# source/blender/windowmanager/gizmo/intern/wm_gizmo.c:wm_gizmo_calculate_scale +# autoscale = gizmo.scale_basis * magic(preferences, matrix_space, matrix_basis, context.region_data) +# magic -- making 1.0 to match preferences.view.gizmo_size pixels (75 by default) +# +# +# ## Selection +# +# select_id -- apparently, id of a selectable part +# test_select -- expected to return id of selection, doesn't seem to work +# draw_select -- fake-draw of selection geometry for gpu-side cursor tracking +# ============================================================================ + + +# Some geometries for Gizmo.custom_shape shaders CUBE = ( (+1, +1, +1), @@ -250,13 +1551,11 @@ X3DISC = ( class CustomGizmo: - # FIXME: highliting/selection doesnt work + # FIXME: highlighting/selection doesn't work def draw_very_custom_shape(self, ctx, custom_shape, select_id=None): - # create shader and batch shader_wrapper, batch = custom_shape shader = shader_wrapper.get_shader() - # setup params shader.bind() if select_id is not None: gpu.select.load_id(select_id) @@ -269,11 +1568,8 @@ class CustomGizmo: shader_wrapper.glenable() shader_wrapper.uniform_region(ctx) - # using `with` block to make sure matrix multiplication - # won't affect other shaders with gpu.matrix.push_pop(): - # using matrix_world seems to be unaffected by matrix_offset - # therefore we use basis @ offset + # matrix_world is unaffected by matrix_offset, so use basis @ offset matrix = self.matrix_basis @ self.matrix_offset gpu.matrix.multiply_matrix(matrix) batch.draw(shader) @@ -355,7 +1651,7 @@ class UglyDotGizmo(OffsetHandle, types.Gizmo): def refresh(self): offset = self.target_get_value("offset") / self.scale_value - self.matrix_offset.translation.z = offset # z-shift + self.matrix_offset.translation.z = offset def draw(self, ctx): self.refresh() @@ -366,36 +1662,6 @@ class UglyDotGizmo(OffsetHandle, types.Gizmo): self.draw_custom_shape(self.custom_shape, select_id=select_id) -# TODO: dead code? -class DotGizmo(CustomGizmo, OffsetHandle, types.Gizmo): - """Single dot viewport-aligned""" - - # FIXME: make it selectable - bl_idname = "BIM_GT_dot_2d" - bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) - - __slots__ = ( - "scale_value", - "custom_shape", - ) - - def setup(self): - shader = DotsGizmoShader() - self.custom_shape = shader, shader.batch(pos=((0, 0, 0),)), shader.prog - self.use_draw_scale = False - - def refresh(self): - offset = self.target_get_value("offset") / self.scale_value - self.matrix_offset.translation.z = offset # z-shifted - - def draw(self, ctx): - self.refresh() - self.draw_very_custom_shape(ctx, self.custom_shape) - - def draw_select(self, ctx, select_id): - self.refresh() - self.draw_very_custom_shape(ctx, self.custom_shape, select_id=select_id) - class ExtrusionGuidesGizmo(CustomGizmo, types.Gizmo): """Extrusion guides @@ -430,48 +1696,6 @@ class ExtrusionGuidesGizmo(CustomGizmo, types.Gizmo): self.matrix_offset.col[2][2] = depth # z-scaled -# TODO: dead code? -class DimensionLabelGizmo(types.Gizmo): - """Text label for a dimension""" - - # does not work properly, fonts are totally screwed up - - bl_idname = "BIM_GT_dimension_label" - bl_target_properties = ({"id": "value", "type": "FLOAT", "array_length": 1},) - - __slots__ = "text_label" - - def setup(self): - pass - - def refresh(self, ctx): - value = self.target_get_value("value") - self.matrix_offset.translation.z = value * 0.5 - unit_system = ctx.scene.unit_settings.system - self.text_label = bpy.utils.units.to_string(unit_system, "LENGTH", value, 3, split_unit=False) - - def draw(self, ctx): - self.refresh(ctx) - self.draw_text(ctx) - - def draw_text(self, ctx): - font_id = 0 - font_size = 16 - dpi = ctx.preferences.system.dpi - - # pos = self.matrix_world @ Vector((0, 0, 0, 1)) - # pos = Vector((0, 0, 0.5)) - # region = ctx.region - # region3d = ctx.region_data - # pos = view3d_utils.location_3d_to_region_2d(region, region3d, pos) - - # text = self.text_label - - blf.size(font_id, font_size, dpi) - blf.position(font_id, 0, 0, 0) - blf.color(font_id, *self.color, self.alpha) - blf.draw(font_id, "ABC") - class ExtrusionWidget(types.GizmoGroup): bl_idname = "bim.extrusion_widget" @@ -492,9 +1716,11 @@ class ExtrusionWidget(types.GizmoGroup): def setup(self, context: bpy.types.Context) -> None: target = context.object - assert target + if not target: + return mesh = target.data - assert isinstance(mesh, bpy.types.Mesh) + if not isinstance(mesh, bpy.types.Mesh): + return prop = tool.Geometry.get_mesh_props(mesh).ifc_parameters.get("IfcExtrudedAreaSolid/Depth") basis = target.matrix_world.normalized() @@ -521,16 +1747,12 @@ class ExtrusionWidget(types.GizmoGroup): gz.target_set_prop("depth", prop, "value") gz.scale_value = scale_value - # gz = self.label = self.gizmos.new('GIZMO_GT_dimension_label') - # gz.matrix_basis = basis - # gz.color = tuple(theme.gizmo_secondary) - # gz.alpha = 0.5 - # gz.use_draw_modal = True - # gz.target_set_prop('value', target.demo, 'depth') def refresh(self, context: bpy.types.Context) -> None: """updating gizmos""" target = context.active_object + if not target: + return basis = target.matrix_world.normalized() self.handle.matrix_basis = basis self.guides.matrix_basis = basis @@ -539,10 +1761,14 @@ class ExtrusionWidget(types.GizmoGroup): """updating object""" bpy.ops.bim.update_parametric_representation() target = context.active_object - assert target + if not target: + return mesh = target.data - assert isinstance(mesh, bpy.types.Mesh) + if not isinstance(mesh, bpy.types.Mesh): + return prop = tool.Geometry.get_mesh_props(mesh).ifc_parameters.get("IfcExtrudedAreaSolid/Depth") + if prop is None: + return self.handle.target_set_prop("offset", prop, "value") self.guides.target_set_prop("depth", prop, "value") @@ -568,3 +1794,2273 @@ class ExtrusionWidget(types.GizmoGroup): elif length_unit == "THOU": scale_value /= si_conversions["thou"] return scale_value + +# ============================================================================ +# Core Gizmo Classes +# ============================================================================ + +class BIM_OT_gizmo_value_input(bpy.types.Operator): + """Enter a numeric value for a gizmo property. Click or Enter to confirm, ESC to cancel.""" + + bl_idname = "bim.gizmo_value_input" + bl_label = "Gizmo Value Input" + bl_options = {"REGISTER", "UNDO", "INTERNAL"} + + prop_name: bpy.props.StringProperty(name="Property Name", default="Value") + init_value: bpy.props.FloatProperty(name="Initial Value", default=0.0) + invert_delta: bpy.props.BoolProperty(name="Invert Delta", default=False) + + def invoke(self, context, event): + self._keyboard_input = NumericInputState.create_default() + self._move_set_cb = _gizmo_modal_context.move_set_cb + self._active_gizmo = _gizmo_modal_context.active_gizmo + self._gizmo_group = _gizmo_modal_context.gizmo_group + self._hidden_gizmos: list[bpy.types.Gizmo] = [] + self._original_color: tuple[float, float, float] | None = None + + self._start_location: Vector = _gizmo_modal_context.start_location or Vector() + self._axis_direction: Vector = _gizmo_modal_context.axis_direction or Vector((0, 0, 1)) + self._active_obj: bpy.types.Object | None = _gizmo_modal_context.active_obj + self._delta_scale: float = _gizmo_modal_context.delta_scale + self._click_offset: float = _gizmo_modal_context.click_offset + self._mouse_delta: float = 0.0 + + self._initial_snap_state: bool = context.scene.tool_settings.use_snap + self._snap_cache_built: bool = False + self._is_snapping: bool = False + + self._hide_other_gizmos() + self._set_highlight_color() + + context.window_manager.modal_handler_add(self) + self._update_header(context) + return {"RUNNING_MODAL"} + + def _set_highlight_color(self) -> None: + if not self._active_gizmo: + return + self._original_color = tuple(self._active_gizmo.color) + self._active_gizmo.color = self._active_gizmo.color_highlight + + def _restore_color(self) -> None: + if self._active_gizmo and self._original_color: + self._active_gizmo.color = self._original_color + + def _hide_other_gizmos(self) -> None: + if not self._gizmo_group or not self._active_gizmo: + return + + hidden_set: set[bpy.types.Gizmo] = set() + for gizmo in self._gizmo_group.gizmos: + if gizmo != self._active_gizmo: + gizmo.hide = True + hidden_set.add(gizmo) + self._hidden_gizmos.append(gizmo) + + _gizmo_modal_context.hidden_gizmos = hidden_set + + def _restore_gizmo_visibility(self) -> None: + _gizmo_modal_context.hidden_gizmos = None + for gizmo in self._hidden_gizmos: + gizmo.hide = False + self._hidden_gizmos.clear() + + def modal(self, context, event): + kb = self._keyboard_input + + if event.value == "PRESS" and event.ascii and event.ascii.lower() in NUMERIC_INPUT_CHARS: + kb.characters.append(event.ascii) + kb.is_active = True + kb.parse() + self._apply_value() + self._update_header(context) + return {"RUNNING_MODAL"} + + if event.type == "BACK_SPACE" and event.value == "PRESS": + if kb.characters: + kb.characters.pop() + kb.parse() + self._apply_value() + self._update_header(context) + return {"RUNNING_MODAL"} + + if event.type in {"RET", "NUMPAD_ENTER"} and event.value == "PRESS": + if kb.is_valid: + self._apply_value() + self._cleanup(context) + return {"FINISHED"} + + if event.type == "LEFTMOUSE" and event.value == "PRESS": + if kb.characters: + if kb.is_valid: + self._apply_value() + self._cleanup(context) + return {"FINISHED"} + self._cleanup(context) + return {"CANCELLED"} + + if event.type == "ESC" and event.value == "PRESS": + if self._move_set_cb: + self._move_set_cb(self.init_value) + self._cleanup(context) + return {"CANCELLED"} + + if event.type == "RIGHTMOUSE" and event.value == "PRESS": + if self._move_set_cb: + self._move_set_cb(self.init_value) + self._cleanup(context) + return {"CANCELLED"} + + if event.type == "MOUSEMOVE" and not kb.characters: + self._handle_mouse_move(context, event) + return {"RUNNING_MODAL"} + + return {"RUNNING_MODAL"} + + def _handle_mouse_move(self, context, event) -> None: + region = context.region + rv3d = context.region_data + tool_settings = context.scene.tool_settings + if not region or not rv3d: + return + + self._is_snapping = not self._initial_snap_state if event.ctrl else self._initial_snap_state + + if self._is_snapping and not self._snap_cache_built and self._active_obj: + build_snap_cache(context, self._active_obj) + self._snap_cache_built = True + + current_coord = (event.mouse_region_x, event.mouse_region_y) + view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) + view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) + + result = intersect_line_line( + view_origin, + view_origin + view_direction * RAY_CAST_DISTANCE, + self._start_location, + self._start_location + self._axis_direction * RAY_CAST_DISTANCE, + ) + current_3d = result[1] if result else self._start_location + + delta = (current_3d - self._start_location).dot(self._axis_direction) + + # Snap the dimension tip (not mouse position) to nearby vertices + if self._is_snapping and self._active_obj: + tip_3d = current_3d - self._axis_direction * self._click_offset + + original_snap = tool_settings.use_snap + tool_settings.use_snap = True + snapped_tip = snap_to_mesh(tip_3d, context, self._active_obj, current_coord) + tool_settings.use_snap = original_snap + + if snapped_tip != tip_3d: + delta = (snapped_tip - self._start_location).dot(self._axis_direction) + self._click_offset + set_snap_point(snapped_tip) + else: + clear_snap_point() + else: + clear_snap_point() + + if event.shift: + delta *= PRECISION_MODE_MULTIPLIER + + if self.invert_delta: + delta = -delta + + delta *= self._delta_scale + self._mouse_delta = delta + + if self._move_set_cb: + self._move_set_cb(self.init_value + delta) + + self._update_header(context) + + def _apply_value(self) -> None: + if not self._move_set_cb or not self._keyboard_input.is_valid: + return + final_value = self._keyboard_input.calculate_final_value(self.init_value, self.invert_delta) + self._move_set_cb(final_value) + + def _update_header(self, context) -> None: + if not context.area: + return + kb = self._keyboard_input + + if kb.characters: + input_str = kb.get_input_string() + preview = kb.calculate_final_value(self.init_value, self.invert_delta) + validity = "" if kb.is_valid else " [invalid]" + header = f"{self.prop_name}: {preview:.3f}m | Input: {input_str}_{validity}" + header += " | Click/Enter: Confirm | ESC: Cancel" + else: + current_value = self.init_value + self._mouse_delta + header = f"{self.prop_name}: {current_value:.3f}m" + hints = [] + if self._is_snapping: + hints.append("Snapping: ON") + hints.extend(["Ctrl: Snap", "Shift: Precision", "Type: Enter Value"]) + header += " | " + " | ".join(hints) + header += " | Click/Enter: Confirm | ESC: Cancel" + + context.area.header_text_set(header) + + def _cleanup(self, context) -> None: + try: + if context.area: + context.area.header_text_set(None) + finally: + try: + self._restore_color() + finally: + try: + self._restore_gizmo_visibility() + if self._gizmo_group and hasattr(self._gizmo_group, "refresh"): + self._gizmo_group.refresh(context) + if context.area: + context.area.tag_redraw() + finally: + clear_snap_point() + clear_snap_cache() + _gizmo_modal_context.clear() + + +class GizmoMovable(bpy.types.Gizmo): + """Base class for draggable gizmos. Ctrl: snap, Shift: precision, Keyboard: direct input. + + Click without dragging enters a keyboard-only input mode for accessibility. + """ + + __slots__ = ( + "custom_shape", + "init_value", + "move_get_cb", + "move_set_cb", + "axis", + "local_axis", + "start_location", + "active_obj", + "initial_snap_state", + "invert_delta", + "delta_scale", + "prop_name", + "keyboard_input", + "gizmo_group", + "_snap_cache_built", + "_start_mouse_pos", + "_has_dragged", + ) + + # Class-level cached shader (created once, reused across all instances) + _cached_tri_shader = None + + @classmethod + def _get_tri_shader(cls): + """Get cached UNIFORM_COLOR shader for triangles.""" + if cls._cached_tri_shader is None: + cls._cached_tri_shader = gpu.shader.from_builtin("UNIFORM_COLOR") + return cls._cached_tri_shader + + # Threshold in pixels for considering mouse movement as a drag + DRAG_THRESHOLD = 5 + + def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set: + self.init_value = self.move_get_cb() if self.move_get_cb else 0.0 + self.start_location = self.matrix_basis.translation.copy() + self.active_obj = context.active_object + self.initial_snap_state = context.scene.tool_settings.use_snap + self.keyboard_input = NumericInputState.create_default() + self._snap_cache_built = False + self._start_mouse_pos = (event.mouse_region_x, event.mouse_region_y) + self._has_dragged = False + if not hasattr(self, "prop_name") or self.prop_name is None: + self.prop_name = "Value" + prop_name = getattr(self, "prop_name", "Value") + bpy.ops.ed.undo_push(message=f"Gizmo: {prop_name}") + if self.initial_snap_state and self.active_obj: + build_snap_cache(context, self.active_obj) + self._snap_cache_built = True + + self._hide_other_gizmos() + + return {"RUNNING_MODAL"} + + def _hide_other_gizmos(self) -> None: + """Hide all other gizmos in the group during interaction.""" + gizmo_group = getattr(self, "gizmo_group", None) + if not gizmo_group: + return + + hidden_set: set[bpy.types.Gizmo] = set() + for gizmo in gizmo_group.gizmos: + if gizmo != self: + gizmo.hide = True + hidden_set.add(gizmo) + + _gizmo_modal_context.hidden_gizmos = hidden_set + + def _restore_gizmo_visibility(self) -> None: + """Restore visibility of gizmos hidden during interaction.""" + _gizmo_modal_context.hidden_gizmos = None + + def exit(self, context: bpy.types.Context, cancel: bool) -> None: + if context.area: + context.area.header_text_set(None) + if hasattr(self, "keyboard_input"): + self.keyboard_input.reset() + + should_invoke_keyboard = ( + not cancel + and hasattr(self, "_has_dragged") + and not self._has_dragged + and self.move_set_cb is not None + ) + + if should_invoke_keyboard: + _gizmo_modal_context.move_set_cb = self.move_set_cb + _gizmo_modal_context.active_gizmo = self + _gizmo_modal_context.gizmo_group = getattr(self, "gizmo_group", None) + _gizmo_modal_context.start_location = self.start_location.copy() + _gizmo_modal_context.axis_direction = self.get_axis_direction() + _gizmo_modal_context.active_obj = self.active_obj + _gizmo_modal_context.delta_scale = getattr(self, "delta_scale", 1.0) + bpy.ops.bim.gizmo_value_input( + "INVOKE_DEFAULT", + prop_name=getattr(self, "prop_name", "Value"), + init_value=self.init_value, + invert_delta=getattr(self, "invert_delta", False), + ) + elif cancel and self.move_set_cb: + self.move_set_cb(self.init_value) + + if not should_invoke_keyboard: + self._restore_gizmo_visibility() + + if hasattr(self, "initial_snap_state"): + context.scene.tool_settings.use_snap = self.initial_snap_state + clear_snap_point() + clear_snap_cache() + + def get_axis_direction(self) -> Vector: + """Get the world-space axis direction, transforming local_axis if set.""" + if hasattr(self, "local_axis") and self.active_obj: + obj_rotation = self.active_obj.matrix_world.to_3x3() + axis_direction: Vector = obj_rotation @ self.local_axis + axis_direction.normalize() + return axis_direction + return self.axis + + def modal(self, context: bpy.types.Context, event: bpy.types.Event, tweak) -> set: + region = context.region + rv3d = context.region_data + tool_settings = context.scene.tool_settings + + keyboard_result = self._handle_keyboard_input(context, event) + if keyboard_result is not None: + return keyboard_result + + if self.keyboard_input.is_active: + return {"RUNNING_MODAL"} + + if not region or not rv3d: + return {"RUNNING_MODAL"} + + tool_settings.use_snap = not self.initial_snap_state if event.ctrl else self.initial_snap_state + + if tool_settings.use_snap and not self._snap_cache_built and self.active_obj: + build_snap_cache(context, self.active_obj) + self._snap_cache_built = True + + current_coord = (event.mouse_region_x, event.mouse_region_y) + + if not self._has_dragged and hasattr(self, "_start_mouse_pos"): + dx = current_coord[0] - self._start_mouse_pos[0] + dy = current_coord[1] - self._start_mouse_pos[1] + if (dx * dx + dy * dy) > (self.DRAG_THRESHOLD ** 2): + self._has_dragged = True + view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) + view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) + + axis_direction = self.get_axis_direction() + + result = intersect_line_line( + view_origin, + view_origin + view_direction * RAY_CAST_DISTANCE, + self.start_location, + self.start_location + axis_direction * RAY_CAST_DISTANCE, + ) + current_3d = result[1] if result else self.start_location + + delta = (current_3d - self.start_location).dot(axis_direction) + + if tool_settings.use_snap and self.active_obj: + snapped_pos = snap_to_mesh(current_3d, context, self.active_obj, current_coord) + if snapped_pos != current_3d: + delta = (snapped_pos - self.start_location).dot(axis_direction) + set_snap_point(snapped_pos) + else: + clear_snap_point() + else: + clear_snap_point() + + if event.shift: + delta *= PRECISION_MODE_MULTIPLIER + + if getattr(self, "invert_delta", False): + delta = -delta + + delta_scale = getattr(self, "delta_scale", 1.0) + delta *= delta_scale + + kb = self.keyboard_input + final_delta = kb.parsed_value if kb.parsed_value != 0.0 else delta + + if self.move_set_cb: + self.move_set_cb(self.init_value + final_delta) + + self._update_header(context, self.init_value + final_delta, tool_settings.use_snap, event.shift) + + return {"RUNNING_MODAL"} + + def _handle_keyboard_input( + self, context: bpy.types.Context, event: bpy.types.Event + ) -> set[str] | None: + """Handle keyboard numeric input.""" + kb = self.keyboard_input + + if event.value == "PRESS" and event.ascii and event.ascii.lower() in NUMERIC_INPUT_CHARS: + kb.characters.append(event.ascii) + kb.is_active = True + kb.parse() + self._apply_keyboard_value() + self._update_header_typing(context) + return {"RUNNING_MODAL"} + + if event.type == "BACK_SPACE" and event.value == "PRESS": + if kb.characters: + kb.characters.pop() + kb.parse() + self._apply_keyboard_value() + self._update_header_typing(context) + elif kb.is_active: + kb.reset() + if self.move_set_cb: + self.move_set_cb(self.init_value) + return {"RUNNING_MODAL"} + + if event.type in {"RET", "NUMPAD_ENTER"} and event.value == "PRESS": + if kb.is_active and kb.is_valid: + final_value = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) + kb.characters.clear() + kb.is_active = False + self._update_header(context, final_value, False, False) + return {"RUNNING_MODAL"} + + if event.type == "ESC" and event.value == "PRESS" and kb.is_active: + kb.reset() + if self.move_set_cb: + self.move_set_cb(self.init_value) + return {"RUNNING_MODAL"} + + return None + + def _apply_keyboard_value(self) -> None: + kb = self.keyboard_input + if self.move_set_cb and kb.is_valid: + final_value = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) + self.move_set_cb(final_value) + + def _update_header_typing(self, context: bpy.types.Context) -> None: + if not context.area: + return + kb = self.keyboard_input + input_str = kb.get_input_string() + preview = kb.calculate_final_value(self.init_value, getattr(self, "invert_delta", False)) + + validity = "" if kb.is_valid else " [invalid]" + prop_display = getattr(self, "prop_name", "Value") + + header = f"{prop_display}: {preview:.3f}m | Input: {input_str}_{validity}" + header += " | Enter: Confirm | Backspace: Delete | ESC: Cancel" + context.area.header_text_set(header) + + def _update_header(self, context: bpy.types.Context, value: float, is_snapping: bool, is_precision: bool) -> None: + if not context.area: + return + prop_display = getattr(self, "prop_name", "Value") + hints = [] + if is_snapping: + hints.append("Snapping: ON") + if is_precision: + hints.append("Precision (0.1x)") + hints.extend(["Ctrl: Snap", "Shift: Precision", "Type: Enter Value"]) + + header_text = f"{prop_display}: {value:.3f}m | " + " | ".join(hints) + context.area.header_text_set(header_text) + + def draw_property_tooltip(self, context: bpy.types.Context) -> None: + """Draw a tooltip showing the property name near the gizmo when highlighted.""" + if not self.is_highlight: + return + if not hasattr(self, "prop_name") or not self.prop_name: + return + + region = context.region + rv3d = context.region_data + if not region or not rv3d: + return + + gizmo_pos = self.matrix_basis.translation + screen_pos = location_3d_to_region_2d(region, rv3d, gizmo_pos) + if not screen_pos: + return + + prop_display = self.prop_name.replace("_", " ").title() + + font_id = 0 + font_size = tool.Blender.scale_font_size(10) + blf.size(font_id, font_size) + blf.enable(font_id, blf.SHADOW) + blf.shadow(font_id, 6, 0, 0, 0, 1) + + text_width, text_height = blf.dimensions(font_id, prop_display) + + tooltip_x = screen_pos[0] + 15 + tooltip_y = screen_pos[1] + 15 + + with GPUStateScope(depth_test="NONE", blend="ALPHA", ortho_2d=(region.width, region.height)): + padding = 3 + theme = context.preferences.themes.items()[0][1] + bg_color = (*theme.user_interface.wcol_menu_back.inner[:3], 0.7) + + vertices = [ + (tooltip_x - padding, tooltip_y - padding), + (tooltip_x + text_width + padding, tooltip_y - padding), + (tooltip_x + text_width + padding, tooltip_y + text_height + padding), + (tooltip_x - padding, tooltip_y + text_height + padding), + ] + indices = [(0, 1, 2), (0, 2, 3)] + + shader = self._get_tri_shader() + shader.bind() + batch = batch_for_shader(shader, "TRIS", {"pos": vertices}, indices=indices) + shader.uniform_float("color", bg_color) + batch.draw(shader) + + blf.color(font_id, self.color_highlight[0], self.color_highlight[1], self.color_highlight[2], 1.0) + blf.position(font_id, tooltip_x, tooltip_y, 0) + blf.draw(font_id, prop_display) + + blf.disable(font_id, blf.SHADOW) + + +class GizmoLock(bpy.types.Gizmo): + """Lock icon gizmo that switches between closed and open states.""" + + bl_idname = "VIEW3D_GT_lock" + + __slots__ = ( + "custom_shape_closed", + "custom_shape_open", + "prop_path", + ) + + tris_closed = ( + (-0.12838619947433472, 1.3143587112426758, 0.0), + (0.025773197412490845, 1.411454677581787, 0.0), + (-0.0144234299659729, 1.541273593902588, 0.0), + (-0.0144234299659729, 1.541273593902588, 0.0), + (0.025773197412490845, 1.411454677581787, 0.0), + (0.20782703161239624, 1.4184625148773193, 0.0), + (0.23792517185211182, 1.5509872436523438, 0.0), + (0.20782703161239624, 1.4184625148773193, 0.0), + (0.3689943850040436, 1.3335046768188477, 0.0), + (0.4613226056098938, 1.433225393295288, 0.0), + (0.3689943850040436, 1.3335046768188477, 0.0), + (0.4660903215408325, 1.1793451309204102, 0.0), + (0.5959094166755676, 1.2195416688919067, 0.0), + (0.4660903215408325, 1.1793451309204102, 0.0), + (0.47309836745262146, 0.997291088104248, 0.0), + (0.6056233048439026, 0.9671931266784668, 0.0), + (0.47309836745262146, 0.997291088104248, 0.0), + (0.3881405293941498, 0.8361238241195679, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (0.48786139488220215, 4.5077928945147505e-08, 0.0), + (0.48786139488220215, 0.7437955141067505, 0.0), + (-0.12838619947433472, 1.3143587112426758, 0.0), + (-0.0144234299659729, 1.541273593902588, 0.0), + (-0.22810709476470947, 1.406686782836914, 0.0), + (-0.0144234299659729, 1.541273593902588, 0.0), + (0.20782703161239624, 1.4184625148773193, 0.0), + (0.23792517185211182, 1.5509872436523438, 0.0), + (0.23792517185211182, 1.5509872436523438, 0.0), + (0.3689943850040436, 1.3335046768188477, 0.0), + (0.4613226056098938, 1.433225393295288, 0.0), + (0.4613226056098938, 1.433225393295288, 0.0), + (0.4660903215408325, 1.1793451309204102, 0.0), + (0.5959094166755676, 1.2195416688919067, 0.0), + (0.5959094166755676, 1.2195416688919067, 0.0), + (0.47309836745262146, 0.997291088104248, 0.0), + (0.6056233048439026, 0.9671931266784668, 0.0), + (0.6056233048439026, 0.9671931266784668, 0.0), + (0.3881405293941498, 0.8361238241195679, 0.0), + (0.48786142468452454, 0.74379563331604, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (-0.48786139488220215, 4.5077928945147505e-08, 0.0), + (0.48786139488220215, 4.5077928945147505e-08, 0.0), + ) + + tris_open = ( + (-0.3519617021083832, 0.7437955141067505, 0.0), + (-0.3048076927661896, 0.9197763204574585, 0.0), + (-0.4225003123283386, 0.9877263307571411, 0.0), + (-0.4225003123283386, 0.9877263307571411, 0.0), + (-0.3048076927661896, 0.9197763204574585, 0.0), + (-0.1759808510541916, 1.0486031770706177, 0.0), + (-0.24393069744110107, 1.1662957668304443, 0.0), + (-0.1759808510541916, 1.0486031770706177, 0.0), + (2.9078805141580233e-08, 1.0957571268081665, 0.0), + (2.9078805141580233e-08, 1.2316569089889526, 0.0), + (2.9078805141580233e-08, 1.0957571268081665, 0.0), + (0.1759808510541916, 1.0486031770706177, 0.0), + (0.243930846452713, 1.1662957668304443, 0.0), + (0.1759808510541916, 1.0486031770706177, 0.0), + (0.30480796098709106, 0.9197763204574585, 0.0), + (0.4225005805492401, 0.9877263307571411, 0.0), + (0.30480796098709106, 0.9197763204574585, 0.0), + (0.35196200013160706, 0.7437955141067505, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (0.48786139488220215, 4.5077928945147505e-08, 0.0), + (0.48786139488220215, 0.7437955141067505, 0.0), + (-0.3519617021083832, 0.7437955141067505, 0.0), + (-0.4225003123283386, 0.9877263307571411, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (-0.4225003123283386, 0.9877263307571411, 0.0), + (-0.1759808510541916, 1.0486031770706177, 0.0), + (-0.24393069744110107, 1.1662957668304443, 0.0), + (-0.24393069744110107, 1.1662957668304443, 0.0), + (2.9078805141580233e-08, 1.0957571268081665, 0.0), + (2.9078805141580233e-08, 1.2316569089889526, 0.0), + (2.9078805141580233e-08, 1.2316569089889526, 0.0), + (0.1759808510541916, 1.0486031770706177, 0.0), + (0.243930846452713, 1.1662957668304443, 0.0), + (0.243930846452713, 1.1662957668304443, 0.0), + (0.30480796098709106, 0.9197763204574585, 0.0), + (0.4225005805492401, 0.9877263307571411, 0.0), + (0.4225005805492401, 0.9877263307571411, 0.0), + (0.35196200013160706, 0.7437955141067505, 0.0), + (0.487861692905426, 0.74379563331604, 0.0), + (-0.48786139488220215, 0.7437955141067505, 0.0), + (-0.48786139488220215, 4.5077928945147505e-08, 0.0), + (0.48786139488220215, 4.5077928945147505e-08, 0.0), + ) + + def get_custom_shape(self, context: bpy.types.Context) -> object: + """Get the appropriate custom shape based on lock state.""" + obj = context.active_object + if not obj: + return self.custom_shape_closed + + try: + is_open = obj.path_resolve(self.prop_path) + return self.custom_shape_open if is_open else self.custom_shape_closed + except (ValueError, KeyError, AttributeError): + return self.custom_shape_closed + + def setup(self) -> None: + self.custom_shape_closed = self.new_custom_shape("TRIS", self.tris_closed) + self.custom_shape_open = self.new_custom_shape("TRIS", self.tris_open) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.get_custom_shape(context)) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.get_custom_shape(context), select_id=select_id) + + +class GizmoArc(bpy.types.Gizmo): + """Arc gizmo for door swing visualization.""" + + bl_idname = "VIEW3D_GT_arc" + + __slots__ = ( + "custom_shape_left", + "custom_shape_right", + "prop_path", + ) + + def setup(self) -> None: + """Create arc shapes for LEFT and RIGHT directions.""" + arc_left = create_circle_arc(radius=1.0, direction="LEFT", angle_min=2.0, angle_max=90.0) + arc_right = create_circle_arc(radius=1.0, direction="RIGHT", angle_min=2.0, angle_max=90.0) + + self.custom_shape_left = self.new_custom_shape(type="TRIS", verts=arc_left) + self.custom_shape_right = self.new_custom_shape(type="TRIS", verts=arc_right) + + def _get_shape_for_direction(self, context: bpy.types.Context) -> object: + """Get arc shape based on door swing direction.""" + obj = context.active_object + if not obj: + return self.custom_shape_left + + try: + direction_value = obj.path_resolve(self.prop_path) + if "RIGHT" in str(direction_value): + return self.custom_shape_right + except (ValueError, KeyError, AttributeError): + pass + + return self.custom_shape_left + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self._get_shape_for_direction(context)) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self._get_shape_for_direction(context), select_id=select_id) + + +class GizmoPen(bpy.types.Gizmo): + """Pen/edit icon gizmo for entering edit mode.""" + + bl_idname = "VIEW3D_GT_pen" + + __slots__ = ("custom_shape",) + + tris = ( + (-0.07595771551132202, -0.2948460578918457, 0.0), + (0.16886109113693237, 0.23203276097774506, 0.0), + (0.062240585684776306, 0.28157487511634827, 0.0), + (0.07201281189918518, 0.30260589718818665, 0.0), + (0.21042980253696442, 0.321493536233902, 0.0), + (0.17863331735134125, 0.25306373834609985, 0.0), + (0.062240585684776306, 0.28157487511634827, 0.0), + (-0.1825782209634781, -0.2453039139509201, 0.0), + (-0.07595771551132202, -0.2948460578918457, 0.0), + (-0.1825782209634781, -0.2453039139509201, 0.0), + (-0.19114767014980316, -0.4032624065876007, 0.0), + (-0.07595771551132202, -0.2948460578918457, 0.0), + (0.07201281189918518, 0.30260589718818665, 0.0), + (0.10380929708480835, 0.371035635471344, 0.0), + (0.21042980253696442, 0.321493536233902, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoValidate(bpy.types.Gizmo): + """Validate/checkmark icon gizmo for confirming edits.""" + + bl_idname = "VIEW3D_GT_validate" + + __slots__ = ("custom_shape",) + + tris = ( + (0.36775994300842285, 0.205583393573761, 0.0), + (0.030080009251832962, -0.1881658434867859, 0.0), + (0.030080009251832962, -0.3380376696586609, 0.0), + (-0.22017201781272888, -0.16090886294841766, 0.0), + (0.030080009251832962, -0.1881658434867859, 0.0), + (-0.22017201781272888, -0.011037036776542664, 0.0), + (0.36775994300842285, 0.205583393573761, 0.0), + (0.36775994300842285, 0.355455219745636, 0.0), + (0.030080009251832962, -0.1881658434867859, 0.0), + (-0.22017201781272888, -0.16090886294841766, 0.0), + (0.030080009251832962, -0.3380376696586609, 0.0), + (0.030080009251832962, -0.1881658434867859, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoCancel(bpy.types.Gizmo): + """Cancel/X icon gizmo for canceling edits.""" + + bl_idname = "VIEW3D_GT_cancel" + + __slots__ = ("custom_shape",) + + tris = ( + (0.0, 0.048707593232393265, 0.0), + (0.0, -0.048707593232393265, 0.0), + (0.048707593232393265, 0.0, 0.0), + (0.0, 0.048707593232393265, 0.0), + (-0.21918421983718872, 0.2678918242454529, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (-0.21918421983718872, 0.2678918242454529, 0.0), + (-0.2678918242454529, 0.21918421983718872, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (-0.2678918242454529, -0.21918421983718872, 0.0), + (-0.21918421983718872, -0.2678918242454529, 0.0), + (0.2678918242454529, 0.21918421983718872, 0.0), + (0.21918421983718872, 0.2678918242454529, 0.0), + (0.0, 0.048707593232393265, 0.0), + (0.21918421983718872, -0.2678918242454529, 0.0), + (0.2678918242454529, -0.21918421983718872, 0.0), + (0.048707593232393265, 0.0, 0.0), + (0.048707593232393265, 0.0, 0.0), + (0.2678918242454529, 0.21918421983718872, 0.0), + (0.0, 0.048707593232393265, 0.0), + (0.0, 0.048707593232393265, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (0.0, -0.048707593232393265, 0.0), + (-0.048707593232393265, 0.0, 0.0), + (-0.21918421983718872, -0.2678918242454529, 0.0), + (0.0, -0.048707593232393265, 0.0), + (0.0, -0.048707593232393265, 0.0), + (0.21918421983718872, -0.2678918242454529, 0.0), + (0.048707593232393265, 0.0, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoPlus(bpy.types.Gizmo): + """Plus icon gizmo for incrementing values.""" + + bl_idname = "VIEW3D_GT_plus" + + __slots__ = ("custom_shape",) + + tris = ( + (-0.375, -0.075, 0.0), + (-0.375, 0.075, 0.0), + (0.375, 0.075, 0.0), + (-0.375, -0.075, 0.0), + (0.375, 0.075, 0.0), + (0.375, -0.075, 0.0), + (-0.075, -0.375, 0.0), + (-0.075, 0.375, 0.0), + (0.075, 0.375, 0.0), + (-0.075, -0.375, 0.0), + (0.075, 0.375, 0.0), + (0.075, -0.375, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoMinus(bpy.types.Gizmo): + """Minus icon gizmo for decrementing values.""" + + bl_idname = "VIEW3D_GT_minus" + + __slots__ = ("custom_shape",) + + tris = ( + (-0.375, -0.075, 0.0), + (-0.375, 0.075, 0.0), + (0.375, 0.075, 0.0), + (-0.375, -0.075, 0.0), + (0.375, 0.075, 0.0), + (0.375, -0.075, 0.0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +def _generate_circular_arrow_tris() -> tuple[tuple[float, float, float], ...]: + """Generate circular arrow geometry covering ~300 degrees.""" + triangles = [] + radius = 0.375 + line_width = 0.10 + half_width = line_width / 2 + + segments = 20 + start_angle = math.radians(30) + end_angle = math.radians(330) + angle_range = end_angle - start_angle + + arc_points = [] + for i in range(segments + 1): + angle = start_angle + angle_range * (i / segments) + x = radius * math.cos(angle) + y = radius * math.sin(angle) + arc_points.append((x, y)) + + for i in range(len(arc_points) - 1): + x1, y1 = arc_points[i] + x2, y2 = arc_points[i + 1] + + dx, dy = x2 - x1, y2 - y1 + length = (dx**2 + dy**2) ** 0.5 + if length > 0: + px, py = -dy / length * half_width, dx / length * half_width + + triangles.extend( + [ + (x1 + px, y1 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 + px, y2 + py, 0.0), + ] + ) + triangles.extend( + [ + (x2 + px, y2 + py, 0.0), + (x1 - px, y1 - py, 0.0), + (x2 - px, y2 - py, 0.0), + ] + ) + + triangles.extend( + [ + (x1, y1, -half_width), + (x2, y2, -half_width), + (x1, y1, +half_width), + ] + ) + triangles.extend( + [ + (x1, y1, +half_width), + (x2, y2, -half_width), + (x2, y2, +half_width), + ] + ) + + arrow_size = 0.30 + end_x, end_y = arc_points[-1] + prev_x, prev_y = arc_points[-2] + tangent_x = end_x - prev_x + tangent_y = end_y - prev_y + tangent_len = (tangent_x**2 + tangent_y**2) ** 0.5 + if tangent_len > 0: + tangent_x /= tangent_len + tangent_y /= tangent_len + + tip_x = end_x + tangent_x * arrow_size * 0.5 + tip_y = end_y + tangent_y * arrow_size * 0.5 + + perp_x = -tangent_y * arrow_size + perp_y = tangent_x * arrow_size + + triangles.extend( + [ + (tip_x, tip_y, 0.0), + (end_x - perp_x * 0.5, end_y - perp_y * 0.5, 0.0), + (end_x + perp_x * 0.5, end_y + perp_y * 0.5, 0.0), + ] + ) + + triangles.extend( + [ + (tip_x, tip_y, 0.0), + (end_x, end_y, -arrow_size * 0.5), + (end_x, end_y, +arrow_size * 0.5), + ] + ) + + return tuple(triangles) + + +class GizmoCycle(bpy.types.Gizmo): + """Circular arrow icon gizmo for cycling through enum values.""" + + bl_idname = "VIEW3D_GT_cycle" + + __slots__ = ("custom_shape",) + + tris = _generate_circular_arrow_tris() + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self.tris) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoArrow(GizmoMovable): + """Arrow gizmo for directional value editing.""" + + bl_idname = "BIM_GT_gizmo_arrow" + bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) + + def _get_arrow_triangles(self) -> tuple[tuple[float, float, float], ...]: + triangles = [] + + triangles.extend( + [ + (0, -ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), + (0, +ARROW_WIDTH, 0), + ] + ) + triangles.extend( + [ + (0, +ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, -ARROW_WIDTH, 0), + (ARROW_SHAFT_LENGTH, +ARROW_WIDTH, 0), + ] + ) + + triangles.extend( + [ + (0, 0, -ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), + (0, 0, +ARROW_WIDTH), + ] + ) + triangles.extend( + [ + (0, 0, +ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, -ARROW_WIDTH), + (ARROW_SHAFT_LENGTH, 0, +ARROW_WIDTH), + ] + ) + + head_width = ARROW_WIDTH * ARROW_HEAD_WIDTH_MULTIPLIER + triangles.extend( + [ + (ARROW_SHAFT_LENGTH, -head_width, 0), + (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, +head_width, 0), + ] + ) + + triangles.extend( + [ + (ARROW_SHAFT_LENGTH, 0, -head_width), + (ARROW_SHAFT_LENGTH + ARROW_HEAD_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, 0, +head_width), + ] + ) + + for i in range(ARROW_CIRCLE_SEGMENTS): + angle1 = (2 * math.pi * i) / ARROW_CIRCLE_SEGMENTS + angle2 = (2 * math.pi * (i + 1)) / ARROW_CIRCLE_SEGMENTS + + y1 = head_width * math.cos(angle1) + z1 = head_width * math.sin(angle1) + y2 = head_width * math.cos(angle2) + z2 = head_width * math.sin(angle2) + + triangles.extend( + [ + (ARROW_SHAFT_LENGTH, 0, 0), + (ARROW_SHAFT_LENGTH, y1, z1), + (ARROW_SHAFT_LENGTH, y2, z2), + ] + ) + + return tuple(triangles) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self._get_arrow_triangles()) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + self.draw_property_tooltip(context) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoArrow2D(GizmoMovable): + """Flat 2D arrow that rotates around its axis to face the camera.""" + + bl_idname = "BIM_GT_gizmo_arrow_2d" + bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) + + ARROW_2D_SHAFT_LENGTH = 0.5 + ARROW_2D_HEAD_LENGTH = 0.5 + ARROW_2D_WIDTH = 0.25 + ARROW_2D_HEAD_WIDTH = 0.75 + + def _get_arrow_2d_triangles(self) -> tuple[tuple[float, float, float], ...]: + """Generate flat arrow geometry in XY plane, pointing along +X.""" + shaft = self.ARROW_2D_SHAFT_LENGTH + head = self.ARROW_2D_HEAD_LENGTH + w = self.ARROW_2D_WIDTH / 2 + hw = self.ARROW_2D_HEAD_WIDTH / 2 + + return ( + # Shaft + (0, -w, 0), (shaft, -w, 0), (0, w, 0), + (0, w, 0), (shaft, -w, 0), (shaft, w, 0), + # Head + (shaft, -hw, 0), (shaft + head, 0, 0), (shaft, hw, 0), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self._get_arrow_2d_triangles()) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + self.draw_property_tooltip(context) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + def draw_prepare(self, context: bpy.types.Context) -> None: + """Rotate around arrow axis to face camera.""" + position = self.matrix_basis.translation + to_camera = get_camera_direction(context, position) + if to_camera is None: + return + + axis_world = Vector(self.matrix_basis.col[0][:3]).normalized() + to_camera_projected = to_camera - axis_world * to_camera.dot(axis_world) + + if to_camera_projected.length_squared < 1e-6: + return + + to_camera_projected.normalize() + + local_z_world = Vector(self.matrix_basis.col[2][:3]).normalized() + local_z_projected = local_z_world - axis_world * local_z_world.dot(axis_world) + + if local_z_projected.length_squared < 1e-6: + return + + local_z_projected.normalize() + + cross = local_z_projected.cross(to_camera_projected) + dot = local_z_projected.dot(to_camera_projected) + sign = 1.0 if cross.dot(axis_world) >= 0 else -1.0 + angle = sign * math.acos(max(-1.0, min(1.0, dot))) + + axis_rot = Matrix.Rotation(angle, 4, "X") + current_scale = self.matrix_offset.to_scale() if self.matrix_offset else Vector((1, 1, 1)) + self.matrix_offset = axis_rot @ Matrix.Scale(current_scale[0], 4) + + +class GizmoCone(GizmoMovable): + """Cone gizmo for directional value editing.""" + + bl_idname = "BIM_GT_gizmo_cone" + bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) + + def _get_cone_triangles(self) -> tuple[tuple[float, float, float], ...]: + triangles = [] + cone_tip_x = CONE_LENGTH + + for i in range(CONE_SEGMENTS): + angle1 = (2 * math.pi * i) / CONE_SEGMENTS + angle2 = (2 * math.pi * (i + 1)) / CONE_SEGMENTS + + y1 = CONE_RADIUS * math.cos(angle1) + z1 = CONE_RADIUS * math.sin(angle1) + y2 = CONE_RADIUS * math.cos(angle2) + z2 = CONE_RADIUS * math.sin(angle2) + + triangles.extend( + [ + (cone_tip_x, 0, 0), + (0, y1, z1), + (0, y2, z2), + ] + ) + + triangles.extend( + [ + (0, 0, 0), + (0, y2, z2), + (0, y1, z1), + ] + ) + + return tuple(triangles) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self._get_cone_triangles()) + + def draw(self, context: bpy.types.Context) -> None: + self.draw_custom_shape(self.custom_shape) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + +class GizmoDimension(GizmoMovable): + """Dimension line gizmo that displays a measurement with extension lines and text. + + The dimension line is drawn from (0, 0, 0) to (length, 0, 0) in local space, + with extension lines at both ends and a text label showing the formatted value. + Clicking on the dimension line allows editing the value similar to arrow gizmos. + + The arrows, extension lines, and text are drawn in screen space for constant size, + while the main dimension line spans the actual world-space distance. + """ + + bl_idname = "BIM_GT_gizmo_dimension" + bl_target_properties = ({"id": "offset", "type": "FLOAT", "array_length": 1},) + + # Class-level cached shaders (created once, reused across all instances) + _cached_line_shader = None + _cached_tri_shader = None + + @classmethod + def _get_line_shader(cls): + """Get cached POLYLINE_UNIFORM_COLOR shader.""" + if cls._cached_line_shader is None: + cls._cached_line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR") + return cls._cached_line_shader + + @classmethod + def _get_tri_shader(cls): + """Get cached UNIFORM_COLOR shader for triangles.""" + if cls._cached_tri_shader is None: + cls._cached_tri_shader = gpu.shader.from_builtin("UNIFORM_COLOR") + return cls._cached_tri_shader + + __slots__ = ( + "custom_shape", + "init_value", + "move_get_cb", + "move_set_cb", + "axis", + "local_axis", + "start_location", + "active_obj", + "initial_snap_state", + "invert_delta", + "delta_scale", + "prop_name", + "keyboard_input", + "gizmo_group", + "_snap_cache_built", + "_start_mouse_pos", + "_has_dragged", + "_dimension_length", + "text_offset_sign", # -1 to offset text below/left, +1 for above/right (default) + "show_start_arrow", # Whether to show arrow at start (origin) of dimension + "show_end_arrow", # Whether to show arrow at end of dimension + "text_alignment", # "center" (default) or "start" (left-aligned at offset from line) + "_original_value", # Original property value before interaction + "_click_offset", # Offset from dimension tip to click position (for snap correction) + "show_extension_lines", # Whether to show extension lines at dimension endpoints + ) + + ARROW_SIZE = 10 + EXTENSION_LENGTH = 4 + LINE_WIDTH = 2.0 + MIN_PIXELS_FOR_DETAILS = 35 + HIT_WIDTH = 0.03 + MIN_HIT_LENGTH = 0.05 + + def _get_clickable_shape(self) -> tuple[tuple[float, float, float], ...]: + """Generate a simple clickable bar shape (unit length along X).""" + hw = self.HIT_WIDTH / 2 + return ( + (0, -hw, -hw), (1, -hw, -hw), (0, hw, -hw), + (0, hw, -hw), (1, -hw, -hw), (1, hw, -hw), + (0, -hw, hw), (0, hw, hw), (1, -hw, hw), + (1, -hw, hw), (0, hw, hw), (1, hw, hw), + (0, -hw, -hw), (0, -hw, hw), (1, -hw, -hw), + (1, -hw, -hw), (0, -hw, hw), (1, -hw, hw), + (0, hw, -hw), (1, hw, -hw), (0, hw, hw), + (0, hw, hw), (1, hw, -hw), (1, hw, hw), + ) + + def setup(self) -> None: + self.custom_shape = self.new_custom_shape("TRIS", self._get_clickable_shape()) + self._dimension_length = 1.0 + self.text_offset_sign = 1 + self.show_start_arrow = False + self.show_end_arrow = True + self.text_alignment = "center" + self.show_extension_lines = True + + def draw(self, context: bpy.types.Context) -> None: + """Draw dimension graphics using the DimensionRenderer singleton.""" + if not hasattr(self, "_dimension_length") or self._dimension_length < 0: + return + + axis_world = Vector(self.matrix_basis.col[0][:3]).normalized() + start_world = self.matrix_basis.translation.copy() + end_world = start_world + axis_world * self._dimension_length + + DimensionRenderer.get_instance().draw( + context=context, + start_world=start_world, + end_world=end_world, + axis_world=axis_world, + dimension_length=self._dimension_length, + color=(self.color[0], self.color[1], self.color[2]), + alpha=self.alpha, + is_highlight=self.is_highlight, + highlight_color=(self.color_highlight[0], self.color_highlight[1], self.color_highlight[2]), + highlight_alpha=self.alpha_highlight, + show_start_arrow=getattr(self, "show_start_arrow", False), + show_end_arrow=getattr(self, "show_end_arrow", True), + show_extension_lines=getattr(self, "show_extension_lines", True), + text_offset_sign=getattr(self, "text_offset_sign", 1), + text_alignment=getattr(self, "text_alignment", "center"), + prop_name=getattr(self, "prop_name", None), + ) + + def _calculate_screen_endpoints( + self, context: bpy.types.Context + ) -> tuple[Vector, Vector, Vector, float] | None: + """Calculate screen-space endpoints and direction for the dimension line. + + Returns: + Tuple of (start_screen, end_screen, direction, length_screen) or None if off-screen + """ + region = context.region + rv3d = context.region_data + if not region or not rv3d: + return None + + axis_world = Vector(self.matrix_basis.col[0][:3]).normalized() + start_world = self.matrix_basis.translation.copy() + end_world = start_world + axis_world * self._dimension_length + + start_screen = location_3d_to_region_2d(region, rv3d, start_world) + end_screen = location_3d_to_region_2d(region, rv3d, end_world) + + if not start_screen or not end_screen: + return None + + direction = Vector((end_screen[0] - start_screen[0], end_screen[1] - start_screen[1])) + length_screen = direction.length + + actual_value_is_zero = self._dimension_length <= 0.001 + + # When screen length is zero due to viewing angle (not actual value being 0), skip drawing + if length_screen < 1 and not actual_value_is_zero: + return None + + # When actual value is zero, determine direction from 3D axis projection + if length_screen < 1 and actual_value_is_zero: + test_world = start_world + axis_world * 0.1 + test_screen = location_3d_to_region_2d(region, rv3d, test_world) + if test_screen: + direction = Vector((test_screen[0] - start_screen[0], test_screen[1] - start_screen[1])) + if direction.length > 0.001: + direction.normalize() + else: + direction = Vector((1, 0)) + else: + direction = Vector((1, 0)) + else: + direction.normalize() + + return (Vector(start_screen), Vector(end_screen), direction, length_screen) + + def _build_arrow_triangle( + self, position: Vector, direction: Vector, perpendicular: Vector, pointing_backward: bool + ) -> list[tuple[float, float]]: + """Build triangle vertices for an arrow head. + + Args: + position: Screen position of the arrow tip + direction: Normalized direction vector of the dimension line + perpendicular: Perpendicular vector for arrow width + pointing_backward: If True, arrow points opposite to direction (for end arrow) + + Returns: + List of 3 vertex tuples forming the arrow triangle + """ + sign = -1 if pointing_backward else 1 + arrow_tip = (position[0], position[1]) + arrow_back_left = ( + position[0] + sign * direction[0] * self.ARROW_SIZE + perpendicular[0] * self.ARROW_SIZE * 0.5, + position[1] + sign * direction[1] * self.ARROW_SIZE + perpendicular[1] * self.ARROW_SIZE * 0.5, + ) + arrow_back_right = ( + position[0] + sign * direction[0] * self.ARROW_SIZE - perpendicular[0] * self.ARROW_SIZE * 0.5, + position[1] + sign * direction[1] * self.ARROW_SIZE - perpendicular[1] * self.ARROW_SIZE * 0.5, + ) + return [arrow_tip, arrow_back_left, arrow_back_right] + + def _build_extension_line_vertices( + self, position: Vector, perpendicular: Vector + ) -> tuple[tuple[float, float], tuple[float, float]]: + """Build extension line endpoints perpendicular to the dimension at given position. + + Returns: + Tuple of (top_vertex, bottom_vertex) + """ + top = ( + position[0] + perpendicular[0] * self.EXTENSION_LENGTH, + position[1] + perpendicular[1] * self.EXTENSION_LENGTH, + ) + bottom = ( + position[0] - perpendicular[0] * self.EXTENSION_LENGTH, + position[1] - perpendicular[1] * self.EXTENSION_LENGTH, + ) + return (top, bottom) + + def draw_select(self, context: bpy.types.Context, select_id: int) -> None: + # Scale the clickable shape to match the dimension length + # The custom_shape is unit length (0 to 1), so we need to scale by _dimension_length + # Use MIN_HIT_LENGTH to ensure small dimensions are still clickable + length = getattr(self, "_dimension_length", 1.0) + hit_length = max(length, self.MIN_HIT_LENGTH) + + # Save original matrix_offset and apply length scaling along local X axis + # Use matrix_offset for local transforms as per Blender gizmo conventions + original_offset = self.matrix_offset.copy() if self.matrix_offset else Matrix.Identity(4) + self.matrix_offset = Matrix.Diagonal((hit_length, 1.0, 1.0, 1.0)) + + self.draw_custom_shape(self.custom_shape, select_id=select_id) + + self.matrix_offset = original_offset + + def set_dimension_length(self, length: float) -> None: + """Set the length of the dimension line with validation.""" + # Validate input: reject NaN, Inf, and non-numeric values + if not isinstance(length, (int, float)) or math.isnan(length) or math.isinf(length): + length = 0.0 + # Clamp to valid range (0 to 10000 meters is reasonable for BIM) + self._dimension_length = max(0.0, min(length, 10000.0)) + + def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set: + """Initialize dimension gizmo interaction with click-position tracking. + + Click-position tracking prevents jarring value jumps when clicking: + + 1. Calculate where user clicked on the dimension axis (click_distance) + 2. Set start_location at the click position so delta=0 there + 3. Store _original_value for cancel/restore functionality + 4. Set init_value = click_distance for direct position mapping + + Result: When dragging, value = click_distance + mouse_delta, giving + intuitive "drag to position" behavior without any initial jump. + The value only changes when the user actually drags. + """ + self.init_value = self.move_get_cb() if self.move_get_cb else 0.0 + self.active_obj = context.active_object + self.initial_snap_state = context.scene.tool_settings.use_snap + self.keyboard_input = NumericInputState.create_default() + self._snap_cache_built = False + self._has_dragged = False + self._start_mouse_pos = (event.mouse_region_x, event.mouse_region_y) + if not hasattr(self, "prop_name") or self.prop_name is None: + self.prop_name = "Value" + + # Push undo step before making changes so Ctrl+Z can restore original state + prop_name = getattr(self, "prop_name", "Value") + bpy.ops.ed.undo_push(message=f"Gizmo: {prop_name}") + + axis_world = Vector(self.matrix_basis.col[0][:3]).normalized() + gizmo_origin = self.matrix_basis.translation.copy() + + # Calculate where user clicked on the axis + region = context.region + rv3d = context.region_data + click_distance = self.init_value # Default: assume click at current value endpoint + + if region and rv3d: + click_coord = (event.mouse_region_x, event.mouse_region_y) + view_origin = region_2d_to_origin_3d(region, rv3d, click_coord) + view_direction = region_2d_to_vector_3d(region, rv3d, click_coord) + + result = intersect_line_line( + view_origin, + view_origin + view_direction * RAY_CAST_DISTANCE, + gizmo_origin, + gizmo_origin + axis_world * RAY_CAST_DISTANCE, + ) + + if result: + click_on_axis = result[1] + click_distance = (click_on_axis - gizmo_origin).dot(axis_world) + + # Set start_location at the click position on the axis + # This makes delta=0 when mouse is at click position + self.start_location = gizmo_origin + axis_world * click_distance + + # With start_location at click point and init_value = click_distance: + # - When mouse moves to position p: delta = p - click_distance + # - final_value = click_distance + (p - click_distance) = p + # This gives us direct "position = value" behavior. + # The modal only updates after user has dragged, preserving original value until then. + self._original_value = self.init_value + + # Why _click_offset: Users rarely click exactly on the dimension tip. Without this + # correction, the value would jump to match cursor position. By storing the offset + # between click position and actual tip, we can subtract it during modal updates + # so the dimension "sticks" to the cursor naturally without initial jumps. + self._click_offset = click_distance - self._original_value + + self.init_value = click_distance + + if self.initial_snap_state and self.active_obj: + build_snap_cache(context, self.active_obj) + self._snap_cache_built = True + + self._hide_other_gizmos() + + return {"RUNNING_MODAL"} + + def _hide_other_gizmos(self) -> None: + """Hide all other gizmos in the group during interaction.""" + gizmo_group = getattr(self, "gizmo_group", None) + if not gizmo_group: + return + + hidden_set: set[bpy.types.Gizmo] = set() + for gizmo in gizmo_group.gizmos: + if gizmo != self: + gizmo.hide = True + hidden_set.add(gizmo) + + _gizmo_modal_context.hidden_gizmos = hidden_set + + def _restore_gizmo_visibility(self) -> None: + """Restore visibility of gizmos hidden during interaction.""" + _gizmo_modal_context.hidden_gizmos = None + + def modal(self, context: bpy.types.Context, event: bpy.types.Event, tweak) -> set: + """Override modal to apply click offset and prevent value jumps.""" + region = context.region + rv3d = context.region_data + tool_settings = context.scene.tool_settings + + keyboard_result = self._handle_keyboard_input(context, event) + if keyboard_result is not None: + return keyboard_result + + if self.keyboard_input.is_active: + return {"RUNNING_MODAL"} + + if not region or not rv3d: + return {"RUNNING_MODAL"} + + tool_settings.use_snap = not self.initial_snap_state if event.ctrl else self.initial_snap_state + + if tool_settings.use_snap and not self._snap_cache_built and self.active_obj: + build_snap_cache(context, self.active_obj) + self._snap_cache_built = True + + current_coord = (event.mouse_region_x, event.mouse_region_y) + + if not self._has_dragged and hasattr(self, "_start_mouse_pos"): + dx = current_coord[0] - self._start_mouse_pos[0] + dy = current_coord[1] - self._start_mouse_pos[1] + if (dx * dx + dy * dy) > (self.DRAG_THRESHOLD ** 2): + self._has_dragged = True + view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) + view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) + + axis_direction = self.get_axis_direction() + + result = intersect_line_line( + view_origin, + view_origin + view_direction * RAY_CAST_DISTANCE, + self.start_location, + self.start_location + axis_direction * RAY_CAST_DISTANCE, + ) + current_3d = result[1] if result else self.start_location + + delta = (current_3d - self.start_location).dot(axis_direction) + + if tool_settings.use_snap and self.active_obj: + # Snap the dimension tip (not mouse position) to target + # Calculate where the dimension tip would be with current delta + # The tip is at: gizmo_origin + axis * (init_value + delta) + # Since start_location = gizmo_origin + axis * click_offset (where user clicked), + # the tip is at: current_3d - axis * click_offset + click_offset = getattr(self, "_click_offset", 0.0) + tip_3d = current_3d - axis_direction * click_offset + + # Snap the tip position + snapped_tip = snap_to_mesh(tip_3d, context, self.active_obj, current_coord) + if snapped_tip != tip_3d: + # Adjust delta so the dimension tip lands on the snapped position + # snap_to_mesh may return a tuple from the cache, ensure it's a Vector + snapped_tip_vec = Vector(snapped_tip) if not isinstance(snapped_tip, Vector) else snapped_tip + delta = (snapped_tip_vec - self.start_location).dot(axis_direction) + click_offset + set_snap_point(snapped_tip) + else: + clear_snap_point() + else: + clear_snap_point() + + if event.shift: + delta *= PRECISION_MODE_MULTIPLIER + + if getattr(self, "invert_delta", False): + delta = -delta + + delta_scale = getattr(self, "delta_scale", 1.0) + delta *= delta_scale + + kb = self.keyboard_input + final_delta = kb.parsed_value if kb.parsed_value != 0.0 else delta + + # Use original value (before click offset) for relative dragging behavior + # This ensures no value jump - the value only changes by the drag delta + original_value = getattr(self, "_original_value", self.init_value) + + # Only update the value if user has dragged or is typing + # This prevents value jumps when just clicking without dragging + if self._has_dragged or kb.is_active: + if self.move_set_cb: + self.move_set_cb(original_value + final_delta) + self._update_header(context, original_value + final_delta, tool_settings.use_snap, event.shift) + else: + # Show original value in header until user drags + self._update_header(context, original_value, tool_settings.use_snap, event.shift) + + return {"RUNNING_MODAL"} + + # Minimum clickable length (in world units) when dimension is at 0 + MIN_CLICKABLE_LENGTH = 0.05 + + def draw_prepare(self, context: bpy.types.Context) -> None: + """Update the clickable shape to match dimension length.""" + if not hasattr(self, "_dimension_length"): + self._dimension_length = 1.0 + + # Scale the clickable shape to match the dimension length + # Use minimum length to ensure there's always a clickable area (for the arrow tip) + scale_x = max(self._dimension_length, self.MIN_CLICKABLE_LENGTH) + self.matrix_offset = Matrix.Scale(scale_x, 4, Vector((1, 0, 0))) + + def exit(self, context: bpy.types.Context, cancel: bool) -> None: + """Handle gizmo exit - restore original value if cancelled.""" + # Clear header text + if context.area: + context.area.header_text_set(None) + if hasattr(self, "keyboard_input"): + self.keyboard_input.reset() + + should_invoke_keyboard = ( + not cancel + and hasattr(self, "_has_dragged") + and not self._has_dragged + and self.move_set_cb is not None + ) + + if should_invoke_keyboard: + _gizmo_modal_context.move_set_cb = self.move_set_cb + _gizmo_modal_context.active_gizmo = self + _gizmo_modal_context.gizmo_group = getattr(self, "gizmo_group", None) + # Use click position as start_location so delta=0 at current mouse position + # This prevents value jump when modal starts + _gizmo_modal_context.start_location = self.start_location.copy() + _gizmo_modal_context.axis_direction = self.get_axis_direction() + _gizmo_modal_context.active_obj = self.active_obj + _gizmo_modal_context.delta_scale = getattr(self, "delta_scale", 1.0) + # Pass click offset so modal can snap the dimension tip (not mouse position) + _gizmo_modal_context.click_offset = getattr(self, "_click_offset", 0.0) + # Use original value (before click offset adjustment) for the input modal + original_value = getattr(self, "_original_value", self.init_value) + bpy.ops.bim.gizmo_value_input( + "INVOKE_DEFAULT", + prop_name=getattr(self, "prop_name", "Value"), + init_value=original_value, + invert_delta=getattr(self, "invert_delta", False), + ) + elif cancel and hasattr(self, "_original_value") and self.move_set_cb: + self.move_set_cb(self._original_value) + + # (keyboard input modal handles its own visibility restoration) + if not should_invoke_keyboard: + self._restore_gizmo_visibility() + + if hasattr(self, "initial_snap_state"): + context.scene.tool_settings.use_snap = self.initial_snap_state + clear_snap_point() + clear_snap_cache() + + +class BaseParametricGizmoGroup: + """Base mixin for parametric element gizmo groups (doors, windows, stairs, etc.). + + Coordinate System + ================= + + All parametric elements use IFC/Blender coordinate conventions: + + Door/Window local space (looking from interior toward exterior): + :: + + +Z (up) + | + | + |_______ +X (width) + / + / + +Y (depth, toward exterior) + + - X: Width direction (0 at left edge, positive toward right) + - Y: Depth direction (0 at interior face, positive toward exterior) + - Z: Height direction (0 at floor level, positive upward) + - Origin: Bottom-left corner at interior face + + Stair local space (viewed from above, looking down): + :: + + +Z (up) + | +Y (run/travel) + | / + | / + |/_______ +X (width) + + - X: Width direction (perpendicular to travel) + - Y: Run direction (direction of travel up the stair) + - Z: Height direction (0 at base, positive upward) + - Origin: Bottom of first riser, left edge + + Gizmo Positioning Strategy + ========================== + + Gizmos are positioned to avoid overlapping with geometry by using view-dependent + offsets. The `get_local_view_direction()` method determines which side of the + element the camera is viewing from, and gizmos are placed on the visible side. + + - Dimension gizmos: Positioned with GIZMO_OFFSET from geometry edges + - Icon gizmos: Positioned above element using ICON_Z_OFFSET, laid out horizontally + """ + + # === Gizmo Colors === + # Match Blender axis convention: X=red, Y=green, Z=blue + COLOR_RED = (1.0, 0.2, 0.2) + COLOR_GREEN = (0.1, 0.8, 0.1) + COLOR_BLUE = (0.3, 0.3, 1.0) + + # === Dimension Gizmo Layout (meters) === + ARROW_SCALE = 0.25 # Scale factor for arrow gizmos + GIZMO_OFFSET = 0.15 # Distance from geometry edge to dimension line + + # === Icon Gizmo Layout (meters) === + # Icons are positioned in a horizontal row above the element: + # [Validate] [Cancel] [Cycle] + # 0.0 0.5 0.87 <- X positions (ICON_VALIDATE_X + offset) + EDITING_ICON_SCALE = 0.2 # Scale for editing icon gizmos (validate, cancel, cycle) + ICON_VALIDATE_X = 0.0 # X position of validate (checkmark) icon + ICON_CANCEL_X = 0.5 # X offset from validate for cancel (X) icon + ICON_CYCLE_X = 0.87 # X offset from validate for cycle (arrow) icon + ICON_Z_OFFSET = 0.5 # Height above element for icons + ICON_Y_OFFSET = GIZMO_OFFSET * 2 # Y offset to keep icons clear of geometry + + dimension_gizmo_props: list[DimensionGizmoConfig] = [] + enable_editing_operator: str = "" + finish_editing_operator: str = "" + cancel_editing_operator: str = "" + cycle_type_operator: str = "" + + @classmethod + def get_color_from_name(cls, color_name: str) -> tuple[float, float, float]: + """Get color tuple from color name string.""" + colors = {"RED": cls.COLOR_RED, "GREEN": cls.COLOR_GREEN, "BLUE": cls.COLOR_BLUE} + return colors.get(color_name.upper(), cls.COLOR_RED) + + @classmethod + def get_arrow_color_from_axis(cls, axis: tuple[int, int, int]) -> tuple[float, float, float]: + if axis[0] != 0: + return cls.COLOR_RED + elif axis[1] != 0: + return cls.COLOR_GREEN + return cls.COLOR_BLUE + + def get_axis_rotation_matrix(self, axis: tuple[int, int, int]) -> Matrix: + """Get a rotation matrix that aligns the X-axis with the given axis direction.""" + axis_vec = Vector(axis).normalized() + default_dir = Vector((1, 0, 0)) + return default_dir.rotation_difference(axis_vec).to_matrix().to_4x4() + + @staticmethod + def get_local_view_direction(context: bpy.types.Context, world_matrix: Matrix) -> tuple[bool, bool]: + """Calculate view direction in element's local space. + + Returns: + tuple of (viewing_from_negative_y, viewing_from_negative_x) + - viewing_from_negative_y: True if camera is on the -Y side of the element + - viewing_from_negative_x: True if camera is on the -X side of the element + + Returns (False, False) if region data is unavailable. + """ + rv3d = context.region_data + if not rv3d: + return False, False + + view_direction = Vector(rv3d.view_rotation @ Vector((0, 0, -1))) + local_view_dir = world_matrix.inverted().to_3x3() @ view_direction + + viewing_from_negative_y = local_view_dir.y < 0 + viewing_from_negative_x = local_view_dir.x < 0 + + return viewing_from_negative_y, viewing_from_negative_x + + def get_y_position_for_view( + self, props, viewing_from_negative_y: bool, width_attr: str = "width", use_offset: bool = False + ) -> float: + """Get Y position based on view direction. + + Common helper for view-dependent gizmo positioning. Elements are positioned + at Y=0 or Y=width depending on which side the camera is viewing from. + + Args: + props: Element properties object + viewing_from_negative_y: True if viewing from -Y side + width_attr: Property name for element width (default "width", door/window use implicit overall_width logic) + use_offset: If True, adds/subtracts GIZMO_OFFSET from the position + + Returns: + Y position: width + offset when viewing from -Y, 0 - offset otherwise + """ + width = getattr(props, width_attr, 0) + if viewing_from_negative_y: + return width + (self.GIZMO_OFFSET if use_offset else 0) + return -self.GIZMO_OFFSET if use_offset else 0 + + def compose_gizmo_matrix(self, translation: Vector, axis: tuple[int, int, int]) -> Matrix: + """Compose a gizmo transformation matrix from translation and axis. + + This is the standard pattern used for positioning gizmos: + translation @ rotation where rotation aligns X-axis with the given axis. + + Args: + translation: Position vector for the gizmo + axis: Direction axis tuple, e.g., (1, 0, 0) for X-axis + + Returns: + Combined transformation matrix (translation @ rotation) + """ + return Matrix.Translation(translation) @ self.get_axis_rotation_matrix(axis) + + def get_lining_y_position_for_view( + self, props, viewing_from_negative_y: bool, use_offset: bool = True + ) -> float: + """Get Y position for lining-based elements (doors, windows) based on view direction. + + For elements with lining_offset property, this calculates the Y position + relative to lining_offset, flipping sides based on camera view direction. + + Args: + props: Element properties object (must have lining_offset attribute) + viewing_from_negative_y: True if viewing from -Y side + use_offset: If True, adds/subtracts GIZMO_OFFSET (default True) + + Returns: + Y position: lining_offset + GIZMO_OFFSET when viewing from -Y, + lining_offset - GIZMO_OFFSET otherwise + """ + lining_offset = getattr(props, "lining_offset", 0) + if viewing_from_negative_y: + return lining_offset + (self.GIZMO_OFFSET if use_offset else 0) + return lining_offset - (self.GIZMO_OFFSET if use_offset else 0) + + @classmethod + def is_element_type(cls, element) -> bool: + raise NotImplementedError("Subclass must implement is_element_type()") + + @classmethod + def poll(cls, context) -> bool: + prefs = tool.Blender.get_addon_preferences() + if not prefs.gizmos.draw_gizmos_in_3d_viewport: + return False + + obj = tool.Blender.get_active_object(is_selected=True) + if not obj: + return False + + if len(tool.Blender.get_selected_objects()) != 1: + return False + + element = tool.Ifc.get_entity(obj) + if not element or not cls.is_element_type(element): + return False + return True + + def get_props(self, obj: bpy.types.Object) -> Any: + raise NotImplementedError("Subclass must implement get_props()") + + def get_gizmo_prefs(self) -> Any: + raise NotImplementedError("Subclass must implement get_gizmo_prefs()") + + def is_setup_complete(self) -> bool: + """Check if gizmo setup has been completed. + + Returns True if essential gizmos have been created. This guard + prevents errors when refresh() is called before setup() completes. + + Subclasses can override to add additional checks. + """ + return hasattr(self, "validate_gizmo") + + def get_prop_min_value(self, attr_name: str) -> float: + return 0.0 + + def should_hide_gizmo(self, attr_name: str, props) -> bool: + return not props.is_editing + + def get_element_height(self, props) -> float: + return getattr(props, "overall_height", getattr(props, "height", 1.0)) + + def is_gizmo_hidden_by_modal(self, gizmo: bpy.types.Gizmo) -> bool: + """Check if a gizmo should be hidden because a modal operator is active. + + This is used to hide all gizmos except the active one during modal + operations like keyboard value input or mouse dragging. + """ + hidden_by_modal = _gizmo_modal_context.hidden_gizmos or set() + return gizmo in hidden_by_modal + + def iter_visible_dimension_gizmos(self) -> Iterator[tuple["DimensionGizmoConfig", bpy.types.Gizmo]]: + """Iterate over visible dimension gizmos with their configs. + + Yields: + Tuples of (config, gizmo) for each dimension gizmo that exists and is not hidden. + + Example: + for config, gizmo in self.iter_visible_dimension_gizmos(): + gizmo.draw_prepare(context) + """ + for config in getattr(self, "dimension_gizmo_props", []): + gizmo = getattr(self, f"dimension_{config.attr_name}_gizmo", None) + if gizmo and not gizmo.hide: + yield config, gizmo + + def get_dimension_gizmo_if_visible(self, attr_name: str) -> bpy.types.Gizmo | None: + """Get a dimension gizmo by attribute name if it exists and is visible. + + Simplifies the common pattern: + if hasattr(self, "dimension_X_gizmo") and not self.dimension_X_gizmo.hide: + to: + if gizmo := self.get_dimension_gizmo_if_visible("X"): + + Args: + attr_name: The dimension attribute name (without "dimension_" prefix and "_gizmo" suffix) + + Returns: + The gizmo if it exists and is not hidden, None otherwise. + """ + gizmo = getattr(self, f"dimension_{attr_name}_gizmo", None) + if gizmo and not gizmo.hide: + return gizmo + return None + + def get_gizmo_if_visible(self, gizmo_name: str) -> bpy.types.Gizmo | None: + """Get a gizmo by attribute name if it exists and is visible. + + Args: + gizmo_name: The full gizmo attribute name (e.g., "validate_gizmo", "lock_gizmo") + + Returns: + The gizmo if it exists and is not hidden, None otherwise. + """ + gizmo = getattr(self, gizmo_name, None) + if gizmo and not gizmo.hide: + return gizmo + return None + + def set_icon_gizmo_position( + self, + gizmo_name: str, + mw: Matrix, + x: float, + y: float, + z: float, + billboard_rot: Matrix, + scale: float = 0.5, + ) -> None: + """Set an icon gizmo's position with billboard rotation. + + Args: + gizmo_name: The gizmo attribute name (e.g., "validate_gizmo") + mw: Object's world matrix + x, y, z: Local position coordinates + billboard_rot: Billboard rotation matrix to face camera + scale: Gizmo scale factor (default 0.5) + """ + if gz := self.get_gizmo_if_visible(gizmo_name): + local_transform = Matrix.Translation(Vector((x, y, z))) @ billboard_rot @ Matrix.Scale(scale, 4) + gz.matrix_basis = mw @ local_transform + + def set_dimension_gizmo_position( + self, + attr_name: str, + mw: Matrix, + position: Vector, + axis: tuple[int, int, int], + ) -> None: + """Set a dimension gizmo's position if visible. + + Args: + attr_name: The dimension attribute name (e.g., "overall_width") + mw: Object's world matrix + position: Local position as Vector or tuple (x, y, z) + axis: Direction axis tuple (e.g., (1, 0, 0) for X) + """ + if gz := self.get_dimension_gizmo_if_visible(attr_name): + gz.matrix_basis = mw @ self.compose_gizmo_matrix(position, axis) + + def should_hide_dimension_gizmo( + self, gizmo: bpy.types.Gizmo, config: "DimensionGizmoConfig", props, gizmo_prefs + ) -> bool: + """Unified visibility check for dimension gizmos. + + Checks all hide conditions in priority order: + 1. Modal operator hiding + 2. User preference visibility toggle + 3. Editing state + 4. Custom visibility condition from config + + Args: + gizmo: The gizmo to check + config: Dimension gizmo configuration + props: Element properties object + gizmo_prefs: Gizmo visibility preferences + + Returns: + True if gizmo should be hidden, False otherwise + """ + if self.is_gizmo_hidden_by_modal(gizmo): + return True + if not getattr(gizmo_prefs, config.attr_name, True): + return True + if self.should_hide_gizmo(config.attr_name, props): + return True + if config.visibility_condition and not config.visibility_condition(props): + return True + return False + + def setup_editing_gizmos(self, context: bpy.types.Context) -> None: + prefs = tool.Blender.get_addon_preferences() + default_color = prefs.decorations_colour[:3] + highlight_color = prefs.decorator_color_selected[:3] + + self.pen_gizmo = self.gizmos.new("VIEW3D_GT_pen") + self.pen_gizmo.use_draw_scale = False + self.pen_gizmo.color = default_color + self.pen_gizmo.color_highlight = highlight_color + self.pen_gizmo.alpha = 0.8 + self.pen_gizmo.target_set_operator(self.enable_editing_operator) + + self.validate_gizmo = self.gizmos.new("VIEW3D_GT_validate") + self.validate_gizmo.use_draw_scale = False + self.validate_gizmo.color = self.COLOR_GREEN + self.validate_gizmo.color_highlight = highlight_color + self.validate_gizmo.alpha = 0.8 + self.validate_gizmo.target_set_operator(self.finish_editing_operator) + + self.cancel_gizmo = self.gizmos.new("VIEW3D_GT_cancel") + self.cancel_gizmo.use_draw_scale = False + self.cancel_gizmo.color = self.COLOR_RED + self.cancel_gizmo.color_highlight = highlight_color + self.cancel_gizmo.alpha = 0.8 + self.cancel_gizmo.target_set_operator(self.cancel_editing_operator) + + if self.cycle_type_operator: + self.cycle_gizmo = self.gizmos.new("VIEW3D_GT_cycle") + self.cycle_gizmo.use_draw_scale = False + self.cycle_gizmo.color = default_color + self.cycle_gizmo.color_highlight = highlight_color + self.cycle_gizmo.alpha = 0.8 + self.cycle_gizmo.target_set_operator(self.cycle_type_operator) + + def _make_dimension_getter(self, config: DimensionGizmoConfig): + """Create getter closure for dimension gizmo.""" + if config.compute_value: + compute_fn = config.compute_value + + def move_get(): + obj = bpy.context.active_object + if not obj: + return 0.0 + return compute_fn(self.get_props(obj)) + + return move_get + + attr_name = config.attr_name + + def move_get(): + obj = bpy.context.active_object + if not obj: + return 0.0 + return getattr(self.get_props(obj), attr_name, 0.0) + + return move_get + + def _make_dimension_setter(self, config: DimensionGizmoConfig): + """Create setter closure for dimension gizmo.""" + if config.apply_value: + apply_fn, min_val = config.apply_value, config.min_value + + def move_set(value): + obj = bpy.context.active_object + if not obj: + return + apply_fn(self.get_props(obj), max(min_val, value)) + + return move_set + + attr_name, min_val = config.attr_name, config.min_value + + def move_set(value): + obj = bpy.context.active_object + if not obj: + return + setattr(self.get_props(obj), attr_name, max(min_val, value)) + + return move_set + + def setup_dimension_gizmos(self, context: bpy.types.Context) -> None: + """Set up dimension gizmos from dimension_gizmo_props configuration.""" + prefs = tool.Blender.get_addon_preferences() + highlight_color = prefs.decorator_color_selected[:3] + + for config in getattr(self, "dimension_gizmo_props", []): + gizmo = self.gizmos.new("BIM_GT_gizmo_dimension") + gizmo.move_get_cb = self._make_dimension_getter(config) + gizmo.move_set_cb = self._make_dimension_setter(config) + gizmo.axis = Vector(config.axis) + gizmo.local_axis = Vector(config.axis) + gizmo.invert_delta = config.invert_delta + gizmo.delta_scale = config.delta_scale + gizmo.prop_name = config.prop_name # Auto-derived in __post_init__ + gizmo.gizmo_group = self + gizmo.color = self.get_color_from_name(config.color) + gizmo.color_highlight = highlight_color + gizmo.alpha = 1.0 + gizmo.use_draw_modal = True + gizmo.use_draw_scale = False + gizmo.text_offset_sign = config.text_offset_sign + gizmo.text_alignment = config.text_alignment + gizmo.show_start_arrow = config.show_start_arrow + gizmo.show_end_arrow = config.show_end_arrow + setattr(self, f"dimension_{config.attr_name}_gizmo", gizmo) + + def update_dimension_gizmos(self, mw: Matrix, props) -> None: + """Update dimension gizmos from dimension_gizmo_props configuration.""" + gizmo_prefs = self.get_gizmo_prefs() + + for config in getattr(self, "dimension_gizmo_props", []): + gizmo = getattr(self, f"dimension_{config.attr_name}_gizmo", None) + if gizmo is None: + continue + + # Use unified visibility checker + if self.should_hide_dimension_gizmo(gizmo, config, props, gizmo_prefs): + gizmo.hide = True + continue + + gizmo.hide = False + + matrix_method = getattr(self, f"get_dimension_matrix_{config.attr_name}", None) + base_matrix = matrix_method(props) if matrix_method else Matrix.Identity(4) + + if config.compute_value: + value = config.compute_value(props) + else: + value = getattr(props, config.attr_name, 0.0) + + # Handle negative values by flipping the gizmo direction + if value < 0: + # Flip the X axis (dimension direction) for negative values + flip_matrix = Matrix.Scale(-1, 4, Vector((1, 0, 0))) + gizmo.matrix_basis = mw @ base_matrix @ flip_matrix + gizmo.set_dimension_length(abs(value)) + else: + gizmo.matrix_basis = mw @ base_matrix + gizmo.set_dimension_length(value) + + def get_icon_y_offset(self, context: bpy.types.Context, mw: Matrix) -> float: + """Get Y offset for icons based on view direction. + + Returns negative offset when viewing from -Y side (icons move to -Y), + positive offset when viewing from +Y side (icons move to +Y). + Subclasses can override to customize behavior. + """ + return 0.0 + + def update_editing_gizmos(self, context: bpy.types.Context, mw: Matrix, props) -> None: + """Update editing icon gizmo positions to billboard toward camera.""" + icon_z = self.get_element_height(props) + self.ICON_Z_OFFSET + icon_y = self.get_icon_y_offset(context, mw) + billboard_rot = get_billboard_rotation(context) + + # This ensures icons face camera regardless of object rotation + local_pos_validate = Vector((self.ICON_VALIDATE_X, icon_y, icon_z)) + world_pos_validate = mw @ local_pos_validate + + icon_matrix_base = Matrix.Translation(world_pos_validate) @ billboard_rot @ Matrix.Scale(0.5, 4) + + if props.is_editing: + self.pen_gizmo.hide = True + self.validate_gizmo.hide = self.is_gizmo_hidden_by_modal(self.validate_gizmo) + self.validate_gizmo.matrix_basis = icon_matrix_base + + self.cancel_gizmo.hide = self.is_gizmo_hidden_by_modal(self.cancel_gizmo) + local_pos_cancel = Vector((self.ICON_VALIDATE_X + self.ICON_CANCEL_X, icon_y, icon_z)) + world_pos_cancel = mw @ local_pos_cancel + self.cancel_gizmo.matrix_basis = Matrix.Translation(world_pos_cancel) @ billboard_rot @ Matrix.Scale(0.5, 4) + + if self.cycle_type_operator: + self.cycle_gizmo.hide = self.is_gizmo_hidden_by_modal(self.cycle_gizmo) + local_pos_cycle = Vector((self.ICON_VALIDATE_X + self.ICON_CYCLE_X, icon_y, icon_z)) + world_pos_cycle = mw @ local_pos_cycle + self.cycle_gizmo.matrix_basis = Matrix.Translation(world_pos_cycle) @ billboard_rot @ Matrix.Scale(0.30, 4) + else: + self.pen_gizmo.hide = self.is_gizmo_hidden_by_modal(self.pen_gizmo) + self.pen_gizmo.matrix_basis = icon_matrix_base + self.validate_gizmo.hide = True + self.cancel_gizmo.hide = True + if self.cycle_type_operator: + self.cycle_gizmo.hide = True + + def draw_prepare(self, context: bpy.types.Context) -> None: + """Called before drawing - updates gizmos to face camera. + + This method updates editing gizmos and dimension gizmos. + Subclasses can override _update_dimension_gizmo_positions() to customize + dimension gizmo positioning based on view direction. + """ + obj = context.active_object + if not obj: + return + props = self.get_props(obj) + mw = obj.matrix_world + self.update_editing_gizmos(context, mw, props) + + self._update_dimension_gizmo_positions(context, mw, props) + + # Prepare dimension gizmos for drawing + for _, gizmo in self.iter_visible_dimension_gizmos(): + gizmo.draw_prepare(context) + + def _update_dimension_gizmo_positions( + self, context: bpy.types.Context, mw: "Matrix", props # noqa: ARG002 + ) -> None: + """Update dimension gizmo positions based on view direction. + + Override this method in subclasses to implement view-dependent + positioning for dimension gizmos. + + Args: + context: Blender context + mw: Object's world matrix + props: Element properties object + """ diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index 5629b1a3cc..bf2c401f16 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -162,7 +162,9 @@ classes = ( stair.EnableEditingStair, stair.RemoveStair, stair.ToggleStairTotalLengthLock, + stair.ToggleStairCustomTreadLock, stair.AdjustStairTreads, + stair.SetStairTreads, stair.CycleStairType, stair.GizmoStairEdition, sverchok_modifier.CreateNewSverchokGraph, diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index 95280b62ca..6705b59570 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -33,8 +33,8 @@ import bonsai.core.geometry import bonsai.core.geometry as core import bonsai.core.root from bonsai.bim.module.model.window import create_bm_window, create_bm_box -from bonsai.bim import gizmo -from bonsai.bim.gizmo import GizmoPropConfig +from bonsai.bim.module.drawing import gizmos as gizmo +from bonsai.bim.module.drawing.gizmos import DimensionGizmoConfig from mathutils import Vector, Matrix @@ -786,31 +786,33 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): cancel_editing_operator = "bim.cancel_editing_door" cycle_type_operator = "bim.cycle_door_type" - gizmo_props = [ - GizmoPropConfig("overall_height", (0, 0, 1)), - GizmoPropConfig("overall_width", (1, 0, 0)), - GizmoPropConfig("threshold_thickness", (0, 0, 1)), - GizmoPropConfig("threshold_depth", (0, 1, 0)), - GizmoPropConfig("lining_depth", (0, 1, 0)), - GizmoPropConfig("lining_thickness", (-1, 0, 0)), - GizmoPropConfig("transom_offset", (0, 0, 1)), - GizmoPropConfig("transom_thickness", (0, 0, 1)), - GizmoPropConfig("casing_thickness", (-1, 0, 0)), - GizmoPropConfig("casing_depth", (0, 1, 0)), + dimension_gizmo_props = [ + DimensionGizmoConfig(attr_name="overall_width", axis=(1, 0, 0), min_value=0.01, text_offset_sign=-1), + DimensionGizmoConfig(attr_name="overall_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start"), + DimensionGizmoConfig(attr_name="threshold_thickness", axis=(0, 0, 1)), + DimensionGizmoConfig(attr_name="threshold_depth", axis=(0, 1, 0)), + DimensionGizmoConfig(attr_name="threshold_offset", axis=(0, 1, 0)), + DimensionGizmoConfig(attr_name="lining_offset", axis=(0, 1, 0)), + DimensionGizmoConfig(attr_name="lining_depth", axis=(0, 1, 0)), + DimensionGizmoConfig(attr_name="lining_thickness", axis=(-1, 0, 0)), + DimensionGizmoConfig(attr_name="transom_offset", axis=(0, 0, 1)), + DimensionGizmoConfig(attr_name="transom_thickness", axis=(0, 0, 1)), + DimensionGizmoConfig(attr_name="casing_thickness", axis=(-1, 0, 0)), + DimensionGizmoConfig(attr_name="casing_depth", axis=(0, 1, 0)), ] @classmethod def is_element_type(cls, element) -> bool: return tool.Blender.Modifier.is_door(element) - def get_props(self, obj): + def get_props(self, obj: bpy.types.Object): return tool.Model.get_door_props(obj) def get_gizmo_prefs(self): prefs = tool.Blender.get_addon_preferences() return prefs.gizmos.door - def should_hide_gizmo(self, attr_name, props): + def should_hide_gizmo(self, attr_name: str, props) -> bool: """Door-specific visibility rules for gizmos.""" if not props.is_editing: return True @@ -824,90 +826,100 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): return True return False - def get_gizmo_matrix_overall_height(self, props): - translation = Matrix.Translation(V_(props.overall_width - 0.05, props.lining_offset, props.overall_height)) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation + def get_icon_y_offset(self, context: bpy.types.Context, mw: Matrix) -> float: + """Get Y offset for icons based on view direction. - def get_gizmo_matrix_overall_width(self, props): - translation = Matrix.Translation(V_(props.overall_width, props.lining_offset, props.overall_height - 0.05)) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation - - def get_gizmo_matrix_threshold_thickness(self, props): - translation = Matrix.Translation( - V_( - props.overall_width / 2, - props.threshold_offset + props.threshold_depth / 2 + props.lining_offset, - props.threshold_thickness, + Positions icons further than the furthest geometry: + max(threshold_offset + threshold_depth, lining_offset + lining_depth) + 2 * GIZMO_OFFSET + """ + obj = context.active_object + if not obj: + return self.ICON_Y_OFFSET + props = self.get_props(obj) + furthest_y = ( + max( + props.threshold_offset + props.threshold_depth, + props.lining_offset + props.lining_depth, ) + + 2 * self.GIZMO_OFFSET ) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation - def get_gizmo_matrix_threshold_depth(self, props): - translation = Matrix.Translation( - V_(props.overall_width / 2, props.threshold_depth + props.lining_offset, props.threshold_thickness / 2) - ) - rotation = self.get_axis_rotation_matrix((0, 1, 0)) - return translation @ rotation + viewing_from_negative_y, _ = self.get_local_view_direction(context, mw) + if viewing_from_negative_y: + return -furthest_y + return furthest_y - def get_gizmo_matrix_lining_depth(self, props): - translation = Matrix.Translation( - V_(props.overall_width / 2, props.lining_depth + props.lining_offset, props.overall_height) + def get_dimension_matrix_threshold_thickness(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width / 2, props.threshold_offset + props.threshold_depth, 0), (0, 0, 1) ) - rotation = self.get_axis_rotation_matrix((0, 1, 0)) - return translation @ rotation - def get_gizmo_matrix_lining_thickness(self, props): - translation = Matrix.Translation( - V_(props.overall_width - props.lining_thickness, props.lining_depth / 2, props.overall_height / 2) + def get_dimension_matrix_threshold_depth(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width / 2, props.threshold_offset, props.threshold_thickness), (0, 1, 0) ) - rotation = self.get_axis_rotation_matrix((-1, 0, 0)) - return translation @ rotation - def get_gizmo_matrix_transom_offset(self, props): - # Position at the bottom of the transom (transom extends upward from offset) - translation = Matrix.Translation( - V_(props.overall_width / 2, props.lining_offset, props.transom_offset) + def get_dimension_matrix_threshold_offset(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width / 2 - 0.1, 0, props.threshold_thickness), (0, 1, 0) ) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation - def get_gizmo_matrix_transom_thickness(self, props): - # Position at the top of the transom (offset + thickness) - translation = Matrix.Translation( - V_(props.overall_width / 2, props.lining_offset, props.transom_offset + props.transom_thickness) + def get_dimension_matrix_lining_offset(self, props) -> Matrix: + return self.compose_gizmo_matrix(V_(0, 0, 0), (0, 1, 0)) + + def get_dimension_matrix_lining_depth(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width, props.lining_offset, props.overall_height), (0, 1, 0) + ) + + def get_dimension_matrix_lining_thickness(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width, props.lining_depth / 2, props.overall_height / 2), (-1, 0, 0) + ) + + def get_dimension_matrix_transom_offset(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width / 2, props.lining_offset, 0), (0, 0, 1) + ) + + def get_dimension_matrix_transom_thickness(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width / 2, props.lining_offset, props.transom_offset), (0, 0, 1) ) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation @staticmethod def _get_casing_gizmo_base_position(props) -> tuple[float, float, float]: """Get common base position for casing gizmos.""" - x = -props.casing_thickness + props.lining_thickness + x = props.lining_thickness y_base = props.lining_depth + props.lining_offset z = props.overall_height / 2 return x, y_base, z - def get_gizmo_matrix_casing_thickness(self, props): + def get_dimension_matrix_casing_thickness(self, props) -> Matrix: x, y_base, z = self._get_casing_gizmo_base_position(props) - translation = Matrix.Translation(V_(x, y_base + props.casing_depth / 2, z)) - rotation = self.get_axis_rotation_matrix((-1, 0, 0)) - return translation @ rotation + return self.compose_gizmo_matrix(V_(x, y_base + props.casing_depth / 2, z), (-1, 0, 0)) - def get_gizmo_matrix_casing_depth(self, props): + def get_dimension_matrix_casing_depth(self, props) -> Matrix: x, y_base, z = self._get_casing_gizmo_base_position(props) - translation = Matrix.Translation(V_(x, y_base + props.casing_depth, z)) - rotation = self.get_axis_rotation_matrix((0, 1, 0)) - return translation @ rotation + return self.compose_gizmo_matrix(V_(x - props.casing_thickness, y_base, z), (0, 1, 0)) - def setup(self, context): - # Use base class methods for common gizmos - self.setup_property_gizmos(context) + def get_dimension_matrix_overall_width(self, props) -> Matrix: + """Position width dimension below the door.""" + return self.compose_gizmo_matrix( + V_(0, props.lining_offset - self.GIZMO_OFFSET, -self.GIZMO_OFFSET), (1, 0, 0) + ) + + def get_dimension_matrix_overall_height(self, props) -> Matrix: + """Position height dimension to the side of the door.""" + casing_offset = props.casing_thickness if props.lining_offset == 0.0 else 0.0 + return self.compose_gizmo_matrix( + V_(props.overall_width + casing_offset + self.GIZMO_OFFSET, props.lining_offset - self.GIZMO_OFFSET, 0), + (0, 0, 1), + ) + + def setup(self, context: bpy.types.Context) -> None: self.setup_editing_gizmos(context) - - # Door-specific: swing arc gizmos + self.setup_dimension_gizmos(context) prefs = tool.Blender.get_addon_preferences() highlight_color = prefs.decorator_color_selected[:3] inactive_color = prefs.decorator_color_background[:3] @@ -922,7 +934,6 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): op = self.gizmo_door_type.target_set_operator("bim.toggle_door_swing") op.flip_geometry = False - # Flip arc gizmo - mirrors the swing arc along X axis, flips door and toggles direction when clicked self.gizmo_flip_arc = self.gizmos.new("VIEW3D_GT_arc") self.gizmo_flip_arc.use_draw_scale = False self.gizmo_flip_arc.color = inactive_color @@ -933,40 +944,65 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): op.flip_geometry = True op.flip_local_axes = "XY" - def refresh(self, context): + def refresh(self, context: bpy.types.Context) -> None: + if not self.is_setup_complete(): + return obj = context.active_object if not obj: return props = self.get_props(obj) mw = obj.matrix_world - self.update_property_gizmos(mw, props) self.update_swing_gizmos(mw, props) self.update_editing_gizmos(context, mw, props) + self.update_dimension_gizmos(mw, props) - def update_swing_gizmos(self, mw, props): + def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props) -> None: + """Update dimension gizmo positions based on camera view direction.""" + viewing_from_negative_y, viewing_from_negative_x = self.get_local_view_direction(context, mw) + y_pos = self.get_lining_y_position_for_view(props, viewing_from_negative_y) + + self.set_dimension_gizmo_position("overall_width", mw, V_(0, y_pos, -self.GIZMO_OFFSET), (1, 0, 0)) + + casing_offset = props.casing_thickness if props.lining_offset == 0.0 else 0.0 + if viewing_from_negative_x: + x_pos = -casing_offset - self.GIZMO_OFFSET + else: + x_pos = props.overall_width + casing_offset + self.GIZMO_OFFSET + self.set_dimension_gizmo_position("overall_height", mw, V_(x_pos, y_pos, 0), (0, 0, 1)) + + def update_swing_gizmos(self, mw: Matrix, props) -> None: """Update swing gizmo position and color based on editing state.""" - prefs = tool.Blender.get_addon_preferences() - door_gizmo_prefs = prefs.gizmos.door + door_type_hidden_by_modal = self.is_gizmo_hidden_by_modal(self.gizmo_door_type) + flip_arc_hidden_by_modal = self.is_gizmo_hidden_by_modal(self.gizmo_flip_arc) - self.gizmo_door_type.hide = not props.is_editing or not door_gizmo_prefs.swing_arc - self.gizmo_flip_arc.hide = not props.is_editing or not door_gizmo_prefs.flip_arc + if door_type_hidden_by_modal: + self.gizmo_door_type.hide = True + else: + prefs = tool.Blender.get_addon_preferences() + door_gizmo_prefs = prefs.gizmos.door + self.gizmo_door_type.hide = not props.is_editing or not door_gizmo_prefs.swing_arc + + if flip_arc_hidden_by_modal: + self.gizmo_flip_arc.hide = True + else: + prefs = tool.Blender.get_addon_preferences() + door_gizmo_prefs = prefs.gizmos.door + self.gizmo_flip_arc.hide = not props.is_editing or not door_gizmo_prefs.flip_arc - # If both are hidden, no need to calculate transforms if self.gizmo_door_type.hide and self.gizmo_flip_arc.hide: return - # Calculate base swing transformation (common to both arcs) swing_x_offset = props.overall_width if "RIGHT" in props.door_type else 0.0 base_swing_transform = Matrix.Translation(V_(swing_x_offset, props.lining_offset, 0)) @ Matrix.Scale( props.overall_width, 4 ) + prefs = tool.Blender.get_addon_preferences() if not self.gizmo_door_type.hide: self.gizmo_door_type.matrix_basis = mw @ base_swing_transform self.gizmo_door_type.color = prefs.decorations_colour[:3] if not self.gizmo_flip_arc.hide: - # Mirror the flip arc along Y axis to show the opposite swing direction mirror_y = Matrix.Scale(-1, 4, (0, 1, 0)) self.gizmo_flip_arc.matrix_basis = mw @ base_swing_transform @ mirror_y diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index 8ced98b0d1..4611c1b0a0 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -27,9 +27,12 @@ import ifcopenshell.util.representation import ifcopenshell.util.unit import bonsai.core.root import bonsai.tool as tool -from bonsai.bim import gizmo -from bonsai.bim.gizmo import GizmoPropConfig +from bonsai.bim.module.drawing import gizmos as gizmo +from bonsai.bim.module.drawing.gizmos import DimensionGizmoConfig +from bonsai.tool.numeric_input import IntegerInputState, run_integer_input_modal, update_header from mathutils import Vector, Matrix + +V_ = tool.Blender.V_ from bmesh.types import BMVert from bpy.types import Operator from bpy.props import FloatProperty, IntProperty @@ -218,6 +221,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.cancel_editing_stair" bl_label = "Cancel Editing Stair" + bl_description = "Cancel editing and revert stair parameters to their previous values" bl_options = {"REGISTER"} def _execute(self, context): @@ -239,6 +243,7 @@ class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator): class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.finish_editing_stair" bl_label = "Finish Editing Stair" + bl_description = "Apply changes and finish editing stair parameters" bl_options = {"REGISTER"} def _execute(self, context): @@ -266,6 +271,7 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator): class EnableEditingStair(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_stair" bl_label = "Enable Editing Stair" + bl_description = "Enter edit mode to modify stair parameters interactively" bl_options = {"REGISTER"} def _execute(self, context): @@ -317,8 +323,26 @@ class ToggleStairTotalLengthLock(bpy.types.Operator): return {"FINISHED"} +class ToggleStairCustomTreadLock(bpy.types.Operator): + """Toggle custom first/last tread runs. When unlocked, first and last treads can have different lengths.""" + + bl_idname = "bim.toggle_stair_custom_tread_lock" + bl_label = "Toggle Custom Tread Lock" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Model.get_stair_props(obj) + props.custom_tread_lock = not props.custom_tread_lock + + return {"FINISHED"} + + class AdjustStairTreads(bpy.types.Operator): - """Adjust the number of treads""" + """Adjust the number of treads. Shift+click to enter a specific number.""" bl_idname = "bim.adjust_stair_treads" bl_label = "Adjust Stair Treads" @@ -326,6 +350,12 @@ class AdjustStairTreads(bpy.types.Operator): increment: IntProperty(name="Increment", default=1) + def invoke(self, context, event): + if event.shift: + bpy.ops.bim.set_stair_treads("INVOKE_DEFAULT") + return {"FINISHED"} + return self.execute(context) + def execute(self, context): obj = context.active_object if not obj: @@ -339,6 +369,51 @@ class AdjustStairTreads(bpy.types.Operator): return {"FINISHED"} +class SetStairTreads(bpy.types.Operator): + """Set the number of treads to a specific value.""" + + bl_idname = "bim.set_stair_treads" + bl_label = "Set Number of Treads" + bl_options = {"REGISTER", "UNDO", "INTERNAL"} + + def invoke(self, context, event): # noqa: ARG002 + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Model.get_stair_props(obj) + self._input = IntegerInputState.from_value(props.number_of_treads, min_value=1) + self._original_value = props.number_of_treads + + bpy.ops.ed.undo_push(message="Set Number of Treads") + context.window_manager.modal_handler_add(self) + update_header(context, self._format_header()) + return {"RUNNING_MODAL"} + + def modal(self, context, event): + return run_integer_input_modal(self, context, event) + + def _apply_value(self, context) -> None: + obj = context.active_object + if not obj: + return + value = self._input.get_value() + if value is not None: + props = tool.Model.get_stair_props(obj) + props.number_of_treads = value + + def _restore_value(self, context) -> None: + obj = context.active_object + if obj: + props = tool.Model.get_stair_props(obj) + props.number_of_treads = self._original_value + + def _format_header(self) -> str: + input_str = self._input.get_input_string() + validity = "" if self._input.is_valid else " [must be >= 1]" + return f"Number of Treads: {input_str}_{validity} | Enter to confirm, Esc to cancel" + + class CycleStairType(bpy.types.Operator): """Cycle through stair types. Shift+click to cycle in reverse.""" @@ -366,6 +441,26 @@ class CycleStairType(bpy.types.Operator): return {"FINISHED"} +def _compute_first_tread_run(props) -> float: + """Get the first custom tread run value from the tuple property.""" + return props.custom_first_last_tread_run[0] + + +def _apply_first_tread_run(props, value: float) -> None: + """Apply a new first custom tread run value, preserving the second value.""" + props.custom_first_last_tread_run = (max(0.01, value), props.custom_first_last_tread_run[1]) + + +def _compute_last_tread_run(props) -> float: + """Get the last custom tread run value from the tuple property.""" + return props.custom_first_last_tread_run[1] + + +def _apply_last_tread_run(props, value: float) -> None: + """Apply a new last custom tread run value, preserving the first value.""" + props.custom_first_last_tread_run = (props.custom_first_last_tread_run[0], max(0.01, value)) + + class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): bl_idname = "OBJECT_GGT_bim_stair_edition" bl_label = "Stair Editing Gizmo" @@ -373,171 +468,197 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): bl_region_type = "WINDOW" bl_options = {"3D", "PERSISTENT"} - # Gizmo layout offsets (meters) - GIZMO_X_OFFSET = 0.5 # Horizontal offset from stair end - GIZMO_PLUS_X_OFFSET = 0.25 # Additional X offset for plus button - GIZMO_MINUS_X_OFFSET = 0.5 # Additional X offset for minus button - GIZMO_BUTTON_Z_OFFSET = 0.15 # Vertical offset for +/- buttons above lock - GIZMO_CYCLE_Z_OFFSET = 0.5 # Vertical offset for cycle gizmo above lock + # === Stair-Specific Icon Layout (meters) === + # Additional icons for stair editing, positioned after standard icons: + # [Validate] [Cancel] [Cycle] [TreadLock] [Plus] [Minus] + ICON_TREAD_LOCK_X = 1.24 # X position for tread lock toggle icon + ICON_PLUS_X = 1.61 # X position for add tread (+) icon + ICON_MINUS_X = 1.98 # X position for remove tread (-) icon + ICON_PLUS_MINUS_SCALE = 0.24 # Scale for plus/minus icons (slightly larger) enable_editing_operator = "bim.enable_editing_stair" finish_editing_operator = "bim.finish_editing_stair" cancel_editing_operator = "bim.cancel_editing_stair" + cycle_type_operator = "bim.cycle_stair_type" - gizmo_props = [ - GizmoPropConfig("width", (0, 1, 0)), - GizmoPropConfig("height", (0, 0, 1)), - GizmoPropConfig("tread_run", (1, 0, 0)), - GizmoPropConfig("tread_depth", (0, 0, -1)), - GizmoPropConfig("nosing_length", (-1, 0, 0)), - GizmoPropConfig("nosing_depth", (0, 0, -1)), - GizmoPropConfig("total_length_target", (1, 0, 0)), - GizmoPropConfig("base_slab_depth", (0, 0, -1)), - GizmoPropConfig("top_slab_depth", (0, 0, -1)), + def get_icon_y_offset(self, context, mw): + """Get Y offset for icons based on view direction. + + Positions icons further than the furthest geometry: + stair_width + 2 * GIZMO_OFFSET + """ + obj = context.active_object + if not obj: + return self.ICON_Y_OFFSET + props = self.get_props(obj) + furthest_y = props.width + 2 * self.GIZMO_OFFSET + + viewing_from_negative_y, _ = self.get_local_view_direction(context, mw) + if viewing_from_negative_y: + return -furthest_y + return furthest_y + + dimension_gizmo_props = [ + DimensionGizmoConfig( + attr_name="total_length_target", + axis=(1, 0, 0), + prop_name="Total Length", + min_value=0.01, + text_offset_sign=-1, + ), + DimensionGizmoConfig(attr_name="height", axis=(0, 0, 1), min_value=0.01, text_alignment="start"), + DimensionGizmoConfig(attr_name="width", axis=(0, 1, 0), min_value=0.01), + DimensionGizmoConfig( + attr_name="tread_run", + axis=(1, 0, 0), + min_value=0.01, + visibility_condition=lambda props: props.custom_tread_lock or props.number_of_treads > 2, + ), + DimensionGizmoConfig( + attr_name="custom_first_tread_run", + axis=(1, 0, 0), + prop_name="First Tread", + min_value=0.01, + visibility_condition=lambda props: not props.custom_tread_lock, + compute_value=_compute_first_tread_run, + apply_value=_apply_first_tread_run, + ), + DimensionGizmoConfig( + attr_name="custom_last_tread_run", + axis=(1, 0, 0), + prop_name="Last Tread", + min_value=0.01, + visibility_condition=lambda props: not props.custom_tread_lock, + compute_value=_compute_last_tread_run, + apply_value=_apply_last_tread_run, + ), + DimensionGizmoConfig(attr_name="nosing_length", axis=(-1, 0, 0)), + DimensionGizmoConfig( + attr_name="tread_depth", + axis=(0, 0, -1), + visibility_condition=lambda props: props.stair_type != "GENERIC", + ), + DimensionGizmoConfig( + attr_name="riser_height", + axis=(0, 0, 1), + min_value=0.01, + text_alignment="start", + compute_value=lambda props: props.height / (props.number_of_treads + 1), + apply_value=lambda props, value: setattr(props, "height", max(0.01, value) * (props.number_of_treads + 1)), + ), + DimensionGizmoConfig( + attr_name="nosing_depth", + axis=(0, 0, -1), + visibility_condition=lambda props: props.nosing_length != 0.0 and props.stair_type != "WOOD/STEEL", + ), + DimensionGizmoConfig( + attr_name="base_slab_depth", + axis=(0, 0, -1), + visibility_condition=lambda props: props.stair_type == "CONCRETE", + ), + DimensionGizmoConfig( + attr_name="top_slab_depth", + axis=(0, 0, -1), + visibility_condition=lambda props: props.stair_type == "CONCRETE", + ), ] @classmethod def is_element_type(cls, element) -> bool: return tool.Blender.Modifier.is_stair(element) - def get_props(self, obj): + def get_props(self, obj: bpy.types.Object): return tool.Model.get_stair_props(obj) def get_gizmo_prefs(self): prefs = tool.Blender.get_addon_preferences() return prefs.gizmos.stair - def should_hide_gizmo(self, attr_name, props): - """Stair-specific visibility rules for gizmos.""" - if not props.is_editing: - return True - # Hide concrete-specific gizmos for non-concrete stairs - if attr_name in ("base_slab_depth", "top_slab_depth") and props.stair_type != "CONCRETE": - return True - # Hide tread_depth for generic stairs (has no tread geometry) - if attr_name == "tread_depth" and props.stair_type == "GENERIC": - return True - # Hide nosing_depth when nosing_length is 0 or for Wood/Steel stair types - if attr_name == "nosing_depth" and (props.nosing_length == 0.0 or props.stair_type == "WOOD/STEEL"): - return True - return False - @staticmethod def _get_stair_total_run(props) -> float: - """Calculate the total horizontal run of the stair.""" - return props.tread_run * props.number_of_treads + """Calculate the total horizontal run of the stair. + + Takes into account custom first/last tread runs when custom_tread_lock is False. + """ + number_of_rises = props.number_of_treads + 1 + total_run = 0.0 + default_rises = number_of_rises + + if not props.custom_tread_lock: + if props.custom_first_last_tread_run[0] is not None: # May be 0 though + default_rises -= 1 + total_run += props.custom_first_last_tread_run[0] + if props.custom_first_last_tread_run[1] is not None: # May be 0 though + default_rises -= 1 + total_run += props.custom_first_last_tread_run[1] + + total_run += props.tread_run * default_rises + return total_run @staticmethod def _get_first_riser_height(props) -> float: """Calculate the height of the first riser.""" return props.height / (props.number_of_treads + 1) - def get_gizmo_matrix_width(self, props): - translation = Matrix.Translation(Vector((0, props.width, 0))) - rotation = self.get_axis_rotation_matrix((0, 1, 0)) - return translation @ rotation + def get_dimension_matrix_total_length_target(self, props) -> Matrix: + return self.compose_gizmo_matrix(V_(0, -self.GIZMO_OFFSET, -self.GIZMO_OFFSET), (1, 0, 0)) - def get_gizmo_matrix_width_top(self, props): - """Position for the secondary width gizmo at the top of the stairs.""" + def get_dimension_matrix_height(self, props) -> Matrix: total_run = self._get_stair_total_run(props) - translation = Matrix.Translation(Vector((total_run, props.width, props.height))) - rotation = self.get_axis_rotation_matrix((0, 1, 0)) - return translation @ rotation + return self.compose_gizmo_matrix(V_(total_run + self.GIZMO_OFFSET, -self.GIZMO_OFFSET, 0), (0, 0, 1)) - def get_gizmo_matrix_height(self, props): + def get_dimension_matrix_width(self, props) -> Matrix: + return self.compose_gizmo_matrix(V_(self.GIZMO_OFFSET, 0, -self.GIZMO_OFFSET), (0, 1, 0)) + + def get_dimension_matrix_tread_run(self, props) -> Matrix: + """Position depends on custom_tread_lock state.""" + riser_height = self._get_first_riser_height(props) + if props.custom_tread_lock: + x_offset = 0 + z_offset = riser_height + else: + x_offset = props.custom_first_last_tread_run[0] + z_offset = riser_height * 2 + return self.compose_gizmo_matrix(V_(x_offset, 0, z_offset), (1, 0, 0)) + + def get_dimension_matrix_custom_first_tread_run(self, props) -> Matrix: + riser_height = self._get_first_riser_height(props) + return self.compose_gizmo_matrix(V_(0, 0, riser_height), (1, 0, 0)) + + def get_dimension_matrix_custom_last_tread_run(self, props) -> Matrix: total_run = self._get_stair_total_run(props) - translation = Matrix.Translation(Vector((total_run, props.width / 2, props.height))) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation + x_offset = total_run - props.custom_first_last_tread_run[1] + return self.compose_gizmo_matrix(V_(x_offset, 0, props.height), (1, 0, 0)) - def get_gizmo_matrix_tread_run(self, props): + def get_dimension_matrix_nosing_length(self, props) -> Matrix: riser_height = self._get_first_riser_height(props) - translation = Matrix.Translation(Vector((props.tread_run, props.width / 2, riser_height))) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation + return self.compose_gizmo_matrix(V_(0, props.width / 2, riser_height), (-1, 0, 0)) - def get_gizmo_matrix_tread_depth(self, props): + def get_dimension_matrix_tread_depth(self, props) -> Matrix: riser_height = self._get_first_riser_height(props) - translation = Matrix.Translation( - Vector((props.tread_run / 2, props.width / 2, riser_height - props.tread_depth)) - ) - rotation = self.get_axis_rotation_matrix((0, 0, -1)) - return translation @ rotation + return self.compose_gizmo_matrix(V_(0, 0, riser_height), (0, 0, -1)) - def get_gizmo_matrix_nosing_length(self, props): + def get_dimension_matrix_riser_height(self, props) -> Matrix: + return self.compose_gizmo_matrix(V_(props.tread_run, props.width, 0), (0, 0, 1)) + + def get_dimension_matrix_nosing_depth(self, props) -> Matrix: riser_height = self._get_first_riser_height(props) - translation = Matrix.Translation(Vector((-props.nosing_length, props.width / 2, riser_height))) - rotation = self.get_axis_rotation_matrix((-1, 0, 0)) - return translation @ rotation + return self.compose_gizmo_matrix(V_(-props.nosing_length, props.width / 2, riser_height), (0, 0, -1)) - def get_gizmo_matrix_nosing_depth(self, props): - riser_height = self._get_first_riser_height(props) - translation = Matrix.Translation( - Vector((-props.nosing_length, props.width / 2, riser_height - props.nosing_depth)) - ) - rotation = self.get_axis_rotation_matrix((0, 0, -1)) - return translation @ rotation + def get_dimension_matrix_base_slab_depth(self, props) -> Matrix: + return self.compose_gizmo_matrix(V_(0, props.width / 2, 0), (0, 0, -1)) - def get_gizmo_matrix_total_length_target(self, props): - translation = Matrix.Translation(Vector((props.total_length_target, props.width / 2, props.height))) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation - - def get_gizmo_matrix_base_slab_depth(self, props): - translation = Matrix.Translation(Vector((0, props.width / 2, -props.base_slab_depth))) - rotation = self.get_axis_rotation_matrix((0, 0, -1)) - return translation @ rotation - - def get_gizmo_matrix_top_slab_depth(self, props): + def get_dimension_matrix_top_slab_depth(self, props) -> Matrix: total_run = self._get_stair_total_run(props) - translation = Matrix.Translation(Vector((total_run, props.width / 2, props.height - props.top_slab_depth))) - rotation = self.get_axis_rotation_matrix((0, 0, -1)) - return translation @ rotation + return self.compose_gizmo_matrix(V_(total_run, props.width / 2, props.height), (0, 0, -1)) - def setup(self, context): - self.setup_property_gizmos(context) + def setup(self, context: bpy.types.Context) -> None: self.setup_editing_gizmos(context) + self.setup_dimension_gizmos(context) - # Stair-specific gizmos prefs = tool.Blender.get_addon_preferences() highlight_color = prefs.decorator_color_selected[:3] - # Secondary width gizmo at the top of the stairs (linked to same width property) - self.gizmo_width_top = self.gizmos.new("BIM_GT_gizmo_arrow_2d") - - def make_width_get(): - def move_get(): - obj = bpy.context.active_object - if not obj: - return 0.0 - props = self.get_props(obj) - return props.width - return move_get - - def make_width_set(): - def move_set(value): - obj = bpy.context.active_object - if not obj: - return - props = self.get_props(obj) - props.width = max(0.0, value) - return move_set - - self.gizmo_width_top.move_get_cb = make_width_get() - self.gizmo_width_top.move_set_cb = make_width_set() - self.gizmo_width_top.axis = Vector((0, 1, 0)) - self.gizmo_width_top.local_axis = Vector((0, 1, 0)) - self.gizmo_width_top.invert_delta = False - self.gizmo_width_top.delta_scale = 1.0 - self.gizmo_width_top.prop_name = "Width" - self.gizmo_width_top.gizmo_group = self - self.gizmo_width_top.color = self.COLOR_GREEN - self.gizmo_width_top.color_highlight = highlight_color - self.gizmo_width_top.alpha = 0.99 - self.gizmo_width_top.use_draw_modal = True - self.gizmo_width_top.use_draw_scale = True - - # Total length lock gizmo self.lock_gizmo = self.gizmos.new("VIEW3D_GT_lock") self.lock_gizmo.use_draw_scale = False self.lock_gizmo.color = self.COLOR_BLUE @@ -546,7 +667,14 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self.lock_gizmo.prop_path = "BIMStairProperties.total_length_lock" self.lock_gizmo.target_set_operator("bim.toggle_stair_total_length_lock") - # Plus gizmo for increasing treads + self.tread_lock_gizmo = self.gizmos.new("VIEW3D_GT_lock") + self.tread_lock_gizmo.use_draw_scale = False + self.tread_lock_gizmo.color = (1.0, 1.0, 1.0) + self.tread_lock_gizmo.color_highlight = highlight_color + self.tread_lock_gizmo.alpha = 0.8 + self.tread_lock_gizmo.prop_path = "BIMStairProperties.custom_tread_lock" + self.tread_lock_gizmo.target_set_operator("bim.toggle_stair_custom_tread_lock") + self.plus_gizmo = self.gizmos.new("VIEW3D_GT_plus") self.plus_gizmo.use_draw_scale = False self.plus_gizmo.color = self.COLOR_GREEN @@ -555,7 +683,6 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): op = self.plus_gizmo.target_set_operator("bim.adjust_stair_treads") op.increment = 1 - # Minus gizmo for decreasing treads self.minus_gizmo = self.gizmos.new("VIEW3D_GT_minus") self.minus_gizmo.use_draw_scale = False self.minus_gizmo.color = self.COLOR_RED @@ -564,16 +691,9 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): op = self.minus_gizmo.target_set_operator("bim.adjust_stair_treads") op.increment = -1 - # Cycle gizmo for stair type - default_color = prefs.decorations_colour[:3] - self.cycle_gizmo = self.gizmos.new("VIEW3D_GT_cycle") - self.cycle_gizmo.use_draw_scale = False - self.cycle_gizmo.color = default_color - self.cycle_gizmo.color_highlight = highlight_color - self.cycle_gizmo.alpha = 0.8 - self.cycle_gizmo.target_set_operator("bim.cycle_stair_type") - - def refresh(self, context): + def refresh(self, context: bpy.types.Context) -> None: + if not self.is_setup_complete(): + return obj = context.active_object if not obj: return @@ -581,26 +701,17 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): props = self.get_props(obj) mw = obj.matrix_world billboard_rot = gizmo.get_billboard_rotation(context) - self.update_property_gizmos(mw, props) self.update_editing_gizmos(context, mw, props) - self.update_width_top_gizmo(mw, props) self.update_lock_gizmo(mw, props, billboard_rot) - self.update_tread_count_gizmos(mw, props, billboard_rot) - self.update_cycle_gizmo(mw, props, billboard_rot) + self.update_tread_lock_gizmo(props) + self.update_tread_count_gizmos(props) + self.update_dimension_gizmos(mw, props) - def update_width_top_gizmo(self, mw, props): - """Update the secondary width gizmo at the top of the stairs.""" - gizmo_prefs = self.get_gizmo_prefs() - # Use same visibility as the main width gizmo - self.gizmo_width_top.hide = not props.is_editing or not getattr(gizmo_prefs, "width", True) - - if self.gizmo_width_top.hide: + def update_lock_gizmo(self, mw: Matrix, props, billboard_rot: Matrix) -> None: + if self.is_gizmo_hidden_by_modal(self.lock_gizmo): + self.lock_gizmo.hide = True return - self.gizmo_width_top.matrix_basis = mw @ self.get_gizmo_matrix_width_top(props) - self.gizmo_width_top.matrix_offset = Matrix.Scale(self.ARROW_SCALE, 4) - - def update_lock_gizmo(self, mw, props, billboard_rot): gizmo_prefs = self.get_gizmo_prefs() self.lock_gizmo.hide = not props.is_editing or not gizmo_prefs.lock @@ -610,75 +721,146 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self.lock_gizmo.color = self.COLOR_RED if props.total_length_lock else self.COLOR_GREEN total_run = self._get_stair_total_run(props) - lock_x = total_run + props.tread_run + self.GIZMO_X_OFFSET local_transform = ( - Matrix.Translation(Vector((lock_x, props.width / 2, props.height))) + Matrix.Translation(Vector((total_run + 0.5, -self.GIZMO_OFFSET, -self.GIZMO_OFFSET))) @ billboard_rot - @ Matrix.Scale(0.2, 4) + @ Matrix.Scale(self.EDITING_ICON_SCALE, 4) ) self.lock_gizmo.matrix_basis = mw @ local_transform - def update_tread_count_gizmos(self, mw, props, billboard_rot): - gizmo_prefs = self.get_gizmo_prefs() - - self.plus_gizmo.hide = not props.is_editing or not gizmo_prefs.plus - self.minus_gizmo.hide = not props.is_editing or props.number_of_treads <= 1 or not gizmo_prefs.minus - - if self.plus_gizmo.hide and self.minus_gizmo.hide: + def update_tread_lock_gizmo(self, props) -> None: + """Update visibility of tread lock gizmo. Positioning is handled in _update_editing_icon_positions.""" + if not hasattr(self, "tread_lock_gizmo"): return - total_run = self._get_stair_total_run(props) - base_x = total_run + props.tread_run + self.GIZMO_X_OFFSET - - if not self.plus_gizmo.hide: - plus_local_transform = ( - Matrix.Translation(Vector(( - base_x + self.GIZMO_PLUS_X_OFFSET, - props.width / 2, - props.height + self.GIZMO_BUTTON_Z_OFFSET - ))) - @ billboard_rot - @ Matrix.Scale(0.2, 4) - ) - self.plus_gizmo.matrix_basis = mw @ plus_local_transform - - if not self.minus_gizmo.hide: - minus_local_transform = ( - Matrix.Translation(Vector(( - base_x + self.GIZMO_MINUS_X_OFFSET, - props.width / 2, - props.height + self.GIZMO_BUTTON_Z_OFFSET - ))) - @ billboard_rot - @ Matrix.Scale(0.2, 4) - ) - self.minus_gizmo.matrix_basis = mw @ minus_local_transform - - def update_cycle_gizmo(self, mw, props, billboard_rot): - gizmo_prefs = self.get_gizmo_prefs() - self.cycle_gizmo.hide = not props.is_editing or not gizmo_prefs.cycle - - if self.cycle_gizmo.hide: + if self.is_gizmo_hidden_by_modal(self.tread_lock_gizmo): + self.tread_lock_gizmo.hide = True return + gizmo_prefs = self.get_gizmo_prefs() + self.tread_lock_gizmo.hide = not props.is_editing or not gizmo_prefs.lock + + def update_tread_count_gizmos(self, props) -> None: + """Update visibility of +/- tread count gizmos. Positioning is handled in _update_editing_icon_positions.""" + if not hasattr(self, "plus_gizmo") or not hasattr(self, "minus_gizmo"): + return + + plus_hidden_by_modal = self.is_gizmo_hidden_by_modal(self.plus_gizmo) + minus_hidden_by_modal = self.is_gizmo_hidden_by_modal(self.minus_gizmo) + + if plus_hidden_by_modal: + self.plus_gizmo.hide = True + else: + gizmo_prefs = self.get_gizmo_prefs() + self.plus_gizmo.hide = not props.is_editing or not gizmo_prefs.plus + + if minus_hidden_by_modal: + self.minus_gizmo.hide = True + else: + gizmo_prefs = self.get_gizmo_prefs() + self.minus_gizmo.hide = not props.is_editing or props.number_of_treads <= 1 or not gizmo_prefs.minus + + def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props) -> None: + """Update dimension gizmo positions based on camera view direction.""" + viewing_from_negative_y, viewing_from_negative_x = self.get_local_view_direction(context, mw) + billboard_rot = gizmo.get_billboard_rotation(context) total_run = self._get_stair_total_run(props) - cycle_x = total_run + props.tread_run + self.GIZMO_X_OFFSET - local_transform = ( - Matrix.Translation(Vector(( - cycle_x, - props.width / 2, - props.height + self.GIZMO_CYCLE_Z_OFFSET - ))) - @ billboard_rot - @ Matrix.Scale(0.2, 4) + riser_height = self._get_first_riser_height(props) + + self._update_overall_dimension_gizmos(mw, props, viewing_from_negative_y, viewing_from_negative_x, total_run) + self._update_tread_dimension_gizmos(mw, props, viewing_from_negative_y, total_run, riser_height) + self._update_detail_dimension_gizmos(mw, props, viewing_from_negative_y, riser_height) + self._update_lock_gizmo_position(mw, props, viewing_from_negative_y, billboard_rot, total_run) + self._update_editing_icon_positions(mw, props, viewing_from_negative_y, billboard_rot) + + def _update_overall_dimension_gizmos( + self, mw: Matrix, props, viewing_from_negative_y: bool, viewing_from_negative_x: bool, total_run: float + ) -> None: + """Update overall dimension gizmos (total_length, width, height).""" + if gizmo := self.get_dimension_gizmo_if_visible("total_length_target"): + y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) + gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( + V_(0, y_pos, -self.GIZMO_OFFSET), (1, 0, 0) + ) + + if gizmo := self.get_dimension_gizmo_if_visible("width"): + x_pos = total_run + self.GIZMO_OFFSET if viewing_from_negative_x else -self.GIZMO_OFFSET + gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( + V_(x_pos, 0, -self.GIZMO_OFFSET), (0, 1, 0) + ) + + if gizmo := self.get_dimension_gizmo_if_visible("height"): + y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) + gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( + V_(total_run + self.GIZMO_OFFSET, y_pos, 0), (0, 0, 1) + ) + + def _update_tread_dimension_gizmos( + self, mw: Matrix, props, viewing_from_negative_y: bool, total_run: float, riser_height: float + ) -> None: + """Update tread-related dimension gizmos (tread_run, custom first/last tread).""" + if gizmo := self.get_dimension_gizmo_if_visible("tread_run"): + y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) + if props.custom_tread_lock: + x_offset, z_offset = 0, riser_height + else: + x_offset = props.custom_first_last_tread_run[0] + z_offset = riser_height * 2 + gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( + V_(x_offset, y_pos, z_offset), (1, 0, 0) + ) + + if gizmo := self.get_dimension_gizmo_if_visible("custom_first_tread_run"): + y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) + gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( + V_(0, y_pos, riser_height), (1, 0, 0) + ) + + if gizmo := self.get_dimension_gizmo_if_visible("custom_last_tread_run"): + y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) + x_offset = total_run - props.custom_first_last_tread_run[1] + gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( + V_(x_offset, y_pos, props.height), (1, 0, 0) + ) + + def _update_detail_dimension_gizmos( + self, mw: Matrix, props, viewing_from_negative_y: bool, riser_height: float + ) -> None: + """Update detail dimension gizmos (nosing, tread depth, riser height).""" + y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) + + self.set_dimension_gizmo_position("nosing_length", mw, V_(0, props.width / 2, riser_height), (-1, 0, 0)) + self.set_dimension_gizmo_position("tread_depth", mw, V_(0, y_pos, riser_height), (0, 0, -1)) + self.set_dimension_gizmo_position("riser_height", mw, V_(props.tread_run, y_pos, 0), (0, 0, 1)) + self.set_dimension_gizmo_position("nosing_depth", mw, V_(-props.nosing_length, props.width / 2, riser_height), (0, 0, -1)) + + def _update_lock_gizmo_position( + self, mw: Matrix, props, viewing_from_negative_y: bool, billboard_rot: Matrix, total_run: float + ) -> None: + """Update lock gizmo position based on Y view direction.""" + y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) + self.set_icon_gizmo_position( + "lock_gizmo", mw, total_run + 0.5, y_pos, -self.GIZMO_OFFSET, billboard_rot, scale=self.EDITING_ICON_SCALE ) - self.cycle_gizmo.matrix_basis = mw @ local_transform - def draw_prepare(self, context): - """Called before drawing - updates gizmos to face camera.""" - # Call base class implementation - super().draw_prepare(context) + def _update_editing_icon_positions(self, mw, props, viewing_from_negative_y, billboard_rot): + """Update editing icon positions, flipping Y based on viewing angle.""" + if not props.is_editing: + return - # Also update the secondary width gizmo to face camera - if hasattr(self, "gizmo_width_top") and not self.gizmo_width_top.hide: - self.gizmo_width_top.draw_prepare(context) + icon_z = props.height + 0.5 + y_pos = -self.GIZMO_OFFSET if viewing_from_negative_y else props.width + self.GIZMO_OFFSET + + self.set_icon_gizmo_position("validate_gizmo", mw, 0, y_pos, icon_z, billboard_rot) + self.set_icon_gizmo_position("cancel_gizmo", mw, self.ICON_CANCEL_X, y_pos, icon_z, billboard_rot) + self.set_icon_gizmo_position("cycle_gizmo", mw, self.ICON_CYCLE_X, y_pos, icon_z, billboard_rot, scale=0.3) + self.set_icon_gizmo_position( + "tread_lock_gizmo", mw, self.ICON_TREAD_LOCK_X, y_pos, + icon_z - self.EDITING_ICON_SCALE / 2, billboard_rot, scale=self.EDITING_ICON_SCALE + ) + self.set_icon_gizmo_position( + "plus_gizmo", mw, self.ICON_PLUS_X, y_pos, icon_z, billboard_rot, scale=self.ICON_PLUS_MINUS_SCALE + ) + self.set_icon_gizmo_position( + "minus_gizmo", mw, self.ICON_MINUS_X, y_pos, icon_z, billboard_rot, scale=self.ICON_PLUS_MINUS_SCALE + ) diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index 4bd4141c89..d899e12c7c 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -28,8 +28,8 @@ import ifcopenshell.api.pset import bonsai.tool as tool import bonsai.core.root import bonsai.core.geometry -from bonsai.bim import gizmo -from bonsai.bim.gizmo import GizmoPropConfig +from bonsai.bim.module.drawing import gizmos as gizmo +from bonsai.bim.module.drawing.gizmos import DimensionGizmoConfig from ifcopenshell.api.geometry.add_window_representation import DEFAULT_PANEL_SCHEMAS import ifcopenshell.api import ifcopenshell.api.material @@ -43,6 +43,44 @@ from typing import get_args V_ = tool.Blender.V_ +# Window type visibility helpers for dimension gizmos +_MULLION_TYPES = frozenset(( + "DOUBLE_PANEL_VERTICAL", + "TRIPLE_PANEL_BOTTOM", + "TRIPLE_PANEL_TOP", + "TRIPLE_PANEL_LEFT", + "TRIPLE_PANEL_RIGHT", + "TRIPLE_PANEL_VERTICAL", +)) +_TRANSOM_TYPES = frozenset(( + "DOUBLE_PANEL_HORIZONTAL", + "TRIPLE_PANEL_BOTTOM", + "TRIPLE_PANEL_TOP", + "TRIPLE_PANEL_LEFT", + "TRIPLE_PANEL_RIGHT", + "TRIPLE_PANEL_HORIZONTAL", +)) + + +def _has_mullion(props) -> bool: + """Check if the window type uses mullions (vertical dividers).""" + return props.window_type in _MULLION_TYPES + + +def _has_second_mullion(props) -> bool: + """Check if the window type uses a second mullion.""" + return props.window_type == "TRIPLE_PANEL_VERTICAL" + + +def _has_transom(props) -> bool: + """Check if the window type uses transoms (horizontal dividers).""" + return props.window_type in _TRANSOM_TYPES + + +def _has_second_transom(props) -> bool: + """Check if the window type uses a second transom.""" + return props.window_type == "TRIPLE_PANEL_HORIZONTAL" + def update_window_modifier_representation(context: bpy.types.Context) -> None: obj = context.active_object @@ -481,6 +519,7 @@ class AddWindow(bpy.types.Operator, tool.Ifc.Operator): class CancelEditingWindow(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.cancel_editing_window" bl_label = "Cancel Editing Window" + bl_description = "Cancel editing and revert window parameters to their previous values" bl_options = {"REGISTER"} def _execute(self, context): @@ -509,6 +548,7 @@ class CancelEditingWindow(bpy.types.Operator, tool.Ifc.Operator): class FinishEditingWindow(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.finish_editing_window" bl_label = "Finish Editing Window" + bl_description = "Apply changes and finish editing window parameters" bl_options = {"REGISTER"} def _execute(self, context): @@ -541,6 +581,7 @@ class FinishEditingWindow(bpy.types.Operator, tool.Ifc.Operator): class EnableEditingWindow(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_window" bl_label = "Enable Editing Window" + bl_description = "Enter edit mode to modify window parameters interactively" bl_options = {"REGISTER"} def _execute(self, context): @@ -605,6 +646,26 @@ class CycleWindowType(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} +def _compute_frame_depth(props) -> float: + """Get the first panel's frame depth value.""" + return props.frame_depth[0] + + +def _apply_frame_depth(props, value: float) -> None: + """Apply a new frame depth value to the first panel, preserving other panels.""" + props.frame_depth = (max(0.0, value),) + tuple(props.frame_depth[1:]) + + +def _compute_frame_thickness(props) -> float: + """Get the first panel's frame thickness value.""" + return props.frame_thickness[0] + + +def _apply_frame_thickness(props, value: float) -> None: + """Apply a new frame thickness value to the first panel, preserving other panels.""" + props.frame_thickness = (max(0.0, value),) + tuple(props.frame_thickness[1:]) + + class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): bl_idname = "OBJECT_GGT_bim_window_edition" bl_label = "Window Editing Gizmo" @@ -617,190 +678,180 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): cancel_editing_operator = "bim.cancel_editing_window" cycle_type_operator = "bim.cycle_window_type" - gizmo_props = [ - GizmoPropConfig("overall_height", (0, 0, 1)), - GizmoPropConfig("overall_width", (1, 0, 0)), - GizmoPropConfig("lining_depth", (0, 1, 0)), - GizmoPropConfig("lining_thickness", (1, 0, 0)), - GizmoPropConfig("lining_to_panel_offset_x", (1, 0, 0)), - GizmoPropConfig("lining_to_panel_offset_y", (0, 1, 0)), - GizmoPropConfig("mullion_thickness", (1, 0, 0), delta_scale=2.0), - GizmoPropConfig("first_mullion_offset", (1, 0, 0)), - GizmoPropConfig("second_mullion_offset", (1, 0, 0)), - GizmoPropConfig("transom_thickness", (0, 0, 1), delta_scale=2.0), - GizmoPropConfig("first_transom_offset", (0, 0, 1)), - GizmoPropConfig("second_transom_offset", (0, 0, 1)), + dimension_gizmo_props = [ + DimensionGizmoConfig(attr_name="overall_width", axis=(1, 0, 0), min_value=0.01, text_offset_sign=-1), + DimensionGizmoConfig(attr_name="overall_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start"), + DimensionGizmoConfig(attr_name="lining_offset", axis=(0, 1, 0)), + DimensionGizmoConfig(attr_name="lining_depth", axis=(0, 1, 0)), + DimensionGizmoConfig(attr_name="lining_thickness", axis=(1, 0, 0)), + DimensionGizmoConfig(attr_name="lining_to_panel_offset_x", axis=(1, 0, 0)), + DimensionGizmoConfig(attr_name="lining_to_panel_offset_y", axis=(0, 1, 0), min_value=-10.0), + DimensionGizmoConfig( + attr_name="frame_depth", + axis=(0, -1, 0), + compute_value=_compute_frame_depth, + apply_value=_apply_frame_depth, + ), + DimensionGizmoConfig( + attr_name="frame_thickness", + axis=(1, 0, 0), + compute_value=_compute_frame_thickness, + apply_value=_apply_frame_thickness, + ), + DimensionGizmoConfig(attr_name="mullion_thickness", axis=(1, 0, 0), delta_scale=2.0, visibility_condition=_has_mullion), + DimensionGizmoConfig(attr_name="first_mullion_offset", axis=(1, 0, 0), visibility_condition=_has_mullion), + DimensionGizmoConfig(attr_name="second_mullion_offset", axis=(1, 0, 0), visibility_condition=_has_second_mullion), + DimensionGizmoConfig(attr_name="transom_thickness", axis=(0, 0, 1), delta_scale=2.0, visibility_condition=_has_transom), + DimensionGizmoConfig(attr_name="first_transom_offset", axis=(0, 0, 1), visibility_condition=_has_transom), + DimensionGizmoConfig(attr_name="second_transom_offset", axis=(0, 0, 1), visibility_condition=_has_second_transom), ] @classmethod def is_element_type(cls, element) -> bool: return tool.Blender.Modifier.is_window(element) - def get_props(self, obj): + def get_props(self, obj: bpy.types.Object): return tool.Model.get_window_props(obj) def get_gizmo_prefs(self): prefs = tool.Blender.get_addon_preferences() return prefs.gizmos.window - def should_hide_gizmo(self, attr_name, props): - """Window-specific visibility rules for gizmos.""" - if not props.is_editing: - return True + def get_icon_y_offset(self, context: bpy.types.Context, mw: Matrix) -> float: + """Position icons beyond the furthest geometry extent based on view direction.""" + obj = context.active_object + if not obj: + return self.ICON_Y_OFFSET + props = self.get_props(obj) - has_mullion = self._has_mullion(props) - has_second_mullion = self._has_second_mullion(props) - has_transom = self._has_transom(props) - has_second_transom = self._has_second_transom(props) - - if attr_name == "mullion_thickness" and not has_mullion: - return True - if attr_name == "first_mullion_offset" and not has_mullion: - return True - if attr_name == "second_mullion_offset" and not has_second_mullion: - return True - if attr_name == "transom_thickness" and not has_transom: - return True - if attr_name == "first_transom_offset" and not has_transom: - return True - if attr_name == "second_transom_offset" and not has_second_transom: - return True - return False - - def get_gizmo_matrix_overall_height(self, props): - translation = Matrix.Translation(V_(props.overall_width - 0.05, props.lining_offset, props.overall_height)) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation - - def get_gizmo_matrix_overall_width(self, props): - translation = Matrix.Translation(V_(props.overall_width, props.lining_offset, props.overall_height - 0.05)) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation - - def get_gizmo_matrix_lining_depth(self, props): - translation = Matrix.Translation( - V_(props.overall_width / 2, props.lining_depth + props.lining_offset, props.overall_height) + furthest_positive_y = ( + max(0, props.lining_offset) + + props.lining_depth + + props.lining_to_panel_offset_y ) - rotation = self.get_axis_rotation_matrix((0, 1, 0)) - return translation @ rotation + furthest_negative_y = min(0, props.lining_offset) - def get_gizmo_matrix_lining_thickness(self, props): - translation = Matrix.Translation( - V_(props.lining_thickness, props.lining_depth / 2 + props.lining_offset, props.overall_height / 2) + viewing_from_negative_y, _ = self.get_local_view_direction(context, mw) + if viewing_from_negative_y: + return furthest_negative_y - 2 * self.GIZMO_OFFSET + return furthest_positive_y + 2 * self.GIZMO_OFFSET + + def get_dimension_matrix_lining_offset(self, props) -> Matrix: + return self.compose_gizmo_matrix(V_(0, 0, 0), (0, 1, 0)) + + def get_dimension_matrix_lining_depth(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width / 2, props.lining_offset, props.overall_height), (0, 1, 0) + ) + + def get_dimension_matrix_lining_thickness(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(0, props.lining_depth / 2 + props.lining_offset, props.overall_height / 2), (1, 0, 0) ) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation @staticmethod def _get_lining_to_panel_offset_y_full(props) -> float: """Get the full Y offset for lining-to-panel positioning.""" return (props.lining_depth - props.frame_depth[0]) + props.lining_to_panel_offset_y - def get_gizmo_matrix_lining_to_panel_offset_x(self, props): + def get_dimension_matrix_lining_to_panel_offset_x(self, props) -> Matrix: y_full = self._get_lining_to_panel_offset_y_full(props) - translation = Matrix.Translation( - V_(props.lining_to_panel_offset_x, y_full + props.lining_offset, props.lining_thickness) + return self.compose_gizmo_matrix( + V_(0, y_full + props.frame_depth[0] + props.lining_offset, props.lining_to_panel_offset_x), (1, 0, 0) ) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation - def get_gizmo_matrix_lining_to_panel_offset_y(self, props): + def get_dimension_matrix_lining_to_panel_offset_y(self, props) -> Matrix: + y_start = props.lining_depth + props.lining_offset + return self.compose_gizmo_matrix( + V_(props.overall_width - props.lining_to_panel_offset_x, y_start, props.lining_to_panel_offset_x), + (0, 1, 0), + ) + + def get_dimension_matrix_frame_depth(self, props) -> Matrix: y_full = self._get_lining_to_panel_offset_y_full(props) - translation = Matrix.Translation( - V_( - props.lining_to_panel_offset_x, - y_full + props.frame_depth[0] + props.lining_offset, - props.lining_thickness, - ) - ) - rotation = self.get_axis_rotation_matrix((0, 1, 0)) - return translation @ rotation - - def get_gizmo_matrix_mullion_thickness(self, props): - # Position at the right edge of the mullion (offset + thickness/2) so gizmo movement matches property 1:1 - translation = Matrix.Translation( - V_(props.first_mullion_offset + props.mullion_thickness / 2, props.lining_offset, props.overall_height / 2) - ) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation - - def get_gizmo_matrix_first_mullion_offset(self, props): - # Position at the left edge of the mullion (offset - thickness/2) - translation = Matrix.Translation( - V_(props.first_mullion_offset - props.mullion_thickness / 2, props.lining_offset, props.overall_height / 2) - ) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation - - def get_gizmo_matrix_second_mullion_offset(self, props): - translation = Matrix.Translation(V_(props.second_mullion_offset, props.lining_offset, props.overall_height / 2)) - rotation = self.get_axis_rotation_matrix((1, 0, 0)) - return translation @ rotation - - def get_gizmo_matrix_transom_thickness(self, props): - # Position at the top edge of the transom (offset + thickness/2) so gizmo movement matches property 1:1 - translation = Matrix.Translation( - V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset + props.transom_thickness / 2) - ) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation - - def get_gizmo_matrix_first_transom_offset(self, props): - # Position at the bottom edge of the transom (offset - thickness/2) - translation = Matrix.Translation( - V_(props.overall_width / 2, props.lining_offset, props.first_transom_offset - props.transom_thickness / 2) - ) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation - - def get_gizmo_matrix_second_transom_offset(self, props): - translation = Matrix.Translation(V_(props.overall_width / 2, props.lining_offset, props.second_transom_offset)) - rotation = self.get_axis_rotation_matrix((0, 0, 1)) - return translation @ rotation - - def _has_mullion(self, props): - """Check if the window type uses mullions (vertical dividers).""" - window_type = props.window_type - return window_type in ( - "DOUBLE_PANEL_VERTICAL", - "TRIPLE_PANEL_BOTTOM", - "TRIPLE_PANEL_TOP", - "TRIPLE_PANEL_LEFT", - "TRIPLE_PANEL_RIGHT", - "TRIPLE_PANEL_VERTICAL", + y_start = y_full + props.frame_depth[0] + props.lining_offset + return self.compose_gizmo_matrix( + V_(props.lining_to_panel_offset_x, y_start, props.lining_to_panel_offset_x), (0, -1, 0) ) - def _has_second_mullion(self, props): - """Check if the window type uses a second mullion.""" - return props.window_type == "TRIPLE_PANEL_VERTICAL" - - def _has_transom(self, props): - """Check if the window type uses transoms (horizontal dividers).""" - window_type = props.window_type - return window_type in ( - "DOUBLE_PANEL_HORIZONTAL", - "TRIPLE_PANEL_BOTTOM", - "TRIPLE_PANEL_TOP", - "TRIPLE_PANEL_LEFT", - "TRIPLE_PANEL_RIGHT", - "TRIPLE_PANEL_HORIZONTAL", + def get_dimension_matrix_frame_thickness(self, props) -> Matrix: + y_full = self._get_lining_to_panel_offset_y_full(props) + y_pos = y_full + props.frame_depth[0] + props.lining_offset + return self.compose_gizmo_matrix( + V_(props.lining_to_panel_offset_x, y_pos, props.overall_height / 2), (1, 0, 0) ) - def _has_second_transom(self, props): - """Check if the window type uses a second transom.""" - return props.window_type == "TRIPLE_PANEL_HORIZONTAL" + def get_dimension_matrix_mullion_thickness(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.first_mullion_offset - props.mullion_thickness / 2, props.lining_offset, props.overall_height / 2), + (1, 0, 0), + ) - def setup(self, context): - # Use base class methods for common gizmos - self.setup_property_gizmos(context) + def get_dimension_matrix_first_mullion_offset(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(0, props.lining_offset, props.overall_height / 2), (1, 0, 0) + ) + + def get_dimension_matrix_second_mullion_offset(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(0, props.lining_offset, props.overall_height / 2 + 0.1), (1, 0, 0) + ) + + def get_dimension_matrix_transom_thickness(self, props) -> Matrix: + # Offset X when panels are horizontal to avoid overlap with mullion gizmo + x_pos = props.overall_width / 2 - 0.1 if _has_transom(props) else props.overall_width / 2 + return self.compose_gizmo_matrix( + V_(x_pos, props.lining_offset, props.first_transom_offset - props.transom_thickness / 2), + (0, 0, 1), + ) + + def get_dimension_matrix_first_transom_offset(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width / 2, props.lining_offset, 0), (0, 0, 1) + ) + + def get_dimension_matrix_second_transom_offset(self, props) -> Matrix: + return self.compose_gizmo_matrix( + V_(props.overall_width / 2 + 0.1, props.lining_offset, 0), (0, 0, 1) + ) + + def get_dimension_matrix_overall_width(self, props) -> Matrix: + """Position width dimension below the window.""" + return self.compose_gizmo_matrix( + V_(0, props.lining_offset - self.GIZMO_OFFSET, -self.GIZMO_OFFSET), (1, 0, 0) + ) + + def get_dimension_matrix_overall_height(self, props) -> Matrix: + """Position height dimension to the side of the window.""" + return self.compose_gizmo_matrix( + V_(props.overall_width + self.GIZMO_OFFSET, props.lining_offset - self.GIZMO_OFFSET, 0), (0, 0, 1) + ) + + def setup(self, context: bpy.types.Context) -> None: self.setup_editing_gizmos(context) + self.setup_dimension_gizmos(context) - def refresh(self, context): + def refresh(self, context: bpy.types.Context) -> None: + if not self.is_setup_complete(): + return obj = context.active_object if not obj: return props = self.get_props(obj) mw = obj.matrix_world - self.update_property_gizmos(mw, props) self.update_editing_gizmos(context, mw, props) + self.update_dimension_gizmos(mw, props) + + def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props) -> None: + """Update dimension gizmo positions based on camera view direction.""" + viewing_from_negative_y, viewing_from_negative_x = self.get_local_view_direction(context, mw) + y_pos = self.get_lining_y_position_for_view(props, viewing_from_negative_y) + + self.set_dimension_gizmo_position("overall_width", mw, V_(0, y_pos, -self.GIZMO_OFFSET), (1, 0, 0)) + + if viewing_from_negative_x: + x_pos = -self.GIZMO_OFFSET + else: + x_pos = props.overall_width + self.GIZMO_OFFSET + self.set_dimension_gizmo_position("overall_height", mw, V_(x_pos, y_pos, 0), (0, 0, 1)) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index a5105a0947..49b408ba70 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -249,6 +249,8 @@ class GizmoPreferencesDoor(bpy.types.PropertyGroup): overall_width: BoolProperty(name="Overall Width", default=True) threshold_thickness: BoolProperty(name="Threshold Thickness", default=True) threshold_depth: BoolProperty(name="Threshold Depth", default=True) + threshold_offset: BoolProperty(name="Threshold Offset", default=True) + lining_offset: BoolProperty(name="Lining Offset", default=True) lining_depth: BoolProperty(name="Lining Depth", default=True) lining_thickness: BoolProperty(name="Lining Thickness", default=True) transom_offset: BoolProperty(name="Transom Offset", default=True) @@ -263,6 +265,8 @@ class GizmoPreferencesDoor(bpy.types.PropertyGroup): overall_width: bool threshold_thickness: bool threshold_depth: bool + threshold_offset: bool + lining_offset: bool lining_depth: bool lining_thickness: bool transom_offset: bool @@ -278,10 +282,13 @@ class GizmoPreferencesWindow(bpy.types.PropertyGroup): overall_height: BoolProperty(name="Overall Height", default=True) overall_width: BoolProperty(name="Overall Width", default=True) + lining_offset: BoolProperty(name="Lining Offset", default=True) lining_depth: BoolProperty(name="Lining Depth", default=True) lining_thickness: BoolProperty(name="Lining Thickness", default=True) lining_to_panel_offset_x: BoolProperty(name="Lining to Panel Offset X", default=True) lining_to_panel_offset_y: BoolProperty(name="Lining to Panel Offset Y", default=True) + frame_depth: BoolProperty(name="Frame Depth", default=True) + frame_thickness: BoolProperty(name="Frame Thickness", default=True) mullion_thickness: BoolProperty(name="Mullion Thickness", default=True) first_mullion_offset: BoolProperty(name="First Mullion Offset", default=True) second_mullion_offset: BoolProperty(name="Second Mullion Offset", default=True) @@ -292,10 +299,13 @@ class GizmoPreferencesWindow(bpy.types.PropertyGroup): if TYPE_CHECKING: overall_height: bool overall_width: bool + lining_offset: bool lining_depth: bool lining_thickness: bool lining_to_panel_offset_x: bool lining_to_panel_offset_y: bool + frame_depth: bool + frame_thickness: bool mullion_thickness: bool first_mullion_offset: bool second_mullion_offset: bool @@ -311,6 +321,7 @@ class GizmoPreferencesStair(bpy.types.PropertyGroup): height: BoolProperty(name="Height", default=True) tread_run: BoolProperty(name="Tread Run", default=True) tread_depth: BoolProperty(name="Tread Depth", default=True) + riser_height: BoolProperty(name="Riser Height", default=True) nosing_length: BoolProperty(name="Nosing Length", default=True) nosing_depth: BoolProperty(name="Nosing Depth", default=True) total_length_target: BoolProperty(name="Total Length Target", default=True) @@ -326,6 +337,7 @@ class GizmoPreferencesStair(bpy.types.PropertyGroup): height: bool tread_run: bool tread_depth: bool + riser_height: bool nosing_length: bool nosing_depth: bool total_length_target: bool @@ -763,7 +775,8 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): from bonsai.bim.module.model.door import GizmoDoorEdition door_gizmos = self.gizmos.door - gizmo_prop_names = {p.attr_name for p in GizmoDoorEdition.gizmo_props} + gizmo_prop_names = {p.attr_name for p in GizmoDoorEdition.dimension_gizmo_props} + # Add special gizmos not in dimension_gizmo_props gizmo_prop_names.update(("swing_arc", "flip_arc")) for prop in door_gizmos.__annotations__: if prop in gizmo_prop_names: @@ -773,7 +786,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): from bonsai.bim.module.model.window import GizmoWindowEdition window_gizmos = self.gizmos.window - gizmo_prop_names = {p.attr_name for p in GizmoWindowEdition.gizmo_props} + gizmo_prop_names = {p.attr_name for p in GizmoWindowEdition.dimension_gizmo_props} for prop in window_gizmos.__annotations__: if prop in gizmo_prop_names: layout.prop(window_gizmos, prop) @@ -782,8 +795,9 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): from bonsai.bim.module.model.stair import GizmoStairEdition stair_gizmos = self.gizmos.stair - gizmo_prop_names = {p.attr_name for p in GizmoStairEdition.gizmo_props} - special_gizmo_names = {"lock", "plus", "minus"} + gizmo_prop_names = {p.attr_name for p in GizmoStairEdition.dimension_gizmo_props} + # Add special gizmos not in dimension_gizmo_props + special_gizmo_names = {"lock", "plus", "minus", "cycle"} for prop in stair_gizmos.__annotations__: if prop in gizmo_prop_names or prop in special_gizmo_names: layout.prop(stair_gizmos, prop) diff --git a/src/bonsai/bonsai/tool/numeric_input.py b/src/bonsai/bonsai/tool/numeric_input.py new file mode 100644 index 0000000000..123cb85f29 --- /dev/null +++ b/src/bonsai/bonsai/tool/numeric_input.py @@ -0,0 +1,168 @@ +# Bonsai - OpenBIM Blender Add-on +# Copyright (C) 2021 Dion Moult +# +# This file is part of Bonsai. +# +# Bonsai is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Bonsai 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Bonsai. If not, see . + +from dataclasses import dataclass, field +from typing import Literal, Protocol + +ModalResult = Literal["RUNNING_MODAL", "FINISHED", "CANCELLED"] + + +class IntegerInputOperator(Protocol): + """Protocol for operators using IntegerInputState.""" + + _input: "IntegerInputState" + + def _apply_value(self, context) -> None: ... + def _restore_value(self, context) -> None: ... + def _format_header(self) -> str: ... + + +@dataclass +class IntegerInputState: + """State for keyboard integer input during modal operations.""" + + characters: list[str] = field(default_factory=list) + is_valid: bool = True + min_value: int = 1 + _user_started_typing: bool = False + + @classmethod + def from_value(cls, value: int, min_value: int = 1) -> "IntegerInputState": + """Create state initialized with an existing value.""" + return cls( + characters=list(str(value)), + is_valid=True, + min_value=min_value, + _user_started_typing=False, + ) + + def get_input_string(self) -> str: + return "".join(self.characters) + + def get_value(self) -> int | None: + """Return parsed integer value, or None if invalid.""" + if not self.characters: + return None + try: + value = int(self.get_input_string()) + return value if value >= self.min_value else None + except ValueError: + return None + + def handle_digit(self, digit: str) -> None: + """Handle a digit key press.""" + if not self._user_started_typing: + self.characters.clear() + self._user_started_typing = True + self.characters.append(digit) + self._update_validity() + + def handle_backspace(self) -> None: + """Handle backspace key press.""" + self._user_started_typing = True + if self.characters: + self.characters.pop() + self._update_validity() + + def _update_validity(self) -> None: + """Update is_valid based on current input.""" + self.is_valid = self.get_value() is not None + + +def handle_numeric_event(state: IntegerInputState, event) -> tuple[bool, ModalResult | None]: + """ + Process a Blender event for numeric input. + + Returns: + (handled, result): + - handled: True if the event was consumed + - result: "FINISHED", "CANCELLED", or None if still running + """ + if event.value != "PRESS": + return False, None + + # Digit input + if event.ascii and event.ascii in "0123456789": + state.handle_digit(event.ascii) + return True, None + + # Backspace + if event.type == "BACK_SPACE": + state.handle_backspace() + return True, None + + # Confirm + if event.type in {"RET", "NUMPAD_ENTER"}: + if state.is_valid: + return True, "FINISHED" + return True, None # Invalid - don't confirm yet + + # Click confirm + if event.type == "LEFTMOUSE": + if state.characters and state.is_valid: + return True, "FINISHED" + return True, "FINISHED" # Empty or invalid - still finish + + # Cancel + if event.type in {"ESC", "RIGHTMOUSE"}: + return True, "CANCELLED" + + return False, None + + +def run_integer_input_modal(op: IntegerInputOperator, context, event) -> set[str]: + """ + Run the modal loop for an integer input operator. + + The operator must implement: + - _input: IntegerInputState + - _apply_value(context): Apply the current input value + - _restore_value(context): Restore original value on cancel + - _format_header(): Return the header string to display + + Returns the Blender modal return set (e.g., {"RUNNING_MODAL"}). + """ + handled, result = handle_numeric_event(op._input, event) + + if handled: + if result == "FINISHED": + op._apply_value(context) + cleanup_header(context) + return {"FINISHED"} + elif result == "CANCELLED": + op._restore_value(context) + cleanup_header(context) + return {"CANCELLED"} + else: + op._apply_value(context) + update_header(context, op._format_header()) + return {"RUNNING_MODAL"} + + return {"RUNNING_MODAL"} + + +def update_header(context, text: str) -> None: + """Update the area header text.""" + if context.area: + context.area.header_text_set(text) + + +def cleanup_header(context) -> None: + """Clear the area header text.""" + if context.area: + context.area.header_text_set(None) From 5b1e599b5f4f05d5ad28357c422dfac48a8be836 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Sun, 30 Nov 2025 21:57:54 +0100 Subject: [PATCH 241/657] Fix bug when snapping to mesh with the parametric gizmos --- src/bonsai/bonsai/bim/module/drawing/gizmos.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/gizmos.py b/src/bonsai/bonsai/bim/module/drawing/gizmos.py index 17b0b33159..b3d2ac4fda 100644 --- a/src/bonsai/bonsai/bim/module/drawing/gizmos.py +++ b/src/bonsai/bonsai/bim/module/drawing/gizmos.py @@ -1954,7 +1954,9 @@ class BIM_OT_gizmo_value_input(bpy.types.Operator): tool_settings.use_snap = original_snap if snapped_tip != tip_3d: - delta = (snapped_tip - self._start_location).dot(self._axis_direction) + self._click_offset + # snap_to_mesh may return a tuple from the cache, ensure it's a Vector + snapped_tip_vec = Vector(snapped_tip) if not isinstance(snapped_tip, Vector) else snapped_tip + delta = (snapped_tip_vec - self._start_location).dot(self._axis_direction) + self._click_offset set_snap_point(snapped_tip) else: clear_snap_point() @@ -2195,7 +2197,9 @@ class GizmoMovable(bpy.types.Gizmo): if tool_settings.use_snap and self.active_obj: snapped_pos = snap_to_mesh(current_3d, context, self.active_obj, current_coord) if snapped_pos != current_3d: - delta = (snapped_pos - self.start_location).dot(axis_direction) + # snap_to_mesh may return a tuple from the cache, ensure it's a Vector + snapped_pos_vec = Vector(snapped_pos) if not isinstance(snapped_pos, Vector) else snapped_pos + delta = (snapped_pos_vec - self.start_location).dot(axis_direction) set_snap_point(snapped_pos) else: clear_snap_point() From 3b83f978abd09df620d173b508179866b696abff Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 30 Nov 2025 15:54:57 -0600 Subject: [PATCH 242/657] Fix #6334: Preserve annotation vertex order during subdivision to prevent arrow/text flip (#7437) --- .../bonsai/bim/module/geometry/operator.py | 44 ++++++++ src/bonsai/bonsai/tool/geometry.py | 102 ++++++++++++++++++ 2 files changed, 146 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 903473b1b6..ca54376c5f 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2409,6 +2409,14 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): props = tool.Geometry.get_geometry_props() item = tool.Geometry.get_active_representation(obj) assert item + + # Fix vertex order for annotation items + rep_obj = props.representation_obj + if rep_obj: + element = tool.Ifc.get_entity(rep_obj) + if element and self._is_annotation_object(element): + tool.Geometry.ensure_annotation_vertex_order(obj) + if tool.Geometry.is_meshlike_item(item): if tool.Geometry.is_geometric_data(obj.data) and ( item.is_a("IfcVertex") or item.is_a("IfcEdge") or obj.data.polygons @@ -2548,6 +2556,31 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): props.mode = "EDIT" props.is_changing_mode = False + def _is_annotation_object(self, element: ifcopenshell.entity_instance) -> bool: + """Check if element is an annotation object that needs vertex order preservation.""" + if not element.is_a("IfcAnnotation"): + return False + + # Object types that have semantic vertex order (arrow direction, text position) + annotation_types_with_order = { + "TEXT_LEADER", + "DIMENSION", + "RADIUS", + "DIAMETER", + "ANGLE", + "FALL", + "SLOPE_ANGLE", + "SLOPE_FRACTION", + "SLOPE_PERCENT", + "STAIR_ARROW", + "PLAN_LEVEL", + "SECTION_LEVEL", + "SECTION", + "ELEVATION", + } + + return element.ObjectType in annotation_types_with_order + class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.direct_profile_edit" @@ -3374,6 +3407,17 @@ class ImportRepresentationItems(bpy.types.Operator, tool.Ifc.Operator): tool.Root.reload_item_decorator() + element = tool.Ifc.get_entity(obj) + if element and element.is_a("IfcAnnotation") and element.ObjectType in { + "TEXT_LEADER", "DIMENSION", "RADIUS", "DIAMETER", "ANGLE", + "FALL", "SLOPE_ANGLE", "SLOPE_FRACTION", "SLOPE_PERCENT", + "STAIR_ARROW", "PLAN_LEVEL", "SECTION_LEVEL", "SECTION", "ELEVATION" + }: + for item_obj_data in props.item_objs: + item_obj = item_obj_data.obj + if item_obj and isinstance(item_obj.data, bpy.types.Mesh) and item_obj.data.vertices: + item_obj.data["bonsai_first_vert_co"] = item_obj.data.vertices[0].co[:] + class UpdateItemAttributes(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.update_item_attributes" diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index 27eed8c9fd..5d77b6c323 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -1904,6 +1904,17 @@ class Geometry(bonsai.core.tool.Geometry): obj.data.transform(transformation_i) cls.record_object_position(obj) + # ADD THIS AT THE END - Store initial vertex order for annotations + if rep_obj and (element := tool.Ifc.get_entity(rep_obj)): + if element.is_a("IfcAnnotation") and element.ObjectType in { + "TEXT_LEADER", "DIMENSION", "RADIUS", "DIAMETER", "ANGLE", + "FALL", "SLOPE_ANGLE", "SLOPE_FRACTION", "SLOPE_PERCENT", + "STAIR_ARROW", "PLAN_LEVEL", "SECTION_LEVEL", "SECTION", "ELEVATION" + }: + # Store the initial first vertex position + if isinstance(obj.data, bpy.types.Mesh) and obj.data.vertices: + obj.data["bonsai_first_vert_co"] = obj.data.vertices[0].co[:] + @classmethod def disable_item_mode(cls) -> None: props = tool.Geometry.get_geometry_props() @@ -2340,3 +2351,94 @@ class Geometry(bonsai.core.tool.Geometry): continue objects.add(obj) return objects + + @classmethod + def ensure_annotation_vertex_order(cls, obj: bpy.types.Object) -> None: + """ + Ensure vertices form a continuous path from start to end. + Uses the original first vertex position as a reference point. + """ + mesh = obj.data + if not isinstance(mesh, bpy.types.Mesh): + return + + # Get the original first vertex position from custom properties + if "bonsai_first_vert_co" in mesh: + original_first_co = Vector(mesh["bonsai_first_vert_co"]) + else: + # Store it for next time + if mesh.vertices: + original_first_co = Vector(mesh.vertices[0].co) + mesh["bonsai_first_vert_co"] = original_first_co[:] + else: + return + + bm = bmesh.new() + bm.from_mesh(mesh) + bm.verts.ensure_lookup_table() + bm.edges.ensure_lookup_table() + + if len(bm.verts) == 0: + bm.free() + return + + # Find endpoints (vertices with only one connected edge) + endpoints = [v for v in bm.verts if len(v.link_edges) == 1] + + # Choose the endpoint closest to the original first vertex position + if len(endpoints) == 0: + # Closed loop - pick any vertex as start + start_vert = bm.verts[0] + elif len(endpoints) == 1: + # Single endpoint + start_vert = endpoints[0] + else: + # Choose endpoint closest to where the original first vertex was + start_vert = min(endpoints, key=lambda v: (v.co - original_first_co).length) + + # Build ordered vertex list by following edges + ordered_verts = [start_vert] + current_vert = start_vert + visited_edges = set() + + while True: + # Find next unvisited edge + next_edge = None + for edge in current_vert.link_edges: + if edge not in visited_edges: + next_edge = edge + break + + if not next_edge: + break + + visited_edges.add(next_edge) + next_vert = next_edge.other_vert(current_vert) + + # Avoid going back on ourselves + if next_vert not in ordered_verts: + ordered_verts.append(next_vert) + + current_vert = next_vert + + # Store vertex coordinates in the correct order + new_verts_co = [v.co.copy() for v in ordered_verts] + + # Update the stored first vertex position to the new first vertex + mesh["bonsai_first_vert_co"] = new_verts_co[0][:] + + # Clear and rebuild mesh with correct vertex order + bm.clear() + + # Create new vertices in order + new_verts = [bm.verts.new(co) for co in new_verts_co] + bm.verts.ensure_lookup_table() + + # Create edges connecting consecutive vertices + for i in range(len(new_verts) - 1): + bm.edges.new([new_verts[i], new_verts[i + 1]]) + + # Write back to mesh + bm.to_mesh(mesh) + bm.free() + mesh.update() \ No newline at end of file From e3d254d3e5ba23f57b3c7191c551d03286077167 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 30 Nov 2025 19:07:14 -0600 Subject: [PATCH 243/657] fix #6250: have name of duplicated type show in outliner, as well. --- src/bonsai/bonsai/bim/module/type/operator.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index 08f07c6402..ef49db33b4 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -347,6 +347,9 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): if self.description: new.Description = self.description + # Update the Blender object name to match the IFC element name + tool.Root.set_object_name(new_obj, new) + bpy.ops.bim.load_type_thumbnails() # Assign selected objects to the new type if requested From 5b7888984eb98f190e337b1f5eafcc25a37d7685 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 30 Nov 2025 20:02:57 -0600 Subject: [PATCH 244/657] Fix #6495: when Shift+G is run to regenerate a wall, it refreshes the cut decorator as well. --- src/bonsai/bonsai/bim/module/model/opening.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index 2d9ca711d9..11c80041e6 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -48,6 +48,7 @@ from bpy_extras.object_utils import AddObjectHelper, object_data_add from gpu_extras.batch import batch_for_shader from typing import Union, Optional, Any, cast from collections.abc import Sequence +from bonsai.bim.module.drawing.decoration import DecoratorData class FilledOpeningGenerator: @@ -415,9 +416,13 @@ class RecalculateFill(bpy.types.Operator, tool.Ifc.Operator): obj=building_obj, representation=representation, ) + + #Refresh cut decorator + DecoratorData.cut_cache.clear() + DecoratorData.fill_cache.clear() + DecoratorData.slice_cache.clear() + return {"FINISHED"} - - class FlipFill(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.flip_fill" bl_label = "Flip Fill" From ad812bda47f123fc4606239a2990a89c7d52c14b Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 30 Nov 2025 21:01:41 -0600 Subject: [PATCH 245/657] fix #3238: Auto-switch representation to match active drawing on type assign --- src/bonsai/bonsai/bim/module/type/operator.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index ef49db33b4..3801923296 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -58,11 +58,33 @@ class AssignType(bpy.types.Operator, tool.Ifc.Operator): else: related_objects = tool.Blender.get_selected_objects() prefs = tool.Blender.get_addon_preferences() + + # Get the active drawing's target view + active_target_view = None + drawing_props = context.scene.DocProperties + if drawing_props.active_drawing_id: + active_drawing = tool.Ifc.get().by_id(drawing_props.active_drawing_id) + if active_drawing: + active_target_view = tool.Drawing.get_drawing_target_view(active_drawing) + for obj in related_objects: element = tool.Ifc.get_entity(obj) if not element or not element.is_a("IfcObject"): continue core.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) + + # Switch to the drawing's target view if available + if active_target_view and element.Representation: + for rep in element.Representation.Representations: + if rep.ContextOfItems.TargetView == active_target_view: + bonsai.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj=obj, + representation=rep, + ) + break + if prefs.occurrence_name_style == "TYPE": obj.name = tool.Model.generate_occurrence_name(relating_type, element.is_a()) From f0834256569715d903650ad508b31a6e2645498f Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 1 Dec 2025 11:01:52 -0600 Subject: [PATCH 246/657] Fix #7438 - increase tolerance in making Shapely fills --- src/bonsai/bonsai/bim/module/drawing/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 5077b0bbf0..4921cdee8e 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -1007,7 +1007,7 @@ class CreateDrawing(bpy.types.Operator): for polygon in closed_polygons.geoms: # Less than 1mm2 is not worth styling on sheet - if polygon.area < 1: + if polygon.area < .1: continue centroid = polygon.centroid centroid = centroid if polygon.contains(centroid) else polygon.representative_point() From 349cbf27b98c335d7623c7df89076394ce4b61c9 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 1 Dec 2025 11:06:09 -0600 Subject: [PATCH 247/657] updated comment for previous commit. --- src/bonsai/bonsai/bim/module/drawing/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 4921cdee8e..d4b24a5ae7 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -1006,7 +1006,7 @@ class CreateDrawing(bpy.types.Operator): closed_polygons = shapely.polygonize(unioned_boundaries.geoms) for polygon in closed_polygons.geoms: - # Less than 1mm2 is not worth styling on sheet + # Less than 0.1mm2 is not worth styling on sheet if polygon.area < .1: continue centroid = polygon.centroid From c769c9e67c43efbc20f38b1f85976198db37f5c5 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Mon, 1 Dec 2025 23:13:34 +0100 Subject: [PATCH 248/657] Update to gizmos system Added more gizmos for multi-panel windows and for the door transom. Support negative dimension values (lining offset for door and window) Fix railing, stair, and roof being regenerated during UI panel draw instead of on property change Various code quality changes and DRY improvements --- .../bonsai/bim/module/drawing/gizmos.py | 939 ++++++++++++++++-- .../bonsai/bim/module/model/__init__.py | 3 +- src/bonsai/bonsai/bim/module/model/door.py | 377 +++---- src/bonsai/bonsai/bim/module/model/prop.py | 508 +++++++--- src/bonsai/bonsai/bim/module/model/stair.py | 511 ++++------ src/bonsai/bonsai/bim/module/model/ui.py | 10 - src/bonsai/bonsai/bim/module/model/window.py | 401 ++++---- 7 files changed, 1747 insertions(+), 1002 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/gizmos.py b/src/bonsai/bonsai/bim/module/drawing/gizmos.py index b3d2ac4fda..e5aa3173f1 100644 --- a/src/bonsai/bonsai/bim/module/drawing/gizmos.py +++ b/src/bonsai/bonsai/bim/module/drawing/gizmos.py @@ -87,7 +87,18 @@ camera is viewing from the positive or negative side of each axis. """ __all__ = [ + "GizmoColor", + "GizmoAxis", + "TextAlignment", + "CoordinateSpace", + "ModalState", "DimensionGizmoConfig", + "DimensionDrawConfig", + "ViewDirection", + "GizmoModalContext", + "get_modal_context", + "get_validated_modal_context", + "ParametricProps", "NumericInputState", "GPUStateScope", "set_snap_point", @@ -114,13 +125,15 @@ __all__ = [ "GizmoCone", "GizmoDimension", "DimensionRenderer", + "CycleTypeMixin", "BaseParametricGizmoGroup", "UglyDotGizmo", "ExtrusionGuidesGizmo", "ExtrusionWidget", ] -from typing import Any, Callable, Iterator +from typing import Any, Callable, Iterator, Literal, Protocol, runtime_checkable, get_args +from enum import Enum import blf import bpy @@ -177,7 +190,116 @@ _SPECIAL = {"=", " "} # Formula prefix, spaces NUMERIC_INPUT_CHARS = _DIGITS | _OPERATORS | _METRIC_UNITS | _IMPERIAL_UNITS | _SPECIAL -@dataclass +class GizmoColor(Enum): + """Color identifiers for dimension gizmos. + + Maps axis directions to colors following BIM/CAD conventions: + - RED: X-axis (width) + - GREEN: Y-axis (depth) + - BLUE: Z-axis (height) + + Use GizmoColor.from_axis() to auto-derive color from axis direction. + """ + + RED = "RED" + GREEN = "GREEN" + BLUE = "BLUE" + + @classmethod + def from_axis(cls, axis: tuple[int, int, int]) -> "GizmoColor": + """Derive color from axis direction. + + Args: + axis: Direction tuple (x, y, z) with at least one non-zero component. + + Returns: + GizmoColor based on the first non-zero axis component. + """ + if axis[0] != 0: + return cls.RED + elif axis[1] != 0: + return cls.GREEN + return cls.BLUE + + +class TextAlignment(Enum): + """Text alignment options for dimension gizmo labels. + + Controls where the dimension value text is positioned along the dimension line. + """ + + START = "start" # Align text to the start of the dimension line + CENTER = "center" # Center text on the dimension line (default) + END = "end" # Align text to the end of the dimension line + + +# Type alias for gizmo axis direction tuples +# Each component must be -1, 0, or 1 to indicate direction along that axis +GizmoAxis = tuple[Literal[-1, 0, 1], Literal[-1, 0, 1], Literal[-1, 0, 1]] + + +class CoordinateSpace(Enum): + """Coordinate space identifiers for gizmo positioning. + + Clarifies which space a position or direction is expressed in: + - LOCAL: Object-local coordinates (relative to element origin) + - WORLD: World/scene coordinates (absolute position) + - SCREEN: 2D screen-space coordinates (pixels) + + Usage: + # Document coordinate space in function signatures + def get_position(self, space: CoordinateSpace = CoordinateSpace.LOCAL) -> Vector: + ... + + # Or use as documentation in comments + local_pos = Vector((0, 0, 1)) # CoordinateSpace.LOCAL + world_pos = matrix_world @ local_pos # CoordinateSpace.WORLD + """ + + LOCAL = "local" # Object-local space (relative to element matrix_world) + WORLD = "world" # World/scene space (absolute coordinates) + SCREEN = "screen" # 2D screen space (pixel coordinates) + + +class ModalState(Enum): + """State machine states for modal gizmo operations. + + Used to track the current interaction mode during gizmo manipulation. + Helps organize modal operator logic and determine valid state transitions. + + States: + IDLE: No interaction active, waiting for user input + DRAGGING: User is dragging the gizmo with the mouse + KEYBOARD_INPUT: User is typing a numeric value + SNAPPING: Dragging with snap enabled (Ctrl held) + PRECISION: Dragging with precision mode (Shift held) + + State transitions: + IDLE -> DRAGGING: Mouse press on gizmo + IDLE -> KEYBOARD_INPUT: Numeric key press + DRAGGING -> SNAPPING: Ctrl pressed during drag + DRAGGING -> PRECISION: Shift pressed during drag + SNAPPING -> DRAGGING: Ctrl released + PRECISION -> DRAGGING: Shift released + * -> IDLE: Mouse release, Enter, Escape + """ + + IDLE = "idle" + DRAGGING = "dragging" + KEYBOARD_INPUT = "keyboard_input" + SNAPPING = "snapping" + PRECISION = "precision" + + def is_active(self) -> bool: + """Check if this state represents an active interaction.""" + return self != ModalState.IDLE + + def allows_keyboard_input(self) -> bool: + """Check if this state allows transitioning to keyboard input.""" + return self in (ModalState.IDLE, ModalState.DRAGGING) + + +@dataclass(slots=True) class GizmoModalContext: """Typed context for modal gizmo operations. @@ -224,6 +346,38 @@ class GizmoModalContext: _gizmo_modal_context = GizmoModalContext() +def get_modal_context() -> GizmoModalContext: + """Get the global modal gizmo context. + + Provides access to the module-level context without exposing the private variable. + Use this when reading context values that may be None. + + Returns: + The global GizmoModalContext instance. + """ + return _gizmo_modal_context + + +def get_validated_modal_context() -> GizmoModalContext: + """Get the modal context, validating that essential fields are set. + + Use this when the context is expected to be fully initialized (e.g., during + modal operator execution). Raises RuntimeError if the context is incomplete. + + Returns: + The global GizmoModalContext instance with essential fields validated. + + Raises: + RuntimeError: If active_gizmo or gizmo_group is None. + """ + ctx = _gizmo_modal_context + if ctx.active_gizmo is None: + raise RuntimeError("Modal context not initialized: active_gizmo is None") + if ctx.gizmo_group is None: + raise RuntimeError("Modal context not initialized: gizmo_group is None") + return ctx + + class GPUStateScope: """Context manager for saving and restoring GPU state. @@ -352,7 +506,7 @@ class DimensionTextRenderer: value: float, color: tuple[float, float, float], offset_sign: int = 1, - alignment: str = "center", + alignment: TextAlignment | str = TextAlignment.CENTER, ) -> None: """Draw formatted dimension value text at the given screen position. @@ -363,9 +517,16 @@ class DimensionTextRenderer: value: Dimension value to format and display color: Text color (r, g, b) offset_sign: 1 for above/right, -1 for below/left - alignment: "center" or "start" + alignment: TextAlignment enum value """ - text = tool.Unit.format_distance(value) + # Normalize string to enum for comparison + if isinstance(alignment, str): + alignment = TextAlignment(alignment) + + is_negative = value < 0 + text = tool.Unit.format_distance(abs(value)) + if is_negative: + text = "-" + text font_id = 0 font_size = tool.Blender.scale_font_size(self.VALUE_FONT_SIZE) @@ -376,7 +537,7 @@ class DimensionTextRenderer: text_width, text_height = blf.dimensions(font_id, text) offset_distance = (text_height + 4) * offset_sign - if alignment == "start": + if alignment == TextAlignment.START: text_x = screen_pos[0] + perpendicular[0] * offset_distance text_y = screen_pos[1] - text_height / 2 + perpendicular[1] * offset_distance else: @@ -453,6 +614,118 @@ class DimensionTextRenderer: batch.draw(shader) +@dataclass(slots=True, frozen=True) +class DimensionDrawConfig: + """Immutable configuration for drawing a dimension line. + + Groups the many parameters needed by DimensionRenderer.draw() into a + single configuration object, improving readability and maintainability. + + Attributes: + start_world: World-space start position + end_world: World-space end position + axis_world: Normalized axis direction in world space + dimension_length: Length of the dimension (for drawing the line) + color: Base color (r, g, b) + alpha: Base alpha (0.0 to 1.0) + is_highlight: Whether gizmo is highlighted/hovered + highlight_color: Highlight color (r, g, b) + highlight_alpha: Highlight alpha + show_start_arrow: Whether to show arrow at start + show_end_arrow: Whether to show arrow at end + show_extension_lines: Whether to show extension lines + text_offset_sign: 1 for above/right, -1 for below/left + text_alignment: TextAlignment value for text positioning along line + prop_name: Property name for tooltip (shown when highlighted) + display_value: Value to display as text (can be negative); uses dimension_length if None + """ + + start_world: Vector + end_world: Vector + axis_world: Vector + dimension_length: float + color: tuple[float, float, float] = (1.0, 1.0, 1.0) + alpha: float = 1.0 + is_highlight: bool = False + highlight_color: tuple[float, float, float] = (1.0, 1.0, 0.5) + highlight_alpha: float = 1.0 + show_start_arrow: bool = False + show_end_arrow: bool = True + show_extension_lines: bool = True + text_offset_sign: Literal[-1, 1] = 1 + text_alignment: TextAlignment = TextAlignment.CENTER + prop_name: str | None = None + display_value: float | None = None + + +@dataclass(slots=True, frozen=True) +class ViewDirection: + """Immutable representation of camera view direction relative to an element's local space. + + Provides a cleaner API than tuple unpacking for view-dependent gizmo positioning. + + With: + view = self.get_view_direction(context, mw) + if view.from_back: ... + + Attributes: + from_negative_y: True if camera is on the -Y side (viewing from "back") + from_negative_x: True if camera is on the -X side (viewing from "left") + + Properties: + from_back: Alias for from_negative_y (more intuitive for doors/windows) + from_front: Inverse of from_back + from_left: Alias for from_negative_x + from_right: Inverse of from_left + """ + + from_negative_y: bool = False + from_negative_x: bool = False + + @property + def from_back(self) -> bool: + """True if viewing from the back (-Y) side of the element.""" + return self.from_negative_y + + @property + def from_front(self) -> bool: + """True if viewing from the front (+Y) side of the element.""" + return not self.from_negative_y + + @property + def from_left(self) -> bool: + """True if viewing from the left (-X) side of the element.""" + return self.from_negative_x + + @property + def from_right(self) -> bool: + """True if viewing from the right (+X) side of the element.""" + return not self.from_negative_x + + @classmethod + def from_context(cls, context: bpy.types.Context, world_matrix: Matrix) -> "ViewDirection": + """Create ViewDirection from Blender context and object world matrix. + + Args: + context: Blender context with region_data + world_matrix: Object's world transformation matrix + + Returns: + ViewDirection instance, defaults to (False, False) if region data unavailable. + """ + rv3d = context.region_data + if not rv3d: + return cls() + + view_direction = Vector(rv3d.view_rotation @ Vector((0, 0, -1))) + local_view_dir = world_matrix.inverted().to_3x3() @ view_direction + + return cls( + from_negative_y=local_view_dir.y < 0, + from_negative_x=local_view_dir.x < 0, + ) + + class DimensionRenderer: """Handles rendering of dimension line graphics. @@ -462,6 +735,9 @@ class DimensionRenderer: Usage: renderer = DimensionRenderer.get_instance() + config = DimensionDrawConfig(start_world, end_world, axis_world, length, color) + renderer.draw(context, config) + # Or use legacy method signature: renderer.draw(context, start_world, end_world, ...) """ @@ -512,8 +788,9 @@ class DimensionRenderer: show_end_arrow: bool = True, show_extension_lines: bool = True, text_offset_sign: int = 1, - text_alignment: str = "center", + text_alignment: TextAlignment = TextAlignment.CENTER, prop_name: str | None = None, + display_value: float | None = None, ) -> None: """Draw complete dimension graphics in screen space. @@ -522,7 +799,7 @@ class DimensionRenderer: start_world: World-space start position end_world: World-space end position axis_world: Normalized axis direction in world space - dimension_length: Length of the dimension (for text display) + dimension_length: Length of the dimension (for drawing the line) color: Base color (r, g, b) alpha: Base alpha is_highlight: Whether gizmo is highlighted/hovered @@ -532,12 +809,16 @@ class DimensionRenderer: show_end_arrow: Whether to show arrow at end show_extension_lines: Whether to show extension lines text_offset_sign: 1 for above/right, -1 for below/left - text_alignment: "center" or "start" + text_alignment: TextAlignment enum for text positioning prop_name: Property name for tooltip (shown when highlighted) + display_value: Value to display as text (can be negative); uses dimension_length if None """ if dimension_length < 0: return + # Use display_value for text if provided, otherwise use dimension_length + text_value = display_value if display_value is not None else dimension_length + region = context.region rv3d = context.region_data if not region or not rv3d: @@ -650,7 +931,7 @@ class DimensionRenderer: ) text_color = highlight_color if is_highlight else color DimensionTextRenderer.get_instance().draw_value_text( - context, center_screen, perpendicular, dimension_length, text_color, text_offset_sign, text_alignment + context, center_screen, perpendicular, text_value, text_color, text_offset_sign, text_alignment ) if is_highlight and prop_name: @@ -690,9 +971,9 @@ class DimensionRenderer: return (top, bottom) -@dataclass +@dataclass(slots=True, frozen=True) class SnapCache: - """Unified snap cache with combined KD-tree for vertex snapping.""" + """Immutable snap cache with combined KD-tree for vertex snapping.""" # Combined KD-tree with all world vertices from all objects kd_tree: KDTree @@ -700,7 +981,7 @@ class SnapCache: all_vertices: list[tuple[float, float, float]] -@dataclass +@dataclass(slots=True) class NumericInputState: """State for keyboard numeric input during gizmo operations.""" @@ -756,7 +1037,25 @@ class NumericInputState: self.is_valid = False -@dataclass +@runtime_checkable +class ParametricProps(Protocol): + """Protocol defining the common interface for parametric element properties. + + All parametric property classes (BIMDoorProperties, BIMWindowProperties, + BIMStairProperties, etc.) should implement this interface. This enables + type-safe code in BaseParametricGizmoGroup without importing concrete classes. + + Example: + def update_gizmos(self, props: ParametricProps) -> None: + if props.is_editing: + # Safe to access common properties + ... + """ + + is_editing: bool + + +@dataclass(slots=True) class DimensionGizmoConfig: """Configuration for a dimension gizmo. @@ -814,35 +1113,87 @@ class DimensionGizmoConfig: If None, uses setattr(props, attr_name, value). visibility_condition: Optional function(props) -> bool. If returns False, the gizmo is hidden. Used for conditional gizmos. + matrix_position: Optional function(props) -> Vector for gizmo position. + If provided, eliminates need for get_dimension_matrix_{attr_name} method. + The returned Vector is the local-space position where the gizmo origin + will be placed. Combined with axis to create the full transformation matrix. """ attr_name: str - axis: tuple[int, int, int] - color: str | None = None + axis: GizmoAxis + color: GizmoColor | str | None = None # GizmoColor enum, string ("RED"/"GREEN"/"BLUE"), or None for auto prop_name: str | None = None min_value: float = 0.0 invert_delta: bool = False delta_scale: float = 1.0 - text_offset_sign: int = 1 - text_alignment: str = "center" + text_offset_sign: Literal[-1, 1] = 1 + text_alignment: TextAlignment | str = TextAlignment.CENTER show_start_arrow: bool = False show_end_arrow: bool = True compute_value: Callable[[Any], float] | None = None apply_value: Callable[[Any, float], None] | None = None visibility_condition: Callable[[Any], bool] | None = None + matrix_position: Callable[[Any], "Vector"] | None = None # Optional: function(props) -> Vector position def __post_init__(self): - if self.color is None: - if self.axis[0] != 0: - self.color = "RED" - elif self.axis[1] != 0: - self.color = "GREEN" - else: - self.color = "BLUE" + # Validate attr_name + if not self.attr_name or not isinstance(self.attr_name, str): + raise ValueError("attr_name must be a non-empty string") + # Validate axis + if len(self.axis) != 3: + raise ValueError(f"axis must be a 3-tuple, got {len(self.axis)} elements") + if not any(self.axis): + raise ValueError("axis must have at least one non-zero component") + + # Normalize and validate text_alignment + if isinstance(self.text_alignment, str): + try: + self.text_alignment = TextAlignment(self.text_alignment) + except ValueError: + valid = [e.value for e in TextAlignment] + raise ValueError(f"text_alignment must be one of {valid}, got '{self.text_alignment}'") + elif not isinstance(self.text_alignment, TextAlignment): + raise ValueError(f"text_alignment must be TextAlignment enum or string, got {type(self.text_alignment)}") + + # Validate text_offset_sign + if self.text_offset_sign not in (1, -1): + raise ValueError(f"text_offset_sign must be 1 or -1, got {self.text_offset_sign}") + + # Normalize and validate color + if self.color is None: + # Auto-derive from axis direction + self.color = GizmoColor.from_axis(self.axis) + elif isinstance(self.color, str): + # Convert string to enum + try: + self.color = GizmoColor(self.color) + except ValueError: + raise ValueError(f"color must be 'RED', 'GREEN', or 'BLUE', got '{self.color}'") + elif not isinstance(self.color, GizmoColor): + raise ValueError(f"color must be GizmoColor enum, string, or None, got {type(self.color)}") + + # Auto-derive prop_name from attr_name if not specified if self.prop_name is None: self.prop_name = self.attr_name.replace("_", " ").title() + def __repr__(self) -> str: + """Concise representation showing key configuration values.""" + parts = [f"attr_name={self.attr_name!r}", f"axis={self.axis}"] + if self.color: + parts.append(f"color={self.color.name}") + if self.visibility_condition: + parts.append("visibility_condition=") + if self.matrix_position: + parts.append("matrix_position=") + if self.compute_value: + parts.append("compute_value=") + if self.min_value != 0.0: + parts.append(f"min_value={self.min_value}") + if self.invert_delta: + parts.append("invert_delta=True") + return f"DimensionGizmoConfig({', '.join(parts)})" + class SnapManager: """Manages snap point visualization and mesh snapping with caching.""" @@ -3062,10 +3413,11 @@ class GizmoDimension(GizmoMovable): "_start_mouse_pos", "_has_dragged", "_dimension_length", + "_display_value", # Actual value for display (can be negative) "text_offset_sign", # -1 to offset text below/left, +1 for above/right (default) "show_start_arrow", # Whether to show arrow at start (origin) of dimension "show_end_arrow", # Whether to show arrow at end of dimension - "text_alignment", # "center" (default) or "start" (left-aligned at offset from line) + "text_alignment", # TextAlignment enum: CENTER (default) or START (left-aligned at offset from line) "_original_value", # Original property value before interaction "_click_offset", # Offset from dimension tip to click position (for snap correction) "show_extension_lines", # Whether to show extension lines at dimension endpoints @@ -3095,10 +3447,11 @@ class GizmoDimension(GizmoMovable): def setup(self) -> None: self.custom_shape = self.new_custom_shape("TRIS", self._get_clickable_shape()) self._dimension_length = 1.0 + self._display_value = 1.0 self.text_offset_sign = 1 self.show_start_arrow = False self.show_end_arrow = True - self.text_alignment = "center" + self.text_alignment = TextAlignment.CENTER self.show_extension_lines = True def draw(self, context: bpy.types.Context) -> None: @@ -3125,8 +3478,9 @@ class GizmoDimension(GizmoMovable): show_end_arrow=getattr(self, "show_end_arrow", True), show_extension_lines=getattr(self, "show_extension_lines", True), text_offset_sign=getattr(self, "text_offset_sign", 1), - text_alignment=getattr(self, "text_alignment", "center"), + text_alignment=getattr(self, "text_alignment", TextAlignment.CENTER), prop_name=getattr(self, "prop_name", None), + display_value=getattr(self, "_display_value", self._dimension_length), ) def _calculate_screen_endpoints( @@ -3243,8 +3597,10 @@ class GizmoDimension(GizmoMovable): # Validate input: reject NaN, Inf, and non-numeric values if not isinstance(length, (int, float)) or math.isnan(length) or math.isinf(length): length = 0.0 - # Clamp to valid range (0 to 10000 meters is reasonable for BIM) - self._dimension_length = max(0.0, min(length, 10000.0)) + # Store the actual value for display (can be negative) + self._display_value = max(-10000.0, min(length, 10000.0)) + # Clamp to valid range (0 to 10000 meters is reasonable for BIM) for drawing + self._dimension_length = max(0.0, min(abs(length), 10000.0)) def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set: """Initialize dimension gizmo interaction with click-position tracking. @@ -3498,6 +3854,54 @@ class GizmoDimension(GizmoMovable): clear_snap_cache() +class CycleTypeMixin: + """Mixin for operators that cycle through type literals. + + Subclasses must define: + element_checker: Class method name on tool.Blender.Modifier (e.g., "is_door") + props_getter: Method name on tool.Model (e.g., "get_door_props") + type_literal: The type literal from tool.Model (e.g., tool.Model.DoorType) + type_attr: Attribute name on props for the type (e.g., "door_type") + + Optional: + skip_element_check: If True, skip the element type validation (default False) + """ + + element_checker: str + props_getter: str + type_literal: type + type_attr: str + skip_element_check: bool = False + + reverse: bpy.props.BoolProperty(name="Reverse", default=False, options={"HIDDEN", "SKIP_SAVE"}) + + def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set[str]: + """Set reverse direction based on Shift key.""" + self.reverse = event.shift + return self.execute(context) + + def _cycle_type(self, context: bpy.types.Context) -> set[str]: + """Common type cycling logic. Call from execute() or _execute().""" + obj = context.active_object + if not obj: + return {"CANCELLED"} + + if not self.skip_element_check: + element = tool.Ifc.get_entity(obj) + checker = getattr(tool.Blender.Modifier, self.element_checker) + if not element or not checker(element): + return {"CANCELLED"} + + props = getattr(tool.Model, self.props_getter)(obj) + types = get_args(self.type_literal) + current = getattr(props, self.type_attr) + idx = types.index(current) if current in types else 0 + direction = -1 if self.reverse else 1 + setattr(props, self.type_attr, types[(idx + direction) % len(types)]) + + return {"FINISHED"} + + class BaseParametricGizmoGroup: """Base mixin for parametric element gizmo groups (doors, windows, stairs, etc.). @@ -3545,6 +3949,31 @@ class BaseParametricGizmoGroup: - Dimension gizmos: Positioned with GIZMO_OFFSET from geometry edges - Icon gizmos: Positioned above element using ICON_Z_OFFSET, laid out horizontally + + Color Convention + ================ + + Gizmo colors follow Blender's axis convention: + - RED: X-axis dimensions (width) + - GREEN: Y-axis dimensions (depth) + - BLUE: Z-axis dimensions (height) + + View Direction API + ================== + + Use ``ViewDirection.from_context(context, mw)`` to determine camera position:: + + view = ViewDirection.from_context(context, obj.matrix_world) + if view.from_back: # Camera behind element (interior for doors) + y_pos = props.depth + if view.from_left: # Camera on left side + x_pos = -offset + + Negative Value Handling + ======================= + + Some dimensions support negative values (e.g., lining_offset). When negative, + the gizmo is flipped 180° using FLIP_MATRIX so the arrow points opposite. """ # === Gizmo Colors === @@ -3556,6 +3985,11 @@ class BaseParametricGizmoGroup: # === Dimension Gizmo Layout (meters) === ARROW_SCALE = 0.25 # Scale factor for arrow gizmos GIZMO_OFFSET = 0.15 # Distance from geometry edge to dimension line + GIZMO_STACK_OFFSET = 0.1 # Offset increment for stacking multiple gizmos to avoid overlap + GIZMO_CLAMP_MAX = 10000.0 # Maximum value for dimension clamping (meters) + + # Pre-computed flip matrix for negative value handling (180° rotation around Z) + FLIP_MATRIX = Matrix.Rotation(math.pi, 4, 'Z') # === Icon Gizmo Layout (meters) === # Icons are positioned in a horizontal row above the element: @@ -3575,10 +4009,17 @@ class BaseParametricGizmoGroup: cycle_type_operator: str = "" @classmethod - def get_color_from_name(cls, color_name: str) -> tuple[float, float, float]: - """Get color tuple from color name string.""" - colors = {"RED": cls.COLOR_RED, "GREEN": cls.COLOR_GREEN, "BLUE": cls.COLOR_BLUE} - return colors.get(color_name.upper(), cls.COLOR_RED) + def get_color_from_name(cls, color: GizmoColor | str) -> tuple[float, float, float]: + """Get color tuple from GizmoColor enum or color name string.""" + colors = { + GizmoColor.RED: cls.COLOR_RED, + GizmoColor.GREEN: cls.COLOR_GREEN, + GizmoColor.BLUE: cls.COLOR_BLUE, + } + if isinstance(color, GizmoColor): + return colors.get(color, cls.COLOR_RED) + # Handle legacy string input + return colors.get(GizmoColor(color.upper()), cls.COLOR_RED) @classmethod def get_arrow_color_from_axis(cls, axis: tuple[int, int, int]) -> tuple[float, float, float]: @@ -3604,6 +4045,8 @@ class BaseParametricGizmoGroup: - viewing_from_negative_x: True if camera is on the -X side of the element Returns (False, False) if region data is unavailable. + + Note: Consider using ViewDirection.from_context() for a cleaner API. """ rv3d = context.region_data if not rv3d: @@ -3617,6 +4060,44 @@ class BaseParametricGizmoGroup: return viewing_from_negative_y, viewing_from_negative_x + def get_view_direction(self, context: bpy.types.Context, world_matrix: Matrix) -> "ViewDirection": + """Get view direction as a ViewDirection object for cleaner API. + + Example: + view = self.get_view_direction(context, mw) + if view.from_back: + y_pos = props.depth + else: + y_pos = 0 + """ + from_neg_y, from_neg_x = self.get_local_view_direction(context, world_matrix) + return ViewDirection(from_negative_y=from_neg_y, from_negative_x=from_neg_x) + + def update_gizmo_visibility( + self, gizmo: bpy.types.Gizmo, is_editing: bool, pref_enabled: bool + ) -> bool: + """Update gizmo visibility based on modal state, editing state, and preference. + + Consolidates the common pattern: + if hidden_by_modal: + gizmo.hide = True + else: + gizmo.hide = not is_editing or not pref_enabled + + Args: + gizmo: The gizmo to update visibility for + is_editing: Whether the element is currently being edited + pref_enabled: Whether this gizmo type is enabled in preferences + + Returns: + True if the gizmo is now visible (not hidden), False otherwise + """ + if self.is_gizmo_hidden_by_modal(gizmo): + gizmo.hide = True + return False + gizmo.hide = not is_editing or not pref_enabled + return not gizmo.hide + def get_y_position_for_view( self, props, viewing_from_negative_y: bool, width_attr: str = "width", use_offset: bool = False ) -> float: @@ -3639,6 +4120,25 @@ class BaseParametricGizmoGroup: return width + (self.GIZMO_OFFSET if use_offset else 0) return -self.GIZMO_OFFSET if use_offset else 0 + def get_icon_y_for_view(self, props, viewing_from_negative_y: bool) -> float: + """Get Y position for editing icons based on view direction. + + Similar to get_y_position_for_view but always includes offset and + uses the element's furthest Y extent for positioning. + + Args: + props: Element properties object + viewing_from_negative_y: True if viewing from -Y side + + Returns: + Y position for icon row: -GIZMO_OFFSET when viewing from -Y, + width + GIZMO_OFFSET otherwise + """ + width = getattr(props, "width", 0) + if viewing_from_negative_y: + return -self.GIZMO_OFFSET + return width + self.GIZMO_OFFSET + def compose_gizmo_matrix(self, translation: Vector, axis: tuple[int, int, int]) -> Matrix: """Compose a gizmo transformation matrix from translation and axis. @@ -3676,6 +4176,130 @@ class BaseParametricGizmoGroup: return lining_offset + (self.GIZMO_OFFSET if use_offset else 0) return lining_offset - (self.GIZMO_OFFSET if use_offset else 0) + def get_x_positions_for_view( + self, width: float, offset: float, viewing_from_negative_x: bool + ) -> tuple[float, float]: + """Get X positions for height and lining gizmos based on view direction. + + When viewing from -X side, height goes to -X and lining goes to +X. + When viewing from +X side, height goes to +X and lining goes to -X. + + Args: + width: Element width (e.g., overall_width) + offset: Additional offset (e.g., casing_thickness) + viewing_from_negative_x: True if viewing from -X side + + Returns: + Tuple of (x_pos_height, x_pos_lining) + """ + if viewing_from_negative_x: + x_pos_height = -offset - self.GIZMO_OFFSET + x_pos_lining = width + offset + self.GIZMO_OFFSET + else: + x_pos_height = width + offset + self.GIZMO_OFFSET + x_pos_lining = -offset - self.GIZMO_OFFSET + return x_pos_height, x_pos_lining + + def get_dimension_matrix_lining_offset_default(self, props) -> Matrix: + """Default lining offset matrix for door/window elements. + + Position at element width + offset, at Y=0, below the element. + Override in subclass if different positioning is needed. + """ + width = getattr(props, "overall_width", 0) + return self.compose_gizmo_matrix( + Vector((width + self.GIZMO_OFFSET, 0, -self.GIZMO_OFFSET)), (0, 1, 0) + ) + + def get_casing_offset(self, props) -> float: + """Get casing offset for view-dependent dimension positioning. + + Override in door to return casing_thickness when lining_offset is 0. + Default returns 0 (no casing offset). + """ + return 0.0 + + def _update_view_dependent_dimensions( + self, context: bpy.types.Context, mw: Matrix, props + ) -> None: + """Update overall_width, overall_height, and lining_offset based on view direction. + + This base implementation handles the common pattern for door/window gizmos. + Subclasses can override get_casing_offset() to customize behavior. + """ + viewing_from_negative_y, viewing_from_negative_x = self.get_local_view_direction(context, mw) + y_pos = self.get_lining_y_position_for_view(props, viewing_from_negative_y) + + self.set_dimension_gizmo_position("overall_width", mw, Vector((0, y_pos, -self.GIZMO_OFFSET)), (1, 0, 0)) + + casing_offset = self.get_casing_offset(props) + x_pos_height, x_pos_lining = self.get_x_positions_for_view( + props.overall_width, casing_offset, viewing_from_negative_x + ) + self.set_dimension_gizmo_position("overall_height", mw, Vector((x_pos_height, y_pos, 0)), (0, 0, 1)) + self.set_dimension_gizmo_position( + "lining_offset", mw, Vector((x_pos_lining, 0, -self.GIZMO_OFFSET)), (0, 1, 0), props.lining_offset + ) + + def create_icon_gizmo( + self, + gizmo_type: str, + color: tuple[float, float, float], + operator: str, + prop_path: str | None = None, + alpha: float = 0.8, + **operator_props, + ) -> bpy.types.Gizmo: + """Create an icon gizmo with common settings. + + Args: + gizmo_type: Blender gizmo type (e.g., "VIEW3D_GT_lock", "VIEW3D_GT_plus") + color: RGB color tuple + operator: Operator ID to trigger (e.g., "bim.toggle_stair_property") + prop_path: Optional property path for lock icons (e.g., "BIMStairProperties.lock") + alpha: Opacity (default 0.8) + **operator_props: Additional operator properties to set + + Returns: + The created gizmo + """ + prefs = tool.Blender.get_addon_preferences() + highlight_color = prefs.decorator_color_selected[:3] + + gz = self.gizmos.new(gizmo_type) + gz.use_draw_scale = False + gz.color = color + gz.color_highlight = highlight_color + gz.alpha = alpha + if prop_path: + gz.prop_path = prop_path + op = gz.target_set_operator(operator) + for key, value in operator_props.items(): + setattr(op, key, value) + return gz + + def create_arc_gizmo( + self, + color: tuple[float, float, float], + operator: str, + prop_path: str | None = None, + alpha: float = 0.5, + **operator_props, + ) -> bpy.types.Gizmo: + """Create an arc gizmo for swing/rotation indicators (e.g., door swing). + + Args: + color: RGB color tuple + operator: Operator ID to trigger (e.g., "bim.toggle_door_swing") + prop_path: Optional property path (e.g., "BIMDoorProperties.door_type") + alpha: Opacity (default 0.5 for arc gizmos) + **operator_props: Additional operator properties to set + + Returns: + The created arc gizmo + """ + return self.create_icon_gizmo("VIEW3D_GT_arc", color, operator, prop_path, alpha, **operator_props) + @classmethod def is_element_type(cls, element) -> bool: raise NotImplementedError("Subclass must implement is_element_type()") @@ -3698,11 +4322,92 @@ class BaseParametricGizmoGroup: return False return True + def setup(self, context: bpy.types.Context) -> None: + """Template method for gizmo setup. + + Subclasses should override setup_element_specific_gizmos() to add + element-specific gizmos (e.g., door swing arcs, stair lock icons). + """ + self.setup_editing_gizmos(context) + self.setup_dimension_gizmos(context) + self.setup_element_specific_gizmos(context) + + def setup_element_specific_gizmos(self, context: bpy.types.Context) -> None: + """Override to add element-specific gizmos. + + Called after setup_editing_gizmos and setup_dimension_gizmos. + Examples: door swing arcs, stair lock/plus/minus icons. + """ + pass + + def refresh(self, context: bpy.types.Context) -> None: + """Template method for gizmo refresh. + + Subclasses should override _refresh_element_specific() for element-specific updates + (e.g., door swing arcs, stair lock icons). + """ + if not self.is_setup_complete(): + return + obj = context.active_object + if not obj: + return + + props = self.get_props(obj) + mw = obj.matrix_world + self.update_editing_gizmos(context, mw, props) + self.update_dimension_gizmos(mw, props) + self._refresh_element_specific(context, mw, props) + + def _refresh_element_specific( + self, context: bpy.types.Context, mw: "Matrix", props # noqa: ARG002 + ) -> None: + """Override for element-specific refresh logic. + + Called after update_editing_gizmos and update_dimension_gizmos. + Examples: door swing gizmos, stair lock/tread/plus/minus gizmos. + """ + pass + + # Subclass should define these class attributes for metadata-driven dispatch + # If not defined, subclass must override get_props() and get_gizmo_prefs() + props_getter: str | None = None # e.g., "get_door_props" + gizmo_pref_name: str | None = None # e.g., "door" + def get_props(self, obj: bpy.types.Object) -> Any: - raise NotImplementedError("Subclass must implement get_props()") + """Get properties for the element. + + Subclass can either: + 1. Define class attribute `props_getter` (e.g., "get_door_props") + 2. Override this method directly + """ + if self.props_getter: + return getattr(tool.Model, self.props_getter)(obj) + raise NotImplementedError("Subclass must define props_getter or override get_props()") + @staticmethod + def get_addon_prefs(): + """Get addon preferences (cached accessor).""" + return tool.Blender.get_addon_preferences() + + def get_decoration_colors(self) -> tuple[tuple[float, float, float], tuple[float, float, float]]: + """Get default and highlight colors from preferences. + + Returns: + Tuple of (default_color, highlight_color) as RGB tuples. + """ + prefs = self.get_addon_prefs() + return prefs.decorations_colour[:3], prefs.decorator_color_selected[:3] def get_gizmo_prefs(self) -> Any: - raise NotImplementedError("Subclass must implement get_gizmo_prefs()") + """Get gizmo preferences for this element type. + + Subclass can either: + 1. Define class attribute `gizmo_pref_name` (e.g., "door") + 2. Override this method directly + """ + if self.gizmo_pref_name: + prefs = self.get_addon_prefs() + return getattr(prefs.gizmos, self.gizmo_pref_name) + raise NotImplementedError("Subclass must define gizmo_pref_name or override get_gizmo_prefs()") def is_setup_complete(self) -> bool: """Check if gizmo setup has been completed. @@ -3809,6 +4514,7 @@ class BaseParametricGizmoGroup: mw: Matrix, position: Vector, axis: tuple[int, int, int], + value: float | None = None, ) -> None: """Set a dimension gizmo's position if visible. @@ -3817,9 +4523,34 @@ class BaseParametricGizmoGroup: mw: Object's world matrix position: Local position as Vector or tuple (x, y, z) axis: Direction axis tuple (e.g., (1, 0, 0) for X) + value: Optional value to check for negative flip. If None, no flip is applied. """ if gz := self.get_dimension_gizmo_if_visible(attr_name): - gz.matrix_basis = mw @ self.compose_gizmo_matrix(position, axis) + self._apply_dimension_matrix(gz, mw, self.compose_gizmo_matrix(position, axis), value) + + def _apply_dimension_matrix( + self, + gizmo: bpy.types.Gizmo, + mw: Matrix, + base_matrix: Matrix, + value: float | None = None, + ) -> None: + """Apply matrix to dimension gizmo, flipping for negative values. + + Consolidates negative value handling in one place. For negative values, + the gizmo is rotated 180° around Z so the dimension arrow points in the + opposite direction while keeping the origin at the same position. + + Args: + gizmo: The dimension gizmo to update + mw: Object's world matrix + base_matrix: Local transformation matrix + value: If negative, applies FLIP_MATRIX rotation + """ + if value is not None and value < 0: + gizmo.matrix_basis = mw @ base_matrix @ self.FLIP_MATRIX + else: + gizmo.matrix_basis = mw @ base_matrix def should_hide_dimension_gizmo( self, gizmo: bpy.types.Gizmo, config: "DimensionGizmoConfig", props, gizmo_prefs @@ -3851,39 +4582,56 @@ class BaseParametricGizmoGroup: return True return False + def _setup_icon_gizmo( + self, + gizmo_type: str, + color: tuple[float, float, float], + operator: str, + highlight_color: tuple[float, float, float] | None = None, + alpha: float = 0.8, + ) -> bpy.types.Gizmo: + """Create and configure an icon gizmo with standard settings. + + Reduces boilerplate in setup_editing_gizmos. + + Args: + gizmo_type: Blender gizmo type identifier (e.g., "VIEW3D_GT_pen") + color: RGB color tuple + operator: Operator to invoke on click + highlight_color: Optional highlight color (defaults to prefs selection color) + alpha: Gizmo alpha (default 0.8) + + Returns: + Configured gizmo instance. + """ + if highlight_color is None: + _, highlight_color = self.get_decoration_colors() + + gizmo = self.gizmos.new(gizmo_type) + gizmo.use_draw_scale = False + gizmo.color = color + gizmo.color_highlight = highlight_color + gizmo.alpha = alpha + gizmo.target_set_operator(operator) + return gizmo + def setup_editing_gizmos(self, context: bpy.types.Context) -> None: - prefs = tool.Blender.get_addon_preferences() - default_color = prefs.decorations_colour[:3] - highlight_color = prefs.decorator_color_selected[:3] + default_color, highlight_color = self.get_decoration_colors() - self.pen_gizmo = self.gizmos.new("VIEW3D_GT_pen") - self.pen_gizmo.use_draw_scale = False - self.pen_gizmo.color = default_color - self.pen_gizmo.color_highlight = highlight_color - self.pen_gizmo.alpha = 0.8 - self.pen_gizmo.target_set_operator(self.enable_editing_operator) - - self.validate_gizmo = self.gizmos.new("VIEW3D_GT_validate") - self.validate_gizmo.use_draw_scale = False - self.validate_gizmo.color = self.COLOR_GREEN - self.validate_gizmo.color_highlight = highlight_color - self.validate_gizmo.alpha = 0.8 - self.validate_gizmo.target_set_operator(self.finish_editing_operator) - - self.cancel_gizmo = self.gizmos.new("VIEW3D_GT_cancel") - self.cancel_gizmo.use_draw_scale = False - self.cancel_gizmo.color = self.COLOR_RED - self.cancel_gizmo.color_highlight = highlight_color - self.cancel_gizmo.alpha = 0.8 - self.cancel_gizmo.target_set_operator(self.cancel_editing_operator) + self.pen_gizmo = self._setup_icon_gizmo( + "VIEW3D_GT_pen", default_color, self.enable_editing_operator, highlight_color + ) + self.validate_gizmo = self._setup_icon_gizmo( + "VIEW3D_GT_validate", self.COLOR_GREEN, self.finish_editing_operator, highlight_color + ) + self.cancel_gizmo = self._setup_icon_gizmo( + "VIEW3D_GT_cancel", self.COLOR_RED, self.cancel_editing_operator, highlight_color + ) if self.cycle_type_operator: - self.cycle_gizmo = self.gizmos.new("VIEW3D_GT_cycle") - self.cycle_gizmo.use_draw_scale = False - self.cycle_gizmo.color = default_color - self.cycle_gizmo.color_highlight = highlight_color - self.cycle_gizmo.alpha = 0.8 - self.cycle_gizmo.target_set_operator(self.cycle_type_operator) + self.cycle_gizmo = self._setup_icon_gizmo( + "VIEW3D_GT_cycle", default_color, self.cycle_type_operator, highlight_color + ) def _make_dimension_getter(self, config: DimensionGizmoConfig): """Create getter closure for dimension gizmo.""" @@ -3973,32 +4721,61 @@ class BaseParametricGizmoGroup: gizmo.hide = False - matrix_method = getattr(self, f"get_dimension_matrix_{config.attr_name}", None) - base_matrix = matrix_method(props) if matrix_method else Matrix.Identity(4) + # Priority: config.matrix_position > get_dimension_matrix_* method > Identity + if config.matrix_position: + position = config.matrix_position(props) + base_matrix = self.compose_gizmo_matrix(position, config.axis) + else: + matrix_method = getattr(self, f"get_dimension_matrix_{config.attr_name}", None) + base_matrix = matrix_method(props) if matrix_method else Matrix.Identity(4) if config.compute_value: value = config.compute_value(props) else: value = getattr(props, config.attr_name, 0.0) - # Handle negative values by flipping the gizmo direction - if value < 0: - # Flip the X axis (dimension direction) for negative values - flip_matrix = Matrix.Scale(-1, 4, Vector((1, 0, 0))) - gizmo.matrix_basis = mw @ base_matrix @ flip_matrix - gizmo.set_dimension_length(abs(value)) - else: - gizmo.matrix_basis = mw @ base_matrix - gizmo.set_dimension_length(value) + # Use consolidated negative value handling + self._apply_dimension_matrix(gizmo, mw, base_matrix, value) + gizmo.show_start_arrow = config.show_start_arrow + gizmo.show_end_arrow = config.show_end_arrow + gizmo.set_dimension_length(value) + + def get_icon_y_extent(self, props) -> tuple[float, float]: + """Get Y extents for icon positioning based on element geometry. + + Subclasses should override this to return the furthest geometry extents + in the +Y and -Y directions from the element origin. + + Returns: + Tuple of (positive_y_extent, negative_y_extent). + Both values should be positive (absolute distances). + The base implementation returns (0, 0). + + Example for a door: + return (lining_offset + lining_depth + 2*OFFSET, 2*OFFSET) + """ + return (0.0, 0.0) def get_icon_y_offset(self, context: bpy.types.Context, mw: Matrix) -> float: """Get Y offset for icons based on view direction. - Returns negative offset when viewing from -Y side (icons move to -Y), - positive offset when viewing from +Y side (icons move to +Y). - Subclasses can override to customize behavior. + Uses get_icon_y_extent() to determine how far to offset icons based on + the camera viewing direction. Icons are positioned beyond the geometry + on the side the camera is viewing from. + + Subclasses typically only need to override get_icon_y_extent(). """ - return 0.0 + obj = context.active_object + if not obj: + return self.ICON_Y_OFFSET + + props = self.get_props(obj) + positive_extent, negative_extent = self.get_icon_y_extent(props) + + viewing_from_negative_y, _ = self.get_local_view_direction(context, mw) + if viewing_from_negative_y: + return -negative_extent + return positive_extent def update_editing_gizmos(self, context: bpy.types.Context, mw: Matrix, props) -> None: """Update editing icon gizmo positions to billboard toward camera.""" diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index bf2c401f16..47ef5a0343 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -161,8 +161,7 @@ classes = ( stair.FinishEditingStair, stair.EnableEditingStair, stair.RemoveStair, - stair.ToggleStairTotalLengthLock, - stair.ToggleStairCustomTreadLock, + stair.ToggleStairProperty, stair.AdjustStairTreads, stair.SetStairTreads, stair.CycleStairType, diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index 6705b59570..ee9230b016 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -29,7 +29,6 @@ import ifcopenshell.util.representation import ifcopenshell.util.schema import ifcopenshell.util.unit import bonsai.tool as tool -import bonsai.core.geometry import bonsai.core.geometry as core import bonsai.core.root from bonsai.bim.module.model.window import create_bm_window, create_bm_box @@ -41,10 +40,16 @@ from mathutils import Vector, Matrix import json import collections import collections.abc -from typing import get_args +from typing import get_args, TYPE_CHECKING + +if TYPE_CHECKING: + from bonsai.bim.module.model.prop import BIMDoorProperties V_ = tool.Blender.V_ +# Shorthand for gizmo offset constants used in DimensionGizmoConfig lambdas +_G = gizmo.BaseParametricGizmoGroup + def update_door_modifier_representation(obj: bpy.types.Object) -> None: props = tool.Model.get_door_props(obj) @@ -142,7 +147,7 @@ def update_door_modifier_representation(obj: bpy.types.Object) -> None: plan_representation = ifcopenshell.api.geometry.add_door_representation(ifc_file, **representation_data) tool.Model.replace_object_ifc_representation(plan_annotation, obj, plan_representation) - bonsai.core.geometry.switch_representation( + core.switch_representation( tool.Ifc, tool.Geometry, obj=obj, @@ -512,7 +517,7 @@ class BIM_OT_add_door(bpy.types.Operator, tool.Ifc.Operator): element = bonsai.core.root.assign_class( tool.Ifc, tool.Collector, tool.Root, obj=obj, ifc_class="IfcDoor", should_add_representation=False ) - bonsai.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj) + core.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj) if tool.Ifc.get_schema() != "IFC2X3": element.PredefinedType = "DOOR" @@ -556,7 +561,7 @@ class AddDoor(bpy.types.Operator, tool.Ifc.Operator): ) update_door_modifier_representation(obj) - def _execute(self, context: bpy.types.Context) -> set[str]: + def _execute(self, context: bpy.types.Context) -> set[str]: # noqa: ARG002 for obj in tool.Blender.get_selected_objects(): if not tool.Blender.Modifier.is_eligible_for_door_modifier(obj): continue @@ -584,7 +589,7 @@ class CancelEditingDoor(bpy.types.Operator, tool.Ifc.Operator): props.set_props_kwargs_from_ifc_data(data) body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") - bonsai.core.geometry.switch_representation( + core.switch_representation( tool.Ifc, tool.Geometry, obj=obj, @@ -593,7 +598,7 @@ class CancelEditingDoor(bpy.types.Operator, tool.Ifc.Operator): props.is_editing = False - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: # noqa: ARG002 for obj in tool.Blender.get_selected_objects(): self.cancel_editing_door_on_object(obj) return {"FINISHED"} @@ -605,7 +610,7 @@ class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Apply changes and finish editing door parameters" bl_options = {"REGISTER", "UNDO"} - def finish_editing_door_on_object(self, obj): + def finish_editing_door_on_object(self, obj: bpy.types.Object) -> None: element = tool.Ifc.get_entity(obj) assert element if not tool.Blender.Modifier.is_door(element): @@ -630,7 +635,7 @@ class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator): door_data = tool.Ifc.get().createIfcText(json.dumps(door_data, default=list)) ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Data": door_data}) - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: # noqa: ARG002 for obj in tool.Blender.get_selected_objects(): self.finish_editing_door_on_object(obj) return {"FINISHED"} @@ -642,7 +647,7 @@ class EnableEditingDoor(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Enter edit mode to modify door parameters interactively" bl_options = {"REGISTER", "UNDO"} - def edit_door_on_obj(self, obj): + def edit_door_on_obj(self, obj: bpy.types.Object) -> None: element = tool.Ifc.get_entity(obj) assert element if not tool.Blender.Modifier.is_door(element): @@ -657,7 +662,7 @@ class EnableEditingDoor(bpy.types.Operator, tool.Ifc.Operator): props.set_props_kwargs_from_ifc_data(data) props.is_editing = True - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: # noqa: ARG002 for obj in tool.Blender.get_selected_objects(): self.edit_door_on_obj(obj) return {"FINISHED"} @@ -668,7 +673,7 @@ class RemoveDoor(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Remove Door on Selected Objects" bl_options = {"REGISTER", "UNDO"} - def remove_door_on_object(self, obj): + def remove_door_on_object(self, obj: bpy.types.Object) -> None: element = tool.Ifc.get_entity(obj) assert element if not tool.Blender.Modifier.is_door(element): @@ -679,7 +684,7 @@ class RemoveDoor(bpy.types.Operator, tool.Ifc.Operator): pset = tool.Pset.get_element_pset(element, "BBIM_Door") ifcopenshell.api.pset.remove_pset(tool.Ifc.get(), product=element, pset=pset) - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: # noqa: ARG002 for obj in tool.Blender.get_selected_objects(): self.remove_door_on_object(obj) return {"FINISHED"} @@ -702,7 +707,7 @@ class ToggleDoorSwing(bpy.types.Operator, tool.Ifc.Operator): name="Skip Direction Change", default=False, options={"HIDDEN", "SKIP_SAVE"} ) - def invoke(self, context, event): + def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set[str]: self.skip_direction_change = event.shift return self.execute(context) @@ -719,7 +724,7 @@ class ToggleDoorSwing(bpy.types.Operator, tool.Ifc.Operator): return True return False - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: # noqa: ARG002 obj = tool.Blender.get_active_object() if not obj: return {"CANCELLED"} @@ -742,36 +747,20 @@ class ToggleDoorSwing(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} -class CycleDoorType(bpy.types.Operator, tool.Ifc.Operator): +class CycleDoorType(bpy.types.Operator, tool.Ifc.Operator, gizmo.CycleTypeMixin): """Cycle through available door types. Shift+click to cycle in reverse.""" bl_idname = "bim.cycle_door_type" bl_label = "Cycle Door Type" bl_options = {"REGISTER", "UNDO"} - reverse: bpy.props.BoolProperty(name="Reverse", default=False, options={"HIDDEN", "SKIP_SAVE"}) + element_checker = "is_door" + props_getter = "get_door_props" + type_literal = tool.Model.DoorType + type_attr = "door_type" - def invoke(self, context, event): - self.reverse = event.shift - return self.execute(context) - - def _execute(self, context): - obj = tool.Blender.get_active_object() - if not obj: - return {"CANCELLED"} - - element = tool.Ifc.get_entity(obj) - if not element or not tool.Blender.Modifier.is_door(element): - return {"CANCELLED"} - - props = tool.Model.get_door_props(obj) - door_types = get_args(tool.Model.DoorType) - current_index = door_types.index(props.door_type) if props.door_type in door_types else 0 - direction = -1 if self.reverse else 1 - next_index = (current_index + direction) % len(door_types) - props.door_type = door_types[next_index] - - return {"FINISHED"} + def _execute(self, context: bpy.types.Context) -> set[str]: + return self._cycle_type(context) class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): @@ -786,56 +775,110 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): cancel_editing_operator = "bim.cancel_editing_door" cycle_type_operator = "bim.cycle_door_type" + # Declarative dimension gizmo configuration with visibility and position + # matrix_position lambdas replace the get_dimension_matrix_* methods dimension_gizmo_props = [ - DimensionGizmoConfig(attr_name="overall_width", axis=(1, 0, 0), min_value=0.01, text_offset_sign=-1), - DimensionGizmoConfig(attr_name="overall_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start"), - DimensionGizmoConfig(attr_name="threshold_thickness", axis=(0, 0, 1)), - DimensionGizmoConfig(attr_name="threshold_depth", axis=(0, 1, 0)), - DimensionGizmoConfig(attr_name="threshold_offset", axis=(0, 1, 0)), - DimensionGizmoConfig(attr_name="lining_offset", axis=(0, 1, 0)), - DimensionGizmoConfig(attr_name="lining_depth", axis=(0, 1, 0)), - DimensionGizmoConfig(attr_name="lining_thickness", axis=(-1, 0, 0)), - DimensionGizmoConfig(attr_name="transom_offset", axis=(0, 0, 1)), - DimensionGizmoConfig(attr_name="transom_thickness", axis=(0, 0, 1)), - DimensionGizmoConfig(attr_name="casing_thickness", axis=(-1, 0, 0)), - DimensionGizmoConfig(attr_name="casing_depth", axis=(0, 1, 0)), + DimensionGizmoConfig( + attr_name="overall_width", axis=(1, 0, 0), min_value=0.01, text_offset_sign=-1, + # Position set dynamically in _update_dimension_gizmo_positions based on view + ), + DimensionGizmoConfig( + attr_name="overall_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start", + # Position set dynamically in _update_dimension_gizmo_positions based on view + ), + DimensionGizmoConfig( + attr_name="threshold_thickness", axis=(0, 0, 1), + matrix_position=lambda p: V_(p.overall_width / 2, p.threshold_offset + p.threshold_depth, 0), + ), + DimensionGizmoConfig( + attr_name="threshold_depth", axis=(0, 1, 0), + visibility_condition=lambda p: p.has_threshold_depth(), + matrix_position=lambda p: V_(p.overall_width / 2, p.threshold_offset, p.threshold_thickness), + ), + DimensionGizmoConfig( + attr_name="threshold_offset", axis=(0, 1, 0), + matrix_position=lambda p: V_(p.overall_width / 2 - _G.GIZMO_STACK_OFFSET, 0, p.threshold_thickness), + ), + DimensionGizmoConfig( + attr_name="lining_offset", axis=(0, 1, 0), min_value=-10.0, + # Position set dynamically in _update_dimension_gizmo_positions based on view + ), + DimensionGizmoConfig( + attr_name="lining_depth", axis=(0, 1, 0), + matrix_position=lambda p: V_(p.overall_width, p.lining_offset, p.overall_height), + ), + DimensionGizmoConfig( + attr_name="lining_thickness", axis=(-1, 0, 0), + matrix_position=lambda p: V_(p.overall_width, p.lining_depth / 2, p.overall_height / 2), + ), + DimensionGizmoConfig( + attr_name="transom_offset", axis=(0, 0, 1), + visibility_condition=lambda p: p.has_transom(), + matrix_position=lambda p: V_(p.overall_width / 2, p.lining_offset, 0), + ), + DimensionGizmoConfig( + attr_name="transom_thickness", axis=(0, 0, 1), + matrix_position=lambda p: V_(p.overall_width / 2, p.lining_offset, p.transom_offset), + ), + DimensionGizmoConfig( + attr_name="casing_thickness", axis=(-1, 0, 0), + visibility_condition=lambda p: p.has_casing(), + matrix_position=lambda p: V_( + p.lining_thickness, + p.lining_depth + p.lining_offset + p.casing_depth / 2, + p.overall_height / 2 + ), + ), + DimensionGizmoConfig( + attr_name="casing_depth", axis=(0, 1, 0), + visibility_condition=lambda p: p.has_casing_depth(), + matrix_position=lambda p: V_( + p.lining_thickness - p.casing_thickness, + p.lining_depth + p.lining_offset, + p.overall_height / 2 + ), + ), + DimensionGizmoConfig( + attr_name="panel_depth", axis=(0, 1, 0), + matrix_position=lambda p: V_( + p.lining_to_panel_offset_x + p.overall_width * p.panel_width_ratio / 2, + p.lining_offset + p.lining_to_panel_offset_y, + p.threshold_thickness + p.get_panel_center_z() + ), + ), + DimensionGizmoConfig( + attr_name="frame_thickness", axis=(-1, 0, 0), + visibility_condition=lambda p: p.has_transom(), + matrix_position=lambda p: V_( + p.overall_width, + p.lining_offset + p.lining_to_panel_offset_y + p.frame_depth / 2, + p.get_transom_window_center_z() + ), + ), + DimensionGizmoConfig( + attr_name="frame_depth", axis=(0, 1, 0), + visibility_condition=lambda p: p.has_transom(), + matrix_position=lambda p: V_( + p.overall_width - p.frame_thickness, + p.lining_offset + p.lining_to_panel_offset_y, + p.get_transom_window_center_z() + ), + ), ] + props_getter = "get_door_props" + gizmo_pref_name = "door" + @classmethod - def is_element_type(cls, element) -> bool: + def is_element_type(cls, element: ifcopenshell.entity_instance) -> bool: return tool.Blender.Modifier.is_door(element) - def get_props(self, obj: bpy.types.Object): - return tool.Model.get_door_props(obj) + def get_icon_y_extent(self, props: "BIMDoorProperties") -> tuple[float, float]: + """Get Y extents for door icon positioning. - def get_gizmo_prefs(self): - prefs = tool.Blender.get_addon_preferences() - return prefs.gizmos.door - - def should_hide_gizmo(self, attr_name: str, props) -> bool: - """Door-specific visibility rules for gizmos.""" - if not props.is_editing: - return True - if attr_name == "threshold_depth" and props.threshold_thickness == 0.0: - return True - if attr_name == "transom_offset" and props.transom_thickness == 0.0: - return True - if attr_name == "casing_thickness" and props.lining_offset != 0.0: - return True - if attr_name == "casing_depth" and (props.lining_offset != 0.0 or props.casing_thickness == 0.0): - return True - return False - - def get_icon_y_offset(self, context: bpy.types.Context, mw: Matrix) -> float: - """Get Y offset for icons based on view direction. - - Positions icons further than the furthest geometry: - max(threshold_offset + threshold_depth, lining_offset + lining_depth) + 2 * GIZMO_OFFSET + Door geometry extends in +Y direction from lining/threshold. + Icons are positioned beyond max(threshold_offset + depth, lining_offset + depth). """ - obj = context.active_object - if not obj: - return self.ICON_Y_OFFSET - props = self.get_props(obj) furthest_y = ( max( props.threshold_offset + props.threshold_depth, @@ -843,154 +886,53 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): ) + 2 * self.GIZMO_OFFSET ) + return (furthest_y, furthest_y) - viewing_from_negative_y, _ = self.get_local_view_direction(context, mw) - if viewing_from_negative_y: - return -furthest_y - return furthest_y - - def get_dimension_matrix_threshold_thickness(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width / 2, props.threshold_offset + props.threshold_depth, 0), (0, 0, 1) - ) - - def get_dimension_matrix_threshold_depth(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width / 2, props.threshold_offset, props.threshold_thickness), (0, 1, 0) - ) - - def get_dimension_matrix_threshold_offset(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width / 2 - 0.1, 0, props.threshold_thickness), (0, 1, 0) - ) - - def get_dimension_matrix_lining_offset(self, props) -> Matrix: - return self.compose_gizmo_matrix(V_(0, 0, 0), (0, 1, 0)) - - def get_dimension_matrix_lining_depth(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width, props.lining_offset, props.overall_height), (0, 1, 0) - ) - - def get_dimension_matrix_lining_thickness(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width, props.lining_depth / 2, props.overall_height / 2), (-1, 0, 0) - ) - - def get_dimension_matrix_transom_offset(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width / 2, props.lining_offset, 0), (0, 0, 1) - ) - - def get_dimension_matrix_transom_thickness(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width / 2, props.lining_offset, props.transom_offset), (0, 0, 1) - ) - - @staticmethod - def _get_casing_gizmo_base_position(props) -> tuple[float, float, float]: - """Get common base position for casing gizmos.""" - x = props.lining_thickness - y_base = props.lining_depth + props.lining_offset - z = props.overall_height / 2 - return x, y_base, z - - def get_dimension_matrix_casing_thickness(self, props) -> Matrix: - x, y_base, z = self._get_casing_gizmo_base_position(props) - return self.compose_gizmo_matrix(V_(x, y_base + props.casing_depth / 2, z), (-1, 0, 0)) - - def get_dimension_matrix_casing_depth(self, props) -> Matrix: - x, y_base, z = self._get_casing_gizmo_base_position(props) - return self.compose_gizmo_matrix(V_(x - props.casing_thickness, y_base, z), (0, 1, 0)) - - def get_dimension_matrix_overall_width(self, props) -> Matrix: - """Position width dimension below the door.""" - return self.compose_gizmo_matrix( - V_(0, props.lining_offset - self.GIZMO_OFFSET, -self.GIZMO_OFFSET), (1, 0, 0) - ) - - def get_dimension_matrix_overall_height(self, props) -> Matrix: - """Position height dimension to the side of the door.""" - casing_offset = props.casing_thickness if props.lining_offset == 0.0 else 0.0 - return self.compose_gizmo_matrix( - V_(props.overall_width + casing_offset + self.GIZMO_OFFSET, props.lining_offset - self.GIZMO_OFFSET, 0), - (0, 0, 1), - ) - - def setup(self, context: bpy.types.Context) -> None: - self.setup_editing_gizmos(context) - self.setup_dimension_gizmos(context) + def setup_element_specific_gizmos(self, context: bpy.types.Context) -> None: + """Create door-specific swing arc gizmos.""" prefs = tool.Blender.get_addon_preferences() - highlight_color = prefs.decorator_color_selected[:3] inactive_color = prefs.decorator_color_background[:3] special_color = prefs.decorator_color_special[:3] - self.gizmo_door_type = self.gizmos.new("VIEW3D_GT_arc") - self.gizmo_door_type.use_draw_scale = False - self.gizmo_door_type.color = special_color - self.gizmo_door_type.alpha = 0.5 - self.gizmo_door_type.color_highlight = highlight_color - self.gizmo_door_type.prop_path = "BIMDoorProperties.door_type" - op = self.gizmo_door_type.target_set_operator("bim.toggle_door_swing") - op.flip_geometry = False + self.gizmo_door_type = self.create_arc_gizmo( + special_color, "bim.toggle_door_swing", + prop_path="BIMDoorProperties.door_type", + flip_geometry=False, + ) + self.gizmo_flip_arc = self.create_arc_gizmo( + inactive_color, "bim.toggle_door_swing", + prop_path="BIMDoorProperties.door_type", + flip_geometry=True, + flip_local_axes="XY", + ) - self.gizmo_flip_arc = self.gizmos.new("VIEW3D_GT_arc") - self.gizmo_flip_arc.use_draw_scale = False - self.gizmo_flip_arc.color = inactive_color - self.gizmo_flip_arc.alpha = 0.5 - self.gizmo_flip_arc.color_highlight = highlight_color - self.gizmo_flip_arc.prop_path = "BIMDoorProperties.door_type" - op = self.gizmo_flip_arc.target_set_operator("bim.toggle_door_swing") - op.flip_geometry = True - op.flip_local_axes = "XY" - - def refresh(self, context: bpy.types.Context) -> None: - if not self.is_setup_complete(): - return - obj = context.active_object - if not obj: - return - - props = self.get_props(obj) - mw = obj.matrix_world + def _refresh_element_specific( + self, context: bpy.types.Context, mw: Matrix, props: "BIMDoorProperties" # noqa: ARG002 + ) -> None: + """Update door-specific swing arc gizmos.""" self.update_swing_gizmos(mw, props) - self.update_editing_gizmos(context, mw, props) - self.update_dimension_gizmos(mw, props) - def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props) -> None: + def get_casing_offset(self, props: "BIMDoorProperties") -> float: + """Override to return casing_thickness when lining_offset is 0.""" + return props.get_casing_offset() + + def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props: "BIMDoorProperties") -> None: """Update dimension gizmo positions based on camera view direction.""" - viewing_from_negative_y, viewing_from_negative_x = self.get_local_view_direction(context, mw) - y_pos = self.get_lining_y_position_for_view(props, viewing_from_negative_y) + self._update_view_dependent_dimensions(context, mw, props) - self.set_dimension_gizmo_position("overall_width", mw, V_(0, y_pos, -self.GIZMO_OFFSET), (1, 0, 0)) - - casing_offset = props.casing_thickness if props.lining_offset == 0.0 else 0.0 - if viewing_from_negative_x: - x_pos = -casing_offset - self.GIZMO_OFFSET - else: - x_pos = props.overall_width + casing_offset + self.GIZMO_OFFSET - self.set_dimension_gizmo_position("overall_height", mw, V_(x_pos, y_pos, 0), (0, 0, 1)) - - def update_swing_gizmos(self, mw: Matrix, props) -> None: + def update_swing_gizmos(self, mw: Matrix, props: "BIMDoorProperties") -> None: """Update swing gizmo position and color based on editing state.""" - door_type_hidden_by_modal = self.is_gizmo_hidden_by_modal(self.gizmo_door_type) - flip_arc_hidden_by_modal = self.is_gizmo_hidden_by_modal(self.gizmo_flip_arc) + prefs = tool.Blender.get_addon_preferences() + door_gizmo_prefs = prefs.gizmos.door - if door_type_hidden_by_modal: - self.gizmo_door_type.hide = True - else: - prefs = tool.Blender.get_addon_preferences() - door_gizmo_prefs = prefs.gizmos.door - self.gizmo_door_type.hide = not props.is_editing or not door_gizmo_prefs.swing_arc + door_type_visible = self.update_gizmo_visibility( + self.gizmo_door_type, props.is_editing, door_gizmo_prefs.swing_arc + ) + flip_arc_visible = self.update_gizmo_visibility( + self.gizmo_flip_arc, props.is_editing, door_gizmo_prefs.flip_arc + ) - if flip_arc_hidden_by_modal: - self.gizmo_flip_arc.hide = True - else: - prefs = tool.Blender.get_addon_preferences() - door_gizmo_prefs = prefs.gizmos.door - self.gizmo_flip_arc.hide = not props.is_editing or not door_gizmo_prefs.flip_arc - - if self.gizmo_door_type.hide and self.gizmo_flip_arc.hide: + if not door_type_visible and not flip_arc_visible: return swing_x_offset = props.overall_width if "RIGHT" in props.door_type else 0.0 @@ -998,11 +940,10 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): props.overall_width, 4 ) - prefs = tool.Blender.get_addon_preferences() - if not self.gizmo_door_type.hide: + if door_type_visible: self.gizmo_door_type.matrix_basis = mw @ base_swing_transform self.gizmo_door_type.color = prefs.decorations_colour[:3] - if not self.gizmo_flip_arc.hide: + if flip_arc_visible: mirror_y = Matrix.Scale(-1, 4, (0, 1, 0)) self.gizmo_flip_arc.matrix_basis = mw @ base_swing_transform @ mirror_y diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 681fc4d167..0689d4a100 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -29,7 +29,8 @@ from bonsai.bim.module.model.decorator import WallAxisDecorator, SlabDirectionDe from bonsai.bim.module.model.door import update_door_modifier_bmesh from bonsai.bim.module.model.window import update_window_modifier_bmesh from bonsai.bim.module.drawing.decoration import CutDecorator -from typing import TYPE_CHECKING, Literal, get_args, Union, get_args, Any, Optional +from typing import TYPE_CHECKING, Literal, get_args, Union, Any, Optional, Callable +from mathutils import Vector def get_ifc_class(self: "BIMModelProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: @@ -152,6 +153,53 @@ def update_window(self: "BIMWindowProperties", context: bpy.types.Context) -> No update_window_modifier_bmesh(context) +# Lazy-loaded module references for parametric element updates +# Using module-level lazy loading avoids circular imports and repeated import overhead +_updater_cache: dict[str, Callable] = {} + + +def _get_updater(module_name: str, func_name: str) -> Callable: + """Lazy-load an updater function to avoid circular imports. + + Args: + module_name: Module name within bonsai.bim.module.model (e.g., "stair") + func_name: Function name to import (e.g., "regenerate_stair_mesh") + + Returns: + The imported function, cached for subsequent calls. + """ + cache_key = f"{module_name}.{func_name}" + if cache_key not in _updater_cache: + import importlib + module = importlib.import_module(f"bonsai.bim.module.model.{module_name}") + _updater_cache[cache_key] = getattr(module, func_name) + return _updater_cache[cache_key] + + +def update_stair(self: "BIMStairProperties", context: bpy.types.Context) -> None: + """Regenerate stair mesh when property changes.""" + obj = context.active_object + if obj and self.is_editing: + _get_updater("stair", "regenerate_stair_mesh")(obj) + + +def update_railing(self: "BIMRailingProperties", context: bpy.types.Context) -> None: + """Regenerate railing mesh when property changes.""" + if self.is_editing: + # Only FRAMELESS_PANEL can update live via bmesh. + # WALL_MOUNTED_HANDRAIL geometry is generated from IFC representation, + # so it only updates on "Finish Editing" to avoid modifying IFC during preview. + if self.railing_type == "FRAMELESS_PANEL": + _get_updater("railing", "update_railing_modifier_bmesh")(context) + + +def update_roof(self: "BIMRoofProperties", context: bpy.types.Context) -> None: + """Regenerate roof mesh when property changes.""" + obj = context.active_object + if obj and self.is_editing: + _get_updater("roof", "update_roof_modifier_bmesh")(obj) + + class BIMModelProperties(PropertyGroup): ifc_class: bpy.props.EnumProperty(items=get_ifc_class, name="Construction Class", update=update_ifc_class) relating_type_id: bpy.props.EnumProperty( @@ -353,153 +401,65 @@ class BIMArrayProperties(PropertyGroup): def update_total_length_target(self: "BIMStairProperties", context: bpy.types.Context) -> None: - """Update tread_run when total_length_target changes""" - # Calculate available length for default treads - available_length = self.total_length_target - n_default_treads = self.number_of_treads + 1 # number of risers - - # Subtract custom first tread if not locked and not zero - if not self.custom_tread_lock and self.custom_first_last_tread_run[0] != 0: - available_length -= self.custom_first_last_tread_run[0] - n_default_treads -= 1 - - # Subtract custom last tread if not locked and not zero - if not self.custom_tread_lock and self.custom_first_last_tread_run[1] != 0: - available_length -= self.custom_first_last_tread_run[1] - n_default_treads -= 1 - - # Calculate tread_run for remaining treads - if n_default_treads > 0: - self["tread_run"] = available_length / n_default_treads - else: - # All treads are custom, just use target length - self["tread_run"] = self.total_length_target / (self.number_of_treads + 1) + """Update tread_run when total_length_target changes.""" + self.update_tread_run_from_length() + # Must call update_stair here because self["prop"] bypasses property update callbacks + update_stair(self, context) def update_tread_run(self: "BIMStairProperties", context: bpy.types.Context) -> None: - """Update either number_of_treads or total_length_target when tread_run changes""" + """Update either number_of_treads or total_length_target when tread_run changes.""" if self.total_length_lock: - # Calculate how much length custom treads take up - custom_length = 0 - n_custom_treads = 0 - - if not self.custom_tread_lock: - if self.custom_first_last_tread_run[0] != 0: - custom_length += self.custom_first_last_tread_run[0] - n_custom_treads += 1 - if self.custom_first_last_tread_run[1] != 0: - custom_length += self.custom_first_last_tread_run[1] - n_custom_treads += 1 - # Calculate how many default treads fit in remaining space + custom_length, custom_count = self.get_custom_tread_info() available_length = self.total_length_target - custom_length if self.tread_run > 0: n_default_treads = available_length / self.tread_run - total_treads = n_default_treads + n_custom_treads # number_of_treads = number_of_risers - 1 - self["number_of_treads"] = int(total_treads - 1) + self["number_of_treads"] = int(n_default_treads + custom_count - 1) else: - # Calculate total length from current settings - n_default_treads = self.number_of_treads + 1 - total_length = 0 - - if not self.custom_tread_lock: - if self.custom_first_last_tread_run[0] != 0: - total_length += self.custom_first_last_tread_run[0] - n_default_treads -= 1 - if self.custom_first_last_tread_run[1] != 0: - total_length += self.custom_first_last_tread_run[1] - n_default_treads -= 1 - - total_length += n_default_treads * self.tread_run - self["total_length_target"] = total_length + self.update_total_length_from_treads() + # Must call update_stair here because self["prop"] bypasses property update callbacks + update_stair(self, context) def update_number_of_treads(self: "BIMStairProperties", context: bpy.types.Context) -> None: - """Update either tread_run or total_length_target when number_of_treads changes""" + """Update either tread_run or total_length_target when number_of_treads changes.""" if self.total_length_lock: - # Calculate available length for default treads - available_length = self.total_length_target - n_default_treads = self.number_of_treads + 1 - - if not self.custom_tread_lock: - if self.custom_first_last_tread_run[0] != 0: - available_length -= self.custom_first_last_tread_run[0] - n_default_treads -= 1 - if self.custom_first_last_tread_run[1] != 0: - available_length -= self.custom_first_last_tread_run[1] - n_default_treads -= 1 - - if n_default_treads > 0: - self["tread_run"] = available_length / n_default_treads - else: - self["tread_run"] = self.total_length_target / (self.number_of_treads + 1) + self.update_tread_run_from_length() else: - # Calculate total length from current settings - n_default_treads = self.number_of_treads + 1 - total_length = 0 - - if not self.custom_tread_lock: - if self.custom_first_last_tread_run[0] != 0: - total_length += self.custom_first_last_tread_run[0] - n_default_treads -= 1 - if self.custom_first_last_tread_run[1] != 0: - total_length += self.custom_first_last_tread_run[1] - n_default_treads -= 1 - - total_length += n_default_treads * self.tread_run - self["total_length_target"] = total_length + self.update_total_length_from_treads() + # Must call update_stair here because self["prop"] bypasses property update callbacks + update_stair(self, context) def update_custom_first_last_tread_run(self: "BIMStairProperties", context: bpy.types.Context) -> None: - """Update tread_run or total_length when custom treads change""" + """Update tread_run or total_length when custom treads change.""" if self.total_length_lock: - # Recalculate tread_run to maintain total length - available_length = self.total_length_target - n_default_treads = self.number_of_treads + 1 - - if not self.custom_tread_lock: - if self.custom_first_last_tread_run[0] != 0: - available_length -= self.custom_first_last_tread_run[0] - n_default_treads -= 1 - if self.custom_first_last_tread_run[1] != 0: - available_length -= self.custom_first_last_tread_run[1] - n_default_treads -= 1 - - if n_default_treads > 0: - self["tread_run"] = available_length / n_default_treads + self.update_tread_run_from_length() else: - # Recalculate total length - n_default_treads = self.number_of_treads + 1 - total_length = 0 - - if not self.custom_tread_lock: - if self.custom_first_last_tread_run[0] != 0: - total_length += self.custom_first_last_tread_run[0] - n_default_treads -= 1 - if self.custom_first_last_tread_run[1] != 0: - total_length += self.custom_first_last_tread_run[1] - n_default_treads -= 1 - - total_length += n_default_treads * self.tread_run - self["total_length_target"] = total_length + self.update_total_length_from_treads() + # Must call update_stair here because self["prop"] bypasses property update callbacks + update_stair(self, context) class BIMStairProperties(PropertyGroup): def validate_nosing_value(self, context: bpy.types.Context) -> None: if self.stair_type != "WOOD/STEEL" and self.nosing_length < 0: self["nosing_length"] = 0 + update_stair(self, context) def update_custom_tread_lock(self, context: bpy.types.Context) -> None: """When lock is enabled, sync custom treads with tread_run""" if self.custom_tread_lock: self["custom_first_last_tread_run"] = (self.tread_run, self.tread_run) + update_stair(self, context) non_si_units_props = ("is_editing", "number_of_treads", "has_top_nib", "stair_type", "custom_tread_lock") is_editing: bpy.props.BoolProperty(default=False) - width: bpy.props.FloatProperty(name="Width", default=1.2, min=0.01, subtype="DISTANCE") - height: bpy.props.FloatProperty(name="Height", default=1.0, min=0.01, subtype="DISTANCE") + width: bpy.props.FloatProperty(name="Width", default=1.2, min=0.01, subtype="DISTANCE", update=update_stair) + height: bpy.props.FloatProperty(name="Height", default=1.0, min=0.01, subtype="DISTANCE", update=update_stair) number_of_treads: bpy.props.IntProperty( name="Number of Treads", default=6, soft_min=1, min=0, update=update_number_of_treads ) @@ -516,13 +476,13 @@ class BIMStairProperties(PropertyGroup): name="Lock Total Length", description="Lock Total Length when changing number of treads or tread run", ) - tread_depth: bpy.props.FloatProperty(name="Tread Depth", default=0.25, min=0.01, subtype="DISTANCE") + tread_depth: bpy.props.FloatProperty(name="Tread Depth", default=0.25, min=0.01, subtype="DISTANCE", update=update_stair) tread_run: bpy.props.FloatProperty( name="Tread Run", default=0.3, min=0.01, subtype="DISTANCE", update=update_tread_run ) - base_slab_depth: bpy.props.FloatProperty(name="Base Slab Depth", default=0.25, min=0, subtype="DISTANCE") - top_slab_depth: bpy.props.FloatProperty(name="Top Slab Depth", default=0.25, min=0, subtype="DISTANCE") - has_top_nib: bpy.props.BoolProperty(name="Has Top Nib", default=True) + base_slab_depth: bpy.props.FloatProperty(name="Base Slab Depth", default=0.25, min=0, subtype="DISTANCE", update=update_stair) + top_slab_depth: bpy.props.FloatProperty(name="Top Slab Depth", default=0.25, min=0, subtype="DISTANCE", update=update_stair) + has_top_nib: bpy.props.BoolProperty(name="Has Top Nib", default=True, update=update_stair) stair_type: bpy.props.EnumProperty( name="Stair Type", items=[(i, i.replace("/", " / ").title(), "") for i in get_args(tool.Model.StairType)], @@ -555,7 +515,7 @@ class BIMStairProperties(PropertyGroup): 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" + name="Nosing Depth", description="Depth of the tread's nosing", min=0, default=0, unit="LENGTH", update=update_stair ) if TYPE_CHECKING: @@ -659,6 +619,100 @@ class BIMStairProperties(PropertyGroup): continue setattr(target_props, prop_name, prop_value) + def is_concrete_stair(self) -> bool: + return self.stair_type == "CONCRETE" + + def has_nosing(self) -> bool: + return self.nosing_length != 0.0 and self.stair_type != "WOOD/STEEL" + + def has_custom_treads(self) -> bool: + return not self.custom_tread_lock + + def has_tread_run_gizmo(self) -> bool: + return self.custom_tread_lock or self.number_of_treads > 2 + + def has_tread_depth(self) -> bool: + return self.stair_type != "GENERIC" + + def get_riser_height(self) -> float: + """Compute the riser height from total height and number of treads.""" + return self.height / (self.number_of_treads + 1) + + def set_riser_height(self, value: float) -> None: + """Apply riser height by adjusting the total stair height.""" + self.height = max(0.01, value) * (self.number_of_treads + 1) + + def get_total_run(self) -> float: + """Calculate the total horizontal run of the stair. + + Takes into account custom first/last tread runs when custom_tread_lock is False. + """ + number_of_rises = self.number_of_treads + 1 + total_run = 0.0 + default_rises = number_of_rises + + if not self.custom_tread_lock: + if self.custom_first_last_tread_run[0] is not None: # May be 0 though + default_rises -= 1 + total_run += self.custom_first_last_tread_run[0] + if self.custom_first_last_tread_run[1] is not None: # May be 0 though + default_rises -= 1 + total_run += self.custom_first_last_tread_run[1] + + total_run += self.tread_run * default_rises + return total_run + + def get_custom_tread_run(self, index: int) -> float: + """Get custom tread run value for first (0) or last (1) tread.""" + return self.custom_first_last_tread_run[index] + + def set_custom_tread_run(self, index: int, value: float) -> None: + """Set custom tread run value for first (0) or last (1) tread.""" + current = self.custom_first_last_tread_run + if index == 0: + self.custom_first_last_tread_run = (max(0.01, value), current[1]) + else: + self.custom_first_last_tread_run = (current[0], max(0.01, value)) + + def get_custom_tread_info(self) -> tuple[float, int]: + """Calculate total custom tread length and count. + + Returns: + Tuple of (custom_length, custom_count) + """ + custom_length = 0.0 + custom_count = 0 + if not self.custom_tread_lock: + if self.custom_first_last_tread_run[0] != 0: + custom_length += self.custom_first_last_tread_run[0] + custom_count += 1 + if self.custom_first_last_tread_run[1] != 0: + custom_length += self.custom_first_last_tread_run[1] + custom_count += 1 + return custom_length, custom_count + + def calculate_total_length(self) -> float: + """Calculate total stair run length from current properties.""" + custom_length, custom_count = self.get_custom_tread_info() + n_default_treads = self.number_of_treads + 1 - custom_count + return custom_length + n_default_treads * self.tread_run + + def update_tread_run_from_length(self) -> None: + """Recalculate tread_run to maintain total_length_target.""" + custom_length, custom_count = self.get_custom_tread_info() + available_length = self.total_length_target - custom_length + n_default_treads = self.number_of_treads + 1 - custom_count + + if n_default_treads > 0: + self["tread_run"] = available_length / n_default_treads + else: + # All treads are custom, use fallback + self["tread_run"] = self.total_length_target / (self.number_of_treads + 1) + + def update_total_length_from_treads(self) -> None: + """Recalculate total_length_target from current tread settings.""" + self["total_length_target"] = self.calculate_total_length() + class BIMSverchokProperties(PropertyGroup): node_group: bpy.props.PointerProperty(name="Node Group", type=NodeTree) @@ -875,6 +929,167 @@ class BIMWindowProperties(PropertyGroup): if prop_name not in exclude_props: setattr(target_props, prop_name, prop_value) + # Window type feature mapping - centralized configuration for all window type checks + # Each window type maps to its features: mullion, second_mullion, transom, second_transom, panels + WINDOW_TYPE_FEATURES: dict[str, dict[str, bool | int]] = { + "SINGLE_PANEL": {"panels": 1}, + "DOUBLE_PANEL_VERTICAL": {"mullion": True, "panels": 2}, + "DOUBLE_PANEL_HORIZONTAL": {"transom": True, "panels": 2}, + "TRIPLE_PANEL_BOTTOM": {"mullion": True, "transom": True, "panels": 3}, + "TRIPLE_PANEL_TOP": {"mullion": True, "transom": True, "panels": 3}, + "TRIPLE_PANEL_LEFT": {"mullion": True, "transom": True, "panels": 3}, + "TRIPLE_PANEL_RIGHT": {"mullion": True, "transom": True, "panels": 3}, + "TRIPLE_PANEL_HORIZONTAL": {"transom": True, "second_transom": True, "panels": 3}, + "TRIPLE_PANEL_VERTICAL": {"mullion": True, "second_mullion": True, "panels": 3}, + } + + def _get_feature(self, feature: str, default: bool | int = False) -> bool | int: + return self.WINDOW_TYPE_FEATURES.get(self.window_type, {}).get(feature, default) + + def has_mullion(self) -> bool: + return bool(self._get_feature("mullion")) + + def has_second_mullion(self) -> bool: + return bool(self._get_feature("second_mullion")) + + def has_transom(self) -> bool: + return bool(self._get_feature("transom")) + + def has_second_transom(self) -> bool: + return bool(self._get_feature("second_transom")) + + def has_second_panel(self) -> bool: + return int(self._get_feature("panels", 1)) >= 2 + + def has_third_panel(self) -> bool: + return int(self._get_feature("panels", 1)) >= 3 + + def get_lining_to_panel_offset_y_full(self) -> float: + """Get the full Y offset for lining-to-panel positioning.""" + return (self.lining_depth - self.frame_depth[0]) + self.lining_to_panel_offset_y + + def get_panel_geometry(self, panel_index: int) -> tuple[float, float, float, float]: + """Get panel geometry (x_offset, z_offset, height, center_z) for a given panel index. + + Args: + panel_index: 0 for first panel, 1 for second, 2 for third + + Returns: + Tuple of (x_offset, z_offset, height, center_z) + """ + window_type = self.window_type + + if panel_index == 0: + # First panel position and height + if window_type == "DOUBLE_PANEL_HORIZONTAL": + x, z = 0, self.first_transom_offset + elif window_type == "TRIPLE_PANEL_HORIZONTAL": + x, z = 0, self.second_transom_offset + elif window_type in ("TRIPLE_PANEL_BOTTOM", "TRIPLE_PANEL_RIGHT", "TRIPLE_PANEL_TOP"): + x, z = 0, self.first_transom_offset + else: + x, z = 0, 0 + + if window_type == "TRIPLE_PANEL_HORIZONTAL": + height = self.overall_height - self.second_transom_offset + elif window_type in ( + "DOUBLE_PANEL_HORIZONTAL", + "TRIPLE_PANEL_BOTTOM", + "TRIPLE_PANEL_RIGHT", + "TRIPLE_PANEL_TOP", + ): + height = self.overall_height - self.first_transom_offset + else: + height = self.overall_height + + elif panel_index == 1: + # Second panel position and height + if window_type == "DOUBLE_PANEL_VERTICAL": + x, z = self.first_mullion_offset, 0 + elif window_type == "DOUBLE_PANEL_HORIZONTAL": + x, z = 0, 0 + elif window_type in ("TRIPLE_PANEL_BOTTOM", "TRIPLE_PANEL_LEFT", "TRIPLE_PANEL_RIGHT"): + x, z = self.first_mullion_offset, self.first_transom_offset + elif window_type == "TRIPLE_PANEL_TOP": + x, z = 0, 0 + elif window_type == "TRIPLE_PANEL_HORIZONTAL": + x, z = 0, self.first_transom_offset + elif window_type == "TRIPLE_PANEL_VERTICAL": + x, z = self.first_mullion_offset, 0 + else: + x, z = 0, 0 + + if window_type == "DOUBLE_PANEL_HORIZONTAL": + height = self.first_transom_offset + elif window_type == "DOUBLE_PANEL_VERTICAL": + height = self.overall_height + elif window_type in ("TRIPLE_PANEL_BOTTOM", "TRIPLE_PANEL_LEFT", "TRIPLE_PANEL_RIGHT"): + height = self.overall_height - self.first_transom_offset + elif window_type == "TRIPLE_PANEL_TOP": + height = self.first_transom_offset + elif window_type == "TRIPLE_PANEL_HORIZONTAL": + height = self.second_transom_offset - self.first_transom_offset + elif window_type == "TRIPLE_PANEL_VERTICAL": + height = self.overall_height + else: + height = self.overall_height + + else: # panel_index == 2 + # Third panel position and height + if window_type in ("TRIPLE_PANEL_BOTTOM", "TRIPLE_PANEL_RIGHT", "TRIPLE_PANEL_HORIZONTAL"): + x, z = 0, 0 + elif window_type in ("TRIPLE_PANEL_TOP", "TRIPLE_PANEL_LEFT"): + x, z = self.first_mullion_offset, 0 + elif window_type == "TRIPLE_PANEL_VERTICAL": + x, z = self.second_mullion_offset, 0 + else: + x, z = 0, 0 + + height = self.overall_height if window_type == "TRIPLE_PANEL_VERTICAL" else self.first_transom_offset + + center_z = z + height / 2 + return x, z, height, center_z + + def get_frame_position(self, panel_index: int, is_depth: bool) -> Vector: + """Get frame gizmo position for a given panel. + + Args: + panel_index: 0 for first panel, 1 for second, 2 for third + is_depth: True for depth gizmo, False for thickness gizmo + + Returns: + Position vector for the gizmo + """ + x_offset, _, _, center_z = self.get_panel_geometry(panel_index) + frame_depth = self.frame_depth[panel_index] + y_full = (self.lining_depth - frame_depth) + self.lining_to_panel_offset_y + y_pos = y_full + frame_depth + self.lining_offset + return Vector((x_offset + self.lining_to_panel_offset_x, y_pos, center_z)) + + def get_frame_value(self, attr_name: str, panel_index: int) -> float: + """Get frame property value (frame_depth or frame_thickness) for a specific panel. + + Args: + attr_name: Property name ("frame_depth" or "frame_thickness") + panel_index: Panel index (0, 1, or 2) + + Returns: + The value at the specified panel index + """ + return getattr(self, attr_name)[panel_index] + + def set_frame_value(self, attr_name: str, panel_index: int, value: float) -> None: + """Set frame property value (frame_depth or frame_thickness) for a specific panel. + + Args: + attr_name: Property name ("frame_depth" or "frame_thickness") + panel_index: Panel index (0, 1, or 2) + value: New value (clamped to min 0.0) + """ + current = getattr(self, attr_name) + new_value = tuple(current[:panel_index]) + (max(0.0, value),) + tuple(current[panel_index + 1:]) + setattr(self, attr_name, new_value) + class BIMDoorProperties(PropertyGroup): non_si_units_props = ( @@ -1138,6 +1353,36 @@ class BIMDoorProperties(PropertyGroup): if prop_name not in exclude_props: setattr(target_props, prop_name, prop_value) + def has_threshold_depth(self) -> bool: + """Check if threshold depth gizmo should be visible (has threshold).""" + return self.threshold_thickness > 0.0 + + def has_transom(self) -> bool: + """Check if transom-related gizmos should be visible (has transom).""" + return self.transom_thickness > 0.0 + + def has_casing(self) -> bool: + """Check if casing gizmos should be visible (no lining offset).""" + return self.lining_offset == 0.0 + + def has_casing_depth(self) -> bool: + """Check if casing depth gizmo should be visible (has casing and casing thickness > 0).""" + return self.lining_offset == 0.0 and self.casing_thickness > 0.0 + + def get_panel_center_z(self) -> float: + """Get the vertical center of the door panel for gizmo positioning.""" + if self.transom_thickness > 0: + return (self.transom_offset - self.threshold_thickness) / 2 + return (self.overall_height - self.threshold_thickness) / 2 + + def get_transom_window_center_z(self) -> float: + """Get the vertical center of the transom window for frame gizmo positioning.""" + return (self.transom_offset + self.transom_thickness / 2 + self.overall_height - self.lining_thickness) / 2 + + def get_casing_offset(self) -> float: + """Get casing offset for gizmo positioning (casing_thickness when lining_offset is 0).""" + return self.casing_thickness if self.lining_offset == 0.0 else 0.0 + RailingType = Literal["FRAMELESS_PANEL", "WALL_MOUNTED_HANDRAIL"] CapType = Literal["TO_END_POST_AND_FLOOR", "TO_END_POST", "TO_FLOOR", "TO_WALL", "180", "NONE"] @@ -1156,11 +1401,11 @@ class BIMRailingProperties(PropertyGroup): is_editing_path: bpy.props.BoolProperty(default=False) railing_type: bpy.props.EnumProperty( - name="Railing Type", items=[(i, i, "") for i in get_args(RailingType)], default="FRAMELESS_PANEL" + name="Railing Type", items=[(i, i, "") for i in get_args(RailingType)], default="FRAMELESS_PANEL", update=update_railing ) - height: bpy.props.FloatProperty(name="Height", default=1.0, subtype="DISTANCE") - thickness: bpy.props.FloatProperty(name="Thickness", default=0.050, subtype="DISTANCE") - spacing: bpy.props.FloatProperty(name="Spacing", default=0.050, subtype="DISTANCE") + height: bpy.props.FloatProperty(name="Height", default=1.0, subtype="DISTANCE", update=update_railing) + thickness: bpy.props.FloatProperty(name="Thickness", default=0.050, subtype="DISTANCE", update=update_railing) + spacing: bpy.props.FloatProperty(name="Spacing", default=0.050, subtype="DISTANCE", update=update_railing) # wall mounted handrail specific properties use_manual_supports: bpy.props.BoolProperty( @@ -1168,6 +1413,7 @@ class BIMRailingProperties(PropertyGroup): default=False, description="If enabled, supports are added on every vertex on the edges of the railing path.\n" "If disabled, supports are added automatically based on the support spacing", + update=update_railing, ) support_spacing: bpy.props.FloatProperty( name="Support Spacing", @@ -1175,16 +1421,18 @@ class BIMRailingProperties(PropertyGroup): min=0.01, description="Distance between supports if automatic supports are used", subtype="DISTANCE", + update=update_railing, ) - railing_diameter: bpy.props.FloatProperty(name="Railing Diameter", default=0.050, subtype="DISTANCE") + railing_diameter: bpy.props.FloatProperty(name="Railing Diameter", default=0.050, subtype="DISTANCE", update=update_railing) clear_width: bpy.props.FloatProperty( name="Clear Width", default=0.040, description="Clear width between the railing and the wall", subtype="DISTANCE", + update=update_railing, ) terminal_type: bpy.props.EnumProperty( - name="Terminal Type", items=[(i, i, "") for i in get_args(CapType)], default="180" + name="Terminal Type", items=[(i, i, "") for i in get_args(CapType)], default="180", update=update_railing ) if TYPE_CHECKING: @@ -1258,9 +1506,11 @@ RoofGenerationMethod = Literal["HEIGHT", "ANGLE"] class BIMRoofProperties(PropertyGroup): def update_angle(self, context: bpy.types.Context) -> None: self["angle"] = to_angle(self.percentage) + update_roof(self, context) def update_percentage(self, context: bpy.types.Context) -> None: self["percentage"] = to_percentage(self.angle) + update_roof(self, context) non_si_units_props = ( "is_editing", @@ -1276,13 +1526,13 @@ class BIMRoofProperties(PropertyGroup): is_editing_path: bpy.props.BoolProperty(default=False) roof_type: bpy.props.EnumProperty( - name="Roof Type", items=[(i, i, "") for i in get_args(RoofType)], default="HIP/GABLE ROOF" + name="Roof Type", items=[(i, i, "") for i in get_args(RoofType)], default="HIP/GABLE ROOF", update=update_roof ) generation_method: bpy.props.EnumProperty( - name="Roof Generation Method", items=[(i, i, "") for i in get_args(RoofGenerationMethod)], default="ANGLE" + name="Roof Generation Method", items=[(i, i, "") for i in get_args(RoofGenerationMethod)], default="ANGLE", update=update_roof ) height: bpy.props.FloatProperty( - name="Height", default=1.0, description="Maximum height of the roof to be generated.", subtype="DISTANCE" + name="Height", default=1.0, description="Maximum height of the roof to be generated.", subtype="DISTANCE", update=update_roof ) angle: bpy.props.FloatProperty( name="Slope Angle", @@ -1304,9 +1554,9 @@ class BIMRoofProperties(PropertyGroup): soft_min=to_percentage(radians(5.0)), soft_max=to_percentage(radians(60.0)), ) - roof_thickness: bpy.props.FloatProperty(name="Roof Thickness", default=0.1, subtype="DISTANCE") + roof_thickness: bpy.props.FloatProperty(name="Roof Thickness", default=0.1, subtype="DISTANCE", update=update_roof) rafter_edge_angle: bpy.props.FloatProperty( - name="Rafter Edge Angle", min=0, max=pi / 2, default=pi / 2, subtype="ANGLE" + name="Rafter Edge Angle", min=0, max=pi / 2, default=pi / 2, subtype="ANGLE", update=update_roof ) if TYPE_CHECKING: diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index 4611c1b0a0..bf41e8d643 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -19,7 +19,6 @@ import bpy import json import bmesh -import math import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.element @@ -34,10 +33,11 @@ from mathutils import Vector, Matrix V_ = tool.Blender.V_ 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 typing import get_args +from bpy.props import IntProperty +from typing import get_args, TYPE_CHECKING + +if TYPE_CHECKING: + from bonsai.bim.module.model.prop import BIMStairProperties def regenerate_stair_mesh(obj: bpy.types.Object) -> None: @@ -142,10 +142,10 @@ class BIM_OT_add_stair(bpy.types.Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} @classmethod - def poll(cls, context): + def poll(cls, context: bpy.types.Context) -> bool: return tool.Ifc.get() and context.mode == "OBJECT" - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: ifc_file = tool.Ifc.get() if not ifc_file: self.report({"ERROR"}, "You need to start IFC project first to create a stair.") @@ -187,7 +187,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Add Bonsai parametric stair to the active IFC element" bl_options = {"REGISTER", "UNDO"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj element = tool.Ifc.get_entity(obj) @@ -216,6 +216,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): regenerate_stair_mesh(obj) update_ifc_stair_props(obj) tool.Model.add_body_representation(obj) + return {"FINISHED"} class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator): @@ -224,7 +225,7 @@ class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Cancel editing and revert stair parameters to their previous values" bl_options = {"REGISTER"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj element = tool.Ifc.get_entity(obj) @@ -246,7 +247,7 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Apply changes and finish editing stair parameters" bl_options = {"REGISTER"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj element = tool.Ifc.get_entity(obj) @@ -274,7 +275,7 @@ class EnableEditingStair(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Enter edit mode to modify stair parameters interactively" bl_options = {"REGISTER"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj props = tool.Model.get_stair_props(obj) @@ -291,7 +292,7 @@ class RemoveStair(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Remove Stair" bl_options = {"REGISTER"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj props = tool.Model.get_stair_props(obj) @@ -305,40 +306,40 @@ class RemoveStair(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} -class ToggleStairTotalLengthLock(bpy.types.Operator): - """Toggle the total length lock for stair editing""" +class ToggleStairProperty(bpy.types.Operator): + """Toggle a boolean property on stair properties""" - bl_idname = "bim.toggle_stair_total_length_lock" - bl_label = "Toggle Stair Total Length Lock" + bl_idname = "bim.toggle_stair_property" + bl_label = "Toggle Stair Property" bl_options = {"REGISTER", "UNDO"} - def execute(self, context): + property_name: bpy.props.StringProperty( + name="Property Name", + description="Name of the boolean property to toggle", + options={"HIDDEN", "SKIP_SAVE"}, + ) + + # Map property names to their descriptions + PROPERTY_DESCRIPTIONS: dict[str, str] = { + "total_length_lock": "Lock/unlock total stair length. When locked, changing treads adjusts tread depth", + "custom_tread_lock": "Lock/unlock first and last tread dimensions. When unlocked, they can differ from other treads", + } + + @classmethod + def description(cls, context: bpy.types.Context, properties: bpy.types.OperatorProperties) -> str: + prop_name = properties.property_name + return cls.PROPERTY_DESCRIPTIONS.get(prop_name, "Toggle a boolean property on stair properties") + + def execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object - if not obj: + if not obj or not self.property_name: return {"CANCELLED"} props = tool.Model.get_stair_props(obj) - props.total_length_lock = not props.total_length_lock - - return {"FINISHED"} - - -class ToggleStairCustomTreadLock(bpy.types.Operator): - """Toggle custom first/last tread runs. When unlocked, first and last treads can have different lengths.""" - - bl_idname = "bim.toggle_stair_custom_tread_lock" - bl_label = "Toggle Custom Tread Lock" - bl_options = {"REGISTER", "UNDO"} - - def execute(self, context): - obj = context.active_object - if not obj: - return {"CANCELLED"} - - props = tool.Model.get_stair_props(obj) - props.custom_tread_lock = not props.custom_tread_lock - - return {"FINISHED"} + if hasattr(props, self.property_name): + setattr(props, self.property_name, not getattr(props, self.property_name)) + return {"FINISHED"} + return {"CANCELLED"} class AdjustStairTreads(bpy.types.Operator): @@ -350,13 +351,13 @@ class AdjustStairTreads(bpy.types.Operator): increment: IntProperty(name="Increment", default=1) - def invoke(self, context, event): + def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set[str]: if event.shift: bpy.ops.bim.set_stair_treads("INVOKE_DEFAULT") return {"FINISHED"} return self.execute(context) - def execute(self, context): + def execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object if not obj: return {"CANCELLED"} @@ -376,7 +377,7 @@ class SetStairTreads(bpy.types.Operator): bl_label = "Set Number of Treads" bl_options = {"REGISTER", "UNDO", "INTERNAL"} - def invoke(self, context, event): # noqa: ARG002 + def invoke(self, context: bpy.types.Context, event: bpy.types.Event) -> set[str]: # noqa: ARG002 obj = context.active_object if not obj: return {"CANCELLED"} @@ -390,10 +391,10 @@ class SetStairTreads(bpy.types.Operator): update_header(context, self._format_header()) return {"RUNNING_MODAL"} - def modal(self, context, event): + def modal(self, context: bpy.types.Context, event: bpy.types.Event) -> set[str]: return run_integer_input_modal(self, context, event) - def _apply_value(self, context) -> None: + def _apply_value(self, context: bpy.types.Context) -> None: obj = context.active_object if not obj: return @@ -402,7 +403,7 @@ class SetStairTreads(bpy.types.Operator): props = tool.Model.get_stair_props(obj) props.number_of_treads = value - def _restore_value(self, context) -> None: + def _restore_value(self, context: bpy.types.Context) -> None: obj = context.active_object if obj: props = tool.Model.get_stair_props(obj) @@ -414,51 +415,36 @@ class SetStairTreads(bpy.types.Operator): return f"Number of Treads: {input_str}_{validity} | Enter to confirm, Esc to cancel" -class CycleStairType(bpy.types.Operator): +class CycleStairType(bpy.types.Operator, gizmo.CycleTypeMixin): """Cycle through stair types. Shift+click to cycle in reverse.""" bl_idname = "bim.cycle_stair_type" bl_label = "Cycle Stair Type" bl_options = {"REGISTER", "UNDO"} - reverse: bpy.props.BoolProperty(name="Reverse", default=False, options={"HIDDEN", "SKIP_SAVE"}) + props_getter = "get_stair_props" + type_literal = tool.Model.StairType + type_attr = "stair_type" + skip_element_check = True - def invoke(self, context, event): - self.reverse = event.shift - return self.execute(context) - - def execute(self, context): - obj = context.active_object - if not obj: - return {"CANCELLED"} - - props = tool.Model.get_stair_props(obj) - stair_types = get_args(tool.Model.StairType) - current_idx = stair_types.index(props.stair_type) if props.stair_type in stair_types else 0 - direction = -1 if self.reverse else 1 - props.stair_type = stair_types[(current_idx + direction) % len(stair_types)] - - return {"FINISHED"} + def execute(self, context: bpy.types.Context) -> set[str]: + return self._cycle_type(context) -def _compute_first_tread_run(props) -> float: - """Get the first custom tread run value from the tuple property.""" - return props.custom_first_last_tread_run[0] +# Tread run accessors - callbacks that delegate to BIMStairProperties methods +_tread_run_accessors = { + 0: ( + lambda props: props.get_custom_tread_run(0), + lambda props, value: props.set_custom_tread_run(0, value), + ), + 1: ( + lambda props: props.get_custom_tread_run(1), + lambda props, value: props.set_custom_tread_run(1, value), + ), +} - -def _apply_first_tread_run(props, value: float) -> None: - """Apply a new first custom tread run value, preserving the second value.""" - props.custom_first_last_tread_run = (max(0.01, value), props.custom_first_last_tread_run[1]) - - -def _compute_last_tread_run(props) -> float: - """Get the last custom tread run value from the tuple property.""" - return props.custom_first_last_tread_run[1] - - -def _apply_last_tread_run(props, value: float) -> None: - """Apply a new last custom tread run value, preserving the first value.""" - props.custom_first_last_tread_run = (props.custom_first_last_tread_run[0], max(0.01, value)) +# Shorthand for gizmo offset constants used in DimensionGizmoConfig lambdas +_G = gizmo.BaseParametricGizmoGroup class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): @@ -475,28 +461,22 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): ICON_PLUS_X = 1.61 # X position for add tread (+) icon ICON_MINUS_X = 1.98 # X position for remove tread (-) icon ICON_PLUS_MINUS_SCALE = 0.24 # Scale for plus/minus icons (slightly larger) + ICON_CYCLE_SCALE = 0.3 # Scale for cycle type icon + ICON_Z_OFFSET = 0.5 # Z offset above geometry for editing icons enable_editing_operator = "bim.enable_editing_stair" finish_editing_operator = "bim.finish_editing_stair" cancel_editing_operator = "bim.cancel_editing_stair" cycle_type_operator = "bim.cycle_stair_type" - def get_icon_y_offset(self, context, mw): - """Get Y offset for icons based on view direction. + def get_icon_y_extent(self, props: "BIMStairProperties") -> tuple[float, float]: + """Get Y extents for stair icon positioning. - Positions icons further than the furthest geometry: - stair_width + 2 * GIZMO_OFFSET + Stair geometry extends from Y=0 to Y=width. + Icons are positioned beyond the width on either side. """ - obj = context.active_object - if not obj: - return self.ICON_Y_OFFSET - props = self.get_props(obj) furthest_y = props.width + 2 * self.GIZMO_OFFSET - - viewing_from_negative_y, _ = self.get_local_view_direction(context, mw) - if viewing_from_negative_y: - return -furthest_y - return furthest_y + return (furthest_y, furthest_y) dimension_gizmo_props = [ DimensionGizmoConfig( @@ -505,267 +485,164 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): prop_name="Total Length", min_value=0.01, text_offset_sign=-1, + matrix_position=lambda p: V_(0, -_G.GIZMO_OFFSET, -_G.GIZMO_OFFSET), + ), + DimensionGizmoConfig( + attr_name="height", axis=(0, 0, 1), min_value=0.01, text_alignment="start", + matrix_position=lambda p: V_(p.get_total_run() + _G.GIZMO_OFFSET, -_G.GIZMO_OFFSET, 0), + ), + DimensionGizmoConfig( + attr_name="width", axis=(0, 1, 0), min_value=0.01, + matrix_position=lambda p: V_(_G.GIZMO_OFFSET, 0, -_G.GIZMO_OFFSET), ), - DimensionGizmoConfig(attr_name="height", axis=(0, 0, 1), min_value=0.01, text_alignment="start"), - DimensionGizmoConfig(attr_name="width", axis=(0, 1, 0), min_value=0.01), DimensionGizmoConfig( attr_name="tread_run", axis=(1, 0, 0), min_value=0.01, - visibility_condition=lambda props: props.custom_tread_lock or props.number_of_treads > 2, + visibility_condition=lambda p: p.has_tread_run_gizmo(), + matrix_position=lambda p: V_( + 0 if p.custom_tread_lock else p.custom_first_last_tread_run[0], + 0, + p.get_riser_height() if p.custom_tread_lock else p.get_riser_height() * 2 + ), ), DimensionGizmoConfig( attr_name="custom_first_tread_run", axis=(1, 0, 0), prop_name="First Tread", min_value=0.01, - visibility_condition=lambda props: not props.custom_tread_lock, - compute_value=_compute_first_tread_run, - apply_value=_apply_first_tread_run, + visibility_condition=lambda p: p.has_custom_treads(), + compute_value=_tread_run_accessors[0][0], + apply_value=_tread_run_accessors[0][1], + matrix_position=lambda p: V_(0, 0, p.get_riser_height()), ), DimensionGizmoConfig( attr_name="custom_last_tread_run", axis=(1, 0, 0), prop_name="Last Tread", min_value=0.01, - visibility_condition=lambda props: not props.custom_tread_lock, - compute_value=_compute_last_tread_run, - apply_value=_apply_last_tread_run, + visibility_condition=lambda p: p.has_custom_treads(), + compute_value=_tread_run_accessors[1][0], + apply_value=_tread_run_accessors[1][1], + matrix_position=lambda p: V_( + p.get_total_run() - p.custom_first_last_tread_run[1], 0, p.height + ), + ), + DimensionGizmoConfig( + attr_name="nosing_length", axis=(-1, 0, 0), + matrix_position=lambda p: V_(0, p.width / 2, p.get_riser_height()), ), - DimensionGizmoConfig(attr_name="nosing_length", axis=(-1, 0, 0)), DimensionGizmoConfig( attr_name="tread_depth", axis=(0, 0, -1), - visibility_condition=lambda props: props.stair_type != "GENERIC", + visibility_condition=lambda p: p.has_tread_depth(), + matrix_position=lambda p: V_(0, 0, p.get_riser_height()), ), DimensionGizmoConfig( attr_name="riser_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start", - compute_value=lambda props: props.height / (props.number_of_treads + 1), - apply_value=lambda props, value: setattr(props, "height", max(0.01, value) * (props.number_of_treads + 1)), + compute_value=lambda p: p.get_riser_height(), + apply_value=lambda p, v: p.set_riser_height(v), + matrix_position=lambda p: V_(p.tread_run, p.width, 0), ), DimensionGizmoConfig( attr_name="nosing_depth", axis=(0, 0, -1), - visibility_condition=lambda props: props.nosing_length != 0.0 and props.stair_type != "WOOD/STEEL", + visibility_condition=lambda p: p.has_nosing(), + matrix_position=lambda p: V_(-p.nosing_length, p.width / 2, p.get_riser_height()), ), DimensionGizmoConfig( attr_name="base_slab_depth", axis=(0, 0, -1), - visibility_condition=lambda props: props.stair_type == "CONCRETE", + visibility_condition=lambda p: p.is_concrete_stair(), + matrix_position=lambda p: V_(0, p.width / 2, 0), ), DimensionGizmoConfig( attr_name="top_slab_depth", axis=(0, 0, -1), - visibility_condition=lambda props: props.stair_type == "CONCRETE", + visibility_condition=lambda p: p.is_concrete_stair(), + matrix_position=lambda p: V_(p.get_total_run(), p.width / 2, p.height), ), ] + # Metadata-driven dispatch for props and preferences + props_getter = "get_stair_props" + gizmo_pref_name = "stair" + @classmethod - def is_element_type(cls, element) -> bool: + def is_element_type(cls, element: ifcopenshell.entity_instance) -> bool: return tool.Blender.Modifier.is_stair(element) - def get_props(self, obj: bpy.types.Object): - return tool.Model.get_stair_props(obj) + def setup_element_specific_gizmos(self, context: bpy.types.Context) -> None: + """Create stair-specific icon gizmos (lock, plus, minus).""" + self.lock_gizmo = self.create_icon_gizmo( + "VIEW3D_GT_lock", self.COLOR_BLUE, "bim.toggle_stair_property", + prop_path="BIMStairProperties.total_length_lock", + property_name="total_length_lock", + ) + self.tread_lock_gizmo = self.create_icon_gizmo( + "VIEW3D_GT_lock", (1.0, 1.0, 1.0), "bim.toggle_stair_property", + prop_path="BIMStairProperties.custom_tread_lock", + property_name="custom_tread_lock", + ) + self.plus_gizmo = self.create_icon_gizmo( + "VIEW3D_GT_plus", self.COLOR_GREEN, "bim.adjust_stair_treads", increment=1 + ) + self.minus_gizmo = self.create_icon_gizmo( + "VIEW3D_GT_minus", self.COLOR_RED, "bim.adjust_stair_treads", increment=-1 + ) - def get_gizmo_prefs(self): - prefs = tool.Blender.get_addon_preferences() - return prefs.gizmos.stair - - @staticmethod - def _get_stair_total_run(props) -> float: - """Calculate the total horizontal run of the stair. - - Takes into account custom first/last tread runs when custom_tread_lock is False. - """ - number_of_rises = props.number_of_treads + 1 - total_run = 0.0 - default_rises = number_of_rises - - if not props.custom_tread_lock: - if props.custom_first_last_tread_run[0] is not None: # May be 0 though - default_rises -= 1 - total_run += props.custom_first_last_tread_run[0] - if props.custom_first_last_tread_run[1] is not None: # May be 0 though - default_rises -= 1 - total_run += props.custom_first_last_tread_run[1] - - total_run += props.tread_run * default_rises - return total_run - - @staticmethod - def _get_first_riser_height(props) -> float: - """Calculate the height of the first riser.""" - return props.height / (props.number_of_treads + 1) - - def get_dimension_matrix_total_length_target(self, props) -> Matrix: - return self.compose_gizmo_matrix(V_(0, -self.GIZMO_OFFSET, -self.GIZMO_OFFSET), (1, 0, 0)) - - def get_dimension_matrix_height(self, props) -> Matrix: - total_run = self._get_stair_total_run(props) - return self.compose_gizmo_matrix(V_(total_run + self.GIZMO_OFFSET, -self.GIZMO_OFFSET, 0), (0, 0, 1)) - - def get_dimension_matrix_width(self, props) -> Matrix: - return self.compose_gizmo_matrix(V_(self.GIZMO_OFFSET, 0, -self.GIZMO_OFFSET), (0, 1, 0)) - - def get_dimension_matrix_tread_run(self, props) -> Matrix: - """Position depends on custom_tread_lock state.""" - riser_height = self._get_first_riser_height(props) - if props.custom_tread_lock: - x_offset = 0 - z_offset = riser_height - else: - x_offset = props.custom_first_last_tread_run[0] - z_offset = riser_height * 2 - return self.compose_gizmo_matrix(V_(x_offset, 0, z_offset), (1, 0, 0)) - - def get_dimension_matrix_custom_first_tread_run(self, props) -> Matrix: - riser_height = self._get_first_riser_height(props) - return self.compose_gizmo_matrix(V_(0, 0, riser_height), (1, 0, 0)) - - def get_dimension_matrix_custom_last_tread_run(self, props) -> Matrix: - total_run = self._get_stair_total_run(props) - x_offset = total_run - props.custom_first_last_tread_run[1] - return self.compose_gizmo_matrix(V_(x_offset, 0, props.height), (1, 0, 0)) - - def get_dimension_matrix_nosing_length(self, props) -> Matrix: - riser_height = self._get_first_riser_height(props) - return self.compose_gizmo_matrix(V_(0, props.width / 2, riser_height), (-1, 0, 0)) - - def get_dimension_matrix_tread_depth(self, props) -> Matrix: - riser_height = self._get_first_riser_height(props) - return self.compose_gizmo_matrix(V_(0, 0, riser_height), (0, 0, -1)) - - def get_dimension_matrix_riser_height(self, props) -> Matrix: - return self.compose_gizmo_matrix(V_(props.tread_run, props.width, 0), (0, 0, 1)) - - def get_dimension_matrix_nosing_depth(self, props) -> Matrix: - riser_height = self._get_first_riser_height(props) - return self.compose_gizmo_matrix(V_(-props.nosing_length, props.width / 2, riser_height), (0, 0, -1)) - - def get_dimension_matrix_base_slab_depth(self, props) -> Matrix: - return self.compose_gizmo_matrix(V_(0, props.width / 2, 0), (0, 0, -1)) - - def get_dimension_matrix_top_slab_depth(self, props) -> Matrix: - total_run = self._get_stair_total_run(props) - return self.compose_gizmo_matrix(V_(total_run, props.width / 2, props.height), (0, 0, -1)) - - def setup(self, context: bpy.types.Context) -> None: - self.setup_editing_gizmos(context) - self.setup_dimension_gizmos(context) - - prefs = tool.Blender.get_addon_preferences() - highlight_color = prefs.decorator_color_selected[:3] - - self.lock_gizmo = self.gizmos.new("VIEW3D_GT_lock") - self.lock_gizmo.use_draw_scale = False - self.lock_gizmo.color = self.COLOR_BLUE - self.lock_gizmo.color_highlight = highlight_color - self.lock_gizmo.alpha = 0.8 - self.lock_gizmo.prop_path = "BIMStairProperties.total_length_lock" - self.lock_gizmo.target_set_operator("bim.toggle_stair_total_length_lock") - - self.tread_lock_gizmo = self.gizmos.new("VIEW3D_GT_lock") - self.tread_lock_gizmo.use_draw_scale = False - self.tread_lock_gizmo.color = (1.0, 1.0, 1.0) - self.tread_lock_gizmo.color_highlight = highlight_color - self.tread_lock_gizmo.alpha = 0.8 - self.tread_lock_gizmo.prop_path = "BIMStairProperties.custom_tread_lock" - self.tread_lock_gizmo.target_set_operator("bim.toggle_stair_custom_tread_lock") - - self.plus_gizmo = self.gizmos.new("VIEW3D_GT_plus") - self.plus_gizmo.use_draw_scale = False - self.plus_gizmo.color = self.COLOR_GREEN - self.plus_gizmo.color_highlight = highlight_color - self.plus_gizmo.alpha = 0.8 - op = self.plus_gizmo.target_set_operator("bim.adjust_stair_treads") - op.increment = 1 - - self.minus_gizmo = self.gizmos.new("VIEW3D_GT_minus") - self.minus_gizmo.use_draw_scale = False - self.minus_gizmo.color = self.COLOR_RED - self.minus_gizmo.color_highlight = highlight_color - self.minus_gizmo.alpha = 0.8 - op = self.minus_gizmo.target_set_operator("bim.adjust_stair_treads") - op.increment = -1 - - def refresh(self, context: bpy.types.Context) -> None: - if not self.is_setup_complete(): - return - obj = context.active_object - if not obj: - return - - props = self.get_props(obj) - mw = obj.matrix_world + def _refresh_element_specific( + self, context: bpy.types.Context, mw: Matrix, props: "BIMStairProperties" + ) -> None: + """Update stair-specific lock and tread count gizmos.""" billboard_rot = gizmo.get_billboard_rotation(context) - self.update_editing_gizmos(context, mw, props) self.update_lock_gizmo(mw, props, billboard_rot) self.update_tread_lock_gizmo(props) self.update_tread_count_gizmos(props) - self.update_dimension_gizmos(mw, props) - - def update_lock_gizmo(self, mw: Matrix, props, billboard_rot: Matrix) -> None: - if self.is_gizmo_hidden_by_modal(self.lock_gizmo): - self.lock_gizmo.hide = True - return + def update_lock_gizmo(self, mw: Matrix, props: "BIMStairProperties", billboard_rot: Matrix) -> None: + """Update lock gizmo visibility, color, and position.""" gizmo_prefs = self.get_gizmo_prefs() - self.lock_gizmo.hide = not props.is_editing or not gizmo_prefs.lock - - if self.lock_gizmo.hide: - return + if not self.update_gizmo_visibility(self.lock_gizmo, props.is_editing, gizmo_prefs.lock): + return # Hidden, skip positioning self.lock_gizmo.color = self.COLOR_RED if props.total_length_lock else self.COLOR_GREEN - total_run = self._get_stair_total_run(props) + total_run = props.get_total_run() local_transform = ( - Matrix.Translation(Vector((total_run + 0.5, -self.GIZMO_OFFSET, -self.GIZMO_OFFSET))) + Matrix.Translation(Vector((total_run + self.ICON_Z_OFFSET, -self.GIZMO_OFFSET, -self.GIZMO_OFFSET))) @ billboard_rot @ Matrix.Scale(self.EDITING_ICON_SCALE, 4) ) self.lock_gizmo.matrix_basis = mw @ local_transform - def update_tread_lock_gizmo(self, props) -> None: + def update_tread_lock_gizmo(self, props: "BIMStairProperties") -> None: """Update visibility of tread lock gizmo. Positioning is handled in _update_editing_icon_positions.""" if not hasattr(self, "tread_lock_gizmo"): return - - if self.is_gizmo_hidden_by_modal(self.tread_lock_gizmo): - self.tread_lock_gizmo.hide = True - return - gizmo_prefs = self.get_gizmo_prefs() - self.tread_lock_gizmo.hide = not props.is_editing or not gizmo_prefs.lock + self.update_gizmo_visibility(self.tread_lock_gizmo, props.is_editing, gizmo_prefs.lock) - def update_tread_count_gizmos(self, props) -> None: + def update_tread_count_gizmos(self, props: "BIMStairProperties") -> None: """Update visibility of +/- tread count gizmos. Positioning is handled in _update_editing_icon_positions.""" if not hasattr(self, "plus_gizmo") or not hasattr(self, "minus_gizmo"): return + gizmo_prefs = self.get_gizmo_prefs() + self.update_gizmo_visibility(self.plus_gizmo, props.is_editing, gizmo_prefs.plus) + # Minus has additional condition: number_of_treads > 1 + self.update_gizmo_visibility( + self.minus_gizmo, props.is_editing and props.number_of_treads > 1, gizmo_prefs.minus + ) - plus_hidden_by_modal = self.is_gizmo_hidden_by_modal(self.plus_gizmo) - minus_hidden_by_modal = self.is_gizmo_hidden_by_modal(self.minus_gizmo) - - if plus_hidden_by_modal: - self.plus_gizmo.hide = True - else: - gizmo_prefs = self.get_gizmo_prefs() - self.plus_gizmo.hide = not props.is_editing or not gizmo_prefs.plus - - if minus_hidden_by_modal: - self.minus_gizmo.hide = True - else: - gizmo_prefs = self.get_gizmo_prefs() - self.minus_gizmo.hide = not props.is_editing or props.number_of_treads <= 1 or not gizmo_prefs.minus - - def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props) -> None: + def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props: "BIMStairProperties") -> None: """Update dimension gizmo positions based on camera view direction.""" viewing_from_negative_y, viewing_from_negative_x = self.get_local_view_direction(context, mw) billboard_rot = gizmo.get_billboard_rotation(context) - total_run = self._get_stair_total_run(props) - riser_height = self._get_first_riser_height(props) + total_run = props.get_total_run() + riser_height = props.get_riser_height() self._update_overall_dimension_gizmos(mw, props, viewing_from_negative_y, viewing_from_negative_x, total_run) self._update_tread_dimension_gizmos(mw, props, viewing_from_negative_y, total_run, riser_height) @@ -774,57 +651,37 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self._update_editing_icon_positions(mw, props, viewing_from_negative_y, billboard_rot) def _update_overall_dimension_gizmos( - self, mw: Matrix, props, viewing_from_negative_y: bool, viewing_from_negative_x: bool, total_run: float + self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, viewing_from_negative_x: bool, total_run: float ) -> None: """Update overall dimension gizmos (total_length, width, height).""" - if gizmo := self.get_dimension_gizmo_if_visible("total_length_target"): - y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) - gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( - V_(0, y_pos, -self.GIZMO_OFFSET), (1, 0, 0) - ) + y_pos_offset = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) + x_pos = total_run + self.GIZMO_OFFSET if viewing_from_negative_x else -self.GIZMO_OFFSET - if gizmo := self.get_dimension_gizmo_if_visible("width"): - x_pos = total_run + self.GIZMO_OFFSET if viewing_from_negative_x else -self.GIZMO_OFFSET - gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( - V_(x_pos, 0, -self.GIZMO_OFFSET), (0, 1, 0) - ) - - if gizmo := self.get_dimension_gizmo_if_visible("height"): - y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) - gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( - V_(total_run + self.GIZMO_OFFSET, y_pos, 0), (0, 0, 1) - ) + self.set_dimension_gizmo_position("total_length_target", mw, V_(0, y_pos_offset, -self.GIZMO_OFFSET), (1, 0, 0)) + self.set_dimension_gizmo_position("width", mw, V_(x_pos, 0, -self.GIZMO_OFFSET), (0, 1, 0)) + self.set_dimension_gizmo_position("height", mw, V_(total_run + self.GIZMO_OFFSET, y_pos_offset, 0), (0, 0, 1)) def _update_tread_dimension_gizmos( - self, mw: Matrix, props, viewing_from_negative_y: bool, total_run: float, riser_height: float + self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, total_run: float, riser_height: float ) -> None: """Update tread-related dimension gizmos (tread_run, custom first/last tread).""" - if gizmo := self.get_dimension_gizmo_if_visible("tread_run"): - y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) - if props.custom_tread_lock: - x_offset, z_offset = 0, riser_height - else: - x_offset = props.custom_first_last_tread_run[0] - z_offset = riser_height * 2 - gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( - V_(x_offset, y_pos, z_offset), (1, 0, 0) - ) + y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) - if gizmo := self.get_dimension_gizmo_if_visible("custom_first_tread_run"): - y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) - gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( - V_(0, y_pos, riser_height), (1, 0, 0) - ) + # tread_run position depends on custom_tread_lock state + if props.custom_tread_lock: + tread_x, tread_z = 0, riser_height + else: + tread_x = props.custom_first_last_tread_run[0] + tread_z = riser_height * 2 + self.set_dimension_gizmo_position("tread_run", mw, V_(tread_x, y_pos, tread_z), (1, 0, 0)) - if gizmo := self.get_dimension_gizmo_if_visible("custom_last_tread_run"): - y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) - x_offset = total_run - props.custom_first_last_tread_run[1] - gizmo.matrix_basis = mw @ self.compose_gizmo_matrix( - V_(x_offset, y_pos, props.height), (1, 0, 0) - ) + self.set_dimension_gizmo_position("custom_first_tread_run", mw, V_(0, y_pos, riser_height), (1, 0, 0)) + + last_x = total_run - props.custom_first_last_tread_run[1] + self.set_dimension_gizmo_position("custom_last_tread_run", mw, V_(last_x, y_pos, props.height), (1, 0, 0)) def _update_detail_dimension_gizmos( - self, mw: Matrix, props, viewing_from_negative_y: bool, riser_height: float + self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, riser_height: float ) -> None: """Update detail dimension gizmos (nosing, tread depth, riser height).""" y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) @@ -835,25 +692,25 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self.set_dimension_gizmo_position("nosing_depth", mw, V_(-props.nosing_length, props.width / 2, riser_height), (0, 0, -1)) def _update_lock_gizmo_position( - self, mw: Matrix, props, viewing_from_negative_y: bool, billboard_rot: Matrix, total_run: float + self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, billboard_rot: Matrix, total_run: float ) -> None: """Update lock gizmo position based on Y view direction.""" y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) self.set_icon_gizmo_position( - "lock_gizmo", mw, total_run + 0.5, y_pos, -self.GIZMO_OFFSET, billboard_rot, scale=self.EDITING_ICON_SCALE + "lock_gizmo", mw, total_run + self.ICON_Z_OFFSET, y_pos, -self.GIZMO_OFFSET, billboard_rot, scale=self.EDITING_ICON_SCALE ) - def _update_editing_icon_positions(self, mw, props, viewing_from_negative_y, billboard_rot): + def _update_editing_icon_positions(self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, billboard_rot: Matrix) -> None: """Update editing icon positions, flipping Y based on viewing angle.""" if not props.is_editing: return - icon_z = props.height + 0.5 - y_pos = -self.GIZMO_OFFSET if viewing_from_negative_y else props.width + self.GIZMO_OFFSET + icon_z = props.height + self.ICON_Z_OFFSET + y_pos = self.get_icon_y_for_view(props, viewing_from_negative_y) self.set_icon_gizmo_position("validate_gizmo", mw, 0, y_pos, icon_z, billboard_rot) self.set_icon_gizmo_position("cancel_gizmo", mw, self.ICON_CANCEL_X, y_pos, icon_z, billboard_rot) - self.set_icon_gizmo_position("cycle_gizmo", mw, self.ICON_CYCLE_X, y_pos, icon_z, billboard_rot, scale=0.3) + self.set_icon_gizmo_position("cycle_gizmo", mw, self.ICON_CYCLE_X, y_pos, icon_z, billboard_rot, scale=self.ICON_CYCLE_SCALE) self.set_icon_gizmo_position( "tread_lock_gizmo", mw, self.ICON_TREAD_LOCK_X, y_pos, icon_z - self.EDITING_ICON_SCALE / 2, billboard_rot, scale=self.EDITING_ICON_SCALE diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index 3cf37e91ca..ad7de65556 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -31,9 +31,6 @@ from bonsai.bim.module.model.data import ( RailingData, RoofData, ) -from bonsai.bim.module.model.stair import regenerate_stair_mesh -from bonsai.bim.module.model.railing import update_railing_modifier_bmesh -from bonsai.bim.module.model.roof import update_roof_modifier_bmesh from collections.abc import Iterable from typing import Any, TYPE_CHECKING @@ -307,8 +304,6 @@ class BIM_PT_stair(bpy.types.Panel): row = self.layout.row(align=True) draw_stair_properties(self.layout, props) - - regenerate_stair_mesh(obj) else: calculated_params = StairData.data["calculated_params"] row.operator("bim.enable_editing_stair", icon="GREASEPENCIL", text="") @@ -565,9 +560,6 @@ class BIM_PT_railing(bpy.types.Panel): row.operator("bim.cancel_editing_railing", icon="CANCEL", text="") draw_railing_properties(self.layout, props) - - update_railing_modifier_bmesh(context) - elif props.is_editing_path: row.operator("bim.finish_editing_railing_path", icon="CHECKMARK", text="") row.operator("bim.cancel_editing_railing_path", icon="CANCEL", text="") @@ -623,8 +615,6 @@ class BIM_PT_roof(bpy.types.Panel): row.operator("bim.cancel_editing_roof", icon="CANCEL", text="") draw_roof_properties(self.layout, props) - - update_roof_modifier_bmesh(obj) elif props.is_editing_path: row.operator("bim.finish_editing_roof_path", icon="CHECKMARK", text="") row.operator("bim.cancel_editing_roof_path", icon="CANCEL", text="") diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index d899e12c7c..274d4288d9 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -39,47 +39,14 @@ import ifcopenshell.util.shape_builder import ifcopenshell.util.unit from bmesh.types import BMVert from mathutils import Vector, Matrix -from typing import get_args +from typing import get_args, TYPE_CHECKING + +if TYPE_CHECKING: + from bonsai.bim.module.model.prop import BIMWindowProperties V_ = tool.Blender.V_ - -# Window type visibility helpers for dimension gizmos -_MULLION_TYPES = frozenset(( - "DOUBLE_PANEL_VERTICAL", - "TRIPLE_PANEL_BOTTOM", - "TRIPLE_PANEL_TOP", - "TRIPLE_PANEL_LEFT", - "TRIPLE_PANEL_RIGHT", - "TRIPLE_PANEL_VERTICAL", -)) -_TRANSOM_TYPES = frozenset(( - "DOUBLE_PANEL_HORIZONTAL", - "TRIPLE_PANEL_BOTTOM", - "TRIPLE_PANEL_TOP", - "TRIPLE_PANEL_LEFT", - "TRIPLE_PANEL_RIGHT", - "TRIPLE_PANEL_HORIZONTAL", -)) - - -def _has_mullion(props) -> bool: - """Check if the window type uses mullions (vertical dividers).""" - return props.window_type in _MULLION_TYPES - - -def _has_second_mullion(props) -> bool: - """Check if the window type uses a second mullion.""" - return props.window_type == "TRIPLE_PANEL_VERTICAL" - - -def _has_transom(props) -> bool: - """Check if the window type uses transoms (horizontal dividers).""" - return props.window_type in _TRANSOM_TYPES - - -def _has_second_transom(props) -> bool: - """Check if the window type uses a second transom.""" - return props.window_type == "TRIPLE_PANEL_HORIZONTAL" +# Shorthand for gizmo offset constants used in DimensionGizmoConfig lambdas +_G = gizmo.BaseParametricGizmoGroup def update_window_modifier_representation(context: bpy.types.Context) -> None: @@ -488,7 +455,7 @@ class AddWindow(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Add Bonsai parametric window to the active IFC element" bl_options = {"REGISTER", "UNDO"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj element = tool.Ifc.get_entity(obj) @@ -522,7 +489,7 @@ class CancelEditingWindow(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Cancel editing and revert window parameters to their previous values" bl_options = {"REGISTER"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj element = tool.Ifc.get_entity(obj) @@ -551,7 +518,7 @@ class FinishEditingWindow(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Apply changes and finish editing window parameters" bl_options = {"REGISTER"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj element = tool.Ifc.get_entity(obj) @@ -584,7 +551,7 @@ class EnableEditingWindow(bpy.types.Operator, tool.Ifc.Operator): bl_description = "Enter edit mode to modify window parameters interactively" bl_options = {"REGISTER"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: obj = context.active_object assert obj props = tool.Model.get_window_props(obj) @@ -607,7 +574,7 @@ class RemoveWindow(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Remove Window" bl_options = {"REGISTER"} - def _execute(self, context): + def _execute(self, context: bpy.types.Context) -> set[str]: # noqa: ARG002 obj = context.active_object assert obj element = tool.Ifc.get_entity(obj) @@ -621,49 +588,46 @@ class RemoveWindow(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} -class CycleWindowType(bpy.types.Operator, tool.Ifc.Operator): - """Cycle through available window types.""" +class CycleWindowType(bpy.types.Operator, tool.Ifc.Operator, gizmo.CycleTypeMixin): + """Cycle through available window types. Shift+click to cycle in reverse.""" bl_idname = "bim.cycle_window_type" bl_label = "Cycle Window Type" bl_options = {"REGISTER", "UNDO"} - def _execute(self, context): - obj = tool.Blender.get_active_object() - if not obj: - return {"CANCELLED"} + element_checker = "is_window" + props_getter = "get_window_props" + type_literal = tool.Model.WindowType + type_attr = "window_type" - element = tool.Ifc.get_entity(obj) - if not element or not tool.Blender.Modifier.is_window(element): - return {"CANCELLED"} - - props = tool.Model.get_window_props(obj) - window_types = list(get_args(tool.Model.WindowType)) - current_index = window_types.index(props.window_type) if props.window_type in window_types else 0 - next_index = (current_index + 1) % len(window_types) - props.window_type = window_types[next_index] - - return {"FINISHED"} + def _execute(self, context: bpy.types.Context) -> set[str]: + return self._cycle_type(context) -def _compute_frame_depth(props) -> float: - """Get the first panel's frame depth value.""" - return props.frame_depth[0] +# Frame accessor factory - creates callbacks that delegate to BIMWindowProperties methods +def _make_frame_accessors( + attr_name: str, panel_index: int +) -> tuple["collections.abc.Callable[[BIMWindowProperties], float]", "collections.abc.Callable[[BIMWindowProperties, float], None]"]: + """Create compute/apply callbacks for frame properties at a specific panel index. + + Args: + attr_name: Property name ("frame_depth" or "frame_thickness") + panel_index: Panel index (0, 1, or 2) + + Returns: + Tuple of (compute_fn, apply_fn) that delegate to BIMWindowProperties methods + """ + return ( + lambda props: props.get_frame_value(attr_name, panel_index), + lambda props, value: props.set_frame_value(attr_name, panel_index, value), + ) -def _apply_frame_depth(props, value: float) -> None: - """Apply a new frame depth value to the first panel, preserving other panels.""" - props.frame_depth = (max(0.0, value),) + tuple(props.frame_depth[1:]) - - -def _compute_frame_thickness(props) -> float: - """Get the first panel's frame thickness value.""" - return props.frame_thickness[0] - - -def _apply_frame_thickness(props, value: float) -> None: - """Apply a new frame thickness value to the first panel, preserving other panels.""" - props.frame_thickness = (max(0.0, value),) + tuple(props.frame_thickness[1:]) +_frame_accessors = { + (attr, idx): _make_frame_accessors(attr, idx) + for attr in ("frame_depth", "frame_thickness") + for idx in range(3) +} class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): @@ -678,180 +642,147 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): cancel_editing_operator = "bim.cancel_editing_window" cycle_type_operator = "bim.cycle_window_type" + # matrix_position lambdas replace the get_dimension_matrix_* methods dimension_gizmo_props = [ - DimensionGizmoConfig(attr_name="overall_width", axis=(1, 0, 0), min_value=0.01, text_offset_sign=-1), - DimensionGizmoConfig(attr_name="overall_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start"), - DimensionGizmoConfig(attr_name="lining_offset", axis=(0, 1, 0)), - DimensionGizmoConfig(attr_name="lining_depth", axis=(0, 1, 0)), - DimensionGizmoConfig(attr_name="lining_thickness", axis=(1, 0, 0)), - DimensionGizmoConfig(attr_name="lining_to_panel_offset_x", axis=(1, 0, 0)), - DimensionGizmoConfig(attr_name="lining_to_panel_offset_y", axis=(0, 1, 0), min_value=-10.0), DimensionGizmoConfig( - attr_name="frame_depth", - axis=(0, -1, 0), - compute_value=_compute_frame_depth, - apply_value=_apply_frame_depth, + attr_name="overall_width", axis=(1, 0, 0), min_value=0.01, text_offset_sign=-1, + matrix_position=lambda p: V_(0, p.lining_offset - _G.GIZMO_OFFSET, -_G.GIZMO_OFFSET), ), DimensionGizmoConfig( - attr_name="frame_thickness", - axis=(1, 0, 0), - compute_value=_compute_frame_thickness, - apply_value=_apply_frame_thickness, + attr_name="overall_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start", + matrix_position=lambda p: V_(p.overall_width + _G.GIZMO_OFFSET, p.lining_offset - _G.GIZMO_OFFSET, 0), ), - DimensionGizmoConfig(attr_name="mullion_thickness", axis=(1, 0, 0), delta_scale=2.0, visibility_condition=_has_mullion), - DimensionGizmoConfig(attr_name="first_mullion_offset", axis=(1, 0, 0), visibility_condition=_has_mullion), - DimensionGizmoConfig(attr_name="second_mullion_offset", axis=(1, 0, 0), visibility_condition=_has_second_mullion), - DimensionGizmoConfig(attr_name="transom_thickness", axis=(0, 0, 1), delta_scale=2.0, visibility_condition=_has_transom), - DimensionGizmoConfig(attr_name="first_transom_offset", axis=(0, 0, 1), visibility_condition=_has_transom), - DimensionGizmoConfig(attr_name="second_transom_offset", axis=(0, 0, 1), visibility_condition=_has_second_transom), + DimensionGizmoConfig( + attr_name="lining_depth", axis=(0, 1, 0), + matrix_position=lambda p: V_(p.overall_width / 2, p.lining_offset, p.overall_height), + ), + DimensionGizmoConfig( + attr_name="lining_thickness", axis=(1, 0, 0), + matrix_position=lambda p: V_(0, p.lining_depth / 2 + p.lining_offset, p.overall_height / 2), + ), + DimensionGizmoConfig( + attr_name="lining_to_panel_offset_x", axis=(1, 0, 0), + matrix_position=lambda p: V_( + 0, + p.get_lining_to_panel_offset_y_full() + p.frame_depth[0] + p.lining_offset, + p.lining_to_panel_offset_x + ), + ), + DimensionGizmoConfig( + attr_name="lining_to_panel_offset_y", axis=(0, 1, 0), min_value=-10.0, + matrix_position=lambda p: V_( + p.overall_width - p.lining_to_panel_offset_x, + p.lining_depth + p.lining_offset, + p.lining_to_panel_offset_x + ), + ), + DimensionGizmoConfig( + attr_name="frame_depth", axis=(0, -1, 0), + compute_value=_frame_accessors[("frame_depth", 0)][0], + apply_value=_frame_accessors[("frame_depth", 0)][1], + matrix_position=lambda p: p.get_frame_position(0, is_depth=True), + ), + DimensionGizmoConfig( + attr_name="frame_thickness", axis=(1, 0, 0), + compute_value=_frame_accessors[("frame_thickness", 0)][0], + apply_value=_frame_accessors[("frame_thickness", 0)][1], + matrix_position=lambda p: p.get_frame_position(0, is_depth=False), + ), + DimensionGizmoConfig( + attr_name="second_frame_depth", axis=(0, -1, 0), + compute_value=_frame_accessors[("frame_depth", 1)][0], + apply_value=_frame_accessors[("frame_depth", 1)][1], + visibility_condition=lambda p: p.has_second_panel(), + matrix_position=lambda p: p.get_frame_position(1, is_depth=True), + ), + DimensionGizmoConfig( + attr_name="second_frame_thickness", axis=(1, 0, 0), + compute_value=_frame_accessors[("frame_thickness", 1)][0], + apply_value=_frame_accessors[("frame_thickness", 1)][1], + visibility_condition=lambda p: p.has_second_panel(), + matrix_position=lambda p: p.get_frame_position(1, is_depth=False), + ), + DimensionGizmoConfig( + attr_name="third_frame_depth", axis=(0, -1, 0), + compute_value=_frame_accessors[("frame_depth", 2)][0], + apply_value=_frame_accessors[("frame_depth", 2)][1], + visibility_condition=lambda p: p.has_third_panel(), + matrix_position=lambda p: p.get_frame_position(2, is_depth=True), + ), + DimensionGizmoConfig( + attr_name="third_frame_thickness", axis=(1, 0, 0), + compute_value=_frame_accessors[("frame_thickness", 2)][0], + apply_value=_frame_accessors[("frame_thickness", 2)][1], + visibility_condition=lambda p: p.has_third_panel(), + matrix_position=lambda p: p.get_frame_position(2, is_depth=False), + ), + DimensionGizmoConfig( + attr_name="mullion_thickness", axis=(1, 0, 0), delta_scale=2.0, + visibility_condition=lambda p: p.has_mullion(), + matrix_position=lambda p: V_( + p.first_mullion_offset - p.mullion_thickness / 2, + p.lining_offset, + p.overall_height / 2 + 3 * _G.GIZMO_STACK_OFFSET + ), + ), + DimensionGizmoConfig( + attr_name="first_mullion_offset", axis=(1, 0, 0), + visibility_condition=lambda p: p.has_mullion(), + matrix_position=lambda p: V_(0, p.lining_offset, p.overall_height / 2 + _G.GIZMO_STACK_OFFSET), + ), + DimensionGizmoConfig( + attr_name="second_mullion_offset", axis=(1, 0, 0), + visibility_condition=lambda p: p.has_second_mullion(), + matrix_position=lambda p: V_(0, p.lining_offset, p.overall_height / 2 + 2 * _G.GIZMO_STACK_OFFSET), + ), + DimensionGizmoConfig( + attr_name="transom_thickness", axis=(0, 0, 1), delta_scale=2.0, + visibility_condition=lambda p: p.has_transom(), + matrix_position=lambda p: V_( + p.overall_width / 2 + 2 * _G.GIZMO_STACK_OFFSET, + p.lining_offset, + p.first_transom_offset - p.transom_thickness / 2 + ), + ), + DimensionGizmoConfig( + attr_name="first_transom_offset", axis=(0, 0, 1), + visibility_condition=lambda p: p.has_transom(), + matrix_position=lambda p: V_(p.overall_width / 2, p.lining_offset, 0), + ), + DimensionGizmoConfig( + attr_name="second_transom_offset", axis=(0, 0, 1), + visibility_condition=lambda p: p.has_second_transom(), + matrix_position=lambda p: V_(p.overall_width / 2 + _G.GIZMO_STACK_OFFSET, p.lining_offset, 0), + ), + # lining_offset is handled specially in _update_dimension_gizmo_positions due to negative value support + DimensionGizmoConfig(attr_name="lining_offset", axis=(0, 1, 0), min_value=-10.0), ] + props_getter = "get_window_props" + gizmo_pref_name = "window" + @classmethod - def is_element_type(cls, element) -> bool: + def is_element_type(cls, element: ifcopenshell.entity_instance) -> bool: return tool.Blender.Modifier.is_window(element) - def get_props(self, obj: bpy.types.Object): - return tool.Model.get_window_props(obj) - - def get_gizmo_prefs(self): - prefs = tool.Blender.get_addon_preferences() - return prefs.gizmos.window - - def get_icon_y_offset(self, context: bpy.types.Context, mw: Matrix) -> float: - """Position icons beyond the furthest geometry extent based on view direction.""" - obj = context.active_object - if not obj: - return self.ICON_Y_OFFSET - props = self.get_props(obj) + def get_icon_y_extent(self, props: "BIMWindowProperties") -> tuple[float, float]: + """Get Y extents for window icon positioning. + Window geometry can extend asymmetrically in +Y and -Y directions + depending on lining_offset (which can be negative). + """ furthest_positive_y = ( max(0, props.lining_offset) + props.lining_depth + props.lining_to_panel_offset_y + + 2 * self.GIZMO_OFFSET ) - furthest_negative_y = min(0, props.lining_offset) + furthest_negative_y = abs(min(0, props.lining_offset)) + 2 * self.GIZMO_OFFSET + return (furthest_positive_y, furthest_negative_y) - viewing_from_negative_y, _ = self.get_local_view_direction(context, mw) - if viewing_from_negative_y: - return furthest_negative_y - 2 * self.GIZMO_OFFSET - return furthest_positive_y + 2 * self.GIZMO_OFFSET + # Window uses base class setup() and refresh() - no element-specific gizmos needed - def get_dimension_matrix_lining_offset(self, props) -> Matrix: - return self.compose_gizmo_matrix(V_(0, 0, 0), (0, 1, 0)) - - def get_dimension_matrix_lining_depth(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width / 2, props.lining_offset, props.overall_height), (0, 1, 0) - ) - - def get_dimension_matrix_lining_thickness(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(0, props.lining_depth / 2 + props.lining_offset, props.overall_height / 2), (1, 0, 0) - ) - - @staticmethod - def _get_lining_to_panel_offset_y_full(props) -> float: - """Get the full Y offset for lining-to-panel positioning.""" - return (props.lining_depth - props.frame_depth[0]) + props.lining_to_panel_offset_y - - def get_dimension_matrix_lining_to_panel_offset_x(self, props) -> Matrix: - y_full = self._get_lining_to_panel_offset_y_full(props) - return self.compose_gizmo_matrix( - V_(0, y_full + props.frame_depth[0] + props.lining_offset, props.lining_to_panel_offset_x), (1, 0, 0) - ) - - def get_dimension_matrix_lining_to_panel_offset_y(self, props) -> Matrix: - y_start = props.lining_depth + props.lining_offset - return self.compose_gizmo_matrix( - V_(props.overall_width - props.lining_to_panel_offset_x, y_start, props.lining_to_panel_offset_x), - (0, 1, 0), - ) - - def get_dimension_matrix_frame_depth(self, props) -> Matrix: - y_full = self._get_lining_to_panel_offset_y_full(props) - y_start = y_full + props.frame_depth[0] + props.lining_offset - return self.compose_gizmo_matrix( - V_(props.lining_to_panel_offset_x, y_start, props.lining_to_panel_offset_x), (0, -1, 0) - ) - - def get_dimension_matrix_frame_thickness(self, props) -> Matrix: - y_full = self._get_lining_to_panel_offset_y_full(props) - y_pos = y_full + props.frame_depth[0] + props.lining_offset - return self.compose_gizmo_matrix( - V_(props.lining_to_panel_offset_x, y_pos, props.overall_height / 2), (1, 0, 0) - ) - - def get_dimension_matrix_mullion_thickness(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.first_mullion_offset - props.mullion_thickness / 2, props.lining_offset, props.overall_height / 2), - (1, 0, 0), - ) - - def get_dimension_matrix_first_mullion_offset(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(0, props.lining_offset, props.overall_height / 2), (1, 0, 0) - ) - - def get_dimension_matrix_second_mullion_offset(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(0, props.lining_offset, props.overall_height / 2 + 0.1), (1, 0, 0) - ) - - def get_dimension_matrix_transom_thickness(self, props) -> Matrix: - # Offset X when panels are horizontal to avoid overlap with mullion gizmo - x_pos = props.overall_width / 2 - 0.1 if _has_transom(props) else props.overall_width / 2 - return self.compose_gizmo_matrix( - V_(x_pos, props.lining_offset, props.first_transom_offset - props.transom_thickness / 2), - (0, 0, 1), - ) - - def get_dimension_matrix_first_transom_offset(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width / 2, props.lining_offset, 0), (0, 0, 1) - ) - - def get_dimension_matrix_second_transom_offset(self, props) -> Matrix: - return self.compose_gizmo_matrix( - V_(props.overall_width / 2 + 0.1, props.lining_offset, 0), (0, 0, 1) - ) - - def get_dimension_matrix_overall_width(self, props) -> Matrix: - """Position width dimension below the window.""" - return self.compose_gizmo_matrix( - V_(0, props.lining_offset - self.GIZMO_OFFSET, -self.GIZMO_OFFSET), (1, 0, 0) - ) - - def get_dimension_matrix_overall_height(self, props) -> Matrix: - """Position height dimension to the side of the window.""" - return self.compose_gizmo_matrix( - V_(props.overall_width + self.GIZMO_OFFSET, props.lining_offset - self.GIZMO_OFFSET, 0), (0, 0, 1) - ) - - def setup(self, context: bpy.types.Context) -> None: - self.setup_editing_gizmos(context) - self.setup_dimension_gizmos(context) - - def refresh(self, context: bpy.types.Context) -> None: - if not self.is_setup_complete(): - return - obj = context.active_object - if not obj: - return - - props = self.get_props(obj) - mw = obj.matrix_world - self.update_editing_gizmos(context, mw, props) - self.update_dimension_gizmos(mw, props) - - def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props) -> None: + def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props: "BIMWindowProperties") -> None: """Update dimension gizmo positions based on camera view direction.""" - viewing_from_negative_y, viewing_from_negative_x = self.get_local_view_direction(context, mw) - y_pos = self.get_lining_y_position_for_view(props, viewing_from_negative_y) - - self.set_dimension_gizmo_position("overall_width", mw, V_(0, y_pos, -self.GIZMO_OFFSET), (1, 0, 0)) - - if viewing_from_negative_x: - x_pos = -self.GIZMO_OFFSET - else: - x_pos = props.overall_width + self.GIZMO_OFFSET - self.set_dimension_gizmo_position("overall_height", mw, V_(x_pos, y_pos, 0), (0, 0, 1)) + # Window uses base implementation with default casing_offset=0 + self._update_view_dependent_dimensions(context, mw, props) From 0ee084b5d999b06d0ea80cda5b220bf8d300fd32 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 1 Dec 2025 17:34:37 -0600 Subject: [PATCH 249/657] Support IfcAnnotation to IfcAnnotation assignment in AssignSelectedObjectAsProduct --- .../bonsai/bim/module/drawing/operator.py | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index d4b24a5ae7..db46b08e60 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3275,15 +3275,31 @@ class AssignSelectedObjectAsProduct(bpy.types.Operator): element1 = tool.Ifc.get_entity(obj1) element2 = tool.Ifc.get_entity(obj2) assert element1 and element2 - if element1.is_a("IfcAnnotation"): + + # Check if at least one object is an IfcAnnotation + is_annotation1 = element1.is_a("IfcAnnotation") + is_annotation2 = element2.is_a("IfcAnnotation") + + if not (is_annotation1 or is_annotation2): + self.report({"ERROR"}, "At least one of the selected objects must be IfcAnnotation.") + return {"CANCELLED"} + + # If both are annotations, use the currently active object as relating product + if is_annotation1 and is_annotation2: + active_obj = context.active_object + if active_obj == obj1: + other_selected_object = obj1 + bpy.context.view_layer.objects.active = obj2 + else: + other_selected_object = obj2 + bpy.context.view_layer.objects.active = obj1 + # If only one is an annotation, make it the active object + elif is_annotation1: other_selected_object = obj2 bpy.context.view_layer.objects.active = obj1 - elif element2.is_a("IfcAnnotation"): + else: other_selected_object = obj1 bpy.context.view_layer.objects.active = obj2 - else: - self.report({"ERROR"}, "One of the selected objects must be IfcAnnotation.") - return {"CANCELLED"} assert (active_obj := context.active_object) props = tool.Drawing.get_object_assigned_product_props(active_obj) From dfb8298ecfb77c172efa36d030b535fa59eae154 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 16:07:54 +0500 Subject: [PATCH 250/657] black . --- .../bonsai/bim/module/drawing/gizmos.py | 102 +++++++++--------- .../bonsai/bim/module/drawing/operator.py | 8 +- .../bonsai/bim/module/geometry/operator.py | 36 +++++-- src/bonsai/bonsai/bim/module/model/door.py | 74 ++++++++----- src/bonsai/bonsai/bim/module/model/opening.py | 4 +- src/bonsai/bonsai/bim/module/model/prop.py | 42 ++++++-- src/bonsai/bonsai/bim/module/model/stair.py | 84 +++++++++++---- src/bonsai/bonsai/bim/module/model/window.py | 89 +++++++++------ src/bonsai/bonsai/bim/module/project/ui.py | 3 - src/bonsai/bonsai/bim/module/type/operator.py | 26 +++-- src/bonsai/bonsai/tool/geometry.py | 53 +++++---- 11 files changed, 330 insertions(+), 191 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/gizmos.py b/src/bonsai/bonsai/bim/module/drawing/gizmos.py index e5aa3173f1..c402dde1e1 100644 --- a/src/bonsai/bonsai/bim/module/drawing/gizmos.py +++ b/src/bonsai/bonsai/bim/module/drawing/gizmos.py @@ -1558,9 +1558,7 @@ def snap_to_mesh( return _snap_manager.snap_to_mesh(location, context, active_obj, mouse_coords, include_active) -def build_snap_cache( - context: bpy.types.Context, active_obj: bpy.types.Object, include_active: bool = False -) -> None: +def build_snap_cache(context: bpy.types.Context, active_obj: bpy.types.Object, include_active: bool = False) -> None: _snap_manager.build_snap_cache(context, active_obj, include_active) @@ -2013,7 +2011,6 @@ class UglyDotGizmo(OffsetHandle, types.Gizmo): self.draw_custom_shape(self.custom_shape, select_id=select_id) - class ExtrusionGuidesGizmo(CustomGizmo, types.Gizmo): """Extrusion guides @@ -2047,7 +2044,6 @@ class ExtrusionGuidesGizmo(CustomGizmo, types.Gizmo): self.matrix_offset.col[2][2] = depth # z-scaled - class ExtrusionWidget(types.GizmoGroup): bl_idname = "bim.extrusion_widget" bl_label = "Extrusion Gizmos" @@ -2098,7 +2094,6 @@ class ExtrusionWidget(types.GizmoGroup): gz.target_set_prop("depth", prop, "value") gz.scale_value = scale_value - def refresh(self, context: bpy.types.Context) -> None: """updating gizmos""" target = context.active_object @@ -2146,10 +2141,12 @@ class ExtrusionWidget(types.GizmoGroup): scale_value /= si_conversions["thou"] return scale_value + # ============================================================================ # Core Gizmo Classes # ============================================================================ + class BIM_OT_gizmo_value_input(bpy.types.Operator): """Enter a numeric value for a gizmo property. Click or Enter to confirm, ESC to cancel.""" @@ -2462,10 +2459,7 @@ class GizmoMovable(bpy.types.Gizmo): self.keyboard_input.reset() should_invoke_keyboard = ( - not cancel - and hasattr(self, "_has_dragged") - and not self._has_dragged - and self.move_set_cb is not None + not cancel and hasattr(self, "_has_dragged") and not self._has_dragged and self.move_set_cb is not None ) if should_invoke_keyboard: @@ -2528,7 +2522,7 @@ class GizmoMovable(bpy.types.Gizmo): if not self._has_dragged and hasattr(self, "_start_mouse_pos"): dx = current_coord[0] - self._start_mouse_pos[0] dy = current_coord[1] - self._start_mouse_pos[1] - if (dx * dx + dy * dy) > (self.DRAG_THRESHOLD ** 2): + if (dx * dx + dy * dy) > (self.DRAG_THRESHOLD**2): self._has_dragged = True view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) @@ -2576,9 +2570,7 @@ class GizmoMovable(bpy.types.Gizmo): return {"RUNNING_MODAL"} - def _handle_keyboard_input( - self, context: bpy.types.Context, event: bpy.types.Event - ) -> set[str] | None: + def _handle_keyboard_input(self, context: bpy.types.Context, event: bpy.types.Event) -> set[str] | None: """Handle keyboard numeric input.""" kb = self.keyboard_input @@ -3266,10 +3258,16 @@ class GizmoArrow2D(GizmoMovable): return ( # Shaft - (0, -w, 0), (shaft, -w, 0), (0, w, 0), - (0, w, 0), (shaft, -w, 0), (shaft, w, 0), + (0, -w, 0), + (shaft, -w, 0), + (0, w, 0), + (0, w, 0), + (shaft, -w, 0), + (shaft, w, 0), # Head - (shaft, -hw, 0), (shaft + head, 0, 0), (shaft, hw, 0), + (shaft, -hw, 0), + (shaft + head, 0, 0), + (shaft, hw, 0), ) def setup(self) -> None: @@ -3434,14 +3432,30 @@ class GizmoDimension(GizmoMovable): """Generate a simple clickable bar shape (unit length along X).""" hw = self.HIT_WIDTH / 2 return ( - (0, -hw, -hw), (1, -hw, -hw), (0, hw, -hw), - (0, hw, -hw), (1, -hw, -hw), (1, hw, -hw), - (0, -hw, hw), (0, hw, hw), (1, -hw, hw), - (1, -hw, hw), (0, hw, hw), (1, hw, hw), - (0, -hw, -hw), (0, -hw, hw), (1, -hw, -hw), - (1, -hw, -hw), (0, -hw, hw), (1, -hw, hw), - (0, hw, -hw), (1, hw, -hw), (0, hw, hw), - (0, hw, hw), (1, hw, -hw), (1, hw, hw), + (0, -hw, -hw), + (1, -hw, -hw), + (0, hw, -hw), + (0, hw, -hw), + (1, -hw, -hw), + (1, hw, -hw), + (0, -hw, hw), + (0, hw, hw), + (1, -hw, hw), + (1, -hw, hw), + (0, hw, hw), + (1, hw, hw), + (0, -hw, -hw), + (0, -hw, hw), + (1, -hw, -hw), + (1, -hw, -hw), + (0, -hw, hw), + (1, -hw, hw), + (0, hw, -hw), + (1, hw, -hw), + (0, hw, hw), + (0, hw, hw), + (1, hw, -hw), + (1, hw, hw), ) def setup(self) -> None: @@ -3483,9 +3497,7 @@ class GizmoDimension(GizmoMovable): display_value=getattr(self, "_display_value", self._dimension_length), ) - def _calculate_screen_endpoints( - self, context: bpy.types.Context - ) -> tuple[Vector, Vector, Vector, float] | None: + def _calculate_screen_endpoints(self, context: bpy.types.Context) -> tuple[Vector, Vector, Vector, float] | None: """Calculate screen-space endpoints and direction for the dimension line. Returns: @@ -3726,7 +3738,7 @@ class GizmoDimension(GizmoMovable): if not self._has_dragged and hasattr(self, "_start_mouse_pos"): dx = current_coord[0] - self._start_mouse_pos[0] dy = current_coord[1] - self._start_mouse_pos[1] - if (dx * dx + dy * dy) > (self.DRAG_THRESHOLD ** 2): + if (dx * dx + dy * dy) > (self.DRAG_THRESHOLD**2): self._has_dragged = True view_origin = region_2d_to_origin_3d(region, rv3d, current_coord) view_direction = region_2d_to_vector_3d(region, rv3d, current_coord) @@ -3815,10 +3827,7 @@ class GizmoDimension(GizmoMovable): self.keyboard_input.reset() should_invoke_keyboard = ( - not cancel - and hasattr(self, "_has_dragged") - and not self._has_dragged - and self.move_set_cb is not None + not cancel and hasattr(self, "_has_dragged") and not self._has_dragged and self.move_set_cb is not None ) if should_invoke_keyboard: @@ -3989,7 +3998,7 @@ class BaseParametricGizmoGroup: GIZMO_CLAMP_MAX = 10000.0 # Maximum value for dimension clamping (meters) # Pre-computed flip matrix for negative value handling (180° rotation around Z) - FLIP_MATRIX = Matrix.Rotation(math.pi, 4, 'Z') + FLIP_MATRIX = Matrix.Rotation(math.pi, 4, "Z") # === Icon Gizmo Layout (meters) === # Icons are positioned in a horizontal row above the element: @@ -4073,9 +4082,7 @@ class BaseParametricGizmoGroup: from_neg_y, from_neg_x = self.get_local_view_direction(context, world_matrix) return ViewDirection(from_negative_y=from_neg_y, from_negative_x=from_neg_x) - def update_gizmo_visibility( - self, gizmo: bpy.types.Gizmo, is_editing: bool, pref_enabled: bool - ) -> bool: + def update_gizmo_visibility(self, gizmo: bpy.types.Gizmo, is_editing: bool, pref_enabled: bool) -> bool: """Update gizmo visibility based on modal state, editing state, and preference. Consolidates the common pattern: @@ -4154,9 +4161,7 @@ class BaseParametricGizmoGroup: """ return Matrix.Translation(translation) @ self.get_axis_rotation_matrix(axis) - def get_lining_y_position_for_view( - self, props, viewing_from_negative_y: bool, use_offset: bool = True - ) -> float: + def get_lining_y_position_for_view(self, props, viewing_from_negative_y: bool, use_offset: bool = True) -> float: """Get Y position for lining-based elements (doors, windows) based on view direction. For elements with lining_offset property, this calculates the Y position @@ -4207,9 +4212,7 @@ class BaseParametricGizmoGroup: Override in subclass if different positioning is needed. """ width = getattr(props, "overall_width", 0) - return self.compose_gizmo_matrix( - Vector((width + self.GIZMO_OFFSET, 0, -self.GIZMO_OFFSET)), (0, 1, 0) - ) + return self.compose_gizmo_matrix(Vector((width + self.GIZMO_OFFSET, 0, -self.GIZMO_OFFSET)), (0, 1, 0)) def get_casing_offset(self, props) -> float: """Get casing offset for view-dependent dimension positioning. @@ -4219,9 +4222,7 @@ class BaseParametricGizmoGroup: """ return 0.0 - def _update_view_dependent_dimensions( - self, context: bpy.types.Context, mw: Matrix, props - ) -> None: + def _update_view_dependent_dimensions(self, context: bpy.types.Context, mw: Matrix, props) -> None: """Update overall_width, overall_height, and lining_offset based on view direction. This base implementation handles the common pattern for door/window gizmos. @@ -4358,9 +4359,7 @@ class BaseParametricGizmoGroup: self.update_dimension_gizmos(mw, props) self._refresh_element_specific(context, mw, props) - def _refresh_element_specific( - self, context: bpy.types.Context, mw: "Matrix", props # noqa: ARG002 - ) -> None: + def _refresh_element_specific(self, context: bpy.types.Context, mw: "Matrix", props) -> None: # noqa: ARG002 """Override for element-specific refresh logic. Called after update_editing_gizmos and update_dimension_gizmos. @@ -4383,6 +4382,7 @@ class BaseParametricGizmoGroup: if self.props_getter: return getattr(tool.Model, self.props_getter)(obj) raise NotImplementedError("Subclass must define props_getter or override get_props()") + @staticmethod def get_addon_prefs(): """Get addon preferences (cached accessor).""" @@ -4803,7 +4803,9 @@ class BaseParametricGizmoGroup: self.cycle_gizmo.hide = self.is_gizmo_hidden_by_modal(self.cycle_gizmo) local_pos_cycle = Vector((self.ICON_VALIDATE_X + self.ICON_CYCLE_X, icon_y, icon_z)) world_pos_cycle = mw @ local_pos_cycle - self.cycle_gizmo.matrix_basis = Matrix.Translation(world_pos_cycle) @ billboard_rot @ Matrix.Scale(0.30, 4) + self.cycle_gizmo.matrix_basis = ( + Matrix.Translation(world_pos_cycle) @ billboard_rot @ Matrix.Scale(0.30, 4) + ) else: self.pen_gizmo.hide = self.is_gizmo_hidden_by_modal(self.pen_gizmo) self.pen_gizmo.matrix_basis = icon_matrix_base diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index db46b08e60..0648e58a1f 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -1007,7 +1007,7 @@ class CreateDrawing(bpy.types.Operator): for polygon in closed_polygons.geoms: # Less than 0.1mm2 is not worth styling on sheet - if polygon.area < .1: + if polygon.area < 0.1: continue centroid = polygon.centroid centroid = centroid if polygon.contains(centroid) else polygon.representative_point() @@ -3275,15 +3275,15 @@ class AssignSelectedObjectAsProduct(bpy.types.Operator): element1 = tool.Ifc.get_entity(obj1) element2 = tool.Ifc.get_entity(obj2) assert element1 and element2 - + # Check if at least one object is an IfcAnnotation is_annotation1 = element1.is_a("IfcAnnotation") is_annotation2 = element2.is_a("IfcAnnotation") - + if not (is_annotation1 or is_annotation2): self.report({"ERROR"}, "At least one of the selected objects must be IfcAnnotation.") return {"CANCELLED"} - + # If both are annotations, use the currently active object as relating product if is_annotation1 and is_annotation2: active_obj = context.active_object diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index ca54376c5f..174406a5da 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2409,14 +2409,14 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): props = tool.Geometry.get_geometry_props() item = tool.Geometry.get_active_representation(obj) assert item - + # Fix vertex order for annotation items rep_obj = props.representation_obj if rep_obj: element = tool.Ifc.get_entity(rep_obj) if element and self._is_annotation_object(element): tool.Geometry.ensure_annotation_vertex_order(obj) - + if tool.Geometry.is_meshlike_item(item): if tool.Geometry.is_geometric_data(obj.data) and ( item.is_a("IfcVertex") or item.is_a("IfcEdge") or obj.data.polygons @@ -2560,12 +2560,12 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): """Check if element is an annotation object that needs vertex order preservation.""" if not element.is_a("IfcAnnotation"): return False - + # Object types that have semantic vertex order (arrow direction, text position) annotation_types_with_order = { "TEXT_LEADER", "DIMENSION", - "RADIUS", + "RADIUS", "DIAMETER", "ANGLE", "FALL", @@ -2578,7 +2578,7 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): "SECTION", "ELEVATION", } - + return element.ObjectType in annotation_types_with_order @@ -3408,11 +3408,27 @@ class ImportRepresentationItems(bpy.types.Operator, tool.Ifc.Operator): tool.Root.reload_item_decorator() element = tool.Ifc.get_entity(obj) - if element and element.is_a("IfcAnnotation") and element.ObjectType in { - "TEXT_LEADER", "DIMENSION", "RADIUS", "DIAMETER", "ANGLE", - "FALL", "SLOPE_ANGLE", "SLOPE_FRACTION", "SLOPE_PERCENT", - "STAIR_ARROW", "PLAN_LEVEL", "SECTION_LEVEL", "SECTION", "ELEVATION" - }: + if ( + element + and element.is_a("IfcAnnotation") + and element.ObjectType + in { + "TEXT_LEADER", + "DIMENSION", + "RADIUS", + "DIAMETER", + "ANGLE", + "FALL", + "SLOPE_ANGLE", + "SLOPE_FRACTION", + "SLOPE_PERCENT", + "STAIR_ARROW", + "PLAN_LEVEL", + "SECTION_LEVEL", + "SECTION", + "ELEVATION", + } + ): for item_obj_data in props.item_objs: item_obj = item_obj_data.obj if item_obj and isinstance(item_obj.data, bpy.types.Mesh) and item_obj.data.vertices: diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index ee9230b016..26d1a1a7fb 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -779,89 +779,105 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): # matrix_position lambdas replace the get_dimension_matrix_* methods dimension_gizmo_props = [ DimensionGizmoConfig( - attr_name="overall_width", axis=(1, 0, 0), min_value=0.01, text_offset_sign=-1, + attr_name="overall_width", + axis=(1, 0, 0), + min_value=0.01, + text_offset_sign=-1, # Position set dynamically in _update_dimension_gizmo_positions based on view ), DimensionGizmoConfig( - attr_name="overall_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start", + attr_name="overall_height", + axis=(0, 0, 1), + min_value=0.01, + text_alignment="start", # Position set dynamically in _update_dimension_gizmo_positions based on view ), DimensionGizmoConfig( - attr_name="threshold_thickness", axis=(0, 0, 1), + attr_name="threshold_thickness", + axis=(0, 0, 1), matrix_position=lambda p: V_(p.overall_width / 2, p.threshold_offset + p.threshold_depth, 0), ), DimensionGizmoConfig( - attr_name="threshold_depth", axis=(0, 1, 0), + attr_name="threshold_depth", + axis=(0, 1, 0), visibility_condition=lambda p: p.has_threshold_depth(), matrix_position=lambda p: V_(p.overall_width / 2, p.threshold_offset, p.threshold_thickness), ), DimensionGizmoConfig( - attr_name="threshold_offset", axis=(0, 1, 0), + attr_name="threshold_offset", + axis=(0, 1, 0), matrix_position=lambda p: V_(p.overall_width / 2 - _G.GIZMO_STACK_OFFSET, 0, p.threshold_thickness), ), DimensionGizmoConfig( - attr_name="lining_offset", axis=(0, 1, 0), min_value=-10.0, + attr_name="lining_offset", + axis=(0, 1, 0), + min_value=-10.0, # Position set dynamically in _update_dimension_gizmo_positions based on view ), DimensionGizmoConfig( - attr_name="lining_depth", axis=(0, 1, 0), + attr_name="lining_depth", + axis=(0, 1, 0), matrix_position=lambda p: V_(p.overall_width, p.lining_offset, p.overall_height), ), DimensionGizmoConfig( - attr_name="lining_thickness", axis=(-1, 0, 0), + attr_name="lining_thickness", + axis=(-1, 0, 0), matrix_position=lambda p: V_(p.overall_width, p.lining_depth / 2, p.overall_height / 2), ), DimensionGizmoConfig( - attr_name="transom_offset", axis=(0, 0, 1), + attr_name="transom_offset", + axis=(0, 0, 1), visibility_condition=lambda p: p.has_transom(), matrix_position=lambda p: V_(p.overall_width / 2, p.lining_offset, 0), ), DimensionGizmoConfig( - attr_name="transom_thickness", axis=(0, 0, 1), + attr_name="transom_thickness", + axis=(0, 0, 1), matrix_position=lambda p: V_(p.overall_width / 2, p.lining_offset, p.transom_offset), ), DimensionGizmoConfig( - attr_name="casing_thickness", axis=(-1, 0, 0), + attr_name="casing_thickness", + axis=(-1, 0, 0), visibility_condition=lambda p: p.has_casing(), matrix_position=lambda p: V_( - p.lining_thickness, - p.lining_depth + p.lining_offset + p.casing_depth / 2, - p.overall_height / 2 + p.lining_thickness, p.lining_depth + p.lining_offset + p.casing_depth / 2, p.overall_height / 2 ), ), DimensionGizmoConfig( - attr_name="casing_depth", axis=(0, 1, 0), + attr_name="casing_depth", + axis=(0, 1, 0), visibility_condition=lambda p: p.has_casing_depth(), matrix_position=lambda p: V_( - p.lining_thickness - p.casing_thickness, - p.lining_depth + p.lining_offset, - p.overall_height / 2 + p.lining_thickness - p.casing_thickness, p.lining_depth + p.lining_offset, p.overall_height / 2 ), ), DimensionGizmoConfig( - attr_name="panel_depth", axis=(0, 1, 0), + attr_name="panel_depth", + axis=(0, 1, 0), matrix_position=lambda p: V_( p.lining_to_panel_offset_x + p.overall_width * p.panel_width_ratio / 2, p.lining_offset + p.lining_to_panel_offset_y, - p.threshold_thickness + p.get_panel_center_z() + p.threshold_thickness + p.get_panel_center_z(), ), ), DimensionGizmoConfig( - attr_name="frame_thickness", axis=(-1, 0, 0), + attr_name="frame_thickness", + axis=(-1, 0, 0), visibility_condition=lambda p: p.has_transom(), matrix_position=lambda p: V_( p.overall_width, p.lining_offset + p.lining_to_panel_offset_y + p.frame_depth / 2, - p.get_transom_window_center_z() + p.get_transom_window_center_z(), ), ), DimensionGizmoConfig( - attr_name="frame_depth", axis=(0, 1, 0), + attr_name="frame_depth", + axis=(0, 1, 0), visibility_condition=lambda p: p.has_transom(), matrix_position=lambda p: V_( p.overall_width - p.frame_thickness, p.lining_offset + p.lining_to_panel_offset_y, - p.get_transom_window_center_z() + p.get_transom_window_center_z(), ), ), ] @@ -895,12 +911,14 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): special_color = prefs.decorator_color_special[:3] self.gizmo_door_type = self.create_arc_gizmo( - special_color, "bim.toggle_door_swing", + special_color, + "bim.toggle_door_swing", prop_path="BIMDoorProperties.door_type", flip_geometry=False, ) self.gizmo_flip_arc = self.create_arc_gizmo( - inactive_color, "bim.toggle_door_swing", + inactive_color, + "bim.toggle_door_swing", prop_path="BIMDoorProperties.door_type", flip_geometry=True, flip_local_axes="XY", @@ -916,7 +934,9 @@ class GizmoDoorEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): """Override to return casing_thickness when lining_offset is 0.""" return props.get_casing_offset() - def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props: "BIMDoorProperties") -> None: + def _update_dimension_gizmo_positions( + self, context: bpy.types.Context, mw: Matrix, props: "BIMDoorProperties" + ) -> None: """Update dimension gizmo positions based on camera view direction.""" self._update_view_dependent_dimensions(context, mw, props) diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index 11c80041e6..958716954b 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -417,12 +417,14 @@ class RecalculateFill(bpy.types.Operator, tool.Ifc.Operator): representation=representation, ) - #Refresh cut decorator + # Refresh cut decorator DecoratorData.cut_cache.clear() DecoratorData.fill_cache.clear() DecoratorData.slice_cache.clear() return {"FINISHED"} + + class FlipFill(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.flip_fill" bl_label = "Flip Fill" diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 0689d4a100..ce657c5925 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -171,6 +171,7 @@ def _get_updater(module_name: str, func_name: str) -> Callable: cache_key = f"{module_name}.{func_name}" if cache_key not in _updater_cache: import importlib + module = importlib.import_module(f"bonsai.bim.module.model.{module_name}") _updater_cache[cache_key] = getattr(module, func_name) return _updater_cache[cache_key] @@ -476,12 +477,18 @@ class BIMStairProperties(PropertyGroup): name="Lock Total Length", description="Lock Total Length when changing number of treads or tread run", ) - tread_depth: bpy.props.FloatProperty(name="Tread Depth", default=0.25, min=0.01, subtype="DISTANCE", update=update_stair) + tread_depth: bpy.props.FloatProperty( + name="Tread Depth", default=0.25, min=0.01, subtype="DISTANCE", update=update_stair + ) tread_run: bpy.props.FloatProperty( name="Tread Run", default=0.3, min=0.01, subtype="DISTANCE", update=update_tread_run ) - base_slab_depth: bpy.props.FloatProperty(name="Base Slab Depth", default=0.25, min=0, subtype="DISTANCE", update=update_stair) - top_slab_depth: bpy.props.FloatProperty(name="Top Slab Depth", default=0.25, min=0, subtype="DISTANCE", update=update_stair) + base_slab_depth: bpy.props.FloatProperty( + name="Base Slab Depth", default=0.25, min=0, subtype="DISTANCE", update=update_stair + ) + top_slab_depth: bpy.props.FloatProperty( + name="Top Slab Depth", default=0.25, min=0, subtype="DISTANCE", update=update_stair + ) has_top_nib: bpy.props.BoolProperty(name="Has Top Nib", default=True, update=update_stair) stair_type: bpy.props.EnumProperty( name="Stair Type", @@ -515,7 +522,12 @@ class BIMStairProperties(PropertyGroup): 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", update=update_stair + name="Nosing Depth", + description="Depth of the tread's nosing", + min=0, + default=0, + unit="LENGTH", + update=update_stair, ) if TYPE_CHECKING: @@ -1087,7 +1099,7 @@ class BIMWindowProperties(PropertyGroup): value: New value (clamped to min 0.0) """ current = getattr(self, attr_name) - new_value = tuple(current[:panel_index]) + (max(0.0, value),) + tuple(current[panel_index + 1:]) + new_value = tuple(current[:panel_index]) + (max(0.0, value),) + tuple(current[panel_index + 1 :]) setattr(self, attr_name, new_value) @@ -1401,7 +1413,10 @@ class BIMRailingProperties(PropertyGroup): is_editing_path: bpy.props.BoolProperty(default=False) railing_type: bpy.props.EnumProperty( - name="Railing Type", items=[(i, i, "") for i in get_args(RailingType)], default="FRAMELESS_PANEL", update=update_railing + name="Railing Type", + items=[(i, i, "") for i in get_args(RailingType)], + default="FRAMELESS_PANEL", + update=update_railing, ) height: bpy.props.FloatProperty(name="Height", default=1.0, subtype="DISTANCE", update=update_railing) thickness: bpy.props.FloatProperty(name="Thickness", default=0.050, subtype="DISTANCE", update=update_railing) @@ -1423,7 +1438,9 @@ class BIMRailingProperties(PropertyGroup): subtype="DISTANCE", update=update_railing, ) - railing_diameter: bpy.props.FloatProperty(name="Railing Diameter", default=0.050, subtype="DISTANCE", update=update_railing) + railing_diameter: bpy.props.FloatProperty( + name="Railing Diameter", default=0.050, subtype="DISTANCE", update=update_railing + ) clear_width: bpy.props.FloatProperty( name="Clear Width", default=0.040, @@ -1529,10 +1546,17 @@ class BIMRoofProperties(PropertyGroup): name="Roof Type", items=[(i, i, "") for i in get_args(RoofType)], default="HIP/GABLE ROOF", update=update_roof ) generation_method: bpy.props.EnumProperty( - name="Roof Generation Method", items=[(i, i, "") for i in get_args(RoofGenerationMethod)], default="ANGLE", update=update_roof + name="Roof Generation Method", + items=[(i, i, "") for i in get_args(RoofGenerationMethod)], + default="ANGLE", + update=update_roof, ) height: bpy.props.FloatProperty( - name="Height", default=1.0, description="Maximum height of the roof to be generated.", subtype="DISTANCE", update=update_roof + name="Height", + default=1.0, + description="Maximum height of the roof to be generated.", + subtype="DISTANCE", + update=update_roof, ) angle: bpy.props.FloatProperty( name="Slope Angle", diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index bf41e8d643..91ddeccbc3 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -488,11 +488,16 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): matrix_position=lambda p: V_(0, -_G.GIZMO_OFFSET, -_G.GIZMO_OFFSET), ), DimensionGizmoConfig( - attr_name="height", axis=(0, 0, 1), min_value=0.01, text_alignment="start", + attr_name="height", + axis=(0, 0, 1), + min_value=0.01, + text_alignment="start", matrix_position=lambda p: V_(p.get_total_run() + _G.GIZMO_OFFSET, -_G.GIZMO_OFFSET, 0), ), DimensionGizmoConfig( - attr_name="width", axis=(0, 1, 0), min_value=0.01, + attr_name="width", + axis=(0, 1, 0), + min_value=0.01, matrix_position=lambda p: V_(_G.GIZMO_OFFSET, 0, -_G.GIZMO_OFFSET), ), DimensionGizmoConfig( @@ -503,7 +508,7 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): matrix_position=lambda p: V_( 0 if p.custom_tread_lock else p.custom_first_last_tread_run[0], 0, - p.get_riser_height() if p.custom_tread_lock else p.get_riser_height() * 2 + p.get_riser_height() if p.custom_tread_lock else p.get_riser_height() * 2, ), ), DimensionGizmoConfig( @@ -524,12 +529,11 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): visibility_condition=lambda p: p.has_custom_treads(), compute_value=_tread_run_accessors[1][0], apply_value=_tread_run_accessors[1][1], - matrix_position=lambda p: V_( - p.get_total_run() - p.custom_first_last_tread_run[1], 0, p.height - ), + matrix_position=lambda p: V_(p.get_total_run() - p.custom_first_last_tread_run[1], 0, p.height), ), DimensionGizmoConfig( - attr_name="nosing_length", axis=(-1, 0, 0), + attr_name="nosing_length", + axis=(-1, 0, 0), matrix_position=lambda p: V_(0, p.width / 2, p.get_riser_height()), ), DimensionGizmoConfig( @@ -578,12 +582,16 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): def setup_element_specific_gizmos(self, context: bpy.types.Context) -> None: """Create stair-specific icon gizmos (lock, plus, minus).""" self.lock_gizmo = self.create_icon_gizmo( - "VIEW3D_GT_lock", self.COLOR_BLUE, "bim.toggle_stair_property", + "VIEW3D_GT_lock", + self.COLOR_BLUE, + "bim.toggle_stair_property", prop_path="BIMStairProperties.total_length_lock", property_name="total_length_lock", ) self.tread_lock_gizmo = self.create_icon_gizmo( - "VIEW3D_GT_lock", (1.0, 1.0, 1.0), "bim.toggle_stair_property", + "VIEW3D_GT_lock", + (1.0, 1.0, 1.0), + "bim.toggle_stair_property", prop_path="BIMStairProperties.custom_tread_lock", property_name="custom_tread_lock", ) @@ -594,9 +602,7 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): "VIEW3D_GT_minus", self.COLOR_RED, "bim.adjust_stair_treads", increment=-1 ) - def _refresh_element_specific( - self, context: bpy.types.Context, mw: Matrix, props: "BIMStairProperties" - ) -> None: + def _refresh_element_specific(self, context: bpy.types.Context, mw: Matrix, props: "BIMStairProperties") -> None: """Update stair-specific lock and tread count gizmos.""" billboard_rot = gizmo.get_billboard_rotation(context) self.update_lock_gizmo(mw, props, billboard_rot) @@ -637,7 +643,9 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self.minus_gizmo, props.is_editing and props.number_of_treads > 1, gizmo_prefs.minus ) - def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props: "BIMStairProperties") -> None: + def _update_dimension_gizmo_positions( + self, context: bpy.types.Context, mw: Matrix, props: "BIMStairProperties" + ) -> None: """Update dimension gizmo positions based on camera view direction.""" viewing_from_negative_y, viewing_from_negative_x = self.get_local_view_direction(context, mw) billboard_rot = gizmo.get_billboard_rotation(context) @@ -651,7 +659,12 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self._update_editing_icon_positions(mw, props, viewing_from_negative_y, billboard_rot) def _update_overall_dimension_gizmos( - self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, viewing_from_negative_x: bool, total_run: float + self, + mw: Matrix, + props: "BIMStairProperties", + viewing_from_negative_y: bool, + viewing_from_negative_x: bool, + total_run: float, ) -> None: """Update overall dimension gizmos (total_length, width, height).""" y_pos_offset = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) @@ -662,7 +675,12 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self.set_dimension_gizmo_position("height", mw, V_(total_run + self.GIZMO_OFFSET, y_pos_offset, 0), (0, 0, 1)) def _update_tread_dimension_gizmos( - self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, total_run: float, riser_height: float + self, + mw: Matrix, + props: "BIMStairProperties", + viewing_from_negative_y: bool, + total_run: float, + riser_height: float, ) -> None: """Update tread-related dimension gizmos (tread_run, custom first/last tread).""" y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=False) @@ -689,18 +707,33 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self.set_dimension_gizmo_position("nosing_length", mw, V_(0, props.width / 2, riser_height), (-1, 0, 0)) self.set_dimension_gizmo_position("tread_depth", mw, V_(0, y_pos, riser_height), (0, 0, -1)) self.set_dimension_gizmo_position("riser_height", mw, V_(props.tread_run, y_pos, 0), (0, 0, 1)) - self.set_dimension_gizmo_position("nosing_depth", mw, V_(-props.nosing_length, props.width / 2, riser_height), (0, 0, -1)) + self.set_dimension_gizmo_position( + "nosing_depth", mw, V_(-props.nosing_length, props.width / 2, riser_height), (0, 0, -1) + ) def _update_lock_gizmo_position( - self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, billboard_rot: Matrix, total_run: float + self, + mw: Matrix, + props: "BIMStairProperties", + viewing_from_negative_y: bool, + billboard_rot: Matrix, + total_run: float, ) -> None: """Update lock gizmo position based on Y view direction.""" y_pos = self.get_y_position_for_view(props, viewing_from_negative_y, use_offset=True) self.set_icon_gizmo_position( - "lock_gizmo", mw, total_run + self.ICON_Z_OFFSET, y_pos, -self.GIZMO_OFFSET, billboard_rot, scale=self.EDITING_ICON_SCALE + "lock_gizmo", + mw, + total_run + self.ICON_Z_OFFSET, + y_pos, + -self.GIZMO_OFFSET, + billboard_rot, + scale=self.EDITING_ICON_SCALE, ) - def _update_editing_icon_positions(self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, billboard_rot: Matrix) -> None: + def _update_editing_icon_positions( + self, mw: Matrix, props: "BIMStairProperties", viewing_from_negative_y: bool, billboard_rot: Matrix + ) -> None: """Update editing icon positions, flipping Y based on viewing angle.""" if not props.is_editing: return @@ -710,10 +743,17 @@ class GizmoStairEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): self.set_icon_gizmo_position("validate_gizmo", mw, 0, y_pos, icon_z, billboard_rot) self.set_icon_gizmo_position("cancel_gizmo", mw, self.ICON_CANCEL_X, y_pos, icon_z, billboard_rot) - self.set_icon_gizmo_position("cycle_gizmo", mw, self.ICON_CYCLE_X, y_pos, icon_z, billboard_rot, scale=self.ICON_CYCLE_SCALE) self.set_icon_gizmo_position( - "tread_lock_gizmo", mw, self.ICON_TREAD_LOCK_X, y_pos, - icon_z - self.EDITING_ICON_SCALE / 2, billboard_rot, scale=self.EDITING_ICON_SCALE + "cycle_gizmo", mw, self.ICON_CYCLE_X, y_pos, icon_z, billboard_rot, scale=self.ICON_CYCLE_SCALE + ) + self.set_icon_gizmo_position( + "tread_lock_gizmo", + mw, + self.ICON_TREAD_LOCK_X, + y_pos, + icon_z - self.EDITING_ICON_SCALE / 2, + billboard_rot, + scale=self.EDITING_ICON_SCALE, ) self.set_icon_gizmo_position( "plus_gizmo", mw, self.ICON_PLUS_X, y_pos, icon_z, billboard_rot, scale=self.ICON_PLUS_MINUS_SCALE diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index 274d4288d9..206f65de08 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -605,9 +605,10 @@ class CycleWindowType(bpy.types.Operator, tool.Ifc.Operator, gizmo.CycleTypeMixi # Frame accessor factory - creates callbacks that delegate to BIMWindowProperties methods -def _make_frame_accessors( - attr_name: str, panel_index: int -) -> tuple["collections.abc.Callable[[BIMWindowProperties], float]", "collections.abc.Callable[[BIMWindowProperties, float], None]"]: +def _make_frame_accessors(attr_name: str, panel_index: int) -> tuple[ + "collections.abc.Callable[[BIMWindowProperties], float]", + "collections.abc.Callable[[BIMWindowProperties, float], None]", +]: """Create compute/apply callbacks for frame properties at a specific panel index. Args: @@ -624,9 +625,7 @@ def _make_frame_accessors( _frame_accessors = { - (attr, idx): _make_frame_accessors(attr, idx) - for attr in ("frame_depth", "frame_thickness") - for idx in range(3) + (attr, idx): _make_frame_accessors(attr, idx) for attr in ("frame_depth", "frame_thickness") for idx in range(3) } @@ -645,112 +644,137 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): # matrix_position lambdas replace the get_dimension_matrix_* methods dimension_gizmo_props = [ DimensionGizmoConfig( - attr_name="overall_width", axis=(1, 0, 0), min_value=0.01, text_offset_sign=-1, + attr_name="overall_width", + axis=(1, 0, 0), + min_value=0.01, + text_offset_sign=-1, matrix_position=lambda p: V_(0, p.lining_offset - _G.GIZMO_OFFSET, -_G.GIZMO_OFFSET), ), DimensionGizmoConfig( - attr_name="overall_height", axis=(0, 0, 1), min_value=0.01, text_alignment="start", + attr_name="overall_height", + axis=(0, 0, 1), + min_value=0.01, + text_alignment="start", matrix_position=lambda p: V_(p.overall_width + _G.GIZMO_OFFSET, p.lining_offset - _G.GIZMO_OFFSET, 0), ), DimensionGizmoConfig( - attr_name="lining_depth", axis=(0, 1, 0), + attr_name="lining_depth", + axis=(0, 1, 0), matrix_position=lambda p: V_(p.overall_width / 2, p.lining_offset, p.overall_height), ), DimensionGizmoConfig( - attr_name="lining_thickness", axis=(1, 0, 0), + attr_name="lining_thickness", + axis=(1, 0, 0), matrix_position=lambda p: V_(0, p.lining_depth / 2 + p.lining_offset, p.overall_height / 2), ), DimensionGizmoConfig( - attr_name="lining_to_panel_offset_x", axis=(1, 0, 0), + attr_name="lining_to_panel_offset_x", + axis=(1, 0, 0), matrix_position=lambda p: V_( 0, p.get_lining_to_panel_offset_y_full() + p.frame_depth[0] + p.lining_offset, - p.lining_to_panel_offset_x + p.lining_to_panel_offset_x, ), ), DimensionGizmoConfig( - attr_name="lining_to_panel_offset_y", axis=(0, 1, 0), min_value=-10.0, + attr_name="lining_to_panel_offset_y", + axis=(0, 1, 0), + min_value=-10.0, matrix_position=lambda p: V_( p.overall_width - p.lining_to_panel_offset_x, p.lining_depth + p.lining_offset, - p.lining_to_panel_offset_x + p.lining_to_panel_offset_x, ), ), DimensionGizmoConfig( - attr_name="frame_depth", axis=(0, -1, 0), + attr_name="frame_depth", + axis=(0, -1, 0), compute_value=_frame_accessors[("frame_depth", 0)][0], apply_value=_frame_accessors[("frame_depth", 0)][1], matrix_position=lambda p: p.get_frame_position(0, is_depth=True), ), DimensionGizmoConfig( - attr_name="frame_thickness", axis=(1, 0, 0), + attr_name="frame_thickness", + axis=(1, 0, 0), compute_value=_frame_accessors[("frame_thickness", 0)][0], apply_value=_frame_accessors[("frame_thickness", 0)][1], matrix_position=lambda p: p.get_frame_position(0, is_depth=False), ), DimensionGizmoConfig( - attr_name="second_frame_depth", axis=(0, -1, 0), + attr_name="second_frame_depth", + axis=(0, -1, 0), compute_value=_frame_accessors[("frame_depth", 1)][0], apply_value=_frame_accessors[("frame_depth", 1)][1], visibility_condition=lambda p: p.has_second_panel(), matrix_position=lambda p: p.get_frame_position(1, is_depth=True), ), DimensionGizmoConfig( - attr_name="second_frame_thickness", axis=(1, 0, 0), + attr_name="second_frame_thickness", + axis=(1, 0, 0), compute_value=_frame_accessors[("frame_thickness", 1)][0], apply_value=_frame_accessors[("frame_thickness", 1)][1], visibility_condition=lambda p: p.has_second_panel(), matrix_position=lambda p: p.get_frame_position(1, is_depth=False), ), DimensionGizmoConfig( - attr_name="third_frame_depth", axis=(0, -1, 0), + attr_name="third_frame_depth", + axis=(0, -1, 0), compute_value=_frame_accessors[("frame_depth", 2)][0], apply_value=_frame_accessors[("frame_depth", 2)][1], visibility_condition=lambda p: p.has_third_panel(), matrix_position=lambda p: p.get_frame_position(2, is_depth=True), ), DimensionGizmoConfig( - attr_name="third_frame_thickness", axis=(1, 0, 0), + attr_name="third_frame_thickness", + axis=(1, 0, 0), compute_value=_frame_accessors[("frame_thickness", 2)][0], apply_value=_frame_accessors[("frame_thickness", 2)][1], visibility_condition=lambda p: p.has_third_panel(), matrix_position=lambda p: p.get_frame_position(2, is_depth=False), ), DimensionGizmoConfig( - attr_name="mullion_thickness", axis=(1, 0, 0), delta_scale=2.0, + attr_name="mullion_thickness", + axis=(1, 0, 0), + delta_scale=2.0, visibility_condition=lambda p: p.has_mullion(), matrix_position=lambda p: V_( p.first_mullion_offset - p.mullion_thickness / 2, p.lining_offset, - p.overall_height / 2 + 3 * _G.GIZMO_STACK_OFFSET + p.overall_height / 2 + 3 * _G.GIZMO_STACK_OFFSET, ), ), DimensionGizmoConfig( - attr_name="first_mullion_offset", axis=(1, 0, 0), + attr_name="first_mullion_offset", + axis=(1, 0, 0), visibility_condition=lambda p: p.has_mullion(), matrix_position=lambda p: V_(0, p.lining_offset, p.overall_height / 2 + _G.GIZMO_STACK_OFFSET), ), DimensionGizmoConfig( - attr_name="second_mullion_offset", axis=(1, 0, 0), + attr_name="second_mullion_offset", + axis=(1, 0, 0), visibility_condition=lambda p: p.has_second_mullion(), matrix_position=lambda p: V_(0, p.lining_offset, p.overall_height / 2 + 2 * _G.GIZMO_STACK_OFFSET), ), DimensionGizmoConfig( - attr_name="transom_thickness", axis=(0, 0, 1), delta_scale=2.0, + attr_name="transom_thickness", + axis=(0, 0, 1), + delta_scale=2.0, visibility_condition=lambda p: p.has_transom(), matrix_position=lambda p: V_( p.overall_width / 2 + 2 * _G.GIZMO_STACK_OFFSET, p.lining_offset, - p.first_transom_offset - p.transom_thickness / 2 + p.first_transom_offset - p.transom_thickness / 2, ), ), DimensionGizmoConfig( - attr_name="first_transom_offset", axis=(0, 0, 1), + attr_name="first_transom_offset", + axis=(0, 0, 1), visibility_condition=lambda p: p.has_transom(), matrix_position=lambda p: V_(p.overall_width / 2, p.lining_offset, 0), ), DimensionGizmoConfig( - attr_name="second_transom_offset", axis=(0, 0, 1), + attr_name="second_transom_offset", + axis=(0, 0, 1), visibility_condition=lambda p: p.has_second_transom(), matrix_position=lambda p: V_(p.overall_width / 2 + _G.GIZMO_STACK_OFFSET, p.lining_offset, 0), ), @@ -772,17 +796,16 @@ class GizmoWindowEdition(bpy.types.GizmoGroup, gizmo.BaseParametricGizmoGroup): depending on lining_offset (which can be negative). """ furthest_positive_y = ( - max(0, props.lining_offset) - + props.lining_depth - + props.lining_to_panel_offset_y - + 2 * self.GIZMO_OFFSET + max(0, props.lining_offset) + props.lining_depth + props.lining_to_panel_offset_y + 2 * self.GIZMO_OFFSET ) furthest_negative_y = abs(min(0, props.lining_offset)) + 2 * self.GIZMO_OFFSET return (furthest_positive_y, furthest_negative_y) # Window uses base class setup() and refresh() - no element-specific gizmos needed - def _update_dimension_gizmo_positions(self, context: bpy.types.Context, mw: Matrix, props: "BIMWindowProperties") -> None: + def _update_dimension_gizmo_positions( + self, context: bpy.types.Context, mw: Matrix, props: "BIMWindowProperties" + ) -> None: """Update dimension gizmo positions based on camera view direction.""" # Window uses base implementation with default casing_offset=0 self._update_view_dependent_dimensions(context, mw, props) diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 505816b49b..358f64e681 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -673,6 +673,3 @@ class BIM_PT_purge(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 - - - diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index 3801923296..60a52fdb9b 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -58,7 +58,7 @@ class AssignType(bpy.types.Operator, tool.Ifc.Operator): else: related_objects = tool.Blender.get_selected_objects() prefs = tool.Blender.get_addon_preferences() - + # Get the active drawing's target view active_target_view = None drawing_props = context.scene.DocProperties @@ -66,13 +66,13 @@ class AssignType(bpy.types.Operator, tool.Ifc.Operator): active_drawing = tool.Ifc.get().by_id(drawing_props.active_drawing_id) if active_drawing: active_target_view = tool.Drawing.get_drawing_target_view(active_drawing) - + for obj in related_objects: element = tool.Ifc.get_entity(obj) if not element or not element.is_a("IfcObject"): continue core.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) - + # Switch to the drawing's target view if available if active_target_view and element.Representation: for rep in element.Representation.Representations: @@ -84,7 +84,7 @@ class AssignType(bpy.types.Operator, tool.Ifc.Operator): representation=rep, ) break - + if prefs.occurrence_name_style == "TYPE": obj.name = tool.Model.generate_occurrence_name(relating_type, element.is_a()) @@ -363,17 +363,17 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): if obj.data: new_obj.data = obj.data.copy() new = bonsai.core.root.copy_class(tool.Ifc, tool.Collector, tool.Geometry, tool.Root, obj=new_obj) - + # Apply the name and description from the dialog new.Name = self.name if self.description: new.Description = self.description - + # Update the Blender object name to match the IFC element name tool.Root.set_object_name(new_obj, new) - + bpy.ops.bim.load_type_thumbnails() - + # Assign selected objects to the new type if requested if self.assign_selected_objects: selected_objects = tool.Blender.get_selected_objects() @@ -384,7 +384,7 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): core.assign_type(tool.Ifc, tool.Type, element=selected_element, type=new) if prefs.occurrence_name_style == "TYPE": selected_obj.name = tool.Model.generate_occurrence_name(new, selected_element.is_a()) - + if obj in context.selectable_objects: tool.Blender.select_and_activate_single_object(context, new_obj) else: @@ -409,6 +409,10 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): self.layout.prop(self, "name") self.layout.prop(self, "description") selected_objects = tool.Blender.get_selected_objects() - ifc_objects = [obj for obj in selected_objects if tool.Ifc.get_entity(obj) and tool.Ifc.get_entity(obj).is_a("IfcObject")] + ifc_objects = [ + obj for obj in selected_objects if tool.Ifc.get_entity(obj) and tool.Ifc.get_entity(obj).is_a("IfcObject") + ] if ifc_objects: - self.layout.prop(self, "assign_selected_objects", text=f"Assign {len(ifc_objects)} Selected Object(s) to New Type") + self.layout.prop( + self, "assign_selected_objects", text=f"Assign {len(ifc_objects)} Selected Object(s) to New Type" + ) diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index 5d77b6c323..e2955d3d28 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -1907,9 +1907,20 @@ class Geometry(bonsai.core.tool.Geometry): # ADD THIS AT THE END - Store initial vertex order for annotations if rep_obj and (element := tool.Ifc.get_entity(rep_obj)): if element.is_a("IfcAnnotation") and element.ObjectType in { - "TEXT_LEADER", "DIMENSION", "RADIUS", "DIAMETER", "ANGLE", - "FALL", "SLOPE_ANGLE", "SLOPE_FRACTION", "SLOPE_PERCENT", - "STAIR_ARROW", "PLAN_LEVEL", "SECTION_LEVEL", "SECTION", "ELEVATION" + "TEXT_LEADER", + "DIMENSION", + "RADIUS", + "DIAMETER", + "ANGLE", + "FALL", + "SLOPE_ANGLE", + "SLOPE_FRACTION", + "SLOPE_PERCENT", + "STAIR_ARROW", + "PLAN_LEVEL", + "SECTION_LEVEL", + "SECTION", + "ELEVATION", }: # Store the initial first vertex position if isinstance(obj.data, bpy.types.Mesh) and obj.data.vertices: @@ -2361,7 +2372,7 @@ class Geometry(bonsai.core.tool.Geometry): mesh = obj.data if not isinstance(mesh, bpy.types.Mesh): return - + # Get the original first vertex position from custom properties if "bonsai_first_vert_co" in mesh: original_first_co = Vector(mesh["bonsai_first_vert_co"]) @@ -2372,19 +2383,19 @@ class Geometry(bonsai.core.tool.Geometry): mesh["bonsai_first_vert_co"] = original_first_co[:] else: return - + bm = bmesh.new() bm.from_mesh(mesh) bm.verts.ensure_lookup_table() bm.edges.ensure_lookup_table() - + if len(bm.verts) == 0: bm.free() return - + # Find endpoints (vertices with only one connected edge) endpoints = [v for v in bm.verts if len(v.link_edges) == 1] - + # Choose the endpoint closest to the original first vertex position if len(endpoints) == 0: # Closed loop - pick any vertex as start @@ -2395,12 +2406,12 @@ class Geometry(bonsai.core.tool.Geometry): else: # Choose endpoint closest to where the original first vertex was start_vert = min(endpoints, key=lambda v: (v.co - original_first_co).length) - + # Build ordered vertex list by following edges ordered_verts = [start_vert] current_vert = start_vert visited_edges = set() - + while True: # Find next unvisited edge next_edge = None @@ -2408,37 +2419,37 @@ class Geometry(bonsai.core.tool.Geometry): if edge not in visited_edges: next_edge = edge break - + if not next_edge: break - + visited_edges.add(next_edge) next_vert = next_edge.other_vert(current_vert) - + # Avoid going back on ourselves if next_vert not in ordered_verts: ordered_verts.append(next_vert) - + current_vert = next_vert - + # Store vertex coordinates in the correct order new_verts_co = [v.co.copy() for v in ordered_verts] - + # Update the stored first vertex position to the new first vertex mesh["bonsai_first_vert_co"] = new_verts_co[0][:] - + # Clear and rebuild mesh with correct vertex order bm.clear() - + # Create new vertices in order new_verts = [bm.verts.new(co) for co in new_verts_co] bm.verts.ensure_lookup_table() - + # Create edges connecting consecutive vertices for i in range(len(new_verts) - 1): bm.edges.new([new_verts[i], new_verts[i + 1]]) - + # Write back to mesh bm.to_mesh(mesh) bm.free() - mesh.update() \ No newline at end of file + mesh.update() From e304154037b68257abcd2592b3ad2e93d0dbff82 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 16:09:19 +0500 Subject: [PATCH 251/657] Fix deprecated `typing` symbols --- src/bonsai/bonsai/bim/module/drawing/gizmos.py | 3 ++- src/bonsai/bonsai/bim/module/model/prop.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/gizmos.py b/src/bonsai/bonsai/bim/module/drawing/gizmos.py index c402dde1e1..ef42c57dc6 100644 --- a/src/bonsai/bonsai/bim/module/drawing/gizmos.py +++ b/src/bonsai/bonsai/bim/module/drawing/gizmos.py @@ -132,7 +132,8 @@ __all__ = [ "ExtrusionWidget", ] -from typing import Any, Callable, Iterator, Literal, Protocol, runtime_checkable, get_args +from typing import Any, Literal, Protocol, runtime_checkable, get_args +from collections.abc import Callable, Iterator from enum import Enum import blf diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index ce657c5925..5066ceb9b2 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -29,7 +29,8 @@ from bonsai.bim.module.model.decorator import WallAxisDecorator, SlabDirectionDe from bonsai.bim.module.model.door import update_door_modifier_bmesh from bonsai.bim.module.model.window import update_window_modifier_bmesh from bonsai.bim.module.drawing.decoration import CutDecorator -from typing import TYPE_CHECKING, Literal, get_args, Union, Any, Optional, Callable +from typing import TYPE_CHECKING, Literal, get_args, Union, Any, Optional +from collections.abc import Callable from mathutils import Vector From 52baba0fe0af8512a80661ac9c066f4a3a0e43ad Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 11:40:21 +0500 Subject: [PATCH 252/657] cmake - don't use debug Python by default, move it to `USE_DEBUG_PYTHON` option --- cmake/CMakeLists.txt | 1 + src/ifcwrap/CMakeLists.txt | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 38f3d48899..eab9dc7789 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -84,6 +84,7 @@ option(WITH_ROCKSDB "Support a RocksDB key-value store as a file backend in IfcO option(WITH_ZSTD "Use Zstd compression in RocksDB writes" OFF) option(USERSPACE_PYTHON_PREFIX "Installs IfcPython for the current user only instead of system-wide." OFF) +option(USE_DEBUG_PYTHON "Use debug binaries when building Debug IfcPython on Windows." OFF) option(ADD_COMMIT_SHA "Add commit sha and branch in version number, requires git" OFF) option(VERSION_OVERRIDE "Override the version defined in buildinfo.cpp with the file VERSION in the repository root" OFF) diff --git a/src/ifcwrap/CMakeLists.txt b/src/ifcwrap/CMakeLists.txt index c0e74e2b1b..d752cc6650 100644 --- a/src/ifcwrap/CMakeLists.txt +++ b/src/ifcwrap/CMakeLists.txt @@ -63,13 +63,6 @@ set(_python_libs_version "${Python_VERSION_MAJOR}${Python_VERSION_MINOR}") INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}) SET(CMAKE_SWIG_FLAGS ${SWIG_DEFINES}) -# NOTE Workaround for most likely missing debug Python libraries on Windows (requires Python built from the source). -# Python 3.5 intaller and onwards will have an option to install the debug libraries too. -# NOTE PYTHON_DEBUG_LIBRARIES appears to be a deprecated variable -IF (WIN32 AND NOT Python_LIBRARY_DEBUG) - MESSAGE(STATUS "Python debug libraries were not found, defining SWIG_PYTHON_INTERPRETER_NO_DEBUG workaround for IfcWrap.") - ADD_DEFINITIONS(-DSWIG_PYTHON_INTERPRETER_NO_DEBUG) -ENDIF() if (WITH_CGAL) set(LIBSVGFILL svgfill) @@ -92,6 +85,26 @@ SET_PROPERTY( if(WIN32 AND CMAKE_VERSION VERSION_LESS "4.2") set(Python_DEBUG_POSTFIX "_d") endif() +# Workaround for most likely missing debug Python libraries on Windows. +# Even if user has them, it's unlikely that they want to use them for building IfcPython +# since it makes extension incompatiblew with standard Python +# and requires all other extensions to be built in debug mode as well. +# But debug mode is still might be needed - e.g. Blender's Python is using it, if you're running debug build. +if(NOT USE_DEBUG_PYTHON) + set(Python_DEBUG_POSTFIX "") + add_compile_definitions(SWIG_PYTHON_INTERPRETER_NO_DEBUG) + if(Python_LIBRARY_DEBUG) + # If debug libraries were found, then override them with release ones. + get_target_property(IMPORTED_IMPLIB Python::Module IMPORTED_IMPLIB_RELEASE) + get_target_property(IMPORTED_LOCATION Python::Module IMPORTED_LOCATION_RELEASE) + set_target_properties( + Python::Module + PROPERTIES + IMPORTED_IMPLIB_DEBUG "${IMPORTED_IMPLIB}" + IMPORTED_LOCATION_DEBUG "${IMPORTED_LOCATION}" + ) + endif() +endif() if (CMAKE_VERSION VERSION_GREATER_EQUAL "4.2") # `DEBUG_POSTFIX` argument was added in 4.2. swig_add_library(ifcopenshell_wrapper LANGUAGE python SOURCES IfcPython.i DEBUG_POSTFIX "${Python_DEBUG_POSTFIX}") From 9807c2bedfc7f62aa33b00aeeb5f716829d0f82a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 16:04:47 +0500 Subject: [PATCH 253/657] Fix possible crash on `bim.split_along_edge` #7394 --- src/bonsai/bonsai/bim/module/geometry/operator.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 174406a5da..e6d8383322 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -598,7 +598,11 @@ class UpdateRepresentation(bpy.types.Operator, tool.Ifc.Operator): tool.Material.ensure_material_unassigned([element_type]) ifcopenshell.api.material.unassign_material(self.file, products=[product]) tool.Material.ensure_material_unassigned([product]) - data = obj.data # Required after ensure_material_unassigned + + # Required after ensure_material_unassigned, since data might be recreated. + data = obj.data + assert tool.Geometry.is_data_supported_for_adding_representation(data) + mprops = tool.Geometry.get_mesh_props(data) else: # These objects are parametrically based on an axis and should not be modified as a mesh if extrusion := tool.Model.get_extrusion(old_representation): From 2e5d87b5d7a19aaea8d8ef665ecbb7137d9ec01c Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sun, 30 Nov 2025 17:06:52 +0100 Subject: [PATCH 254/657] cmake: Link Eigen3 only against targets needing it --- cmake/CMakeLists.txt | 4 ---- src/ifcgeom/CMakeLists.txt | 2 ++ src/ifcgeom/kernels/CMakeLists.txt | 8 +++++--- src/ifcgeom/mapping/CMakeLists.txt | 4 +++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index eab9dc7789..5ed85e6b9e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -449,10 +449,6 @@ else() endif() endif(MSVC) - -find_package(Eigen3 REQUIRED) -link_libraries(Eigen3::Eigen) - include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 1c58f7d299..143caf2159 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -20,6 +20,8 @@ if(UNIX) find_package(Threads) endif() +find_package(Eigen3 REQUIRED) + if(WASM_BUILD) target_link_libraries(IfcGeom ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") else() diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index d7c2e12bc7..6ead320c16 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -1,3 +1,5 @@ +find_package(Eigen3 REQUIRED) + foreach(kernel ${GEOMETRY_KERNELS}) string(TOUPPER ${kernel} KERNEL_UPPER) file(GLOB IFCGEOM_H_FILES ${kernel}/*.h) @@ -9,13 +11,13 @@ foreach(kernel ${GEOMETRY_KERNELS}) add_library(${KERNEL_TARGET} OBJECT ${IFCGEOM_FILES}) set_property(TARGET ${KERNEL_TARGET} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOM_EXPORTS") list(APPEND kernel_libraries ${KERNEL_TARGET}) - target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES}) + target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) install(TARGETS ${KERNEL_TARGET}) if(${kernel} STREQUAL "cgal") set_property(TARGET ${KERNEL_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") - + set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple") add_library(${KERNEL_TARGET_SIMPLE} OBJECT ${IFCGEOM_FILES}) set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") @@ -31,4 +33,4 @@ foreach(kernel ${GEOMETRY_KERNELS}) ) endforeach() -set(kernel_libraries ${kernel_libraries} PARENT_SCOPE) \ No newline at end of file +set(kernel_libraries ${kernel_libraries} PARENT_SCOPE) diff --git a/src/ifcgeom/mapping/CMakeLists.txt b/src/ifcgeom/mapping/CMakeLists.txt index 4778f1d22b..ef5a658c06 100644 --- a/src/ifcgeom/mapping/CMakeLists.txt +++ b/src/ifcgeom/mapping/CMakeLists.txt @@ -1,3 +1,5 @@ +find_package(Eigen3 REQUIRED) + foreach(schema ${SCHEMA_VERSIONS}) file(GLOB IFCGEOM_I_FILES *.i) file(GLOB IFCGEOM_H_FILES *.h) @@ -6,7 +8,7 @@ foreach(schema ${SCHEMA_VERSIONS}) add_library(geometry_mapping_ifc${schema} OBJECT ${IFCGEOM_FILES}) set_target_properties(geometry_mapping_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") - target_link_libraries(geometry_mapping_ifc${schema} IfcParse) + target_link_libraries(geometry_mapping_ifc${schema} IfcParse Eigen3::Eigen) list(APPEND mapping_libraries geometry_mapping_ifc${schema}) From 67421c533cab2703816f2df39cac716e37e88883 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 17:46:00 +0500 Subject: [PATCH 255/657] ifcparse cmake - make compile definition more explicit #7406 --- src/ifcparse/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index aa21cd524a..e13be1832b 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -36,7 +36,7 @@ set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERS if(IFCXML_SUPPORT) find_package(LibXml2 REQUIRED) - add_definitions(-DWITH_IFCXML) + target_compile_definitions(IfcParse PUBLIC WITH_IFCXML) set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML) if(LibXml2_DIR) From a5d0187343bc06967952be2f650142098888677f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 17:46:22 +0500 Subject: [PATCH 256/657] ifcparse cmake - fix missing ifcxml symbols in python wrapper #7406 --- src/ifcparse/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index e13be1832b..e6b9a15346 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -37,7 +37,7 @@ set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERS if(IFCXML_SUPPORT) find_package(LibXml2 REQUIRED) target_compile_definitions(IfcParse PUBLIC WITH_IFCXML) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML) + set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML PARENT_SCOPE) if(LibXml2_DIR) target_compile_definitions(IfcParse PRIVATE ${LIBXML2_DEFINITIONS}) From 6cbd3ed014a2ddf7345c7d805959a4c87265d18d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 17:58:35 +0500 Subject: [PATCH 257/657] cmake - drop `OPENCASCADE_LIBRARIES ` variable #7388 --- cmake/CMakeLists.txt | 4 ++-- src/serializers/CMakeLists.txt | 6 +++++- src/serializers/schema_dependent/CMakeLists.txt | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 5ed85e6b9e..a6ad1a5130 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -207,8 +207,8 @@ endif() if(WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) - # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OPENCASCADE_LIBRARIES used by kernel generic cmake file - set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) + # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OpenCASCADE_LIBRARIES used by kernel generic cmake file + set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) add_definitions(-DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) list(APPEND GEOMETRY_KERNELS opencascade) diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index 65ebc13169..c575958a70 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -17,7 +17,11 @@ if(WITH_PROJ) target_link_libraries(Serializers PRIVATE proj::proj) endif() -target_link_libraries(Serializers PRIVATE ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} IfcGeom ${OPENCASCADE_LIBRARIES} ${kernel_libraries} IfcParse) +target_link_libraries(Serializers + PRIVATE + ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} + IfcGeom ${OpenCASCADE_LIBRARIES} ${kernel_libraries} IfcParse +) install(TARGETS Serializers) diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt index deb9bc23c3..c3c2fc42d8 100644 --- a/src/serializers/schema_dependent/CMakeLists.txt +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -9,7 +9,7 @@ foreach(schema ${SCHEMA_VERSIONS}) if(WASM_BUILD) target_link_libraries(Serializers_ifc${schema} ${HDF5_LIBRARIES}) else() - target_link_libraries(Serializers_ifc${schema} IfcGeom ${OPENCASCADE_LIBRARIES} ${HDF5_LIBRARIES}) + target_link_libraries(Serializers_ifc${schema} IfcGeom ${OpenCASCADE_LIBRARIES} ${HDF5_LIBRARIES}) endif() install(TARGETS Serializers_ifc${schema}) From c7df59e9619aaf9b45dd0a3386d9c29f5c127287 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 17:59:45 +0500 Subject: [PATCH 258/657] cmake - indicate that OpenCascade is only used by IfcGeom --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a6ad1a5130..f62a9813ff 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -205,7 +205,7 @@ if(WITH_CGAL) list(APPEND GEOMETRY_KERNELS cgal) endif() -if(WITH_OPENCASCADE) +if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OpenCASCADE_LIBRARIES used by kernel generic cmake file set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) From 1468bf3c97380d77d844b07f217af52dbdc75924 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 19:55:45 +0500 Subject: [PATCH 259/657] parse_ifcxml - remove redundant `ifdef WITH_IFCXML` The entire file is already wrapped in `WITH_IFCXML`, so no need to do it again for some block. --- src/ifcparse/parse_ifcxml.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ifcparse/parse_ifcxml.cpp b/src/ifcparse/parse_ifcxml.cpp index 26f0552075..60cd85c1c6 100644 --- a/src/ifcparse/parse_ifcxml.cpp +++ b/src/ifcparse/parse_ifcxml.cpp @@ -688,7 +688,6 @@ end: return; } -#ifdef WITH_IFCXML IFC_PARSE_API IfcParse::IfcFile* IfcParse::parse_ifcxml(const std::string& filename) { throw std::runtime_error("IFC-XML import temporarily disabled"); @@ -722,6 +721,5 @@ IFC_PARSE_API IfcParse::IfcFile* IfcParse::parse_ifcxml(const std::string& filen return state.file; } -#endif #endif // WITH_IFCXML From 4fc2f623cff39dcf47bf05d7e4aa41e8c23d457f Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 2 Dec 2025 16:32:37 +0100 Subject: [PATCH 260/657] Count number of emitted normals in OBJ serializer, which might be less than verts when writing line geometries --- .../mapping/IfcOpenCrossProfileDef.cpp | 94 +++++++++++++++++++ src/ifcgeom/mapping/mapping.i | 3 + src/serializers/WavefrontObjSerializer.cpp | 30 +++--- src/serializers/WavefrontObjSerializer.h | 2 +- 4 files changed, 116 insertions(+), 13 deletions(-) create mode 100644 src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp diff --git a/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp b/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp new file mode 100644 index 0000000000..d3083a23e7 --- /dev/null +++ b/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp @@ -0,0 +1,94 @@ +/******************************************************************************** + * * + * 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 . * + * * + ********************************************************************************/ + +#include "mapping.h" +#define mapping POSTFIX_SCHEMA(mapping) +using namespace ifcopenshell::geometry; + +#include "../../ifcgeom/profile_helper.h" +#include "../../ifcgeom/infra_sweep_helper.h" + +#include +const double PI = boost::math::constants::pi(); + +#ifdef SCHEMA_HAS_IfcOpenCrossProfileDef + + +taxonomy::ptr mapping::map_impl(const IfcSchema::IfcOpenCrossProfileDef* inst) { + if (inst->ProfileType() != IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE) { + Logger::Warning("Expected IfcOpenCrossProfileDef.ProfileType to be CURVE", inst); + return nullptr; + } + + std::vector points; + taxonomy::point3::ptr start; + if (inst->OffsetPoint()) { + start = taxonomy::cast(map(inst->OffsetPoint())); + } else { + start = taxonomy::make(0., 0., 0.); + } + points.push_back(start); + + boost::optional> tags = inst->Tags(); + boost::optional tag = boost::none; + if (tags.has_value() && !tags.get().empty()) { + tag = tags.get()[0]; + } + start->tag = tag; + + auto widths = inst->Widths(); + auto angles = inst->Slopes(); // these are actually angles, but the attribute is called Slopes + + if (widths.size() != angles.size()) { + Logger::Warning("Expected Widths and Slopes to be equal length, but got " + std::to_string(widths.size()) + " and " + std::to_string(angles.size()) + " respectively", inst); + return nullptr; + } + + auto horizontal_widths = inst->HorizontalWidths(); + + double x = start->ccomponents().x(); + double y = start->ccomponents().y(); + double z = start->ccomponents().z(); + for (size_t i = 0; i < widths.size(); ++i) { + double w = widths[i] * length_unit_; + double a = PI - angles[i] * angle_unit_; + double dx = (horizontal_widths ? w : w * std::cos(a)); + double dy = (horizontal_widths ? w * std::tan(a) : w * std::sin(a)); + double dz = 0.; + x -= dx; // subtract because X is positive to the left + y += dy; + z += dz; + + if (tags.has_value() && !tags.get().empty()) { + tag = tags.get()[i+1]; + } + + points.push_back(taxonomy::make(x, y, z, tag)); + } + + auto mapped = polygon_from_points(points); + if (mapped->kind() == taxonomy::LOOP) { + auto r = taxonomy::loop::ptr((taxonomy::loop*)mapped->clone_()); + r->closed = false; + return r; + } + return mapped; +} + +#endif diff --git a/src/ifcgeom/mapping/mapping.i b/src/ifcgeom/mapping/mapping.i index adc2e3c10b..c67d0f7f4a 100644 --- a/src/ifcgeom/mapping/mapping.i +++ b/src/ifcgeom/mapping/mapping.i @@ -135,6 +135,9 @@ BIND(IfcFixedReferenceSweptAreaSolid) #ifdef SCHEMA_HAS_IfcSectionedSolidHorizontal BIND(IfcSectionedSolidHorizontal) #endif +#ifdef SCHEMA_HAS_IfcOpenCrossProfileDef +BIND(IfcOpenCrossProfileDef) +#endif #ifdef SCHEMA_HAS_IfcSectionedSurface BIND(IfcSectionedSurface) #endif diff --git a/src/serializers/WavefrontObjSerializer.cpp b/src/serializers/WavefrontObjSerializer.cpp index 300fceeb88..f29612a65e 100644 --- a/src/serializers/WavefrontObjSerializer.cpp +++ b/src/serializers/WavefrontObjSerializer.cpp @@ -93,7 +93,9 @@ void WaveFrontOBJSerializer::write(const IfcGeom::TriangulationElement* o) const IfcGeom::Representation::Triangulation& mesh = o->geometry(); - const int vcount = (int)mesh.verts().size() / 3; + size_t vcount = mesh.verts().size() / 3; + size_t ncount = mesh.normals().size() / 3; + for (auto it = mesh.verts().begin(); it != mesh.verts().end();) { const double x = *(it++); const double y = *(it++); @@ -139,22 +141,25 @@ void WaveFrontOBJSerializer::write(const IfcGeom::TriangulationElement* o) previous_material_id = material_id; } - const int v1 = *(it++)+vcount_total; - const int v2 = *(it++)+vcount_total; - const int v3 = *(it++)+vcount_total; + const int v1 = *(it++) + vcount_total; + const int v2 = *(it++) + vcount_total; + const int v3 = *(it++) + vcount_total; - if (has_normals && has_uvs) { - obj_stream.stream << "f " << v1 << "/" << v1 << "/" << v1 << " " - << v2 << "/" << v2 << "/" << v2 << " " - << v3 << "/" << v3 << "/" << v3 << "\n"; + const int n1 = v1 - vcount_total + ncount_total; + const int n2 = v2 - vcount_total + ncount_total; + const int n3 = v3 - vcount_total + ncount_total; + + if (has_normals && has_uvs) { + obj_stream.stream << "f " << v1 << "/" << n1 << "/" << n1 << " " + << v2 << "/" << n2 << "/" << n2 << " " + << v3 << "/" << n3 << "/" << n3 << "\n"; } else if (has_normals) { - obj_stream.stream << "f " << v1 << "//" << v1 << " " - << v2 << "//" << v2 << " " - << v3 << "//" << v3 << "\n"; + obj_stream.stream << "f " << v1 << "//" << n1 << " " + << v2 << "//" << n2 << " " + << v3 << "//" << n3 << "\n"; } else { obj_stream.stream << "f " << v1 << " " << v2 << " " << v3 << "\n"; } - } std::set faces_set (mesh.faces().begin(), mesh.faces().end()); @@ -189,4 +194,5 @@ void WaveFrontOBJSerializer::write(const IfcGeom::TriangulationElement* o) } vcount_total += vcount; + ncount_total += ncount; } diff --git a/src/serializers/WavefrontObjSerializer.h b/src/serializers/WavefrontObjSerializer.h index 4085dfa376..d3ea41f69e 100644 --- a/src/serializers/WavefrontObjSerializer.h +++ b/src/serializers/WavefrontObjSerializer.h @@ -32,7 +32,7 @@ class SERIALIZERS_API WaveFrontOBJSerializer : public WriteOnlyGeometrySerialize private: stream_or_filename obj_stream; stream_or_filename mtl_stream; - unsigned int vcount_total; + size_t vcount_total, ncount_total; std::set materials; public: WaveFrontOBJSerializer(const stream_or_filename& obj_filename, const stream_or_filename& mtl_filename, const ifcopenshell::geometry::Settings& geometry_settings, const ifcopenshell::geometry::SerializerSettings& settings); From f50bbe83a39c6246ae5c0ec4db7d871b0329580f Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 2 Dec 2025 10:00:57 -0600 Subject: [PATCH 261/657] extend https://github.com/IfcOpenShell/IfcOpenShell/commit/a038fa62baadff8793f8a17e9367b9be03d283a4: Use `spacebar` to edit IfcAnnotations, as well. --- .../bonsai/bim/module/geometry/operator.py | 285 +++++++++++++----- 1 file changed, 206 insertions(+), 79 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index e6d8383322..22d3b8af32 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2585,7 +2585,6 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): return element.ObjectType in annotation_types_with_order - class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.direct_profile_edit" bl_label = "IFC Direct Profile Edit" @@ -2597,22 +2596,22 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): # Only allow in OBJECT or EDIT modes if context.mode not in ("OBJECT", "EDIT_MESH", "EDIT_CURVE"): return False - + # Must have an active object if not context.active_object: return False - + # In edit mode, we're good to go (we'll exit) if context.mode in ("EDIT_MESH", "EDIT_CURVE"): return True - + # In object mode, check if it's an editable object type obj = context.active_object - + # Only mesh and curve objects are editable if obj.type not in ("MESH", "CURVE"): return False - + return True def _execute(self, context): @@ -2632,7 +2631,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): # If we're already in edit mode, exit to object mode and SAVE changes if context.mode in ("EDIT_MESH", "EDIT_CURVE"): return self.handle_exit_edit_mode(context) - + # We're in object mode, try to enter profile/axis edit return self.handle_enter_edit_mode(context) @@ -2641,59 +2640,140 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + # Check if we're editing a representation item if tool.Geometry.is_representation_item(obj): return self.exit_item_edit_mode(context, obj) - + # Check if we're editing an element-level profile or axis element = tool.Ifc.get_entity(obj) if element and tool.Geometry.has_mesh_properties(obj.data): return self.exit_element_edit_mode(context, obj, element) - + # For other edit modes, use standard operator return bpy.ops.bim.override_mode_set_object() def exit_item_edit_mode(self, context, obj): - """Exit from SweptAreaSolid item editing.""" + """Exit from representation item editing.""" try: + # Make absolutely sure we're in object mode before proceeding + if context.mode != "OBJECT": + bpy.ops.object.mode_set(mode="OBJECT", toggle=False) + item = tool.Geometry.get_active_representation(obj) - if not item or not item.is_a("IfcSweptAreaSolid"): + if not item: return bpy.ops.bim.override_mode_set_object() - # Use the standard save workflow for items - from bonsai.bim.module.model.decorator import ProfileDecorator - - ProfileDecorator.uninstall() - tool.Blender.toggle_edit_mode(context) - - profile = tool.Model.export_profile(obj) - if not profile: - - def msg(self, context): - self.layout.label(text="INVALID PROFILE") - - context.window_manager.popup_menu(msg, title="Error", icon="ERROR") - tool.Blender.toggle_edit_mode(context) - ProfileDecorator.install(context) - return {"CANCELLED"} - - old_profile = item.SweptArea - profile.ProfileName = old_profile.ProfileName - - ifc_file = tool.Ifc.get() - for inverse in ifc_file.get_inverse(old_profile): - ifcopenshell.util.element.replace_attribute(inverse, old_profile, profile) - - tool.Profile.replace_profile_in_profiles_ui(old_profile.id(), profile.id()) - ifcopenshell.util.element.remove_deep2(ifc_file, old_profile) - + # Fix vertex order for annotation items props = tool.Geometry.get_geometry_props() - if props.representation_obj: + rep_obj = props.representation_obj + if rep_obj: + element = tool.Ifc.get_entity(rep_obj) + if element and OverrideModeSetObject._is_annotation_object(self, element): + tool.Geometry.ensure_annotation_vertex_order(obj) + + # Handle SweptAreaSolid + if item.is_a("IfcSweptAreaSolid"): + from bonsai.bim.module.model.decorator import ProfileDecorator + + ProfileDecorator.uninstall() + + profile = tool.Model.export_profile(obj) + if not profile: + def msg(self, context): + self.layout.label(text="INVALID PROFILE") + context.window_manager.popup_menu(msg, title="Error", icon="ERROR") + tool.Blender.toggle_edit_mode(context) + ProfileDecorator.install(context) + return {"CANCELLED"} + + old_profile = item.SweptArea + profile.ProfileName = old_profile.ProfileName + + ifc_file = tool.Ifc.get() + for inverse in ifc_file.get_inverse(old_profile): + ifcopenshell.util.element.replace_attribute(inverse, old_profile, profile) + + tool.Profile.replace_profile_in_profiles_ui(old_profile.id(), profile.id()) + ifcopenshell.util.element.remove_deep2(ifc_file, old_profile) + + if props.representation_obj: + tool.Geometry.reload_representation(props.representation_obj) + tool.Geometry.disable_item_mode() + + return {"FINISHED"} + + # Handle curvelike items (annotations) + elif tool.Geometry.is_curvelike_item(item): + from bonsai.bim.module.model.decorator import ProfileDecorator + + ProfileDecorator.uninstall() + + new = tool.Model.export_curves(obj) + + if not new: + def msg(self, context): + self.layout.label(text="INVALID PROFILE") + context.window_manager.popup_menu(msg, title="Error", icon="ERROR") + tool.Blender.toggle_edit_mode(context) + ProfileDecorator.install(context) + return {"CANCELLED"} + + additional_curves = [] + if len(new) > 1: + additional_curves = new[1:] + new = new[0] + + ifc_file = tool.Ifc.get() + for inverse in ifc_file.get_inverse(item): + ifcopenshell.util.element.replace_attribute(inverse, item, new) + ifcopenshell.util.element.remove_deep2(ifc_file, item) + + tool.Ifc.link(new, obj.data) + tool.Geometry.import_item(obj) + + for curve_item in additional_curves: + representation = tool.Geometry.get_active_representation(props.representation_obj) + representation = ifcopenshell.util.representation.resolve_representation(representation) + representation.Items = list(representation.Items) + [curve_item] + + mesh = bpy.data.meshes.new("temp") + new_obj = bpy.data.objects.new("temp", mesh) + tool.Geometry.name_item_object(new_obj, curve_item) + tool.Ifc.link(curve_item, mesh) + bpy.context.collection.objects.link(new_obj) + props.add_item_object(new_obj, curve_item) + new_obj.matrix_world = obj.matrix_world + tool.Geometry.import_item(new_obj) + + if additional_curves: + tool.Root.reload_item_decorator() + + # Reload representation and exit item mode tool.Geometry.reload_representation(props.representation_obj) tool.Geometry.disable_item_mode() - - return {"FINISHED"} + + return {"FINISHED"} + + # Handle meshlike items + elif tool.Geometry.is_meshlike_item(item): + if tool.Geometry.is_geometric_data(obj.data) and ( + item.is_a("IfcVertex") or item.is_a("IfcEdge") or obj.data.polygons + ): + tool.Geometry.edit_meshlike_item(obj) + else: + tool.Geometry.import_item(obj) + tool.Root.reload_item_decorator() + + # Exit item mode to return to object mode + tool.Geometry.disable_item_mode() + + return {"FINISHED"} + + # Fallback + else: + return bpy.ops.bim.override_mode_set_object() + except Exception as e: self.report({"ERROR"}, f"Failed to save item changes: {str(e)}") return {"CANCELLED"} @@ -2702,11 +2782,11 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): """Exit from element-level profile or axis editing.""" try: mesh_props = tool.Geometry.get_mesh_props(obj.data) - + # Check if we're editing axis if mesh_props.subshape_type == "AXIS": return bpy.ops.bim.edit_extrusion_axis() - + # Otherwise, we're editing a profile body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if body: @@ -2717,7 +2797,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to save profile/axis changes: {str(e)}") return {"CANCELLED"} - + # Fallback to standard operator return bpy.ops.bim.override_mode_set_object() @@ -2726,37 +2806,37 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + # Check if object has mesh or curve data - if not hasattr(obj, "data") or not obj.data: + if not hasattr(obj, 'data') or not obj.data: self.report({"INFO"}, "Object has no editable data") return {"CANCELLED"} - + element = tool.Ifc.get_entity(obj) if not element: self.report({"INFO"}, "Active object is not an IFC element") return {"CANCELLED"} - + # Check if this is a LAYER2 element (wall, railing, etc.) try: material_usage = tool.Model.get_usage_type(element) except: material_usage = None - + if material_usage == "LAYER2": self.report({"ERROR"}, "LAYER2 elements (walls, railings, etc.) cannot use profile editing.") return {"CANCELLED"} - + # Try to get representation try: representation = tool.Geometry.get_active_representation(obj) except: representation = None - + if not representation: self.report({"INFO"}, "Object has no active representation") return {"CANCELLED"} - + # Check for PROFILE usage (beams, columns, members) - should edit axis if material_usage == "PROFILE": try: @@ -2764,7 +2844,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to enable axis editing: {str(e)}") return {"CANCELLED"} - + # Check if this is an element with an extrusion profile (LAYER3, etc) try: body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") @@ -2776,63 +2856,105 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to enable profile editing: {str(e)}") return {"CANCELLED"} - + # Otherwise, try to enter item mode and edit SweptAreaSolid return self.enter_item_edit_mode(context, obj) def enter_item_edit_mode(self, context, obj): - """Enter item mode for SweptAreaSolid editing.""" + """Enter item mode for representation item editing.""" try: props = tool.Geometry.get_geometry_props() if not props.representation_obj: bpy.ops.bim.import_representation_items() props = tool.Geometry.get_geometry_props() - - # Find the SweptAreaSolid item + + # Find an editable item - prioritize SweptAreaSolid but allow others + editable_item_obj = None swept_solid_obj = None + for item_obj_data in props.item_objs: item_obj = item_obj_data.obj if not item_obj: continue try: item = tool.Geometry.get_active_representation(item_obj) - if item and item.is_a("IfcSweptAreaSolid"): + if not item: + continue + + # Prioritize SweptAreaSolid + if item.is_a("IfcSweptAreaSolid"): swept_solid_obj = item_obj + editable_item_obj = item_obj break + + # But accept other editable types as fallback + if not editable_item_obj: + editable_item_obj = item_obj except: continue - - if not swept_solid_obj: - self.report({"INFO"}, "No editable SweptAreaSolid item found") + + if not editable_item_obj: + self.report({"INFO"}, "No editable representation item found") tool.Geometry.disable_item_mode() return {"CANCELLED"} - - # Select and activate the swept solid object - bpy.ops.object.select_all(action="DESELECT") - swept_solid_obj.select_set(True) - context.view_layer.objects.active = swept_solid_obj - - # Import the profile to prepare for editing - item = tool.Geometry.get_active_representation(swept_solid_obj) - if item and item.is_a("IfcSweptAreaSolid"): + + # Select and activate the editable object + bpy.ops.object.select_all(action='DESELECT') + editable_item_obj.select_set(True) + context.view_layer.objects.active = editable_item_obj + + # Get the item to determine how to edit it + item = tool.Geometry.get_active_representation(editable_item_obj) + + # Handle SweptAreaSolid with profile import + if item.is_a("IfcSweptAreaSolid"): profile = item.SweptArea - res = tool.Model.import_profile(profile, obj=swept_solid_obj) + res = tool.Model.import_profile(profile, obj=editable_item_obj) if res is None: self.report({"ERROR"}, "Couldn't import profile for editing") tool.Geometry.disable_item_mode() return {"CANCELLED"} - - tool.Ifc.link(item, swept_solid_obj.data) + + tool.Ifc.link(item, editable_item_obj.data) tool.Blender.toggle_edit_mode(context) - + from bonsai.bim.module.model.decorator import ProfileDecorator - ProfileDecorator.install(context) - + if not bpy.app.background: tool.Blender.set_viewport_tool("bim.cad_tool") - + return {"FINISHED"} + + # Handle other item types (annotations, curves, etc.) + elif tool.Geometry.is_curvelike_item(item): + tool.Model.import_curve(item, obj=editable_item_obj) + tool.Ifc.link(item, editable_item_obj.data) + tool.Blender.toggle_edit_mode(context) + + from bonsai.bim.module.model.decorator import ProfileDecorator + ProfileDecorator.install(context) + + if not bpy.app.background: + tool.Blender.set_viewport_tool("bim.cad_tool") + + return {"FINISHED"} + + # Handle meshlike items + elif tool.Geometry.is_meshlike_item(item): + tool.Geometry.dissolve_triangulated_edges(editable_item_obj) + tool.Blender.select_and_activate_single_object(context, editable_item_obj) + assert isinstance(mesh := editable_item_obj.data, bpy.types.Mesh) + props = tool.Geometry.get_mesh_props(mesh) + props.mesh_checksum = tool.Geometry.get_mesh_checksum(mesh) + tool.Blender.toggle_edit_mode(context) + return {"FINISHED"} + + else: + self.report({"INFO"}, f"Editing {item.is_a()} geometry is not yet supported") + tool.Geometry.disable_item_mode() + return {"CANCELLED"} + except Exception as e: self.report({"ERROR"}, f"Failed to enter item edit mode: {str(e)}") try: @@ -2841,7 +2963,12 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): pass return {"CANCELLED"} - return {"CANCELLED"} + + + + + + class FlipObject(bpy.types.Operator): From 30e750d77008dcbbcf2f4c06782683f73abbf348 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 2 Dec 2025 11:13:47 -0600 Subject: [PATCH 262/657] some old vestige of a bygone era. --- src/bonsai/bonsai/bim/module/project/ui.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 358f64e681..996e0cbac8 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -664,12 +664,4 @@ class BIM_PT_purge(Panel): row.operator("bim.purge_unused_elements_by_class", text="Purge Orphaned", icon="TRASH") row.operator("bim.print_unused_elements_stats", text="", icon="INFO") - if context.active_object and (data := context.active_object.data): - mprops = tool.Geometry.get_mesh_props(data) - 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 + From 549b2e6ff8dc94f427487e85826701d5d86a0014 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 4 Dec 2025 16:49:16 +0500 Subject: [PATCH 263/657] black . --- .../bonsai/bim/module/geometry/operator.py | 134 +++++++++--------- src/bonsai/bonsai/bim/module/project/ui.py | 2 - 2 files changed, 67 insertions(+), 69 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 22d3b8af32..d148b3df05 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2585,6 +2585,7 @@ class OverrideModeSetObject(bpy.types.Operator, tool.Ifc.Operator): return element.ObjectType in annotation_types_with_order + class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.direct_profile_edit" bl_label = "IFC Direct Profile Edit" @@ -2596,22 +2597,22 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): # Only allow in OBJECT or EDIT modes if context.mode not in ("OBJECT", "EDIT_MESH", "EDIT_CURVE"): return False - + # Must have an active object if not context.active_object: return False - + # In edit mode, we're good to go (we'll exit) if context.mode in ("EDIT_MESH", "EDIT_CURVE"): return True - + # In object mode, check if it's an editable object type obj = context.active_object - + # Only mesh and curve objects are editable if obj.type not in ("MESH", "CURVE"): return False - + return True def _execute(self, context): @@ -2631,7 +2632,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): # If we're already in edit mode, exit to object mode and SAVE changes if context.mode in ("EDIT_MESH", "EDIT_CURVE"): return self.handle_exit_edit_mode(context) - + # We're in object mode, try to enter profile/axis edit return self.handle_enter_edit_mode(context) @@ -2640,16 +2641,16 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + # Check if we're editing a representation item if tool.Geometry.is_representation_item(obj): return self.exit_item_edit_mode(context, obj) - + # Check if we're editing an element-level profile or axis element = tool.Ifc.get_entity(obj) if element and tool.Geometry.has_mesh_properties(obj.data): return self.exit_element_edit_mode(context, obj, element) - + # For other edit modes, use standard operator return bpy.ops.bim.override_mode_set_object() @@ -2659,7 +2660,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): # Make absolutely sure we're in object mode before proceeding if context.mode != "OBJECT": bpy.ops.object.mode_set(mode="OBJECT", toggle=False) - + item = tool.Geometry.get_active_representation(obj) if not item: return bpy.ops.bim.override_mode_set_object() @@ -2675,45 +2676,49 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): # Handle SweptAreaSolid if item.is_a("IfcSweptAreaSolid"): from bonsai.bim.module.model.decorator import ProfileDecorator - + ProfileDecorator.uninstall() - + profile = tool.Model.export_profile(obj) if not profile: + def msg(self, context): self.layout.label(text="INVALID PROFILE") + context.window_manager.popup_menu(msg, title="Error", icon="ERROR") tool.Blender.toggle_edit_mode(context) ProfileDecorator.install(context) return {"CANCELLED"} - + old_profile = item.SweptArea profile.ProfileName = old_profile.ProfileName - + ifc_file = tool.Ifc.get() for inverse in ifc_file.get_inverse(old_profile): ifcopenshell.util.element.replace_attribute(inverse, old_profile, profile) - + tool.Profile.replace_profile_in_profiles_ui(old_profile.id(), profile.id()) ifcopenshell.util.element.remove_deep2(ifc_file, old_profile) - + if props.representation_obj: tool.Geometry.reload_representation(props.representation_obj) tool.Geometry.disable_item_mode() - + return {"FINISHED"} - + # Handle curvelike items (annotations) elif tool.Geometry.is_curvelike_item(item): from bonsai.bim.module.model.decorator import ProfileDecorator - + ProfileDecorator.uninstall() - + new = tool.Model.export_curves(obj) if not new: + def msg(self, context): self.layout.label(text="INVALID PROFILE") + context.window_manager.popup_menu(msg, title="Error", icon="ERROR") tool.Blender.toggle_edit_mode(context) ProfileDecorator.install(context) @@ -2748,13 +2753,13 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): if additional_curves: tool.Root.reload_item_decorator() - + # Reload representation and exit item mode tool.Geometry.reload_representation(props.representation_obj) tool.Geometry.disable_item_mode() - + return {"FINISHED"} - + # Handle meshlike items elif tool.Geometry.is_meshlike_item(item): if tool.Geometry.is_geometric_data(obj.data) and ( @@ -2764,16 +2769,16 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): else: tool.Geometry.import_item(obj) tool.Root.reload_item_decorator() - + # Exit item mode to return to object mode tool.Geometry.disable_item_mode() - + return {"FINISHED"} - + # Fallback else: return bpy.ops.bim.override_mode_set_object() - + except Exception as e: self.report({"ERROR"}, f"Failed to save item changes: {str(e)}") return {"CANCELLED"} @@ -2782,11 +2787,11 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): """Exit from element-level profile or axis editing.""" try: mesh_props = tool.Geometry.get_mesh_props(obj.data) - + # Check if we're editing axis if mesh_props.subshape_type == "AXIS": return bpy.ops.bim.edit_extrusion_axis() - + # Otherwise, we're editing a profile body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if body: @@ -2797,7 +2802,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to save profile/axis changes: {str(e)}") return {"CANCELLED"} - + # Fallback to standard operator return bpy.ops.bim.override_mode_set_object() @@ -2806,37 +2811,37 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + # Check if object has mesh or curve data - if not hasattr(obj, 'data') or not obj.data: + if not hasattr(obj, "data") or not obj.data: self.report({"INFO"}, "Object has no editable data") return {"CANCELLED"} - + element = tool.Ifc.get_entity(obj) if not element: self.report({"INFO"}, "Active object is not an IFC element") return {"CANCELLED"} - + # Check if this is a LAYER2 element (wall, railing, etc.) try: material_usage = tool.Model.get_usage_type(element) except: material_usage = None - + if material_usage == "LAYER2": self.report({"ERROR"}, "LAYER2 elements (walls, railings, etc.) cannot use profile editing.") return {"CANCELLED"} - + # Try to get representation try: representation = tool.Geometry.get_active_representation(obj) except: representation = None - + if not representation: self.report({"INFO"}, "Object has no active representation") return {"CANCELLED"} - + # Check for PROFILE usage (beams, columns, members) - should edit axis if material_usage == "PROFILE": try: @@ -2844,7 +2849,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to enable axis editing: {str(e)}") return {"CANCELLED"} - + # Check if this is an element with an extrusion profile (LAYER3, etc) try: body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") @@ -2856,7 +2861,7 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): except Exception as e: self.report({"ERROR"}, f"Failed to enable profile editing: {str(e)}") return {"CANCELLED"} - + # Otherwise, try to enter item mode and edit SweptAreaSolid return self.enter_item_edit_mode(context, obj) @@ -2867,11 +2872,11 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): if not props.representation_obj: bpy.ops.bim.import_representation_items() props = tool.Geometry.get_geometry_props() - + # Find an editable item - prioritize SweptAreaSolid but allow others editable_item_obj = None swept_solid_obj = None - + for item_obj_data in props.item_objs: item_obj = item_obj_data.obj if not item_obj: @@ -2880,32 +2885,32 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): item = tool.Geometry.get_active_representation(item_obj) if not item: continue - + # Prioritize SweptAreaSolid if item.is_a("IfcSweptAreaSolid"): swept_solid_obj = item_obj editable_item_obj = item_obj break - + # But accept other editable types as fallback if not editable_item_obj: editable_item_obj = item_obj except: continue - + if not editable_item_obj: self.report({"INFO"}, "No editable representation item found") tool.Geometry.disable_item_mode() return {"CANCELLED"} - + # Select and activate the editable object - bpy.ops.object.select_all(action='DESELECT') + bpy.ops.object.select_all(action="DESELECT") editable_item_obj.select_set(True) context.view_layer.objects.active = editable_item_obj - + # Get the item to determine how to edit it item = tool.Geometry.get_active_representation(editable_item_obj) - + # Handle SweptAreaSolid with profile import if item.is_a("IfcSweptAreaSolid"): profile = item.SweptArea @@ -2914,32 +2919,34 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): self.report({"ERROR"}, "Couldn't import profile for editing") tool.Geometry.disable_item_mode() return {"CANCELLED"} - + tool.Ifc.link(item, editable_item_obj.data) tool.Blender.toggle_edit_mode(context) - + from bonsai.bim.module.model.decorator import ProfileDecorator + ProfileDecorator.install(context) - + if not bpy.app.background: tool.Blender.set_viewport_tool("bim.cad_tool") - + return {"FINISHED"} - + # Handle other item types (annotations, curves, etc.) elif tool.Geometry.is_curvelike_item(item): tool.Model.import_curve(item, obj=editable_item_obj) tool.Ifc.link(item, editable_item_obj.data) tool.Blender.toggle_edit_mode(context) - + from bonsai.bim.module.model.decorator import ProfileDecorator + ProfileDecorator.install(context) - + if not bpy.app.background: tool.Blender.set_viewport_tool("bim.cad_tool") - + return {"FINISHED"} - + # Handle meshlike items elif tool.Geometry.is_meshlike_item(item): tool.Geometry.dissolve_triangulated_edges(editable_item_obj) @@ -2949,12 +2956,12 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): props.mesh_checksum = tool.Geometry.get_mesh_checksum(mesh) tool.Blender.toggle_edit_mode(context) return {"FINISHED"} - + else: self.report({"INFO"}, f"Editing {item.is_a()} geometry is not yet supported") tool.Geometry.disable_item_mode() return {"CANCELLED"} - + except Exception as e: self.report({"ERROR"}, f"Failed to enter item edit mode: {str(e)}") try: @@ -2964,13 +2971,6 @@ class DirectProfileEdit(bpy.types.Operator, tool.Ifc.Operator): return {"CANCELLED"} - - - - - - - class FlipObject(bpy.types.Operator): bl_idname = "bim.flip_object" bl_label = "Flip Object" diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 996e0cbac8..6674a1a51a 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -663,5 +663,3 @@ class BIM_PT_purge(Panel): row.prop(props, "ifc_class_purge", text="") row.operator("bim.purge_unused_elements_by_class", text="Purge Orphaned", icon="TRASH") row.operator("bim.print_unused_elements_stats", text="", icon="INFO") - - From 16336766da96d1da28484b1bf7e0f356065ed161 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 2 Dec 2025 21:31:13 +0500 Subject: [PATCH 264/657] build-all - remove `WASM_TOOLCHAIN_FILE` doc deprecated after 89a6eac --- nix/build-all.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/nix/build-all.py b/nix/build-all.py index 1d254d5fdb..e8a5de6f72 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -56,8 +56,6 @@ Used environment variables: `SIDE_MODULE_CFLAGS`, `SIDE_MODULE_LDFLAGS`. Allows to build wasm without pyodide build environment, which can be useful for debugging build issues. Example value: 'pyodide/cpython/installs/python-3.13.2' - - ``WASM_TOOLCHAIN_FILE`` - path to emscripten toolchain file from pyodide ('Emscripten.cmake') - needed only if ``WASM_PYTHON_PATH`` is provided. - ``ADD_COMMIT_SHA`` - if defined with any non-empty value then `ADD_COMMIT_SHA` and `VERSION_OVERRIDE` will be set to `ON` while configuring IfcOpenShell From 172d840a775213d64f6a2c3fa98789bafc91f961 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 3 Dec 2025 11:13:07 +0500 Subject: [PATCH 265/657] cmake - remove unused `WITH_RELATIONSHIP_VALIDATION` compilation definition --- src/ifcconvert/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index 4a889a57bf..a9dbe6e1b7 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -10,8 +10,5 @@ set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES}) add_executable(IfcConvert ${IFCCONVERT_FILES}) target_link_libraries(IfcConvert IfcGeom IfcParse Serializers ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}) -if(WITH_RELATIONSHIP_VALIDATION) - set_property(TARGET IfcConvert APPEND_STRING PROPERTY COMPILE_FLAGS " -DWITH_RELATIONSHIP_VALIDATION") -endif() install(TARGETS IfcConvert) From bf308995fb84b027ee77a83b43baa2c2ab22605f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 3 Dec 2025 18:58:44 +0500 Subject: [PATCH 266/657] install-ifcopenshell.bat - add usage example --- win/install-ifcopenshell.bat | 3 +++ 1 file changed, 3 insertions(+) diff --git a/win/install-ifcopenshell.bat b/win/install-ifcopenshell.bat index 77b89b2f4c..6c46574819 100755 --- a/win/install-ifcopenshell.bat +++ b/win/install-ifcopenshell.bat @@ -20,6 +20,9 @@ :: This batch file expects CMake generator as %1 and build configuration type as %2. If not provided, :: a deduced generator will be used for %1 and BUILD_CFG_DEFAULT for %2 (both set in vs-cfg.cmd) :: Possible extra parameters are passed for the MSBuild call. +:: +:: Example usage: +:: install-ifcopenshell.bat vs2022-x64 Debug @if not defined ECHO_ON ( echo off ) set PROJECT_NAME=IfcOpenShell From a588d15438f77fe8b74eb2f971d7f2622636ac10 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 3 Dec 2025 20:04:19 +0500 Subject: [PATCH 267/657] run-cmake.bat - option to use ninja generator for debugging --- win/run-cmake.bat | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/win/run-cmake.bat b/win/run-cmake.bat index 7126cf9219..f4836e1ac1 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -170,14 +170,25 @@ set CMAKE_PREFIX_PATH=%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%ROCKSDB_INSTALL_DIR%;%ZSTD_INSTALL_DIR% set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_INSTALL_DIR%;%CCACHE_INSTALL_DIR% +:: Not fully supported - not available from install-ifcopenshell +:: and some logs are still showing Visual Studio generators. +:: Needed just for debugging. +if defined USE_NINJA ( + set GENERATOR=Ninja + set ARCH_OPTION= +) else ( + set GENERATOR=%GENERATOR% + set ARCH_OPTION=-A %VS_PLATFORM% +) + IF NOT "%VS_TOOLSET_HOST%"=="" ( - cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% -A %VS_PLATFORM% -T %VS_TOOLSET_HOST% ^ + cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% %ARCH_OPTION% -T %VS_TOOLSET_HOST% ^ -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" ^ -DWITH_ROCKSDB=On -DWITH_ZSTD=On ^ -DCMAKE_PREFIX_PATH="%CMAKE_PREFIX_PATH%" ^ -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% %ARGUMENTS% ) ELSE ( - cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% -A %VS_PLATFORM% ^ + cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% %ARCH_OPTION% ^ -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" ^ -DWITH_ROCKSDB=On -DWITH_ZSTD=On ^ -DCMAKE_PREFIX_PATH="%CMAKE_PREFIX_PATH%" ^ From 9820adb33742764a15c6d3736ea33efe011d91ff Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 3 Dec 2025 20:45:44 +0500 Subject: [PATCH 268/657] svgfill - use standard cmake installation (same as 083fab525) --- src/svgfill/CMakeLists.txt | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 155c016389..39b4056641 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -15,14 +15,6 @@ endif() include(GNUInstallDirs) -# Specify paths to install files -if(NOT BINDIR) - set(BINDIR bin) -endif() -if(NOT IS_ABSOLUTE ${BINDIR}) - set(BINDIR ${CMAKE_INSTALL_BINDIR}) -endif() -message(STATUS "BINDIR: ${BINDIR}") if(NOT INCLUDEDIR) set(INCLUDEDIR include) @@ -32,14 +24,6 @@ if(NOT IS_ABSOLUTE ${INCLUDEDIR}) endif() message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") -if(NOT LIBDIR) - set(LIBDIR lib) -endif() -if(NOT IS_ABSOLUTE ${LIBDIR}) - set(LIBDIR ${CMAKE_INSTALL_LIBDIR}) -endif() -message(STATUS "LIBDIR: ${LIBDIR}") - set(CGAL_LIBRARY_NAMES libCGAL_Core libCGAL_ImageIO libCGAL) if(NOT CGAL_INCLUDE_DIR) @@ -158,6 +142,5 @@ if(WIN32) target_link_options(svgfill_exe PRIVATE "/NOIMPLIB") endif() -install(TARGETS svgfill_exe DESTINATION ${BINDIR}) -install(TARGETS svgfill DESTINATION ${LIBDIR}) +install(TARGETS svgfill_exe svgfill) install(FILES ${LIB_H_FILES} DESTINATION ${INCLUDEDIR}) From 6a0caa7989b9032bdcd9a5ea94017ddeca324fb6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 4 Dec 2025 12:09:53 +0500 Subject: [PATCH 269/657] cmake - fix missing xml.lib in debug builds #7413 After 5d56025 we were using `LibXml2::LibXml2` instead of `LIBXML2_LIBRARIES` for linking, but this target was missing debug variants leading to issues during linking. --- cmake/FindLibXml2.cmake | 30 ++++++++++++++---------------- cmake/utilities.cmake | 24 ++++++++++++++++++++++++ src/ifcparse/CMakeLists.txt | 4 ---- src/svgfill/CMakeLists.txt | 8 ++------ 4 files changed, 40 insertions(+), 26 deletions(-) diff --git a/cmake/FindLibXml2.cmake b/cmake/FindLibXml2.cmake index 0bfab4f2b6..4d6556c47b 100644 --- a/cmake/FindLibXml2.cmake +++ b/cmake/FindLibXml2.cmake @@ -5,9 +5,8 @@ # If input variables are not specified, try to find LibXml2 config. # Input variables could also be provided as environment variables. # -# Output variables: -# - `LIBXML2_INCLUDE_DIR` -# - `LIBXML2_LIBRARIES` +# Output targets: +# - `LibXml2::LibXml2` # # To avoid cyclic calls to this file @@ -27,23 +26,22 @@ if((NOT LIBXML2_INCLUDE_DIR AND NOT LIBXML2_LIBRARIES)) else() message(STATUS "Found LibXml2 config: ${LibXml2_DIR}") endif() - - if(TARGET LibXml2::LibXml2) - # Config mode already gives us the target - set(LIBXML2_LIBRARIES LibXml2::LibXml2) - get_target_property(LIBXML2_INCLUDE_DIR LibXml2::LibXml2 INTERFACE_INCLUDE_DIRECTORIES) - else() - # Module mode (Ubuntu) - set(LIBXML2_LIBRARIES ${LibXml2_LIBRARIES}) - set(LIBXML2_INCLUDE_DIR ${LibXml2_INCLUDE_DIRS}) - endif() else() find_package(LibXml2 REQUIRED) + if(MSVC) + # Unset `IMPORTED_LOCATION` and set it manually. + set_property(TARGET LibXml2::LibXml2 PROPERTY IMPORTED_LOCATION) + get_release_variant(LIBXML2_RELEASE_LIB "${LIBXML2_LIBRARIES}" "d") + get_debug_variant(LIBXML2_DEBUG_LIB "${LIBXML2_LIBRARIES}" "d") + set_target_properties(LibXml2::LibXml2 + PROPERTIES + IMPORTED_CONFIGURATIONS "Release;Debug" + IMPORTED_LOCATION_RELEASE "${LIBXML2_RELEASE_LIB}" + IMPORTED_LOCATION_DEBUG "${LIBXML2_DEBUG_LIB}" + ) + endif() endif() -if(MSVC AND NOT LibXml2_DIR) - add_debug_variants(LIBXML2_LIBRARIES "${LIBXML2_LIBRARIES}" d) -endif() # Restore module path. list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) diff --git a/cmake/utilities.cmake b/cmake/utilities.cmake index 590c5e5c1d..842dfbaf82 100644 --- a/cmake/utilities.cmake +++ b/cmake/utilities.cmake @@ -113,6 +113,30 @@ function(add_debug_variants NAME LIBRARIES POSTFIX) set(${NAME} ${LIBRARIES} PARENT_SCOPE) endfunction() +# E.g. +# - `get_release_variant(MYLIB "mylibd.lib" "d")` -> `MYLIB = "mylib.lib"` +# - `get_release_variant(MYLIB "mylib.lib" "d")` -> `MYLIB = "mylib.lib"` +function(get_release_variant NAME LIBRARY POSTFIX) + set(RELEASE_SUFFIX ".lib") + set(DEBUG_SUFFIX "${POSTFIX}${RELEASE_SUFFIX}") + if("${LIBRARY}" MATCHES "${DEBUG_SUFFIX}$") + string(REPLACE "${DEBUG_SUFFIX}" "${RELEASE_SUFFIX}" LIBRARY ${LIBRARY}) + endif() + set(${NAME} "${LIBRARY}" PARENT_SCOPE) +endfunction() + +# E.g. +# - `get_debug_variant(MYLIB "mylib.lib" "d")` -> `MYLIB = "mylibd.lib"` +# - `get_debug_variant(MYLIB "mylibd.lib" "d")` -> `MYLIB = "mylibd.lib"` +function(get_debug_variant NAME LIBRARY POSTFIX) + set(RELEASE_SUFFIX ".lib") + set(DEBUG_SUFFIX "${POSTFIX}${RELEASE_SUFFIX}") + if(NOT "${LIBRARY}" MATCHES "${DEBUG_SUFFIX}$" AND "${LIBRARY}" MATCHES "${RELEASE_SUFFIX}$") + string(REPLACE "${RELEASE_SUFFIX}" "${DEBUG_SUFFIX}" LIBRARY ${LIBRARY}) + endif() + set(${NAME} "${LIBRARY}" PARENT_SCOPE) +endfunction() + function(files_for_ifc_version IFC_VERSION RESULT_NAME) set(IFC_PARSE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcparse) set(${RESULT_NAME} diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index e6b9a15346..88003d342d 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -39,10 +39,6 @@ if(IFCXML_SUPPORT) target_compile_definitions(IfcParse PUBLIC WITH_IFCXML) set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML PARENT_SCOPE) - if(LibXml2_DIR) - target_compile_definitions(IfcParse PRIVATE ${LIBXML2_DEFINITIONS}) - endif() - target_link_libraries(IfcParse LibXml2::LibXml2) endif() diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 39b4056641..1a70cecf9c 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -114,7 +114,7 @@ endif() -include_directories(${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} +include_directories(${Boost_INCLUDE_DIRS} ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include ) @@ -122,11 +122,7 @@ file(GLOB LIB_H_FILES src/*.h) file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp) set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES}) add_library(svgfill ${LIB_SRC_FILES}) -if(LibXml2_DIR) - find_package(LibXml2 CONFIG REQUIRED) - target_compile_definitions(svgfill PRIVATE ${LIBXML2_DEFINITIONS}) -endif() -target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} ${LIBXML2_LIBRARIES} ${CGAL_LIBRARIES}) +target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 ${CGAL_LIBRARIES}) add_executable(svgfill_exe src/main.cpp) target_link_libraries(svgfill_exe svgfill) From 91f19f7a54d4b70db11c85ec4e0490149d290e49 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 4 Dec 2025 12:13:01 +0500 Subject: [PATCH 270/657] cmake - remove unused CMP0074 policy it's automatically applied since cmake 3.12 --- src/svgfill/CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 1a70cecf9c..78dc83b5b0 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -5,9 +5,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) project (svgfill) -cmake_policy(SET CMP0074 NEW) # find_package() uses _ROOT variables. -if (POLICY CMP0144) -cmake_policy(SET CMP0144 NEW) # find_package() uses upper-case _ROOT variables. +if (POLICY CMP0144) # 3.27 + cmake_policy(SET CMP0144 NEW) # find_package() uses upper-case _ROOT variables. endif() if(POLICY CMP0167) # 3.30 find_package(Boost) to use BoostConfig instead of FindBoost. cmake_policy(SET CMP0167 OLD) From db09744428377eed794db551890893d5e998c120 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 4 Dec 2025 18:36:48 +0500 Subject: [PATCH 271/657] Temporarily disable setting `point3` tag to fix build (4fc2f623c) Since `point3` don't currently have `tag` member. Ping @aothms --- src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp b/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp index d3083a23e7..334be1324a 100644 --- a/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp +++ b/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp @@ -50,7 +50,7 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcOpenCrossProfileDef* inst) { if (tags.has_value() && !tags.get().empty()) { tag = tags.get()[0]; } - start->tag = tag; + // start->tag = tag; auto widths = inst->Widths(); auto angles = inst->Slopes(); // these are actually angles, but the attribute is called Slopes @@ -79,7 +79,8 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcOpenCrossProfileDef* inst) { tag = tags.get()[i+1]; } - points.push_back(taxonomy::make(x, y, z, tag)); + // points.push_back(taxonomy::make(x, y, z, tag)); + points.push_back(taxonomy::make(x, y, z)); } auto mapped = polygon_from_points(points); From 0555523c9848673d558071bbcab502f00e71698e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 4 Dec 2025 18:39:15 +0500 Subject: [PATCH 272/657] cmake - move all cgal related stuff to `CGAL::CGAL` target --- cmake/CMakeLists.txt | 26 +---------- cmake/FindCGAL.cmake | 30 ++++++++++--- src/ifcconvert/CMakeLists.txt | 7 ++- src/ifcgeom/CMakeLists.txt | 12 ++++-- src/ifcgeom/kernels/CMakeLists.txt | 5 ++- src/ifcwrap/CMakeLists.txt | 6 +++ src/svgfill/CMakeLists.txt | 69 ++---------------------------- 7 files changed, 53 insertions(+), 102 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f62a9813ff..cf6e56a68e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -197,11 +197,7 @@ endforeach() if(WITH_CGAL) find_package(CGAL REQUIRED) - if(TARGET CGAL::CGAL) - link_libraries(CGAL::CGAL) - endif() - add_definitions(-DIFOPSH_WITH_CGAL) - set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) + set(CGAL_LIBRARIES CGAL::CGAL) list(APPEND GEOMETRY_KERNELS cgal) endif() @@ -451,7 +447,7 @@ endif(MSVC) include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} - ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} + ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ) @@ -544,24 +540,6 @@ add_subdirectory(../src/ifcparse ifcparse) set(IFCOPENSHELL_LIBRARIES IfcParse) if(BUILD_IFCGEOM) - # CGAL::CGAL target already has dependencies resolved. - if(WITH_CGAL AND CGAL_DIR) - set(CGAL_LIBRARIES CGAL::CGAL) - message(STATUS "Using found CGAL package at '${CGAL_DIR}'") - elseif(WITH_CGAL AND NOT CGAL_DIR) - find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) - find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) - if(NOT libGMP) - message(FATAL_ERROR "Unable to find GMP library files, aborting") - endif() - if(NOT libMPFR) - message(FATAL_ERROR "Unable to find MPFR library files, aborting") - endif() - - list(APPEND CGAL_LIBRARIES "${libMPFR}") - list(APPEND CGAL_LIBRARIES "${libGMP}") - endif() - add_subdirectory(../src/ifcgeom ifcgeom) endif(BUILD_IFCGEOM) diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index caf13ec791..1511d2be80 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -9,10 +9,14 @@ # If input variables are not specified, try to find HDF5 config. # Input variables could also be provided as environment variables. # -# Output variables: -# - `CGAL_INCLUDE_DIR` +# Output targets: +# - `CGAL::CGAL` # +if(TARGET CGAL::CGAL) + return() +endif() + UNIFY_ENVVARS_AND_CACHE(CGAL_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(CGAL_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(GMP_INCLUDE_DIR) @@ -20,7 +24,21 @@ UNIFY_ENVVARS_AND_CACHE(GMP_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(MPFR_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(MPFR_LIBRARY_DIR) -if(NOT CGAL_INCLUDE_DIR) +if(CGAL_INCLUDE_DIR) + find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) + find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) + if(NOT libGMP) + message(FATAL_ERROR "Unable to find GMP library files, aborting") + endif() + if(NOT libMPFR) + message(FATAL_ERROR "Unable to find MPFR library files, aborting") + endif() + + add_library(CGAL::CGAL INTERFACE IMPORTED) + target_include_directories(CGAL::CGAL INTERFACE "${CGAL_INCLUDE_DIR}") + target_include_directories(CGAL::CGAL INTERFACE "${GMP_INCLUDE_DIR}" "${MPFR_INCLUDE_DIR}") + target_link_libraries(CGAL::CGAL INTERFACE "${libMPFR}" "${libGMP}") +else() # CGAL is not respecting default Boost_USE_STATIC_LIBS value # and sometiems it's getting in the way. if(NOT DEFINED Boost_USE_STATIC_LIBS) @@ -28,8 +46,8 @@ if(NOT CGAL_INCLUDE_DIR) else() set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}") endif() - find_package(CGAL CONFIG REQUIRED) - if(NOT CGAL_DIR) + find_package(CGAL CONFIG) + if(NOT CGAL::CGAL) message( FATAL_ERROR "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." @@ -38,5 +56,5 @@ if(NOT CGAL_INCLUDE_DIR) message(STATUS "CGAL: found config at '${CGAL_DIR}'.") endif() -add_definitions(-DIFOPSH_WITH_CGAL) +target_compile_definitions(CGAL::CGAL INTERFACE IFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index a9dbe6e1b7..85b6d16e30 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -9,6 +9,11 @@ endif() set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES}) add_executable(IfcConvert ${IFCCONVERT_FILES}) -target_link_libraries(IfcConvert IfcGeom IfcParse Serializers ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}) +target_link_libraries(IfcConvert + PRIVATE + IfcGeom IfcParse Serializers + ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES} + ${CGAL_LIBRARIES} +) install(TARGETS IfcConvert) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 143caf2159..1d24e7c762 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -22,11 +22,15 @@ endif() find_package(Eigen3 REQUIRED) -if(WASM_BUILD) - target_link_libraries(IfcGeom ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") -else() - target_link_libraries(IfcGeom IfcParse ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") +target_link_libraries(IfcGeom + ${kernel_libraries} ${mapping_libraries} + ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen" + ${CGAL_LIBRARIES} +) +if(NOT WASM_BUILD) + target_link_libraries(IfcGeom IfcParse) endif() +target_link_libraries(IfcGeom ) install(FILES ${SCHEMA_AGNOSTIC_H_FILES} DESTINATION ${INCLUDEDIR}/ifcgeom diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 6ead320c16..d6ba92cc05 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -16,13 +16,16 @@ foreach(kernel ${GEOMETRY_KERNELS}) install(TARGETS ${KERNEL_TARGET}) if(${kernel} STREQUAL "cgal") + find_package(CGAL REQUIRED) + target_link_libraries(${KERNEL_TARGET} CGAL::CGAL) set_property(TARGET ${KERNEL_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") - + set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple") add_library(${KERNEL_TARGET_SIMPLE} OBJECT ${IFCGEOM_FILES}) set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) + target_link_libraries(${KERNEL_TARGET_SIMPLE} CGAL::CGAL) install(TARGETS ${KERNEL_TARGET_SIMPLE}) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) diff --git a/src/ifcwrap/CMakeLists.txt b/src/ifcwrap/CMakeLists.txt index d752cc6650..bbbe428795 100644 --- a/src/ifcwrap/CMakeLists.txt +++ b/src/ifcwrap/CMakeLists.txt @@ -119,6 +119,11 @@ else() ) endif() +if(WITH_CGAL) + find_package(CGAL REQUIRED) + target_link_libraries(ifcopenshell_wrapper PRIVATE CGAL::CGAL) +endif() + target_link_libraries(ifcopenshell_wrapper PRIVATE Python::Module) SET_PROPERTY(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${IFCOPENSHELL_LIBRARIES}) if (WASM_BUILD) @@ -147,6 +152,7 @@ target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${O else() target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL}) endif() +target_link_libraries(ifcopenshell_wrapper PRIVATE ${CGAL_LIBRARIES}) if ((NOT WIN32) AND BUILD_SHARED_LIBS) SET_INSTALL_RPATHS(ifcopenshell_wrapper "${IFCDIRS};${OCC_LIBRARY_DIR}") endif() diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 78dc83b5b0..9464980bdf 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -23,65 +23,6 @@ if(NOT IS_ABSOLUTE ${INCLUDEDIR}) endif() message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") -set(CGAL_LIBRARY_NAMES libCGAL_Core libCGAL_ImageIO libCGAL) - -if(NOT CGAL_INCLUDE_DIR) - find_package(CGAL REQUIRED) - if(NOT CGAL_DIR) - message( - FATAL_ERROR - "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." - ) - endif() - message(STATUS "CGAL: found config at '${CGAL_DIR}'.") - set(CGAL_LIBRARIES CGAL::CGAL) -else() - set(CGAL_INCLUDE_DIR ${CGAL_INCLUDE_DIR} CACHE FILEPATH "CGAL header files") - message(STATUS "Looking for CGAL include files in: ${CGAL_INCLUDE_DIR}") - - if(NOT "${CGAL_LIBRARY_DIR}" STREQUAL "") - set(CGAL_LIBRARY_DIR ${CGAL_LIBRARY_DIR} CACHE FILEPATH "CGAL library files") - message(STATUS "Looking for CGAL library files in: ${CGAL_LIBRARY_DIR}") - endif() - - if(WASM_BUILD) - set(CMAKE_FIND_ROOT_PATH_BACKUP "${CMAKE_FIND_ROOT_PATH}") - set(CMAKE_FIND_ROOT_PATH "") - endif() - - find_library(libCGAL NAMES CGAL PATHS ${CGAL_LIBRARY_DIR} NO_DEFAULT_PATH) - - if(libCGAL) - message(STATUS "CGAL library files found") - foreach(lib ${CGAL_LIBRARY_NAMES}) - string(REPLACE libCGAL "${lib}" lib_path "${libCGAL}") - list(APPEND CGAL_LIBRARIES "${lib_path}") - endforeach() - else() - if(NOT "${CGAL_LIBRARY_DIR}" STREQUAL "") - file(GLOB CGAL_LIBRARIES ${CGAL_LIBRARY_DIR}/CGAL*.lib) - list(LENGTH CGAL_LIBRARY_NAMES num_cgal_library_names) - list(LENGTH CGAL_LIBRARIES num_cgal_libraries) - link_directories("${CGAL_LIBRARY_DIR}") - if(NOT "${num_cgal_library_names}" STREQUAL "${num_cgal_libraries}") - message(FATAL_ERROR "Unable to find CGAL library files, aborting") - endif() - message(STATUS "CGAL library files found") - endif() - endif() - find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) - find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) - if(NOT libGMP) - message(FATAL_ERROR "Unable to find GMP library files, aborting") - endif() - if(NOT libMPFR) - message(FATAL_ERROR "Unable to find MPFR library files, aborting") - endif() - - list(APPEND CGAL_LIBRARIES "${libMPFR}") - list(APPEND CGAL_LIBRARIES "${libGMP}") -endif(NOT CGAL_INCLUDE_DIR) - if(WIN32 AND ("$ENV{CONDA_BUILD}" STREQUAL "")) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) @@ -106,22 +47,18 @@ endif() find_package(Boost) message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") find_package(LibXml2 REQUIRED) - -if(WASM_BUILD) - set(CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH_BACKUP}") -endif() - +find_package(CGAL REQUIRED) include_directories(${Boost_INCLUDE_DIRS} - ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include ) file(GLOB LIB_H_FILES src/*.h) file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp) set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES}) add_library(svgfill ${LIB_SRC_FILES}) -target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 ${CGAL_LIBRARIES}) +target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 CGAL::CGAL) add_executable(svgfill_exe src/main.cpp) target_link_libraries(svgfill_exe svgfill) From 8ea4b9e38c49622b30dcf8f2ffec22083ca0b73a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 4 Dec 2025 21:16:13 +0500 Subject: [PATCH 273/657] Remove redundant links in 0555523c9 --- src/ifcgeom/CMakeLists.txt | 1 - src/ifcwrap/CMakeLists.txt | 5 ----- 2 files changed, 6 deletions(-) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 1d24e7c762..d84b8ec98b 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -30,7 +30,6 @@ target_link_libraries(IfcGeom if(NOT WASM_BUILD) target_link_libraries(IfcGeom IfcParse) endif() -target_link_libraries(IfcGeom ) install(FILES ${SCHEMA_AGNOSTIC_H_FILES} DESTINATION ${INCLUDEDIR}/ifcgeom diff --git a/src/ifcwrap/CMakeLists.txt b/src/ifcwrap/CMakeLists.txt index bbbe428795..7694c29859 100644 --- a/src/ifcwrap/CMakeLists.txt +++ b/src/ifcwrap/CMakeLists.txt @@ -119,11 +119,6 @@ else() ) endif() -if(WITH_CGAL) - find_package(CGAL REQUIRED) - target_link_libraries(ifcopenshell_wrapper PRIVATE CGAL::CGAL) -endif() - target_link_libraries(ifcopenshell_wrapper PRIVATE Python::Module) SET_PROPERTY(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${IFCOPENSHELL_LIBRARIES}) if (WASM_BUILD) From 0d651e377aa65376a147fd94f3250d7e9232c0aa Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Dec 2025 12:12:26 +0500 Subject: [PATCH 274/657] run-cmake.bat - add usage --- win/run-cmake.bat | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/win/run-cmake.bat b/win/run-cmake.bat index f4836e1ac1..9368cbf5db 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -16,6 +16,11 @@ :: along with this program. If not, see . :: :: :: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: Example usage: +:: run-cmake.bat vs2022-x64 +:: run-cmake.bat vs2022-x64 -DGLTF_SUPPORT=ON -DHDF5_SUPPORT=OFF + @if not defined ECHO_ON ( echo off ) echo. From 40cffe2dd1873484a5d579b1fba40b8b0952425e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Dec 2025 13:09:24 +0500 Subject: [PATCH 275/657] cmake - remove unused installs after 8fb10d2 --- src/ifcgeom/kernels/CMakeLists.txt | 3 --- src/ifcgeom/mapping/CMakeLists.txt | 2 -- src/serializers/schema_dependent/CMakeLists.txt | 2 -- 3 files changed, 7 deletions(-) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index d6ba92cc05..1927a1bc68 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -13,8 +13,6 @@ foreach(kernel ${GEOMETRY_KERNELS}) list(APPEND kernel_libraries ${KERNEL_TARGET}) target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) - install(TARGETS ${KERNEL_TARGET}) - if(${kernel} STREQUAL "cgal") find_package(CGAL REQUIRED) target_link_libraries(${KERNEL_TARGET} CGAL::CGAL) @@ -26,7 +24,6 @@ foreach(kernel ${GEOMETRY_KERNELS}) list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) target_link_libraries(${KERNEL_TARGET_SIMPLE} CGAL::CGAL) - install(TARGETS ${KERNEL_TARGET_SIMPLE}) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) endif() diff --git a/src/ifcgeom/mapping/CMakeLists.txt b/src/ifcgeom/mapping/CMakeLists.txt index ef5a658c06..c5d283a2c1 100644 --- a/src/ifcgeom/mapping/CMakeLists.txt +++ b/src/ifcgeom/mapping/CMakeLists.txt @@ -11,8 +11,6 @@ foreach(schema ${SCHEMA_VERSIONS}) target_link_libraries(geometry_mapping_ifc${schema} IfcParse Eigen3::Eigen) list(APPEND mapping_libraries geometry_mapping_ifc${schema}) - - install(TARGETS geometry_mapping_ifc${schema}) endforeach() set(mapping_libraries ${mapping_libraries} PARENT_SCOPE) diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt index c3c2fc42d8..e1d22f262f 100644 --- a/src/serializers/schema_dependent/CMakeLists.txt +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -11,8 +11,6 @@ foreach(schema ${SCHEMA_VERSIONS}) else() target_link_libraries(Serializers_ifc${schema} IfcGeom ${OpenCASCADE_LIBRARIES} ${HDF5_LIBRARIES}) endif() - - install(TARGETS Serializers_ifc${schema}) endforeach() From 3cc8477a01228cee9e8c3a9d92b0f457a87b5aa7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Dec 2025 13:10:03 +0500 Subject: [PATCH 276/657] cmake - move ifcgeom installs to ifcgeom cmake we don't install kernel libraries as they now have `OBJECT` type IFCGEOM_SCHEMA_LIBRARIES and headers were handled in b7a9199 30184a3 9d28628 --- cmake/CMakeLists.txt | 24 ------------------------ src/ifcgeom/CMakeLists.txt | 2 ++ 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index cf6e56a68e..0fdb58bd1c 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -641,30 +641,6 @@ if(BUILD_QTVIEWER) add_subdirectory(../src/qtviewer qtviewer) endif() -if(BUILD_IFCGEOM) - # install(FILES ${IFCGEOM_H_FILES} - # DESTINATION ${INCLUDEDIR}/ifcgeom - # ) - - install(FILES ${SCHEMA_AGNOSTIC_H_FILES} - DESTINATION ${INCLUDEDIR}/ifcgeom - ) - - file(GLOB SERIALIZATION_H_FILES ../src/ifcgeom/serialization/*.h) - install(FILES ${SERIALIZATION_H_FILES} - DESTINATION ${INCLUDEDIR}/ifcgeom/serialization - ) - - foreach(kernel ${GEOMETRY_KERNELS}) - file(GLOB IFCGEOM_H_FILES ../src/ifcgeom/kernels/${kernel}/*.h) - install(FILES ${IFCGEOM_H_FILES} - DESTINATION ${INCLUDEDIR}/ifcgeom/kernels/${kernel} - ) - endforeach() - - install(TARGETS ${IFCGEOM_SCHEMA_LIBRARIES} ${kernel_libraries} IfcGeom) -endif(BUILD_IFCGEOM) - # Cmake uninstall target if(NOT TARGET uninstall) configure_file( diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index d84b8ec98b..8ffd1e77c4 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -31,6 +31,8 @@ if(NOT WASM_BUILD) target_link_libraries(IfcGeom IfcParse) endif() +install(TARGETS IfcGeom) + install(FILES ${SCHEMA_AGNOSTIC_H_FILES} DESTINATION ${INCLUDEDIR}/ifcgeom ) \ No newline at end of file From 225039aa963c65f7768452f5730b45f686f7e836 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Dec 2025 14:26:56 +0500 Subject: [PATCH 277/657] cmake - remove unused `LIBXML2_INCLUDE_DIR` after 6a0caa798 --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0fdb58bd1c..924d88086a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -446,7 +446,7 @@ else() endif(MSVC) include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} + ${Boost_INCLUDE_DIRS} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ) From c2a03eb658a67edcea91d30b34607b9f41cf889d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Dec 2025 14:29:48 +0500 Subject: [PATCH 278/657] cmake - fix uninitialized vars --- cmake/CMakeLists.txt | 8 ++++++-- cmake/FindHDF5.cmake | 6 +++--- src/svgfill/CMakeLists.txt | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 924d88086a..8402c4b956 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -146,6 +146,9 @@ if(CCACHE_FOUND) endif() endif() +# Variable to accumulate swig definitions from various submodules. +set(SWIG_DEFINES "") + if(MSVC AND MSVC_PARALLEL_BUILD) add_definitions("/MP") endif() @@ -275,7 +278,7 @@ endif() # Find Boost: On win32 the (hardcoded) default is to use static libraries and # runtime, when doing running conda-build we pick what conda prepared for us. -if(WIN32 AND("$ENV{CONDA_BUILD}" STREQUAL "")) +if(WIN32 AND NOT DEFINED ENV{CONDA_BUILD}) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME OFF) set(Boost_USE_MULTITHREADED ON) @@ -445,7 +448,7 @@ else() endif() endif(MSVC) -include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} +include_directories(${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} @@ -675,6 +678,7 @@ set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") set(CPACK_GENERATOR "TGZ;DEB") set(CPACK_SOURCE_GENERATOR "TGZ") +set(BOOST_DEPS "") foreach(COMPONENT IN ITEMS ${BOOST_COMPONENTS}) string(REPLACE "_" "-" COMP ${COMPONENT}) set(BOOST_DEPS "${BOOST_DEPS}, libboost-${COMP}-dev") diff --git a/cmake/FindHDF5.cmake b/cmake/FindHDF5.cmake index c29c3e6321..ac6bf553c5 100644 --- a/cmake/FindHDF5.cmake +++ b/cmake/FindHDF5.cmake @@ -19,13 +19,13 @@ UNIFY_ENVVARS_AND_CACHE(HDF5_LIBRARIES) # To avoid cyclic calls to this file list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) -if("${HDF5_INCLUDE_DIR}" STREQUAL "") +if(NOT HDF5_INCLUDE_DIR) message(STATUS "No HDF5 include directory specified") else() set(HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" CACHE FILEPATH "HDF5 header files") endif() -if("${HDF5_LIBRARY_DIR}" STREQUAL "") +if(NOT HDF5_LIBRARY_DIR) message(STATUS "No HDF5 library directory specified") else() set(HDF5_LIBRARY_DIR "${HDF5_LIBRARY_DIR}" CACHE FILEPATH "HDF5 library files") @@ -35,7 +35,7 @@ if(HDF5_LIBRARY_DIR) # result of the HDF5 ctest package # Find zlib using cmake find_library. How should this be implemented? # FIND_LIBRARY(NAMES z libz libz_debug PATHS ... NO_DEFAULT_PATH) - if("$ENV{CONDA_BUILD}" STREQUAL "") + if(NOT DEFINED ENV{CONDA_BUILD}) # result of the HDF5 ctest package if(WIN32) set(zlib_post lib) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 9464980bdf..631deca2b2 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -23,7 +23,7 @@ if(NOT IS_ABSOLUTE ${INCLUDEDIR}) endif() message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") -if(WIN32 AND ("$ENV{CONDA_BUILD}" STREQUAL "")) +if(WIN32 AND NOT DEFINED ENV{CONDA_BUILD}) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) if (USE_STATIC_MSVC_RUNTIME) From 1ad1883f0ea67fce4a29a0f7020710e6acedd3cd Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Dec 2025 15:26:48 +0500 Subject: [PATCH 279/657] Findnlohmann_json.cmake --- cmake/CMakeLists.txt | 26 +++-------------- cmake/Findnlohmann_json.cmake | 28 +++++++++++++++++++ src/ifcconvert/CMakeLists.txt | 2 +- src/serializers/CMakeLists.txt | 2 +- .../schema_dependent/CMakeLists.txt | 7 ++--- 5 files changed, 37 insertions(+), 28 deletions(-) create mode 100644 cmake/Findnlohmann_json.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8402c4b956..31d771f081 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -213,28 +213,10 @@ if(BUILD_IFCGEOM AND WITH_OPENCASCADE) list(APPEND GEOMETRY_KERNELS opencascade) endif() +set(GLTF_LIBRARIES "") if(GLTF_SUPPORT) - UNIFY_ENVVARS_AND_CACHE(JSON_INCLUDE_DIR) - if(NOT JSON_INCLUDE_DIR) - find_package(nlohmann_json CONFIG) - if(nlohmann_json_DIR) - link_libraries(nlohmann_json::nlohmann_json) - else() - message(STATUS "Unable to find nlohmann_json package, trying to find it as a header-only library.") - endif() - endif() - - if(NOT nlohmann_json_DIR) - find_path(json_header_path "nlohmann/json.hpp" HINTS ${JSON_INCLUDE_DIR}) - set(JSON_INCLUDE_DIR ${json_header_path}) - - if(json_header_path) - message(STATUS "JSON for Modern C++ header file found in '${JSON_INCLUDE_DIR}'.") - else() - message(FATAL_ERROR "Unable to find JSON for Modern C++ header file / package, aborting") - endif() - endif() - + find_package(nlohmann_json REQUIRED) + set(GLTF_LIBRARIES nlohmann_json::nlohmann_json) add_definitions(-DWITH_GLTF) set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_GLTF) endif() @@ -449,7 +431,7 @@ else() endif(MSVC) include_directories(${OPENCOLLADA_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} + ${Boost_INCLUDE_DIRS} ${HDF5_INCLUDE_DIR} ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ) diff --git a/cmake/Findnlohmann_json.cmake b/cmake/Findnlohmann_json.cmake new file mode 100644 index 0000000000..5f26414102 --- /dev/null +++ b/cmake/Findnlohmann_json.cmake @@ -0,0 +1,28 @@ +# +# Input variables: +# - `JSON_INCLUDE_DIR` +# If input variables are not specified, try to find nlohmann_json config. +# Input variables could also be provided as environment variables. +# +# Output targets: +# - `nlohmann_json::nlohmann_json` + +UNIFY_ENVVARS_AND_CACHE(JSON_INCLUDE_DIR) + +if(NOT JSON_INCLUDE_DIR) + find_package(nlohmann_json CONFIG) + if(nlohmann_json_DIR) + return() + endif() +endif() + +find_path(json_header_path "nlohmann/json.hpp" HINTS "${JSON_INCLUDE_DIR}") + +if(json_header_path) + message(STATUS "JSON for Modern C++ header file found in '${json_header_path}'.") + add_library(nlohmann_json::nlohmann_json INTERFACE IMPORTED) + target_include_directories(nlohmann_json::nlohmann_json INTERFACE ${json_header_path}) + return() +endif() + +message(FATAL_ERROR "Unable to find JSON for Modern C++ header file / package, aborting") diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index 85b6d16e30..dd6a0040a2 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -13,7 +13,7 @@ target_link_libraries(IfcConvert PRIVATE IfcGeom IfcParse Serializers ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES} - ${CGAL_LIBRARIES} + ${CGAL_LIBRARIES} ${GLTF_LIBRARIES} ) install(TARGETS IfcConvert) diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index c575958a70..c1d9c761f1 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -19,7 +19,7 @@ endif() target_link_libraries(Serializers PRIVATE - ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} + ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} ${GLTF_LIBRARIES} IfcGeom ${OpenCASCADE_LIBRARIES} ${kernel_libraries} IfcParse ) diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt index e1d22f262f..6fdcc8e482 100644 --- a/src/serializers/schema_dependent/CMakeLists.txt +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -6,10 +6,9 @@ foreach(schema ${SCHEMA_VERSIONS}) add_library(Serializers_ifc${schema} OBJECT ${SERIALIZERS_S_FILES}) set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} Serializers_ifc${schema}) set_target_properties(Serializers_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") - if(WASM_BUILD) - target_link_libraries(Serializers_ifc${schema} ${HDF5_LIBRARIES}) - else() - target_link_libraries(Serializers_ifc${schema} IfcGeom ${OpenCASCADE_LIBRARIES} ${HDF5_LIBRARIES}) + target_link_libraries(Serializers_ifc${schema} ${HDF5_LIBRARIES} ${GLTF_LIBRARIES}) + if(NOT WASM_BUILD) + target_link_libraries(Serializers_ifc${schema} IfcGeom ${OpenCASCADE_LIBRARIES}) endif() endforeach() From 2213c3773dfab8ad4b59f448f665896edc1bbf68 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Dec 2025 14:24:53 +0500 Subject: [PATCH 280/657] UNIFY_ENVVARS_AND_CACHE - check if var is defined to fix some warnings --- cmake/utilities.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/utilities.cmake b/cmake/utilities.cmake index 842dfbaf82..48674b1f04 100644 --- a/cmake/utilities.cmake +++ b/cmake/utilities.cmake @@ -19,7 +19,7 @@ # Create a cache entry if absent for environment variables macro(UNIFY_ENVVARS_AND_CACHE VAR) - if((NOT DEFINED ${VAR}) AND(NOT "$ENV{${VAR}}" STREQUAL "")) + if(NOT DEFINED ${VAR} AND DEFINED ENV{${VAR}} AND NOT ENV{${VAR}} STREQUAL "") set(${VAR} "$ENV{${VAR}}" CACHE STRING "${VAR}" FORCE) endif() endmacro() From d174ecf760495777dcc98cac4c69e15f18e6a71a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Dec 2025 20:16:33 +0500 Subject: [PATCH 281/657] cmake - make USD_SUPPORT build succeed --- cmake/CMakeLists.txt | 4 +-- cmake/FindUSD.cmake | 51 ++++++++++++++++++++++++++++++--- src/serializers/USDSerializer.h | 5 ++++ 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 31d771f081..de71dad3c8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -222,8 +222,10 @@ if(GLTF_SUPPORT) endif() # Add USD support to serializers +set(USD_LIBRARIES "") if(USD_SUPPORT) find_package(USD REQUIRED) + set(USD_LIBRARIES USD::USD) endif(USD_SUPPORT) if (WITH_ROCKSDB) @@ -432,8 +434,6 @@ endif(MSVC) include_directories(${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${HDF5_INCLUDE_DIR} - ${USD_INCLUDE_DIR} - ${TBB_INCLUDE_DIR} ) if(NOT SCHEMA_VERSIONS) diff --git a/cmake/FindUSD.cmake b/cmake/FindUSD.cmake index 8b134656c1..8a43481689 100644 --- a/cmake/FindUSD.cmake +++ b/cmake/FindUSD.cmake @@ -2,17 +2,21 @@ # Input variables: # - `USD_INCLUDE_DIR` # - `USD_LIBRARY_DIR` +# - `TBB_INCLUDE_DIR` +# - `TBB_LIBRARY_DIR` # Input variables could also be provided as environment variables. # TODO: Try to find USD config if varibales are not provided. # TODO: does usd have a config file? # -# Output variables: -# - `USD_LIBRARIES` +# Output targets: +# - `USD::USD` UNIFY_ENVVARS_AND_CACHE(USD_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(USD_LIBRARY_DIR) +UNIFY_ENVVARS_AND_CACHE(TBB_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(TBB_LIBRARY_DIR) -if("${USD_INCLUDE_DIR}" STREQUAL "") +if(NOT USD_INCLUDE_DIR) find_path(USD_INCLUDE_DIR pxr.h PATHS /usr/include/pxr @@ -38,6 +42,17 @@ set(USD_LIBRARIES usd_sdf usd_tf usd_gf + usd_kind + usd_pcp + usd_arch + usd_ar + usd_plug + usd_js + usd_sdr + usd_work + usd_trace + usd_ndr + usd_ts ) find_library(USD_LIBRARY @@ -50,5 +65,33 @@ else() message(FATAL_ERROR "Unable to find USD libraries in: ${USD_LIBRARY_DIR}") endif() -add_definitions(-DWITH_USD) +add_library(USD::USD INTERFACE IMPORTED) +target_link_directories(USD::USD + INTERFACE + ${USD_LIBRARY_DIR} ${TBB_LIBRARY_DIR} +) +target_include_directories(USD::USD + INTERFACE + ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} +) + +# We don't link TBB libraries - on Windows they're provided using `pragma(lib)`. +# On Unix there's no `pragma(lib)`, so in theory it will break. +target_link_libraries(USD::USD + INTERFACE + ${USD_LIBRARIES} +) + +if(MSVC) + target_link_libraries(USD::USD + INTERFACE + debug DbgHelp.lib + ) +endif() + +target_compile_definitions(USD::USD + INTERFACE + PXR_STATIC WITH_USD +) + set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_USD) diff --git a/src/serializers/USDSerializer.h b/src/serializers/USDSerializer.h index 9f795fb88b..f9b50bc22c 100644 --- a/src/serializers/USDSerializer.h +++ b/src/serializers/USDSerializer.h @@ -30,6 +30,8 @@ #include "../ifcparse/utils.h" // undefine opencascade Handle macro, because it conflicts with USD +// Macro source code lives in Standard_Handle.hxx. +#pragma push_macro("Handle") #undef Handle #include "pxr/pxr.h" @@ -38,6 +40,9 @@ #include "pxr/usd/usdGeom/mesh.h" #include "pxr/usd/usdShade/material.h" +// redefine Handle macro. +#pragma pop_macro("Handle") + #include #include #include From db2234acefcb500580f424e32c19add5ebe6d1a6 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 31 Oct 2025 14:27:45 +0100 Subject: [PATCH 282/657] Add Extras in addon preferences to conditionally add functionality. One extra added form commit from sjb007 --- .../bonsai/bim/module/spatial/__init__.py | 1 + .../bonsai/bim/module/spatial/operator.py | 46 +++++++++++++++++++ src/bonsai/bonsai/bim/module/spatial/ui.py | 17 +++++++ src/bonsai/bonsai/bim/ui.py | 27 +++++++++++ 4 files changed, 91 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/spatial/__init__.py b/src/bonsai/bonsai/bim/module/spatial/__init__.py index 810766c552..6c62218532 100644 --- a/src/bonsai/bonsai/bim/module/spatial/__init__.py +++ b/src/bonsai/bonsai/bim/module/spatial/__init__.py @@ -38,6 +38,7 @@ classes = ( operator.SelectDecomposedElements, operator.SelectProduct, operator.SelectSimilarContainer, + operator.SetContainerVisibility, operator.SetDefaultContainer, operator.SetElementVisibility, operator.ToggleContainerElement, diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index 965be5c270..bffe88bff7 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -507,6 +507,52 @@ class SetDefaultContainer(bpy.types.Operator): core.set_orientation_slot(tool.Spatial, container=tool.Ifc.get().by_id(self.container)) return {"FINISHED"} +class SetContainerVisibility(bpy.types.Operator): + bl_idname = "bim.set_container_visibility" + bl_label = "Set Container Visibility" + bl_options = {"REGISTER", "UNDO"} + container: bpy.props.IntProperty() + should_include_children: bpy.props.BoolProperty(name="Should Include Children", default=True, options={"SKIP_SAVE"}) + mode: bpy.props.StringProperty(name="Mode") + + @classmethod + def description(cls, context, operator): + if operator.mode == "HIDE": + return "Hides the selected container and all children.\n" + "ALT+CLICK to ignore children" + elif operator.mode == "SHOW": + return "Shows the selected container and all children.\n" + "ALT+CLICK to ignore children" + return "Isolate the selected container and all children.\n" + "ALT+CLICK to ignore children" + + def invoke(self, context, event): + if event.type == "LEFTMOUSE" and event.alt: + self.should_include_children = False + return self.execute(context) + + def execute(self, context): + if self.mode == "ISOLATE": + if tool.Ifc.get_schema() == "IFC2X3": + containers = tool.Ifc.get().by_type("IfcSpatialStructureElement") + elif tool.Ifc.get_schema() != "IFC2X3": + containers = set(tool.Ifc.get().by_type("IfcSpatialElement")) + containers -= set(tool.Ifc.get().by_type("IfcSpatialZone")) + for container in containers: + if obj := tool.Ifc.get_object(container): + if collection := obj.BIMObjectProperties.collection: + collection.hide_viewport = True + should_hide = False + else: + should_hide = self.mode == "HIDE" + + container = tool.Ifc.get().by_id(self.container) + queue = [container] + while queue: + container = queue.pop() + if obj := tool.Ifc.get_object(container): + if collection := obj.BIMObjectProperties.collection: + collection.hide_viewport = should_hide + if self.should_include_children: + queue.extend(ifcopenshell.util.element.get_parts(container)) + return {"FINISHED"} class SetElementVisibility(bpy.types.Operator): bl_idname = "bim.set_element_visibility" diff --git a/src/bonsai/bonsai/bim/module/spatial/ui.py b/src/bonsai/bonsai/bim/module/spatial/ui.py index ffb7773ac2..e3fbfb8cf2 100644 --- a/src/bonsai/bonsai/bim/module/spatial/ui.py +++ b/src/bonsai/bonsai/bim/module/spatial/ui.py @@ -132,6 +132,23 @@ class BIM_PT_spatial_decomposition(Panel): op = col.operator("bim.set_default_container", icon="OUTLINER_COLLECTION", text="Set Default") op.container = ifc_definition_id + # Only show container visibility operators if the preference is enabled + from bonsai.bim.ui import BIM_ADDON_preferences + addon = BIM_ADDON_preferences.get_addon_instance() + if addon and getattr(addon, "preferences", None): + prefs = addon.preferences + value = getattr(prefs, "container_hide_show_isolate", None) + if value: + op = row.operator("bim.set_container_visibility", icon="FULLSCREEN_EXIT", text="") + op.mode = "ISOLATE" + op.container = ifc_definition_id + op = row.operator("bim.set_container_visibility", icon="HIDE_OFF", text="") + op.mode = "SHOW" + op.container = ifc_definition_id + op = row.operator("bim.set_container_visibility", icon="HIDE_ON", text="") + op.mode = "HIDE" + op.container = ifc_definition_id + # The only operator that's enabled for IfcProject. col = row.column(align=True) col.operator("bim.select_container", icon="OBJECT_DATA", text="").container = ifc_definition_id diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 49b408ba70..de4f57a14b 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -678,6 +678,32 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description="Default parameters for BIM elements", ) + addon_instance = None + @classmethod + def set_addon_instance(cls): + import bpy + instance = None + for key in bpy.context.preferences.addons.keys(): + if ".bonsai" in key: + instance = bpy.context.preferences.addons.get(key) + break + cls.addon_instance = instance + + @classmethod + def get_addon_instance(cls): + if cls.addon_instance is None: + cls.set_addon_instance() + return cls.addon_instance + + def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + layout.prop(self, "container_hide_show_isolate") + + container_hide_show_isolate: BoolProperty( + name="Container hide/show/isolate", + description="Enable container hide/show/isolate feature in the UI", + default=False, + ) + if TYPE_CHECKING: svg2pdf_command: str svg2dxf_command: str @@ -738,6 +764,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Directories", self.draw_directories) bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Drawing", self.draw_drawing_settings) bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Other", self.draw_other_settings) + bonsai.bim.helper.draw_expandable_panel(self.layout, context, "Extras", self.draw_extras_settings) def draw_commands(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "svg2pdf_command") From 9f6e92eefd46066f46dfa7d78d2d31180627ad4b Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sun, 7 Dec 2025 23:11:29 +0100 Subject: [PATCH 283/657] black --- src/bonsai/bonsai/bim/module/spatial/operator.py | 2 ++ src/bonsai/bonsai/bim/module/spatial/ui.py | 1 + src/bonsai/bonsai/bim/ui.py | 2 ++ 3 files changed, 5 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index bffe88bff7..e79cfc7d47 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -507,6 +507,7 @@ class SetDefaultContainer(bpy.types.Operator): core.set_orientation_slot(tool.Spatial, container=tool.Ifc.get().by_id(self.container)) return {"FINISHED"} + class SetContainerVisibility(bpy.types.Operator): bl_idname = "bim.set_container_visibility" bl_label = "Set Container Visibility" @@ -554,6 +555,7 @@ class SetContainerVisibility(bpy.types.Operator): queue.extend(ifcopenshell.util.element.get_parts(container)) return {"FINISHED"} + class SetElementVisibility(bpy.types.Operator): bl_idname = "bim.set_element_visibility" bl_label = "Set Element Visibility" diff --git a/src/bonsai/bonsai/bim/module/spatial/ui.py b/src/bonsai/bonsai/bim/module/spatial/ui.py index e3fbfb8cf2..f7716b867c 100644 --- a/src/bonsai/bonsai/bim/module/spatial/ui.py +++ b/src/bonsai/bonsai/bim/module/spatial/ui.py @@ -134,6 +134,7 @@ class BIM_PT_spatial_decomposition(Panel): # Only show container visibility operators if the preference is enabled from bonsai.bim.ui import BIM_ADDON_preferences + addon = BIM_ADDON_preferences.get_addon_instance() if addon and getattr(addon, "preferences", None): prefs = addon.preferences diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index de4f57a14b..acc88cfa9f 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -679,9 +679,11 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): ) addon_instance = None + @classmethod def set_addon_instance(cls): import bpy + instance = None for key in bpy.context.preferences.addons.keys(): if ".bonsai" in key: From c4da1dda4d812a9d649f688efdba9b6d8a6bc7c2 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 8 Dec 2025 09:25:49 +0100 Subject: [PATCH 284/657] Refactor addon preferences to make it cleaner as per developer's feedback --- src/bonsai/bonsai/bim/module/spatial/ui.py | 27 ++++++--------- src/bonsai/bonsai/bim/ui.py | 38 ++++++---------------- 2 files changed, 20 insertions(+), 45 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/spatial/ui.py b/src/bonsai/bonsai/bim/module/spatial/ui.py index f7716b867c..acc604f992 100644 --- a/src/bonsai/bonsai/bim/module/spatial/ui.py +++ b/src/bonsai/bonsai/bim/module/spatial/ui.py @@ -132,23 +132,16 @@ class BIM_PT_spatial_decomposition(Panel): op = col.operator("bim.set_default_container", icon="OUTLINER_COLLECTION", text="Set Default") op.container = ifc_definition_id - # Only show container visibility operators if the preference is enabled - from bonsai.bim.ui import BIM_ADDON_preferences - - addon = BIM_ADDON_preferences.get_addon_instance() - if addon and getattr(addon, "preferences", None): - prefs = addon.preferences - value = getattr(prefs, "container_hide_show_isolate", None) - if value: - op = row.operator("bim.set_container_visibility", icon="FULLSCREEN_EXIT", text="") - op.mode = "ISOLATE" - op.container = ifc_definition_id - op = row.operator("bim.set_container_visibility", icon="HIDE_OFF", text="") - op.mode = "SHOW" - op.container = ifc_definition_id - op = row.operator("bim.set_container_visibility", icon="HIDE_ON", text="") - op.mode = "HIDE" - op.container = ifc_definition_id + if tool.Blender.get_addon_preferences().container_hide_show_isolate: + op = row.operator("bim.set_container_visibility", icon="FULLSCREEN_EXIT", text="") + op.mode = "ISOLATE" + op.container = ifc_definition_id + op = row.operator("bim.set_container_visibility", icon="HIDE_OFF", text="") + op.mode = "SHOW" + op.container = ifc_definition_id + op = row.operator("bim.set_container_visibility", icon="HIDE_ON", text="") + op.mode = "HIDE" + op.container = ifc_definition_id # The only operator that's enabled for IfcProject. col = row.column(align=True) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index acc88cfa9f..82b154a46e 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -678,34 +678,6 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description="Default parameters for BIM elements", ) - addon_instance = None - - @classmethod - def set_addon_instance(cls): - import bpy - - instance = None - for key in bpy.context.preferences.addons.keys(): - if ".bonsai" in key: - instance = bpy.context.preferences.addons.get(key) - break - cls.addon_instance = instance - - @classmethod - def get_addon_instance(cls): - if cls.addon_instance is None: - cls.set_addon_instance() - return cls.addon_instance - - def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: - layout.prop(self, "container_hide_show_isolate") - - container_hide_show_isolate: BoolProperty( - name="Container hide/show/isolate", - description="Enable container hide/show/isolate feature in the UI", - default=False, - ) - if TYPE_CHECKING: svg2pdf_command: str svg2dxf_command: str @@ -921,6 +893,16 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): layout.prop(self, "bsdd_load_test_dictionaries") + def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: + layout.prop(self, "container_hide_show_isolate") + + container_hide_show_isolate: BoolProperty( + name="Container hide/show/isolate", + description="Enable container hide/show/isolate feature in the UI", + default=False, + ) + + # Scene panel groups class BIM_PT_tabs(Panel): bl_label = "Bonsai" From 75881aab242fe3432da034bffbaac48b0db749cc Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 8 Dec 2025 09:35:08 +0100 Subject: [PATCH 285/657] place new code after the current preferences one to follow the order. Added to type checking --- src/bonsai/bonsai/bim/ui.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 82b154a46e..b7ed2180c1 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -678,6 +678,12 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description="Default parameters for BIM elements", ) + container_hide_show_isolate: BoolProperty( + name="Container hide/show/isolate", + description="Enable container hide/show/isolate feature in the UI", + default=False, + ) + if TYPE_CHECKING: svg2pdf_command: str svg2dxf_command: str @@ -713,6 +719,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): pset_dir: str doc: DocPreferences default_parameters: DefaultParameters + container_hide_show_isolate: bool def draw(self, context: bpy.types.Context) -> None: layout = self.layout @@ -892,16 +899,9 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): layout.prop(self, "bsdd_load_inactive_dictionaries") layout.prop(self, "bsdd_load_test_dictionaries") - def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "container_hide_show_isolate") - container_hide_show_isolate: BoolProperty( - name="Container hide/show/isolate", - description="Enable container hide/show/isolate feature in the UI", - default=False, - ) - # Scene panel groups class BIM_PT_tabs(Panel): From 02233f86cf69de723ab1e2d67df514a3ba184c93 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sun, 7 Dec 2025 20:38:09 +0100 Subject: [PATCH 286/657] cmake: Add install command for qtViewer --- src/qtviewer/CMakeLists.txt | 4 ++-- src/qtviewer/ParseIfcFile.cpp | 2 +- src/qtviewer/ParseIfcFile.h | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/qtviewer/CMakeLists.txt b/src/qtviewer/CMakeLists.txt index 809070ebad..52d45d1b1d 100644 --- a/src/qtviewer/CMakeLists.txt +++ b/src/qtviewer/CMakeLists.txt @@ -17,8 +17,6 @@ # # ################################################################################ -cmake_minimum_required(VERSION 3.1.3) - message("Running CMakeLists.txt in /src/qtviewer") # Specify the Qt version and components to use @@ -100,3 +98,5 @@ target_include_directories(${targetName} PUBLIC get_target_property(targetIncludeDirs ${targetName} INCLUDE_DIRECTORIES) message(STATUS "target_include_directories: ${targetIncludeDirs}") + +install(TARGETS ${targetName}) diff --git a/src/qtviewer/ParseIfcFile.cpp b/src/qtviewer/ParseIfcFile.cpp index 0936d5624b..a3ac0a2e26 100644 --- a/src/qtviewer/ParseIfcFile.cpp +++ b/src/qtviewer/ParseIfcFile.cpp @@ -31,7 +31,7 @@ bool ParseIfcFile::Parse( settings.set("weld-vertices", false); settings.set("apply-default-materials", true); - IfcGeom::Iterator* it = new IfcGeom::Iterator(settings, &file); + IfcGeom::Iterator* it = new IfcGeom::Iterator(ifcopenshell::geometry::kernels::construct(&file, "opencascade", settings), settings, &file); if (!it->initialize()) { MessageLogger::log("Error: Iterator failed to initialize! Aborting."); delete it; diff --git a/src/qtviewer/ParseIfcFile.h b/src/qtviewer/ParseIfcFile.h index f3370f3c20..6e2b508e95 100644 --- a/src/qtviewer/ParseIfcFile.h +++ b/src/qtviewer/ParseIfcFile.h @@ -2,6 +2,7 @@ #define PARSEIFCFILE_H #include "../ifcgeom/Iterator.h" +#include "../ifcgeom/hybrid_kernel.h" #include "osg/Geometry" #include "osg/Material" #include "osg/MatrixTransform" From 13ed0c3096e7745ad7a234c2caaa4a6a7161cefb Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Tue, 9 Dec 2025 14:50:40 +0100 Subject: [PATCH 287/657] Take into account remarks --- src/qtviewer/ParseIfcFile.cpp | 1 + src/qtviewer/ParseIfcFile.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qtviewer/ParseIfcFile.cpp b/src/qtviewer/ParseIfcFile.cpp index a3ac0a2e26..8fe3e350a6 100644 --- a/src/qtviewer/ParseIfcFile.cpp +++ b/src/qtviewer/ParseIfcFile.cpp @@ -1,4 +1,5 @@ #include "ParseIfcFile.h" +#include "../ifcgeom/hybrid_kernel.h" #include "MessageLogger.h" #include "osg/Array" diff --git a/src/qtviewer/ParseIfcFile.h b/src/qtviewer/ParseIfcFile.h index 6e2b508e95..f3370f3c20 100644 --- a/src/qtviewer/ParseIfcFile.h +++ b/src/qtviewer/ParseIfcFile.h @@ -2,7 +2,6 @@ #define PARSEIFCFILE_H #include "../ifcgeom/Iterator.h" -#include "../ifcgeom/hybrid_kernel.h" #include "osg/Geometry" #include "osg/Material" #include "osg/MatrixTransform" From 3971408a0707d09e74f243dac916383a7ed74552 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sun, 7 Dec 2025 23:35:05 +0100 Subject: [PATCH 288/657] cmake: Add project() command before options to be able to toggle them --- cmake/CMakeLists.txt | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index de71dad3c8..82c5555ba4 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -27,6 +27,16 @@ endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) # not necessary, but encouraged set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +if (VERSION_OVERRIDE) + file(READ "../VERSION" "RELEASE_VERSION_") + string(STRIP "${RELEASE_VERSION_}" RELEASE_VERSION) + message(STATUS "Detected version '${RELEASE_VERSION}'") +else() + set(RELEASE_VERSION "0.8.0") +endif() + +project(IfcOpenShell VERSION ${RELEASE_VERSION}) + add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) if(POLICY CMP0141) # 3.25+ @@ -86,7 +96,6 @@ option(WITH_ZSTD "Use Zstd compression in RocksDB writes" OFF) option(USERSPACE_PYTHON_PREFIX "Installs IfcPython for the current user only instead of system-wide." OFF) option(USE_DEBUG_PYTHON "Use debug binaries when building Debug IfcPython on Windows." OFF) option(ADD_COMMIT_SHA "Add commit sha and branch in version number, requires git" OFF) -option(VERSION_OVERRIDE "Override the version defined in buildinfo.cpp with the file VERSION in the repository root" OFF) set( PYTHON_MODULE_INSTALL_DIR @@ -94,16 +103,6 @@ set( "Directory to install IfcPython package to. By default package is installed in found Python's site-packages." ) -if (VERSION_OVERRIDE) - file(READ "../VERSION" "RELEASE_VERSION_") - string(STRIP "${RELEASE_VERSION_}" RELEASE_VERSION) - message(STATUS "Detected version '${RELEASE_VERSION}'") -else() - set(RELEASE_VERSION "0.8.0") -endif() - -project(IfcOpenShell VERSION ${RELEASE_VERSION}) - # Make sure CMake modules in this project are found first list(PREPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) From c32a6dc0ca6cbb2db2d3f1416487781c70272f07 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Fri, 5 Dec 2025 15:57:07 +0100 Subject: [PATCH 289/657] cmake: Support shared build for rocksdb --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 82c5555ba4..670120c4d6 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -244,7 +244,7 @@ if (WITH_ROCKSDB) message(STATUS "RocksDB: found at '${RocksDB_DIR}'.") add_definitions(-DIFOPSH_WITH_ROCKSDB) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB) - link_libraries(RocksDB::rocksdb) + link_libraries($,RocksDB::rocksdb-shared,RocksDB::rocksdb>) if (WITH_ZSTD) # @todo do we actually need the zstd include dir or rather just pass From d566ba6e1f0935b3406d72c2d5f88bf4c8014a7d Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Thu, 4 Dec 2025 19:15:41 +0100 Subject: [PATCH 290/657] cmake: Use correct proj target See-Also: https://proj.org/en/stable/development/cmake.html --- cmake/FindCGAL.cmake | 4 +-- cmake/FindPROJ.cmake | 63 ++++++++++++++++++++++++++++++++++ src/serializers/CMakeLists.txt | 4 +-- 3 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 cmake/FindPROJ.cmake diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index 1511d2be80..9aff5f14a0 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -47,7 +47,7 @@ else() set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}") endif() find_package(CGAL CONFIG) - if(NOT CGAL::CGAL) + if(NOT CGAL_FOUND) message( FATAL_ERROR "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." @@ -56,5 +56,5 @@ else() message(STATUS "CGAL: found config at '${CGAL_DIR}'.") endif() -target_compile_definitions(CGAL::CGAL INTERFACE IFOPSH_WITH_CGAL) +target_compile_definitions(CGAL INTERFACE IFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) diff --git a/cmake/FindPROJ.cmake b/cmake/FindPROJ.cmake new file mode 100644 index 0000000000..ead66f76e2 --- /dev/null +++ b/cmake/FindPROJ.cmake @@ -0,0 +1,63 @@ +# +# Input variables: +# - `PROJ_INCLUDE_DIR` +# - `PROJ_LIBRARIES` +# If input variables are not specified, try to find PROJ config. +# Input variables could also be provided as environment variables. +# +# Output variables: +# - `PROJ_INCLUDE_DIR` +# - `PROJ_LIBRARIES` +# + +# To avoid cyclic calls to this file +list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) + +UNIFY_ENVVARS_AND_CACHE(PROJ_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(PROJ_LIBRARIES) + +if((NOT PROJ_INCLUDE_DIR AND NOT PROJ_LIBRARIES)) + find_package(PROJ QUIET CONFIG) + + if(NOT PROJ_FOUND) + find_path(PROJ_INCLUDE_DIR proj.h + PATHS + /usr/include/proj + REQUIRED + ) + if(PROJ_INCLUDE_DIR) + message(STATUS "Found PROJ include files in: ${PROJ_INCLUDE_DIR}") + else() + message(FATAL_ERROR "Unable to find PROJ include directory, specify PROJ_INCLUDE_DIR manually.") + endif() + + find_library(PROJ_LIBRARY + NAMES proj + PATHS /usr/lib/x86_64-linux-gnu) + if(PROJ_LIBRARY) + message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}") + set(PROJ_LIBRARIES ${PROJ_LIBRARY}) + else() + message(FATAL_ERROR "Unable to find PROJ libraries in: ${PROJ_LIBRARY_DIR}") + endif() + + add_library(PROJ::proj INTERFACE IMPORTED) + target_include_directories(PROJ::proj INTERFACE "${PROJ_INCLUDE_DIR}") + target_link_libraries(PROJ::proj INTERFACE ${PROJ_LIBRARIES}) + target_link_directories(PROJ::proj INTERFACE "${PROJ_LIBRARY}") + endif() +else() + find_library(PROJ_LIBRARY + NAMES proj + PATHS ${PROJ_LIBRARY_DIR}) + if(PROJ_LIBRARY) + message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}") + set(PROJ_LIBRARIES ${PROJ_LIBRARY}) + else() + message(FATAL_ERROR "Unable to find PROJ libraries in: ${PROJ_LIBRARY_DIR}") + endif() + + set(PROJ_INCLUDE_DIR ${PROJ_INCLUDE_DIR} CACHE FILEPATH "PROJ header files") + message(STATUS "Looking for PROJ include files in: ${PROJ_INCLUDE_DIR}") + include_directories(${PROJ_INCLUDE_DIR}) +endif() diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index c1d9c761f1..5d70971f92 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -9,12 +9,12 @@ set_target_properties(Serializers PROPERTIES COMPILE_FLAGS "-DSERIALIZERS_EXPORT set(SERIALIZER_SCHEMA_LIBRARIES Serializers ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) if(WITH_PROJ) - find_package(proj REQUIRED) + find_package(PROJ REQUIRED) target_compile_definitions(Serializers PRIVATE "WITH_PROJ") if(PROJ_STATIC) target_compile_definitions(Serializers PRIVATE "PROJ_DLL=") endif() - target_link_libraries(Serializers PRIVATE proj::proj) + target_link_libraries(Serializers PRIVATE PROJ::proj) endif() target_link_libraries(Serializers From 7a62f65af0d1a9cf90f57dd4bfe1482b084b5603 Mon Sep 17 00:00:00 2001 From: Ary Obenholzner <52825527+aryobenholzner@users.noreply.github.com> Date: Tue, 2 Dec 2025 11:03:08 +0100 Subject: [PATCH 291/657] Fix large BCF file creation by allowing Zip64 --- src/bcf/bcf/inmemory_zipfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bcf/bcf/inmemory_zipfile.py b/src/bcf/bcf/inmemory_zipfile.py index 8bcbbc6cf8..413da4fcfa 100644 --- a/src/bcf/bcf/inmemory_zipfile.py +++ b/src/bcf/bcf/inmemory_zipfile.py @@ -26,7 +26,7 @@ class InMemoryZipFile: self._file_name: Optional[str | Path] = str(file_name) if hasattr(file_name, "_from_parts") else file_name self.in_memory_data = BytesIO() # Create the in-memory zipfile - self.in_memory_zip = zipfile.ZipFile(self.in_memory_data, "w", compression, False) + self.in_memory_zip = zipfile.ZipFile(self.in_memory_data, "w", compression, True) self.in_memory_zip.debug = debug def writestr(self, filename_in_zip: str | zipfile.ZipInfo, file_contents: bytes | str) -> None: From 9d828852c033a604795cb8838f68d9d29ec1fe6a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 8 Dec 2025 12:15:46 +0500 Subject: [PATCH 292/657] Use cmake configs to find USD Also renamed `USD::` namespace to `pxr::` to match packaage name. --- cmake/CMakeLists.txt | 2 +- cmake/FindUSD.cmake | 30 +++++++++++++++++++++--------- nix/build-all.py | 8 ++++---- win/run-cmake.bat | 13 +++++-------- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 670120c4d6..3e2b02a07a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -224,7 +224,7 @@ endif() set(USD_LIBRARIES "") if(USD_SUPPORT) find_package(USD REQUIRED) - set(USD_LIBRARIES USD::USD) + set(USD_LIBRARIES pxr::USD) endif(USD_SUPPORT) if (WITH_ROCKSDB) diff --git a/cmake/FindUSD.cmake b/cmake/FindUSD.cmake index 8a43481689..7402c687ff 100644 --- a/cmake/FindUSD.cmake +++ b/cmake/FindUSD.cmake @@ -5,17 +5,29 @@ # - `TBB_INCLUDE_DIR` # - `TBB_LIBRARY_DIR` # Input variables could also be provided as environment variables. -# TODO: Try to find USD config if varibales are not provided. -# TODO: does usd have a config file? +# If `USD_INCLUDE_DIR` and `USD_LIBRARY_DIR` are not provided, +# try to find USD by locating its config file. # # Output targets: -# - `USD::USD` +# - `pxr::USD` UNIFY_ENVVARS_AND_CACHE(USD_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(USD_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(TBB_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(TBB_LIBRARY_DIR) + +if(NOT USD_LIBRARY_DIR AND NOT USD_INCLUDE_DIR) + find_package(pxr CONFIG) + if(pxr_FOUND) + add_library(pxr::USD INTERFACE IMPORTED) + target_link_libraries(pxr::USD INTERFACE ${PXR_LIBRARIES}) + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(USD REQUIRED_VARS pxr_DIR) + return() + endif() +endif() + if(NOT USD_INCLUDE_DIR) find_path(USD_INCLUDE_DIR pxr.h PATHS @@ -65,31 +77,31 @@ else() message(FATAL_ERROR "Unable to find USD libraries in: ${USD_LIBRARY_DIR}") endif() -add_library(USD::USD INTERFACE IMPORTED) -target_link_directories(USD::USD +add_library(pxr::USD INTERFACE IMPORTED) +target_link_directories(pxr::USD INTERFACE ${USD_LIBRARY_DIR} ${TBB_LIBRARY_DIR} ) -target_include_directories(USD::USD +target_include_directories(pxr::USD INTERFACE ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ) # We don't link TBB libraries - on Windows they're provided using `pragma(lib)`. # On Unix there's no `pragma(lib)`, so in theory it will break. -target_link_libraries(USD::USD +target_link_libraries(pxr::USD INTERFACE ${USD_LIBRARIES} ) if(MSVC) - target_link_libraries(USD::USD + target_link_libraries(pxr::USD INTERFACE debug DbgHelp.lib ) endif() -target_compile_definitions(USD::USD +target_compile_definitions(pxr::USD INTERFACE PXR_STATIC WITH_USD ) diff --git a/nix/build-all.py b/nix/build-all.py index e8a5de6f72..ff53ce6d4b 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1407,11 +1407,11 @@ else: cmake_args.append("-DHDF5_SUPPORT=Off") if "usd" in targets: - cmake_args.extend( + cmake_args.append("-DUSD_SUPPORT=ON") + cmake_args_prefix_path.extend( [ - f"-DUSD_SUPPORT=" "On", - f"-DUSD_INCLUDE_DIR={DEPS_DIR}/install/usd-{USD_VERSION}/include", - f"-DUSD_LIBRARY_DIR={DEPS_DIR}/install/usd-{USD_VERSION}/lib", + f"{DEPS_DIR}/install/tbb-{TBB_VERSION}", + f"{DEPS_DIR}/install/usd-{USD_VERSION}", ] ) diff --git a/win/run-cmake.bat b/win/run-cmake.bat index 9368cbf5db..b9835adce7 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -118,10 +118,8 @@ set MPFR_LIBRARY_DIR=%INSTALL_DIR%\mpfr :: We don't install Eigen currently, :: so there's no Eigen3config.cmake and therefore we provide path explicitly. set EIGEN_DIR=%INSTALL_DIR%\Eigen -set USD_INCLUDE_DIR=%INSTALL_DIR%\usd\include -set USD_LIBRARY_DIR=%INSTALL_DIR%\usd\lib -set TBB_INCLUDE_DIR=%INSTALL_DIR%\tbb\include -set TBB_LIBRARY_DIR=%INSTALL_DIR%\tbb\lib +set TBB_INSTALL_DIR=%INSTALL_DIR%\tbb +set USD_INSTALL_DIR=%INSTALL_DIR%\usd set ROCKSDB_INSTALL_DIR=%INSTALL_DIR%\rocksdb set ZSTD_INSTALL_DIR=%INSTALL_DIR%\zstd @@ -155,10 +153,8 @@ echo GMP_LIBRARY_DIR = %GMP_LIBRARY_DIR% echo MPFR_INCLUDE_DIR = %MPFR_INCLUDE_DIR% echo MPFR_LIBRARY_DIR = %MPFR_LIBRARY_DIR% echo EIGEN_DIR = %EIGEN_DIR% -echo USD_INCLUDE_DIR = %USD_INCLUDE_DIR% -echo USD_LIBRARY_DIR = %USD_LIBRARY_DIR% -echo TBB_INCLUDE_DIR = %TBB_INCLUDE_DIR% -echo TBB_LIBRARY_DIR = %TBB_LIBRARY_DIR% +echo TBB_INSTALL_DIR = %TBB_INSTALL_DIR% +echo USD_INSTALL_DIR = %USD_INSTALL_DIR% echo ROCKSDB_INSTALL_DIR = %ROCKSDB_INSTALL_DIR% echo ZSTD_INSTALL_DIR = %ZSTD_INSTALL_DIR% echo CCACHE_INSTALL_DIR = %CCACHE_INSTALL_DIR% @@ -174,6 +170,7 @@ echo "Running CMake for %PROJECT_NAME%." set CMAKE_PREFIX_PATH=%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL_DIR% set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%ROCKSDB_INSTALL_DIR%;%ZSTD_INSTALL_DIR% set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_INSTALL_DIR%;%CCACHE_INSTALL_DIR% +set CMake_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%USD_INSTALL_DIR%;%TBB_INSTALL_DIR% :: Not fully supported - not available from install-ifcopenshell :: and some logs are still showing Visual Studio generators. From 994a36447404541f37e98d679b62f7cffa63da6c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 8 Dec 2025 19:40:03 +0500 Subject: [PATCH 293/657] build-deps - simplify build/install commands --- win/build-deps.cmd | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 776864ab84..03bb37aedb 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -920,11 +920,11 @@ IF [%~3]==[] ( call cecho.cmd 0 13 "Building %TARGET% of %DEPENDENCY_NAME%. Please be patient, this will take a while." :: whole program optimization avoids Visual C++ hanging when compiling 32-bit release OCCT up to version 7.4.0 -IF %COMPILE_WITH_WPO%==FALSE ( - %MSBUILD_CMD% %1 /p:configuration=%2;platform=%VS_PLATFORM% /t:"%TARGET%" -) ELSE ( - %MSBUILD_CMD% %1 /p:configuration=%2;platform=%VS_PLATFORM%;WholeProgramOptimization=TRUE /t:"%TARGET%" +set COMPILE_WITH_WPO_SETTING= +IF NOT %COMPILE_WITH_WPO%==FALSE ( + set COMPILE_WITH_WPO_SETTING=;WholeProgramOptimization=TRUE ) +%MSBUILD_CMD% %1 /p:configuration=%2;platform=%VS_PLATFORM%%COMPILE_WITH_WPO_SETTING% /t:"%TARGET%" exit /b %ERRORLEVEL% :: InstallCMakeProject - Builds the INSTALL project of CMake-based project @@ -936,11 +936,11 @@ pushd %1 call cecho.cmd 0 13 "Installing %2 %DEPENDENCY_NAME%. Please be patient, this will take a while." :: whole program optimization avoids Visual C++ hanging when compiling 32-bit release OCCT up to version 7.4.0 -IF %COMPILE_WITH_WPO%==FALSE ( - %MSBUILD_CMD% INSTALL.%VCPROJ_FILE_EXT% /p:configuration=%2;platform=%VS_PLATFORM% -) ELSE ( - %MSBUILD_CMD% INSTALL.%VCPROJ_FILE_EXT% /p:configuration=%2;platform=%VS_PLATFORM%;WholeProgramOptimization=TRUE +set COMPILE_WITH_WPO_SETTING= +IF NOT %COMPILE_WITH_WPO%==FALSE ( + set COMPILE_WITH_WPO_SETTING=;WholeProgramOptimization=TRUE ) +%MSBUILD_CMD% INSTALL.%VCPROJ_FILE_EXT% /p:configuration=%2;platform=%VS_PLATFORM%%COMPILE_WITH_WPO_SETTING% set RET=%ERRORLEVEL% popd exit /b %RET% From 517ba237f9d1bfe62567a11717c0db08d4d9e491 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 9 Dec 2025 11:55:13 +0500 Subject: [PATCH 294/657] build-deps - coexisting Release and Debug installations --- win/build-deps.cmd | 84 ++++++++++++++++++-------- win/utils/tools.ps1 | 140 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+), 23 deletions(-) create mode 100644 win/utils/tools.ps1 diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 03bb37aedb..ac643f1bba 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -41,6 +41,8 @@ echo. :: Enable the delayed environment variable expansion needed in vs-cfg.cmd. setlocal EnableDelayedExpansion +set SCRIPT_DIR=%~dp0 + :: Make sure vcvarsall.bat is called and dev env set is up. IF "%VSINSTALLDIR%"=="" ( call utils\cecho.cmd 0 12 "Visual Studio environment variables not set- cannot proceed." @@ -108,6 +110,7 @@ FOR %%i IN (powershell git cmake) DO ( :: Check powershell version powershell -c "exit $PSVersionTable.PSVersion.Major -lt 5" IF NOT %ERRORLEVEL%==0 call cecho.cmd 0 12 "Powershell version 5 or higher required" && goto :ErrorAndPrintUsage +set PWSH_TOOLS=powershell -NonInteractive -File %SCRIPT_DIR%\utils\tools.ps1 cmake --version | findstr version > temp.txt set /p CMAKE_VERSION=NUL if not %ERRORLEVEL%==0 goto :Error cd "%DEPENDENCY_DIR%" -call :RunCMake -DINSTALL_DIR="%INSTALL_DIR%\opencascade-%OCCT_VERSION%" -DBUILD_LIBRARY_TYPE="Static" -DCMAKE_DEBUG_POSTFIX=d ^ +call :RunCMake -DINSTALL_DIR="%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" -DBUILD_LIBRARY_TYPE="Static" -DCMAKE_DEBUG_POSTFIX=d ^ -DBUILD_MODULE_Draw=0 -D3RDPARTY_FREETYPE_DIR="%INSTALL_DIR%\freetype" if not %ERRORLEVEL%==0 goto :Error @@ -532,6 +540,7 @@ call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\OCCT.sln" %BUILD_CFG% if not %ERRORLEVEL%==0 goto :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% if not %ERRORLEVEL%==0 goto :Error +call :MarkInstallation SET COMPILE_WITH_WPO=FALSE @@ -694,11 +703,11 @@ set DEPENDENCY_NAME=rocksdb set ROCKSDB_VERSION=9.11.2 set ROCKSDB_ZIP=rocksdb-%ROCKSDB_VERSION%.zip set DEPENDENCY_DIR=%DEPS_DIR%\%DEPENDENCY_NAME%-%ROCKSDB_VERSION% +set DEPENDENCY_INSTALL_NAME=%DEPENDENCY_NAME% +set NEXT_DEPENDENCY_LABEL=Successful -IF EXIST "%INSTALL_DIR%\%DEPENDENCY_NAME%" ( - echo Found existing "%INSTALL_DIR%\%DEPENDENCY_NAME%", skipping - goto :Successful -) +call :CheckInstallation +if %ERRORLEVEL%==200 GOTO %NEXT_DEPENDENCY_LABEL% cd %DEPS_DIR% call :DownloadFile ^ @@ -713,7 +722,7 @@ cd "%DEPENDENCY_DIR%" set ZSTD_INCLUDE=%INSTALL_DIR%\zstd\include set ZSTD_LIB_DEBUG=%INSTALL_DIR%\zstd\lib\zstd_static.lib set ZSTD_LIB_RELEASE=%INSTALL_DIR%\zstd\lib\zstd_static.lib -call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\rocksdb" ^ +call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" ^ -DROCKSDB_INSTALL_ON_WINDOWS=On ^ -DFAIL_ON_WARNINGS=Off ^ -DWITH_TESTS=OFF ^ @@ -722,12 +731,14 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\rocksdb" ^ -DWITH_CORE_TOOLS=OFF ^ -DROCKSDB_BUILD_SHARED=OFF ^ -DWITH_ZSTD=On ^ - -DPORTABLE=1 + -DPORTABLE=1 ^ + -DCMAKE_DEBUG_POSTFIX="_d" IF NOT %ERRORLEVEL%==0 GOTO :Error call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\rocksdb.sln" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error +call :MarkInstallation :: :tbb :: set DEPENDENCY_NAME=tbb @@ -803,7 +814,7 @@ echo Build ended at %END_TIME%. Time elapsed %hh%:%mm%:%ss%.%cc%. :BuildTimeSkipped set PATH=%ORIGINAL_PATH% cd "%~dp0" -exit /b %IFCOS_SCRIPT_RET% +exit %IFCOS_SCRIPT_RET% ::::::::::::::::::::::::::::::::::::: Subroutines ::::::::::::::::::::::::::::::::::::: @@ -945,6 +956,33 @@ set RET=%ERRORLEVEL% popd exit /b %RET% +:: Checks whether a dependency is already installed for the specified config +:: Doesn't work for dependencies, only for those that need separate Debug/Release installs. +:: Required vars: +:: - DEPENDENCY_NAME +:: - DEPENDENCY_INSTALL_NAME +:: - NEXT_DEPENDENCY_LABEL +:: Always intended to be used with the code below +:: (unfortunately we can't move `GOTO` to the this label too, +:: because of how it would interact with `call` and `exit /b`): +:: ``` +:: call :CheckInstallation +:: if %ERRORLEVEL%==200 GOTO %NEXT_DEPENDENCY_LABEL% +:: ``` +:CheckInstallation +%PWSH_TOOLS% check_installation %DEPENDENCY_NAME% "%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" +set RET=%ERRORLEVEL% +if %RET%==200 echo Found existing "%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" for %BUILD_CFG%, skipping && exit /b 200 +if %RET% NEQ 404 GOTO :Error +exit /b 0 + +:: Required vars: +:: - DEPENDENCY_INSTALL_NAME +:MarkInstallation +%PWSH_TOOLS% mark "%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" +IF NOT %ERRORLEVEL%==0 GOTO :Error +exit /b 0 + :: PrintUsage - Prints usage information :PrintUsage call "%~dp0\utils\cecho.cmd" 0 10 "Requirements for a successful execution:" diff --git a/win/utils/tools.ps1 b/win/utils/tools.ps1 new file mode 100644 index 0000000000..1bdad544f9 --- /dev/null +++ b/win/utils/tools.ps1 @@ -0,0 +1,140 @@ +Set-PSDebug -Trace 0 +Set-StrictMode -Version 3 +$ErrorActionPreference = "Stop" + + +# Create marker file to indicate whether Release or Debug build was installed. +function mark { + param( + [Parameter(Mandatory = $true)] + [string]$installation_dir + ) + + if (-not (Test-Path -Path $installation_dir)) { + throw "Directory '$installation_dir' does not exist." + } + + $marker_filepath = Join-Path -Path $installation_dir -ChildPath $ENV:MARKER_FILE + if (Test-Path -Path $marker_filepath) { + return + } + echo "Marking installation in '$installation_dir' with '$ENV:MARKER_FILE'." + New-Item -Path $marker_filepath -ItemType File | Out-Null +} + +# This function can be deprecated in the future, since installations are marked automatically. +# It's here only to avoid some disruption during the transition period. +function mark_based_on_artifacts { + param( + [Parameter(Mandatory = $true)] + [string]$dependency_name, + + [Parameter(Mandatory = $true)] + [string]$installation_dir + ) + + if ($dependency_name -eq "hdf5") { + if ($env:BUILD_CFG -eq "Debug") { + $artifact = "lib\libhdf5_D.lib" + } + else { + $artifact = "lib\libhdf5.lib" + } + } + elseif ($dependency_name -eq "opencollada") { + if ($env:BUILD_CFG -eq "Debug") { + $artifact = "lib\opencollada\OpenCOLLADAFrameworkd.lib" + } + else { + $artifact = "lib\opencollada\OpenCOLLADAFramework.lib" + } + } + elseif ($dependency_name -eq "OpenCASCADE") { + if ($env:BUILD_CFG -eq "Debug") { + $artifact = "win64\lib\TKerneld.lib" + } + else { + $artifact = "win64\lib\TKernel.lib" + } + } + elseif ($dependency_name -eq "rocksdb") { + if ($env:BUILD_CFG -eq "Debug") { + $artifact = "lib\rocksdb_d.lib" + } + else { + $artifact = "lib\rocksdb.lib" + } + } + else { + throw "Unexpected dependency name '$dependency_name'." + } + $artifact_filepath = Join-Path -Path $installation_dir -ChildPath $artifact + if (-not (Test-Path -Path $artifact_filepath)) { + return + } + if (-not (Test-Path -Path $installation_dir)) { + throw "Directory '$installation_dir' does not exist." + } + $marker_filepath = Join-Path -Path $installation_dir -ChildPath $ENV:MARKER_FILE + if (Test-Path -Path $marker_filepath) { + return + } + echo "Found artifact '$artifact' for dependency '$dependency_name' $env:BUILD_CFG." + & mark $installation_dir +} + +# Check if installation exists for the current `BUILD_CFG`. +# Returns exit code 200 if installation exists, 404 otherwise. +# Since we want Release and Debug installation to coexist, +# we add special marker file to indicate which build type was installed. +function check_installation { + param( + [Parameter(Mandatory = $true)] + [string]$dependency_name, + [Parameter(Mandatory = $true)] + [string]$installation_dir + ) + + if (-not (Test-Path -Path $installation_dir)) { + exit 404 + } + + & mark_based_on_artifacts $dependency_name $installation_dir + + $marker_filepath = Join-Path -Path $installation_dir -ChildPath $ENV:MARKER_FILE + if (-not (Test-Path -Path $marker_filepath)) { + exit 404 + } + exit 200 +} + + +# Dependencies Release/Debug configs compatibility: +# - hdf5: incompatible +# - OpenCASCADE: incompatible +# - rocksdb: incompatible +# - opencollada: incompatible +# - zstd: compatible + +function setup_build_cfg { + if (-not $env:BUILD_CFG) { + throw "Variable 'BUILD_CFG' is not defined." + } + if ($env:BUILD_CFG -eq "Debug") { + $ENV:MARKER_FILE = ".debug_installation" + } + else { + $ENV:MARKER_FILE = ".release_installation" + } +} + +function main { + & setup_build_cfg + # Dispatch command. + $command = $Args[0] + $command_args = $Args[1..($args.Count - 1)] + & $command @command_args +} + +& main @Args +exit 0 From e503dad510a3e55797e8dda93ff6d80fee37c15a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 9 Dec 2025 11:55:20 +0500 Subject: [PATCH 295/657] build-deps - fix typo --- win/build-deps.cmd | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index ac643f1bba..eaa63f4369 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -604,15 +604,15 @@ IF EXIST "%DEPENDENCY_INSTALL_DIR%" ( cd "%DEPS_DIR%" -:: Install bizon dependency for SWIG. +:: Install bison dependency for SWIG. set SWIG_DEPENDENCY_NAME=%DEPENDENCY_NAME% set DEPENDENCY_NAME=win_flex_bison -set WIN_FLEX_BIZON=win_flex_bison-2.5.25 -set WIN_FLEX_BIZON_ZIP=%WIN_FLEX_BIZON%.zip -call :DownloadFile https://github.com/lexxmark/winflexbison/releases/download/v2.5.25/%WIN_FLEX_BIZON_ZIP% "%DEPS_DIR%" %WIN_FLEX_BIZON_ZIP% +set WIN_FLEX_BISON=win_flex_bison-2.5.25 +set WIN_FLEX_BISON_ZIP=%WIN_FLEX_BISON%.zip +call :DownloadFile https://github.com/lexxmark/winflexbison/releases/download/v2.5.25/%WIN_FLEX_BISON_ZIP% "%DEPS_DIR%" %WIN_FLEX_BISON_ZIP% IF NOT %ERRORLEVEL%==0 GOTO :Error -echo test %WIN_FLEX_BIZON% -call :ExtractArchive %WIN_FLEX_BIZON_ZIP% "%DEPS_DIR%\%WIN_FLEX_BIZON%" "%DEPS_DIR%\%WIN_FLEX_BIZON%" +echo test %WIN_FLEX_BISON% +call :ExtractArchive %WIN_FLEX_BISON_ZIP% "%DEPS_DIR%\%WIN_FLEX_BISON%" "%DEPS_DIR%\%WIN_FLEX_BISON%" IF NOT %ERRORLEVEL%==0 GOTO :Error set DEPENDENCY_NAME=%SWIG_DEPENDENCY_NAME% @@ -626,7 +626,7 @@ cd "%DEPENDENCY_DIR%" call :RunCMake -DCMAKE_INSTALL_PREFIX="%DEPENDENCY_INSTALL_DIR%" ^ -DWITH_PCRE=OFF ^ - -DBISON_EXECUTABLE="%DEPS_DIR%\%WIN_FLEX_BIZON%\win_bison.exe" + -DBISON_EXECUTABLE="%DEPS_DIR%\%WIN_FLEX_BISON%\win_bison.exe" IF NOT %ERRORLEVEL%==0 GOTO :Error call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\swig.sln" Release IF NOT %ERRORLEVEL%==0 GOTO :Error From ce7fdcc191b817446ed9fd3f5abe736eb8b3b65d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 9 Dec 2025 13:56:19 +0500 Subject: [PATCH 296/657] build-deps - use `OCC_INSTALL_DIR` instead of includes/libs path --- cmake/FindOpenCASCADE.cmake | 6 ++++++ win/build-deps.cmd | 42 ++++++++++++++++++------------------- win/run-cmake.bat | 5 +++-- win/utils/tools.ps1 | 9 +++----- 4 files changed, 32 insertions(+), 30 deletions(-) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index 6a144c04f2..3976494499 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -36,6 +36,12 @@ if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) find_package(OpenCASCADE CONFIG REQUIRED) message(STATUS "Found OpenCASCADE config: ${OpenCASCADE_DIR}") + + if(OpenCASCADE_VERSION VERSION_LESS "7.9.0") + # Bug in OCCT cmake configs < 7.9.0 - missing linked library. + list(APPEND OpenCASCADE_LIBRARIES WSOCK32.lib) + endif() + return() endif() diff --git a/win/build-deps.cmd b/win/build-deps.cmd index eaa63f4369..92c6e6cdb8 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -186,8 +186,6 @@ IF DEFINED PYTHON_VERSION ( ) :: VERSION DERIVATIONS -set OCC_INCLUDE_DIR=%INSTALL_DIR%\opencascade-%OCCT_VERSION%\inc>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" -set OCC_LIBRARY_DIR=%INSTALL_DIR%\opencascade-%OCCT_VERSION%\win%ARCH_BITS%\lib>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( set PYTHONHOME=%DEPS_DIR%\python.%PYTHON_VERSION%\tools ) @@ -197,8 +195,6 @@ IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( :: executed by jumping (using goto) to different labels. if defined GEN_SHORTHAND echo GEN_SHORTHAND=%GEN_SHORTHAND%>"%~dp0\%BUILD_DEPS_CACHE_PATH%" echo HDF5_VERSION=%HDF5_VERSION%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" -echo OCC_INCLUDE_DIR=%OCC_INCLUDE_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" -echo OCC_LIBRARY_DIR=%OCC_LIBRARY_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( echo PYTHONHOME=%PYTHONHOME%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" ) @@ -481,9 +477,13 @@ call :MarkInstallation SET OCCT_VER=V%OCCT_VERSION:.=_% set DEPENDENCY_NAME=OpenCASCADE -set OCCT_DEPENDENCY_INSTALL_NAME=opencascade-%OCCT_VERSION% +:: `new-layout` suffix can be removed on the next OCCT version update +:: it's needed to separate legacy layout installation from the new one. +set OCCT_DEPENDENCY_INSTALL_NAME=opencascade-%OCCT_VERSION%-new-layout set DEPENDENCY_INSTALL_NAME=%OCCT_DEPENDENCY_INSTALL_NAME% +set DEPENDENCY_INSTALL_DIR=%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME% set NEXT_DEPENDENCY_LABEL=Python +echo OCC_INSTALL_DIR=%DEPENDENCY_INSTALL_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" call :CheckInstallation if %ERRORLEVEL%==200 GOTO %NEXT_DEPENDENCY_LABEL% @@ -525,7 +525,10 @@ findstr IfcOpenShell "%DEPENDENCY_DIR%\CMakeLists.txt">NUL if not %ERRORLEVEL%==0 goto :Error cd "%DEPENDENCY_DIR%" -call :RunCMake -DINSTALL_DIR="%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" -DBUILD_LIBRARY_TYPE="Static" -DCMAKE_DEBUG_POSTFIX=d ^ +:: TODO: remove CMAKE_DEBUG_POSTFIX setting later. +:: Temporarily explicitly set `CMAKE_DEBUG_POSTFIX` to empty to override it's perviously being set to `d`. +:: OCCT don't need it, since it's layout is separating debug and release build by different folders. +call :RunCMake -DINSTALL_DIR="%DEPENDENCY_INSTALL_DIR%" -DBUILD_LIBRARY_TYPE="Static" -DCMAKE_DEBUG_POSTFIX="" ^ -DBUILD_MODULE_Draw=0 -D3RDPARTY_FREETYPE_DIR="%INSTALL_DIR%\freetype" if not %ERRORLEVEL%==0 goto :Error @@ -538,28 +541,23 @@ IF %ARCH_BITS%==32 ( call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\OCCT.sln" %BUILD_CFG% if not %ERRORLEVEL%==0 goto :Error + +:: If `inc` is present in installation folder, then installation takes much longer +:: See https://github.com/Open-Cascade-SAS/OCCT/issues/901 +powershell -c "$path = '%DEPENDENCY_INSTALL_DIR%\inc'; if (Test-Path $path) { Remove-Item -Recurse -Force $path }" call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% if not %ERRORLEVEL%==0 goto :Error + +:: Fix upstream bug in cmake config file with unescaped quotes preventing configuration. +:: The issue is fixed in 7.9.0+. +:: See https://github.com/Open-Cascade-SAS/OCCT/pull/373 +powershell -c "$path='%DEPENDENCY_INSTALL_DIR%\cmake\OpenCASCADEConfig.cmake'; (Get-Content $path) -replace '/wd\"(\d+)\"','/wd$1' | Set-Content $path" +if not %ERRORLEVEL%==0 goto :Error + call :MarkInstallation SET COMPILE_WITH_WPO=FALSE -:: Use a single lib directory for release and debug libraries as is done with OCE -if not exist "%OCC_LIBRARY_DIR%". mkdir "%OCC_LIBRARY_DIR%" -:: NOTE OCCT (at least occt-V7_0_0-9059ca1) directory creation code is hardcoded and doesn't seem handle future VC versions -set OCCT_VC_VER=%VC_VER% -IF %OCCT_VC_VER% GTR 14 ( - set OCCT_VC_VER=14 -) -move /y "%INSTALL_DIR%\opencascade-%OCCT_VERSION%\win%ARCH_BITS%\vc%OCCT_VC_VER%\libi\*.*" "%OCC_LIBRARY_DIR%" -move /y "%INSTALL_DIR%\opencascade-%OCCT_VERSION%\win%ARCH_BITS%\vc%OCCT_VC_VER%\libd\*.*" "%OCC_LIBRARY_DIR%" -move /y "%INSTALL_DIR%\opencascade-%OCCT_VERSION%\win%ARCH_BITS%\vc%OCCT_VC_VER%\lib\*.*" "%OCC_LIBRARY_DIR%" -rmdir /s /q "%INSTALL_DIR%\opencascade-%OCCT_VERSION%\win%ARCH_BITS%\vc%OCCT_VC_VER%" -:: Removed unneeded bits -rmdir /s /q "%INSTALL_DIR%\opencascade-%OCCT_VERSION%\data" -rmdir /s /q "%INSTALL_DIR%\opencascade-%OCCT_VERSION%\samples" -del "%INSTALL_DIR%\opencascade-%OCCT_VERSION%\*.bat" - :Python set DEPENDENCY_NAME=Python %PYTHON_VERSION% set DEPENDENCY_DIR=N/A diff --git a/win/run-cmake.bat b/win/run-cmake.bat index b9835adce7..1f8887f6eb 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -89,8 +89,6 @@ if not defined BOOST_INSTALL_DIR ( set BOOST_INSTALL_DIR=%DEPS_DIR%\boost_1_86_0\stage\%GEN_SHORTHAND% ) -if not defined OCC_INCLUDE_DIR set OCC_INCLUDE_DIR=%INSTALL_DIR%\oce\include\oce -if not defined OCC_LIBRARY_DIR set OCC_LIBRARY_DIR=%INSTALL_DIR%\oce\Win%ARCH_BITS%\lib set OPENCOLLADA_INSTALL_DIR=%INSTALL_DIR%\OpenCOLLADA set LIBXML2_INCLUDE_DIR=%DEPS_DIR%\OpenCOLLADA\Externals\LibXML\include set LIBXML2_LIBRARIES=%INSTALL_DIR%\OpenCOLLADA\lib\opencollada\xml.lib @@ -133,8 +131,10 @@ echo. call cecho.cmd 0 10 "Dependency Environment Variables for %PROJECT_NAME%:" echo BOOST_INSTALL_DIR = %BOOST_INSTALL_DIR% echo BOOST_LIBRARYDIR = %BOOST_LIBRARYDIR% +:: OCC_INCLUDE_DIR / OCC_LIBRARY_DIR are legacy vars, they're not defined by build-deps.cmd anymore. echo OCC_INCLUDE_DIR = %OCC_INCLUDE_DIR% echo OCC_LIBRARY_DIR = %OCC_LIBRARY_DIR% +echo OCC_INSTALL_DIR = %OCC_INSTALL_DIR% echo OPENCOLLADA_INSTALL_DIR = %OPENCOLLADA_INSTALL_DIR% echo LIBXML2_INCLUDE_DIR = %LIBXML2_INCLUDE_DIR% echo LIBXML2_LIBRARIES = %LIBXML2_LIBRARIES% @@ -171,6 +171,7 @@ set CMAKE_PREFIX_PATH=%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%ROCKSDB_INSTALL_DIR%;%ZSTD_INSTALL_DIR% set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_INSTALL_DIR%;%CCACHE_INSTALL_DIR% set CMake_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%USD_INSTALL_DIR%;%TBB_INSTALL_DIR% +set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%OCC_INSTALL_DIR% :: Not fully supported - not available from install-ifcopenshell :: and some logs are still showing Visual Studio generators. diff --git a/win/utils/tools.ps1 b/win/utils/tools.ps1 index 1bdad544f9..ee52d8ba97 100644 --- a/win/utils/tools.ps1 +++ b/win/utils/tools.ps1 @@ -50,12 +50,9 @@ function mark_based_on_artifacts { } } elseif ($dependency_name -eq "OpenCASCADE") { - if ($env:BUILD_CFG -eq "Debug") { - $artifact = "win64\lib\TKerneld.lib" - } - else { - $artifact = "win64\lib\TKernel.lib" - } + # New OCCT folder layout was introduced after marker files were added, + # so installation don't need artifact-based detection. + return } elseif ($dependency_name -eq "rocksdb") { if ($env:BUILD_CFG -eq "Debug") { From c475a377b756b10a0b620189b2eec1b3662857f0 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 10 Dec 2025 16:41:59 +0500 Subject: [PATCH 297/657] build-deps - use precompiled headers to speed up OCCT building process --- win/build-deps.cmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 92c6e6cdb8..b57ca4d5d5 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -529,7 +529,8 @@ cd "%DEPENDENCY_DIR%" :: Temporarily explicitly set `CMAKE_DEBUG_POSTFIX` to empty to override it's perviously being set to `d`. :: OCCT don't need it, since it's layout is separating debug and release build by different folders. call :RunCMake -DINSTALL_DIR="%DEPENDENCY_INSTALL_DIR%" -DBUILD_LIBRARY_TYPE="Static" -DCMAKE_DEBUG_POSTFIX="" ^ - -DBUILD_MODULE_Draw=0 -D3RDPARTY_FREETYPE_DIR="%INSTALL_DIR%\freetype" + -DBUILD_MODULE_Draw=0 -D3RDPARTY_FREETYPE_DIR="%INSTALL_DIR%\freetype" ^ + -DBUILD_USE_PCH=ON if not %ERRORLEVEL%==0 goto :Error :: whole program optimization avoids Visual C++ hanging when compiling 32-bit release OCCT up to version 7.4.0 From 6591a698169387ac3cc73b2081ba77f3b3ab2af5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 10 Dec 2025 19:53:14 +0500 Subject: [PATCH 298/657] FindCGAL - keep `CGAL::CGAL` target name --- cmake/FindCGAL.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index 9aff5f14a0..089a1b112f 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -56,5 +56,5 @@ else() message(STATUS "CGAL: found config at '${CGAL_DIR}'.") endif() -target_compile_definitions(CGAL INTERFACE IFOPSH_WITH_CGAL) +target_compile_definitions(CGAL::CGAL INTERFACE IFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) From 9880ee79b2334e3145553c43b69ce4ed5d546c91 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 10 Dec 2025 19:54:04 +0500 Subject: [PATCH 299/657] FindPROJ - restore `CMAKE_MODULE_PATH` after module is executed --- cmake/FindPROJ.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/FindPROJ.cmake b/cmake/FindPROJ.cmake index ead66f76e2..7b9b2c4c8f 100644 --- a/cmake/FindPROJ.cmake +++ b/cmake/FindPROJ.cmake @@ -61,3 +61,5 @@ else() message(STATUS "Looking for PROJ include files in: ${PROJ_INCLUDE_DIR}") include_directories(${PROJ_INCLUDE_DIR}) endif() + +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) From dbe23ca80932bcb6f122902ab6eaec6a3881ce0c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 10 Dec 2025 19:55:27 +0500 Subject: [PATCH 300/657] FindPROJ - fix outputs description --- cmake/FindPROJ.cmake | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cmake/FindPROJ.cmake b/cmake/FindPROJ.cmake index 7b9b2c4c8f..ce6956517c 100644 --- a/cmake/FindPROJ.cmake +++ b/cmake/FindPROJ.cmake @@ -5,9 +5,8 @@ # If input variables are not specified, try to find PROJ config. # Input variables could also be provided as environment variables. # -# Output variables: -# - `PROJ_INCLUDE_DIR` -# - `PROJ_LIBRARIES` +# Output targets: +# - `PROJ::proj` # # To avoid cyclic calls to this file From 4b56cc7916a45335fdaa1f4769f7c729c1687006 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Fri, 5 Dec 2025 13:26:06 +0100 Subject: [PATCH 301/657] cmake: Add HDF5 to IFCOPENSHELL_LIBRARIES --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3e2b02a07a..e218fcaab9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -316,6 +316,7 @@ endif() if(HDF5_SUPPORT) find_package(HDF5 REQUIRED COMPONENTS C CXX) + set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} hdf5::hdf5_cpp) add_definitions(-DWITH_HDF5) set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_HDF5) From 592ac168c5b26595d536d13ddb97b110e5e6f4d4 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Wed, 10 Dec 2025 21:09:05 -0600 Subject: [PATCH 302/657] add "Fire Extinguisher" to Ifc_classes_suggestions --- .../util/schema/ifc_classes_suggestions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 ea520e028b..c220f0ea86 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json +++ b/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json @@ -51,6 +51,16 @@ "predefined_type": "DISTRIBUTIONBOARD" } ], + "IfcFireSuppressionTerminal": [ + { + "name": "Fire Extinguisher" + }, + ], + "IfcFireSuppressionTerminalType": [ + { + "name": "Fire Extinguisher" + }, + ], "IfcFurniture": [ { "name": "Casework" From 01b21241026b8c08e8045f001e574e5809fa1aa5 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 11 Dec 2025 07:02:39 -0600 Subject: [PATCH 303/657] small tweak to previous commit --- .../ifcopenshell/util/schema/ifc_classes_suggestions.json | 4 ++-- 1 file changed, 2 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 c220f0ea86..f9f76947bb 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json +++ b/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json @@ -54,12 +54,12 @@ "IfcFireSuppressionTerminal": [ { "name": "Fire Extinguisher" - }, + } ], "IfcFireSuppressionTerminalType": [ { "name": "Fire Extinguisher" - }, + } ], "IfcFurniture": [ { From f708594853470b441a6bff385d85aa0b6519687d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 11 Dec 2025 16:01:57 +0500 Subject: [PATCH 304/657] svgfill cmake - drop special `cmake_minimum_required` --- src/svgfill/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 631deca2b2..ab557313d7 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -1,5 +1,3 @@ -cmake_minimum_required (VERSION 3.10) - set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) From 71a36147a66868757a976b89cea2a6bc1a33df21 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 11 Dec 2025 16:00:48 +0500 Subject: [PATCH 305/657] FindCGAL - another fix for 6591a6981 --- cmake/CMakeLists.txt | 2 +- cmake/FindCGAL.cmake | 10 +++++++--- src/ifcgeom/kernels/CMakeLists.txt | 4 ++-- src/svgfill/CMakeLists.txt | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e218fcaab9..a9acf473ec 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -199,7 +199,7 @@ endforeach() if(WITH_CGAL) find_package(CGAL REQUIRED) - set(CGAL_LIBRARIES CGAL::CGAL) + set(CGAL_LIBRARIES CGAL::CGAL_INTERFACE) list(APPEND GEOMETRY_KERNELS cgal) endif() diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index 089a1b112f..772c315e9c 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -10,10 +10,10 @@ # Input variables could also be provided as environment variables. # # Output targets: -# - `CGAL::CGAL` +# - `CGAL::CGAL_INTERFACE` # -if(TARGET CGAL::CGAL) +if(TARGET CGAL::CGAL_INTERFACE) return() endif() @@ -56,5 +56,9 @@ else() message(STATUS "CGAL: found config at '${CGAL_DIR}'.") endif() -target_compile_definitions(CGAL::CGAL INTERFACE IFOPSH_WITH_CGAL) +# Adding another `CGAL_INTERFACE` target, because we want to add compile definitions to it, +# but in `CGALconfig.cmake` `CGAL::CGAL` is an alias, so you can't add properties to it. +add_library(CGAL::CGAL_INTERFACE INTERFACE IMPORTED) +target_link_libraries(CGAL::CGAL_INTERFACE INTERFACE CGAL::CGAL) +target_compile_definitions(CGAL::CGAL_INTERFACE INTERFACE IFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 1927a1bc68..5ccb71f149 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -15,7 +15,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) if(${kernel} STREQUAL "cgal") find_package(CGAL REQUIRED) - target_link_libraries(${KERNEL_TARGET} CGAL::CGAL) + target_link_libraries(${KERNEL_TARGET} CGAL::CGAL_INTERFACE) set_property(TARGET ${KERNEL_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple") @@ -23,7 +23,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) - target_link_libraries(${KERNEL_TARGET_SIMPLE} CGAL::CGAL) + target_link_libraries(${KERNEL_TARGET_SIMPLE} CGAL::CGAL_INTERFACE) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) endif() diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index ab557313d7..ed777d23a4 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -56,7 +56,7 @@ file(GLOB LIB_H_FILES src/*.h) file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp) set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES}) add_library(svgfill ${LIB_SRC_FILES}) -target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 CGAL::CGAL) +target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 CGAL::CGAL_INTERFACE) add_executable(svgfill_exe src/main.cpp) target_link_libraries(svgfill_exe svgfill) From 20d6547e541bac6ef0dc2e31f72d8761096418f3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 11 Dec 2025 17:27:30 +0500 Subject: [PATCH 306/657] run-cmake.bat - use cgal config instead of explicit paths --- cmake/CMakeLists.txt | 14 +++++++++----- cmake/FindCGAL.cmake | 3 +++ win/run-cmake.bat | 20 ++++++++------------ 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a9acf473ec..98fb806a26 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -197,11 +197,6 @@ foreach(option_flag IN LISTS option_flags) convert_env_var_to_bool("${option_flag}") endforeach() -if(WITH_CGAL) - find_package(CGAL REQUIRED) - set(CGAL_LIBRARIES CGAL::CGAL_INTERFACE) - list(APPEND GEOMETRY_KERNELS cgal) -endif() if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) @@ -306,6 +301,15 @@ if(USE_MMAP) add_definitions(-DUSE_MMAP) endif() +# Handle CGAL after Boost settings are set, since CGAL will use them too. +# Do `find_package(Boost)` only after this, to make sure `FindBoost` finds correct components. +# Otherwise it will find components needed for CGAL and we might some libraries. +if(WITH_CGAL) + find_package(CGAL REQUIRED) + set(CGAL_LIBRARIES CGAL::CGAL_INTERFACE) + list(APPEND GEOMETRY_KERNELS cgal) +endif() + find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") message(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}") diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index 772c315e9c..29944ae867 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -46,6 +46,9 @@ else() else() set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}") endif() + # Annoyingly this is producing CMP0167 boost warnings, because it's unsetting cmake policies + # and using FindBoost module. But there's nothing we can do about it, + # since everything happens in the scope of CGAL config. I guess it's be resolved in CGAL 6.1.0. find_package(CGAL CONFIG) if(NOT CGAL_FOUND) message( diff --git a/win/run-cmake.bat b/win/run-cmake.bat index 1f8887f6eb..7b67a4f022 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -107,12 +107,9 @@ if not defined SWIG_INSTALL_DIR set SWIG_INSTALL_DIR=%INSTALL_DIR%\swigwin set JSON_INCLUDE_DIR=%INSTALL_DIR%\json if not defined ADD_COMMIT_SHA set ADD_COMMIT_SHA=Off -set CGAL_INCLUDE_DIR=%INSTALL_DIR%\cgal\include -:: set CGAL_LIBRARY_DIR=%INSTALL_DIR%\cgal\lib -set GMP_INCLUDE_DIR=%INSTALL_DIR%\mpir -set GMP_LIBRARY_DIR=%INSTALL_DIR%\mpir -set MPFR_INCLUDE_DIR=%INSTALL_DIR%\mpfr -set MPFR_LIBRARY_DIR=%INSTALL_DIR%\mpfr +set CGAL_INSTALL_DIR=%INSTALL_DIR%\cgal +set GMP_INSTALL_DIR=%INSTALL_DIR%\mpir +set MPFR_INSTALL_DIR=%INSTALL_DIR%\mpfr :: We don't install Eigen currently, :: so there's no Eigen3config.cmake and therefore we provide path explicitly. set EIGEN_DIR=%INSTALL_DIR%\Eigen @@ -146,12 +143,10 @@ echo PYTHON_EXECUTABLE = %PYTHON_EXECUTABLE% echo SWIG_INSTALL_DIR = %SWIG_INSTALL_DIR% echo JSON_INCLUDE_DIR = %JSON_INCLUDE_DIR% echo. -echo CGAL_INCLUDE_DIR = %CGAL_INCLUDE_DIR% +echo CGAL_INSTALL_DIR = %CGAL_INSTALL_DIR% :: echo CGAL_LIBRARY_DIR = %CGAL_LIBRARY_DIR% -echo GMP_INCLUDE_DIR = %GMP_INCLUDE_DIR% -echo GMP_LIBRARY_DIR = %GMP_LIBRARY_DIR% -echo MPFR_INCLUDE_DIR = %MPFR_INCLUDE_DIR% -echo MPFR_LIBRARY_DIR = %MPFR_LIBRARY_DIR% +echo GMP_INSTALL_DIR = %GMP_INSTALL_DIR% +echo MPFR_INSTALL_DIR = %MPFR_INSTALL_DIR% echo EIGEN_DIR = %EIGEN_DIR% echo TBB_INSTALL_DIR = %TBB_INSTALL_DIR% echo USD_INSTALL_DIR = %USD_INSTALL_DIR% @@ -171,7 +166,8 @@ set CMAKE_PREFIX_PATH=%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%ROCKSDB_INSTALL_DIR%;%ZSTD_INSTALL_DIR% set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_INSTALL_DIR%;%CCACHE_INSTALL_DIR% set CMake_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%USD_INSTALL_DIR%;%TBB_INSTALL_DIR% -set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%OCC_INSTALL_DIR% +set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%OCC_INSTALL_DIR%;%CGAL_INSTALL_DIR% +set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%GMP_INSTALL_DIR%;%MPFR_INSTALL_DIR% :: Not fully supported - not available from install-ifcopenshell :: and some logs are still showing Visual Studio generators. From d876c001e23231b789614ca956ea78b2e818fd1b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 11 Dec 2025 17:28:45 +0500 Subject: [PATCH 307/657] Remove deprecated `BOOST_LIBRARYDIR` var --- cmake/CMakeLists.txt | 1 - src/svgfill/README.md | 1 - win/build-deps.cmd | 5 +---- win/run-cmake.bat | 1 - 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 98fb806a26..7dbd2d62f6 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -181,7 +181,6 @@ if(BUILD_SHARED_LIBS) endif() UNIFY_ENVVARS_AND_CACHE(BOOST_ROOT) -UNIFY_ENVVARS_AND_CACHE(BOOST_LIBRARYDIR) if(NOT MINIMAL_BUILD) UNIFY_ENVVARS_AND_CACHE(PYTHON_INCLUDE_DIR) diff --git a/src/svgfill/README.md b/src/svgfill/README.md index dc0348af7c..1e2193e6f8 100644 --- a/src/svgfill/README.md +++ b/src/svgfill/README.md @@ -23,7 +23,6 @@ Installation is shown based on the IfcOpenShell build script directory output: set IFCOPENSHELL_ROOT=..\path\to\ifcopenshell\directory\ cmake -DBOOST_ROOT=%IFCOPENSHELL_ROOT%\deps\boost_1_67_0 ^ - -DBOOST_LIBRARYDIR=%IFCOPENSHELL_ROOT%\deps\boost_1_67_0\stage\vs2017-Win32\lib ^ -DLIBXML2_INCLUDE_DIR=%IFCOPENSHELL_ROOT%\deps\OpenCOLLADA\Externals\LibXML\include ^ -DLIBXML2_LIBRARIES=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\OpenCOLLADA\lib\opencollada\xml.lib ^ -DCGAL_INCLUDE_DIR=%IFCOPENSHELL_ROOT%\deps-vs2017-x86-installed\cgal\include ^ diff --git a/win/build-deps.cmd b/win/build-deps.cmd index b57ca4d5d5..b2a1a90289 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -395,7 +395,6 @@ set DEPENDENCY_INSTALL_DIR=%DEPENDENCY_DIR%\stage\%GEN_SHORTHAND% echo BOOST_INSTALL_DIR=%DEPENDENCY_INSTALL_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" :: Needed for CGAL build. set BOOST_ROOT=%DEPENDENCY_DIR% -set BOOST_LIBRARYDIR=%DEPENDENCY_DIR%\stage\%GEN_SHORTHAND%\lib :: NOTE Also zip download exists, if encountering problems with 7z for some reason. set ZIP_EXT=7z set BOOST_ZIP=boost-%BOOST_VERSION%-b2-nodocs.%ZIP_EXT% @@ -653,8 +652,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\cgal" ^ -DGMP_LIBRARIES="%INSTALL_DIR%\mpir\mpir.lib" ^ -DMPFR_INCLUDE_DIR="%INSTALL_DIR%\mpfr" ^ -DMPFR_LIBRARIES="%INSTALL_DIR%\mpfr\mpfr.lib" ^ - -DCGAL_HEADER_ONLY=On ^ - -DBOOST_LIBRARYDIR="%BOOST_LIBRARYDIR%" + -DCGAL_HEADER_ONLY=On IF NOT %ERRORLEVEL%==0 GOTO :Error call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\CGAL.sln" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -771,7 +769,6 @@ call :MarkInstallation :: -DPXR_BUILD_USD_TOOLS=FALSE ^ :: -DPXR_BUILD_TESTS=FALSE ^ :: -DBUILD_SHARED_LIBS=Off ^ -:: -DBOOST_LIBRARYDIR="%DEPS_DIR%\boost_%BOOST_VER%\stage\vs%VS_VER%-%VS_PLATFORM%\lib" :: IF NOT %ERRORLEVEL%==0 GOTO :Error :: call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\USD.sln" %BUILD_CFG% :: IF NOT %ERRORLEVEL%==0 GOTO :Error diff --git a/win/run-cmake.bat b/win/run-cmake.bat index 7b67a4f022..397887eb6c 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -127,7 +127,6 @@ echo Arguments = %ARGUMENTS% echo. call cecho.cmd 0 10 "Dependency Environment Variables for %PROJECT_NAME%:" echo BOOST_INSTALL_DIR = %BOOST_INSTALL_DIR% -echo BOOST_LIBRARYDIR = %BOOST_LIBRARYDIR% :: OCC_INCLUDE_DIR / OCC_LIBRARY_DIR are legacy vars, they're not defined by build-deps.cmd anymore. echo OCC_INCLUDE_DIR = %OCC_INCLUDE_DIR% echo OCC_LIBRARY_DIR = %OCC_LIBRARY_DIR% From f5b1d7695ac425a1b5badb02c5e594dec868442d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 11 Dec 2025 17:33:34 +0500 Subject: [PATCH 308/657] build-deps - remove unused gmp and mpfr paths Since it's header-only it doesn't need them --- win/build-deps.cmd | 5 ----- 1 file changed, 5 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index b2a1a90289..e01cd62d65 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -647,11 +647,6 @@ cd "%DEPENDENCY_DIR%" git reset --hard git apply --ignore-whitespace "%~dp0patches\cgal_no_zlib.patch" call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\cgal" ^ - -DBOOST_ROOT="%BOOST_ROOT%" ^ - -DGMP_INCLUDE_DIR="%INSTALL_DIR%\mpir" ^ - -DGMP_LIBRARIES="%INSTALL_DIR%\mpir\mpir.lib" ^ - -DMPFR_INCLUDE_DIR="%INSTALL_DIR%\mpfr" ^ - -DMPFR_LIBRARIES="%INSTALL_DIR%\mpfr\mpfr.lib" ^ -DCGAL_HEADER_ONLY=On IF NOT %ERRORLEVEL%==0 GOTO :Error call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\CGAL.sln" %BUILD_CFG% From 2627052b555db5ba202c8a8da094904a60188995 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 11 Dec 2025 19:22:49 +0500 Subject: [PATCH 309/657] cmake - export IfcOpenShellConfig.cmake --- cmake/CMakeLists.txt | 4 +++ cmake/IfcOpenShellConfig.cmake.in | 5 ++++ cmake/package_export.cmake | 35 ++++++++++++++++++++++++ src/ifcconvert/CMakeLists.txt | 4 ++- src/ifcgeom/CMakeLists.txt | 7 +++-- src/ifcgeom/Serialization/CMakeLists.txt | 4 ++- src/ifcgeom/kernels/CMakeLists.txt | 6 ++++ src/ifcgeom/mapping/CMakeLists.txt | 3 ++ src/ifcgeomserver/CMakeLists.txt | 4 ++- src/ifcparse/CMakeLists.txt | 4 ++- src/svgfill/CMakeLists.txt | 4 ++- 11 files changed, 72 insertions(+), 8 deletions(-) create mode 100644 cmake/IfcOpenShellConfig.cmake.in create mode 100644 cmake/package_export.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 7dbd2d62f6..e1e06b04ea 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -170,6 +170,8 @@ if(NOT IS_ABSOLUTE ${INCLUDEDIR}) endif() message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") +set(IFCOPENSHELL_EXPORT_TARGETS "${PROJECT_NAME}Targets") + if(BUILD_SHARED_LIBS) add_definitions(-DIFC_SHARED_BUILD) if(MSVC) @@ -681,3 +683,5 @@ set(CPACK_DEBIAN_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") # set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/debian/postinst") include(CPack) + +include(package_export.cmake) diff --git a/cmake/IfcOpenShellConfig.cmake.in b/cmake/IfcOpenShellConfig.cmake.in new file mode 100644 index 0000000000..156aaa37da --- /dev/null +++ b/cmake/IfcOpenShellConfig.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@CONFIG_TARGETS_FILENAME@") + +check_required_components("@PROJECT_NAME@") diff --git a/cmake/package_export.cmake b/cmake/package_export.cmake new file mode 100644 index 0000000000..6c9c233b90 --- /dev/null +++ b/cmake/package_export.cmake @@ -0,0 +1,35 @@ +set(CONFIG_PACKAGE_LOCATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") +set(CONFIG_NAMESPACE "${PROJECT_NAME}") +set(CONFIG_TARGETS_FILENAME ${PROJECT_NAME}Targets.cmake) +set(CONFIG_VERSION_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake") +set(CONFIG_PACKAGE_INPUT "${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in") +set(CONFIG_PACKAGE_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake") + +# Allow linking against build directory. +export( + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + FILE ${CONFIG_TARGETS_FILENAME} + NAMESPACE ${CONFIG_NAMESPACE}:: +) + +install( + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + NAMESPACE ${CONFIG_NAMESPACE}:: + DESTINATION "${CONFIG_PACKAGE_LOCATION}" +) + + +include(CMakePackageConfigHelpers) +write_basic_package_version_file(${CONFIG_VERSION_OUTPUT} + COMPATIBILITY ExactVersion) + +configure_package_config_file(${CONFIG_PACKAGE_INPUT} + ${CONFIG_PACKAGE_OUTPUT} + INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION} +) + +install(FILES + "${CONFIG_PACKAGE_OUTPUT}" + "${CONFIG_VERSION_OUTPUT}" + DESTINATION ${CONFIG_PACKAGE_LOCATION} +) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index dd6a0040a2..4293a3222a 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -16,4 +16,6 @@ target_link_libraries(IfcConvert ${CGAL_LIBRARIES} ${GLTF_LIBRARIES} ) -install(TARGETS IfcConvert) +install(TARGETS IfcConvert + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 8ffd1e77c4..ff839663ea 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -31,8 +31,9 @@ if(NOT WASM_BUILD) target_link_libraries(IfcGeom IfcParse) endif() -install(TARGETS IfcGeom) - +install(TARGETS IfcGeom + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) install(FILES ${SCHEMA_AGNOSTIC_H_FILES} DESTINATION ${INCLUDEDIR}/ifcgeom -) \ No newline at end of file +) diff --git a/src/ifcgeom/Serialization/CMakeLists.txt b/src/ifcgeom/Serialization/CMakeLists.txt index 9031c08148..84920be5c2 100644 --- a/src/ifcgeom/Serialization/CMakeLists.txt +++ b/src/ifcgeom/Serialization/CMakeLists.txt @@ -11,6 +11,8 @@ install(FILES ${IFCGEOM_SERIALIZATION_H_FILE} DESTINATION ${INCLUDEDIR}/ifcgeom/Serialization ) -install(TARGETS geometry_serializer ${geometry_serializer_libraries}) +install(TARGETS geometry_serializer ${geometry_serializer_libraries} + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 5ccb71f149..5b5aedc781 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -12,6 +12,9 @@ foreach(kernel ${GEOMETRY_KERNELS}) set_property(TARGET ${KERNEL_TARGET} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOM_EXPORTS") list(APPEND kernel_libraries ${KERNEL_TARGET}) target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) + install(TARGETS ${KERNEL_TARGET} + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + ) if(${kernel} STREQUAL "cgal") find_package(CGAL REQUIRED) @@ -24,6 +27,9 @@ foreach(kernel ${GEOMETRY_KERNELS}) list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) target_link_libraries(${KERNEL_TARGET_SIMPLE} CGAL::CGAL_INTERFACE) + install(TARGETS ${KERNEL_TARGET_SIMPLE} + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + ) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) endif() diff --git a/src/ifcgeom/mapping/CMakeLists.txt b/src/ifcgeom/mapping/CMakeLists.txt index c5d283a2c1..5f7fd661ea 100644 --- a/src/ifcgeom/mapping/CMakeLists.txt +++ b/src/ifcgeom/mapping/CMakeLists.txt @@ -11,6 +11,9 @@ foreach(schema ${SCHEMA_VERSIONS}) target_link_libraries(geometry_mapping_ifc${schema} IfcParse Eigen3::Eigen) list(APPEND mapping_libraries geometry_mapping_ifc${schema}) + install(TARGETS geometry_mapping_ifc${schema} + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + ) endforeach() set(mapping_libraries ${mapping_libraries} PARENT_SCOPE) diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt index ff56607ff2..15fdbbb3a6 100644 --- a/src/ifcgeomserver/CMakeLists.txt +++ b/src/ifcgeomserver/CMakeLists.txt @@ -5,4 +5,6 @@ set(SOURCE_FILES ${CPP_FILES}) add_executable(IfcGeomServer ${SOURCE_FILES}) target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OpenCASCADE_LIBRARIES}) -install(TARGETS IfcGeomServer) +install(TARGETS IfcGeomServer + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index 88003d342d..f7d3f06f3b 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -53,4 +53,6 @@ install(FILES ${IFCPARSE_H_FILES} DESTINATION ${INCLUDEDIR}/ifcparse ) -install(TARGETS IfcParse) +install(TARGETS IfcParse + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index ed777d23a4..6da19bc586 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -72,5 +72,7 @@ if(WIN32) target_link_options(svgfill_exe PRIVATE "/NOIMPLIB") endif() -install(TARGETS svgfill_exe svgfill) +install(TARGETS svgfill_exe svgfill + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) install(FILES ${LIB_H_FILES} DESTINATION ${INCLUDEDIR}) From 37f3199749b632133806484e406574614bf30dae Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 11 Dec 2025 13:38:53 -0600 Subject: [PATCH 310/657] When selected, preserve text decorations for IfcAnnotation in local view --- .../bonsai/bim/module/drawing/decoration.py | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 581b8225c0..3a1d73de16 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -1621,6 +1621,8 @@ class SymbolDecorator(BaseDecorator): class CutDecorator: installed = None cache = {} + local_view_has_annotation = False + was_in_local_view = False @classmethod def install(cls, context): @@ -1645,12 +1647,30 @@ class CutDecorator: if not context.scene.camera: return - # Check if any viewport is in local view - skip decorations if so + # Check if any viewport is in local view + in_local_view = False for area in context.screen.areas: if area.type == "VIEW_3D": space = area.spaces.active if isinstance(space, bpy.types.SpaceView3D) and space.local_view: - return # Don't draw decorations in local view + in_local_view = True + break + + # If just entering local view (transition from False to True) + if in_local_view and not self.__class__.was_in_local_view: + self.__class__.local_view_has_annotation = False + for obj in context.selected_objects: + element = tool.Ifc.get_entity(obj) + if element and element.is_a("IfcAnnotation"): + self.__class__.local_view_has_annotation = True + break + + # Update the state for next time + self.__class__.was_in_local_view = in_local_view + + # Skip decorations if in local view and no IfcAnnotation was selected when entering + if in_local_view and not self.__class__.local_view_has_annotation: + return self.addon_prefs = tool.Blender.get_addon_preferences() selected_elements_color = self.addon_prefs.decorator_color_selected @@ -1978,6 +1998,8 @@ class DecorationsHandler: installed = None handler = None + local_view_has_annotation = False + was_in_local_view = False @classmethod def install(cls, context): @@ -2036,12 +2058,30 @@ class DecorationsHandler: decorator.font_id = font_id def __call__(self, context): - # Check if any viewport is in local view - skip decorations if so + # Check if any viewport is in local view + in_local_view = False for area in context.screen.areas: if area.type == "VIEW_3D": space = area.spaces.active if isinstance(space, bpy.types.SpaceView3D) and space.local_view: - return # Don't draw decorations in local view + in_local_view = True + break + + # If just entering local view (transition from False to True) + if in_local_view and not self.__class__.was_in_local_view: + self.__class__.local_view_has_annotation = False + for obj in context.selected_objects: + element = tool.Ifc.get_entity(obj) + if element and element.is_a("IfcAnnotation"): + self.__class__.local_view_has_annotation = True + break + + # Update the state for next time + self.__class__.was_in_local_view = in_local_view + + # Skip decorations if in local view and no IfcAnnotation was selected when entering + if in_local_view and not self.__class__.local_view_has_annotation: + return # disable decorations when not in camera view if context.region_data.view_perspective != "CAMERA": From 39dd08c84e2a3f4435bda50bd485343a808fca33 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 18:12:39 +0500 Subject: [PATCH 311/657] cmake - keep `VERSION_OVERRIDE` option description (3971408a0) --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e1e06b04ea..10ef70ea56 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -96,6 +96,7 @@ option(WITH_ZSTD "Use Zstd compression in RocksDB writes" OFF) option(USERSPACE_PYTHON_PREFIX "Installs IfcPython for the current user only instead of system-wide." OFF) option(USE_DEBUG_PYTHON "Use debug binaries when building Debug IfcPython on Windows." OFF) option(ADD_COMMIT_SHA "Add commit sha and branch in version number, requires git" OFF) +option(VERSION_OVERRIDE "Override the version defined in buildinfo.cpp with the file VERSION in the repository root" OFF) set( PYTHON_MODULE_INSTALL_DIR From 084992ddcc880fd46ed9074f00602bdcf2cd271f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 12:19:40 +0500 Subject: [PATCH 312/657] Make IfcParseExamples buildable outside of the main build tree It's a very verbose version of consuming IfcOpenShell cmake package, but we'll be able to use it as a start point to build upon. --- .github/workflows/ci.yml | 33 +++++++++ .gitignore | 1 + src/examples/CMakeLists.txt | 62 +++++++++++----- src/examples/IfcParseExamples_test.ifc | 97 ++++++++++++++++++++++++++ src/examples/README.md | 22 ++++++ 5 files changed, 198 insertions(+), 17 deletions(-) create mode 100644 src/examples/IfcParseExamples_test.ifc create mode 100644 src/examples/README.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 677a0cfde3..afdbc4d6fb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -118,6 +118,31 @@ jobs: -DCMAKE_CXX_FLAGS_INIT="-fPIC" sudo make -j$(nproc) install + # We need zstd and libxml2 just for cmake config files to test the examples build. + # zslibzstd-dev has cmake config only on Ubuntu 24.04+. + - name : Build zstd + run: | + git clone https://github.com/facebook/zstd --depth 1 --branch v1.5.7 + cd zstd + # `build` already exists. + mkdir build_ && cd build_ + cmake ../build/cmake -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + sudo cmake --build . --target install -j $(nproc) + + # libxml2-dev doesn't have cmake configs even on Ubuntu 24.04+. + - name: Build libxml2 + run: | + git clone https://gitlab.gnome.org/GNOME/libxml2.git --branch v2.13.8 --depth 1 + cd libxml2 + mkdir build && cd build + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + sudo cmake --build . --target install -j $(nproc) + # Ubuntu has `swig` package, but we build it to match the version we use in the main build. # To avoid failing tests when checking stub generation. - name: build swig @@ -178,6 +203,14 @@ jobs: run: | IfcConvert test/input/acad2010_walls.ifc test/input/acad2010_walls.obj + - name: Build standalone examples to test cmake package + run: | + cd src/examples + mkdir build && cd build + cmake .. -DCMAKE_BUILD_TYPE=Release + cmake --build . + ./IfcParseExamples "../IfcParseExamples_test.ifc" + - name: Test ifcopenshell-python run: | cd test diff --git a/.gitignore b/.gitignore index 504685d332..bfdfdd5f76 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /_deps-vs*-x*-installed/ /_installed-vs*-x*/ /build/ +/src/examples/build/ # output directories /cmake/out/ diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 1bdad7f032..809e4bccdf 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -17,31 +17,59 @@ # # ################################################################################ -if(SCHEMA_VERSIONS MATCHES "2x3") - ADD_EXECUTABLE(IfcParseExamples IfcParseExamples.cpp) - TARGET_LINK_LIBRARIES(IfcParseExamples IfcParse) - set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples) - target_compile_features(IfcParseExamples PUBLIC cxx_std_17) +# Thils file can also be build standalone, outside of the IfcOpenShell build tree, +# to demonstrate the usage IfcOpenShell as a cmake package. +if(NOT BUILD_EXAMPLES) + set(STANDALONE_PROJECT ON) +endif() - if(WITH_OPENCASCADE) +if(STANDALONE_PROJECT) + cmake_minimum_required(VERSION 3.21) + project(IfcOpenShellExamples) - ADD_EXECUTABLE(IfcOpenHouse IfcOpenHouse.cpp) - TARGET_LINK_LIBRARIES(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_STATIC_RUNTIME OFF) + set(Boost_USE_MULTITHREADED ON) + set(Boost_COMPONENTS system program_options regex thread date_time iostreams) + find_package(Boost CONFIG REQUIRED COMPONENTS ${Boost_COMPONENTS}) + find_package(zstd CONFIG REQUIRED) + find_package(RocksDB CONFIG REQUIRED) + find_package(LibXml2 CONFIG REQUIRED) + find_package(IfcOpenShell CONFIG REQUIRED) +endif() + +if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") + add_executable(IfcParseExamples IfcParseExamples.cpp) + + if(STANDALONE_PROJECT) + target_include_directories(IfcParseExamples PRIVATE ${Boost_INCLUDE_DIRS}) + target_link_libraries(IfcParseExamples ${Boost_LIBRARIES}) + target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse) + target_compile_features(IfcParseExamples PRIVATE cxx_std_17) + target_compile_definitions(IfcParseExamples PRIVATE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3 IFOPSH_WITH_ROCKSDB) + else() + target_link_libraries(IfcParseExamples IfcParse) + set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples) + target_compile_features(IfcParseExamples PRIVATE cxx_std_17) + endif() + + if(NOT STANDALONE_PROJECT AND WITH_OPENCASCADE) + add_executable(IfcOpenHouse IfcOpenHouse.cpp) + target_link_libraries(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples) - ADD_EXECUTABLE(IfcAdvancedHouse IfcAdvancedHouse.cpp) - TARGET_LINK_LIBRARIES(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) + add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) + target_link_libraries(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) - endif() -endif(SCHEMA_VERSIONS MATCHES "2x3") +endif() -if(SCHEMA_VERSIONS MATCHES "4x3_add2") - ADD_EXECUTABLE(IfcAlignment IfcAlignment.cpp) - TARGET_LINK_LIBRARIES(IfcAlignment ${IFCOPENSHELL_LIBRARIES}) +if(NOT STANDALONE_PROJECT AND SCHEMA_VERSIONS MATCHES "4x3_add2") + add_executable(IfcAlignment IfcAlignment.cpp) + target_link_libraries(IfcAlignment ${IFCOPENSHELL_LIBRARIES}) set_target_properties(IfcAlignment PROPERTIES FOLDER Examples) - ADD_EXECUTABLE(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp) - TARGET_LINK_LIBRARIES(IfcSimplifiedAlignment ${IFCOPENSHELL_LIBRARIES}) + add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp) + target_link_libraries(IfcSimplifiedAlignment ${IFCOPENSHELL_LIBRARIES}) set_target_properties(IfcSimplifiedAlignment PROPERTIES FOLDER Examples) endif() diff --git a/src/examples/IfcParseExamples_test.ifc b/src/examples/IfcParseExamples_test.ifc new file mode 100644 index 0000000000..9fec9e76b4 --- /dev/null +++ b/src/examples/IfcParseExamples_test.ifc @@ -0,0 +1,97 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); +FILE_NAME('IfcParseExamples_test.ifc','2025-12-12T13:49:19+05:00',(''),(''),'IfcOpenShell 0.0.0','Bonsai 0.8.5-alpha251212-a47cbc3','Nobody'); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCPERSON('HSeldon','Seldon','Hari',$,$,$,$,$); +#2=IFCORGANIZATION('APTR','Aperture Science',$,$,$); +#3=IFCPERSONANDORGANIZATION(#1,#2,$); +#4=IFCACTORROLE(.USERDEFINED.,'CONTRIBUTOR',$); +#5=IFCORGANIZATION('IfcOpenShell','IfcOpenShell','IfcOpenShell is an open source software library that helps users and software developers to work with IFC data.',(#4),(#6)); +#6=IFCTELECOMADDRESS(.USERDEFINED.,$,'WEBPAGE',$,$,$,$,'https://ifcopenshell.org'); +#7=IFCAPPLICATION(#5,'0.8.5','Bonsai','Bonsai-0.8.5'); +#8=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1765520605,#3,#7,1765520605); +#9=IFCPROJECT('3GSSvm5SP5U96O5iar8uYb',#8,'My Project',$,$,$,$,(#22,#34),#17); +#10=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#11=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#12=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#13=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); +#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#15=IFCMEASUREWITHUNIT(IFCREAL(0.0174532925199433),#14); +#16=IFCCONVERSIONBASEDUNIT(#13,.PLANEANGLEUNIT.,'degree',#15); +#17=IFCUNITASSIGNMENT((#12,#10,#16,#11)); +#18=IFCCARTESIANPOINT((0.,0.,0.)); +#19=IFCDIRECTION((0.,0.,1.)); +#20=IFCDIRECTION((1.,0.,0.)); +#21=IFCAXIS2PLACEMENT3D(#18,#19,#20); +#22=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#21,$); +#23=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$); +#24=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#22,$,.GRAPH_VIEW.,$); +#25=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$); +#26=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.SECTION_VIEW.,$); +#27=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.ELEVATION_VIEW.,$); +#28=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$); +#29=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.PLAN_VIEW.,$); +#30=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Profile','Model',*,*,*,*,#22,$,.ELEVATION_VIEW.,$); +#31=IFCCARTESIANPOINT((0.,0.)); +#32=IFCDIRECTION((1.,0.)); +#33=IFCAXIS2PLACEMENT2D(#31,#32); +#34=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Plan',2,1.E-05,#33,$); +#35=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Plan',*,*,*,*,#34,$,.GRAPH_VIEW.,$); +#36=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Plan',*,*,*,*,#34,$,.PLAN_VIEW.,$); +#37=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#34,$,.PLAN_VIEW.,$); +#38=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#34,$,.REFLECTED_PLAN_VIEW.,$); +#39=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765520605,#3,#7,1765520605); +#40=IFCSITE('2Ys4j4OOf3x9UYeALDJ_g3',#39,'My Site',$,$,#66,$,$,.ELEMENT.,$,$,$,$,$); +#46=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765520605,#3,#7,1765520605); +#47=IFCBUILDING('3e580MQFTCD9tCSaZWRPi9',#46,'My Building',$,$,#73,$,$,.ELEMENT.,$,$,$); +#53=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765520605,#3,#7,1765520605); +#54=IFCBUILDINGSTOREY('3XFkAr6KbAsP5wR3gxi3my',#53,'My Storey',$,$,#80,$,$,.ELEMENT.,$); +#60=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1765520605,#3,#7,1765520605); +#61=IFCRELAGGREGATES('2OWfFyDQn0qP0Vd6NWGX7k',#60,$,$,#9,(#40)); +#62=IFCCARTESIANPOINT((0.,0.,0.)); +#63=IFCDIRECTION((0.,0.,1.)); +#64=IFCDIRECTION((1.,0.,0.)); +#65=IFCAXIS2PLACEMENT3D(#62,#63,#64); +#66=IFCLOCALPLACEMENT($,#65); +#67=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1765520605,#3,#7,1765520605); +#68=IFCRELAGGREGATES('3_X_vfPpXDaO3NODBJgmSp',#67,$,$,#40,(#47)); +#69=IFCCARTESIANPOINT((0.,0.,0.)); +#70=IFCDIRECTION((0.,0.,1.)); +#71=IFCDIRECTION((1.,0.,0.)); +#72=IFCAXIS2PLACEMENT3D(#69,#70,#71); +#73=IFCLOCALPLACEMENT(#66,#72); +#74=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1765520605,#3,#7,1765520605); +#75=IFCRELAGGREGATES('3ScF98CZD3pAa0SW$mhBHF',#74,$,$,#47,(#54)); +#76=IFCCARTESIANPOINT((0.,0.,0.)); +#77=IFCDIRECTION((0.,0.,1.)); +#78=IFCDIRECTION((1.,0.,0.)); +#79=IFCAXIS2PLACEMENT3D(#76,#77,#78); +#80=IFCLOCALPLACEMENT(#73,#79); +#110=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765529359,#3,#7,1765520632); +#111=IFCWALL('1lfiJzSCH1a8vjDuSLL4Ii',#110,'Cube',$,$,#203,$,$); +#112=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765520818,#3,#7,1765520632); +#113=IFCRELCONTAINEDINSPATIALSTRUCTURE('2Gqx6vP7jB4x_h65Tawn0f',#112,$,$,(#111,#182,#150),#54); +#149=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765529359,#3,#7,1765520810); +#150=IFCWINDOW('1eE0btB_54tBL59wLXKO1B',#149,'Cube',$,$,#208,$,$,$,$); +#181=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765529359,#3,#7,1765520818); +#182=IFCBUILDINGELEMENTPART('0fmaoBJgz0kPBavO$EJkPn',#181,'Cube',$,$,#198,$,$); +#194=IFCCARTESIANPOINT((-3.82147288322449,-0.987768530845642,1.78445267677307)); +#195=IFCDIRECTION((0.,0.,1.)); +#196=IFCDIRECTION((1.,0.,0.)); +#197=IFCAXIS2PLACEMENT3D(#194,#195,#196); +#198=IFCLOCALPLACEMENT(#80,#197); +#199=IFCCARTESIANPOINT((0.,0.,0.)); +#200=IFCDIRECTION((0.,0.,1.)); +#201=IFCDIRECTION((1.,0.,0.)); +#202=IFCAXIS2PLACEMENT3D(#199,#200,#201); +#203=IFCLOCALPLACEMENT(#80,#202); +#204=IFCCARTESIANPOINT((0.,4.25822639465332,0.)); +#205=IFCDIRECTION((0.,0.,1.)); +#206=IFCDIRECTION((1.,0.,0.)); +#207=IFCAXIS2PLACEMENT3D(#204,#205,#206); +#208=IFCLOCALPLACEMENT(#80,#207); +ENDSEC; +END-ISO-10303-21; diff --git a/src/examples/README.md b/src/examples/README.md new file mode 100644 index 0000000000..fe309ed653 --- /dev/null +++ b/src/examples/README.md @@ -0,0 +1,22 @@ + +Example of building IfcParseExamples outside of the IfcOpenShell build tree. + +```powershell +$IFCOPENSHELL_ROOT="L:\Projects\Github\IfcOpenShell" +$PREFIX_PATH="$IFCOPENSHELL_ROOT\_deps\boost_1_86_0\stage\vs2022-x64" +$PREFIX_PATH+=";$IFCOPENSHELL_ROOT\_installed-vs2022-x64" +$PREFIX_PATH+=";$IFCOPENSHELL_ROOT\_deps-vs2022-x64-installed\rocksdb" +$PREFIX_PATH+=";$IFCOPENSHELL_ROOT\_deps-vs2022-x64-installed\zstd" +$PREFIX_PATH+=";L:\Software\usr\libxml2" + +cmake .. -G Ninja -DCMAKE_PREFIX_PATH="$PREFIX_PATH" -DCMAKE_BUILD_TYPE=Release +ninja -v +./IfcParseExamples.exe "../IfcParseExamples_test.ifc" +# Scanning file... +# Done scanning file +# Done resolving references +# Found 3 elements in ..\IfcParseExamples_test.ifc: +# #182=IfcBuildingElementPart('0fmaoBJgz0kPBavO$EJkPn',#181,'Cube',$,$,#193,#183,$) +# #111=IfcWall('1lfiJzSCH1a8vjDuSLL4Ii',#110,'Cube',$,$,#119,#114,$) +# #150=IfcWindow('1eE0btB_54tBL59wLXKO1B',#149,'Cube',$,$,#188,#151,$,$,$) +``` From a62a4bb158d96b51efda00e2aad8d5ac0c3fb07a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 12:20:35 +0500 Subject: [PATCH 313/657] cmake - install examples too --- src/examples/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 809e4bccdf..5ade6fda83 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -52,6 +52,7 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples) target_compile_features(IfcParseExamples PRIVATE cxx_std_17) endif() + install(TARGETS IfcParseExamples) if(NOT STANDALONE_PROJECT AND WITH_OPENCASCADE) add_executable(IfcOpenHouse IfcOpenHouse.cpp) @@ -61,6 +62,8 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) target_link_libraries(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) + + install(TARGETS IfcOpenHouse IfcAdvancedHouse) endif() endif() @@ -72,4 +75,6 @@ if(NOT STANDALONE_PROJECT AND SCHEMA_VERSIONS MATCHES "4x3_add2") add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp) target_link_libraries(IfcSimplifiedAlignment ${IFCOPENSHELL_LIBRARIES}) set_target_properties(IfcSimplifiedAlignment PROPERTIES FOLDER Examples) + + install(TARGETS IfcAlignment IfcSimplifiedAlignment) endif() From 159538e2bb9b33784f7010018b460769c4bb000a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 13:27:34 +0500 Subject: [PATCH 314/657] cmake - add `_d` debug postfix for libraries on Windows --- cmake/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 10ef70ea56..0f71a00b1d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -173,6 +173,12 @@ message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") set(IFCOPENSHELL_EXPORT_TARGETS "${PROJECT_NAME}Targets") +# On Windows Release and Debug binaries are not compatible. +# So we add a postfix to avoid issues and allow release and debug installations to coexist. +if(WIN32) + set(CMAKE_DEBUG_POSTFIX "_d") +endif() + if(BUILD_SHARED_LIBS) add_definitions(-DIFC_SHARED_BUILD) if(MSVC) From 92964fb5ef206f70893e48e13747592b5b8880de Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 13:43:09 +0500 Subject: [PATCH 315/657] cmake - option to build only common schemas --- cmake/CMakeLists.txt | 11 +++++++++-- src/ifcparse/CMakeLists.txt | 1 - 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0f71a00b1d..0947a74b01 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -80,6 +80,13 @@ option(BUILD_GEOMSERVER "Build IfcGeomServer executable (Open CASCADE is require option(BUILD_IFCMAX "Build IfcMax, a 3ds Max plug-in, Windows-only." OFF) option(BUILD_QTVIEWER "Build IfcOpenShell Qt GUI Viewer" OFF) # QtViewer requires Qt6 option(BUILD_PACKAGE "" OFF) +# Most users probably need just common schemas, +# but we're keeping it `OFF` by default to avoid disruption +# (e.g. all Python distribution would need to adapt this option to be set). +option(BUILD_ONLY_COMMON_SCHEMAS + "Build only common IFC schemas (2x3, 4, 4x3_add2). By default all schemas will be built." + OFF) +option(SCHEMA_VERSIONS "Explicitly specify schemas to build." "") option(WITH_OPENCASCADE "Enable geometry interpretation using Open CASCADE" ON) option(WITH_CGAL "Enable geometry interpretation using CGAL" ON) @@ -449,8 +456,8 @@ include_directories(${OPENCOLLADA_INCLUDE_DIRS} ) if(NOT SCHEMA_VERSIONS) - if(WASM_BUILD) - # super arbitrarily try to keep size down at least a little bit + # `WASM_BUILD` - super arbitrarily try to keep size down at least a little bit + if(BUILD_ONLY_COMMON_SCHEMAS OR WASM_BUILD) set(SCHEMA_VERSIONS "2x3" "4" "4x3_add2") else() set(SCHEMA_VERSIONS "2x3" "4" "4x1" "4x2" "4x3" "4x3_tc1" "4x3_add1" "4x3_add2") diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index f7d3f06f3b..ba99329601 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -17,7 +17,6 @@ foreach(file ${IFCPARSE_CPP_FILES_ALL}) endif() endforeach() -message(STATUS "SCHEMA_VERSIONS from ifcparse: ${SCHEMA_VERSIONS}") foreach(schema ${SCHEMA_VERSIONS}) list(APPEND IFCPARSE_H_FILES Ifc${schema}.h From 99835fcab367323d99958c9058b757508540b635 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 13:55:44 +0500 Subject: [PATCH 316/657] IfcParseExamples not to rely on includes --- src/examples/CMakeLists.txt | 2 ++ src/examples/IfcParseExamples.cpp | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 5ade6fda83..00929f7269 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -42,12 +42,14 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") add_executable(IfcParseExamples IfcParseExamples.cpp) if(STANDALONE_PROJECT) + target_include_directories(IfcParseExamples PRIVATE "${IfcOpenShell_DIR}/../../../include") target_include_directories(IfcParseExamples PRIVATE ${Boost_INCLUDE_DIRS}) target_link_libraries(IfcParseExamples ${Boost_LIBRARIES}) target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse) target_compile_features(IfcParseExamples PRIVATE cxx_std_17) target_compile_definitions(IfcParseExamples PRIVATE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3 IFOPSH_WITH_ROCKSDB) else() + target_include_directories(IfcParseExamples PRIVATE "${CMAKE_SOURCE_DIR}/../src") target_link_libraries(IfcParseExamples IfcParse) set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples) target_compile_features(IfcParseExamples PRIVATE cxx_std_17) diff --git a/src/examples/IfcParseExamples.cpp b/src/examples/IfcParseExamples.cpp index dcd3654d83..e8ad950919 100644 --- a/src/examples/IfcParseExamples.cpp +++ b/src/examples/IfcParseExamples.cpp @@ -20,9 +20,9 @@ // TODO: Multiple schemas #define IfcSchema Ifc2x3 -#include "../ifcparse/IfcFile.h" -#include "../ifcparse/IfcLogger.h" -#include "../ifcparse/Ifc2x3.h" +#include "ifcparse/IfcFile.h" +#include "ifcparse/IfcLogger.h" +#include "ifcparse/Ifc2x3.h" #include #include From 5a0f8d30cf80195a2fb51c6895c8d0cb5c53dce5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 14:28:07 +0500 Subject: [PATCH 317/657] cmake - install headers using `PUBLIC_HEADER`, deprecate `INCLUDEDIR` --- cmake/CMakeLists.txt | 8 -------- src/ifcgeom/CMakeLists.txt | 12 ++++++++---- src/ifcgeom/Serialization/CMakeLists.txt | 13 +++++++------ src/ifcgeom/kernels/CMakeLists.txt | 10 +++++----- src/ifcparse/CMakeLists.txt | 13 ++++++++----- src/serializers/CMakeLists.txt | 12 ++++++++---- src/svgfill/CMakeLists.txt | 15 ++++----------- 7 files changed, 40 insertions(+), 43 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0947a74b01..424c1c88e7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -170,14 +170,6 @@ endif() include(GNUInstallDirs) -if(NOT INCLUDEDIR) - set(INCLUDEDIR include) -endif() -if(NOT IS_ABSOLUTE ${INCLUDEDIR}) - set(INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}) -endif() -message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") - set(IFCOPENSHELL_EXPORT_TARGETS "${PROJECT_NAME}Targets") # On Windows Release and Debug binaries are not compatible. diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index ff839663ea..a7a6fac6a9 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -14,7 +14,13 @@ file(GLOB SCHEMA_AGNOSTIC_CPP_FILES *.cpp) set(SCHEMA_AGNOSTIC_FILES ${SCHEMA_AGNOSTIC_H_FILES} ${SCHEMA_AGNOSTIC_CPP_FILES}) add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES}) -set_target_properties(IfcGeom PROPERTIES COMPILE_FLAGS -DIFC_GEOM_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") +set_target_properties(IfcGeom + PROPERTIES + COMPILE_FLAGS -DIFC_GEOM_EXPORTS + VERSION "${PROJECT_VERSION}" + SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" + PUBLIC_HEADER "${SCHEMA_AGNOSTIC_H_FILES}" +) if(UNIX) find_package(Threads) @@ -33,7 +39,5 @@ endif() install(TARGETS IfcGeom EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} -) -install(FILES ${SCHEMA_AGNOSTIC_H_FILES} - DESTINATION ${INCLUDEDIR}/ifcgeom + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom" ) diff --git a/src/ifcgeom/Serialization/CMakeLists.txt b/src/ifcgeom/Serialization/CMakeLists.txt index 84920be5c2..ae3331a2f8 100644 --- a/src/ifcgeom/Serialization/CMakeLists.txt +++ b/src/ifcgeom/Serialization/CMakeLists.txt @@ -1,18 +1,19 @@ add_subdirectory(schema) add_library(geometry_serializer STATIC Serialization.cpp) -set_target_properties(geometry_serializer PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS") +file(GLOB IFCGEOM_SERIALIZATION_H_FILE *.h) + +set_target_properties(geometry_serializer PROPERTIES + COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS" + PUBLIC_HEADER "${IFCGEOM_SERIALIZATION_H_FILE}" +) target_link_libraries(geometry_serializer ${geometry_serializer_libraries} IfcParse) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} "geometry_serializer" ${geometry_serializer_libraries}) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} PARENT_SCOPE) -file(GLOB IFCGEOM_SERIALIZATION_H_FILE *.h) -install(FILES ${IFCGEOM_SERIALIZATION_H_FILE} - DESTINATION ${INCLUDEDIR}/ifcgeom/Serialization -) - install(TARGETS geometry_serializer ${geometry_serializer_libraries} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/Serialization" ) set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 5b5aedc781..604db5ce9b 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -9,11 +9,15 @@ foreach(kernel ${GEOMETRY_KERNELS}) set(KERNEL_TARGET "geometry_kernel_${kernel}") add_library(${KERNEL_TARGET} OBJECT ${IFCGEOM_FILES}) - set_property(TARGET ${KERNEL_TARGET} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOM_EXPORTS") + set_target_properties(${KERNEL_TARGET} PROPERTIES + COMPILE_FLAGS "-DIFC_GEOM_EXPORTS" + PUBLIC_HEADER "${IFCGEOM_H_FILES}" + ) list(APPEND kernel_libraries ${KERNEL_TARGET}) target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) install(TARGETS ${KERNEL_TARGET} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/kernels/${kernel}" ) if(${kernel} STREQUAL "cgal") @@ -33,10 +37,6 @@ foreach(kernel ${GEOMETRY_KERNELS}) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) endif() - - install(FILES ${IFCGEOM_H_FILES} - DESTINATION ${INCLUDEDIR}/ifcgeom/kernels/${kernel} - ) endforeach() set(kernel_libraries ${kernel_libraries} PARENT_SCOPE) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index ba99329601..5f29bbd812 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -31,7 +31,13 @@ endforeach() set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES}) add_library(IfcParse ${IFCPARSE_FILES}) -set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") +set_target_properties(IfcParse + PROPERTIES + COMPILE_FLAGS -DIFC_PARSE_EXPORTS + VERSION "${PROJECT_VERSION}" + SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" + PUBLIC_HEADER "${IFCPARSE_H_FILES}" +) if(IFCXML_SUPPORT) find_package(LibXml2 REQUIRED) @@ -47,11 +53,8 @@ else() target_link_libraries(IfcParse ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES}) endif() -# CMake installation targets -install(FILES ${IFCPARSE_H_FILES} - DESTINATION ${INCLUDEDIR}/ifcparse -) install(TARGETS IfcParse EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcparse" ) diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index 5d70971f92..c6632451c7 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -5,7 +5,11 @@ file(GLOB SERIALIZERS_CPP_FILES *.cpp) set(SERIALIZERS_FILES ${SERIALIZERS_H_FILES} ${SERIALIZERS_CPP_FILES}) add_library(Serializers ${SERIALIZERS_FILES}) -set_target_properties(Serializers PROPERTIES COMPILE_FLAGS "-DSERIALIZERS_EXPORTS" VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") +set_target_properties(Serializers PROPERTIES + COMPILE_FLAGS "-DSERIALIZERS_EXPORTS" + VERSION "${PROJECT_VERSION}" + SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" +) set(SERIALIZER_SCHEMA_LIBRARIES Serializers ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) if(WITH_PROJ) @@ -25,10 +29,10 @@ target_link_libraries(Serializers install(TARGETS Serializers) +# Can't use `PUBLIC_HEADER` since we need two folders. install(FILES ${SERIALIZERS_H_FILES} - DESTINATION ${INCLUDEDIR}/serializers/ + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/" ) - install(FILES ${SERIALIZERS_S_H_FILES} - DESTINATION ${INCLUDEDIR}/serializers/schema_dependent + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/schema_dependent" ) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 6da19bc586..949960e65d 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -10,16 +10,6 @@ if(POLICY CMP0167) # 3.30 find_package(Boost) to use BoostConfig instead of Find cmake_policy(SET CMP0167 OLD) endif() -include(GNUInstallDirs) - - -if(NOT INCLUDEDIR) - set(INCLUDEDIR include) -endif() -if(NOT IS_ABSOLUTE ${INCLUDEDIR}) - set(INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}) -endif() -message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") if(WIN32 AND NOT DEFINED ENV{CONDA_BUILD}) set(Boost_USE_STATIC_LIBS ON) @@ -57,6 +47,9 @@ file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp) set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES}) add_library(svgfill ${LIB_SRC_FILES}) target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 CGAL::CGAL_INTERFACE) +set_target_properties(svgfill PROPERTIES + PUBLIC_HEADER "${LIB_H_FILES}" +) add_executable(svgfill_exe src/main.cpp) target_link_libraries(svgfill_exe svgfill) @@ -74,5 +67,5 @@ endif() install(TARGETS svgfill_exe svgfill EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/svgfill" ) -install(FILES ${LIB_H_FILES} DESTINATION ${INCLUDEDIR}) From 61269136cd03a985ae3d6300767926574617a32e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 14:42:44 +0500 Subject: [PATCH 318/657] cmake - clean up a bit in non-advanced variables --- cmake/CMakeLists.txt | 3 +++ cmake/FindHDF5.cmake | 1 + cmake/FindOpenCASCADE.cmake | 2 ++ cmake/FindOpenCOLLADA.cmake | 1 + cmake/Findnlohmann_json.cmake | 2 ++ cmake/utilities.cmake | 1 + 6 files changed, 10 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 424c1c88e7..6932efcd8b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -152,6 +152,7 @@ if(CCACHE_FOUND) endif() endif() endif() +mark_as_advanced(CCACHE_FOUND) # Variable to accumulate swig definitions from various submodules. set(SWIG_DEFINES "") @@ -239,6 +240,7 @@ if (WITH_ROCKSDB) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) endif() find_package(RocksDB CONFIG REQUIRED) + mark_as_advanced(RocksDB_DIR) if(WIN32) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ${TEMP}) endif() @@ -253,6 +255,7 @@ if (WITH_ROCKSDB) # the libzstd.a along with the rocksdb library when needed and feature # detect based on rocksdb API? find_package(zstd CONFIG REQUIRED) + mark_as_advanced(zstd_DIR) message(STATUS "zstd: found at '${zstd_DIR}'.") link_libraries(zstd::libzstd_static) diff --git a/cmake/FindHDF5.cmake b/cmake/FindHDF5.cmake index ac6bf553c5..f93626093c 100644 --- a/cmake/FindHDF5.cmake +++ b/cmake/FindHDF5.cmake @@ -86,6 +86,7 @@ endif() if(NOT HDF5_INCLUDE_DIR OR NOT HDF5_LIBRARY_DIR) # First try to find it as a config. find_package(HDF5 CONFIG) + mark_as_advanced(HDF5_DIR) if(HDF5_DIR) message(STATUS "HDF5: found config at '${HDF5_DIR}'.") set(HDF5_LIBRARIES hdf5_cpp-static) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index 3976494499..f02b2559e3 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -33,8 +33,10 @@ if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) # OpenCASCADE may be built with VTK support. Try to find VTK first to avoid # CMake errors when OpenCASCADE's config references VTK targets. find_package(VTK QUIET) + mark_as_advanced(VTK_DIR) find_package(OpenCASCADE CONFIG REQUIRED) + mark_as_advanced(OpenCASCADE_DIR) message(STATUS "Found OpenCASCADE config: ${OpenCASCADE_DIR}") if(OpenCASCADE_VERSION VERSION_LESS "7.9.0") diff --git a/cmake/FindOpenCOLLADA.cmake b/cmake/FindOpenCOLLADA.cmake index 141ef98d82..404dccb35a 100644 --- a/cmake/FindOpenCOLLADA.cmake +++ b/cmake/FindOpenCOLLADA.cmake @@ -21,6 +21,7 @@ if(NOT OPENCOLLADA_INCLUDE_DIR AND NOT OPENCOLLADA_LIBRARY_DIR) # If package is found, automatically sets # OPENCOLLADA_INCLUDE_DIRS and OPENCOLLADA_LIBRARIES (list of targets, not paths). find_package(OpenCOLLADA CONFIG) + mark_as_advanced(OpenCOLLADA_DIR) if(OpenCOLLADA_DIR) message(STATUS "Found OpenCOLLADA: '${OpenCOLLADA_DIR}'.") set(OPENCOLLADA_FOUND TRUE) diff --git a/cmake/Findnlohmann_json.cmake b/cmake/Findnlohmann_json.cmake index 5f26414102..172cb4a4f5 100644 --- a/cmake/Findnlohmann_json.cmake +++ b/cmake/Findnlohmann_json.cmake @@ -11,12 +11,14 @@ UNIFY_ENVVARS_AND_CACHE(JSON_INCLUDE_DIR) if(NOT JSON_INCLUDE_DIR) find_package(nlohmann_json CONFIG) + mark_as_advanced(nlohmann_json) if(nlohmann_json_DIR) return() endif() endif() find_path(json_header_path "nlohmann/json.hpp" HINTS "${JSON_INCLUDE_DIR}") +mark_as_advanced(json_header_path) if(json_header_path) message(STATUS "JSON for Modern C++ header file found in '${json_header_path}'.") diff --git a/cmake/utilities.cmake b/cmake/utilities.cmake index 48674b1f04..3e8877c724 100644 --- a/cmake/utilities.cmake +++ b/cmake/utilities.cmake @@ -21,6 +21,7 @@ macro(UNIFY_ENVVARS_AND_CACHE VAR) if(NOT DEFINED ${VAR} AND DEFINED ENV{${VAR}} AND NOT ENV{${VAR}} STREQUAL "") set(${VAR} "$ENV{${VAR}}" CACHE STRING "${VAR}" FORCE) + mark_as_advanced(${VAR}) endif() endmacro() From 43533706a42de9af0a4764c87ec733ed3bc94786 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 15:37:34 +0500 Subject: [PATCH 319/657] examples - build IfcOpenHouse/IfcAdvancedHouse using cmake package --- .github/workflows/ci.yml | 2 ++ src/examples/CMakeLists.txt | 31 +++++++++++++++++++++++++------ src/examples/IfcAdvancedHouse.cpp | 10 +++++----- src/examples/IfcOpenHouse.cpp | 10 +++++----- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afdbc4d6fb..71fd58d84f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -210,6 +210,8 @@ jobs: cmake .. -DCMAKE_BUILD_TYPE=Release cmake --build . ./IfcParseExamples "../IfcParseExamples_test.ifc" + ./IfcOpenHouse + ./IfcAdvancedHouse - name: Test ifcopenshell-python run: | diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 00929f7269..6c49648bcf 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -27,6 +27,7 @@ if(STANDALONE_PROJECT) cmake_minimum_required(VERSION 3.21) project(IfcOpenShellExamples) + set(CMAKE_CXX_STANDARD 17) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME OFF) set(Boost_USE_MULTITHREADED ON) @@ -56,15 +57,33 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") endif() install(TARGETS IfcParseExamples) - if(NOT STANDALONE_PROJECT AND WITH_OPENCASCADE) + if(STANDALONE_PROJECT OR WITH_OPENCASCADE) add_executable(IfcOpenHouse IfcOpenHouse.cpp) - target_link_libraries(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) - set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples) - add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) - target_link_libraries(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) - set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) + add_library(IfcHouseInterface INTERFACE) + if (STANDALONE_PROJECT) + find_package(Eigen3 CONFIG REQUIRED) + find_package(CGAL CONFIG REQUIRED) + find_package(OpenCASCADE CONFIG REQUIRED) + add_library(CGAL::CGAL_INTERFACE INTERFACE IMPORTED) + target_link_libraries(CGAL::CGAL_INTERFACE INTERFACE CGAL::CGAL) + + target_include_directories(IfcHouseInterface INTERFACE "${IfcOpenShell_DIR}/../../../include") + target_include_directories(IfcHouseInterface INTERFACE ${Boost_INCLUDE_DIRS}) + target_link_libraries(IfcHouseInterface + INTERFACE ${OpenCASCADE_LIBRARIES} RocksDB::rocksdb + IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer + ) + target_compile_definitions(IfcHouseInterface INTERFACE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3 IFOPSH_WITH_ROCKSDB) + else() + target_include_directories(IfcHouseInterface INTERFACE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(IfcHouseInterface INTERFACE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) + set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples) + set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) + endif() + target_link_libraries(IfcOpenHouse PRIVATE IfcHouseInterface) + target_link_libraries(IfcAdvancedHouse PRIVATE IfcHouseInterface) install(TARGETS IfcOpenHouse IfcAdvancedHouse) endif() endif() diff --git a/src/examples/IfcAdvancedHouse.cpp b/src/examples/IfcAdvancedHouse.cpp index ad238a22fd..9b680bd79b 100644 --- a/src/examples/IfcAdvancedHouse.cpp +++ b/src/examples/IfcAdvancedHouse.cpp @@ -39,12 +39,12 @@ #include #define IfcSchema Ifc2x3 -#include "../ifcparse/macros.h" -#include "../ifcparse/Ifc2x3.h" -#include "../ifcparse/IfcBaseClass.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#include "ifcparse/macros.h" +#include "ifcparse/Ifc2x3.h" +#include "ifcparse/IfcBaseClass.h" +#include "ifcparse/IfcHierarchyHelper.h" -#include "../ifcgeom/Serialization/Serialization.h" +#include "ifcgeom/Serialization/Serialization.h" #if USE_VLD #include diff --git a/src/examples/IfcOpenHouse.cpp b/src/examples/IfcOpenHouse.cpp index accac737fb..24654adca7 100644 --- a/src/examples/IfcOpenHouse.cpp +++ b/src/examples/IfcOpenHouse.cpp @@ -36,12 +36,12 @@ #include #define IfcSchema Ifc2x3 -#include "../ifcparse/macros.h" -#include "../ifcparse/Ifc2x3.h" -#include "../ifcparse/IfcBaseClass.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#include "ifcparse/macros.h" +#include "ifcparse/Ifc2x3.h" +#include "ifcparse/IfcBaseClass.h" +#include "ifcparse/IfcHierarchyHelper.h" -#include "../ifcgeom/Serialization/Serialization.h" +#include "ifcgeom/Serialization/Serialization.h" #if USE_VLD #include From 4d34e4296c2d56b644271ca2b934fe78b76dc97e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 16:08:43 +0500 Subject: [PATCH 320/657] examples - build IfcAlignment using cmake package --- .github/workflows/ci.yml | 2 ++ src/examples/CMakeLists.txt | 24 ++++++++++++++++++------ src/examples/IfcAlignment.cpp | 4 ++-- src/examples/IfcSimplifiedAlignment.cpp | 4 ++-- src/examples/README.md | 9 ++++++++- 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 71fd58d84f..ce1534d439 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -212,6 +212,8 @@ jobs: ./IfcParseExamples "../IfcParseExamples_test.ifc" ./IfcOpenHouse ./IfcAdvancedHouse + ./IfcAlignment + ./IfcSimplifiedAlignment - name: Test ifcopenshell-python run: | diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 6c49648bcf..8e421b13b6 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -88,14 +88,26 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") endif() endif() -if(NOT STANDALONE_PROJECT AND SCHEMA_VERSIONS MATCHES "4x3_add2") +if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "4x3_add2") add_executable(IfcAlignment IfcAlignment.cpp) - target_link_libraries(IfcAlignment ${IFCOPENSHELL_LIBRARIES}) - set_target_properties(IfcAlignment PROPERTIES FOLDER Examples) - add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp) - target_link_libraries(IfcSimplifiedAlignment ${IFCOPENSHELL_LIBRARIES}) - set_target_properties(IfcSimplifiedAlignment PROPERTIES FOLDER Examples) + add_library(IfcAlignmentInterface INTERFACE) + + if(STANDALONE_PROJECT) + target_include_directories(IfcAlignmentInterface INTERFACE "${IfcOpenShell_DIR}/../../../include") + target_include_directories(IfcAlignmentInterface INTERFACE ${Boost_INCLUDE_DIRS}) + target_compile_definitions(IfcAlignmentInterface INTERFACE HAS_SCHEMA_4x3_add2 IFOPSH_WITH_ROCKSDB) + target_link_libraries(IfcAlignment PRIVATE IfcOpenShell::IfcParse) + target_link_libraries(IfcSimplifiedAlignment PRIVATE IfcOpenShell::IfcParse) + else() + target_include_directories(IfcAlignmentInterface INTERFACE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(IfcAlignmentInterface INTERFACE ${IFCOPENSHELL_LIBRARIES}) + set_target_properties(IfcAlignment PROPERTIES FOLDER Examples) + set_target_properties(IfcSimplifiedAlignment PROPERTIES FOLDER Examples) + endif() + + target_link_libraries(IfcAlignment PRIVATE IfcAlignmentInterface) + target_link_libraries(IfcSimplifiedAlignment PRIVATE IfcAlignmentInterface) install(TARGETS IfcAlignment IfcSimplifiedAlignment) endif() diff --git a/src/examples/IfcAlignment.cpp b/src/examples/IfcAlignment.cpp index 450bb8e5cb..d4e3ed0348 100644 --- a/src/examples/IfcAlignment.cpp +++ b/src/examples/IfcAlignment.cpp @@ -30,8 +30,8 @@ // Disable warnings coming from IfcOpenShell #pragma warning(disable : 4018 4267 4250 4984 4985) -#include "../ifcparse/Ifc4x3_add2.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#include "ifcparse/Ifc4x3_add2.h" +#include "ifcparse/IfcHierarchyHelper.h" #include #include diff --git a/src/examples/IfcSimplifiedAlignment.cpp b/src/examples/IfcSimplifiedAlignment.cpp index 4f4086f85d..bde0e59b61 100644 --- a/src/examples/IfcSimplifiedAlignment.cpp +++ b/src/examples/IfcSimplifiedAlignment.cpp @@ -30,8 +30,8 @@ // Disable warnings coming from IfcOpenShell #pragma warning(disable : 4018 4267 4250 4984 4985) -#include "../ifcparse/Ifc4x3_add2.h" -#include "../ifcparse/IfcAlignmentHelper.h" +#include "ifcparse/Ifc4x3_add2.h" +#include "ifcparse/IfcAlignmentHelper.h" #include diff --git a/src/examples/README.md b/src/examples/README.md index fe309ed653..e2eb238b23 100644 --- a/src/examples/README.md +++ b/src/examples/README.md @@ -1,5 +1,5 @@ -Example of building IfcParseExamples outside of the IfcOpenShell build tree. +Example of building examples outside of the IfcOpenShell build tree. ```powershell $IFCOPENSHELL_ROOT="L:\Projects\Github\IfcOpenShell" @@ -9,6 +9,13 @@ $PREFIX_PATH+=";$IFCOPENSHELL_ROOT\_deps-vs2022-x64-installed\rocksdb" $PREFIX_PATH+=";$IFCOPENSHELL_ROOT\_deps-vs2022-x64-installed\zstd" $PREFIX_PATH+=";L:\Software\usr\libxml2" +# + Support for IfcHouse and IfcAlignment examples. +$PREFIX_PATH+=";L:\Software\usr\eigen-3.3.9" +$PREFIX_PATH+=";L:\Projects\Github\IfcOpenShell\_deps-vs2022-x64-installed\cgal" +$PREFIX_PATH+=";L:\Projects\Github\IfcOpenShell\_deps-vs2022-x64-installed\mpir" +$PREFIX_PATH+=";L:\Projects\Github\IfcOpenShell\_deps-vs2022-x64-installed\mpfr" +$PREFIX_PATH+=";L:\Projects\Github\IfcOpenShell\_deps-vs2022-x64-installed\opencascade-7.8.1-new-layout" + cmake .. -G Ninja -DCMAKE_PREFIX_PATH="$PREFIX_PATH" -DCMAKE_BUILD_TYPE=Release ninja -v ./IfcParseExamples.exe "../IfcParseExamples_test.ifc" From 01f97a5860cca13200a9c9c4fc73e7baa67f12e4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 17:04:46 +0500 Subject: [PATCH 321/657] IfcParse - export include path --- src/examples/CMakeLists.txt | 3 --- src/ifcparse/CMakeLists.txt | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 8e421b13b6..765b93cedd 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -43,7 +43,6 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") add_executable(IfcParseExamples IfcParseExamples.cpp) if(STANDALONE_PROJECT) - target_include_directories(IfcParseExamples PRIVATE "${IfcOpenShell_DIR}/../../../include") target_include_directories(IfcParseExamples PRIVATE ${Boost_INCLUDE_DIRS}) target_link_libraries(IfcParseExamples ${Boost_LIBRARIES}) target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse) @@ -69,7 +68,6 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") add_library(CGAL::CGAL_INTERFACE INTERFACE IMPORTED) target_link_libraries(CGAL::CGAL_INTERFACE INTERFACE CGAL::CGAL) - target_include_directories(IfcHouseInterface INTERFACE "${IfcOpenShell_DIR}/../../../include") target_include_directories(IfcHouseInterface INTERFACE ${Boost_INCLUDE_DIRS}) target_link_libraries(IfcHouseInterface INTERFACE ${OpenCASCADE_LIBRARIES} RocksDB::rocksdb @@ -94,7 +92,6 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "4x3_add2") add_library(IfcAlignmentInterface INTERFACE) if(STANDALONE_PROJECT) - target_include_directories(IfcAlignmentInterface INTERFACE "${IfcOpenShell_DIR}/../../../include") target_include_directories(IfcAlignmentInterface INTERFACE ${Boost_INCLUDE_DIRS}) target_compile_definitions(IfcAlignmentInterface INTERFACE HAS_SCHEMA_4x3_add2 IFOPSH_WITH_ROCKSDB) target_link_libraries(IfcAlignment PRIVATE IfcOpenShell::IfcParse) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index 5f29bbd812..ec27ba85c9 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -31,6 +31,7 @@ endforeach() set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES}) add_library(IfcParse ${IFCPARSE_FILES}) +target_include_directories(IfcParse PUBLIC $) set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS From 8f44f6054627df6e349174bc400d15ab3de2219a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 17:09:06 +0500 Subject: [PATCH 322/657] cmake - remove unused `FOPSH_WITH_ROCKSDB_ZSTD` definition --- cmake/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 6932efcd8b..e7ec12ecae 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -258,9 +258,6 @@ if (WITH_ROCKSDB) mark_as_advanced(zstd_DIR) message(STATUS "zstd: found at '${zstd_DIR}'.") link_libraries(zstd::libzstd_static) - - add_definitions(-DIFOPSH_WITH_ROCKSDB_ZSTD) - set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB_ZSTD) endif() endif() From d303acd660a64dd4067ede4c26903f776849a777 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 17:35:11 +0500 Subject: [PATCH 323/657] cmake export - propagate `IFOPSH_WITH_ROCKSDB` to cmake config Apparently, cmake isn't exporting definitions defined globally `add_definitions`, so creating interface target to combine rocksdb and our definitions. --- cmake/CMakeLists.txt | 12 +++++++++--- src/examples/CMakeLists.txt | 6 +++--- src/ifcparse/CMakeLists.txt | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e7ec12ecae..43aca1dbe2 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -230,6 +230,7 @@ if(USD_SUPPORT) set(USD_LIBRARIES pxr::USD) endif(USD_SUPPORT) +set(ROCKSDB_LIBRARIES "") if (WITH_ROCKSDB) # Temporaily mess with CMAKE_FIND_PACKAGE_PREFER_CONFIG to help RocksDB # find it's zstd dependency on Windows. @@ -246,9 +247,11 @@ if (WITH_ROCKSDB) endif() message(STATUS "RocksDB: found at '${RocksDB_DIR}'.") - add_definitions(-DIFOPSH_WITH_ROCKSDB) + add_library(IFCOPENSHELL_RocksDB INTERFACE) + set(ROCKSDB_LIBRARIES "IFCOPENSHELL_RocksDB") + target_compile_definitions(IFCOPENSHELL_RocksDB INTERFACE IFOPSH_WITH_ROCKSDB) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB) - link_libraries($,RocksDB::rocksdb-shared,RocksDB::rocksdb>) + target_link_libraries(IFCOPENSHELL_RocksDB INTERFACE $,RocksDB::rocksdb-shared,RocksDB::rocksdb>) if (WITH_ZSTD) # @todo do we actually need the zstd include dir or rather just pass @@ -257,8 +260,11 @@ if (WITH_ROCKSDB) find_package(zstd CONFIG REQUIRED) mark_as_advanced(zstd_DIR) message(STATUS "zstd: found at '${zstd_DIR}'.") - link_libraries(zstd::libzstd_static) + target_link_libraries(IFCOPENSHELL_RocksDB INTERFACE zstd::libzstd_static) endif() + + install(TARGETS IFCOPENSHELL_RocksDB + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) endif() # Find Boost: On win32 the (hardcoded) default is to use static libraries and diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 765b93cedd..83b546e59b 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -47,7 +47,7 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") target_link_libraries(IfcParseExamples ${Boost_LIBRARIES}) target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse) target_compile_features(IfcParseExamples PRIVATE cxx_std_17) - target_compile_definitions(IfcParseExamples PRIVATE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3 IFOPSH_WITH_ROCKSDB) + target_compile_definitions(IfcParseExamples PRIVATE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3) else() target_include_directories(IfcParseExamples PRIVATE "${CMAKE_SOURCE_DIR}/../src") target_link_libraries(IfcParseExamples IfcParse) @@ -73,7 +73,7 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") INTERFACE ${OpenCASCADE_LIBRARIES} RocksDB::rocksdb IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer ) - target_compile_definitions(IfcHouseInterface INTERFACE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3 IFOPSH_WITH_ROCKSDB) + target_compile_definitions(IfcHouseInterface INTERFACE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3) else() target_include_directories(IfcHouseInterface INTERFACE "${CMAKE_SOURCE_DIR}/../src") target_link_libraries(IfcHouseInterface INTERFACE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) @@ -93,7 +93,7 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "4x3_add2") if(STANDALONE_PROJECT) target_include_directories(IfcAlignmentInterface INTERFACE ${Boost_INCLUDE_DIRS}) - target_compile_definitions(IfcAlignmentInterface INTERFACE HAS_SCHEMA_4x3_add2 IFOPSH_WITH_ROCKSDB) + target_compile_definitions(IfcAlignmentInterface INTERFACE HAS_SCHEMA_4x3_add2) target_link_libraries(IfcAlignment PRIVATE IfcOpenShell::IfcParse) target_link_libraries(IfcSimplifiedAlignment PRIVATE IfcOpenShell::IfcParse) else() diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index ec27ba85c9..d78b4bd5b5 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -54,6 +54,7 @@ else() target_link_libraries(IfcParse ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES}) endif() +target_link_libraries(IfcParse ${ROCKSDB_LIBRARIES}) install(TARGETS IfcParse EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} From d5210e0d7567f808ab430fcc2829a07dbe48d589 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 18:25:59 +0500 Subject: [PATCH 324/657] cmake export - propagate `HAS_SCHEMA` definitions to exported `IfcParse` target --- cmake/CMakeLists.txt | 5 +++-- src/examples/CMakeLists.txt | 3 --- src/ifcparse/CMakeLists.txt | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 43aca1dbe2..f1c7e50118 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -464,12 +464,13 @@ endif() message(STATUS "IFC SCHEMA_VERSIONS that will be used for the build: ${SCHEMA_VERSIONS}.") +set(SCHEMA_DEFINITIONS "") foreach(schema ${SCHEMA_VERSIONS}) - add_definitions(-DHAS_SCHEMA_${schema}) + list(APPEND SCHEMA_DEFINITIONS "-DHAS_SCHEMA_${schema}") endforeach() string(REPLACE ";" ")(" schema_version_seq "(${SCHEMA_VERSIONS})") -add_definitions(-DSCHEMA_SEQ=${schema_version_seq}) +list(APPEND SCHEMA_DEFINITIONS "-DSCHEMA_SEQ=${schema_version_seq}") if(COMPILE_SCHEMA) # @todo, this appears to be untested at the moment diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 83b546e59b..c50c899ea9 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -47,7 +47,6 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") target_link_libraries(IfcParseExamples ${Boost_LIBRARIES}) target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse) target_compile_features(IfcParseExamples PRIVATE cxx_std_17) - target_compile_definitions(IfcParseExamples PRIVATE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3) else() target_include_directories(IfcParseExamples PRIVATE "${CMAKE_SOURCE_DIR}/../src") target_link_libraries(IfcParseExamples IfcParse) @@ -73,7 +72,6 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") INTERFACE ${OpenCASCADE_LIBRARIES} RocksDB::rocksdb IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer ) - target_compile_definitions(IfcHouseInterface INTERFACE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3) else() target_include_directories(IfcHouseInterface INTERFACE "${CMAKE_SOURCE_DIR}/../src") target_link_libraries(IfcHouseInterface INTERFACE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) @@ -93,7 +91,6 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "4x3_add2") if(STANDALONE_PROJECT) target_include_directories(IfcAlignmentInterface INTERFACE ${Boost_INCLUDE_DIRS}) - target_compile_definitions(IfcAlignmentInterface INTERFACE HAS_SCHEMA_4x3_add2) target_link_libraries(IfcAlignment PRIVATE IfcOpenShell::IfcParse) target_link_libraries(IfcSimplifiedAlignment PRIVATE IfcOpenShell::IfcParse) else() diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index d78b4bd5b5..5da3182406 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -31,6 +31,7 @@ endforeach() set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES}) add_library(IfcParse ${IFCPARSE_FILES}) +target_compile_definitions(IfcParse PUBLIC ${SCHEMA_DEFINITIONS}) target_include_directories(IfcParse PUBLIC $) set_target_properties(IfcParse PROPERTIES From 1d7d0f6d05607d319ca9f605247ece96a3a7f213 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 18:32:47 +0500 Subject: [PATCH 325/657] cmake export - export some variables to inspect installation --- cmake/IfcOpenShellConfig.cmake.in | 6 ++++++ src/examples/CMakeLists.txt | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cmake/IfcOpenShellConfig.cmake.in b/cmake/IfcOpenShellConfig.cmake.in index 156aaa37da..afdfe838bc 100644 --- a/cmake/IfcOpenShellConfig.cmake.in +++ b/cmake/IfcOpenShellConfig.cmake.in @@ -1,5 +1,11 @@ @PACKAGE_INIT@ +# Variable to inspect installed schema versions. +set(IFCOPENSHELL_SCHEMA_VERSIONS @SCHEMA_VERSIONS@) + +set(IFCOPENSHELL_WITH_OPENCASCADE @WITH_OPENCASCADE@) + + include("${CMAKE_CURRENT_LIST_DIR}/@CONFIG_TARGETS_FILENAME@") check_required_components("@PROJECT_NAME@") diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index c50c899ea9..37d595f94b 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -37,9 +37,11 @@ if(STANDALONE_PROJECT) find_package(RocksDB CONFIG REQUIRED) find_package(LibXml2 CONFIG REQUIRED) find_package(IfcOpenShell CONFIG REQUIRED) + set(SCHEMA_VERSIONS ${IFCOPENSHELL_SCHEMA_VERSIONS}) + set(WITH_OPENCASCADE ${IFCOPENSHELL_WITH_OPENCASCADE}) endif() -if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") +if(SCHEMA_VERSIONS MATCHES "2x3") add_executable(IfcParseExamples IfcParseExamples.cpp) if(STANDALONE_PROJECT) @@ -55,7 +57,7 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") endif() install(TARGETS IfcParseExamples) - if(STANDALONE_PROJECT OR WITH_OPENCASCADE) + if(WITH_OPENCASCADE) add_executable(IfcOpenHouse IfcOpenHouse.cpp) add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) add_library(IfcHouseInterface INTERFACE) @@ -84,7 +86,7 @@ if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3") endif() endif() -if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "4x3_add2") +if(SCHEMA_VERSIONS MATCHES "4x3_add2") add_executable(IfcAlignment IfcAlignment.cpp) add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp) add_library(IfcAlignmentInterface INTERFACE) From 20812ecd804cfd01de53df79bc7668f6b7b8fc5b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 18:37:56 +0500 Subject: [PATCH 326/657] examples - don't provide boost components explicitly Since they're already included to `IfcParse`. --- src/examples/CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 37d595f94b..a0990b5c8c 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -45,8 +45,6 @@ if(SCHEMA_VERSIONS MATCHES "2x3") add_executable(IfcParseExamples IfcParseExamples.cpp) if(STANDALONE_PROJECT) - target_include_directories(IfcParseExamples PRIVATE ${Boost_INCLUDE_DIRS}) - target_link_libraries(IfcParseExamples ${Boost_LIBRARIES}) target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse) target_compile_features(IfcParseExamples PRIVATE cxx_std_17) else() @@ -69,7 +67,6 @@ if(SCHEMA_VERSIONS MATCHES "2x3") add_library(CGAL::CGAL_INTERFACE INTERFACE IMPORTED) target_link_libraries(CGAL::CGAL_INTERFACE INTERFACE CGAL::CGAL) - target_include_directories(IfcHouseInterface INTERFACE ${Boost_INCLUDE_DIRS}) target_link_libraries(IfcHouseInterface INTERFACE ${OpenCASCADE_LIBRARIES} RocksDB::rocksdb IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer @@ -92,7 +89,6 @@ if(SCHEMA_VERSIONS MATCHES "4x3_add2") add_library(IfcAlignmentInterface INTERFACE) if(STANDALONE_PROJECT) - target_include_directories(IfcAlignmentInterface INTERFACE ${Boost_INCLUDE_DIRS}) target_link_libraries(IfcAlignment PRIVATE IfcOpenShell::IfcParse) target_link_libraries(IfcSimplifiedAlignment PRIVATE IfcOpenShell::IfcParse) else() From b237fac4b8c7c09e37305cf88354d99ec16e8029 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 18:45:29 +0500 Subject: [PATCH 327/657] examples - don't provide cxx_std_17 to targets explicitly As it's already defined for the entire project. --- src/examples/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index a0990b5c8c..c02c9227c0 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -46,12 +46,10 @@ if(SCHEMA_VERSIONS MATCHES "2x3") if(STANDALONE_PROJECT) target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse) - target_compile_features(IfcParseExamples PRIVATE cxx_std_17) else() target_include_directories(IfcParseExamples PRIVATE "${CMAKE_SOURCE_DIR}/../src") target_link_libraries(IfcParseExamples IfcParse) set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples) - target_compile_features(IfcParseExamples PRIVATE cxx_std_17) endif() install(TARGETS IfcParseExamples) From dd683d11152a1dcf8e5acaaf90eb0d85f6448915 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 18:58:04 +0500 Subject: [PATCH 328/657] examples - further simplify linking --- cmake/CMakeLists.txt | 2 +- cmake/FindCGAL.cmake | 14 ++++++++------ src/examples/CMakeLists.txt | 18 ++++++------------ src/ifcgeom/kernels/CMakeLists.txt | 4 ++-- src/svgfill/CMakeLists.txt | 2 +- 5 files changed, 18 insertions(+), 22 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f1c7e50118..f1ae9f66bf 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -319,7 +319,7 @@ endif() # Otherwise it will find components needed for CGAL and we might some libraries. if(WITH_CGAL) find_package(CGAL REQUIRED) - set(CGAL_LIBRARIES CGAL::CGAL_INTERFACE) + set(CGAL_LIBRARIES IFCOPENSHELL_CGAL) list(APPEND GEOMETRY_KERNELS cgal) endif() diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index 29944ae867..4485be3e6b 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -10,10 +10,10 @@ # Input variables could also be provided as environment variables. # # Output targets: -# - `CGAL::CGAL_INTERFACE` +# - `IFCOPENSHELL_CGAL` # -if(TARGET CGAL::CGAL_INTERFACE) +if(TARGET IFCOPENSHELL_CGAL) return() endif() @@ -59,9 +59,11 @@ else() message(STATUS "CGAL: found config at '${CGAL_DIR}'.") endif() -# Adding another `CGAL_INTERFACE` target, because we want to add compile definitions to it, +# Adding another `IFCOPENSHELL_CGAL` target, because we want to add compile definitions to it, # but in `CGALconfig.cmake` `CGAL::CGAL` is an alias, so you can't add properties to it. -add_library(CGAL::CGAL_INTERFACE INTERFACE IMPORTED) -target_link_libraries(CGAL::CGAL_INTERFACE INTERFACE CGAL::CGAL) -target_compile_definitions(CGAL::CGAL_INTERFACE INTERFACE IFOPSH_WITH_CGAL) +add_library(IFCOPENSHELL_CGAL INTERFACE) +target_link_libraries(IFCOPENSHELL_CGAL INTERFACE CGAL::CGAL) +target_compile_definitions(IFCOPENSHELL_CGAL INTERFACE IFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) +install(TARGETS IFCOPENSHELL_CGAL + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index c02c9227c0..9133b77b7c 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -39,6 +39,8 @@ if(STANDALONE_PROJECT) find_package(IfcOpenShell CONFIG REQUIRED) set(SCHEMA_VERSIONS ${IFCOPENSHELL_SCHEMA_VERSIONS}) set(WITH_OPENCASCADE ${IFCOPENSHELL_WITH_OPENCASCADE}) +else() + include_directories("${CMAKE_SOURCE_DIR}/../src") endif() if(SCHEMA_VERSIONS MATCHES "2x3") @@ -62,16 +64,10 @@ if(SCHEMA_VERSIONS MATCHES "2x3") find_package(Eigen3 CONFIG REQUIRED) find_package(CGAL CONFIG REQUIRED) find_package(OpenCASCADE CONFIG REQUIRED) - add_library(CGAL::CGAL_INTERFACE INTERFACE IMPORTED) - target_link_libraries(CGAL::CGAL_INTERFACE INTERFACE CGAL::CGAL) - target_link_libraries(IfcHouseInterface - INTERFACE ${OpenCASCADE_LIBRARIES} RocksDB::rocksdb - IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer - ) + target_link_libraries(IfcHouseInterface INTERFACE IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer) else() - target_include_directories(IfcHouseInterface INTERFACE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(IfcHouseInterface INTERFACE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES}) + target_link_libraries(IfcHouseInterface INTERFACE IfcParse geometry_serializer) set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples) set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) endif() @@ -87,11 +83,9 @@ if(SCHEMA_VERSIONS MATCHES "4x3_add2") add_library(IfcAlignmentInterface INTERFACE) if(STANDALONE_PROJECT) - target_link_libraries(IfcAlignment PRIVATE IfcOpenShell::IfcParse) - target_link_libraries(IfcSimplifiedAlignment PRIVATE IfcOpenShell::IfcParse) + target_link_libraries(IfcAlignmentInterface INTERFACE IfcOpenShell::IfcParse) else() - target_include_directories(IfcAlignmentInterface INTERFACE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(IfcAlignmentInterface INTERFACE ${IFCOPENSHELL_LIBRARIES}) + target_link_libraries(IfcAlignmentInterface INTERFACE IfcParse) set_target_properties(IfcAlignment PROPERTIES FOLDER Examples) set_target_properties(IfcSimplifiedAlignment PROPERTIES FOLDER Examples) endif() diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 604db5ce9b..b75ec96c47 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -22,7 +22,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) if(${kernel} STREQUAL "cgal") find_package(CGAL REQUIRED) - target_link_libraries(${KERNEL_TARGET} CGAL::CGAL_INTERFACE) + target_link_libraries(${KERNEL_TARGET} IFCOPENSHELL_CGAL) set_property(TARGET ${KERNEL_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple") @@ -30,7 +30,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) - target_link_libraries(${KERNEL_TARGET_SIMPLE} CGAL::CGAL_INTERFACE) + target_link_libraries(${KERNEL_TARGET_SIMPLE} IFCOPENSHELL_CGAL) install(TARGETS ${KERNEL_TARGET_SIMPLE} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} ) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 949960e65d..7caf67d6d7 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -46,7 +46,7 @@ file(GLOB LIB_H_FILES src/*.h) file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp) set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES}) add_library(svgfill ${LIB_SRC_FILES}) -target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 CGAL::CGAL_INTERFACE) +target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 IFCOPENSHELL_CGAL) set_target_properties(svgfill PROPERTIES PUBLIC_HEADER "${LIB_H_FILES}" ) From 31740784def1ffff3e71e25f0ada11cff1b14a5d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 20:41:18 +0500 Subject: [PATCH 329/657] examples - disable ifcopenhouse build temporarily to fix CI --- src/examples/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 9133b77b7c..fdf5608328 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -55,7 +55,8 @@ if(SCHEMA_VERSIONS MATCHES "2x3") endif() install(TARGETS IfcParseExamples) - if(WITH_OPENCASCADE) + # TODO: enable after figuring out where to get get OCCT config for CI. + if(WITH_OPENCASCADE AND NOT STANDALONE_PROJECT) add_executable(IfcOpenHouse IfcOpenHouse.cpp) add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) add_library(IfcHouseInterface INTERFACE) From 276c9c9833bb43957564fcd2fbbb7c54a3b42b2f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 12 Dec 2025 20:48:00 +0500 Subject: [PATCH 330/657] ci - also temp disable ifcopenhouse executables execution --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce1534d439..d488c6764b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -210,8 +210,8 @@ jobs: cmake .. -DCMAKE_BUILD_TYPE=Release cmake --build . ./IfcParseExamples "../IfcParseExamples_test.ifc" - ./IfcOpenHouse - ./IfcAdvancedHouse + # ./IfcOpenHouse + # ./IfcAdvancedHouse ./IfcAlignment ./IfcSimplifiedAlignment From a2a5780d59df97bfe31fdd41947b66253b65dcc3 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 13 Dec 2025 09:37:56 -0600 Subject: [PATCH 331/657] Fix #6392: when duplicating a window/door/etc, the associated IfcOpenElement duplicates as well. Also when `bim.append_library_element` it copies the IfcOpenElement, as well. --- src/bonsai/bonsai/bim/module/model/opening.py | 137 +++++++++++++++--- .../bonsai/bim/module/project/operator.py | 52 +++++++ src/bonsai/bonsai/tool/root.py | 41 ++++-- 3 files changed, 199 insertions(+), 31 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index 958716954b..d028425fb2 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -151,11 +151,29 @@ class FilledOpeningGenerator: existing_opening_occurrence, "Model", "Body", "MODEL_VIEW" ) assert representation - representation = ifcopenshell.util.representation.resolve_representation(representation) + + # Check if mapped representation - preserve it + if (representation.RepresentationType == 'MappedRepresentation' and + len(representation.Items) == 1 and + representation.Items[0].is_a("IfcMappedItem")): + source_rep = representation.Items[0].MappingSource.MappedRepresentation + representation = ifcopenshell.util.element.copy_deep( + tool.Ifc.get(), + source_rep, + exclude=["IfcGeometricRepresentationContext"] + ) + else: + representation = ifcopenshell.util.representation.resolve_representation(representation) else: - representation = self.generate_opening_from_filling( - filling, filling_obj, opening_thickness_si=opening_thickness_si - ) + # Check for library template before generating from filling + template_rep = self.get_opening_template_from_type(filling) + + if template_rep: + representation = template_rep + else: + representation = self.generate_opening_from_filling( + filling, filling_obj, opening_thickness_si=opening_thickness_si + ) mapped_representation = ifcopenshell.api.geometry.map_representation( tool.Ifc.get(), representation=representation @@ -204,38 +222,85 @@ class FilledOpeningGenerator: voided_element = opening.VoidsElements[0].RelatingBuildingElement opening_rep = ifcopenshell.util.representation.get_representation(opening, "Model", "Body", "MODEL_VIEW") + + # ALWAYS preserve the existing opening representation (Tessellation, SweptSolid, etc.) + preserved_representation = None + if opening_rep: + if (opening_rep.RepresentationType == 'MappedRepresentation' and + len(opening_rep.Items) == 1 and + opening_rep.Items[0].is_a("IfcMappedItem")): + # For mapped representations, copy the underlying representation + preserved_representation = ifcopenshell.util.element.copy_deep( + tool.Ifc.get(), + opening_rep.Items[0].MappingSource.MappedRepresentation, + exclude=["IfcGeometricRepresentationContext"] + ) + else: + # For direct representations (non-mapped), copy them too + preserved_representation = ifcopenshell.util.element.copy_deep( + tool.Ifc.get(), + opening_rep, + exclude=["IfcGeometricRepresentationContext"] + ) + ifcopenshell.api.geometry.unassign_representation(tool.Ifc.get(), product=opening, representation=opening_rep) ifcopenshell.api.geometry.remove_representation(tool.Ifc.get(), representation=opening_rep) existing_opening_occurrence = self.get_existing_opening_occurrence_if_any(filling) - + + # Priority order for choosing representation: + # 1. Existing occurrence with Tessellation (best quality) + # 2. Library template with Tessellation + # 3. Preserved representation from old opening (maintain user's work) + # 4. Generate from filling (last resort) + + representation_to_use = None + if existing_opening_occurrence: representation = ifcopenshell.util.representation.get_representation( existing_opening_occurrence, "Model", "Body", "MODEL_VIEW" ) - representation = ifcopenshell.util.representation.resolve_representation(representation) - mapped_representation = ifcopenshell.api.geometry.map_representation( - tool.Ifc.get(), representation=representation - ) - ifcopenshell.api.geometry.assign_representation( - tool.Ifc.get(), product=opening, representation=mapped_representation - ) - else: + + if (representation and + representation.RepresentationType == 'MappedRepresentation' and + len(representation.Items) == 1 and + representation.Items[0].is_a("IfcMappedItem")): + source_rep = representation.Items[0].MappingSource.MappedRepresentation + # Prefer Tessellation from existing occurrence over preserved representation + if source_rep.RepresentationType == 'Tessellation': + representation_to_use = ifcopenshell.util.element.copy_deep( + tool.Ifc.get(), + source_rep, + exclude=["IfcGeometricRepresentationContext"] + ) + else: + representation_to_use = ifcopenshell.util.representation.resolve_representation(representation) + + if not representation_to_use: + template_rep = self.get_opening_template_from_type(filling) + if template_rep and template_rep.RepresentationType == 'Tessellation': + representation_to_use = template_rep + + if not representation_to_use and preserved_representation: + representation_to_use = preserved_representation + + if not representation_to_use: opening_obj = tool.Ifc.get_object(opening) if opening_obj: tool.Ifc.unlink(element=opening) tool.Blender.remove_data_blocks([opening_obj], remove_unused_data=True) filling_obj = tool.Ifc.get_object(filling) - representation = self.generate_opening_from_filling(filling, filling_obj) - mapped_representation = ifcopenshell.api.geometry.map_representation( - tool.Ifc.get(), representation=representation - ) - ifcopenshell.api.geometry.assign_representation( - tool.Ifc.get(), product=opening, representation=mapped_representation - ) + representation_to_use = self.generate_opening_from_filling(filling, filling_obj) - # update voided object representation or all it's parts if it's an aggregate + mapped_representation = ifcopenshell.api.geometry.map_representation( + tool.Ifc.get(), representation=representation_to_use + ) + ifcopenshell.api.geometry.assign_representation( + tool.Ifc.get(), product=opening, representation=mapped_representation + ) + + # update voided object representation... voided_elements = ifcopenshell.util.element.get_parts(voided_element) or [voided_element] for voided_element in voided_elements: voided_obj = tool.Ifc.get_object(voided_element) @@ -249,6 +314,36 @@ class FilledOpeningGenerator: representation=representation, ) + def get_opening_template_from_type(self, filling: ifcopenshell.entity_instance) -> Union[ifcopenshell.entity_instance, None]: + """ + Check if the filling's type has a stored opening template from library import. + """ + element_type = ifcopenshell.util.element.get_type(filling) + + if not element_type: + return None + + desc = element_type.Description + + if not desc or "||BonsaiOpeningTemplate:" not in desc: + return None + + # Extract template ID + marker = desc.split("||BonsaiOpeningTemplate:")[-1] + template_id = int(marker.split("||")[0]) + + try: + template_rep = tool.Ifc.get().by_id(template_id) + # Make a copy so we don't reuse the same representation instance + copied = ifcopenshell.util.element.copy_deep( + tool.Ifc.get(), + template_rep, + exclude=["IfcGeometricRepresentationContext"] + ) + return copied + except: + return None + def generate_opening_from_filling( self, filling: ifcopenshell.entity_instance, diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 2f5b9c906e..0650cda238 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -611,6 +611,8 @@ class AppendLibraryElement(bpy.types.Operator, tool.Ifc.Operator): if not element: return {"FINISHED"} if element.is_a("IfcTypeProduct"): + # Store opening template from library if it exists + self.store_opening_template_from_library(element, library_file) self.import_type_from_ifc(element, context) elif element.is_a("IfcProduct"): # NOTE: Non-types are not exposed in UI directly @@ -712,6 +714,56 @@ class AppendLibraryElement(bpy.types.Operator, tool.Ifc.Operator): ifc_importer.create_style(element) + def store_opening_template_from_library( + self, + element: ifcopenshell.entity_instance, + library_file: ifcopenshell.file + ) -> None: + """ + Find an opening representation in the library and copy it to the current file + as a template. Store the template ID on the type for later retrieval. + """ + try: + library_element = library_file.by_guid(element.GlobalId) + except: + return + + # Find occurrences with openings in the library + library_occurrences = ifcopenshell.util.element.get_types(library_element) + + for occurrence in library_occurrences: + if not getattr(occurrence, "FillsVoids", None): + continue + + library_opening = occurrence.FillsVoids[0].RelatingOpeningElement + library_opening_rep = ifcopenshell.util.representation.get_representation( + library_opening, "Model", "Body", "MODEL_VIEW" + ) + + if not library_opening_rep: + continue + + # Check if mapped representation + if (library_opening_rep.RepresentationType == 'MappedRepresentation' and + len(library_opening_rep.Items) == 1 and + library_opening_rep.Items[0].is_a("IfcMappedItem")): + + mapped_rep = library_opening_rep.Items[0].MappingSource.MappedRepresentation + + # Store ALL representation types (Tessellation, SweptSolid, etc.) + template_rep = ifcopenshell.util.element.copy_deep( + self.file, + mapped_rep, + exclude=["IfcGeometricRepresentationContext"] + ) + + # Store reference in type's Description + current_desc = element.Description or "" + element.Description = f"{current_desc}||BonsaiOpeningTemplate:{template_rep.id()}" + return + break + + class EditProjectLibrary(bpy.types.Operator): bl_idname = "bim.edit_project_library" bl_label = "Edit Project Library" diff --git a/src/bonsai/bonsai/tool/root.py b/src/bonsai/bonsai/tool/root.py index 22e8b42d81..109af267d6 100644 --- a/src/bonsai/bonsai/tool/root.py +++ b/src/bonsai/bonsai/tool/root.py @@ -91,16 +91,37 @@ class Root(bonsai.core.tool.Root): elif dest.is_a("IfcTypeProduct"): if not source.RepresentationMaps: return copied_entities - dest.RepresentationMaps = [ - ifcopenshell.util.element.copy_deep( - tool.Ifc.get(), - m, - exclude=["IfcGeometricRepresentationContext"], - exclude_callback=exclude_callback, - copied_entities=copied_entities, - ) - for m in source.RepresentationMaps - ] + + # Copy representation maps while preserving mapped representation structures + new_maps = [] + for i, rep_map in enumerate(source.RepresentationMaps): + source_rep = rep_map.MappedRepresentation + + + # Copy the map itself + new_map = ifcopenshell.util.element.copy(tool.Ifc.get(), rep_map) + + # Handle the mapped representation - preserve mapping structure if present + if (source_rep.RepresentationType == 'MappedRepresentation' and + len(source_rep.Items) == 1 and + source_rep.Items[0].is_a("IfcMappedItem")): + # This is a mapped representation - preserve the structure + new_rep = ifcopenshell.util.element.copy(tool.Ifc.get(), source_rep) + new_rep.Items = [ifcopenshell.util.element.copy(tool.Ifc.get(), item) for item in source_rep.Items] + new_map.MappedRepresentation = new_rep + else: + # Not a mapped representation - use copy_deep as before + new_map.MappedRepresentation = ifcopenshell.util.element.copy_deep( + tool.Ifc.get(), + source_rep, + exclude=["IfcGeometricRepresentationContext"], + exclude_callback=exclude_callback, + copied_entities=copied_entities, + ) + + new_maps.append(new_map) + + dest.RepresentationMaps = new_maps return copied_entities @classmethod From 6ab7acfa57532383cae78962ac86b608da808f8b Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 13 Dec 2025 20:45:48 -0600 Subject: [PATCH 332/657] closes #3340: right click on section/elevation tag to open corresponding drawing. video: https://github.com/IfcOpenShell/IfcOpenShell/issues/3340#issuecomment-3650097896 --- .../bonsai/bim/module/drawing/__init__.py | 11 ++++ .../bonsai/bim/module/drawing/operator.py | 64 +++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/drawing/__init__.py b/src/bonsai/bonsai/bim/module/drawing/__init__.py index 8153671f09..8b5a787ebe 100644 --- a/src/bonsai/bonsai/bim/module/drawing/__init__.py +++ b/src/bonsai/bonsai/bim/module/drawing/__init__.py @@ -18,10 +18,12 @@ import bpy from . import ui, prop, operator, handler, gizmos, workspace +import bonsai.tool as tool classes = ( operator.ActivateDrawing, operator.ActivateDrawingFromSheet, + operator.ActivateDrawingByAnnotation, operator.ActivateDrawingStyle, operator.ActivateModel, operator.AddAnnotation, @@ -134,6 +136,13 @@ classes = ( ) +def menu_func(self, context): + active_obj = context.active_object + if active_obj: + element = tool.Ifc.get_entity(active_obj) + if element and element.is_a("IfcAnnotation") and element.ObjectType in ["SECTION", "ELEVATION"]: + self.layout.operator("bim.activate_drawing_by_annotation", text="Go to Drawing") + def register(): if not bpy.app.background: bpy.utils.register_tool(workspace.AnnotationTool, after={"bim.bim_tool"}, separator=True, group=False) @@ -146,6 +155,7 @@ def register(): bpy.app.handlers.load_post.append(handler.load_post) bpy.app.handlers.depsgraph_update_pre.append(handler.depsgraph_update_pre_handler) bpy.types.VIEW3D_MT_image_add.append(ui.add_object_button) + bpy.types.VIEW3D_MT_object_context_menu.append(menu_func) def unregister(): @@ -160,3 +170,4 @@ def unregister(): bpy.app.handlers.load_post.remove(handler.load_post) bpy.app.handlers.depsgraph_update_pre.remove(handler.depsgraph_update_pre_handler) bpy.types.VIEW3D_MT_image_add.remove(ui.add_object_button) + bpy.types.VIEW3D_MT_object_context_menu.remove(menu_func) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 0648e58a1f..9c687641bd 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3876,3 +3876,67 @@ class ExcludeAnnotation(bpy.types.Operator, tool.Ifc.Operator): if referenced_element := tool.Drawing.get_annotation_element(element): tool.Drawing.exclude_annotation_from_drawing(referenced_element, drawing) core.sync_references(tool.Ifc, tool.Collector, tool.Drawing, drawing=drawing) + +class ActivateDrawingByAnnotation(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.activate_drawing_by_annotation" + bl_label = "Activate Drawing" + bl_description = "Activate the drawing corresponding to the selected annotation" + bl_options = {"REGISTER", "UNDO"} + + @classmethod + def poll(cls, context): + # Check if an annotation object is selected + if not context.selected_objects: + cls.poll_message_set("No object selected") + return False + + active_obj = context.active_object + if not active_obj: + cls.poll_message_set("No active object") + return False + + element = tool.Ifc.get_entity(active_obj) + if not element: + cls.poll_message_set("Selected object is not an IFC element") + return False + + # Check if it's an IfcAnnotation with ObjectType = "SECTION" or "ELEVATION" + if not element.is_a("IfcAnnotation") or element.ObjectType not in ["SECTION", "ELEVATION"]: + cls.poll_message_set("Selected object is not a drawing annotation") + return False + + return True + + def _execute(self, context): + active_obj = context.active_object + element = tool.Ifc.get_entity(active_obj) + + if not element or not element.is_a("IfcAnnotation") or element.ObjectType not in ["SECTION", "ELEVATION"]: + self.report({"ERROR"}, "Selected object is not a drawing annotation") + return {"CANCELLED"} + + # Find the drawing/camera element that this annotation references + drawing_element = self.find_drawing_from_annotation(element) + + if not drawing_element: + self.report({"ERROR"}, "Could not find drawing element for this annotation") + return {"CANCELLED"} + + # Use the existing ActivateDrawing operator with the drawing element's ID + bpy.ops.bim.activate_drawing(drawing=drawing_element.id()) + + return {"FINISHED"} + + def find_drawing_from_annotation(self, annotation_element): + """Find the drawing/camera element that this annotation references.""" + ifc = tool.Ifc.get() + + # Check IfcRelAssignsToProduct relationships + for rel in ifc.get_inverse(annotation_element): + if rel.is_a("IfcRelAssignsToProduct") and rel.RelatingProduct: + if rel.RelatingProduct.is_a("IfcAnnotation"): + # Found the drawing element! + return rel.RelatingProduct + + + return None \ No newline at end of file From cb89fbfd86cc8dfef45712c1fb2d6c85f5afc04d Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 4 Nov 2025 14:19:43 +0100 Subject: [PATCH 333/657] Add attribute info for relating type --- src/bonsai/bonsai/bim/module/type/__init__.py | 4 + src/bonsai/bonsai/bim/module/type/data.py | 23 ++++++ src/bonsai/bonsai/bim/module/type/operator.py | 78 +++++++++++++++++++ src/bonsai/bonsai/bim/module/type/prop.py | 5 ++ src/bonsai/bonsai/bim/module/type/ui.py | 48 +++++++++++- 5 files changed, 157 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/type/__init__.py b/src/bonsai/bonsai/bim/module/type/__init__.py index 646ab48fcf..b77bcbfb8e 100644 --- a/src/bonsai/bonsai/bim/module/type/__init__.py +++ b/src/bonsai/bonsai/bim/module/type/__init__.py @@ -23,8 +23,11 @@ classes = ( operator.AssignType, operator.AutoRenameOccurrences, operator.DisableEditingType, + operator.DisableEditingTypeAttributes, operator.DuplicateType, + operator.EditTypeAttributes, operator.EnableEditingType, + operator.EnableEditingTypeAttributes, operator.RemoveType, operator.RenameType, operator.SelectSimilarType, @@ -33,6 +36,7 @@ classes = ( operator.UnassignType, prop.BIMTypeProperties, ui.BIM_PT_type, + ui.BIM_PT_type_attributes, ) diff --git a/src/bonsai/bonsai/bim/module/type/data.py b/src/bonsai/bonsai/bim/module/type/data.py index d93b86261d..119456875a 100644 --- a/src/bonsai/bonsai/bim/module/type/data.py +++ b/src/bonsai/bonsai/bim/module/type/data.py @@ -42,6 +42,7 @@ class TypeData: "is_product": cls.is_product(), "total_instances": cls.total_instances(), "relating_type": cls.relating_type(), + "relating_type_attributes": cls.relating_type_attributes(), } ) @@ -92,3 +93,25 @@ class TypeData: element_type = ifcopenshell.util.element.get_type(element) if element_type: return {"id": element_type.id(), "name": f"{element_type.is_a()}/{element_type.Name or 'Unnamed'}"} + + @classmethod + def relating_type_attributes(cls): + results = [] + element = tool.Ifc.get_entity(bpy.context.active_object) + element_type = ifcopenshell.util.element.get_type(element) + if not element_type: + return results + + data = element_type.get_info() + if "GlobalId" in data: + excluded_keys = ["id", "type"] + else: + excluded_keys = ["type"] + exclude_value_types = (tuple, ifcopenshell.entity_instance) + for key, value in data.items(): + if value is None or isinstance(value, exclude_value_types) or key in excluded_keys: + continue + if key == "id": + key = "STEP ID" + results.append({"name": key, "value": str(value)}) + return results diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index 60a52fdb9b..b09b9fe5a8 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -24,6 +24,7 @@ import ifcopenshell.util.representation import ifcopenshell.util.type import ifcopenshell.util.unit import ifcopenshell.api +import ifcopenshell.api.attribute import ifcopenshell.api.type import bonsai.bim.helper import bonsai.tool as tool @@ -416,3 +417,80 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): self.layout.prop( self, "assign_selected_objects", text=f"Assign {len(ifc_objects)} Selected Object(s) to New Type" ) + + +class EnableEditingTypeAttributes(bpy.types.Operator): + bl_idname = "bim.enable_editing_type_attributes" + bl_label = "Enable Editing Type Attributes" + bl_description = "Enable editing the attributes of the relating type" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + element = tool.Ifc.get_entity(obj) + if not element: + return {"CANCELLED"} + + element_type = ifcopenshell.util.element.get_type(element) + if not element_type: + return {"CANCELLED"} + + props = tool.Type.get_object_type_props(obj) + props.type_attributes.clear() + + bonsai.bim.helper.import_attributes(element_type, props.type_attributes) + props.is_editing_type_attributes = True + return {"FINISHED"} + + +class DisableEditingTypeAttributes(bpy.types.Operator): + bl_idname = "bim.disable_editing_type_attributes" + bl_label = "Disable Editing Type Attributes" + bl_description = "Disable editing the attributes of the relating type" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Type.get_object_type_props(obj) + props.type_attributes.clear() + props.property_unset("is_editing_type_attributes") + return {"FINISHED"} + + +class EditTypeAttributes(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.edit_type_attributes" + bl_label = "Edit Type Attributes" + bl_description = "Save the changes to the relating type's attributes" + bl_options = {"REGISTER", "UNDO"} + + def _execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + element = tool.Ifc.get_entity(obj) + if not element: + return {"CANCELLED"} + + element_type = ifcopenshell.util.element.get_type(element) + if not element_type: + return {"CANCELLED"} + + props = tool.Type.get_object_type_props(obj) + attributes = bonsai.bim.helper.export_attributes(props.type_attributes) + + ifcopenshell.api.attribute.edit_attributes(tool.Ifc.get(), product=element_type, attributes=attributes) + + type_obj = tool.Ifc.get_object(element_type) + if type_obj: + tool.Root.set_object_name(type_obj, element_type) + + bpy.ops.bim.disable_editing_type_attributes() + + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/type/prop.py b/src/bonsai/bonsai/bim/module/type/prop.py index 814d678390..2786636404 100644 --- a/src/bonsai/bonsai/bim/module/type/prop.py +++ b/src/bonsai/bonsai/bim/module/type/prop.py @@ -20,6 +20,7 @@ import bpy import ifcopenshell.util.element import ifcopenshell.util.type from bonsai.bim.module.type.data import TypeData +from bonsai.bim.prop import Attribute import bonsai.tool as tool from typing import TYPE_CHECKING, Union from bpy.types import PropertyGroup @@ -90,9 +91,13 @@ class BIMTypeProperties(PropertyGroup): update=update_relating_type_from_object, poll=is_object_class_applicable, ) + is_editing_type_attributes: BoolProperty(name="Is Editing Type Attributes") + type_attributes: CollectionProperty(type=Attribute, name="Type Attributes") if TYPE_CHECKING: is_editing_type: bool relating_type_class: str relating_type: str relating_type_object: Union[bpy.types.Object, None] + is_editing_type_attributes: bool + type_attributes: bpy.types.bpy_prop_collection_idprop[Attribute] diff --git a/src/bonsai/bonsai/bim/module/type/ui.py b/src/bonsai/bonsai/bim/module/type/ui.py index a368f38867..2370782046 100644 --- a/src/bonsai/bonsai/bim/module/type/ui.py +++ b/src/bonsai/bonsai/bim/module/type/ui.py @@ -20,7 +20,7 @@ import bpy import bonsai.tool as tool import bonsai.bim.module.type.prop as type_prop from bpy.types import Panel -from bonsai.bim.helper import prop_with_search +from bonsai.bim.helper import prop_with_search, get_display_value from bonsai.bim.module.type.data import TypeData @@ -107,5 +107,51 @@ class BIM_PT_type(Panel): row.operator("bim.enable_editing_type", icon="GREASEPENCIL", text="") +class BIM_PT_type_attributes(Panel): + bl_label = "Type Attributes" + bl_idname = "BIM_PT_type_attributes" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + bl_parent_id = "BIM_PT_type" + bl_options = {"DEFAULT_CLOSED"} + + @classmethod + def poll(cls, context): + if not TypeData.is_loaded: + TypeData.load() + return bool(TypeData.data.get("is_product") and TypeData.data.get("relating_type")) + + def draw(self, context): + if not TypeData.is_loaded: + TypeData.load() + + assert (layout := self.layout) + assert (obj := context.active_object) + + if not TypeData.data.get("relating_type"): + layout.label(text="No Relating Type", icon="INFO") + return + + props = tool.Type.get_object_type_props(obj) + + if props.is_editing_type_attributes: + row = layout.row(align=True) + row.operator("bim.edit_type_attributes", icon="CHECKMARK", text="Save Attributes") + row.operator("bim.disable_editing_type_attributes", icon="CANCEL", text="") + + import bonsai.bim.helper + bonsai.bim.helper.draw_attributes(props.type_attributes, layout) + else: + row = layout.row() + row.operator("bim.enable_editing_type_attributes", icon="GREASEPENCIL", text="Edit") + + for attribute in TypeData.data["relating_type_attributes"]: + row = layout.row(align=True) + row.label(text=attribute["name"]) + value = get_display_value(attribute["value"]) + row.label(text=value) + + def add_object_button(self, context): self.layout.operator("bim.add_occurrence", icon="PLUGIN") From 487a2014f5b2977a35153e1b6d426754492f676d Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 1 Sep 2025 21:29:05 +0200 Subject: [PATCH 334/657] proposal to add massunit and timeunit in project creation wizard --- .../bonsai/bim/module/project/operator.py | 8 +++ src/bonsai/bonsai/bim/module/project/ui.py | 4 ++ src/bonsai/bonsai/bim/prop.py | 23 +++++++ src/bonsai/bonsai/core/unit.py | 19 +++++- src/bonsai/bonsai/tool/unit.py | 26 +++++++- .../ifcopenshell/api/unit/assign_unit.py | 66 ++++++++++++++++++- 6 files changed, 142 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 0650cda238..34d6cdb91d 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -98,6 +98,8 @@ class NewProject(bpy.types.Operator): bpy.context.scene.unit_settings.length_unit = "METERS" bim_props.area_unit = "SQUARE_METRE" bim_props.volume_unit = "CUBIC_METRE" + bim_props.mass_unit = "KILOGRAM" + bim_props.time_unit = "SECOND" pprops.template_file = "0" elif self.preset == "metric_mm": pprops.export_schema = "IFC4" @@ -105,6 +107,8 @@ class NewProject(bpy.types.Operator): bpy.context.scene.unit_settings.length_unit = "MILLIMETERS" bim_props.area_unit = "SQUARE_METRE" bim_props.volume_unit = "CUBIC_METRE" + bim_props.mass_unit = "KILOGRAM" + bim_props.time_unit = "SECOND" pprops.template_file = "0" elif self.preset == "imperial_ft": pprops.export_schema = "IFC4" @@ -112,6 +116,8 @@ class NewProject(bpy.types.Operator): bpy.context.scene.unit_settings.length_unit = "FEET" bim_props.area_unit = "square foot" bim_props.volume_unit = "cubic foot" + bim_props.mass_unit = "POUND" + bim_props.time_unit = "SECOND" pprops.template_file = "0" elif self.preset == "demo": pprops.export_schema = "IFC4" @@ -119,6 +125,8 @@ class NewProject(bpy.types.Operator): bpy.context.scene.unit_settings.length_unit = "MILLIMETERS" bim_props.area_unit = "SQUARE_METRE" bim_props.volume_unit = "CUBIC_METRE" + bim_props.mass_unit = "KILOGRAM" + bim_props.time_unit = "SECOND" pprops.template_file = "IFC4 Demo Template.ifc" if self.preset != "wizard": diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 6674a1a51a..731a9d0688 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -356,6 +356,10 @@ class BIM_PT_new_project_wizard(Panel): row.prop(props, "area_unit", text="Area Unit") row = self.layout.row() row.prop(props, "volume_unit", text="Volume Unit") + row = self.layout.row() + row.prop(props, "mass_unit", text="Mass Unit") + row = self.layout.row() + row.prop(props, "time_unit", text="Time Unit") prop_with_search(self.layout, pprops, "template_file", text="Template") row = self.layout.row() diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 7a4464c986..eeea68eab9 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -586,7 +586,28 @@ class BIMProperties(PropertyGroup): ], name="IFC Volume Unit", ) + mass_unit: EnumProperty( + items=[ + ("KILOGRAM", "Kilogram", "Kilograms"), + ("GRAM", "Gram", "Grams"), + ("POUND", "Pound (Mass)", "Pounds"), + ("OUNCE", "Ounce", "Ounces"), + ("TON", "Ton", "Metric Tons"), + ], + name="Mass Unit", + default="KILOGRAM", + ) + time_unit: EnumProperty( + items=[ + ("SECOND", "Second", "Seconds"), + ("MINUTE", "Minutes", "Minutes"), + ("HOUR", "Hour", "Hours"), + ("DAY", "Day", "Days"), + ], + name="Time Unit", + default="HOUR", + ) if TYPE_CHECKING: is_dirty: bool schema_dir: str @@ -599,6 +620,8 @@ class BIMProperties(PropertyGroup): section_line_decorator_width: float area_unit: str volume_unit: str + mass_unit: str + time_unit: str class IfcParameter(PropertyGroup): diff --git a/src/bonsai/bonsai/core/unit.py b/src/bonsai/bonsai/core/unit.py index a075c9c5e5..8517343b37 100644 --- a/src/bonsai/bonsai/core/unit.py +++ b/src/bonsai/bonsai/core/unit.py @@ -34,14 +34,29 @@ def assign_scene_units(ifc: type[tool.Ifc], unit: type[tool.Unit]) -> None: areaunit = ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix=prefix) prefix = unit.get_scene_unit_si_prefix("VOLUMEUNIT") volumeunit = ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix=prefix) + + prefix = unit.get_scene_unit_si_prefix("MASSUNIT") + if prefix == "CONVERSION": + mass_unit_name = unit.get_scene_unit_name("MASSUNIT") + massunit = ifc.run("unit.add_conversion_based_unit", name=mass_unit_name.lower()) + else: + massunit = ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix=prefix) + + prefix = unit.get_scene_unit_si_prefix("TIMEUNIT") + if prefix == "CONVERSION": + time_unit_name = unit.get_scene_unit_name("TIMEUNIT") + timeunit = ifc.run("unit.add_conversion_based_unit", name=time_unit_name.lower()) + else: + timeunit = ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=prefix) else: lengthunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("LENGTHUNIT")) areaunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("AREAUNIT")) volumeunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("VOLUMEUNIT")) + massunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("MASSUNIT")) + timeunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("TIMEUNIT")) planeangleunit = ifc.run("unit.add_conversion_based_unit", name="degree") - - ifc.run("unit.assign_unit", units=[lengthunit, areaunit, volumeunit, planeangleunit]) + ifc.run("unit.assign_unit", units=[lengthunit, areaunit, volumeunit, planeangleunit, massunit, timeunit]) def assign_unit(ifc: type[tool.Ifc], unit_tool: type[tool.Unit], unit: ifcopenshell.entity_instance) -> None: diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index d01d51f3cb..b18cb6ff09 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -266,7 +266,7 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t class Unit(bonsai.core.tool.Unit): - UNIT_TYPE = Literal["LENGTHUNIT", "AREAUNIT", "VOLUMEUNIT"] + UNIT_TYPE = Literal["LENGTHUNIT", "AREAUNIT", "VOLUMEUNIT", "MASSUNIT", "TIMEUNIT"] @staticmethod def format_distance(meters: float, use_imperial: bool = None, **kwargs) -> str: @@ -343,6 +343,10 @@ class Unit(bonsai.core.tool.Unit): return bim_props.area_unit elif unit_type == "VOLUMEUNIT": return bim_props.volume_unit + elif unit_type == "MASSUNIT": + return bim_props.mass_unit + elif unit_type == "TIMEUNIT": + return bim_props.time_unit else: assert_never(unit_type) @@ -359,6 +363,26 @@ class Unit(bonsai.core.tool.Unit): unit = bim_props.area_unit elif unit_type == "VOLUMEUNIT": unit = bim_props.volume_unit + elif unit_type == "MASSUNIT": + unit = bim_props.mass_unit + if unit == "KILOGRAM": + return "KILO" + elif unit == "GRAM": + return None + elif unit == "TON": + return "MEGA" + elif unit in ["POUND", "OUNCE"]: + return "CONVERSION" + else: + return None + + elif unit_type == "TIMEUNIT": + unit = bim_props.time_unit + if unit == "SECOND": + return None + else: + return "CONVERSION" + else: assert_never(unit_type) if "/" in unit: diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py index d57acbd435..58abfd4ea4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py @@ -27,6 +27,8 @@ def assign_unit( length: Optional[dict] = None, area: Optional[dict] = None, volume: Optional[dict] = None, + mass: Optional[dict] = None, + time: Optional[dict] = None, ) -> ifcopenshell.entity_instance: """Assign default project units @@ -51,9 +53,11 @@ def assign_unit( # You need a project before you can assign units. ifcopenshell.api.root.create_entity(model, ifc_class="IfcProject") - # Millimeters and square meters + # Millimeters, square meters, kilograms, and seconds length = ifcopenshell.api.unit.add_si_unit(model, unit_type="LENGTHUNIT", prefix="MILLI") area = ifcopenshell.api.unit.add_si_unit(model, unit_type="AREAUNIT") + mass = ifcopenshell.api.unit.add_si_unit(model, unit_type="MASSUNIT", prefix="KILO") + time = ifcopenshell.api.unit.add_si_unit(model, unit_type="TIMEUNIT") # Make it our default units, if we are doing a metric building ifcopenshell.api.unit.assign_unit(model, units=[length, area]) @@ -71,6 +75,8 @@ def assign_unit( usecase.settings["length"] = length or {"is_metric": True, "raw": "MILLIMETERS"} usecase.settings["area"] = area or {"is_metric": True, "raw": "METERS"} usecase.settings["volume"] = volume or {"is_metric": True, "raw": "METERS"} + usecase.settings["mass"] = mass or {"is_metric": True, "raw": "KILOGRAM"} + usecase.settings["time"] = time or {"is_metric": True, "raw": "SECOND"} return usecase.execute() @@ -116,7 +122,45 @@ class Usecase: units.add(unit) unit_assignment.Units = list(units) + def create_time_conversion_unit(self, name: str, factor: float) -> ifcopenshell.entity_instance: + """Create a conversion-based time unit""" + dimensional_exponents = self.file.createIfcDimensionalExponents(0, 0, 1, 0, 0, 0, 0) + si_unit = self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") + value_component = self.file.create_entity("IfcReal", **{"wrappedValue": factor}) + conversion_factor = self.file.createIfcMeasureWithUnit(value_component, si_unit) + return self.file.createIfcConversionBasedUnit(dimensional_exponents, "TIMEUNIT", name, conversion_factor) + + def create_mass_conversion_unit(self, name: str, factor: float) -> ifcopenshell.entity_instance: + """Create a conversion-based mass unit""" + dimensional_exponents = self.file.createIfcDimensionalExponents(0, 1, 0, 0, 0, 0, 0) # Mass dimension + si_unit = self.file.createIfcSIUnit(None, "MASSUNIT", "KILO", "GRAM") + value_component = self.file.create_entity("IfcReal", **{"wrappedValue": factor}) + conversion_factor = self.file.createIfcMeasureWithUnit(value_component, si_unit) + return self.file.createIfcConversionBasedUnit(dimensional_exponents, "MASSUNIT", name, conversion_factor) + def create_metric_unit(self, unit_type: str, data: dict) -> ifcopenshell.entity_instance: + if unit_type == "mass": + if data["raw"] == "KILOGRAM": + return self.file.createIfcSIUnit(None, "MASSUNIT", "KILO", "GRAM") + elif data["raw"] == "GRAM": + return self.file.createIfcSIUnit(None, "MASSUNIT", None, "GRAM") + elif data["raw"] == "TON": + return self.file.createIfcSIUnit(None, "MASSUNIT", "MEGA", "GRAM") + else: + return self.file.createIfcSIUnit(None, "MASSUNIT", "KILO", "GRAM") + + elif unit_type == "time": + if data["raw"] == "SECOND": + return self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") + elif data["raw"] == "MINUTE": + return self.create_time_conversion_unit("minute", 60.0) + elif data["raw"] == "HOUR": + return self.create_time_conversion_unit("hour", 3600.0) + elif data["raw"] == "DAY": + return self.create_time_conversion_unit("day", 86400.0) + else: + return self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") + type_prefix = "" if unit_type == "area": type_prefix = "SQUARE_" @@ -139,6 +183,26 @@ class Usecase: elif unit_type == "volume": dimensional_exponents = self.file.createIfcDimensionalExponents(3, 0, 0, 0, 0, 0, 0) name_prefix = "cubic" + elif unit_type == "mass": + if data["raw"] == "POUND": + return self.create_mass_conversion_unit("pound", 0.45359237) + elif data["raw"] == "OUNCE": + return self.create_mass_conversion_unit("ounce", 0.0283495) + else: + return self.create_mass_conversion_unit("pound", 0.45359237) + + elif unit_type == "time": + if data["raw"] == "SECOND": + return self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") + elif data["raw"] == "MINUTE": + return self.create_time_conversion_unit("minute", 60.0) + elif data["raw"] == "HOUR": + return self.create_time_conversion_unit("hour", 3600.0) + elif data["raw"] == "DAY": + return self.create_time_conversion_unit("day", 86400.0) + else: + return self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") + si_unit = self.file.createIfcSIUnit( None, "{}UNIT".format(unit_type.upper()), From 146301b0c01e9196c00fd88b4bf616300cb7d871 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 1 Sep 2025 22:32:52 +0200 Subject: [PATCH 335/657] use kilogram as default for SI and Seconds for Imperial --- src/bonsai/bonsai/bim/prop.py | 2 +- src/bonsai/bonsai/core/unit.py | 9 +++++++-- src/bonsai/bonsai/tool/unit.py | 8 +++----- .../ifcopenshell/api/unit/add_conversion_based_unit.py | 6 +++++- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index eeea68eab9..93730b475b 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -590,7 +590,7 @@ class BIMProperties(PropertyGroup): items=[ ("KILOGRAM", "Kilogram", "Kilograms"), ("GRAM", "Gram", "Grams"), - ("POUND", "Pound (Mass)", "Pounds"), + ("POUND", "Pound", "Pounds"), ("OUNCE", "Ounce", "Ounces"), ("TON", "Ton", "Metric Tons"), ], diff --git a/src/bonsai/bonsai/core/unit.py b/src/bonsai/bonsai/core/unit.py index 8517343b37..2e8e627cb7 100644 --- a/src/bonsai/bonsai/core/unit.py +++ b/src/bonsai/bonsai/core/unit.py @@ -52,8 +52,13 @@ def assign_scene_units(ifc: type[tool.Ifc], unit: type[tool.Unit]) -> None: lengthunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("LENGTHUNIT")) areaunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("AREAUNIT")) volumeunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("VOLUMEUNIT")) - massunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("MASSUNIT")) - timeunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("TIMEUNIT")) + massunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("MASSUNIT").lower()) + + time_unit_name = unit.get_scene_unit_name("TIMEUNIT") + if time_unit_name == "SECOND": + timeunit = ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None) + else: + timeunit = ifc.run("unit.add_conversion_based_unit", name=time_unit_name.lower()) planeangleunit = ifc.run("unit.add_conversion_based_unit", name="degree") ifc.run("unit.assign_unit", units=[lengthunit, areaunit, volumeunit, planeangleunit, massunit, timeunit]) diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index b18cb6ff09..293136fb8c 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -365,24 +365,22 @@ class Unit(bonsai.core.tool.Unit): unit = bim_props.volume_unit elif unit_type == "MASSUNIT": unit = bim_props.mass_unit - if unit == "KILOGRAM": - return "KILO" - elif unit == "GRAM": + if unit == "GRAM": return None + elif unit == "KILOGRAM": + return "KILO" elif unit == "TON": return "MEGA" elif unit in ["POUND", "OUNCE"]: return "CONVERSION" else: return None - elif unit_type == "TIMEUNIT": unit = bim_props.time_unit if unit == "SECOND": return None else: return "CONVERSION" - else: assert_never(unit_type) if "/" in unit: diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py index bb1e920257..51aa200810 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py @@ -61,7 +61,11 @@ def add_conversion_based_unit( dimensions = ifcopenshell.util.unit.named_dimensions[unit_type] exponents = file.createIfcDimensionalExponents(*dimensions) si_name = ifcopenshell.util.unit.si_type_names[unit_type] - si_unit = file.createIfcSIUnit(UnitType=unit_type, Name=si_name) + + if unit_type == "MASSUNIT": + si_unit = file.createIfcSIUnit(UnitType=unit_type, Name=si_name, Prefix="KILO") + else: + si_unit = file.createIfcSIUnit(UnitType=unit_type, Name=si_name) conversion_real = ifcopenshell.util.unit.si_conversions.get(name, 1) value_component = file.create_entity("IfcReal", **{"wrappedValue": conversion_real}) From a4e76ed6eeebfd339e6dcc42354390a1b4ce8013 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 5 Sep 2025 20:22:56 +0200 Subject: [PATCH 336/657] Updated with core developer feedback: fixed for Tonne and added tests --- src/bonsai/bonsai/bim/prop.py | 4 +- src/bonsai/bonsai/tool/unit.py | 6 +- src/bonsai/test/core/test_unit.py | 155 +++++++++++- src/bonsai/test/tool/test_unit.py | 143 +++++++++++ .../api/unit/add_conversion_based_unit.py | 2 +- .../ifcopenshell/util/unit.py | 3 + .../test/util/test_unit.py | 230 ++++++++++++++++++ 7 files changed, 535 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 93730b475b..7b24d2a1d1 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -592,7 +592,7 @@ class BIMProperties(PropertyGroup): ("GRAM", "Gram", "Grams"), ("POUND", "Pound", "Pounds"), ("OUNCE", "Ounce", "Ounces"), - ("TON", "Ton", "Metric Tons"), + ("TONNE", "Tonne", "Metric Tons"), ], name="Mass Unit", default="KILOGRAM", @@ -601,7 +601,7 @@ class BIMProperties(PropertyGroup): time_unit: EnumProperty( items=[ ("SECOND", "Second", "Seconds"), - ("MINUTE", "Minutes", "Minutes"), + ("MINUTE", "Minute", "Minutes"), ("HOUR", "Hour", "Hours"), ("DAY", "Day", "Days"), ], diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index 293136fb8c..a3c9569d62 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -344,9 +344,9 @@ class Unit(bonsai.core.tool.Unit): elif unit_type == "VOLUMEUNIT": return bim_props.volume_unit elif unit_type == "MASSUNIT": - return bim_props.mass_unit + return bim_props.mass_unit.lower() elif unit_type == "TIMEUNIT": - return bim_props.time_unit + return bim_props.time_unit.lower() else: assert_never(unit_type) @@ -369,7 +369,7 @@ class Unit(bonsai.core.tool.Unit): return None elif unit == "KILOGRAM": return "KILO" - elif unit == "TON": + elif unit == "TONNE": return "MEGA" elif unit in ["POUND", "OUNCE"]: return "CONVERSION" diff --git a/src/bonsai/test/core/test_unit.py b/src/bonsai/test/core/test_unit.py index d79b6b83fb..d758b7829c 100644 --- a/src/bonsai/test/core/test_unit.py +++ b/src/bonsai/test/core/test_unit.py @@ -26,6 +26,9 @@ class TestAssignSceneUnits: unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("prefix") unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return("prefix") unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return("prefix") + unit.get_scene_unit_si_prefix("MASSUNIT").should_be_called().will_return("KILO") + unit.get_scene_unit_si_prefix("TIMEUNIT").should_be_called().will_return(None) + ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="prefix").should_be_called().will_return( "lengthunit" ) @@ -38,7 +41,13 @@ class TestAssignSceneUnits: ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - ifc.run("unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit"]).should_be_called() + ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix="KILO").should_be_called().will_return("massunit") + + ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None).should_be_called().will_return("timeunit") + + ifc.run( + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + ).should_be_called() subject.assign_scene_units(ifc, unit) def test_creating_and_assigning_imperial_units(self, ifc, unit): @@ -54,7 +63,15 @@ class TestAssignSceneUnits: ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - ifc.run("unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit"]).should_be_called() + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("massname") + ifc.run("unit.add_conversion_based_unit", name="massname").should_be_called().will_return("massunit") + + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("timename") + ifc.run("unit.add_conversion_based_unit", name="timename").should_be_called().will_return("timeunit") + + ifc.run( + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + ).should_be_called() subject.assign_scene_units(ifc, unit) @@ -162,3 +179,137 @@ class TestEditUnit: unit.import_units().should_be_called() unit.clear_active_unit().should_be_called() subject.edit_unit(ifc, unit, unit="unit") + + +class TestAssignSceneUnitsWithMassAndTime: + def test_creating_and_assigning_metric_units_with_mass_and_time(self, ifc, unit): + unit.is_scene_unit_metric().should_be_called().will_return(True) + unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("prefix") + unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return("prefix") + unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return("prefix") + unit.get_scene_unit_si_prefix("MASSUNIT").should_be_called().will_return("KILO") + unit.get_scene_unit_si_prefix("TIMEUNIT").should_be_called().will_return("CONVERSION") + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("minute") + + ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="prefix").should_be_called().will_return( + "lengthunit" + ) + ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix="prefix").should_be_called().will_return("areaunit") + ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix="prefix").should_be_called().will_return( + "volumeunit" + ) + ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix="KILO").should_be_called().will_return("massunit") + ifc.run("unit.add_conversion_based_unit", name="minute").should_be_called().will_return("timeunit") + ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") + + ifc.run( + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + ).should_be_called() + subject.assign_scene_units(ifc, unit) + + def test_creating_and_assigning_imperial_units_with_mass_and_time(self, ifc, unit): + unit.is_scene_unit_metric().should_be_called().will_return(False) + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("foot") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square foot") + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic foot") + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("pound") + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("SECOND") + + ifc.run("unit.add_conversion_based_unit", name="foot").should_be_called().will_return("lengthunit") + ifc.run("unit.add_conversion_based_unit", name="square foot").should_be_called().will_return("areaunit") + ifc.run("unit.add_conversion_based_unit", name="cubic foot").should_be_called().will_return("volumeunit") + ifc.run("unit.add_conversion_based_unit", name="pound").should_be_called().will_return("massunit") + ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None).should_be_called().will_return("timeunit") + ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") + + ifc.run( + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + ).should_be_called() + subject.assign_scene_units(ifc, unit) + + def test_creating_and_assigning_conversion_based_mass_units(self, ifc, unit): + unit.is_scene_unit_metric().should_be_called().will_return(False) + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("foot") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square foot") + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic foot") + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("tonne") + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("minute") + + ifc.run("unit.add_conversion_based_unit", name="foot").should_be_called().will_return("lengthunit") + ifc.run("unit.add_conversion_based_unit", name="square foot").should_be_called().will_return("areaunit") + ifc.run("unit.add_conversion_based_unit", name="cubic foot").should_be_called().will_return("volumeunit") + ifc.run("unit.add_conversion_based_unit", name="tonne").should_be_called().will_return("massunit") + ifc.run("unit.add_conversion_based_unit", name="minute").should_be_called().will_return("timeunit") + ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") + + ifc.run( + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + ).should_be_called() + subject.assign_scene_units(ifc, unit) + + +class TestAddTimeUnit: + def test_adding_si_time_unit(self, ifc, unit): + ifc.run("unit.add_si_unit", unit_type="TIMEUNIT").should_be_called().will_return("unit") + unit.import_units().should_be_called() + assert subject.add_si_unit(ifc, unit, unit_type="TIMEUNIT") == "unit" + + def test_adding_conversion_based_time_unit_minute(self, ifc, unit): + ifc.run("unit.add_conversion_based_unit", name="minute").should_be_called().will_return("unit") + unit.import_units().should_be_called() + assert subject.add_conversion_based_unit(ifc, unit, name="minute") == "unit" + + def test_adding_conversion_based_time_unit_hour(self, ifc, unit): + ifc.run("unit.add_conversion_based_unit", name="hour").should_be_called().will_return("unit") + unit.import_units().should_be_called() + assert subject.add_conversion_based_unit(ifc, unit, name="hour") == "unit" + + def test_adding_conversion_based_time_unit_day(self, ifc, unit): + ifc.run("unit.add_conversion_based_unit", name="day").should_be_called().will_return("unit") + unit.import_units().should_be_called() + assert subject.add_conversion_based_unit(ifc, unit, name="day") == "unit" + + +class TestAssignMassAndTimeUnits: + def test_assigning_mass_unit(self, ifc, unit): + ifc.run("unit.assign_unit", units=["massunit"]).should_be_called() + unit.import_units().should_be_called() + subject.assign_unit(ifc, unit, unit="massunit") + + def test_assigning_time_unit(self, ifc, unit): + ifc.run("unit.assign_unit", units=["timeunit"]).should_be_called() + unit.import_units().should_be_called() + subject.assign_unit(ifc, unit, unit="timeunit") + + def test_assigning_multiple_mass_and_time_units(self, ifc, unit): + ifc.run("unit.assign_unit", units=["massunit"]).should_be_called() + unit.import_units().should_be_called() + ifc.run("unit.assign_unit", units=["timeunit"]).should_be_called() + unit.import_units().should_be_called() + + subject.assign_unit(ifc, unit, unit="massunit") + subject.assign_unit(ifc, unit, unit="timeunit") + + +class TestUnassignMassAndTimeUnits: + def test_unassigning_mass_unit(self, ifc, unit): + ifc.run("unit.unassign_unit", units=["massunit"]).should_be_called() + unit.import_units().should_be_called() + subject.unassign_unit(ifc, unit, unit="massunit") + + def test_unassigning_time_unit(self, ifc, unit): + ifc.run("unit.unassign_unit", units=["timeunit"]).should_be_called() + unit.import_units().should_be_called() + subject.unassign_unit(ifc, unit, unit="timeunit") + + +class TestRemoveMassAndTimeUnits: + def test_removing_mass_unit(self, ifc, unit): + ifc.run("unit.remove_unit", unit="massunit").should_be_called() + unit.import_units().should_be_called() + subject.remove_unit(ifc, unit, unit="massunit") + + def test_removing_time_unit(self, ifc, unit): + ifc.run("unit.remove_unit", unit="timeunit").should_be_called() + unit.import_units().should_be_called() + subject.remove_unit(ifc, unit, unit="timeunit") diff --git a/src/bonsai/test/tool/test_unit.py b/src/bonsai/test/tool/test_unit.py index 212c72a559..190a8fa302 100644 --- a/src/bonsai/test/tool/test_unit.py +++ b/src/bonsai/test/tool/test_unit.py @@ -135,6 +135,35 @@ class TestGetSceneUnitName(NewFile): bpy.context.scene.unit_settings.system = "NONE" assert subject.get_scene_unit_name("LENGTHUNIT") == "foot" + def test_getting_mass_unit_names(self): + """Test getting mass unit names for different systems""" + assert bpy.context.scene + props = tool.Blender.get_bim_props() + props.mass_unit = "GRAM" + assert subject.get_scene_unit_name("MASSUNIT") == "gram" + props.mass_unit = "KILOGRAM" + assert subject.get_scene_unit_name("MASSUNIT") == "kilogram" + props.mass_unit = "POUND" + assert subject.get_scene_unit_name("MASSUNIT") == "pound" + props.mass_unit = "OUNCE" + assert subject.get_scene_unit_name("MASSUNIT") == "ounce" + props.mass_unit = "TONNE" + assert subject.get_scene_unit_name("MASSUNIT") == "tonne" + + def test_getting_time_unit_names(self): + """Test getting time unit names for different systems""" + assert bpy.context.scene + props = tool.Blender.get_bim_props() + + props.time_unit = "SECOND" + assert subject.get_scene_unit_name("TIMEUNIT") == "second" + props.time_unit = "MINUTE" + assert subject.get_scene_unit_name("TIMEUNIT") == "minute" + props.time_unit = "HOUR" + assert subject.get_scene_unit_name("TIMEUNIT") == "hour" + props.time_unit = "DAY" + assert subject.get_scene_unit_name("TIMEUNIT") == "day" + class TestGetSceneUnitSIPrefix: def test_run(self): @@ -162,6 +191,30 @@ class TestGetSceneUnitSIPrefix: props.volume_unit = "MILLI/CUBIC_METRE" assert subject.get_scene_unit_si_prefix("VOLUMEUNIT") == "MILLI" + def test_mass_and_time_unit_prefixes(self): + assert bpy.context.scene + props = tool.Blender.get_bim_props() + + props.mass_unit = "KILOGRAM" + assert subject.get_scene_unit_si_prefix("MASSUNIT") == "KILO" + props.mass_unit = "GRAM" + assert subject.get_scene_unit_si_prefix("MASSUNIT") is None + props.mass_unit = "POUND" + assert subject.get_scene_unit_si_prefix("MASSUNIT") == "CONVERSION" + props.mass_unit = "OUNCE" + assert subject.get_scene_unit_si_prefix("MASSUNIT") == "CONVERSION" + props.mass_unit = "TONNE" + assert subject.get_scene_unit_si_prefix("MASSUNIT") == "MEGA" + + props.time_unit = "SECOND" + assert subject.get_scene_unit_si_prefix("TIMEUNIT") is None + props.time_unit = "MINUTE" + assert subject.get_scene_unit_si_prefix("TIMEUNIT") == "CONVERSION" + props.time_unit = "HOUR" + assert subject.get_scene_unit_si_prefix("TIMEUNIT") == "CONVERSION" + props.time_unit = "DAY" + assert subject.get_scene_unit_si_prefix("TIMEUNIT") == "CONVERSION" + class TestImportUnitAttributes(NewFile): def test_importing_derived_units(self): @@ -298,6 +351,96 @@ class TestImportUnits(NewFile): assert props.units[5].unit_type == unit6.UnitType assert props.units[5].ifc_class == unit6.is_a() + def test_importing_mass_and_time_units(self): + """Test importing mass and time conversion based units""" + ifc = ifcopenshell.api.project.create_file() + tool.Ifc.set(ifc) + + tonne_unit = ifcopenshell.api.unit.add_conversion_based_unit(ifc, name="tonne") + pound_unit = ifcopenshell.api.unit.add_conversion_based_unit(ifc, name="pound") + ounce_unit = ifcopenshell.api.unit.add_conversion_based_unit(ifc, name="ounce") + + minute_unit = ifcopenshell.api.unit.add_conversion_based_unit(ifc, name="minute") + hour_unit = ifcopenshell.api.unit.add_conversion_based_unit(ifc, name="hour") + day_unit = ifcopenshell.api.unit.add_conversion_based_unit(ifc, name="day") + + kg_unit = ifcopenshell.api.unit.add_si_unit(ifc, unit_type="MASSUNIT", prefix="KILO") + gram_unit = ifcopenshell.api.unit.add_si_unit(ifc, unit_type="MASSUNIT") + second_unit = ifcopenshell.api.unit.add_si_unit(ifc, unit_type="TIMEUNIT") + + ifcopenshell.api.root.create_entity(ifc, ifc_class="IfcProject") + ifcopenshell.api.unit.assign_unit(ifc, units=[tonne_unit, minute_unit, kg_unit]) + + subject.import_units() + props = tool.Unit.get_unit_props() + + assert len(props.units) == 15 + + unit_ids = [u.ifc_definition_id for u in props.units] + assert tonne_unit.id() in unit_ids + assert pound_unit.id() in unit_ids + assert ounce_unit.id() in unit_ids + assert minute_unit.id() in unit_ids + assert hour_unit.id() in unit_ids + assert day_unit.id() in unit_ids + assert kg_unit.id() in unit_ids + assert gram_unit.id() in unit_ids + assert second_unit.id() in unit_ids + + tonne_prop = next(u for u in props.units if u.ifc_definition_id == tonne_unit.id()) + assert tonne_prop.name == "tonne" + assert tonne_prop.unit_type == "MASSUNIT" + assert tonne_prop.is_assigned is True + assert tonne_prop.ifc_class == "IfcConversionBasedUnit" + + pound_prop = next(u for u in props.units if u.ifc_definition_id == pound_unit.id()) + assert pound_prop.name == "pound" + assert pound_prop.unit_type == "MASSUNIT" + assert pound_prop.is_assigned is False + assert pound_prop.ifc_class == "IfcConversionBasedUnit" + + ounce_prop = next(u for u in props.units if u.ifc_definition_id == ounce_unit.id()) + assert ounce_prop.name == "ounce" + assert ounce_prop.unit_type == "MASSUNIT" + assert ounce_prop.is_assigned is False + assert ounce_prop.ifc_class == "IfcConversionBasedUnit" + + kg_prop = next(u for u in props.units if u.ifc_definition_id == kg_unit.id()) + assert kg_prop.name == "KILOGRAM" + assert kg_prop.unit_type == "MASSUNIT" + assert kg_prop.is_assigned is True + assert kg_prop.ifc_class == "IfcSIUnit" + + gram_prop = next(u for u in props.units if u.ifc_definition_id == gram_unit.id()) + assert gram_prop.name == "GRAM" + assert gram_prop.unit_type == "MASSUNIT" + assert gram_prop.is_assigned is False + assert gram_prop.ifc_class == "IfcSIUnit" + + minute_prop = next(u for u in props.units if u.ifc_definition_id == minute_unit.id()) + assert minute_prop.name == "minute" + assert minute_prop.unit_type == "TIMEUNIT" + assert minute_prop.is_assigned is True + assert minute_prop.ifc_class == "IfcConversionBasedUnit" + + hour_prop = next(u for u in props.units if u.ifc_definition_id == hour_unit.id()) + assert hour_prop.name == "hour" + assert hour_prop.unit_type == "TIMEUNIT" + assert hour_prop.is_assigned is False + assert hour_prop.ifc_class == "IfcConversionBasedUnit" + + day_prop = next(u for u in props.units if u.ifc_definition_id == day_unit.id()) + assert day_prop.name == "day" + assert day_prop.unit_type == "TIMEUNIT" + assert day_prop.is_assigned is False + assert day_prop.ifc_class == "IfcConversionBasedUnit" + + second_prop = next(u for u in props.units if u.ifc_definition_id == second_unit.id()) + assert second_prop.name == "SECOND" + assert second_prop.unit_type == "TIMEUNIT" + assert second_prop.is_assigned is False + assert second_prop.ifc_class == "IfcSIUnit" + class TestIsSceneUnitMetric(NewFile): def test_run(self): diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py index 51aa200810..6a4f17f8fd 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py @@ -32,7 +32,7 @@ def add_conversion_based_unit( function. You can choose from one of: inch, foot, yard, mile, square inch, square foot, square yard, acre, square mile, cubic inch, cubic foot, cubic yard, litre, fluid ounce UK, fluid ounce US, pint UK, pint - US, gallon UK, gallon US, degree, ounce, pound, ton UK, ton US, lbf, + US, gallon UK, gallon US, degree, ounce, pound, ton UK, ton US, tonne, lbf, kip, psi, ksi, minute, hour, day, btu, and fahrenheit. :param name: A converted name chosen from the list above. diff --git a/src/ifcopenshell-python/ifcopenshell/util/unit.py b/src/ifcopenshell-python/ifcopenshell/util/unit.py index cc767fe3a7..86254cb826 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/unit.py +++ b/src/ifcopenshell-python/ifcopenshell/util/unit.py @@ -209,6 +209,7 @@ si_conversions = { "pound": 0.454, "ton UK": 1016.0469088, "ton US": 907.18474, + "tonne": 1000.0, "lbf": 4.4482216153, "kip": 4448.2216153, "psi": 6894.7572932, @@ -253,6 +254,7 @@ imperial_types = { "pound": "MASSUNIT", "ton UK": "MASSUNIT", "ton US": "MASSUNIT", + "tonne": "MASSUNIT", "lbf": "FORCEUNIT", "kip": "FORCEUNIT", "psi": "PRESSUREUNIT", @@ -323,6 +325,7 @@ unit_symbols = { "pound": "lb", "ton UK": "ton", "ton US": "ton", + "tonne": "t", "lbf": "lbf", "kip": "kip", "psi": "psi", diff --git a/src/ifcopenshell-python/test/util/test_unit.py b/src/ifcopenshell-python/test/util/test_unit.py index 6e28a28e70..ff7b7eede5 100644 --- a/src/ifcopenshell-python/test/util/test_unit.py +++ b/src/ifcopenshell-python/test/util/test_unit.py @@ -391,3 +391,233 @@ class TestConvertFileLengthUnitsIFC4(test.bootstrap.IFC4, TestConvertFileLengthU class TestConvertFileLengthUnitsIFC4X3(test.bootstrap.IFC4X3, TestConvertFileLengthUnits): pass + + +class TestAddConversionBasedUnitMassAndTime(test.bootstrap.IFC4): + def test_adding_mass_units_creates_proper_massunit(self): + mass_units = [ + ("tonne", 1000.0), + ("pound", 0.454), + ("ounce", 0.02835), + ("ton UK", 1016.0469088), + ("ton US", 907.18474), + ] + + for name, expected_conversion in mass_units: + unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name=name) + + assert unit.is_a("IfcConversionBasedUnit") + + assert unit.UnitType == "MASSUNIT" + + assert unit.Name == name + + actual_conversion = unit.ConversionFactor.ValueComponent.wrappedValue + assert actual_conversion == expected_conversion + + target_unit = unit.ConversionFactor.UnitComponent + assert target_unit.is_a("IfcSIUnit") + assert target_unit.UnitType == "MASSUNIT" + assert target_unit.Name == "GRAM" + assert target_unit.Prefix == "KILO" + + def test_adding_time_units_creates_proper_timeunit(self): + time_units = [ + ("minute", 60), + ("hour", 3600), + ("day", 86400), + ] + + for name, expected_conversion in time_units: + unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name=name) + + assert unit.is_a("IfcConversionBasedUnit") + + assert unit.UnitType == "TIMEUNIT" + + assert unit.Name == name + + actual_conversion = unit.ConversionFactor.ValueComponent.wrappedValue + assert actual_conversion == expected_conversion + + target_unit = unit.ConversionFactor.UnitComponent + assert target_unit.is_a("IfcSIUnit") + assert target_unit.UnitType == "TIMEUNIT" + assert target_unit.Name == "SECOND" + assert target_unit.Prefix is None + + def test_mass_unit_integration_with_project(self): + ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject") + + kg_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="MASSUNIT", prefix="KILO") + tonne_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="tonne") + pound_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="pound") + + ifcopenshell.api.unit.assign_unit(self.file, units=[kg_unit]) + project_mass_unit = subject.get_project_unit(self.file, "MASSUNIT") + assert project_mass_unit == kg_unit + + unit_assignment = subject.get_unit_assignment(self.file) + assert unit_assignment + assigned_units = list(unit_assignment.Units or []) + assert kg_unit in assigned_units + + ifcopenshell.api.unit.assign_unit(self.file, units=[tonne_unit]) + project_mass_unit = subject.get_project_unit(self.file, "MASSUNIT") + assert project_mass_unit == tonne_unit + + unit_assignment = subject.get_unit_assignment(self.file) + assigned_units = list(unit_assignment.Units or []) + assert tonne_unit in assigned_units + + length_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT") + ifcopenshell.api.unit.assign_unit(self.file, units=[pound_unit, length_unit]) + + unit_assignment = subject.get_unit_assignment(self.file) + assigned_units = list(unit_assignment.Units or []) + assert pound_unit in assigned_units + assert length_unit in assigned_units + + def test_time_unit_integration_with_project(self): + ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject") + + second_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="TIMEUNIT") + minute_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="minute") + hour_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="hour") + + ifcopenshell.api.unit.assign_unit(self.file, units=[second_unit]) + project_time_unit = subject.get_project_unit(self.file, "TIMEUNIT") + assert project_time_unit == second_unit + + unit_assignment = subject.get_unit_assignment(self.file) + assert unit_assignment + assigned_units = list(unit_assignment.Units or []) + assert second_unit in assigned_units + + ifcopenshell.api.unit.assign_unit(self.file, units=[minute_unit]) + project_time_unit = subject.get_project_unit(self.file, "TIMEUNIT") + assert project_time_unit == minute_unit + + unit_assignment = subject.get_unit_assignment(self.file) + assigned_units = list(unit_assignment.Units or []) + assert minute_unit in assigned_units + + length_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT") + ifcopenshell.api.unit.assign_unit(self.file, units=[hour_unit, length_unit]) + + unit_assignment = subject.get_unit_assignment(self.file) + assigned_units = list(unit_assignment.Units or []) + assert hour_unit in assigned_units + assert length_unit in assigned_units + + def test_multiple_unit_types_can_coexist(self): + ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject") + + kg_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="MASSUNIT", prefix="KILO") + minute_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="minute") + meter_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT") + + ifcopenshell.api.unit.assign_unit(self.file, units=[kg_unit, minute_unit, meter_unit]) + + unit_assignment = subject.get_unit_assignment(self.file) + assigned_units = list(unit_assignment.Units or []) + + assert kg_unit in assigned_units + assert minute_unit in assigned_units + assert meter_unit in assigned_units + + assert subject.get_project_unit(self.file, "MASSUNIT") == kg_unit + assert subject.get_project_unit(self.file, "TIMEUNIT") == minute_unit + assert subject.get_project_unit(self.file, "LENGTHUNIT") == meter_unit + + def test_unknown_mass_or_time_units_fall_back_to_userdefined(self): + unknown_mass_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="unknown_mass_unit") + assert unknown_mass_unit.UnitType == "USERDEFINED" + + unknown_time_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="unknown_time_unit") + assert unknown_time_unit.UnitType == "USERDEFINED" + + def test_mass_units_individually(self): + tonne_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="tonne") + assert tonne_unit.UnitType == "MASSUNIT" + assert tonne_unit.ConversionFactor.ValueComponent.wrappedValue == 1000.0 + + pound_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="pound") + assert pound_unit.UnitType == "MASSUNIT" + assert pound_unit.ConversionFactor.ValueComponent.wrappedValue == 0.454 + + ounce_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="ounce") + assert ounce_unit.UnitType == "MASSUNIT" + assert ounce_unit.ConversionFactor.ValueComponent.wrappedValue == 0.02835 + + def test_time_units_individually(self): + minute_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="minute") + assert minute_unit.UnitType == "TIMEUNIT" + assert minute_unit.ConversionFactor.ValueComponent.wrappedValue == 60 + + hour_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="hour") + assert hour_unit.UnitType == "TIMEUNIT" + assert hour_unit.ConversionFactor.ValueComponent.wrappedValue == 3600 + + day_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="day") + assert day_unit.UnitType == "TIMEUNIT" + assert day_unit.ConversionFactor.ValueComponent.wrappedValue == 86400 + + +class TestMassAndTimeUnitDictionaries(test.bootstrap.IFC4): + def test_mass_units_in_imperial_types(self): + expected_mass_units = ["ounce", "pound", "ton UK", "ton US", "tonne"] + + def test_mass_units_in_imperial_types(self): + expected_mass_units = ["ounce", "pound", "ton UK", "ton US", "tonne"] + + for unit_name in expected_mass_units: + assert unit_name in subject.imperial_types + assert subject.imperial_types[unit_name] == "MASSUNIT" + + def test_time_units_in_imperial_types(self): + expected_time_units = ["minute", "hour", "day"] + + for unit_name in expected_time_units: + assert unit_name in subject.imperial_types + assert subject.imperial_types[unit_name] == "TIMEUNIT" + + def test_mass_units_have_conversion_factors(self): + expected_mass_conversions = { + "ounce": 0.02835, + "pound": 0.454, + "ton UK": 1016.0469088, + "ton US": 907.18474, + "tonne": 1000.0, + } + + for unit_name, expected_factor in expected_mass_conversions.items(): + assert unit_name in subject.si_conversions + assert subject.si_conversions[unit_name] == expected_factor + + def test_time_units_have_conversion_factors(self): + expected_time_conversions = { + "minute": 60, + "hour": 3600, + "day": 86400, + } + + for unit_name, expected_factor in expected_time_conversions.items(): + assert unit_name in subject.si_conversions + assert subject.si_conversions[unit_name] == expected_factor + + def test_mass_and_time_units_have_symbols(self): + expected_symbols = { + "ounce": "oz", + "pound": "lb", + "ton UK": "ton", + "ton US": "ton", + "tonne": "t", + "minute": "min", + "hour": "hr", + "day": "day", + } + + for unit_name, expected_symbol in expected_symbols.items(): + assert unit_name in subject.unit_symbols + assert subject.unit_symbols[unit_name] == expected_symbol From 169ca806c06608da134f0c0f64c6ca334750c7c2 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 10 Sep 2025 23:07:47 +0200 Subject: [PATCH 337/657] Updated with core developer feedback --- src/bonsai/test/core/test_unit.py | 209 ++++------------ .../ifcopenshell/api/unit/assign_unit.py | 74 +----- .../unit/test_add_conversion_based_unit.py | 108 ++++++++ .../test/util/test_unit.py | 230 ------------------ 4 files changed, 167 insertions(+), 454 deletions(-) diff --git a/src/bonsai/test/core/test_unit.py b/src/bonsai/test/core/test_unit.py index d758b7829c..00ffe1dd5e 100644 --- a/src/bonsai/test/core/test_unit.py +++ b/src/bonsai/test/core/test_unit.py @@ -32,45 +32,78 @@ class TestAssignSceneUnits: ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="prefix").should_be_called().will_return( "lengthunit" ) - ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix="prefix").should_be_called().will_return("areaunit") - ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix="prefix").should_be_called().will_return( "volumeunit" ) - + ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix="KILO").should_be_called().will_return("massunit") + ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None).should_be_called().will_return("timeunit") ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix="KILO").should_be_called().will_return("massunit") - - ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None).should_be_called().will_return("timeunit") - ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit", "planeangleunit"] ).should_be_called() subject.assign_scene_units(ifc, unit) def test_creating_and_assigning_imperial_units(self, ifc, unit): unit.is_scene_unit_metric().should_be_called().will_return(False) - unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("lengthname") - ifc.run("unit.add_conversion_based_unit", name="lengthname").should_be_called().will_return("lengthunit") - - unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("areaname") - ifc.run("unit.add_conversion_based_unit", name="areaname").should_be_called().will_return("areaunit") - - unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("volumename") - ifc.run("unit.add_conversion_based_unit", name="volumename").should_be_called().will_return("volumeunit") + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("foot") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square foot") + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic foot") + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("pound") + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("SECOND") + ifc.run("unit.add_conversion_based_unit", name="foot").should_be_called().will_return("lengthunit") + ifc.run("unit.add_conversion_based_unit", name="square foot").should_be_called().will_return("areaunit") + ifc.run("unit.add_conversion_based_unit", name="cubic foot").should_be_called().will_return("volumeunit") + ifc.run("unit.add_conversion_based_unit", name="pound").should_be_called().will_return("massunit") + ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None).should_be_called().will_return("timeunit") ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("massname") - ifc.run("unit.add_conversion_based_unit", name="massname").should_be_called().will_return("massunit") + ifc.run( + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit", "planeangleunit"] + ).should_be_called() + subject.assign_scene_units(ifc, unit) - unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("timename") - ifc.run("unit.add_conversion_based_unit", name="timename").should_be_called().will_return("timeunit") + def test_creating_metric_units_with_conversion_based_mass_and_time(self, ifc, unit): + unit.is_scene_unit_metric().should_be_called().will_return(True) + unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("MILLI") + unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return(None) + unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return(None) + unit.get_scene_unit_si_prefix("MASSUNIT").should_be_called().will_return("CONVERSION") + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("tonne") + unit.get_scene_unit_si_prefix("TIMEUNIT").should_be_called().will_return("CONVERSION") + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("minute") + + ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="MILLI").should_be_called().will_return("lengthunit") + ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix=None).should_be_called().will_return("areaunit") + ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix=None).should_be_called().will_return("volumeunit") + ifc.run("unit.add_conversion_based_unit", name="tonne").should_be_called().will_return("massunit") + ifc.run("unit.add_conversion_based_unit", name="minute").should_be_called().will_return("timeunit") + ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit", "planeangleunit"] + ).should_be_called() + subject.assign_scene_units(ifc, unit) + + def test_creating_imperial_units_with_conversion_based_units(self, ifc, unit): + unit.is_scene_unit_metric().should_be_called().will_return(False) + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("inch") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square inch") + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic inch") + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("ounce") + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("hour") + + ifc.run("unit.add_conversion_based_unit", name="inch").should_be_called().will_return("lengthunit") + ifc.run("unit.add_conversion_based_unit", name="square inch").should_be_called().will_return("areaunit") + ifc.run("unit.add_conversion_based_unit", name="cubic inch").should_be_called().will_return("volumeunit") + ifc.run("unit.add_conversion_based_unit", name="ounce").should_be_called().will_return("massunit") + ifc.run("unit.add_conversion_based_unit", name="hour").should_be_called().will_return("timeunit") + ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") + + ifc.run( + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit", "planeangleunit"] ).should_be_called() subject.assign_scene_units(ifc, unit) @@ -179,137 +212,3 @@ class TestEditUnit: unit.import_units().should_be_called() unit.clear_active_unit().should_be_called() subject.edit_unit(ifc, unit, unit="unit") - - -class TestAssignSceneUnitsWithMassAndTime: - def test_creating_and_assigning_metric_units_with_mass_and_time(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(True) - unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("prefix") - unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return("prefix") - unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return("prefix") - unit.get_scene_unit_si_prefix("MASSUNIT").should_be_called().will_return("KILO") - unit.get_scene_unit_si_prefix("TIMEUNIT").should_be_called().will_return("CONVERSION") - unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("minute") - - ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="prefix").should_be_called().will_return( - "lengthunit" - ) - ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix="prefix").should_be_called().will_return("areaunit") - ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix="prefix").should_be_called().will_return( - "volumeunit" - ) - ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix="KILO").should_be_called().will_return("massunit") - ifc.run("unit.add_conversion_based_unit", name="minute").should_be_called().will_return("timeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - - ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] - ).should_be_called() - subject.assign_scene_units(ifc, unit) - - def test_creating_and_assigning_imperial_units_with_mass_and_time(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(False) - unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("foot") - unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square foot") - unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic foot") - unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("pound") - unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("SECOND") - - ifc.run("unit.add_conversion_based_unit", name="foot").should_be_called().will_return("lengthunit") - ifc.run("unit.add_conversion_based_unit", name="square foot").should_be_called().will_return("areaunit") - ifc.run("unit.add_conversion_based_unit", name="cubic foot").should_be_called().will_return("volumeunit") - ifc.run("unit.add_conversion_based_unit", name="pound").should_be_called().will_return("massunit") - ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None).should_be_called().will_return("timeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - - ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] - ).should_be_called() - subject.assign_scene_units(ifc, unit) - - def test_creating_and_assigning_conversion_based_mass_units(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(False) - unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("foot") - unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square foot") - unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic foot") - unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("tonne") - unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("minute") - - ifc.run("unit.add_conversion_based_unit", name="foot").should_be_called().will_return("lengthunit") - ifc.run("unit.add_conversion_based_unit", name="square foot").should_be_called().will_return("areaunit") - ifc.run("unit.add_conversion_based_unit", name="cubic foot").should_be_called().will_return("volumeunit") - ifc.run("unit.add_conversion_based_unit", name="tonne").should_be_called().will_return("massunit") - ifc.run("unit.add_conversion_based_unit", name="minute").should_be_called().will_return("timeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - - ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] - ).should_be_called() - subject.assign_scene_units(ifc, unit) - - -class TestAddTimeUnit: - def test_adding_si_time_unit(self, ifc, unit): - ifc.run("unit.add_si_unit", unit_type="TIMEUNIT").should_be_called().will_return("unit") - unit.import_units().should_be_called() - assert subject.add_si_unit(ifc, unit, unit_type="TIMEUNIT") == "unit" - - def test_adding_conversion_based_time_unit_minute(self, ifc, unit): - ifc.run("unit.add_conversion_based_unit", name="minute").should_be_called().will_return("unit") - unit.import_units().should_be_called() - assert subject.add_conversion_based_unit(ifc, unit, name="minute") == "unit" - - def test_adding_conversion_based_time_unit_hour(self, ifc, unit): - ifc.run("unit.add_conversion_based_unit", name="hour").should_be_called().will_return("unit") - unit.import_units().should_be_called() - assert subject.add_conversion_based_unit(ifc, unit, name="hour") == "unit" - - def test_adding_conversion_based_time_unit_day(self, ifc, unit): - ifc.run("unit.add_conversion_based_unit", name="day").should_be_called().will_return("unit") - unit.import_units().should_be_called() - assert subject.add_conversion_based_unit(ifc, unit, name="day") == "unit" - - -class TestAssignMassAndTimeUnits: - def test_assigning_mass_unit(self, ifc, unit): - ifc.run("unit.assign_unit", units=["massunit"]).should_be_called() - unit.import_units().should_be_called() - subject.assign_unit(ifc, unit, unit="massunit") - - def test_assigning_time_unit(self, ifc, unit): - ifc.run("unit.assign_unit", units=["timeunit"]).should_be_called() - unit.import_units().should_be_called() - subject.assign_unit(ifc, unit, unit="timeunit") - - def test_assigning_multiple_mass_and_time_units(self, ifc, unit): - ifc.run("unit.assign_unit", units=["massunit"]).should_be_called() - unit.import_units().should_be_called() - ifc.run("unit.assign_unit", units=["timeunit"]).should_be_called() - unit.import_units().should_be_called() - - subject.assign_unit(ifc, unit, unit="massunit") - subject.assign_unit(ifc, unit, unit="timeunit") - - -class TestUnassignMassAndTimeUnits: - def test_unassigning_mass_unit(self, ifc, unit): - ifc.run("unit.unassign_unit", units=["massunit"]).should_be_called() - unit.import_units().should_be_called() - subject.unassign_unit(ifc, unit, unit="massunit") - - def test_unassigning_time_unit(self, ifc, unit): - ifc.run("unit.unassign_unit", units=["timeunit"]).should_be_called() - unit.import_units().should_be_called() - subject.unassign_unit(ifc, unit, unit="timeunit") - - -class TestRemoveMassAndTimeUnits: - def test_removing_mass_unit(self, ifc, unit): - ifc.run("unit.remove_unit", unit="massunit").should_be_called() - unit.import_units().should_be_called() - subject.remove_unit(ifc, unit, unit="massunit") - - def test_removing_time_unit(self, ifc, unit): - ifc.run("unit.remove_unit", unit="timeunit").should_be_called() - unit.import_units().should_be_called() - subject.remove_unit(ifc, unit, unit="timeunit") diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py index 58abfd4ea4..f9563410cd 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py @@ -27,8 +27,6 @@ def assign_unit( length: Optional[dict] = None, area: Optional[dict] = None, volume: Optional[dict] = None, - mass: Optional[dict] = None, - time: Optional[dict] = None, ) -> ifcopenshell.entity_instance: """Assign default project units @@ -53,19 +51,16 @@ def assign_unit( # You need a project before you can assign units. ifcopenshell.api.root.create_entity(model, ifc_class="IfcProject") - # Millimeters, square meters, kilograms, and seconds + # Create units explicitly length = ifcopenshell.api.unit.add_si_unit(model, unit_type="LENGTHUNIT", prefix="MILLI") area = ifcopenshell.api.unit.add_si_unit(model, unit_type="AREAUNIT") mass = ifcopenshell.api.unit.add_si_unit(model, unit_type="MASSUNIT", prefix="KILO") - time = ifcopenshell.api.unit.add_si_unit(model, unit_type="TIMEUNIT") + time = ifcopenshell.api.unit.add_conversion_based_unit(model, name="minute") - # Make it our default units, if we are doing a metric building - ifcopenshell.api.unit.assign_unit(model, units=[length, area]) + # Assign all units to the project + ifcopenshell.api.unit.assign_unit(model, units=[length, area, mass, time]) - # Alternatively, you may specify without any arguments to - # automatically create millimeters, square meters, and cubic meters - # as a convenience for testing purposes. Sorry imperial folks, we - # prioritise metric here. + # Alternatively, for basic metric units (length, area, volume only) ifcopenshell.api.unit.assign_unit(model) """ usecase = Usecase() @@ -75,8 +70,6 @@ def assign_unit( usecase.settings["length"] = length or {"is_metric": True, "raw": "MILLIMETERS"} usecase.settings["area"] = area or {"is_metric": True, "raw": "METERS"} usecase.settings["volume"] = volume or {"is_metric": True, "raw": "METERS"} - usecase.settings["mass"] = mass or {"is_metric": True, "raw": "KILOGRAM"} - usecase.settings["time"] = time or {"is_metric": True, "raw": "SECOND"} return usecase.execute() @@ -122,45 +115,7 @@ class Usecase: units.add(unit) unit_assignment.Units = list(units) - def create_time_conversion_unit(self, name: str, factor: float) -> ifcopenshell.entity_instance: - """Create a conversion-based time unit""" - dimensional_exponents = self.file.createIfcDimensionalExponents(0, 0, 1, 0, 0, 0, 0) - si_unit = self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") - value_component = self.file.create_entity("IfcReal", **{"wrappedValue": factor}) - conversion_factor = self.file.createIfcMeasureWithUnit(value_component, si_unit) - return self.file.createIfcConversionBasedUnit(dimensional_exponents, "TIMEUNIT", name, conversion_factor) - - def create_mass_conversion_unit(self, name: str, factor: float) -> ifcopenshell.entity_instance: - """Create a conversion-based mass unit""" - dimensional_exponents = self.file.createIfcDimensionalExponents(0, 1, 0, 0, 0, 0, 0) # Mass dimension - si_unit = self.file.createIfcSIUnit(None, "MASSUNIT", "KILO", "GRAM") - value_component = self.file.create_entity("IfcReal", **{"wrappedValue": factor}) - conversion_factor = self.file.createIfcMeasureWithUnit(value_component, si_unit) - return self.file.createIfcConversionBasedUnit(dimensional_exponents, "MASSUNIT", name, conversion_factor) - def create_metric_unit(self, unit_type: str, data: dict) -> ifcopenshell.entity_instance: - if unit_type == "mass": - if data["raw"] == "KILOGRAM": - return self.file.createIfcSIUnit(None, "MASSUNIT", "KILO", "GRAM") - elif data["raw"] == "GRAM": - return self.file.createIfcSIUnit(None, "MASSUNIT", None, "GRAM") - elif data["raw"] == "TON": - return self.file.createIfcSIUnit(None, "MASSUNIT", "MEGA", "GRAM") - else: - return self.file.createIfcSIUnit(None, "MASSUNIT", "KILO", "GRAM") - - elif unit_type == "time": - if data["raw"] == "SECOND": - return self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") - elif data["raw"] == "MINUTE": - return self.create_time_conversion_unit("minute", 60.0) - elif data["raw"] == "HOUR": - return self.create_time_conversion_unit("hour", 3600.0) - elif data["raw"] == "DAY": - return self.create_time_conversion_unit("day", 86400.0) - else: - return self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") - type_prefix = "" if unit_type == "area": type_prefix = "SQUARE_" @@ -183,25 +138,6 @@ class Usecase: elif unit_type == "volume": dimensional_exponents = self.file.createIfcDimensionalExponents(3, 0, 0, 0, 0, 0, 0) name_prefix = "cubic" - elif unit_type == "mass": - if data["raw"] == "POUND": - return self.create_mass_conversion_unit("pound", 0.45359237) - elif data["raw"] == "OUNCE": - return self.create_mass_conversion_unit("ounce", 0.0283495) - else: - return self.create_mass_conversion_unit("pound", 0.45359237) - - elif unit_type == "time": - if data["raw"] == "SECOND": - return self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") - elif data["raw"] == "MINUTE": - return self.create_time_conversion_unit("minute", 60.0) - elif data["raw"] == "HOUR": - return self.create_time_conversion_unit("hour", 3600.0) - elif data["raw"] == "DAY": - return self.create_time_conversion_unit("day", 86400.0) - else: - return self.file.createIfcSIUnit(None, "TIMEUNIT", None, "SECOND") si_unit = self.file.createIfcSIUnit( None, diff --git a/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py b/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py index 03a8a7edfd..87ed50ec8f 100644 --- a/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py @@ -18,6 +18,7 @@ import test.bootstrap import ifcopenshell.api.unit +import ifcopenshell.util.unit as subject class TestAddConversionBasedUnitIFC2X3(test.bootstrap.IFC2X3): @@ -61,3 +62,110 @@ class TestAddConversionBasedUnitIFC4(test.bootstrap.IFC4, TestAddConversionBased assert si_unit.Prefix is None assert si_unit.Name == "KELVIN" assert unit.ConversionOffset == -459.67 + + def test_adding_mass_units_creates_proper_massunit(self): + mass_units = [ + ("tonne", 1000.0), + ("pound", 0.454), + ("ounce", 0.02835), + ("ton UK", 1016.0469088), + ("ton US", 907.18474), + ] + + for name, expected_conversion in mass_units: + unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name=name) + + assert unit.is_a("IfcConversionBasedUnit") + assert unit.UnitType == "MASSUNIT" + assert unit.Name == name + + actual_conversion = unit.ConversionFactor.ValueComponent.wrappedValue + assert actual_conversion == expected_conversion + + target_unit = unit.ConversionFactor.UnitComponent + assert target_unit.is_a("IfcSIUnit") + assert target_unit.UnitType == "MASSUNIT" + assert target_unit.Name == "GRAM" + assert target_unit.Prefix == "KILO" + + def test_adding_time_units_creates_proper_timeunit(self): + time_units = [ + ("minute", 60), + ("hour", 3600), + ("day", 86400), + ] + + for name, expected_conversion in time_units: + unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name=name) + + assert unit.is_a("IfcConversionBasedUnit") + assert unit.UnitType == "TIMEUNIT" + assert unit.Name == name + + actual_conversion = unit.ConversionFactor.ValueComponent.wrappedValue + assert actual_conversion == expected_conversion + + target_unit = unit.ConversionFactor.UnitComponent + assert target_unit.is_a("IfcSIUnit") + assert target_unit.UnitType == "TIMEUNIT" + assert target_unit.Name == "SECOND" + assert target_unit.Prefix is None + + def test_unknown_units_fall_back_to_userdefined(self): + unknown_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="unknown_unit") + assert unknown_unit.UnitType == "USERDEFINED" + assert unknown_unit.Name == "unknown_unit" + + def test_mass_units_in_imperial_types(self): + expected_mass_units = ["ounce", "pound", "ton UK", "ton US", "tonne"] + + for unit_name in expected_mass_units: + assert unit_name in subject.imperial_types + assert subject.imperial_types[unit_name] == "MASSUNIT" + + def test_time_units_in_imperial_types(self): + expected_time_units = ["minute", "hour", "day"] + + for unit_name in expected_time_units: + assert unit_name in subject.imperial_types + assert subject.imperial_types[unit_name] == "TIMEUNIT" + + def test_mass_units_have_conversion_factors(self): + expected_mass_conversions = { + "ounce": 0.02835, + "pound": 0.454, + "ton UK": 1016.0469088, + "ton US": 907.18474, + "tonne": 1000.0, + } + + for unit_name, expected_factor in expected_mass_conversions.items(): + assert unit_name in subject.si_conversions + assert subject.si_conversions[unit_name] == expected_factor + + def test_time_units_have_conversion_factors(self): + expected_time_conversions = { + "minute": 60, + "hour": 3600, + "day": 86400, + } + + for unit_name, expected_factor in expected_time_conversions.items(): + assert unit_name in subject.si_conversions + assert subject.si_conversions[unit_name] == expected_factor + + def test_mass_and_time_units_have_symbols(self): + expected_symbols = { + "ounce": "oz", + "pound": "lb", + "ton UK": "ton", + "ton US": "ton", + "tonne": "t", + "minute": "min", + "hour": "hr", + "day": "day", + } + + for unit_name, expected_symbol in expected_symbols.items(): + assert unit_name in subject.unit_symbols + assert subject.unit_symbols[unit_name] == expected_symbol diff --git a/src/ifcopenshell-python/test/util/test_unit.py b/src/ifcopenshell-python/test/util/test_unit.py index ff7b7eede5..6e28a28e70 100644 --- a/src/ifcopenshell-python/test/util/test_unit.py +++ b/src/ifcopenshell-python/test/util/test_unit.py @@ -391,233 +391,3 @@ class TestConvertFileLengthUnitsIFC4(test.bootstrap.IFC4, TestConvertFileLengthU class TestConvertFileLengthUnitsIFC4X3(test.bootstrap.IFC4X3, TestConvertFileLengthUnits): pass - - -class TestAddConversionBasedUnitMassAndTime(test.bootstrap.IFC4): - def test_adding_mass_units_creates_proper_massunit(self): - mass_units = [ - ("tonne", 1000.0), - ("pound", 0.454), - ("ounce", 0.02835), - ("ton UK", 1016.0469088), - ("ton US", 907.18474), - ] - - for name, expected_conversion in mass_units: - unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name=name) - - assert unit.is_a("IfcConversionBasedUnit") - - assert unit.UnitType == "MASSUNIT" - - assert unit.Name == name - - actual_conversion = unit.ConversionFactor.ValueComponent.wrappedValue - assert actual_conversion == expected_conversion - - target_unit = unit.ConversionFactor.UnitComponent - assert target_unit.is_a("IfcSIUnit") - assert target_unit.UnitType == "MASSUNIT" - assert target_unit.Name == "GRAM" - assert target_unit.Prefix == "KILO" - - def test_adding_time_units_creates_proper_timeunit(self): - time_units = [ - ("minute", 60), - ("hour", 3600), - ("day", 86400), - ] - - for name, expected_conversion in time_units: - unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name=name) - - assert unit.is_a("IfcConversionBasedUnit") - - assert unit.UnitType == "TIMEUNIT" - - assert unit.Name == name - - actual_conversion = unit.ConversionFactor.ValueComponent.wrappedValue - assert actual_conversion == expected_conversion - - target_unit = unit.ConversionFactor.UnitComponent - assert target_unit.is_a("IfcSIUnit") - assert target_unit.UnitType == "TIMEUNIT" - assert target_unit.Name == "SECOND" - assert target_unit.Prefix is None - - def test_mass_unit_integration_with_project(self): - ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject") - - kg_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="MASSUNIT", prefix="KILO") - tonne_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="tonne") - pound_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="pound") - - ifcopenshell.api.unit.assign_unit(self.file, units=[kg_unit]) - project_mass_unit = subject.get_project_unit(self.file, "MASSUNIT") - assert project_mass_unit == kg_unit - - unit_assignment = subject.get_unit_assignment(self.file) - assert unit_assignment - assigned_units = list(unit_assignment.Units or []) - assert kg_unit in assigned_units - - ifcopenshell.api.unit.assign_unit(self.file, units=[tonne_unit]) - project_mass_unit = subject.get_project_unit(self.file, "MASSUNIT") - assert project_mass_unit == tonne_unit - - unit_assignment = subject.get_unit_assignment(self.file) - assigned_units = list(unit_assignment.Units or []) - assert tonne_unit in assigned_units - - length_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT") - ifcopenshell.api.unit.assign_unit(self.file, units=[pound_unit, length_unit]) - - unit_assignment = subject.get_unit_assignment(self.file) - assigned_units = list(unit_assignment.Units or []) - assert pound_unit in assigned_units - assert length_unit in assigned_units - - def test_time_unit_integration_with_project(self): - ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject") - - second_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="TIMEUNIT") - minute_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="minute") - hour_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="hour") - - ifcopenshell.api.unit.assign_unit(self.file, units=[second_unit]) - project_time_unit = subject.get_project_unit(self.file, "TIMEUNIT") - assert project_time_unit == second_unit - - unit_assignment = subject.get_unit_assignment(self.file) - assert unit_assignment - assigned_units = list(unit_assignment.Units or []) - assert second_unit in assigned_units - - ifcopenshell.api.unit.assign_unit(self.file, units=[minute_unit]) - project_time_unit = subject.get_project_unit(self.file, "TIMEUNIT") - assert project_time_unit == minute_unit - - unit_assignment = subject.get_unit_assignment(self.file) - assigned_units = list(unit_assignment.Units or []) - assert minute_unit in assigned_units - - length_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT") - ifcopenshell.api.unit.assign_unit(self.file, units=[hour_unit, length_unit]) - - unit_assignment = subject.get_unit_assignment(self.file) - assigned_units = list(unit_assignment.Units or []) - assert hour_unit in assigned_units - assert length_unit in assigned_units - - def test_multiple_unit_types_can_coexist(self): - ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject") - - kg_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="MASSUNIT", prefix="KILO") - minute_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="minute") - meter_unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT") - - ifcopenshell.api.unit.assign_unit(self.file, units=[kg_unit, minute_unit, meter_unit]) - - unit_assignment = subject.get_unit_assignment(self.file) - assigned_units = list(unit_assignment.Units or []) - - assert kg_unit in assigned_units - assert minute_unit in assigned_units - assert meter_unit in assigned_units - - assert subject.get_project_unit(self.file, "MASSUNIT") == kg_unit - assert subject.get_project_unit(self.file, "TIMEUNIT") == minute_unit - assert subject.get_project_unit(self.file, "LENGTHUNIT") == meter_unit - - def test_unknown_mass_or_time_units_fall_back_to_userdefined(self): - unknown_mass_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="unknown_mass_unit") - assert unknown_mass_unit.UnitType == "USERDEFINED" - - unknown_time_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="unknown_time_unit") - assert unknown_time_unit.UnitType == "USERDEFINED" - - def test_mass_units_individually(self): - tonne_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="tonne") - assert tonne_unit.UnitType == "MASSUNIT" - assert tonne_unit.ConversionFactor.ValueComponent.wrappedValue == 1000.0 - - pound_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="pound") - assert pound_unit.UnitType == "MASSUNIT" - assert pound_unit.ConversionFactor.ValueComponent.wrappedValue == 0.454 - - ounce_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="ounce") - assert ounce_unit.UnitType == "MASSUNIT" - assert ounce_unit.ConversionFactor.ValueComponent.wrappedValue == 0.02835 - - def test_time_units_individually(self): - minute_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="minute") - assert minute_unit.UnitType == "TIMEUNIT" - assert minute_unit.ConversionFactor.ValueComponent.wrappedValue == 60 - - hour_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="hour") - assert hour_unit.UnitType == "TIMEUNIT" - assert hour_unit.ConversionFactor.ValueComponent.wrappedValue == 3600 - - day_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="day") - assert day_unit.UnitType == "TIMEUNIT" - assert day_unit.ConversionFactor.ValueComponent.wrappedValue == 86400 - - -class TestMassAndTimeUnitDictionaries(test.bootstrap.IFC4): - def test_mass_units_in_imperial_types(self): - expected_mass_units = ["ounce", "pound", "ton UK", "ton US", "tonne"] - - def test_mass_units_in_imperial_types(self): - expected_mass_units = ["ounce", "pound", "ton UK", "ton US", "tonne"] - - for unit_name in expected_mass_units: - assert unit_name in subject.imperial_types - assert subject.imperial_types[unit_name] == "MASSUNIT" - - def test_time_units_in_imperial_types(self): - expected_time_units = ["minute", "hour", "day"] - - for unit_name in expected_time_units: - assert unit_name in subject.imperial_types - assert subject.imperial_types[unit_name] == "TIMEUNIT" - - def test_mass_units_have_conversion_factors(self): - expected_mass_conversions = { - "ounce": 0.02835, - "pound": 0.454, - "ton UK": 1016.0469088, - "ton US": 907.18474, - "tonne": 1000.0, - } - - for unit_name, expected_factor in expected_mass_conversions.items(): - assert unit_name in subject.si_conversions - assert subject.si_conversions[unit_name] == expected_factor - - def test_time_units_have_conversion_factors(self): - expected_time_conversions = { - "minute": 60, - "hour": 3600, - "day": 86400, - } - - for unit_name, expected_factor in expected_time_conversions.items(): - assert unit_name in subject.si_conversions - assert subject.si_conversions[unit_name] == expected_factor - - def test_mass_and_time_units_have_symbols(self): - expected_symbols = { - "ounce": "oz", - "pound": "lb", - "ton UK": "ton", - "ton US": "ton", - "tonne": "t", - "minute": "min", - "hour": "hr", - "day": "day", - } - - for unit_name, expected_symbol in expected_symbols.items(): - assert unit_name in subject.unit_symbols - assert subject.unit_symbols[unit_name] == expected_symbol From 93579b8f663ed597776e29203d3e10f0104d5c81 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 15 Sep 2025 23:38:26 +0200 Subject: [PATCH 338/657] Cleanup based on core developer's feedback --- src/bonsai/test/core/test_unit.py | 8 +- .../ifcopenshell/api/unit/assign_unit.py | 15 ++- .../unit/test_add_conversion_based_unit.py | 101 ++++-------------- 3 files changed, 36 insertions(+), 88 deletions(-) diff --git a/src/bonsai/test/core/test_unit.py b/src/bonsai/test/core/test_unit.py index 00ffe1dd5e..818ad72021 100644 --- a/src/bonsai/test/core/test_unit.py +++ b/src/bonsai/test/core/test_unit.py @@ -41,7 +41,7 @@ class TestAssignSceneUnits: ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit", "planeangleunit"] + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] ).should_be_called() subject.assign_scene_units(ifc, unit) @@ -61,7 +61,7 @@ class TestAssignSceneUnits: ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit", "planeangleunit"] + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] ).should_be_called() subject.assign_scene_units(ifc, unit) @@ -83,7 +83,7 @@ class TestAssignSceneUnits: ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit", "planeangleunit"] + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] ).should_be_called() subject.assign_scene_units(ifc, unit) @@ -103,7 +103,7 @@ class TestAssignSceneUnits: ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit", "planeangleunit"] + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] ).should_be_called() subject.assign_scene_units(ifc, unit) diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py index f9563410cd..5861e4248a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py @@ -51,16 +51,21 @@ def assign_unit( # You need a project before you can assign units. ifcopenshell.api.root.create_entity(model, ifc_class="IfcProject") - # Create units explicitly + # Millimeters and square meters length = ifcopenshell.api.unit.add_si_unit(model, unit_type="LENGTHUNIT", prefix="MILLI") area = ifcopenshell.api.unit.add_si_unit(model, unit_type="AREAUNIT") - mass = ifcopenshell.api.unit.add_si_unit(model, unit_type="MASSUNIT", prefix="KILO") - time = ifcopenshell.api.unit.add_conversion_based_unit(model, name="minute") - # Assign all units to the project + # Optionally, add mass and time units + mass = ifcopenshell.api.unit.add_si_unit(model, unit_type="MASSUNIT", prefix="KILO") + time = ifcopenshell.api.unit.add_si_unit(model, unit_type="TIMEUNIT") + + # Make these the default units for the project ifcopenshell.api.unit.assign_unit(model, units=[length, area, mass, time]) - # Alternatively, for basic metric units (length, area, volume only) + # Alternatively, you may specify without any arguments to + # automatically create millimeters, square meters, and cubic meters + # as a convenience for testing purposes. Sorry imperial folks, we + # prioritise metric here. ifcopenshell.api.unit.assign_unit(model) """ usecase = Usecase() diff --git a/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py b/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py index 87ed50ec8f..93a5002396 100644 --- a/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py @@ -18,8 +18,6 @@ import test.bootstrap import ifcopenshell.api.unit -import ifcopenshell.util.unit as subject - class TestAddConversionBasedUnitIFC2X3(test.bootstrap.IFC2X3): def test_run(self): @@ -41,28 +39,6 @@ class TestAddConversionBasedUnitIFC2X3(test.bootstrap.IFC2X3): assert si_unit.Prefix is None assert si_unit.Name == "METRE" - -class TestAddConversionBasedUnitIFC4(test.bootstrap.IFC4, TestAddConversionBasedUnitIFC2X3): - def test_adding_a_unit_with_offset(self): - unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="fahrenheit") - assert unit.is_a("IfcConversionBasedUnitWithOffset") - assert unit.Dimensions.LengthExponent == 0 - assert unit.Dimensions.MassExponent == 0 - assert unit.Dimensions.TimeExponent == 0 - assert unit.Dimensions.ElectricCurrentExponent == 0 - assert unit.Dimensions.ThermodynamicTemperatureExponent == 1 - assert unit.Dimensions.AmountOfSubstanceExponent == 0 - assert unit.Dimensions.LuminousIntensityExponent == 0 - assert unit.UnitType == "THERMODYNAMICTEMPERATUREUNIT" - assert unit.Name == "fahrenheit" - assert unit.ConversionFactor.ValueComponent.wrappedValue == 1.8 - si_unit = unit.ConversionFactor.UnitComponent - assert si_unit.is_a("IfcSIUnit") - assert si_unit.UnitType == "THERMODYNAMICTEMPERATUREUNIT" - assert si_unit.Prefix is None - assert si_unit.Name == "KELVIN" - assert unit.ConversionOffset == -459.67 - def test_adding_mass_units_creates_proper_massunit(self): mass_units = [ ("tonne", 1000.0), @@ -111,61 +87,28 @@ class TestAddConversionBasedUnitIFC4(test.bootstrap.IFC4, TestAddConversionBased assert target_unit.Name == "SECOND" assert target_unit.Prefix is None +class TestAddConversionBasedUnitIFC4(test.bootstrap.IFC4, TestAddConversionBasedUnitIFC2X3): + def test_adding_a_unit_with_offset(self): + unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="fahrenheit") + assert unit.is_a("IfcConversionBasedUnitWithOffset") + assert unit.Dimensions.LengthExponent == 0 + assert unit.Dimensions.MassExponent == 0 + assert unit.Dimensions.TimeExponent == 0 + assert unit.Dimensions.ElectricCurrentExponent == 0 + assert unit.Dimensions.ThermodynamicTemperatureExponent == 1 + assert unit.Dimensions.AmountOfSubstanceExponent == 0 + assert unit.Dimensions.LuminousIntensityExponent == 0 + assert unit.UnitType == "THERMODYNAMICTEMPERATUREUNIT" + assert unit.Name == "fahrenheit" + assert unit.ConversionFactor.ValueComponent.wrappedValue == 1.8 + si_unit = unit.ConversionFactor.UnitComponent + assert si_unit.is_a("IfcSIUnit") + assert si_unit.UnitType == "THERMODYNAMICTEMPERATUREUNIT" + assert si_unit.Prefix is None + assert si_unit.Name == "KELVIN" + assert unit.ConversionOffset == -459.67 + def test_unknown_units_fall_back_to_userdefined(self): unknown_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="unknown_unit") assert unknown_unit.UnitType == "USERDEFINED" - assert unknown_unit.Name == "unknown_unit" - - def test_mass_units_in_imperial_types(self): - expected_mass_units = ["ounce", "pound", "ton UK", "ton US", "tonne"] - - for unit_name in expected_mass_units: - assert unit_name in subject.imperial_types - assert subject.imperial_types[unit_name] == "MASSUNIT" - - def test_time_units_in_imperial_types(self): - expected_time_units = ["minute", "hour", "day"] - - for unit_name in expected_time_units: - assert unit_name in subject.imperial_types - assert subject.imperial_types[unit_name] == "TIMEUNIT" - - def test_mass_units_have_conversion_factors(self): - expected_mass_conversions = { - "ounce": 0.02835, - "pound": 0.454, - "ton UK": 1016.0469088, - "ton US": 907.18474, - "tonne": 1000.0, - } - - for unit_name, expected_factor in expected_mass_conversions.items(): - assert unit_name in subject.si_conversions - assert subject.si_conversions[unit_name] == expected_factor - - def test_time_units_have_conversion_factors(self): - expected_time_conversions = { - "minute": 60, - "hour": 3600, - "day": 86400, - } - - for unit_name, expected_factor in expected_time_conversions.items(): - assert unit_name in subject.si_conversions - assert subject.si_conversions[unit_name] == expected_factor - - def test_mass_and_time_units_have_symbols(self): - expected_symbols = { - "ounce": "oz", - "pound": "lb", - "ton UK": "ton", - "ton US": "ton", - "tonne": "t", - "minute": "min", - "hour": "hr", - "day": "day", - } - - for unit_name, expected_symbol in expected_symbols.items(): - assert unit_name in subject.unit_symbols - assert subject.unit_symbols[unit_name] == expected_symbol + assert unknown_unit.Name == "unknown_unit" \ No newline at end of file From b1c4822315c483086724e49780b26c05db3d9d8c Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 15 Sep 2025 23:42:34 +0200 Subject: [PATCH 339/657] black formatting --- .../test/api/unit/test_add_conversion_based_unit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py b/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py index 93a5002396..a29b9b2ad8 100644 --- a/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py @@ -19,6 +19,7 @@ import test.bootstrap import ifcopenshell.api.unit + class TestAddConversionBasedUnitIFC2X3(test.bootstrap.IFC2X3): def test_run(self): unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="foot") @@ -87,6 +88,7 @@ class TestAddConversionBasedUnitIFC2X3(test.bootstrap.IFC2X3): assert target_unit.Name == "SECOND" assert target_unit.Prefix is None + class TestAddConversionBasedUnitIFC4(test.bootstrap.IFC4, TestAddConversionBasedUnitIFC2X3): def test_adding_a_unit_with_offset(self): unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="fahrenheit") @@ -111,4 +113,4 @@ class TestAddConversionBasedUnitIFC4(test.bootstrap.IFC4, TestAddConversionBased def test_unknown_units_fall_back_to_userdefined(self): unknown_unit = ifcopenshell.api.unit.add_conversion_based_unit(self.file, name="unknown_unit") assert unknown_unit.UnitType == "USERDEFINED" - assert unknown_unit.Name == "unknown_unit" \ No newline at end of file + assert unknown_unit.Name == "unknown_unit" From f902c7a50af601b4882f77539b755dda447ceab1 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 16 Sep 2025 18:24:20 +0200 Subject: [PATCH 340/657] ui change to add or not add mass and time units --- .../bonsai/bim/module/project/operator.py | 6 -- src/bonsai/bonsai/bim/module/project/ui.py | 15 +++-- src/bonsai/bonsai/bim/prop.py | 5 ++ src/bonsai/bonsai/core/tool.py | 2 +- src/bonsai/bonsai/core/unit.py | 57 ++++++++++--------- src/bonsai/bonsai/tool/unit.py | 6 ++ src/bonsai/test/core/test_unit.py | 31 ++++++++++ 7 files changed, 83 insertions(+), 39 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 34d6cdb91d..26850ce85a 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -98,8 +98,6 @@ class NewProject(bpy.types.Operator): bpy.context.scene.unit_settings.length_unit = "METERS" bim_props.area_unit = "SQUARE_METRE" bim_props.volume_unit = "CUBIC_METRE" - bim_props.mass_unit = "KILOGRAM" - bim_props.time_unit = "SECOND" pprops.template_file = "0" elif self.preset == "metric_mm": pprops.export_schema = "IFC4" @@ -107,8 +105,6 @@ class NewProject(bpy.types.Operator): bpy.context.scene.unit_settings.length_unit = "MILLIMETERS" bim_props.area_unit = "SQUARE_METRE" bim_props.volume_unit = "CUBIC_METRE" - bim_props.mass_unit = "KILOGRAM" - bim_props.time_unit = "SECOND" pprops.template_file = "0" elif self.preset == "imperial_ft": pprops.export_schema = "IFC4" @@ -116,8 +112,6 @@ class NewProject(bpy.types.Operator): bpy.context.scene.unit_settings.length_unit = "FEET" bim_props.area_unit = "square foot" bim_props.volume_unit = "cubic foot" - bim_props.mass_unit = "POUND" - bim_props.time_unit = "SECOND" pprops.template_file = "0" elif self.preset == "demo": pprops.export_schema = "IFC4" diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 731a9d0688..ed6e65e674 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -357,15 +357,20 @@ class BIM_PT_new_project_wizard(Panel): row = self.layout.row() row.prop(props, "volume_unit", text="Volume Unit") row = self.layout.row() - row.prop(props, "mass_unit", text="Mass Unit") - row = self.layout.row() - row.prop(props, "time_unit", text="Time Unit") prop_with_search(self.layout, pprops, "template_file", text="Template") - + self.layout.use_property_split = False + row = self.layout.row() + label = "Add Mass and Time Units" if not props.add_mass_time_units else "Remove Mass and Time Units" + row.prop(props, "add_mass_time_units", toggle=True, text=label) + self.layout.use_property_split = True + if props.add_mass_time_units: + row = self.layout.row() + row.prop(props, "mass_unit", text="Mass Unit") + row = self.layout.row() + row.prop(props, "time_unit", text="Time Unit") row = self.layout.row() row.operator("bim.create_project") - class BIM_PT_project_library(Panel): bl_label = "Project Library" bl_idname = "BIM_PT_project_library" diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 7b24d2a1d1..c5a5bd9300 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -586,6 +586,11 @@ class BIMProperties(PropertyGroup): ], name="IFC Volume Unit", ) + add_mass_time_units: bpy.props.BoolProperty( + name="Add Mass and Time Units", + description="Enable to define mass and time units for the project", + default=False + ) mass_unit: EnumProperty( items=[ ("KILOGRAM", "Kilogram", "Kilograms"), diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index 7fcfd25fde..d8e4dd2396 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -1123,7 +1123,7 @@ class Unit: def set_active_unit(cls, unit): pass def get_project_currency_unit(cls): pass def get_currency_name(cls): pass - + def add_mass_and_time_units(cls): pass @interface class Voider: diff --git a/src/bonsai/bonsai/core/unit.py b/src/bonsai/bonsai/core/unit.py index 2e8e627cb7..a4c52508f1 100644 --- a/src/bonsai/bonsai/core/unit.py +++ b/src/bonsai/bonsai/core/unit.py @@ -28,40 +28,43 @@ if TYPE_CHECKING: def assign_scene_units(ifc: type[tool.Ifc], unit: type[tool.Unit]) -> None: if unit.is_scene_unit_metric(): - prefix = unit.get_scene_unit_si_prefix("LENGTHUNIT") - lengthunit = ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix=prefix) - prefix = unit.get_scene_unit_si_prefix("AREAUNIT") - areaunit = ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix=prefix) - prefix = unit.get_scene_unit_si_prefix("VOLUMEUNIT") - volumeunit = ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix=prefix) + lengthunit = ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix=unit.get_scene_unit_si_prefix("LENGTHUNIT")) + areaunit = ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix=unit.get_scene_unit_si_prefix("AREAUNIT")) + volumeunit = ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix=unit.get_scene_unit_si_prefix("VOLUMEUNIT")) + planeangleunit = ifc.run("unit.add_conversion_based_unit", name="degree") + units = [lengthunit, areaunit, volumeunit, planeangleunit] - prefix = unit.get_scene_unit_si_prefix("MASSUNIT") - if prefix == "CONVERSION": - mass_unit_name = unit.get_scene_unit_name("MASSUNIT") - massunit = ifc.run("unit.add_conversion_based_unit", name=mass_unit_name.lower()) - else: - massunit = ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix=prefix) + if unit.add_mass_and_time_units(): + prefix = unit.get_scene_unit_si_prefix("MASSUNIT") + if prefix == "CONVERSION": + massunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("MASSUNIT").lower()) + else: + massunit = ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix=prefix) + prefix = unit.get_scene_unit_si_prefix("TIMEUNIT") + if prefix == "CONVERSION": + timeunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("TIMEUNIT").lower()) + else: + timeunit = ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=prefix) + units += [massunit, timeunit] - prefix = unit.get_scene_unit_si_prefix("TIMEUNIT") - if prefix == "CONVERSION": - time_unit_name = unit.get_scene_unit_name("TIMEUNIT") - timeunit = ifc.run("unit.add_conversion_based_unit", name=time_unit_name.lower()) - else: - timeunit = ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=prefix) else: lengthunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("LENGTHUNIT")) areaunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("AREAUNIT")) volumeunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("VOLUMEUNIT")) - massunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("MASSUNIT").lower()) + planeangleunit = ifc.run("unit.add_conversion_based_unit", name="degree") + units = [lengthunit, areaunit, volumeunit, planeangleunit] - time_unit_name = unit.get_scene_unit_name("TIMEUNIT") - if time_unit_name == "SECOND": - timeunit = ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None) - else: - timeunit = ifc.run("unit.add_conversion_based_unit", name=time_unit_name.lower()) - - planeangleunit = ifc.run("unit.add_conversion_based_unit", name="degree") - ifc.run("unit.assign_unit", units=[lengthunit, areaunit, volumeunit, planeangleunit, massunit, timeunit]) + if unit.add_mass_and_time_units(): + massunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("MASSUNIT").lower()) + time_unit_name = unit.get_scene_unit_name("TIMEUNIT") + if time_unit_name == "SECOND": + timeunit = ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None) + else: + timeunit = ifc.run("unit.add_conversion_based_unit", name=time_unit_name.lower()) + units += [massunit, timeunit] + print("Add mass and time units:", unit.add_mass_and_time_units()) + print("Assigning units:", units) + ifc.run("unit.assign_unit", units=units) def assign_unit(ifc: type[tool.Ifc], unit_tool: type[tool.Unit], unit: ifcopenshell.entity_instance) -> None: diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index a3c9569d62..c982c43523 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -499,3 +499,9 @@ class Unit(bonsai.core.tool.Unit): elif ifc_class == "IfcMonetaryUnit": return "COPY_ID" return "MOD_MESHDEFORM" + + @classmethod + def add_mass_and_time_units(cls) -> bool: + """Return True if the user wants to add mass and time units, False otherwise.""" + bim_props = tool.Blender.get_bim_props() + return getattr(bim_props, "add_mass_time_units", False) diff --git a/src/bonsai/test/core/test_unit.py b/src/bonsai/test/core/test_unit.py index 818ad72021..2bbd783cc3 100644 --- a/src/bonsai/test/core/test_unit.py +++ b/src/bonsai/test/core/test_unit.py @@ -26,6 +26,7 @@ class TestAssignSceneUnits: unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("prefix") unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return("prefix") unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return("prefix") + unit.add_mass_and_time_units().should_be_called().will_return(True) unit.get_scene_unit_si_prefix("MASSUNIT").should_be_called().will_return("KILO") unit.get_scene_unit_si_prefix("TIMEUNIT").should_be_called().will_return(None) @@ -45,11 +46,25 @@ class TestAssignSceneUnits: ).should_be_called() subject.assign_scene_units(ifc, unit) + def test_creating_and_assigning_metric_units_without_mass_and_time(self, ifc, unit): + unit.is_scene_unit_metric().should_be_called().will_return(True) + unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("CENTI") + unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return("CENTI") + unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return("CENTI") + unit.add_mass_and_time_units().should_be_called().will_return(False) + ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="CENTI").should_be_called().will_return("lengthunit") + ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix="CENTI").should_be_called().will_return("areaunit") + ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix="CENTI").should_be_called().will_return("volumeunit") + ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") + ifc.run("unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit"]).should_be_called() + subject.assign_scene_units(ifc, unit) + def test_creating_and_assigning_imperial_units(self, ifc, unit): unit.is_scene_unit_metric().should_be_called().will_return(False) unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("foot") unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square foot") unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic foot") + unit.add_mass_and_time_units().should_be_called().will_return(True) unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("pound") unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("SECOND") @@ -65,11 +80,26 @@ class TestAssignSceneUnits: ).should_be_called() subject.assign_scene_units(ifc, unit) + def test_creating_and_assigning_imperial_units_without_mass_and_time(self, ifc, unit): + unit.is_scene_unit_metric().should_be_called().will_return(False) + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("yard") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square yard") + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic yard") + unit.add_mass_and_time_units().should_be_called().will_return(False) + ifc.run("unit.add_conversion_based_unit", name="yard").should_be_called().will_return("lengthunit") + ifc.run("unit.add_conversion_based_unit", name="square yard").should_be_called().will_return("areaunit") + ifc.run("unit.add_conversion_based_unit", name="cubic yard").should_be_called().will_return("volumeunit") + ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") + ifc.run("unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit"]).should_be_called() + subject.assign_scene_units(ifc, unit) + + def test_creating_metric_units_with_conversion_based_mass_and_time(self, ifc, unit): unit.is_scene_unit_metric().should_be_called().will_return(True) unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("MILLI") unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return(None) unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return(None) + unit.add_mass_and_time_units().should_be_called().will_return(True) unit.get_scene_unit_si_prefix("MASSUNIT").should_be_called().will_return("CONVERSION") unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("tonne") unit.get_scene_unit_si_prefix("TIMEUNIT").should_be_called().will_return("CONVERSION") @@ -92,6 +122,7 @@ class TestAssignSceneUnits: unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("inch") unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square inch") unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic inch") + unit.add_mass_and_time_units().should_be_called().will_return(True) unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("ounce") unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("hour") From f222a8ba4f9fdb67af173f9c1940c8267fd8eddf Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 29 Sep 2025 09:13:18 +0200 Subject: [PATCH 341/657] Add mass and time units as a panel to project wizard UI --- .../bonsai/bim/module/project/__init__.py | 2 ++ src/bonsai/bonsai/bim/module/project/ui.py | 29 +++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/__init__.py b/src/bonsai/bonsai/bim/module/project/__init__.py index 1316eb0325..7e1bdb7ff0 100644 --- a/src/bonsai/bonsai/bim/module/project/__init__.py +++ b/src/bonsai/bonsai/bim/module/project/__init__.py @@ -114,6 +114,7 @@ def register(): kmi = km.keymap_items.new("bim.save_project", "S", "PRESS", ctrl=True) kmi.properties.should_save_as = False addon_keymaps.append((km, kmi)) + bpy.utils.register_class(ui.BIM_PT_mass_time_units) def unregister(): @@ -131,3 +132,4 @@ def unregister(): for km, kmi in addon_keymaps: km.keymap_items.remove(kmi) addon_keymaps.clear() + bpy.utils.unregister_class(ui.BIM_PT_mass_time_units) diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index ed6e65e674..f1b087e34b 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -358,19 +358,30 @@ class BIM_PT_new_project_wizard(Panel): row.prop(props, "volume_unit", text="Volume Unit") row = self.layout.row() prop_with_search(self.layout, pprops, "template_file", text="Template") - self.layout.use_property_split = False - row = self.layout.row() - label = "Add Mass and Time Units" if not props.add_mass_time_units else "Remove Mass and Time Units" - row.prop(props, "add_mass_time_units", toggle=True, text=label) self.layout.use_property_split = True - if props.add_mass_time_units: - row = self.layout.row() - row.prop(props, "mass_unit", text="Mass Unit") - row = self.layout.row() - row.prop(props, "time_unit", text="Time Unit") row = self.layout.row() row.operator("bim.create_project") +class BIM_PT_mass_time_units(Panel): + bl_label = "Mass and Time Units" + bl_idname = "BIM_PT_mass_time_units" + bl_options = {"DEFAULT_CLOSED"} + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "scene" + bl_parent_id = "BIM_PT_new_project_wizard" + + def draw(self, context): + layout = self.layout + props = tool.Blender.get_bim_props() + label = "Add Mass and Time Units" if not props.add_mass_time_units else "Remove Mass and Time Units" + layout.prop(props, "add_mass_time_units", toggle=True, text=label) + if props.add_mass_time_units: + row = layout.row() + row.prop(props, "mass_unit", text="Mass Unit") + row = layout.row() + row.prop(props, "time_unit", text="Time Unit") + class BIM_PT_project_library(Panel): bl_label = "Project Library" bl_idname = "BIM_PT_project_library" From a98cad161e1e773d2f6aebfce758a775ec427e2b Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 29 Sep 2025 09:31:00 +0200 Subject: [PATCH 342/657] Refactor mass and time units panel into collapsible section using .panel method in project wizard UI --- .../bonsai/bim/module/project/__init__.py | 2 -- src/bonsai/bonsai/bim/module/project/ui.py | 31 ++++++++----------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/__init__.py b/src/bonsai/bonsai/bim/module/project/__init__.py index 7e1bdb7ff0..1316eb0325 100644 --- a/src/bonsai/bonsai/bim/module/project/__init__.py +++ b/src/bonsai/bonsai/bim/module/project/__init__.py @@ -114,7 +114,6 @@ def register(): kmi = km.keymap_items.new("bim.save_project", "S", "PRESS", ctrl=True) kmi.properties.should_save_as = False addon_keymaps.append((km, kmi)) - bpy.utils.register_class(ui.BIM_PT_mass_time_units) def unregister(): @@ -132,4 +131,3 @@ def unregister(): for km, kmi in addon_keymaps: km.keymap_items.remove(kmi) addon_keymaps.clear() - bpy.utils.unregister_class(ui.BIM_PT_mass_time_units) diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index f1b087e34b..b0dae84afe 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -358,29 +358,24 @@ class BIM_PT_new_project_wizard(Panel): row.prop(props, "volume_unit", text="Volume Unit") row = self.layout.row() prop_with_search(self.layout, pprops, "template_file", text="Template") + + header, body = self.layout.panel("Mass and Time Units", default_closed=True) + if header: + header.label(text="Mass and Time Units") + if body: + label = "Add Mass and Time Units" if not props.add_mass_time_units else "Remove Mass and Time Units" + body.prop(props, "add_mass_time_units", toggle=True, text=label) + if props.add_mass_time_units: + row = body.row() + row.prop(props, "mass_unit", text="Mass Unit") + row = body.row() + row.prop(props, "time_unit", text="Time Unit") + self.layout.use_property_split = True row = self.layout.row() row.operator("bim.create_project") -class BIM_PT_mass_time_units(Panel): - bl_label = "Mass and Time Units" - bl_idname = "BIM_PT_mass_time_units" - bl_options = {"DEFAULT_CLOSED"} - bl_space_type = "PROPERTIES" - bl_region_type = "WINDOW" - bl_context = "scene" - bl_parent_id = "BIM_PT_new_project_wizard" - def draw(self, context): - layout = self.layout - props = tool.Blender.get_bim_props() - label = "Add Mass and Time Units" if not props.add_mass_time_units else "Remove Mass and Time Units" - layout.prop(props, "add_mass_time_units", toggle=True, text=label) - if props.add_mass_time_units: - row = layout.row() - row.prop(props, "mass_unit", text="Mass Unit") - row = layout.row() - row.prop(props, "time_unit", text="Time Unit") class BIM_PT_project_library(Panel): bl_label = "Project Library" From 5294fa1cbe0276a73ee28f9a3e303d5d5fb8cc53 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 15 Dec 2025 13:39:46 +0100 Subject: [PATCH 343/657] Add preference for mass and time units visibility in project wizard --- src/bonsai/bonsai/bim/module/project/ui.py | 24 +++++++++++----------- src/bonsai/bonsai/bim/prop.py | 2 +- src/bonsai/bonsai/bim/ui.py | 8 ++++++++ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index b0dae84afe..6fe5b55604 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -359,24 +359,24 @@ class BIM_PT_new_project_wizard(Panel): row = self.layout.row() prop_with_search(self.layout, pprops, "template_file", text="Template") - header, body = self.layout.panel("Mass and Time Units", default_closed=True) - if header: - header.label(text="Mass and Time Units") - if body: - label = "Add Mass and Time Units" if not props.add_mass_time_units else "Remove Mass and Time Units" - body.prop(props, "add_mass_time_units", toggle=True, text=label) - if props.add_mass_time_units: - row = body.row() - row.prop(props, "mass_unit", text="Mass Unit") - row = body.row() - row.prop(props, "time_unit", text="Time Unit") + if tool.Blender.get_addon_preferences().mass_time_units_in_wizard: + header, body = self.layout.panel("Mass and Time Units", default_closed=True) + if header: + header.label(text="Mass and Time Units") + if body: + label = "Add Mass and Time Units" if not props.add_mass_time_units else "Remove Mass and Time Units" + body.prop(props, "add_mass_time_units", toggle=True, text=label) + if props.add_mass_time_units: + row = body.row() + row.prop(props, "mass_unit", text="Mass Unit") + row = body.row() + row.prop(props, "time_unit", text="Time Unit") self.layout.use_property_split = True row = self.layout.row() row.operator("bim.create_project") - class BIM_PT_project_library(Panel): bl_label = "Project Library" bl_idname = "BIM_PT_project_library" diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index c5a5bd9300..08137a133e 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -589,7 +589,7 @@ class BIMProperties(PropertyGroup): add_mass_time_units: bpy.props.BoolProperty( name="Add Mass and Time Units", description="Enable to define mass and time units for the project", - default=False + default=False, ) mass_unit: EnumProperty( items=[ diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index b7ed2180c1..d41546904c 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -684,6 +684,12 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): default=False, ) + mass_time_units_in_wizard: BoolProperty( + name="Mass and time units in project wizard", + description="Show mass and time units section in the new project wizard panel", + default=False, + ) + if TYPE_CHECKING: svg2pdf_command: str svg2dxf_command: str @@ -720,6 +726,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): doc: DocPreferences default_parameters: DefaultParameters container_hide_show_isolate: bool + mass_time_units_in_wizard: bool def draw(self, context: bpy.types.Context) -> None: layout = self.layout @@ -901,6 +908,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "container_hide_show_isolate") + layout.prop(self, "mass_time_units_in_wizard") # Scene panel groups From 4a2058ebc6cf7586a2f100b3add0a96e57fe13cc Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 12:46:15 +0500 Subject: [PATCH 344/657] build-all - remove debug print --- nix/build-all.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/nix/build-all.py b/nix/build-all.py index ff53ce6d4b..b548b874c8 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -405,8 +405,6 @@ if any(f.startswith("py-") for f in flags): if any(f.startswith("occt-") for f in flags): OCCT_VERSION = next(f.split("-", 1)[1] for f in flags if f.startswith("occt-")) -print(OCCT_VERSION) - if explicit_targets: targets = {dep for target in explicit_targets for dep in gather_dependencies(target)} else: From 46dc6cf08bd124a25b1086c59b49672b9dbc82a2 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 12:52:10 +0500 Subject: [PATCH 345/657] ci.yml - use `depth 1` for swig --- .github/workflows/ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d488c6764b..001417cd7a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -150,9 +150,8 @@ jobs: # Remove default swig to avoid conflicts. sudo apt remove --purge swig swig4.0 sudo apt-get install -y libpcre2-dev bison - git clone https://github.com/swig/swig + git clone https://github.com/swig/swig --branch v4.1.0 --depth 1 cd swig - git checkout v4.1.0 mkdir build && cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ From 57197dd439197cda90ee5e0e4a0c156605e08036 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 16:32:47 +0500 Subject: [PATCH 346/657] cmake export - export `OpenCASCADE_INTERFACE` target To avoid issues if user provided OCC_INCLUDE_DIR and OCC_LIBRARY_DIR. --- cmake/CMakeLists.txt | 2 -- cmake/FindOpenCASCADE.cmake | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f1ae9f66bf..e95d40574d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -208,8 +208,6 @@ endforeach() if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) - # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OpenCASCADE_LIBRARIES used by kernel generic cmake file - set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) add_definitions(-DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) list(APPEND GEOMETRY_KERNELS opencascade) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index f02b2559e3..9a52524d1e 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -145,8 +145,10 @@ if(OCCT_STATIC) endif() endif() -add_library(OpenCASCADE_INTERFACE INTERFACE IMPORTED) +add_library(OpenCASCADE_INTERFACE INTERFACE) target_include_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_INCLUDE_DIR}") target_link_libraries(OpenCASCADE_INTERFACE INTERFACE ${OpenCASCADE_LIBRARIES}) target_link_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_LIBRARY_DIR}") set(OpenCASCADE_LIBRARIES OpenCASCADE_INTERFACE) +install(TARGETS OpenCASCADE_INTERFACE + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) From c7b75d28631e39f0a0a666c4d3d5448b3b523f4e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 15:25:22 +0500 Subject: [PATCH 347/657] ci.yml - add packages to use occt cmake config --- .github/workflows/ci.yml | 10 ++++++++-- src/examples/CMakeLists.txt | 3 +-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 001417cd7a..7bc12b9f3d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,6 +55,11 @@ jobs: - name: Install C++ dependencies run: | sudo apt update + # `occt-misc` is only needed for 22.04, since it has cmake configs. + # In 24.04+, the needed files were moved `libocct-foundation-dev` and `occt-misc` can be removed. + # Other libs in `OCCT_CMAKE_DEPS` are needed only for cmake config to work properly, they're not used directly. + OCCT_CMAKE_DEPS="occt-misc libocct-draw-dev tcl-dev tk-dev libxi-dev" + sudo apt-get install --no-install-recommends \ git cmake gcc g++ \ libboost-date-time-dev \ @@ -67,6 +72,7 @@ jobs: libpcre3-dev libxml2-dev \ libtbb-dev nlohmann-json3-dev \ libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev libocct-data-exchange-dev \ + ${OCCT_CMAKE_DEPS} \ libhdf5-dev libcgal-dev libeigen3-dev - name: ccache @@ -209,8 +215,8 @@ jobs: cmake .. -DCMAKE_BUILD_TYPE=Release cmake --build . ./IfcParseExamples "../IfcParseExamples_test.ifc" - # ./IfcOpenHouse - # ./IfcAdvancedHouse + ./IfcOpenHouse + ./IfcAdvancedHouse ./IfcAlignment ./IfcSimplifiedAlignment diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index fdf5608328..9133b77b7c 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -55,8 +55,7 @@ if(SCHEMA_VERSIONS MATCHES "2x3") endif() install(TARGETS IfcParseExamples) - # TODO: enable after figuring out where to get get OCCT config for CI. - if(WITH_OPENCASCADE AND NOT STANDALONE_PROJECT) + if(WITH_OPENCASCADE) add_executable(IfcOpenHouse IfcOpenHouse.cpp) add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) add_library(IfcHouseInterface INTERFACE) From 4138d9f4642b578f167fa0076cfe12d84024d039 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 17:03:27 +0500 Subject: [PATCH 348/657] ci.yml - drop OCCT cmake variables preferring cmake config Just found that it's available from `occt-misc` package. --- .github/workflows/ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7bc12b9f3d..2a8a4d962f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -171,15 +171,11 @@ jobs: echo ${{ env.pythonLocation }} mkdir build && cd build - # Ubuntu 22.04's libocct-foundation-dev package doesn't have Config.cmake, so we provide OCC paths directly. - # In later versions of Ubuntu, this can be simplified and the OCC paths can be removed. cmake \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/usr \ -DCMAKE_SYSTEM_PREFIX_PATH=/usr \ - -DOCC_INCLUDE_DIR=/usr/include/opencascade \ - -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \ -DPYTHON_EXECUTABLE:FILEPATH=${{ env.pythonLocation }}/bin/python \ -DPYTHON_INCLUDE_DIR:PATH=${{ env.pythonLocation }}/include/python3.11 \ -DUSE_MMAP=On \ From 87e4846f71293d68a3f67e6a83fa4d0f2186360f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 17:05:58 +0500 Subject: [PATCH 349/657] ci.yml - use ccache for examples too --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2a8a4d962f..6fcaf11951 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -208,7 +208,9 @@ jobs: run: | cd src/examples mkdir build && cd build - cmake .. -DCMAKE_BUILD_TYPE=Release + cmake .. -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache cmake --build . ./IfcParseExamples "../IfcParseExamples_test.ifc" ./IfcOpenHouse From cd87217f4e4cc13a5613769f458aa7186b1fa0a5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 17:33:15 +0500 Subject: [PATCH 350/657] build scripts - don't provide cxx-std-17 As it's automatically set by the cmake script. --- .github/workflows/ci-ifcopenshell-docker.yml | 1 - .github/workflows/ci.yml | 1 - .github/workflows/release.yml | 1 - conda/build.bat | 5 ++--- conda/build.sh | 1 - nix/build-all.py | 1 - 6 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index 5d79e5fbb1..52764cd4b6 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -44,7 +44,6 @@ jobs: cmake \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_INSTALL_PREFIX=$PWD/install/ \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/usr \ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6fcaf11951..ad00406ed8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -172,7 +172,6 @@ jobs: mkdir build && cd build cmake \ - -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/usr \ -DCMAKE_SYSTEM_PREFIX_PATH=/usr \ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8050c10e87..b5cbb4f28c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -46,7 +46,6 @@ jobs: mkdir build && cd build cmake \ -DCMAKE_INSTALL_PREFIX=$PWD/install/ \ - -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/usr \ -DCMAKE_SYSTEM_PREFIX_PATH=/usr \ diff --git a/conda/build.bat b/conda/build.bat index fe8cef01c1..242bc7d683 100644 --- a/conda/build.bat +++ b/conda/build.bat @@ -9,7 +9,6 @@ set LIBXML2="%LIBRARY_PREFIX%/lib/libxml2.lib" cmake -G "Ninja" ^ -D SCHEMA_VERSIONS="2x3;4;4x1;4x3_add2" ^ -D CMAKE_BUILD_TYPE:STRING=Release ^ - -D CMAKE_CXX_STANDARD=17 ^ -D CMAKE_INSTALL_PREFIX:FILEPATH="%LIBRARY_PREFIX%" ^ -D CMAKE_PREFIX_PATH:FILEPATH="%LIBRARY_PREFIX%" ^ -D CMAKE_SYSTEM_PREFIX_PATH:FILEPATH="%LIBRARY_PREFIX%" ^ @@ -43,7 +42,7 @@ cmake -G "Ninja" ^ -D Boost_INCLUDE_DIR:FILEPATH="%LIBRARY_PREFIX%\include" ^ -D Boost_USE_STATIC_LIBS:BOOL=OFF ^ ../cmake - + if errorlevel 1 exit 1 ninja install -j 1 @@ -52,4 +51,4 @@ if errorlevel 1 exit 1 python %RECIPE_DIR%/update_version_init.py %PKG_VERSION% %SP_DIR%/ifcopenshell/__init__.py -if errorlevel 1 exit 1 \ No newline at end of file +if errorlevel 1 exit 1 diff --git a/conda/build.sh b/conda/build.sh index 571b6959f8..132bcf2be9 100644 --- a/conda/build.sh +++ b/conda/build.sh @@ -16,7 +16,6 @@ cmake ${CMAKE_ARGS} -G Ninja \ -DSCHEMA_VERSIONS="2x3;4;4x1;4x3_add2" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_CXX_STANDARD=17 \ ${CMAKE_PLATFORM_FLAGS[@]} \ -DCMAKE_PREFIX_PATH=$PREFIX \ -DCMAKE_SYSTEM_PREFIX_PATH=$PREFIX \ diff --git a/nix/build-all.py b/nix/build-all.py index b548b874c8..3bd12885c3 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1330,7 +1330,6 @@ os.makedirs(executables_dir, exist_ok=True) cmake_args = [ - "-DCMAKE_CXX_STANDARD=17", "-DUSE_MMAP=OFF", "-DBUILD_EXAMPLES=OFF", "-DBUILD_SHARED_LIBS=" + OFF_ON[not BUILD_STATIC], From 621cc4f039df390503b3bf41553ab56027ff2b65 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 17:34:24 +0500 Subject: [PATCH 351/657] build scripts - don't provide ccache explicitly as it's autodetected --- .github/workflows/ci-ifcopenshell-docker.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index 52764cd4b6..d6663ff198 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -42,8 +42,6 @@ jobs: run: | mkdir build && cd build cmake \ - -DCMAKE_C_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_INSTALL_PREFIX=$PWD/install/ \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/usr \ From deb6243ce546d9ef098bef26133a5ff3563f11b7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 18:21:59 +0500 Subject: [PATCH 352/657] cmake - use `INCLUDES DESTINATION` for includes paths export As it's more idiomatic. --- src/ifcparse/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index 5da3182406..e3bd50fb5b 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -32,7 +32,6 @@ set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES}) add_library(IfcParse ${IFCPARSE_FILES}) target_compile_definitions(IfcParse PUBLIC ${SCHEMA_DEFINITIONS}) -target_include_directories(IfcParse PUBLIC $) set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS @@ -60,4 +59,5 @@ target_link_libraries(IfcParse ${ROCKSDB_LIBRARIES}) install(TARGETS IfcParse EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcparse" + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) From bf2c27528c641a6fcfe9ff420adf3763e8cbdeff Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 18:27:17 +0500 Subject: [PATCH 353/657] cmake - fix issue with using cmake occt packages <7.7.0 --- cmake/FindOpenCASCADE.cmake | 7 +++++++ src/examples/CMakeLists.txt | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index 9a52524d1e..d035c868ed 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -39,6 +39,13 @@ if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) mark_as_advanced(OpenCASCADE_DIR) message(STATUS "Found OpenCASCADE config: ${OpenCASCADE_DIR}") + if(OpenCASCADE_VERSION VERSION_LESS "7.7.0") + # cmake configs < 7.7.0 were not adding include directories to targets automatically. + set_target_properties(TKernel PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}" + ) + endif() + if(OpenCASCADE_VERSION VERSION_LESS "7.9.0") # Bug in OCCT cmake configs < 7.9.0 - missing linked library. list(APPEND OpenCASCADE_LIBRARIES WSOCK32.lib) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 9133b77b7c..be3a3e42d9 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -65,6 +65,13 @@ if(SCHEMA_VERSIONS MATCHES "2x3") find_package(CGAL CONFIG REQUIRED) find_package(OpenCASCADE CONFIG REQUIRED) + if(OpenCASCADE_VERSION VERSION_LESS "7.7.0") + # cmake configs < 7.7.0 were not adding include directories to targets automatically. + set_target_properties(TKernel PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}" + ) + endif() + target_link_libraries(IfcHouseInterface INTERFACE IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer) else() target_link_libraries(IfcHouseInterface INTERFACE IfcParse geometry_serializer) From b42581b2230284ff3aaec14049073b012f9c92b8 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 15 Dec 2025 18:43:48 +0500 Subject: [PATCH 354/657] cmake - fix WSOCK32 lib required for OCCT on Unix (ce7fdcc) --- cmake/FindOpenCASCADE.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index d035c868ed..64ce0427a7 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -46,7 +46,7 @@ if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) ) endif() - if(OpenCASCADE_VERSION VERSION_LESS "7.9.0") + if(OpenCASCADE_VERSION VERSION_LESS "7.9.0" AND WIN32) # Bug in OCCT cmake configs < 7.9.0 - missing linked library. list(APPEND OpenCASCADE_LIBRARIES WSOCK32.lib) endif() From cf5ffad9af7dc911d1a3c9a90767fb8c950f7dbc Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 15 Dec 2025 13:18:29 -0600 Subject: [PATCH 355/657] feat(drawing): support multiple file selection in Add Reference Enable importing multiple .svg reference files at once using standard Blender multi-select (Shift/Ctrl+click). Includes backward compatibility and test coverage. --- .../bonsai/bim/module/drawing/operator.py | 15 ++++- src/bonsai/test/tool/test_drawing.py | 66 +++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 9c687641bd..e3726d5073 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3050,10 +3050,21 @@ class AddReference(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): filter_glob: bpy.props.StringProperty(default="*.svg", options={"HIDDEN"}) use_relative_path: bpy.props.BoolProperty(name="Use Relative Path", default=True) filename_ext = ".svg" + + files: bpy.props.CollectionProperty(type=bpy.types.OperatorFileListElement) + directory: bpy.props.StringProperty(subtype='DIR_PATH') def _execute(self, context): - filepath = tool.Ifc.get_uri(self.filepath, use_relative_path=self.use_relative_path) - core.add_document(tool.Ifc, tool.Drawing, "REFERENCE", uri=filepath) + # Handle both single and multiple file selection + if self.files: + for file_elem in self.files: + filepath = os.path.join(self.directory, file_elem.name) + uri = tool.Ifc.get_uri(filepath, use_relative_path=self.use_relative_path) + core.add_document(tool.Ifc, tool.Drawing, "REFERENCE", uri=uri) + else: + # Fallback for single file (backward compatibility) + filepath = tool.Ifc.get_uri(self.filepath, use_relative_path=self.use_relative_path) + core.add_document(tool.Ifc, tool.Drawing, "REFERENCE", uri=filepath) class RemoveReference(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/test/tool/test_drawing.py b/src/bonsai/test/tool/test_drawing.py index 040dfb8dbb..28f95614f8 100644 --- a/src/bonsai/test/tool/test_drawing.py +++ b/src/bonsai/test/tool/test_drawing.py @@ -927,3 +927,69 @@ class TestAddReferenceImage(NewFile): uv_node = material_nodes["Texture Coordinate"] assert len(uv_node.outputs["Generated"].links[:]) == 1 + +class TestAddReference(NewFile): + def test_add_single_reference(self): + """Test adding a single reference file (backward compatibility)""" + bpy.ops.bim.create_project() + ifc_path = Path("test/files/temp/test.ifc").absolute() + bpy.ops.bim.save_project(filepath=str(ifc_path), should_save_as=True) + + # Create a temporary SVG file + svg_path = Path("test/files/temp/reference.svg").absolute() + svg_path.parent.mkdir(parents=True, exist_ok=True) + with open(svg_path, "w") as f: + f.write('') + + try: + # Add single reference + bpy.ops.bim.add_reference(filepath=str(svg_path)) + + # Verify reference was added + ifc = tool.Ifc.get() + references = [doc for doc in ifc.by_type("IfcDocumentInformation") if doc.Scope == "REFERENCE"] + assert len(references) == 1 + assert references[0].Name == "reference" + finally: + # Cleanup + if svg_path.exists(): + svg_path.unlink() + + def test_add_multiple_references(self): + """Test adding multiple reference files at once""" + bpy.ops.bim.create_project() + ifc_path = Path("test/files/temp/test.ifc").absolute() + bpy.ops.bim.save_project(filepath=str(ifc_path), should_save_as=True) + + # Create temporary SVG files + temp_dir = Path("test/files/temp").absolute() + temp_dir.mkdir(parents=True, exist_ok=True) + + svg_files = [] + for i in range(3): + svg_path = temp_dir / f"reference_{i}.svg" + with open(svg_path, "w") as f: + f.write('') + svg_files.append(svg_path) + + try: + # Test by directly calling core.add_document multiple times + # (simulating what the operator does with multiple files) + ifc = tool.Ifc.get() + for svg_file in svg_files: + uri = tool.Ifc.get_uri(str(svg_file), use_relative_path=True) + from bonsai.bim import core + core.drawing.add_document(tool.Ifc, tool.Drawing, "REFERENCE", uri=uri) + + # Verify all references were added + references = [doc for doc in ifc.by_type("IfcDocumentInformation") if doc.Scope == "REFERENCE"] + assert len(references) == 3 + + reference_names = {ref.Name for ref in references} + expected_names = {f"reference_{i}" for i in range(3)} + assert reference_names == expected_names + finally: + # Cleanup + for svg_file in svg_files: + if svg_file.exists(): + svg_file.unlink() From fdf741b2099ae5dacfcfe3645eb9c31e40ebfc60 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 16 Dec 2025 09:26:28 +0100 Subject: [PATCH 356/657] Add description to Image Scaling Tool operator for clarity + black --- src/bonsai/bonsai/bim/import_ifc.py | 15 ++--- .../bonsai/bim/module/drawing/operator.py | 55 +++++++++---------- .../bonsai/bim/module/project/__init__.py | 2 +- .../bonsai/bim/module/project/operator.py | 51 ++++++++--------- .../bonsai/bim/module/project/workspace.py | 15 +++-- 5 files changed, 71 insertions(+), 67 deletions(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 027e220992..05bcbed01a 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -895,38 +895,39 @@ class IfcImporter: material = obj.data.materials[0] if material.use_nodes and material.node_tree: for node in material.node_tree.nodes: - if node.type == 'TEX_IMAGE' and node.image: + if node.type == "TEX_IMAGE" and node.image: image = node.image break if image: import bmesh + bm = bmesh.new() bm.from_mesh(obj.data) if not bm.loops.layers.uv: uv_layer = bm.loops.layers.uv.new() else: uv_layer = bm.loops.layers.uv.active - + if bm.verts: min_x = min(v.co.x for v in bm.verts) max_x = max(v.co.x for v in bm.verts) min_y = min(v.co.y for v in bm.verts) max_y = max(v.co.y for v in bm.verts) - + width = max_x - min_x height = max_y - min_y - + for face in bm.faces: for loop in face.loops: vert = loop.vert u = (vert.co.x - min_x) / width if width > 0 else 0.5 v = (vert.co.y - min_y) / height if height > 0 else 0.5 - + u = max(0.0, min(1.0, u)) v = max(0.0, min(1.0, v)) - + loop[uv_layer].uv = (u, v) - + bm.to_mesh(obj.data) bm.free() obj.data.update() diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 7397c93f63..31a3b90932 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3688,7 +3688,7 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): description="Existing object name to add a style with reference image to. If not provided will create a new object.", options={"SKIP_SAVE"}, ) - + x_length: bpy.props.FloatProperty( name="X Length", description="Width of the reference image in project units", @@ -3698,20 +3698,20 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): precision=3, ) y_length: bpy.props.FloatProperty( - name="Y Length", + name="Y Length", description="Height of the reference image in project units", default=1.0, min=0.001, soft_min=0.01, precision=3, ) - + show_dimensions_dialog: bpy.props.BoolProperty(default=False, options={"HIDDEN", "SKIP_SAVE"}) def draw(self, context): layout = self.layout - - if getattr(self, 'show_dimensions_dialog', False): + + if getattr(self, "show_dimensions_dialog", False): if tool.Ifc.get(): length_unit = ifcopenshell.util.unit.get_project_unit(tool.Ifc.get(), "LENGTHUNIT") if length_unit: @@ -3733,47 +3733,47 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): layout.label(text="to use relative paths.") layout.prop(self, "override_existing_image") layout.prop(self, "use_existing_object_by_name") - + def invoke(self, context, event): - if not getattr(self, 'show_dimensions_dialog', False): + if not getattr(self, "show_dimensions_dialog", False): context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} + return {"RUNNING_MODAL"} else: return context.window_manager.invoke_props_dialog(self) def execute(self, context): - if not getattr(self, 'show_dimensions_dialog', False): + if not getattr(self, "show_dimensions_dialog", False): abs_path = Path(self.filepath).absolute().resolve() if self.override_existing_image: params = {"check_existing": True, "force_reload": True} else: params = {"check_existing": False} - + try: image = load_image(abs_path.name, str(abs_path.parent), **params) - + image_width_px = image.size[0] image_height_px = image.size[1] aspect_ratio = image_width_px / image_height_px - + if aspect_ratio >= 1.0: self.x_length = 1.0 self.y_length = 1.0 / aspect_ratio else: self.x_length = aspect_ratio self.y_length = 1.0 - + bpy.data.images.remove(image) - + except Exception as e: - self.report({'ERROR'}, f"Failed to load image: {str(e)}") - return {'CANCELLED'} - + self.report({"ERROR"}, f"Failed to load image: {str(e)}") + return {"CANCELLED"} + self.show_dimensions_dialog = True return context.window_manager.invoke_props_dialog(self) - + return self._execute(context) - + def _execute(self, context): space = tool.Blender.get_view3d_space() if space.shading.color_type != "TEXTURE": @@ -3795,7 +3795,7 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): def bm_add_image_plane(mesh): bm = tool.Blender.get_bmesh_for_mesh(mesh, clean=True) - + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file) plane_scale = Vector((self.x_length * unit_scale / 2.0, self.y_length * unit_scale / 2.0, 1.0)) matrix = Matrix.LocRotScale(None, None, plane_scale) @@ -3810,16 +3810,16 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): max_x = max(v.co.x for v in bm.verts) min_y = min(v.co.y for v in bm.verts) max_y = max(v.co.y for v in bm.verts) - + width = max_x - min_x height = max_y - min_y - + for face in bm.faces: for loop in face.loops: vert = loop.vert u = (vert.co.x - min_x) / width if width > 0 else 0.5 v = (vert.co.y - min_y) / height if height > 0 else 0.5 - + u = max(0.0, min(1.0, u)) v = max(0.0, min(1.0, v)) loop[uv_layer].uv = (u, v) @@ -3844,7 +3844,6 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): ) tool.Blender.remove_data_block(temp_mesh) - element = tool.Ifc.get_entity(obj) if element and isinstance(obj.data, bpy.types.Mesh): representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") @@ -3853,9 +3852,9 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): num_faces = len(obj.data.polygons) obj.data["ios_item_ids"] = [item_id] * num_faces tool.Blender.Attribute.fill_attribute(obj.data, "ios_item_ids", "FACE", "INT", [item_id] * num_faces) - + for item in representation.Items: - if item.is_a('IfcPolygonalFaceSet') and item.Coordinates: + if item.is_a("IfcPolygonalFaceSet") and item.Coordinates: new_coords = [] for vertex in obj.data.vertices: co = obj.matrix_world @ vertex.co @@ -3901,8 +3900,8 @@ class AddReferenceImage(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): ) tool.Style.reload_material_from_ifc(material) tool.Geometry.record_object_materials(obj) - - return {'FINISHED'} + + return {"FINISHED"} class ConvertSVGToDXF(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/project/__init__.py b/src/bonsai/bonsai/bim/module/project/__init__.py index bae6a119d6..6db688185c 100644 --- a/src/bonsai/bonsai/bim/module/project/__init__.py +++ b/src/bonsai/bonsai/bim/module/project/__init__.py @@ -131,4 +131,4 @@ def unregister(): if kc: for km, kmi in addon_keymaps: km.keymap_items.remove(kmi) - addon_keymaps.clear() \ No newline at end of file + addon_keymaps.clear() diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 30eedd038e..55246171b0 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -2843,6 +2843,7 @@ class ClearMeasurement(bpy.types.Operator): tool.Blender.update_viewport() return {"FINISHED"} + class ImageScalingTool(bpy.types.Operator, PolylineOperator): bl_idname = "bim.image_scaling_tool" bl_label = "Image Scaling Tool" @@ -2862,7 +2863,7 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): self.current_distance_value = "" self.is_typing_distance = False self.calculated_distance = 0.0 - + if tool.Ifc.get(): self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) else: @@ -2872,7 +2873,7 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): if not self.target_object or not context.active_object or context.active_object != self.target_object: self.report({"ERROR"}, "Image annotation was deselected. Tool cancelled.") return self.cancel_tool(context) - + PolylineDecorator.update(event, self.tool_state, self.input_ui, self.snapping_points[0]) tool.Blender.update_viewport() @@ -2891,9 +2892,9 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): if event.type == "LEFTMOUSE" and event.value == "PRESS": if len(self.selected_points) < 2: snapped_point = self.snapping_points[0] - point_3d = snapped_point['point'].copy() + point_3d = snapped_point["point"].copy() self.selected_points.append(point_3d) - + if len(self.selected_points) == 2: self.calculate_distance() self.current_distance_value = f"{self.calculated_distance:.3f}" @@ -2903,7 +2904,7 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): elif len(self.selected_points) == 2: if event.type in {"RET", "NUMPAD_ENTER"} and event.value == "PRESS": return self.apply_scaling(context) - + if event.unicode and event.unicode.isprintable() and event.value == "PRESS": if event.unicode.isdigit() or event.unicode == ".": if not self.is_typing_distance: @@ -2911,14 +2912,16 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): self.is_typing_distance = True else: self.current_distance_value += event.unicode - + distance_value = float(self.current_distance_value) self.input_ui.set_value("DISTANCE", distance_value) - + elif event.type in {"BACK_SPACE", "DEL"} and event.value == "PRESS": if len(self.current_distance_value) > 0: self.current_distance_value = self.current_distance_value[:-1] - distance_value = float(self.current_distance_value) if self.current_distance_value else self.calculated_distance + distance_value = ( + float(self.current_distance_value) if self.current_distance_value else self.calculated_distance + ) self.input_ui.set_value("DISTANCE", distance_value) self.handle_keyboard_input(context, event) @@ -2937,7 +2940,7 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): def cancel_tool(self, context): context.workspace.status_text_set(text=None) - if hasattr(self, 'tool_state'): + if hasattr(self, "tool_state"): self.tool_state.plane_method = None PolylineDecorator.uninstall() tool.Blender.update_viewport() @@ -2955,7 +2958,7 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): instruction_text = f"Measured: {self.calculated_distance:.3f} - Type New Distance or Press Enter" else: instruction_text = "Image Scaling Tool" - + context.workspace.status_text_set(text=instruction_text) def calculate_distance(self): @@ -2984,51 +2987,51 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): if self.target_object: import bmesh - + mesh = self.target_object.data - + bm = bmesh.new() bm.from_mesh(mesh) - + bmesh.ops.scale(bm, vec=(scale_factor, scale_factor, 1.0), verts=bm.verts) - + if bm.loops.layers.uv: uv_layer = bm.loops.layers.uv.active - + min_x = min(v.co.x for v in bm.verts) max_x = max(v.co.x for v in bm.verts) min_y = min(v.co.y for v in bm.verts) max_y = max(v.co.y for v in bm.verts) - + width = max_x - min_x height = max_y - min_y - + for face in bm.faces: for loop in face.loops: vert = loop.vert u = (vert.co.x - min_x) / width if width > 0 else 0.5 v = (vert.co.y - min_y) / height if height > 0 else 0.5 - + u = max(0.0, min(1.0, u)) v = max(0.0, min(1.0, v)) loop[uv_layer].uv = (u, v) - + bm.to_mesh(mesh) bm.free() mesh.update() - + element = tool.Ifc.get_entity(self.target_object) if element and element.Representation: for representation in element.Representation.Representations: for item in representation.Items: - if item.is_a('IfcPolygonalFaceSet') and item.Coordinates: + if item.is_a("IfcPolygonalFaceSet") and item.Coordinates: new_coords = [] for vertex in mesh.vertices: co = self.target_object.matrix_world @ vertex.co new_coords.append([co.x, co.y, co.z]) - + item.Coordinates.CoordList = new_coords - + self.report({"INFO"}, f"Applied scale factor: {scale_factor:.4f}") context.workspace.status_text_set(text=None) @@ -3037,5 +3040,3 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): tool.Blender.update_viewport() return {"FINISHED"} - - diff --git a/src/bonsai/bonsai/bim/module/project/workspace.py b/src/bonsai/bonsai/bim/module/project/workspace.py index a5ec38a5ee..59b86e431d 100644 --- a/src/bonsai/bonsai/bim/module/project/workspace.py +++ b/src/bonsai/bonsai/bim/module/project/workspace.py @@ -78,6 +78,7 @@ class ExploreTool(bpy.types.WorkSpaceTool): row = layout.row(align=True) op = row.operator("bim.explore_hotkey", text="Image Scaling Tool", icon="IMAGE_PLANE") op.hotkey = "S_S" + op.description = "Scale Image Annotation. Allows to scale an IfcReferenceImage. Select image, select tool. Check lower left corner instructions to select two points and provide real distance between them" class ExploreHotkey(bpy.types.Operator): @@ -123,12 +124,14 @@ class ExploreHotkey(bpy.types.Operator): active_obj = bpy.context.active_object selected_objects = tool.Blender.get_selected_objects() element = tool.Ifc.get_entity(active_obj) if active_obj else None - - if (not active_obj or - not element or - not element.is_a("IfcAnnotation") or - len(selected_objects) != 1 or - not tool.Drawing.is_annotation_object_type(element, "IMAGE")): + + if ( + not active_obj + or not element + or not element.is_a("IfcAnnotation") + or len(selected_objects) != 1 + or not tool.Drawing.is_annotation_object_type(element, "IMAGE") + ): self.report({"ERROR"}, "Please select one image annotation first.") return From 21c4382b7105ec302cb708bea69a21c44ec0580e Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 16 Dec 2025 06:56:00 -0600 Subject: [PATCH 357/657] Small UI tweaks --- src/bonsai/bonsai/bim/module/attribute/ui.py | 2 +- src/bonsai/bonsai/bim/module/type/ui.py | 1 - src/bonsai/bonsai/bim/ui.py | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/attribute/ui.py b/src/bonsai/bonsai/bim/module/attribute/ui.py index d0b109a7a8..0665c84dd5 100644 --- a/src/bonsai/bonsai/bim/module/attribute/ui.py +++ b/src/bonsai/bonsai/bim/module/attribute/ui.py @@ -58,7 +58,7 @@ def draw_ui(context: bpy.types.Context, layout: bpy.types.UILayout, attributes) class BIM_PT_object_attributes(Panel): - bl_label = "Attributes" + bl_label = "Object Attributes" bl_idname = "BIM_PT_object_attributes" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" diff --git a/src/bonsai/bonsai/bim/module/type/ui.py b/src/bonsai/bonsai/bim/module/type/ui.py index 2370782046..24ffdc672e 100644 --- a/src/bonsai/bonsai/bim/module/type/ui.py +++ b/src/bonsai/bonsai/bim/module/type/ui.py @@ -114,7 +114,6 @@ class BIM_PT_type_attributes(Panel): bl_region_type = "WINDOW" bl_context = "object" bl_parent_id = "BIM_PT_type" - bl_options = {"DEFAULT_CLOSED"} @classmethod def poll(cls, context): diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index d41546904c..4a1114d831 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -1363,7 +1363,7 @@ class BIM_PT_tab_sandbox(Panel): # Object panel groups class BIM_PT_tab_object_metadata(Panel): - bl_label = "Object Metadata" + bl_label = "Object" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" From ce35903459d66414eaed4f5c0c46a90a4821b031 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 16 Dec 2025 17:13:07 +0100 Subject: [PATCH 358/657] First commit for a simplified searching operation with suggestions --- src/bonsai/bonsai/bim/helper.py | 218 ++++++- .../bonsai/bim/module/search/__init__.py | 3 + .../bonsai/bim/module/search/operator.py | 559 +++++++++++++++++- src/bonsai/bonsai/bim/prop.py | 10 + src/bonsai/bonsai/bim/ui.py | 8 + src/bonsai/bonsai/tool/search.py | 212 +++++-- 6 files changed, 953 insertions(+), 57 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index 49f49582b4..a59e9964f6 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -489,6 +489,8 @@ def draw_filter( data.load() sprops = tool.Search.get_search_props() + preferences = tool.Blender.get_addon_preferences() + enable_suggestions = getattr(preferences, "search_filter_suggestions", False) if tool.Ifc.get(): row = layout.row(align=True) @@ -498,6 +500,8 @@ def draw_filter( if data.data["saved_searches"]: row.operator("bim.load_search", text="", icon="IMPORT").module = module row.operator("bim.save_search", text="", icon="EXPORT").module = module + if data.data["saved_searches"] and enable_suggestions: + row.operator("bim.remove_search", text="", icon="REMOVE").module = module if module != "search": if module == "drawing_include": row.operator("bim.edit_element_filter", icon="CHECKMARK", text="").filter_mode = "INCLUDE" @@ -505,7 +509,15 @@ def draw_filter( row.operator("bim.edit_element_filter", icon="CHECKMARK", text="").filter_mode = "EXCLUDE" row.operator("bim.enable_editing_element_filter", icon="CANCEL", text="").filter_mode = "NONE" row = layout.row(align=True) - row.operator("bim.add_filter_group", text="Add Search Group", icon="ADD").module = module + if not enable_suggestions: + row.operator("bim.add_filter_group", text="Add Search Group", icon="ADD").module = module + else: + # When suggestions are enabled, show a simple "Add Filter" button if no filters exist + if not filter_groups or not any(fg.filters for fg in filter_groups): + op = row.operator("bim.add_filter", text="Add Filter", icon="ADD") + op.type = "entity" + op.index = 0 + op.module = module row.operator("bim.edit_filter_query", text="", icon="FILTER").module = module for i, filter_group in enumerate(filter_groups): @@ -524,43 +536,247 @@ def draw_filter( for j, ifc_filter in enumerate(filter_group.filters): if ifc_filter.type == "entity": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "value", text="", icon="FILE_3D") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "attribute": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "name", text="", icon="COPY_ID") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type + op.suggestion_type = "attribute_name" row.prop(ifc_filter, "value", text="") + if enable_suggestions and ifc_filter.name: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type + op.suggestion_type = "attribute_value" elif ifc_filter.type == "type": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "value", text="", icon="FILE_VOLUME") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "material": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "value", text="", icon="MATERIAL") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "property": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "pset", text="", icon="PROPERTIES") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type + op.suggestion_type = "pset" row.prop(ifc_filter, "name", text="") + if enable_suggestions and ifc_filter.pset: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type + op.suggestion_type = "property_name" row.prop(ifc_filter, "comparison", text="") row.prop(ifc_filter, "value", text="") + if enable_suggestions and ifc_filter.pset and ifc_filter.name: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type + op.suggestion_type = "property_value" elif ifc_filter.type == "classification": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "value", text="", icon="OUTLINER") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "location": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "value", text="", icon="PACKAGE") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "group": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "value", text="", icon="OUTLINER_COLLECTION") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "parent": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "value", text="", icon="FILE_PARENT") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "query": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "name", text="", icon="POINTCLOUD_DATA") row.prop(ifc_filter, "comparison", text="") row.prop(ifc_filter, "value", text="") elif ifc_filter.type == "instance": row = box.row(align=True) + if enable_suggestions and j > 0: + mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} + op = row.operator( + "bim.toggle_filter_inclusion", + icon=mode_icons.get(ifc_filter.filter_mode, "ADD"), + text="", + depress=ifc_filter.filter_mode != "ADD", + ) + op.group_index = i + op.filter_index = j + op.module = module row.prop(ifc_filter, "value", text="", icon="GRIP") + if enable_suggestions: + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type op = row.operator("bim.select_filter_elements", text="", icon="EYEDROPPER") op.group_index = i op.index = j diff --git a/src/bonsai/bonsai/bim/module/search/__init__.py b/src/bonsai/bonsai/bim/module/search/__init__.py index e1849c63ae..bc3951cc83 100644 --- a/src/bonsai/bonsai/bim/module/search/__init__.py +++ b/src/bonsai/bonsai/bim/module/search/__init__.py @@ -26,10 +26,12 @@ classes = ( operator.AddFilterGroup, operator.ColourByProperty, operator.EditFilterQuery, + operator.FilterValueSuggestions, operator.LoadColourscheme, operator.LoadSearch, operator.RemoveFilter, operator.RemoveFilterGroup, + operator.RemoveSearch, operator.ResetObjectColours, operator.SaveColourscheme, operator.SaveSearch, @@ -40,6 +42,7 @@ classes = ( operator.SelectIfcClass, operator.SelectSimilar, operator.ShowAllElements, + operator.ToggleFilterInclusion, operator.ToggleFilterSelection, prop.BIMColour, prop.BIMFilterItem, diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 1fb164047b..9ffe2f25e0 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -40,9 +40,465 @@ from bpy.props import ( FloatVectorProperty, CollectionProperty, ) +from bonsai.bim.prop import StrProperty from typing import TYPE_CHECKING, Literal, get_args, assert_never +def update_filter_search_value(self: "FilterValueSuggestions", context: bpy.types.Context) -> None: + filter_groups = tool.Search.get_filter_groups(self.module) + ifc_filter = filter_groups[self.group_index].filters[self.filter_index] + + value = self.search_value + + if " < " in value: + value = value.split(" < ")[-1] + + if ifc_filter.type == "entity": + if " (superclass)" in value: + value = value.replace(" (superclass)", "") + if " > " in value: + value = value.split(" > ")[-1] + + elif ifc_filter.type == "instance": + if ": " in value: + value = value.split(": ")[-1] + elif " (" in value: + hierarchy_class = value.split(" (") + element_class = hierarchy_class[-1].rstrip(")") + element_name = hierarchy_class[0] if len(hierarchy_class) > 1 else None + + ifc_file = tool.Ifc.get() + if ifc_file: + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + if element.is_a() == element_class: + if element_name is None or (hasattr(element, 'Name') and element.Name == element_name): + value = element.GlobalId + break + except: + continue + + elif ifc_filter.type == "parent": + if " (" in value: + value = value.split(" (")[0] + + if ifc_filter.type == "property": + if self.suggestion_type == "pset": + ifc_filter.pset = value + elif self.suggestion_type == "property_name": + ifc_filter.name = value + else: + ifc_filter.value = value + elif ifc_filter.type == "attribute": + if self.suggestion_type == "attribute_name": + ifc_filter.name = value + else: + ifc_filter.value = value + else: + ifc_filter.value = value + + if self.first_launch: + self.first_launch = False + else: + context.window.screen = context.window.screen + + +class FilterValueSuggestions(Operator): + bl_idname = "bim.filter_value_suggestions" + bl_label = "Filter Value Suggestions" + bl_description = "Get suggestions for filter values from the current IFC file" + bl_options = {"REGISTER", "UNDO"} + + group_index: IntProperty() + filter_index: IntProperty() + module: StringProperty() + filter_type: StringProperty() + suggestion_type: StringProperty(default="value") + + first_launch: BoolProperty(default=True, options={"SKIP_SAVE"}) + search_value: StringProperty( + name="Search", + description="Search for filter values", + update=update_filter_search_value, + default="", + options={"SKIP_SAVE"}, + ) + collection_values: CollectionProperty(type=StrProperty, options={"SKIP_SAVE"}) + + def execute(self, context): + return {"FINISHED"} + + def invoke(self, context, event): + ifc_file = tool.Ifc.get() + if not ifc_file: + self.report({"WARNING"}, "No IFC file loaded") + return {"CANCELLED"} + + filter_groups = tool.Search.get_filter_groups(self.module) + ifc_filter = filter_groups[self.group_index].filters[self.filter_index] + + string_suggestions = self.get_suggestions(ifc_file, ifc_filter) + if not string_suggestions: + self.report({"INFO"}, f"No suggestions available") + return {"CANCELLED"} + + self.collection_values.clear() + for suggestion in natsorted(string_suggestions): + self.collection_values.add().name = suggestion + + return context.window_manager.invoke_props_dialog(self, width=300) + + def draw(self, context): + layout = self.layout + + filter_groups = tool.Search.get_filter_groups(self.module) + ifc_filter = filter_groups[self.group_index].filters[self.filter_index] + + label_map = { + "entity": "Select Class", + "type": "Select Type", + "material": "Select Material", + "location": "Select Location", + "group": "Select Group", + "classification": "Select Classification", + "parent": "Select Parent", + "instance": "Select GlobalId", + } + + if ifc_filter.type == "attribute": + if self.suggestion_type == "attribute_value": + label = f"Select Value for {ifc_filter.name}" + else: + label = "Select Attribute Name" + elif ifc_filter.type == "property": + if self.suggestion_type == "property_value": + label = f"Select Value for {ifc_filter.pset}.{ifc_filter.name}" + elif self.suggestion_type == "property_name": + label = f"Select Property from {ifc_filter.pset}" + else: + label = "Select Property Set" + else: + label = label_map.get(ifc_filter.type, "Select Value") + + row = layout.row() + row.label(text=label) + row = layout.row() + row.prop_search( + self, + "search_value", + self, + "collection_values", + text="", + results_are_suggestions=True, + ) + + def get_suggestions(self, ifc_file, ifc_filter): + suggestions = set() + + if ifc_filter.type == "entity": + suggestions = self.get_entity_suggestions(ifc_file) + elif ifc_filter.type == "type": + suggestions = self.get_type_suggestions(ifc_file) + elif ifc_filter.type == "material": + suggestions = self.get_material_suggestions(ifc_file) + elif ifc_filter.type == "location": + suggestions = self.get_location_suggestions(ifc_file) + elif ifc_filter.type == "group": + suggestions = self.get_group_suggestions(ifc_file) + elif ifc_filter.type == "classification": + suggestions = self.get_classification_suggestions(ifc_file) + elif ifc_filter.type == "parent": + suggestions = self.get_parent_suggestions(ifc_file) + elif ifc_filter.type == "instance": + suggestions = self.get_instance_suggestions(ifc_file) + elif ifc_filter.type == "attribute": + if self.suggestion_type == "attribute_name": + suggestions = self.get_attribute_names(ifc_file) + else: + suggestions = self.get_attribute_values(ifc_file, ifc_filter.name) + elif ifc_filter.type == "property": + if self.suggestion_type == "pset": + suggestions = self.get_property_sets(ifc_file) + elif self.suggestion_type == "property_name": + suggestions = self.get_property_names(ifc_file, ifc_filter.pset) + else: + suggestions = self.get_property_values(ifc_file, ifc_filter.pset, ifc_filter.name) + + return suggestions + + def build_hierarchy_path(self, element): + path = [] + current = element + + while current: + if hasattr(current, 'Name') and current.Name: + path.insert(0, current.Name) + + parent = None + + if hasattr(current, 'Decomposes') and current.Decomposes: + for rel in current.Decomposes: + if hasattr(rel, 'RelatingObject'): + parent = rel.RelatingObject + break + + if not parent and hasattr(current, 'ContainedInStructure') and current.ContainedInStructure: + for rel in current.ContainedInStructure: + if hasattr(rel, 'RelatingStructure'): + parent = rel.RelatingStructure + break + + current = parent + + return path + + def get_entity_suggestions(self, ifc_file): + all_classes = set() + schema = tool.Ifc.schema() + + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + class_name = element.is_a() + + try: + entity = schema.declaration_by_name(class_name).as_entity() + current = entity + + chain_names = [class_name] + while current.supertype(): + supertype = current.supertype() + chain_names.insert(0, supertype.name()) + current = supertype + + if len(chain_names) > 1: + all_classes.add(" > ".join(chain_names)) + for i in range(len(chain_names) - 1): + superclass_chain = " > ".join(chain_names[:i+1]) + all_classes.add(f"{superclass_chain} (superclass)") + else: + all_classes.add(class_name) + except: + all_classes.add(class_name) + except: + continue + + return all_classes + + def get_type_suggestions(self, ifc_file): + suggestions = set() + for element_type in ifc_file.by_type("IfcTypeObject"): + if element_type.Name: + hierarchy_path = self.build_hierarchy_path(element_type) + if len(hierarchy_path) > 1: + suggestions.add(" < ".join(hierarchy_path)) + else: + suggestions.add(element_type.Name) + return suggestions + + def get_material_suggestions(self, ifc_file): + suggestions = set() + for material in ifc_file.by_type("IfcMaterial"): + if material.Name: + suggestions.add(material.Name) + return suggestions + + def get_location_suggestions(self, ifc_file): + suggestions = set() + for spatial in ifc_file.by_type("IfcSpatialStructureElement"): + if spatial.Name: + hierarchy_path = self.build_hierarchy_path(spatial) + if len(hierarchy_path) > 1: + suggestions.add(" < ".join(hierarchy_path)) + else: + suggestions.add(spatial.Name) + return suggestions + + def get_group_suggestions(self, ifc_file): + suggestions = set() + for group in ifc_file.by_type("IfcGroup"): + if group.Name: + hierarchy_path = self.build_hierarchy_path(group) + if len(hierarchy_path) > 1: + suggestions.add(" < ".join(hierarchy_path)) + else: + suggestions.add(group.Name) + return suggestions + + def get_classification_suggestions(self, ifc_file): + suggestions = set() + for ref in ifc_file.by_type("IfcClassificationReference"): + if ref.Identification: + suggestions.add(ref.Identification) + return suggestions + + def get_parent_suggestions(self, ifc_file): + suggestions = set() + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + has_children = False + + if hasattr(element, 'IsDecomposedBy') and element.IsDecomposedBy: + has_children = True + elif hasattr(element, 'ContainsElements') and element.ContainsElements: + has_children = True + elif hasattr(element, 'HasOpenings') and element.HasOpenings: + has_children = True + + if has_children: + hierarchy_path = self.build_hierarchy_path(element) + element_class = element.is_a() + + if len(hierarchy_path) > 0: + hierarchy_str = " < ".join(hierarchy_path) + suggestions.add(f"{hierarchy_str} ({element_class})") + else: + element_name = element.Name if hasattr(element, 'Name') and element.Name else element_class + suggestions.add(f"{element_name} ({element_class})") + except: + continue + + return suggestions + + def get_instance_suggestions(self, ifc_file): + suggestions = set() + element_data = [] + + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + if hasattr(element, 'GlobalId') and element.GlobalId: + hierarchy_path = self.build_hierarchy_path(element) + element_class = element.is_a() + + if len(hierarchy_path) > 0: + hierarchy_str = " < ".join(hierarchy_path) + display_str = f"{hierarchy_str} ({element_class})" + else: + display_str = f"({element_class})" + + element_data.append((display_str, element.GlobalId)) + except: + continue + + display_counts = {} + for display_str, global_id in element_data: + display_counts[display_str] = display_counts.get(display_str, 0) + 1 + + for display_str, global_id in element_data: + if display_counts[display_str] > 1: + suggestions.add(f"{display_str}: {global_id}") + else: + suggestions.add(display_str) + + return suggestions + + def get_property_sets(self, ifc_file): + psets = set() + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + for definition in getattr(element, 'IsDefinedBy', []): + if definition.is_a('IfcRelDefinesByProperties'): + pset = definition.RelatingPropertyDefinition + if pset.is_a("IfcPropertySet") and pset.Name: + psets.add(pset.Name) + except: + continue + return psets + + def get_property_names(self, ifc_file, pset_name): + property_names = set() + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + for definition in getattr(element, 'IsDefinedBy', []): + if definition.is_a('IfcRelDefinesByProperties'): + pset = definition.RelatingPropertyDefinition + if pset.is_a("IfcPropertySet") and pset.Name == pset_name: + if pset.HasProperties: + for prop in pset.HasProperties: + if hasattr(prop, "Name") and prop.Name: + property_names.add(prop.Name) + except: + continue + return property_names + + def get_property_values(self, ifc_file, pset_name, property_name): + property_values = set() + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + for definition in getattr(element, 'IsDefinedBy', []): + if definition.is_a('IfcRelDefinesByProperties'): + pset = definition.RelatingPropertyDefinition + if pset.is_a("IfcPropertySet") and pset.Name == pset_name: + if pset.HasProperties: + for prop in pset.HasProperties: + if hasattr(prop, "Name") and prop.Name == property_name: + if hasattr(prop, "NominalValue") and prop.NominalValue: + try: + value = prop.NominalValue.wrappedValue + if value is not None and value != "": + if not hasattr(value, 'is_a') and not isinstance(value, (tuple, list)): + str_value = str(value) + if not str_value.startswith("#") and not str_value.startswith("("): + property_values.add(str_value) + except: + continue + except: + continue + return property_values + + def get_attribute_names(self, ifc_file): + attribute_names = set() + schema = tool.Ifc.schema() + + ifc_classes = set() + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + ifc_classes.add(element.is_a()) + except: + continue + + for ifc_class in ifc_classes: + try: + entity = schema.declaration_by_name(ifc_class).as_entity() + attributes = entity.all_attributes() + for attr in attributes: + attribute_names.add(attr.name()) + except: + continue + + return attribute_names + + def get_attribute_values(self, ifc_file, attribute_name): + attribute_values = set() + + for element_id in IfcStore.id_map.keys(): + try: + element = ifc_file.by_id(element_id) + + if element.is_a("IfcRelationship") or element.is_a("IfcTypeObject"): + continue + + if hasattr(element, attribute_name): + value = getattr(element, attribute_name, None) + + if value is not None and value != "": + if not hasattr(value, 'is_a') and not isinstance(value, (tuple, list)): + str_value = str(value) + if not str_value.startswith("#") and not str_value.startswith("("): + attribute_values.add(str_value) + except: + continue + + return attribute_values + + class AddFilterGroup(Operator): bl_idname = "bim.add_filter_group" bl_label = "Add Filter Group" @@ -96,11 +552,38 @@ class AddFilter(Operator): def execute(self, context): filter_groups = tool.Search.get_filter_groups(self.module) + if self.index >= len(filter_groups): + filter_groups.add() new = filter_groups[self.index].filters.add() new.type = self.type return {"FINISHED"} +class ToggleFilterInclusion(Operator): + bl_idname = "bim.toggle_filter_inclusion" + bl_label = "Toggle Filter Mode" + bl_description = "Cycle between Add (+), Subtract (-), and Filter modes for this filter" + bl_options = {"REGISTER", "UNDO"} + + group_index: IntProperty() + filter_index: IntProperty() + module: StringProperty() + + def execute(self, context): + filter_groups = tool.Search.get_filter_groups(self.module) + filter_group = filter_groups[self.group_index] + ifc_filter = filter_group.filters[self.filter_index] + + if ifc_filter.filter_mode == "ADD": + ifc_filter.filter_mode = "SUBTRACT" + elif ifc_filter.filter_mode == "SUBTRACT": + ifc_filter.filter_mode = "FILTER" + else: + ifc_filter.filter_mode = "ADD" + + return {"FINISHED"} + + class SelectFilterElements(bpy.types.Operator): bl_idname = "bim.select_filter_elements" bl_label = "Select Filter Elements" @@ -174,9 +657,15 @@ class Search(Operator): else: assert_never(self.property_group) - results = ifcopenshell.util.selector.filter_elements( - tool.Ifc.get(), tool.Search.export_filter_query(props.filter_groups) - ) + preferences = tool.Blender.get_addon_preferences() + enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + + if enable_suggestions: + results = tool.Search.execute_filter_groups(props.filter_groups) + else: + results = ifcopenshell.util.selector.filter_elements( + tool.Ifc.get(), tool.Search.export_filter_query(props.filter_groups) + ) objs = [obj for e in results if isinstance(obj := tool.Ifc.get_object(e), bpy.types.Object)] for obj in objs: @@ -242,13 +731,32 @@ class SaveSearch(Operator, tool.Ifc.Operator): try: query = tool.Search.export_filter_query(filter_groups) - results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) + results = tool.Search.execute_filter_groups(filter_groups) + + filter_structure = [] + for filter_group in filter_groups: + group_data = [] + for ifc_filter in filter_group.filters: + filter_data = { + "type": ifc_filter.type, + "name": ifc_filter.name, + "value": ifc_filter.value, + "pset": ifc_filter.pset, + "comparison": ifc_filter.comparison, + "filter_mode": ifc_filter.filter_mode, + } + group_data.append(filter_data) + filter_structure.append(group_data) except: print(traceback.format_exc()) self.report({"ERROR"}, "Error occurred trying save search.") return - description = json.dumps({"type": "BBIM_Search", "query": query}) + description = json.dumps({ + "type": "BBIM_Search", + "query": query, + "filter_structure": filter_structure + }) ifc_file = tool.Ifc.get() group = next( ( @@ -289,7 +797,12 @@ class LoadSearch(Operator, tool.Ifc.Operator): filter_groups = tool.Search.get_filter_groups(self.module) props = tool.Search.get_search_props() group = tool.Ifc.get().by_id(int(props.saved_searches)) - tool.Search.import_filter_query(tool.Search.get_group_query(group), filter_groups) + + group_data = tool.Search.get_group_data(group) + if group_data and "filter_structure" in group_data: + tool.Search.import_filter_structure(group_data["filter_structure"], filter_groups) + else: + tool.Search.import_filter_query(tool.Search.get_group_query(group), filter_groups) def draw(self, context): assert self.layout @@ -302,6 +815,40 @@ class LoadSearch(Operator, tool.Ifc.Operator): return context.window_manager.invoke_props_dialog(self) +class RemoveSearch(Operator, tool.Ifc.Operator): + bl_idname = "bim.remove_search" + bl_label = "Remove Search" + bl_description = "Remove a saved search filter" + bl_options = {"REGISTER", "UNDO"} + module: StringProperty() + + def _execute(self, context): + props = tool.Search.get_search_props() + group_id = props.saved_searches + if not group_id: + self.report({"ERROR"}, "No search selected for removal") + return + + group = tool.Ifc.get().by_id(int(group_id)) + group_name = group.Name or "Unnamed" + ifcopenshell.api.group.remove_group(tool.Ifc.get(), group=group) + tool.Search.patch_search_ifcgroups() + self.report({"INFO"}, f"Removed saved search: {group_name}") + + def draw(self, context): + self.layout.label(text="Select search to remove:", icon="ERROR") + row = self.layout.row() + props = tool.Search.get_search_props() + row.prop(props, "saved_searches", text="") + + def invoke(self, context, event): + tool.Search.patch_search_ifcgroups() + from bonsai.bim.module.search.data import SearchData + if not SearchData.is_loaded: + SearchData.load() + return context.window_manager.invoke_props_dialog(self) + + class ColourByProperty(Operator): bl_idname = "bim.colour_by_property" bl_label = "Colour by Property" diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 08137a133e..3ca57b27cc 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -748,6 +748,15 @@ class BIMFacet(PropertyGroup): pset: StringProperty(name="Pset") value: StringProperty(name="Value") type: StringProperty(name="Type") + filter_mode: EnumProperty( + name="Filter Mode", + items=[ + ("ADD", "Add", "Add elements to the result set (query entire IFC file)", "ADD", 0), + ("SUBTRACT", "Subtract", "Subtract matching elements from previous results", "REMOVE", 1), + ("FILTER", "Filter", "Filter down previous results to matching elements", "FILTER", 2), + ], + default="ADD", + ) comparison: EnumProperty( items=[ ("=", "equal to", ""), @@ -765,6 +774,7 @@ class BIMFacet(PropertyGroup): pset: str value: str type: str + filter_mode: Literal["ADD", "SUBTRACT", "FILTER"] comparison: Literal["=", "!=", ">=", "<=", ">", "<", "*=", "!*="] diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index d41546904c..d3cd1012fc 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -689,6 +689,12 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description="Show mass and time units section in the new project wizard panel", default=False, ) + + search_filter_suggestions: BoolProperty( + name="Enable advanced search with filter suggestions", + description="Enable filter mode (ADD/SUBTRACT/FILTER) and value suggestions for search filters", + default=False, + ) if TYPE_CHECKING: svg2pdf_command: str @@ -727,6 +733,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): default_parameters: DefaultParameters container_hide_show_isolate: bool mass_time_units_in_wizard: bool + search_filter_suggestions: bool def draw(self, context: bpy.types.Context) -> None: layout = self.layout @@ -909,6 +916,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "container_hide_show_isolate") layout.prop(self, "mass_time_units_in_wizard") + layout.prop(self, "search_filter_suggestions") # Scene panel groups diff --git a/src/bonsai/bonsai/tool/search.py b/src/bonsai/bonsai/tool/search.py index 29e862b6b0..bcd2424c71 100644 --- a/src/bonsai/bonsai/tool/search.py +++ b/src/bonsai/bonsai/tool/search.py @@ -42,6 +42,38 @@ class Search(bonsai.core.tool.Search): def get_group_query(cls, group: ifcopenshell.entity_instance) -> str: return json.loads(group.Description)["query"] + @classmethod + def get_group_data(cls, group: ifcopenshell.entity_instance) -> dict: + return json.loads(group.Description) + + @classmethod + def import_filter_structure( + cls, filter_structure: list, filter_groups: bpy.types.bpy_prop_collection_idprop[BIMFilterGroup] + ) -> None: + filter_groups.clear() + + for group_data in filter_structure: + if not isinstance(group_data, list): + continue + + filter_group = filter_groups.add() + + for filter_data in group_data: + if not isinstance(filter_data, dict): + continue + + ifc_filter = filter_group.filters.add() + ifc_filter.type = filter_data.get("type", "") + ifc_filter.name = filter_data.get("name", "") + ifc_filter.value = filter_data.get("value", "") + ifc_filter.pset = filter_data.get("pset", "") + ifc_filter.comparison = filter_data.get("comparison", "=") + filter_mode = filter_data.get("filter_mode", "ADD") + if filter_mode in ["ADD", "SUBTRACT", "FILTER"]: + ifc_filter.filter_mode = filter_mode + else: + ifc_filter.filter_mode = "ADD" + FilterModule = Union[Literal["search", "csv", "diff", "drawing_include", "drawing_exclude"], str] @classmethod @@ -80,53 +112,127 @@ class Search(bonsai.core.tool.Search): for ifc_filter in filter_group.filters: if not ifc_filter.value: continue - if ifc_filter.type == "instance": - if "bpy.data.texts" in ifc_filter.value: - data_name = ifc_filter.value.split("bpy.data.texts")[1][2:-2] - filter_group_query.append(bpy.data.texts[data_name].as_string()) - else: - filter_group_query.append(ifc_filter.value) - elif ifc_filter.type == "entity": - filter_group_query.append(ifc_filter.value) - elif ifc_filter.type == "attribute": - if not ifc_filter.name: - continue - comparison, value = cls.get_comparison_and_value(ifc_filter) - filter_group_query.append(f"{ifc_filter.name}{comparison}{value}") - elif ifc_filter.type == "type": - comparison, value = cls.get_comparison_and_value(ifc_filter) - filter_group_query.append(f"type{comparison}{value}") - elif ifc_filter.type == "material": - comparison, value = cls.get_comparison_and_value(ifc_filter) - filter_group_query.append(f"material{comparison}{value}") - elif ifc_filter.type == "property": - if not ifc_filter.pset or not ifc_filter.name: - continue - pset = cls.wrap_value(ifc_filter, ifc_filter.pset) - name = cls.wrap_value(ifc_filter, ifc_filter.name) - comparison = ifc_filter.comparison - value = cls.wrap_value(ifc_filter, ifc_filter.value) - filter_group_query.append(f"{pset}.{name} {comparison} {value}") - elif ifc_filter.type == "classification": - comparison, value = cls.get_comparison_and_value(ifc_filter) - filter_group_query.append(f"classification{comparison}{value}") - elif ifc_filter.type == "location": - comparison, value = cls.get_comparison_and_value(ifc_filter) - filter_group_query.append(f"location{comparison}{value}") - elif ifc_filter.type == "group": - comparison, value = cls.get_comparison_and_value(ifc_filter) - filter_group_query.append(f"group{comparison}{value}") - elif ifc_filter.type == "parent": - comparison, value = cls.get_comparison_and_value(ifc_filter) - filter_group_query.append(f"parent{comparison}{value}") - elif ifc_filter.type == "query": - keys = cls.wrap_value(ifc_filter, ifc_filter.name) - comparison = ifc_filter.comparison or "=" - value = cls.wrap_value(ifc_filter, ifc_filter.value) - filter_group_query.append(f"query:{keys}{comparison}{value}") - query.append(", ".join(filter_group_query)) + + query_part = cls._export_single_filter(ifc_filter) + if query_part: + filter_group_query.append(query_part) + + if filter_group_query: + query.append(", ".join(filter_group_query)) return " + ".join(query) + @classmethod + def _export_single_filter(cls, ifc_filter: BIMFacet) -> str: + if ifc_filter.type == "instance": + if "bpy.data.texts" in ifc_filter.value: + data_name = ifc_filter.value.split("bpy.data.texts")[1][2:-2] + value = bpy.data.texts[data_name].as_string() + else: + value = ifc_filter.value + value = value.lstrip("!") + if ifc_filter.filter_mode == "SUBTRACT": + value = f"!{value}" + return value + elif ifc_filter.type == "entity": + value = ifc_filter.value + value = value.lstrip("!") + if ifc_filter.filter_mode == "SUBTRACT": + value = f"!{value}" + return value + elif ifc_filter.type == "attribute": + if not ifc_filter.name: + return "" + comparison, value = cls.get_comparison_and_value(ifc_filter) + return f"{ifc_filter.name}{comparison}{value}" + elif ifc_filter.type == "type": + comparison, value = cls.get_comparison_and_value(ifc_filter) + return f"type{comparison}{value}" + elif ifc_filter.type == "material": + comparison, value = cls.get_comparison_and_value(ifc_filter) + return f"material{comparison}{value}" + elif ifc_filter.type == "property": + if not ifc_filter.pset or not ifc_filter.name: + return "" + pset = cls.wrap_value(ifc_filter, ifc_filter.pset) + name = cls.wrap_value(ifc_filter, ifc_filter.name) + comparison = ifc_filter.comparison + value = cls.wrap_value(ifc_filter, ifc_filter.value) + return f"{pset}.{name} {comparison} {value}" + elif ifc_filter.type == "classification": + comparison, value = cls.get_comparison_and_value(ifc_filter) + return f"classification{comparison}{value}" + elif ifc_filter.type == "location": + comparison, value = cls.get_comparison_and_value(ifc_filter) + return f"location{comparison}{value}" + elif ifc_filter.type == "group": + comparison, value = cls.get_comparison_and_value(ifc_filter) + return f"group{comparison}{value}" + elif ifc_filter.type == "parent": + comparison, value = cls.get_comparison_and_value(ifc_filter) + return f"parent{comparison}{value}" + elif ifc_filter.type == "query": + keys = cls.wrap_value(ifc_filter, ifc_filter.name) + comparison = ifc_filter.comparison or "=" + value = cls.wrap_value(ifc_filter, ifc_filter.value) + return f"query:{keys}{comparison}{value}" + return "" + + @classmethod + def execute_filter_groups(cls, filter_groups: bpy.types.bpy_prop_collection_idprop[BIMFilterGroup]) -> set: + """ + Execute filter groups with simplified chaining support. + Within a single group chain, all filters chain sequentially with ADD/SUBTRACT/FILTER modes. + Groups are combined with union (same as original " + " behavior). + """ + all_group_results = [] + + for filter_group in filter_groups: + group_results = set() + + for filter_index, ifc_filter in enumerate(filter_group.filters): + if not ifc_filter.value: + continue + + query = cls._export_single_filter(ifc_filter) + if not query: + continue + + mode = "ADD" if filter_index == 0 else ifc_filter.filter_mode + + if mode == "ADD": + results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) + group_results.update(results) + + elif mode == "SUBTRACT": + if group_results: + query_without_prefix = query[1:] if query.startswith("!") else query + elements_to_remove = ifcopenshell.util.selector.filter_elements( + tool.Ifc.get(), query_without_prefix, elements=group_results + ) + group_results -= elements_to_remove + else: + results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) + group_results.update(results) + + elif mode == "FILTER": + if group_results: + results = ifcopenshell.util.selector.filter_elements( + tool.Ifc.get(), query, elements=group_results + ) + group_results = results + else: + results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) + group_results.update(results) + + if group_results: + all_group_results.append(group_results) + + final_results = set() + for group_results in all_group_results: + final_results.update(group_results) + + return final_results + @classmethod def get_comparison_and_value( cls, ifc_filter: BIMFacet @@ -349,7 +455,8 @@ class ImportFilterQueryTransformer(lark.Transformer): def facet_list(self, args): new = self.filter_groups.add() global_ids = [] - for arg in args: + is_first_group = len(self.filter_groups) == 1 + for filter_index, arg in enumerate(args): if arg["type"] == "instance" and global_ids: if "bpy.data.texts" in new2.value: data_name = new2.value.split("bpy.data.texts")[1][2:-2] @@ -374,21 +481,26 @@ class ImportFilterQueryTransformer(lark.Transformer): new2.pset = arg["pset"] if "comparison" in arg: new2.comparison = arg["comparison"] or "=" + if "filter_mode" in arg: + new2.filter_mode = arg["filter_mode"] + elif not is_first_group and filter_index == 0 and arg["type"] in ("entity", "instance"): + if arg.get("filter_mode", "ADD") != "SUBTRACT": + new2.filter_mode = "FILTER" def facet(self, args): return args[0] def instance(self, args): if args[0].data == "not": - return {"type": "instance", "value": "!" + args[1].children[0].value} + return {"type": "instance", "value": args[1].children[0].value, "filter_mode": "SUBTRACT"} else: - return {"type": "instance", "value": args[0].children[0].value} + return {"type": "instance", "value": args[0].children[0].value, "filter_mode": "ADD"} def entity(self, args): if args[0].data == "not": - return {"type": "entity", "value": "!" + args[1].children[0].value} + return {"type": "entity", "value": args[1].children[0].value, "filter_mode": "SUBTRACT"} else: - return {"type": "entity", "value": args[0].children[0].value} + return {"type": "entity", "value": args[0].children[0].value, "filter_mode": "ADD"} def attribute(self, args): name, comparison, value = args From bf75509fdf7882535ce20dde361a982057c70341 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 16 Dec 2025 19:47:41 +0100 Subject: [PATCH 359/657] Enhance filtering capabilities with JSON support for include/exclude operations --- .../bonsai/bim/module/drawing/operator.py | 52 ++++++++-- src/bonsai/bonsai/tool/drawing.py | 39 +++++++- src/bonsai/bonsai/tool/search.py | 96 +++++++++++++++++++ 3 files changed, 177 insertions(+), 10 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 248fae5775..434880d5da 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3661,8 +3661,12 @@ class EnableEditingElementFilter(bpy.types.Operator, tool.Ifc.Operator): if query := ifcopenshell.util.element.get_pset(element, "EPset_Drawing", self.filter_mode.title()): filter_groups = tool.Search.get_filter_groups(f"drawing_{self.filter_mode.lower()}") try: - tool.Search.import_filter_query(query, filter_groups) - except: + data = json.loads(query) + if isinstance(data, dict) and "filter_structure" in data: + tool.Search.import_filter_structure(data["filter_structure"], filter_groups) + else: + tool.Search.import_filter_query(query, filter_groups) + except Exception: pass @@ -3682,12 +3686,48 @@ class EditElementFilter(bpy.types.Operator, tool.Ifc.Operator): assert element pset = tool.Pset.get_element_pset(element, "EPset_Drawing") assert pset + + preferences = tool.Blender.get_addon_preferences() + enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + if self.filter_mode == "INCLUDE": - query = tool.Search.export_filter_query(props.include_filter_groups) or None - ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Include": query}) + filter_groups = props.include_filter_groups elif self.filter_mode == "EXCLUDE": - query = tool.Search.export_filter_query(props.exclude_filter_groups) or None - ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Exclude": query}) + filter_groups = props.exclude_filter_groups + else: + return + + query = tool.Search.export_filter_query(filter_groups) or None + + if enable_suggestions and query: + filter_structure = [] + for filter_group in filter_groups: + group_data = [] + for ifc_filter in filter_group.filters: + filter_data = { + "type": ifc_filter.type, + "name": ifc_filter.name, + "value": ifc_filter.value, + "pset": ifc_filter.pset, + "comparison": ifc_filter.comparison, + "filter_mode": ifc_filter.filter_mode, + } + group_data.append(filter_data) + filter_structure.append(group_data) + + value = json.dumps({ + "type": "BBIM_Search", + "query": query, + "filter_structure": filter_structure + }) + else: + value = query + + if self.filter_mode == "INCLUDE": + ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Include": value}) + elif self.filter_mode == "EXCLUDE": + ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Exclude": value}) + props.filter_mode = "NONE" bpy.ops.bim.activate_drawing(drawing=element.id(), should_view_from_camera=False) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 8fc500a223..0f063b8473 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -2277,7 +2277,16 @@ class Drawing(bonsai.core.tool.Drawing): pset = ifcopenshell.util.element.get_psets(drawing).get("EPset_Drawing", {}) include = pset.get("Include", None) if include: - elements = ifcopenshell.util.selector.filter_elements(ifc_file, include) + try: + data = json.loads(include) + if isinstance(data, dict) and "filter_structure" in data: + elements = tool.Search.execute_filter_groups_from_json(data, ifc_file) + elif isinstance(data, dict) and "query" in data: + elements = ifcopenshell.util.selector.filter_elements(ifc_file, data["query"]) + else: + elements = ifcopenshell.util.selector.filter_elements(ifc_file, include) + except (json.JSONDecodeError, ValueError): + elements = ifcopenshell.util.selector.filter_elements(ifc_file, include) else: if ifc_file.schema == "IFC2X3": base_elements = set(ifc_file.by_type("IfcElement") + ifc_file.by_type("IfcSpatialStructureElement")) @@ -2291,7 +2300,7 @@ class Drawing(bonsai.core.tool.Drawing): if not i.is_a("IfcAnnotation"): updated_set.add(i) # add aggregate too, if element is host by one - if decomposes := i.Decomposes: + if hasattr(i, "Decomposes") and (decomposes := i.Decomposes): aggregate = decomposes[0].RelatingObject # remove IfcProject for class iterator. See https://github.com/IfcOpenShell/IfcOpenShell/issues/4361#issuecomment-2081223615 if aggregate.is_a("IfcProduct"): @@ -2304,7 +2313,18 @@ class Drawing(bonsai.core.tool.Drawing): exclude = pset.get("Exclude", None) if exclude: - elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) + try: + data = json.loads(exclude) + if isinstance(data, dict) and "filter_structure" in data: + exclude_elements = tool.Search.execute_filter_groups_from_json(data, ifc_file) + elements -= exclude_elements + elif isinstance(data, dict) and "query" in data: + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, data["query"]) + else: + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) + except (json.JSONDecodeError, ValueError): + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) elements -= set(ifc_file.by_type("IfcOpeningElement")) return elements @@ -2318,7 +2338,18 @@ class Drawing(bonsai.core.tool.Drawing): # NOTE: EPset_Drawing.Include is not used to avoid adding other elements besides spaces exclude = pset.get("Exclude", None) if exclude: - elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) + try: + data = json.loads(exclude) + if isinstance(data, dict) and "filter_structure" in data: + exclude_elements = tool.Search.execute_filter_groups_from_json(data, ifc_file) + elements -= exclude_elements + elif isinstance(data, dict) and "query" in data: + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, data["query"]) + else: + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) + except (json.JSONDecodeError, ValueError): + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) return elements @classmethod diff --git a/src/bonsai/bonsai/tool/search.py b/src/bonsai/bonsai/tool/search.py index bcd2424c71..ece6062f49 100644 --- a/src/bonsai/bonsai/tool/search.py +++ b/src/bonsai/bonsai/tool/search.py @@ -233,6 +233,102 @@ class Search(bonsai.core.tool.Search): return final_results + @classmethod + def execute_filter_groups_from_json( + cls, data: dict, ifc_file: ifcopenshell.file + ) -> set[ifcopenshell.entity_instance]: + """Execute filter groups from JSON data with filter_structure + + This is used by drawing include/exclude to properly handle ADD/SUBTRACT/FILTER modes + without needing to instantiate Blender property groups. + """ + filter_structure = data.get("filter_structure", []) + + all_group_results = [] + for group_data in filter_structure: + group_results = set() + + for filter_data in group_data: + filter_mode = filter_data.get("filter_mode", "ADD") + filter_type = filter_data.get("type", "") + value = filter_data.get("value", "") + + if not filter_type or not value: + continue + + query_part = None + if filter_type == "entity": + query_part = value + elif filter_type == "attribute": + name = filter_data.get("name", "") + if not name: + continue + comparison = filter_data.get("comparison", "=") + query_part = f"{name}{comparison}{cls._wrap_json_value(value)}" + elif filter_type == "property": + pset = filter_data.get("pset", "") + name = filter_data.get("name", "") + if not pset or not name: + continue + comparison = filter_data.get("comparison", " = ") + wrapped_pset = cls._wrap_json_value(pset) + wrapped_name = cls._wrap_json_value(name) + wrapped_value = cls._wrap_json_value(value) + query_part = f"{wrapped_pset}.{wrapped_name} {comparison} {wrapped_value}" + elif filter_type == "type": + query_part = f"type={cls._wrap_json_value(value)}" + elif filter_type == "material": + query_part = f"material={cls._wrap_json_value(value)}" + elif filter_type == "classification": + query_part = f"classification={cls._wrap_json_value(value)}" + elif filter_type == "location": + query_part = f"location={cls._wrap_json_value(value)}" + elif filter_type == "group": + query_part = f"group={cls._wrap_json_value(value)}" + elif filter_type == "parent": + query_part = f"parent={cls._wrap_json_value(value)}" + elif filter_type == "query": + name = filter_data.get("name", "") + if not name: + continue + keys = cls._wrap_json_value(name) + comparison = filter_data.get("comparison", "=") + wrapped_value = cls._wrap_json_value(value) + query_part = f"query:{keys}{comparison}{wrapped_value}" + elif filter_type == "instance": + query_part = value + + if not query_part: + continue + + if filter_mode == "FILTER" and group_results: + results = ifcopenshell.util.selector.filter_elements(ifc_file, query_part, elements=group_results) + group_results = results + elif filter_mode == "SUBTRACT": + results = ifcopenshell.util.selector.filter_elements(ifc_file, query_part) + group_results -= results + else: # ADD + results = ifcopenshell.util.selector.filter_elements(ifc_file, query_part) + group_results.update(results) + + if group_results: + all_group_results.append(group_results) + + final_results = set() + for group_results in all_group_results: + final_results.update(group_results) + + return final_results + + @classmethod + def _wrap_json_value(cls, value: str) -> str: + """Wrap value for use in query string""" + if value.startswith("/") and value.endswith("/"): + return value + elif value in ("NULL", "TRUE", "FALSE"): + return value + return '"' + value.replace('"', '\\"') + '"' + @classmethod def get_comparison_and_value( cls, ifc_filter: BIMFacet From 965a303b4b23ca814b0f8ed1da438f34dfef2ea3 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 17 Dec 2025 00:25:57 +0100 Subject: [PATCH 360/657] Add edit filter query option for backward compatibility in draw_filter function --- src/bonsai/bonsai/bim/helper.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index a59e9964f6..c4c9cf0c7d 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -511,14 +511,13 @@ def draw_filter( row = layout.row(align=True) if not enable_suggestions: row.operator("bim.add_filter_group", text="Add Search Group", icon="ADD").module = module + row.operator("bim.edit_filter_query", text="", icon="FILTER").module = module else: - # When suggestions are enabled, show a simple "Add Filter" button if no filters exist if not filter_groups or not any(fg.filters for fg in filter_groups): op = row.operator("bim.add_filter", text="Add Filter", icon="ADD") op.type = "entity" op.index = 0 op.module = module - row.operator("bim.edit_filter_query", text="", icon="FILTER").module = module for i, filter_group in enumerate(filter_groups): box = layout.box() From d6e9d7d33915382e7650d63d6f3bf363e81e9f33 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 17 Dec 2025 10:55:14 +0100 Subject: [PATCH 361/657] use edit_filter_query to edit json configuration --- src/bonsai/bonsai/bim/helper.py | 4 +- .../bonsai/bim/module/search/__init__.py | 3 + .../bonsai/bim/module/search/operator.py | 139 ++++++++++++++++-- 3 files changed, 130 insertions(+), 16 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index c4c9cf0c7d..1fac2c9b5f 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -511,13 +511,15 @@ def draw_filter( row = layout.row(align=True) if not enable_suggestions: row.operator("bim.add_filter_group", text="Add Search Group", icon="ADD").module = module - row.operator("bim.edit_filter_query", text="", icon="FILTER").module = module else: if not filter_groups or not any(fg.filters for fg in filter_groups): op = row.operator("bim.add_filter", text="Add Filter", icon="ADD") op.type = "entity" op.index = 0 op.module = module + op = row.operator("bim.edit_filter_query", text="", icon="FILTER") + if "module" in op.bl_rna.properties: + op.module = module for i, filter_group in enumerate(filter_groups): box = layout.box() diff --git a/src/bonsai/bonsai/bim/module/search/__init__.py b/src/bonsai/bonsai/bim/module/search/__init__.py index bc3951cc83..88cb2f6ed4 100644 --- a/src/bonsai/bonsai/bim/module/search/__init__.py +++ b/src/bonsai/bonsai/bim/module/search/__init__.py @@ -24,6 +24,7 @@ classes = ( operator.ActivateIfcClassFilter, operator.AddFilter, operator.AddFilterGroup, + operator.ApplyFilterFromText, operator.ColourByProperty, operator.EditFilterQuery, operator.FilterValueSuggestions, @@ -58,7 +59,9 @@ classes = ( def register(): bpy.types.Scene.BIMSearchProperties = bpy.props.PointerProperty(type=prop.BIMSearchProperties) + bpy.types.TEXT_HT_header.append(operator.draw_text_editor_header) def unregister(): del bpy.types.Scene.BIMSearchProperties + bpy.types.TEXT_HT_header.remove(operator.draw_text_editor_header) diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 9ffe2f25e0..081a0df7ae 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -44,6 +44,13 @@ from bonsai.bim.prop import StrProperty from typing import TYPE_CHECKING, Literal, get_args, assert_never +def draw_text_editor_header(self, context): + if context.space_data.text and context.space_data.text.name.startswith("FilterQuery_"): + layout = self.layout + layout.separator() + op = layout.operator("bim.apply_filter_from_text", text="Apply Filter Configuration", icon="CHECKMARK") + + def update_filter_search_value(self: "FilterValueSuggestions", context: bpy.types.Context) -> None: filter_groups = tool.Search.get_filter_groups(self.module) ifc_filter = filter_groups[self.group_index].filters[self.filter_index] @@ -112,7 +119,7 @@ class FilterValueSuggestions(Operator): group_index: IntProperty() filter_index: IntProperty() - module: StringProperty() + module: StringProperty(default="search") filter_type: StringProperty() suggestion_type: StringProperty(default="value") @@ -603,6 +610,47 @@ class SelectFilterElements(bpy.types.Operator): return {"FINISHED"} +class ApplyFilterFromText(Operator, tool.Ifc.Operator): + bl_idname = "bim.apply_filter_from_text" + bl_label = "Apply Filter Configuration" + bl_description = "Apply the JSON filter configuration from the current text block" + bl_options = {"REGISTER", "UNDO"} + + @classmethod + def poll(cls, context): + if context.area and context.area.type == 'TEXT_EDITOR': + space = context.space_data + if space.text and space.text.name.startswith("FilterQuery_"): + return True + return False + + def execute(self, context): + space = context.space_data + text = space.text + + if not text or not text.name.startswith("FilterQuery_"): + self.report({"ERROR"}, "No valid filter configuration text block") + return {'CANCELLED'} + + module = text.name.replace("FilterQuery_", "") + + try: + json_data = json.loads(text.as_string()) + filter_structure = json_data.get("filter_structure", []) + filter_groups = tool.Search.get_filter_groups(module) + tool.Search.import_filter_structure(filter_structure, filter_groups) + self.report({"INFO"}, "Filter configuration applied successfully") + + if len(context.window_manager.windows) > 1: + bpy.ops.wm.window_close() + + except Exception as e: + self.report({"ERROR"}, f"Invalid JSON: {str(e)}") + return {'CANCELLED'} + + return {'FINISHED'} + + class EditFilterQuery(Operator, tool.Ifc.Operator): bl_idname = "bim.edit_filter_query" bl_label = "Edit Filter Query" @@ -610,29 +658,90 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} query: StringProperty(name="Query") old_query: StringProperty(name="Old Query") - module: StringProperty() + module: StringProperty(default="search") def _execute(self, context): - if self.query == self.old_query: - return + module = getattr(self, "module", "search") + preferences = tool.Blender.get_addon_preferences() + enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + + if not enable_suggestions: + if self.query == self.old_query: + return - filter_groups = tool.Search.get_filter_groups(self.module) - try: - tool.Search.import_filter_query(self.query, filter_groups) - except: - return + filter_groups = tool.Search.get_filter_groups(module) + try: + tool.Search.import_filter_query(self.query, filter_groups) + except: + return def draw(self, context): - row = self.layout.row() - row.prop(self, "query", text="") + preferences = tool.Blender.get_addon_preferences() + enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + + if not enable_suggestions: + row = self.layout.row() + row.prop(self, "query", text="") def invoke(self, context, event): - filter_groups = tool.Search.get_filter_groups(self.module) + module = getattr(self, "module", "search") + filter_groups = tool.Search.get_filter_groups(module) + preferences = tool.Blender.get_addon_preferences() + enable_suggestions = getattr(preferences, "search_filter_suggestions", False) - self.query = tool.Search.export_filter_query(filter_groups) - self.old_query = self.query + if enable_suggestions: + filter_structure = [] + for filter_group in filter_groups: + group_data = [] + for ifc_filter in filter_group.filters: + filter_data = { + "type": ifc_filter.type, + "name": ifc_filter.name, + "value": ifc_filter.value, + "pset": ifc_filter.pset, + "comparison": ifc_filter.comparison, + "filter_mode": ifc_filter.filter_mode, + } + group_data.append(filter_data) + filter_structure.append(group_data) + + query = tool.Search.export_filter_query(filter_groups) + json_data = { + "type": "BBIM_Search", + "query": query, + "filter_structure": filter_structure + } + + text_block_name = f"FilterQuery_{module}" + text = bpy.data.texts.get(text_block_name) + if not text: + text = bpy.data.texts.new(text_block_name) + + text.clear() + text.write(json.dumps(json_data, indent=2)) + + bpy.ops.wm.window_new() + new_window = context.window_manager.windows[-1] + + new_area = new_window.screen.areas[0] + new_area.type = 'TEXT_EDITOR' + + text_space = None + for space in new_area.spaces: + if space.type == 'TEXT_EDITOR': + text_space = space + break + + if text_space: + text_space.text = text + + self.report({"INFO"}, "Compact text editor opened. Edit JSON and click 'Apply Filter Configuration' in header") + return {'FINISHED'} - return context.window_manager.invoke_props_dialog(self) + else: + self.query = tool.Search.export_filter_query(filter_groups) + self.old_query = self.query + return context.window_manager.invoke_props_dialog(self, width=400) class Search(Operator): From 9d143696561266281f95fd88a99f2a6024939f08 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sun, 14 Dec 2025 18:09:49 +0100 Subject: [PATCH 362/657] cmake: Add missing WITH_OPENCOLLADA definition --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e95d40574d..742ef0d6b8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -327,6 +327,7 @@ message(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}") if(COLLADA_SUPPORT) find_package(OpenCOLLADA REQUIRED) + add_definitions(-DWITH_OPENCOLLADA) endif() if(HDF5_SUPPORT) From 8912cca65253c9e4f9b31b0a9921560ffa63cbe9 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 17 Dec 2025 11:13:17 +0100 Subject: [PATCH 363/657] Increase dialog width for filter value suggestions to improve usability --- src/bonsai/bonsai/bim/module/search/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 081a0df7ae..fc78ed9aa5 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -154,7 +154,7 @@ class FilterValueSuggestions(Operator): for suggestion in natsorted(string_suggestions): self.collection_values.add().name = suggestion - return context.window_manager.invoke_props_dialog(self, width=300) + return context.window_manager.invoke_props_dialog(self, width=800) def draw(self, context): layout = self.layout From 1477d650a49fea46c3c16bc5f3a5fb669151b9d4 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 17 Dec 2025 19:28:00 +0100 Subject: [PATCH 364/657] Rename to chain_filter_with_set_operations for clarity and update related preferences --- src/bonsai/bonsai/bim/helper.py | 2 +- src/bonsai/bonsai/bim/module/drawing/operator.py | 2 +- src/bonsai/bonsai/bim/module/search/operator.py | 8 ++++---- src/bonsai/bonsai/bim/ui.py | 10 +++++----- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index 1fac2c9b5f..16c6226326 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -490,7 +490,7 @@ def draw_filter( sprops = tool.Search.get_search_props() preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) if tool.Ifc.get(): row = layout.row(align=True) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 434880d5da..76eb3c7afa 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3688,7 +3688,7 @@ class EditElementFilter(bpy.types.Operator, tool.Ifc.Operator): assert pset preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) if self.filter_mode == "INCLUDE": filter_groups = props.include_filter_groups diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index fc78ed9aa5..75dccd4d95 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -663,7 +663,7 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): def _execute(self, context): module = getattr(self, "module", "search") preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) if not enable_suggestions: if self.query == self.old_query: @@ -677,7 +677,7 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): def draw(self, context): preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) if not enable_suggestions: row = self.layout.row() @@ -687,7 +687,7 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): module = getattr(self, "module", "search") filter_groups = tool.Search.get_filter_groups(module) preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) if enable_suggestions: filter_structure = [] @@ -767,7 +767,7 @@ class Search(Operator): assert_never(self.property_group) preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "search_filter_suggestions", False) + enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) if enable_suggestions: results = tool.Search.execute_filter_groups(props.filter_groups) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index d3cd1012fc..eacd6ec472 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -690,9 +690,9 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): default=False, ) - search_filter_suggestions: BoolProperty( - name="Enable advanced search with filter suggestions", - description="Enable filter mode (ADD/SUBTRACT/FILTER) and value suggestions for search filters", + chain_filter_with_set_operations: BoolProperty( + name="Enable chained filters with set operations", + description="Enable chaining search filters with set operations: ADD (union: combine sets), SUBTRACT (difference: remove from set), FILTER (intersection: only elements in both sets), with autocomplete suggestions for filter values", default=False, ) @@ -733,7 +733,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): default_parameters: DefaultParameters container_hide_show_isolate: bool mass_time_units_in_wizard: bool - search_filter_suggestions: bool + chain_filter_with_set_operations: bool def draw(self, context: bpy.types.Context) -> None: layout = self.layout @@ -916,7 +916,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "container_hide_show_isolate") layout.prop(self, "mass_time_units_in_wizard") - layout.prop(self, "search_filter_suggestions") + layout.prop(self, "chain_filter_with_set_operations") # Scene panel groups From 3f7eba246726eb16be07b7b4b37390f77f6d7b68 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Wed, 17 Dec 2025 12:48:48 -0600 Subject: [PATCH 365/657] Include 'Commercial Kitchen Hood' in IFC suggestions Added new suggestion for 'Commercial Kitchen Hood' under IfcAirTerminal and IfcAirTerminalType. --- .../util/schema/ifc_classes_suggestions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 f9f76947bb..c3cf248ada 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json +++ b/src/ifcopenshell-python/ifcopenshell/util/schema/ifc_classes_suggestions.json @@ -5,6 +5,16 @@ "predefined_type": "NOTDEFINED" } ], + "IfcAirTerminal": [ + { + "name": "Commercial Kitchen Hood" + } + ], + "IfcAirTerminalType": [ + { + "name": "Commercial Kitchen Hood" + } + ], "IfcAirTerminalBox": [ { "name": "VAV Box" From 3ebb046619e43a1f42087e95fb9be1959cbfe0a4 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Wed, 17 Dec 2025 21:19:39 -0600 Subject: [PATCH 366/657] Fix #7138: rasterized background from wrong drawing when printing all Force viewport to use scene camera before rendering underlay. When print_all was used, viewport remained locked to local camera from previous drawing, causing OpenGL render to capture wrong view. --- .../bonsai/bim/module/drawing/operator.py | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 248fae5775..eaf7d2d75a 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -296,6 +296,8 @@ class CreateDrawing(bpy.types.Operator): self.drawing_index = drawing_i if self.print_all: bpy.ops.bim.activate_drawing(drawing=drawing_id, should_view_from_camera=False) + original_cache_setting = self.props.should_use_underlay_cache + self.props.should_use_underlay_cache = False self.camera = context.scene.camera assert (camera_element := tool.Ifc.get_entity(self.camera)) @@ -339,6 +341,23 @@ class CreateDrawing(bpy.types.Operator): f"Failed to create drawing '{self.drawing.Name}' - drawing has underlay but there's no active drawing underlay style.", ) return {"FINISHED"} + + # Clear any local camera setup and force viewport to use scene camera + for area in context.screen.areas: + if area.type == 'VIEW_3D': + for space in area.spaces: + if space.type == 'VIEW_3D': + # Clear local camera to ensure we use scene.camera + space.use_local_camera = False + space.camera = context.scene.camera + space.region_3d.view_perspective = 'CAMERA' + print(f"Set viewport camera to: {context.scene.camera.name}") + break + + # Force complete scene update + context.view_layer.update() + context.evaluated_depsgraph_get() + underlay_svg = self.generate_underlay(context) with profile("Generate linework"): @@ -429,11 +448,24 @@ class CreateDrawing(bpy.types.Operator): if not ifcopenshell.util.element.get_pset(self.drawing, "EPset_Drawing", "HasUnderlay"): return svg_path = self.get_svg_path(cache_type="underlay") + print(f"\n--- GENERATE UNDERLAY ---") + print(f"Drawing: {self.drawing.Name}") + print(f"SVG path: {svg_path}") + print(f"Cache exists: {os.path.isfile(svg_path)}") + print(f"Use cache: {self.props.should_use_underlay_cache}") + print(f"Render filepath will be: {context.scene.render.filepath}") + if os.path.isfile(svg_path) and self.props.should_use_underlay_cache: + print(f"RETURNING CACHED UNDERLAY") return svg_path + print(f"GENERATING NEW UNDERLAY") + + render_png_path = str(Path(svg_path).with_suffix(".png")) + context.scene.render.filepath = render_png_path + print(f"SET Render filepath to: {context.scene.render.filepath}") + assert context.scene and context.view_layer and context.screen - context.scene.render.filepath = str(Path(svg_path).with_suffix(".png")) assert (drawing_style := self.cprops.get_active_drawing_style()) tool.Blender.sync_render_visibility() From bc5e4d79351dab6870b424fafb40e13890413e35 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Wed, 17 Dec 2025 21:30:09 -0600 Subject: [PATCH 367/657] removed debugging print statements from previous commit. --- src/bonsai/bonsai/bim/module/drawing/operator.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index eaf7d2d75a..0c5c99e623 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -448,24 +448,11 @@ class CreateDrawing(bpy.types.Operator): if not ifcopenshell.util.element.get_pset(self.drawing, "EPset_Drawing", "HasUnderlay"): return svg_path = self.get_svg_path(cache_type="underlay") - print(f"\n--- GENERATE UNDERLAY ---") - print(f"Drawing: {self.drawing.Name}") - print(f"SVG path: {svg_path}") - print(f"Cache exists: {os.path.isfile(svg_path)}") - print(f"Use cache: {self.props.should_use_underlay_cache}") - print(f"Render filepath will be: {context.scene.render.filepath}") - if os.path.isfile(svg_path) and self.props.should_use_underlay_cache: - print(f"RETURNING CACHED UNDERLAY") return svg_path - print(f"GENERATING NEW UNDERLAY") - - render_png_path = str(Path(svg_path).with_suffix(".png")) - context.scene.render.filepath = render_png_path - print(f"SET Render filepath to: {context.scene.render.filepath}") - assert context.scene and context.view_layer and context.screen + context.scene.render.filepath = str(Path(svg_path).with_suffix(".png")) assert (drawing_style := self.cprops.get_active_drawing_style()) tool.Blender.sync_render_visibility() From 738a068474c93fcb27afeb380b20fb0fed90d0a8 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 18 Dec 2025 09:12:42 +0100 Subject: [PATCH 368/657] Refactor filter suggestion handling to streamline preference access and improve code clarity --- src/bonsai/bonsai/bim/helper.py | 148 ++++++++---------- .../bonsai/bim/module/drawing/operator.py | 5 +- .../bonsai/bim/module/search/operator.py | 16 +- src/bonsai/bonsai/bim/ui.py | 4 +- 4 files changed, 76 insertions(+), 97 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index 16c6226326..481d4ea080 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -489,8 +489,6 @@ def draw_filter( data.load() sprops = tool.Search.get_search_props() - preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) if tool.Ifc.get(): row = layout.row(align=True) @@ -500,7 +498,7 @@ def draw_filter( if data.data["saved_searches"]: row.operator("bim.load_search", text="", icon="IMPORT").module = module row.operator("bim.save_search", text="", icon="EXPORT").module = module - if data.data["saved_searches"] and enable_suggestions: + if data.data["saved_searches"]: row.operator("bim.remove_search", text="", icon="REMOVE").module = module if module != "search": if module == "drawing_include": @@ -509,7 +507,7 @@ def draw_filter( row.operator("bim.edit_element_filter", icon="CHECKMARK", text="").filter_mode = "EXCLUDE" row.operator("bim.enable_editing_element_filter", icon="CANCEL", text="").filter_mode = "NONE" row = layout.row(align=True) - if not enable_suggestions: + if not tool.Blender.get_addon_preferences().chain_filter_with_set_operations: row.operator("bim.add_filter_group", text="Add Search Group", icon="ADD").module = module else: if not filter_groups or not any(fg.filters for fg in filter_groups): @@ -537,7 +535,7 @@ def draw_filter( for j, ifc_filter in enumerate(filter_group.filters): if ifc_filter.type == "entity": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -549,15 +547,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "value", text="", icon="FILE_3D") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "attribute": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -569,15 +566,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "name", text="", icon="COPY_ID") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type - op.suggestion_type = "attribute_name" + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type + op.suggestion_type = "attribute_name" row.prop(ifc_filter, "value", text="") - if enable_suggestions and ifc_filter.name: + if ifc_filter.name: op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") op.group_index = i op.filter_index = j @@ -586,7 +582,7 @@ def draw_filter( op.suggestion_type = "attribute_value" elif ifc_filter.type == "type": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -598,15 +594,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "value", text="", icon="FILE_VOLUME") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "material": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -618,15 +613,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "value", text="", icon="MATERIAL") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "property": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -638,15 +632,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "pset", text="", icon="PROPERTIES") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type - op.suggestion_type = "pset" + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type + op.suggestion_type = "pset" row.prop(ifc_filter, "name", text="") - if enable_suggestions and ifc_filter.pset: + if ifc_filter.pset: op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") op.group_index = i op.filter_index = j @@ -655,7 +648,7 @@ def draw_filter( op.suggestion_type = "property_name" row.prop(ifc_filter, "comparison", text="") row.prop(ifc_filter, "value", text="") - if enable_suggestions and ifc_filter.pset and ifc_filter.name: + if ifc_filter.pset and ifc_filter.name: op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") op.group_index = i op.filter_index = j @@ -664,7 +657,7 @@ def draw_filter( op.suggestion_type = "property_value" elif ifc_filter.type == "classification": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -676,15 +669,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "value", text="", icon="OUTLINER") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "location": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -696,15 +688,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "value", text="", icon="PACKAGE") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "group": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -716,15 +707,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "value", text="", icon="OUTLINER_COLLECTION") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "parent": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -736,15 +726,14 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "value", text="", icon="FILE_PARENT") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type elif ifc_filter.type == "query": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -760,7 +749,7 @@ def draw_filter( row.prop(ifc_filter, "value", text="") elif ifc_filter.type == "instance": row = box.row(align=True) - if enable_suggestions and j > 0: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -772,12 +761,11 @@ def draw_filter( op.filter_index = j op.module = module row.prop(ifc_filter, "value", text="", icon="GRIP") - if enable_suggestions: - op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") - op.group_index = i - op.filter_index = j - op.module = module - op.filter_type = ifc_filter.type + op = row.operator("bim.filter_value_suggestions", text="", icon="VIEWZOOM") + op.group_index = i + op.filter_index = j + op.module = module + op.filter_type = ifc_filter.type op = row.operator("bim.select_filter_elements", text="", icon="EYEDROPPER") op.group_index = i op.index = j diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 76eb3c7afa..57ebe25269 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3687,9 +3687,6 @@ class EditElementFilter(bpy.types.Operator, tool.Ifc.Operator): pset = tool.Pset.get_element_pset(element, "EPset_Drawing") assert pset - preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) - if self.filter_mode == "INCLUDE": filter_groups = props.include_filter_groups elif self.filter_mode == "EXCLUDE": @@ -3699,7 +3696,7 @@ class EditElementFilter(bpy.types.Operator, tool.Ifc.Operator): query = tool.Search.export_filter_query(filter_groups) or None - if enable_suggestions and query: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and query: filter_structure = [] for filter_group in filter_groups: group_data = [] diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 75dccd4d95..9402aebcff 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -662,10 +662,8 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): def _execute(self, context): module = getattr(self, "module", "search") - preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) - if not enable_suggestions: + if not tool.Blender.get_addon_preferences().chain_filter_with_set_operations: if self.query == self.old_query: return @@ -676,20 +674,16 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): return def draw(self, context): - preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) - if not enable_suggestions: + if not tool.Blender.get_addon_preferences().chain_filter_with_set_operations: row = self.layout.row() row.prop(self, "query", text="") def invoke(self, context, event): module = getattr(self, "module", "search") filter_groups = tool.Search.get_filter_groups(module) - preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) - if enable_suggestions: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations: filter_structure = [] for filter_group in filter_groups: group_data = [] @@ -766,10 +760,8 @@ class Search(Operator): else: assert_never(self.property_group) - preferences = tool.Blender.get_addon_preferences() - enable_suggestions = getattr(preferences, "chain_filter_with_set_operations", False) - if enable_suggestions: + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations: results = tool.Search.execute_filter_groups(props.filter_groups) else: results = ifcopenshell.util.selector.filter_elements( diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index eacd6ec472..0cac35da80 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -916,7 +916,9 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "container_hide_show_isolate") layout.prop(self, "mass_time_units_in_wizard") - layout.prop(self, "chain_filter_with_set_operations") + row = layout.row(align=True) + row.prop(self, "chain_filter_with_set_operations") + row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/3270" # Scene panel groups From affaa859ef1e32f49e70b36f4246610518434121 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 18 Dec 2025 10:20:28 +0100 Subject: [PATCH 369/657] Enhance filter operation modes with new preferences for chaining and default behaviors --- src/bonsai/bonsai/bim/helper.py | 14 ++++- .../bonsai/bim/module/search/operator.py | 4 +- src/bonsai/bonsai/bim/ui.py | 15 ++++- src/bonsai/bonsai/tool/search.py | 56 ++++++++++++++++++- 4 files changed, 81 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index 481d4ea080..873d368fad 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -535,7 +535,12 @@ def draw_filter( for j, ifc_filter in enumerate(filter_group.filters): if ifc_filter.type == "entity": row = box.row(align=True) - if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: + preferences = tool.Blender.get_addon_preferences() + if preferences.chain_filter_with_set_operations: + show_mode_toggle = j > 0 + else: + show_mode_toggle = preferences.default_filter_with_set_operations_for_globalid_and_class and j > 0 # PR 7315 mode + if show_mode_toggle: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", @@ -749,7 +754,12 @@ def draw_filter( row.prop(ifc_filter, "value", text="") elif ifc_filter.type == "instance": row = box.row(align=True) - if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and j > 0: + preferences = tool.Blender.get_addon_preferences() + if preferences.chain_filter_with_set_operations: + show_mode_toggle = j > 0 + else: + show_mode_toggle = preferences.default_filter_with_set_operations_for_globalid_and_class and j > 0 # PR 7315 mode + if show_mode_toggle: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( "bim.toggle_filter_inclusion", diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 9402aebcff..f9e7885ebe 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -760,8 +760,8 @@ class Search(Operator): else: assert_never(self.property_group) - - if tool.Blender.get_addon_preferences().chain_filter_with_set_operations: + preferences = tool.Blender.get_addon_preferences() + if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: results = tool.Search.execute_filter_groups(props.filter_groups) else: results = ifcopenshell.util.selector.filter_elements( diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 0cac35da80..5c7ff01226 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -691,10 +691,15 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): ) chain_filter_with_set_operations: BoolProperty( - name="Enable chained filters with set operations", + name="NEW filter mode: Enable chained filters with set operations", description="Enable chaining search filters with set operations: ADD (union: combine sets), SUBTRACT (difference: remove from set), FILTER (intersection: only elements in both sets), with autocomplete suggestions for filter values", default=False, ) + default_filter_with_set_operations_for_globalid_and_class: BoolProperty( + name="DEFAULT filter mode: Enable set operations for GlobalId/Class", + description="Enable ADD/SUBTRACT/FILTER toggle buttons on entity (Class) and instance (GlobalId) filters for the DEFAULT filter mode", + default=False, + ) if TYPE_CHECKING: svg2pdf_command: str @@ -734,6 +739,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): container_hide_show_isolate: bool mass_time_units_in_wizard: bool chain_filter_with_set_operations: bool + default_filter_with_set_operations_for_globalid_and_class: bool def draw(self, context: bpy.types.Context) -> None: layout = self.layout @@ -916,9 +922,14 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "container_hide_show_isolate") layout.prop(self, "mass_time_units_in_wizard") - row = layout.row(align=True) + layout.label(text="Filtering modes:") + box = layout.box() + row = box.row(align=True) row.prop(self, "chain_filter_with_set_operations") row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/3270" + row = box.row(align=True) + row.prop(self, "default_filter_with_set_operations_for_globalid_and_class") + row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/comment/27030" # Scene panel groups diff --git a/src/bonsai/bonsai/tool/search.py b/src/bonsai/bonsai/tool/search.py index ece6062f49..20c4b75387 100644 --- a/src/bonsai/bonsai/tool/search.py +++ b/src/bonsai/bonsai/tool/search.py @@ -184,23 +184,64 @@ class Search(bonsai.core.tool.Search): Within a single group chain, all filters chain sequentially with ADD/SUBTRACT/FILTER modes. Groups are combined with union (same as original " + " behavior). """ + preferences = tool.Blender.get_addon_preferences() + #print(f"\n{'='*80}") + #print(f"DEBUG: execute_filter_groups - Starting execution") + #print(f"DEBUG: Preferences - chain_filter_with_set_operations: {preferences.chain_filter_with_set_operations}") + #print(f"DEBUG: Preferences - default_filter_with_set_operations_for_globalid_and_class: {preferences.default_filter_with_set_operations_for_globalid_and_class}") + #print(f"DEBUG: Total filter groups: {len(filter_groups)}") + all_group_results = [] - for filter_group in filter_groups: + for group_idx, filter_group in enumerate(filter_groups): + #print(f"\n--- Group {group_idx} ---") group_results = set() for filter_index, ifc_filter in enumerate(filter_group.filters): + #print(f"\n Filter {filter_index}:") + #print(f" Type: {ifc_filter.type}") + #print(f" Value: {ifc_filter.value}") + #print(f" filter_mode property: {ifc_filter.filter_mode}") + if not ifc_filter.value: + #print(f" SKIPPED: No value") continue query = cls._export_single_filter(ifc_filter) if not query: + #print(f" SKIPPED: No query generated") continue - mode = "ADD" if filter_index == 0 else ifc_filter.filter_mode + #print(f" Generated query: {query}") + #print(f" Current group_results size before this filter: {len(group_results)}") + + # Determine the mode for this filter + if filter_index == 0: + mode = "ADD" # First filter is always ADD + #print(f" Mode decision: ADD (first filter)") + else: + # For entity and instance filters, check if set operations are enabled + if ifc_filter.type in ["entity", "instance"]: + # Use filter_mode only if chain mode OR default mode preference is enabled + if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: + mode = ifc_filter.filter_mode + #print(f" Mode decision: {mode} (entity/instance with preference enabled)") + else: + # Default behavior: sequential filtering (FILTER mode) + mode = "FILTER" if group_results else "ADD" + #print(f" Mode decision: {mode} (entity/instance default behavior)") + else: + # For other filter types, use chain mode if enabled, otherwise FILTER + if preferences.chain_filter_with_set_operations: + mode = ifc_filter.filter_mode + #print(f" Mode decision: {mode} (other type with chain mode)") + else: + mode = "FILTER" if group_results else "ADD" + #print(f" Mode decision: {mode} (other type default behavior)") if mode == "ADD": results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) + #print(f" ADD: Found {len(results)} elements, adding to group_results") group_results.update(results) elif mode == "SUBTRACT": @@ -209,9 +250,11 @@ class Search(bonsai.core.tool.Search): elements_to_remove = ifcopenshell.util.selector.filter_elements( tool.Ifc.get(), query_without_prefix, elements=group_results ) + #print(f" SUBTRACT: Removing {len(elements_to_remove)} elements from group_results") group_results -= elements_to_remove else: results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) + #print(f" SUBTRACT: group_results empty, adding {len(results)} elements (fallback to ADD)") group_results.update(results) elif mode == "FILTER": @@ -219,11 +262,16 @@ class Search(bonsai.core.tool.Search): results = ifcopenshell.util.selector.filter_elements( tool.Ifc.get(), query, elements=group_results ) + #print(f" FILTER: Filtering group_results, result: {len(results)} elements") group_results = results else: results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) + #print(f" FILTER: group_results empty, found {len(results)} elements (fallback to ADD)") group_results.update(results) + + #print(f" Group results size after this filter: {len(group_results)}") + #print(f"\n Group {group_idx} final size: {len(group_results)}") if group_results: all_group_results.append(group_results) @@ -231,6 +279,10 @@ class Search(bonsai.core.tool.Search): for group_results in all_group_results: final_results.update(group_results) + #print(f"\n{'='*80}") + #print(f"DEBUG: Final combined results: {len(final_results)} elements") + #print(f"{'='*80}\n") + return final_results @classmethod From 59c9b162761b2f3c62d3a08f79e1bccf13591fd8 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 18 Dec 2025 10:56:18 +0100 Subject: [PATCH 370/657] Migrate old filter prefixes to new filter_mode system and enhance filter handling based on user preferences --- .../bonsai/bim/module/search/operator.py | 10 ++++ src/bonsai/bonsai/tool/search.py | 59 +++++-------------- 2 files changed, 24 insertions(+), 45 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index f9e7885ebe..58c773af17 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -761,7 +761,17 @@ class Search(Operator): assert_never(self.property_group) preferences = tool.Blender.get_addon_preferences() + + # Migrate old ! prefix filters to new filter_mode system when preferences are enabled if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: + for filter_group in props.filter_groups: + for ifc_filter in filter_group.filters: + if ifc_filter.type not in ["entity", "instance"]: + continue + if ifc_filter.value.startswith("!"): + ifc_filter.value = ifc_filter.value[1:] + ifc_filter.filter_mode = "SUBTRACT" + results = tool.Search.execute_filter_groups(props.filter_groups) else: results = ifcopenshell.util.selector.filter_elements( diff --git a/src/bonsai/bonsai/tool/search.py b/src/bonsai/bonsai/tool/search.py index 20c4b75387..36536f5a1a 100644 --- a/src/bonsai/bonsai/tool/search.py +++ b/src/bonsai/bonsai/tool/search.py @@ -123,21 +123,28 @@ class Search(bonsai.core.tool.Search): @classmethod def _export_single_filter(cls, ifc_filter: BIMFacet) -> str: + preferences = tool.Blender.get_addon_preferences() + if ifc_filter.type == "instance": if "bpy.data.texts" in ifc_filter.value: data_name = ifc_filter.value.split("bpy.data.texts")[1][2:-2] value = bpy.data.texts[data_name].as_string() else: value = ifc_filter.value - value = value.lstrip("!") - if ifc_filter.filter_mode == "SUBTRACT": - value = f"!{value}" + + if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: + value = value.lstrip("!") + if ifc_filter.filter_mode == "SUBTRACT": + value = f"!{value}" return value + elif ifc_filter.type == "entity": value = ifc_filter.value - value = value.lstrip("!") - if ifc_filter.filter_mode == "SUBTRACT": - value = f"!{value}" + + if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: + value = value.lstrip("!") + if ifc_filter.filter_mode == "SUBTRACT": + value = f"!{value}" return value elif ifc_filter.type == "attribute": if not ifc_filter.name: @@ -185,63 +192,36 @@ class Search(bonsai.core.tool.Search): Groups are combined with union (same as original " + " behavior). """ preferences = tool.Blender.get_addon_preferences() - #print(f"\n{'='*80}") - #print(f"DEBUG: execute_filter_groups - Starting execution") - #print(f"DEBUG: Preferences - chain_filter_with_set_operations: {preferences.chain_filter_with_set_operations}") - #print(f"DEBUG: Preferences - default_filter_with_set_operations_for_globalid_and_class: {preferences.default_filter_with_set_operations_for_globalid_and_class}") - #print(f"DEBUG: Total filter groups: {len(filter_groups)}") all_group_results = [] for group_idx, filter_group in enumerate(filter_groups): - #print(f"\n--- Group {group_idx} ---") group_results = set() for filter_index, ifc_filter in enumerate(filter_group.filters): - #print(f"\n Filter {filter_index}:") - #print(f" Type: {ifc_filter.type}") - #print(f" Value: {ifc_filter.value}") - #print(f" filter_mode property: {ifc_filter.filter_mode}") - if not ifc_filter.value: - #print(f" SKIPPED: No value") continue query = cls._export_single_filter(ifc_filter) if not query: - #print(f" SKIPPED: No query generated") continue - #print(f" Generated query: {query}") - #print(f" Current group_results size before this filter: {len(group_results)}") - - # Determine the mode for this filter if filter_index == 0: - mode = "ADD" # First filter is always ADD - #print(f" Mode decision: ADD (first filter)") + mode = "ADD" else: - # For entity and instance filters, check if set operations are enabled if ifc_filter.type in ["entity", "instance"]: - # Use filter_mode only if chain mode OR default mode preference is enabled if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: mode = ifc_filter.filter_mode - #print(f" Mode decision: {mode} (entity/instance with preference enabled)") else: - # Default behavior: sequential filtering (FILTER mode) mode = "FILTER" if group_results else "ADD" - #print(f" Mode decision: {mode} (entity/instance default behavior)") else: - # For other filter types, use chain mode if enabled, otherwise FILTER if preferences.chain_filter_with_set_operations: mode = ifc_filter.filter_mode - #print(f" Mode decision: {mode} (other type with chain mode)") else: mode = "FILTER" if group_results else "ADD" - #print(f" Mode decision: {mode} (other type default behavior)") if mode == "ADD": results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) - #print(f" ADD: Found {len(results)} elements, adding to group_results") group_results.update(results) elif mode == "SUBTRACT": @@ -250,11 +230,9 @@ class Search(bonsai.core.tool.Search): elements_to_remove = ifcopenshell.util.selector.filter_elements( tool.Ifc.get(), query_without_prefix, elements=group_results ) - #print(f" SUBTRACT: Removing {len(elements_to_remove)} elements from group_results") group_results -= elements_to_remove else: results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) - #print(f" SUBTRACT: group_results empty, adding {len(results)} elements (fallback to ADD)") group_results.update(results) elif mode == "FILTER": @@ -262,16 +240,11 @@ class Search(bonsai.core.tool.Search): results = ifcopenshell.util.selector.filter_elements( tool.Ifc.get(), query, elements=group_results ) - #print(f" FILTER: Filtering group_results, result: {len(results)} elements") group_results = results else: results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) - #print(f" FILTER: group_results empty, found {len(results)} elements (fallback to ADD)") group_results.update(results) - - #print(f" Group results size after this filter: {len(group_results)}") - #print(f"\n Group {group_idx} final size: {len(group_results)}") if group_results: all_group_results.append(group_results) @@ -279,10 +252,6 @@ class Search(bonsai.core.tool.Search): for group_results in all_group_results: final_results.update(group_results) - #print(f"\n{'='*80}") - #print(f"DEBUG: Final combined results: {len(final_results)} elements") - #print(f"{'='*80}\n") - return final_results @classmethod From f8144cdbad5a45e0d09c74c1b456f25787061a02 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 18 Dec 2025 15:40:38 +0500 Subject: [PATCH 371/657] ci.yml - color cmake output --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ad00406ed8..9d307ab96c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,6 +34,10 @@ jobs: compile-and-test: runs-on: ubuntu-22.04 needs: activate + env: + # Colored output for cmake. + CLICOLOR_FORCE: "1" + CMAKE_COLOR_DIAGNOSTICS: "ON" steps: - uses: actions/checkout@v5 with: From 4d52480cbe4a9553dbaa8e253e15f80b561d878a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 18 Dec 2025 18:11:04 +0500 Subject: [PATCH 372/657] cmake - find dependencies from exported config file --- cmake/IfcOpenShellConfig.cmake.in | 35 +++++++++++++++++++++++++++++++ src/examples/CMakeLists.txt | 19 ----------------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/cmake/IfcOpenShellConfig.cmake.in b/cmake/IfcOpenShellConfig.cmake.in index afdfe838bc..414066668d 100644 --- a/cmake/IfcOpenShellConfig.cmake.in +++ b/cmake/IfcOpenShellConfig.cmake.in @@ -4,7 +4,42 @@ set(IFCOPENSHELL_SCHEMA_VERSIONS @SCHEMA_VERSIONS@) set(IFCOPENSHELL_WITH_OPENCASCADE @WITH_OPENCASCADE@) +set(IFCOPENSHELL_WITH_CGAL @WITH_CGAL@) +set(IFCOPENSHELL_IFCXML @IFCXML_SUPPORT@) +set(IFCOPENSHELL_WITH_ROCKSDB @WITH_ROCKSDB@) +include(CMakeFindDependencyMacro) + +set(Boost_USE_STATIC_LIBS ON) +set(Boost_USE_STATIC_RUNTIME OFF) +set(Boost_USE_MULTITHREADED ON) +set(Boost_COMPONENTS system program_options regex thread date_time iostreams) +find_dependency(Boost CONFIG COMPONENTS ${Boost_COMPONENTS}) +find_dependency(Eigen3 CONFIG) + +if(IFCOPENSHELL_WITH_ROCKSDB) + find_dependency(zstd CONFIG) + find_dependency(RocksDB CONFIG) +endif() + +if(IFCOPENSHELL_IFCXML) + find_dependency(LibXml2 CONFIG) +endif() + + +if(IFCOPENSHELL_WITH_CGAL) + find_dependency(CGAL CONFIG) +endif() + +if(IFCOPENSHELL_WITH_OPENCASCADE) + find_dependency(OpenCASCADE CONFIG) + if(OpenCASCADE_VERSION VERSION_LESS "7.7.0") + # cmake configs < 7.7.0 were not adding include directories to targets automatically. + set_target_properties(TKernel PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}" + ) + endif() +endif() include("${CMAKE_CURRENT_LIST_DIR}/@CONFIG_TARGETS_FILENAME@") diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index be3a3e42d9..9e1e911cda 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -28,14 +28,6 @@ if(STANDALONE_PROJECT) project(IfcOpenShellExamples) set(CMAKE_CXX_STANDARD 17) - set(Boost_USE_STATIC_LIBS ON) - set(Boost_USE_STATIC_RUNTIME OFF) - set(Boost_USE_MULTITHREADED ON) - set(Boost_COMPONENTS system program_options regex thread date_time iostreams) - find_package(Boost CONFIG REQUIRED COMPONENTS ${Boost_COMPONENTS}) - find_package(zstd CONFIG REQUIRED) - find_package(RocksDB CONFIG REQUIRED) - find_package(LibXml2 CONFIG REQUIRED) find_package(IfcOpenShell CONFIG REQUIRED) set(SCHEMA_VERSIONS ${IFCOPENSHELL_SCHEMA_VERSIONS}) set(WITH_OPENCASCADE ${IFCOPENSHELL_WITH_OPENCASCADE}) @@ -61,17 +53,6 @@ if(SCHEMA_VERSIONS MATCHES "2x3") add_library(IfcHouseInterface INTERFACE) if (STANDALONE_PROJECT) - find_package(Eigen3 CONFIG REQUIRED) - find_package(CGAL CONFIG REQUIRED) - find_package(OpenCASCADE CONFIG REQUIRED) - - if(OpenCASCADE_VERSION VERSION_LESS "7.7.0") - # cmake configs < 7.7.0 were not adding include directories to targets automatically. - set_target_properties(TKernel PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}" - ) - endif() - target_link_libraries(IfcHouseInterface INTERFACE IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer) else() target_link_libraries(IfcHouseInterface INTERFACE IfcParse geometry_serializer) From 2581c36a5f66e5b2cc4eb549de7c7029d3faca18 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 18 Dec 2025 18:47:07 +0500 Subject: [PATCH 373/657] black . --- .../bonsai/bim/module/drawing/__init__.py | 3 +- .../bonsai/bim/module/drawing/decoration.py | 12 +-- .../bonsai/bim/module/drawing/operator.py | 44 +++++----- src/bonsai/bonsai/bim/module/model/opening.py | 86 +++++++++---------- .../bonsai/bim/module/project/operator.py | 33 ++++--- src/bonsai/bonsai/bim/module/type/data.py | 2 +- src/bonsai/bonsai/bim/module/type/operator.py | 24 +++--- src/bonsai/bonsai/bim/module/type/ui.py | 13 +-- src/bonsai/bonsai/core/unit.py | 8 +- src/bonsai/bonsai/tool/root.py | 17 ++-- src/bonsai/test/core/test_unit.py | 1 - src/bonsai/test/tool/test_drawing.py | 20 +++-- 12 files changed, 134 insertions(+), 129 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/__init__.py b/src/bonsai/bonsai/bim/module/drawing/__init__.py index 8b5a787ebe..eb5779d4af 100644 --- a/src/bonsai/bonsai/bim/module/drawing/__init__.py +++ b/src/bonsai/bonsai/bim/module/drawing/__init__.py @@ -143,6 +143,7 @@ def menu_func(self, context): if element and element.is_a("IfcAnnotation") and element.ObjectType in ["SECTION", "ELEVATION"]: self.layout.operator("bim.activate_drawing_by_annotation", text="Go to Drawing") + def register(): if not bpy.app.background: bpy.utils.register_tool(workspace.AnnotationTool, after={"bim.bim_tool"}, separator=True, group=False) @@ -155,7 +156,7 @@ def register(): bpy.app.handlers.load_post.append(handler.load_post) bpy.app.handlers.depsgraph_update_pre.append(handler.depsgraph_update_pre_handler) bpy.types.VIEW3D_MT_image_add.append(ui.add_object_button) - bpy.types.VIEW3D_MT_object_context_menu.append(menu_func) + bpy.types.VIEW3D_MT_object_context_menu.append(menu_func) def unregister(): diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 3a1d73de16..a022af28d0 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -1655,7 +1655,7 @@ class CutDecorator: if isinstance(space, bpy.types.SpaceView3D) and space.local_view: in_local_view = True break - + # If just entering local view (transition from False to True) if in_local_view and not self.__class__.was_in_local_view: self.__class__.local_view_has_annotation = False @@ -1664,10 +1664,10 @@ class CutDecorator: if element and element.is_a("IfcAnnotation"): self.__class__.local_view_has_annotation = True break - + # Update the state for next time self.__class__.was_in_local_view = in_local_view - + # Skip decorations if in local view and no IfcAnnotation was selected when entering if in_local_view and not self.__class__.local_view_has_annotation: return @@ -2066,7 +2066,7 @@ class DecorationsHandler: if isinstance(space, bpy.types.SpaceView3D) and space.local_view: in_local_view = True break - + # If just entering local view (transition from False to True) if in_local_view and not self.__class__.was_in_local_view: self.__class__.local_view_has_annotation = False @@ -2075,10 +2075,10 @@ class DecorationsHandler: if element and element.is_a("IfcAnnotation"): self.__class__.local_view_has_annotation = True break - + # Update the state for next time self.__class__.was_in_local_view = in_local_view - + # Skip decorations if in local view and no IfcAnnotation was selected when entering if in_local_view and not self.__class__.local_view_has_annotation: return diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 0c5c99e623..aa8d0a317d 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -344,20 +344,20 @@ class CreateDrawing(bpy.types.Operator): # Clear any local camera setup and force viewport to use scene camera for area in context.screen.areas: - if area.type == 'VIEW_3D': + if area.type == "VIEW_3D": for space in area.spaces: - if space.type == 'VIEW_3D': + if space.type == "VIEW_3D": # Clear local camera to ensure we use scene.camera space.use_local_camera = False space.camera = context.scene.camera - space.region_3d.view_perspective = 'CAMERA' + space.region_3d.view_perspective = "CAMERA" print(f"Set viewport camera to: {context.scene.camera.name}") break - + # Force complete scene update context.view_layer.update() context.evaluated_depsgraph_get() - + underlay_svg = self.generate_underlay(context) with profile("Generate linework"): @@ -3069,9 +3069,9 @@ class AddReference(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): filter_glob: bpy.props.StringProperty(default="*.svg", options={"HIDDEN"}) use_relative_path: bpy.props.BoolProperty(name="Use Relative Path", default=True) filename_ext = ".svg" - + files: bpy.props.CollectionProperty(type=bpy.types.OperatorFileListElement) - directory: bpy.props.StringProperty(subtype='DIR_PATH') + directory: bpy.props.StringProperty(subtype="DIR_PATH") def _execute(self, context): # Handle both single and multiple file selection @@ -4034,66 +4034,66 @@ class ExcludeAnnotation(bpy.types.Operator, tool.Ifc.Operator): tool.Drawing.exclude_annotation_from_drawing(referenced_element, drawing) core.sync_references(tool.Ifc, tool.Collector, tool.Drawing, drawing=drawing) + class ActivateDrawingByAnnotation(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.activate_drawing_by_annotation" bl_label = "Activate Drawing" bl_description = "Activate the drawing corresponding to the selected annotation" bl_options = {"REGISTER", "UNDO"} - + @classmethod def poll(cls, context): # Check if an annotation object is selected if not context.selected_objects: cls.poll_message_set("No object selected") return False - + active_obj = context.active_object if not active_obj: cls.poll_message_set("No active object") return False - + element = tool.Ifc.get_entity(active_obj) if not element: cls.poll_message_set("Selected object is not an IFC element") return False - + # Check if it's an IfcAnnotation with ObjectType = "SECTION" or "ELEVATION" if not element.is_a("IfcAnnotation") or element.ObjectType not in ["SECTION", "ELEVATION"]: cls.poll_message_set("Selected object is not a drawing annotation") return False - + return True def _execute(self, context): active_obj = context.active_object element = tool.Ifc.get_entity(active_obj) - + if not element or not element.is_a("IfcAnnotation") or element.ObjectType not in ["SECTION", "ELEVATION"]: self.report({"ERROR"}, "Selected object is not a drawing annotation") return {"CANCELLED"} - + # Find the drawing/camera element that this annotation references drawing_element = self.find_drawing_from_annotation(element) - + if not drawing_element: self.report({"ERROR"}, "Could not find drawing element for this annotation") return {"CANCELLED"} - + # Use the existing ActivateDrawing operator with the drawing element's ID bpy.ops.bim.activate_drawing(drawing=drawing_element.id()) - + return {"FINISHED"} - + def find_drawing_from_annotation(self, annotation_element): """Find the drawing/camera element that this annotation references.""" ifc = tool.Ifc.get() - + # Check IfcRelAssignsToProduct relationships for rel in ifc.get_inverse(annotation_element): if rel.is_a("IfcRelAssignsToProduct") and rel.RelatingProduct: if rel.RelatingProduct.is_a("IfcAnnotation"): # Found the drawing element! return rel.RelatingProduct - - - return None \ No newline at end of file + + return None diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index d028425fb2..962cec8bc2 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -151,23 +151,23 @@ class FilledOpeningGenerator: existing_opening_occurrence, "Model", "Body", "MODEL_VIEW" ) assert representation - + # Check if mapped representation - preserve it - if (representation.RepresentationType == 'MappedRepresentation' and - len(representation.Items) == 1 and - representation.Items[0].is_a("IfcMappedItem")): + if ( + representation.RepresentationType == "MappedRepresentation" + and len(representation.Items) == 1 + and representation.Items[0].is_a("IfcMappedItem") + ): source_rep = representation.Items[0].MappingSource.MappedRepresentation representation = ifcopenshell.util.element.copy_deep( - tool.Ifc.get(), - source_rep, - exclude=["IfcGeometricRepresentationContext"] + tool.Ifc.get(), source_rep, exclude=["IfcGeometricRepresentationContext"] ) else: representation = ifcopenshell.util.representation.resolve_representation(representation) else: # Check for library template before generating from filling template_rep = self.get_opening_template_from_type(filling) - + if template_rep: representation = template_rep else: @@ -222,68 +222,68 @@ class FilledOpeningGenerator: voided_element = opening.VoidsElements[0].RelatingBuildingElement opening_rep = ifcopenshell.util.representation.get_representation(opening, "Model", "Body", "MODEL_VIEW") - + # ALWAYS preserve the existing opening representation (Tessellation, SweptSolid, etc.) preserved_representation = None if opening_rep: - if (opening_rep.RepresentationType == 'MappedRepresentation' and - len(opening_rep.Items) == 1 and - opening_rep.Items[0].is_a("IfcMappedItem")): + if ( + opening_rep.RepresentationType == "MappedRepresentation" + and len(opening_rep.Items) == 1 + and opening_rep.Items[0].is_a("IfcMappedItem") + ): # For mapped representations, copy the underlying representation preserved_representation = ifcopenshell.util.element.copy_deep( tool.Ifc.get(), opening_rep.Items[0].MappingSource.MappedRepresentation, - exclude=["IfcGeometricRepresentationContext"] + exclude=["IfcGeometricRepresentationContext"], ) else: # For direct representations (non-mapped), copy them too preserved_representation = ifcopenshell.util.element.copy_deep( - tool.Ifc.get(), - opening_rep, - exclude=["IfcGeometricRepresentationContext"] + tool.Ifc.get(), opening_rep, exclude=["IfcGeometricRepresentationContext"] ) - + ifcopenshell.api.geometry.unassign_representation(tool.Ifc.get(), product=opening, representation=opening_rep) ifcopenshell.api.geometry.remove_representation(tool.Ifc.get(), representation=opening_rep) existing_opening_occurrence = self.get_existing_opening_occurrence_if_any(filling) - + # Priority order for choosing representation: # 1. Existing occurrence with Tessellation (best quality) # 2. Library template with Tessellation # 3. Preserved representation from old opening (maintain user's work) # 4. Generate from filling (last resort) - + representation_to_use = None - + if existing_opening_occurrence: representation = ifcopenshell.util.representation.get_representation( existing_opening_occurrence, "Model", "Body", "MODEL_VIEW" ) - - if (representation and - representation.RepresentationType == 'MappedRepresentation' and - len(representation.Items) == 1 and - representation.Items[0].is_a("IfcMappedItem")): + + if ( + representation + and representation.RepresentationType == "MappedRepresentation" + and len(representation.Items) == 1 + and representation.Items[0].is_a("IfcMappedItem") + ): source_rep = representation.Items[0].MappingSource.MappedRepresentation # Prefer Tessellation from existing occurrence over preserved representation - if source_rep.RepresentationType == 'Tessellation': + if source_rep.RepresentationType == "Tessellation": representation_to_use = ifcopenshell.util.element.copy_deep( - tool.Ifc.get(), - source_rep, - exclude=["IfcGeometricRepresentationContext"] + tool.Ifc.get(), source_rep, exclude=["IfcGeometricRepresentationContext"] ) else: representation_to_use = ifcopenshell.util.representation.resolve_representation(representation) - + if not representation_to_use: template_rep = self.get_opening_template_from_type(filling) - if template_rep and template_rep.RepresentationType == 'Tessellation': + if template_rep and template_rep.RepresentationType == "Tessellation": representation_to_use = template_rep - + if not representation_to_use and preserved_representation: representation_to_use = preserved_representation - + if not representation_to_use: opening_obj = tool.Ifc.get_object(opening) if opening_obj: @@ -299,7 +299,7 @@ class FilledOpeningGenerator: ifcopenshell.api.geometry.assign_representation( tool.Ifc.get(), product=opening, representation=mapped_representation ) - + # update voided object representation... voided_elements = ifcopenshell.util.element.get_parts(voided_element) or [voided_element] for voided_element in voided_elements: @@ -314,31 +314,31 @@ class FilledOpeningGenerator: representation=representation, ) - def get_opening_template_from_type(self, filling: ifcopenshell.entity_instance) -> Union[ifcopenshell.entity_instance, None]: + def get_opening_template_from_type( + self, filling: ifcopenshell.entity_instance + ) -> Union[ifcopenshell.entity_instance, None]: """ Check if the filling's type has a stored opening template from library import. """ element_type = ifcopenshell.util.element.get_type(filling) - + if not element_type: return None - + desc = element_type.Description - + if not desc or "||BonsaiOpeningTemplate:" not in desc: return None - + # Extract template ID marker = desc.split("||BonsaiOpeningTemplate:")[-1] template_id = int(marker.split("||")[0]) - + try: template_rep = tool.Ifc.get().by_id(template_id) # Make a copy so we don't reuse the same representation instance copied = ifcopenshell.util.element.copy_deep( - tool.Ifc.get(), - template_rep, - exclude=["IfcGeometricRepresentationContext"] + tool.Ifc.get(), template_rep, exclude=["IfcGeometricRepresentationContext"] ) return copied except: diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 8f22492132..8bad2e17d4 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -715,11 +715,8 @@ class AppendLibraryElement(bpy.types.Operator, tool.Ifc.Operator): if element.is_a("IfcSurfaceStyle") and not tool.Ifc.get_object_by_identifier(element.id()): ifc_importer.create_style(element) - def store_opening_template_from_library( - self, - element: ifcopenshell.entity_instance, - library_file: ifcopenshell.file + self, element: ifcopenshell.entity_instance, library_file: ifcopenshell.file ) -> None: """ Find an opening representation in the library and copy it to the current file @@ -729,36 +726,36 @@ class AppendLibraryElement(bpy.types.Operator, tool.Ifc.Operator): library_element = library_file.by_guid(element.GlobalId) except: return - + # Find occurrences with openings in the library library_occurrences = ifcopenshell.util.element.get_types(library_element) - + for occurrence in library_occurrences: if not getattr(occurrence, "FillsVoids", None): continue - + library_opening = occurrence.FillsVoids[0].RelatingOpeningElement library_opening_rep = ifcopenshell.util.representation.get_representation( library_opening, "Model", "Body", "MODEL_VIEW" ) - + if not library_opening_rep: continue - + # Check if mapped representation - if (library_opening_rep.RepresentationType == 'MappedRepresentation' and - len(library_opening_rep.Items) == 1 and - library_opening_rep.Items[0].is_a("IfcMappedItem")): - + if ( + library_opening_rep.RepresentationType == "MappedRepresentation" + and len(library_opening_rep.Items) == 1 + and library_opening_rep.Items[0].is_a("IfcMappedItem") + ): + mapped_rep = library_opening_rep.Items[0].MappingSource.MappedRepresentation - + # Store ALL representation types (Tessellation, SweptSolid, etc.) template_rep = ifcopenshell.util.element.copy_deep( - self.file, - mapped_rep, - exclude=["IfcGeometricRepresentationContext"] + self.file, mapped_rep, exclude=["IfcGeometricRepresentationContext"] ) - + # Store reference in type's Description current_desc = element.Description or "" element.Description = f"{current_desc}||BonsaiOpeningTemplate:{template_rep.id()}" diff --git a/src/bonsai/bonsai/bim/module/type/data.py b/src/bonsai/bonsai/bim/module/type/data.py index 119456875a..3d0f506986 100644 --- a/src/bonsai/bonsai/bim/module/type/data.py +++ b/src/bonsai/bonsai/bim/module/type/data.py @@ -101,7 +101,7 @@ class TypeData: element_type = ifcopenshell.util.element.get_type(element) if not element_type: return results - + data = element_type.get_info() if "GlobalId" in data: excluded_keys = ["id", "type"] diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index b09b9fe5a8..c078d66f67 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -429,18 +429,18 @@ class EnableEditingTypeAttributes(bpy.types.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + element = tool.Ifc.get_entity(obj) if not element: return {"CANCELLED"} - + element_type = ifcopenshell.util.element.get_type(element) if not element_type: return {"CANCELLED"} - + props = tool.Type.get_object_type_props(obj) props.type_attributes.clear() - + bonsai.bim.helper.import_attributes(element_type, props.type_attributes) props.is_editing_type_attributes = True return {"FINISHED"} @@ -456,7 +456,7 @@ class DisableEditingTypeAttributes(bpy.types.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + props = tool.Type.get_object_type_props(obj) props.type_attributes.clear() props.property_unset("is_editing_type_attributes") @@ -473,24 +473,24 @@ class EditTypeAttributes(bpy.types.Operator, tool.Ifc.Operator): obj = context.active_object if not obj: return {"CANCELLED"} - + element = tool.Ifc.get_entity(obj) if not element: return {"CANCELLED"} - + element_type = ifcopenshell.util.element.get_type(element) if not element_type: return {"CANCELLED"} - + props = tool.Type.get_object_type_props(obj) attributes = bonsai.bim.helper.export_attributes(props.type_attributes) - + ifcopenshell.api.attribute.edit_attributes(tool.Ifc.get(), product=element_type, attributes=attributes) - + type_obj = tool.Ifc.get_object(element_type) if type_obj: tool.Root.set_object_name(type_obj, element_type) - + bpy.ops.bim.disable_editing_type_attributes() - + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/type/ui.py b/src/bonsai/bonsai/bim/module/type/ui.py index 24ffdc672e..d596997d5a 100644 --- a/src/bonsai/bonsai/bim/module/type/ui.py +++ b/src/bonsai/bonsai/bim/module/type/ui.py @@ -124,27 +124,28 @@ class BIM_PT_type_attributes(Panel): def draw(self, context): if not TypeData.is_loaded: TypeData.load() - + assert (layout := self.layout) assert (obj := context.active_object) - + if not TypeData.data.get("relating_type"): layout.label(text="No Relating Type", icon="INFO") return - + props = tool.Type.get_object_type_props(obj) - + if props.is_editing_type_attributes: row = layout.row(align=True) row.operator("bim.edit_type_attributes", icon="CHECKMARK", text="Save Attributes") row.operator("bim.disable_editing_type_attributes", icon="CANCEL", text="") - + import bonsai.bim.helper + bonsai.bim.helper.draw_attributes(props.type_attributes, layout) else: row = layout.row() row.operator("bim.enable_editing_type_attributes", icon="GREASEPENCIL", text="Edit") - + for attribute in TypeData.data["relating_type_attributes"]: row = layout.row(align=True) row.label(text=attribute["name"]) diff --git a/src/bonsai/bonsai/core/unit.py b/src/bonsai/bonsai/core/unit.py index a4c52508f1..9594c2b566 100644 --- a/src/bonsai/bonsai/core/unit.py +++ b/src/bonsai/bonsai/core/unit.py @@ -28,9 +28,13 @@ if TYPE_CHECKING: def assign_scene_units(ifc: type[tool.Ifc], unit: type[tool.Unit]) -> None: if unit.is_scene_unit_metric(): - lengthunit = ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix=unit.get_scene_unit_si_prefix("LENGTHUNIT")) + lengthunit = ifc.run( + "unit.add_si_unit", unit_type="LENGTHUNIT", prefix=unit.get_scene_unit_si_prefix("LENGTHUNIT") + ) areaunit = ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix=unit.get_scene_unit_si_prefix("AREAUNIT")) - volumeunit = ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix=unit.get_scene_unit_si_prefix("VOLUMEUNIT")) + volumeunit = ifc.run( + "unit.add_si_unit", unit_type="VOLUMEUNIT", prefix=unit.get_scene_unit_si_prefix("VOLUMEUNIT") + ) planeangleunit = ifc.run("unit.add_conversion_based_unit", name="degree") units = [lengthunit, areaunit, volumeunit, planeangleunit] diff --git a/src/bonsai/bonsai/tool/root.py b/src/bonsai/bonsai/tool/root.py index 109af267d6..42bd558bd1 100644 --- a/src/bonsai/bonsai/tool/root.py +++ b/src/bonsai/bonsai/tool/root.py @@ -91,20 +91,21 @@ class Root(bonsai.core.tool.Root): elif dest.is_a("IfcTypeProduct"): if not source.RepresentationMaps: return copied_entities - + # Copy representation maps while preserving mapped representation structures new_maps = [] for i, rep_map in enumerate(source.RepresentationMaps): source_rep = rep_map.MappedRepresentation - # Copy the map itself new_map = ifcopenshell.util.element.copy(tool.Ifc.get(), rep_map) - + # Handle the mapped representation - preserve mapping structure if present - if (source_rep.RepresentationType == 'MappedRepresentation' and - len(source_rep.Items) == 1 and - source_rep.Items[0].is_a("IfcMappedItem")): + if ( + source_rep.RepresentationType == "MappedRepresentation" + and len(source_rep.Items) == 1 + and source_rep.Items[0].is_a("IfcMappedItem") + ): # This is a mapped representation - preserve the structure new_rep = ifcopenshell.util.element.copy(tool.Ifc.get(), source_rep) new_rep.Items = [ifcopenshell.util.element.copy(tool.Ifc.get(), item) for item in source_rep.Items] @@ -118,9 +119,9 @@ class Root(bonsai.core.tool.Root): exclude_callback=exclude_callback, copied_entities=copied_entities, ) - + new_maps.append(new_map) - + dest.RepresentationMaps = new_maps return copied_entities diff --git a/src/bonsai/test/core/test_unit.py b/src/bonsai/test/core/test_unit.py index 2bbd783cc3..a7d73c755f 100644 --- a/src/bonsai/test/core/test_unit.py +++ b/src/bonsai/test/core/test_unit.py @@ -93,7 +93,6 @@ class TestAssignSceneUnits: ifc.run("unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit"]).should_be_called() subject.assign_scene_units(ifc, unit) - def test_creating_metric_units_with_conversion_based_mass_and_time(self, ifc, unit): unit.is_scene_unit_metric().should_be_called().will_return(True) unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("MILLI") diff --git a/src/bonsai/test/tool/test_drawing.py b/src/bonsai/test/tool/test_drawing.py index 28f95614f8..960e283084 100644 --- a/src/bonsai/test/tool/test_drawing.py +++ b/src/bonsai/test/tool/test_drawing.py @@ -928,23 +928,24 @@ class TestAddReferenceImage(NewFile): uv_node = material_nodes["Texture Coordinate"] assert len(uv_node.outputs["Generated"].links[:]) == 1 + class TestAddReference(NewFile): def test_add_single_reference(self): """Test adding a single reference file (backward compatibility)""" bpy.ops.bim.create_project() ifc_path = Path("test/files/temp/test.ifc").absolute() bpy.ops.bim.save_project(filepath=str(ifc_path), should_save_as=True) - + # Create a temporary SVG file svg_path = Path("test/files/temp/reference.svg").absolute() svg_path.parent.mkdir(parents=True, exist_ok=True) with open(svg_path, "w") as f: f.write('') - + try: # Add single reference bpy.ops.bim.add_reference(filepath=str(svg_path)) - + # Verify reference was added ifc = tool.Ifc.get() references = [doc for doc in ifc.by_type("IfcDocumentInformation") if doc.Scope == "REFERENCE"] @@ -954,24 +955,24 @@ class TestAddReference(NewFile): # Cleanup if svg_path.exists(): svg_path.unlink() - + def test_add_multiple_references(self): """Test adding multiple reference files at once""" bpy.ops.bim.create_project() ifc_path = Path("test/files/temp/test.ifc").absolute() bpy.ops.bim.save_project(filepath=str(ifc_path), should_save_as=True) - + # Create temporary SVG files temp_dir = Path("test/files/temp").absolute() temp_dir.mkdir(parents=True, exist_ok=True) - + svg_files = [] for i in range(3): svg_path = temp_dir / f"reference_{i}.svg" with open(svg_path, "w") as f: f.write('') svg_files.append(svg_path) - + try: # Test by directly calling core.add_document multiple times # (simulating what the operator does with multiple files) @@ -979,12 +980,13 @@ class TestAddReference(NewFile): for svg_file in svg_files: uri = tool.Ifc.get_uri(str(svg_file), use_relative_path=True) from bonsai.bim import core + core.drawing.add_document(tool.Ifc, tool.Drawing, "REFERENCE", uri=uri) - + # Verify all references were added references = [doc for doc in ifc.by_type("IfcDocumentInformation") if doc.Scope == "REFERENCE"] assert len(references) == 3 - + reference_names = {ref.Name for ref in references} expected_names = {f"reference_{i}" for i in range(3)} assert reference_names == expected_names From 30dbf48f6df47865f00b38db25e5dab4905421a1 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 18 Dec 2025 10:28:58 -0600 Subject: [PATCH 374/657] Extending https://github.com/IfcOpenShell/IfcOpenShell/commit/3ebb046619e43a1f42087e95fb9be1959cbfe0a4: Force UI redraw to flush pending Blender operations, as Blender was crashing during bulk printing. Not 100% this fixed everything, as there are a few crashes that spring up still, but is better. --- src/bonsai/bonsai/bim/module/drawing/operator.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index e4f258c6e1..6d495849fe 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -299,6 +299,14 @@ class CreateDrawing(bpy.types.Operator): original_cache_setting = self.props.should_use_underlay_cache self.props.should_use_underlay_cache = False + # Force Blender to process all pending operations + for area in context.screen.areas: + area.tag_redraw() + + # Process events to let Blender finish internal cleanup + bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1) + + self.camera = context.scene.camera assert (camera_element := tool.Ifc.get_entity(self.camera)) self.camera_element = camera_element From 2ed991ebcee6b6f97feea60e6ae66cb2cf894fc5 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 18 Dec 2025 12:37:31 -0600 Subject: [PATCH 375/657] Filter drawing search to only match DRAWING annotations --- src/bonsai/bonsai/bim/module/drawing/ui.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/ui.py b/src/bonsai/bonsai/bim/module/drawing/ui.py index 252a3c9148..e854f9ed32 100644 --- a/src/bonsai/bonsai/bim/module/drawing/ui.py +++ b/src/bonsai/bonsai/bim/module/drawing/ui.py @@ -479,10 +479,12 @@ class BIM_PT_sheets(Panel): drawingnamesvg = active_sheet.name drawingname = drawingnamesvg.split(".svg")[0] ifc_file = tool.Ifc.get() - ifc_annotations = ifc_file.by_type("IfcAnnotation") drawingid = None - for annotation in ifc_annotations: + for annotation in ifc_file.by_type("IfcAnnotation"): + if annotation.ObjectType != "DRAWING": + continue + Annotation_Name = annotation.Name.replace(",", "") # Remove commas if Annotation_Name == drawingname: drawingid = annotation.id() From 6ba738fcaa4bf3b6b12ac444d4cd6c72ff70433e Mon Sep 17 00:00:00 2001 From: falken10 Date: Thu, 24 Apr 2025 08:17:48 +0200 Subject: [PATCH 376/657] Added bookmarks TAB --- src/bonsai/bonsai/bim/prop.py | 3 ++- src/bonsai/bonsai/bim/ui.py | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 3ca57b27cc..4663f7ca6a 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -493,8 +493,9 @@ def get_tab( ("SCHEDULING", "Costing and Scheduling", "", "NLA", 6), ("FM", "Facility Management", "", "PACKAGE", 7), ("QUALITY", "Quality and Coordination", "", "COMMUNITY", 8), + ("BOOKMARKS", "Bookmarks", "", "SOLO_ON", 9), None, - ("BLENDER", "Blender Properties", "", "BLENDER", 9), + ("BLENDER", "Blender Properties", "", "BLENDER", 10), ] return get_tab.enum_items diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 05c836ca93..914eaaee78 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -964,6 +964,7 @@ class BIM_PT_tabs(Panel): self.draw_tab_entry(row, "NLA", "SCHEDULING", is_ifc_project, aprops.tab == "SCHEDULING") self.draw_tab_entry(row, "PACKAGE", "FM", True, aprops.tab == "FM") self.draw_tab_entry(row, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") + self.draw_tab_entry(row, "SOLO_ON", "BOOKMARKS", True, aprops.tab == "BOOKMARKS") # New BOOKMARKS tab row.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") # Yes, that's right. @@ -980,6 +981,7 @@ class BIM_PT_tabs(Panel): "SCHEDULING", "FM", "QUALITY", + "BOOKMARKS", # Include BOOKMARKS in the list "SWITCH", ]: # Draw a little underscore below the active tab icon. From 50fa245a563e7651afcac9a94fe3106fba91c44e Mon Sep 17 00:00:00 2001 From: falken10 Date: Thu, 24 Apr 2025 10:56:27 +0200 Subject: [PATCH 377/657] added uilist for subpanels --- src/bonsai/bonsai/bim/__init__.py | 12 +++ src/bonsai/bonsai/bim/operator.py | 154 ++++++++++++++++++++++++++++++ src/bonsai/bonsai/bim/ui.py | 18 ++++ 3 files changed, 184 insertions(+) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 3d865de16e..bf0f322099 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -206,6 +206,10 @@ classes = [ ui.BIM_PT_section_with_cappings, ui.BIM_PT_decorators_overlay, ui.BIM_PT_snappping, + operator.BIM_UL_tab_panels, + operator.BIM_OT_toggle_panel_visibility, + operator.BIM_OT_bookmark_panel, + operator.BIM_OT_manage_tab_panels, ] for mod in modules.values(): @@ -307,6 +311,10 @@ def register(): # RestrictedContext doesn't allow accessing scene attribute, postpone it for a bit. bpy.app.timers.register(tool.Blender.setup_user_data_dir, first_interval=0.1) + bpy.types.Scene.active_tab_name = bpy.props.StringProperty() + bpy.types.Scene.tab_panels = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup) + bpy.types.Scene.active_tab_panel_index = bpy.props.IntProperty() + def unregister(): global icons @@ -348,3 +356,7 @@ def unregister(): tool.Blender.remove_scene_panel_override(panel) bpy.app.translations.unregister("bonsai") + + del bpy.types.Scene.active_tab_name + del bpy.types.Scene.tab_panels + del bpy.types.Scene.active_tab_panel_index \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 517bfe34f1..b23b8e8a70 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -1605,3 +1605,157 @@ class BIM_OT_attribute_remove_subitem(bpy.types.Operator): attr.is_null = True return {"FINISHED"} + +TAB_PANELS = { + "PROJECT": [ + "BIM_PT_tab_new_project_wizard", + "BIM_PT_tab_project_info", + "BIM_PT_tab_spatial", + "BIM_PT_tab_project_setup", + "BIM_PT_tab_geometry", + "BIM_PT_tab_stakeholders", + "BIM_PT_tab_grouping_and_filtering", + ], + "OBJECT": [ + "BIM_PT_tab_object_metadata", + "BIM_PT_tab_misc", + ], + "GEOMETRY": [ + "BIM_PT_tab_placement", + "BIM_PT_tab_representations", + "BIM_PT_tab_geometric_relationships", + "BIM_PT_tab_parametric_geometry", + "BIM_PT_tab_object_materials", + "BIM_PT_tab_materials", + "BIM_PT_tab_styles", + "BIM_PT_tab_profiles", + ], + "DRAWINGS": [ + "BIM_PT_tab_sheets", + "BIM_PT_tab_drawings", + "BIM_PT_tab_schedules", + "BIM_PT_tab_references", + ], + "SERVICES": [ + "BIM_PT_tab_services", + "BIM_PT_tab_zones", + "BIM_PT_tab_solar_analysis", + "BIM_PT_tab_lighting", + ], + "STRUCTURE": [ + "BIM_PT_tab_structural", + ], + "SCHEDULING": [ + "BIM_PT_tab_status", + "BIM_PT_tab_qto", + "BIM_PT_tab_resources", + "BIM_PT_tab_cost", + "BIM_PT_tab_sequence", + ], + "FM": [ + "BIM_PT_tab_handover", + "BIM_PT_tab_operations", + ], + "QUALITY": [ + "BIM_PT_tab_quality_control", + "BIM_PT_tab_clash_detection", + "BIM_PT_tab_collaboration", + "BIM_PT_tab_sandbox", + ], +} + +class BIM_UL_tab_panels(bpy.types.UIList): + """UIList for Tab Panels""" + + def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + # Draw the panel name + row = layout.row(align=True) + row.label(text=item.name) + + # Add the eye icon for toggling visibility + row.operator( + "bim.toggle_panel_visibility", + text="", + icon="HIDE_OFF" if item.get("visible", True) else "HIDE_ON", + ).action = f"TOGGLE_VISIBILITY_{item.name}" + + # Add the star icon for bookmarking + row.operator( + "bim.bookmark_panel", + text="", + icon="SOLO_ON" if item.get("bookmarked", False) else "SOLO_OFF", + ).action = f"BOOKMARK_{item.name}" + + +class BIM_OT_toggle_panel_visibility(bpy.types.Operator): + """Toggle Panel Visibility""" + bl_idname = "bim.toggle_panel_visibility" + bl_label = "Toggle Panel Visibility" + bl_options = {"REGISTER", "UNDO"} + + action: bpy.props.StringProperty() + + def execute(self, context): + # Extract the panel name from the action + panel_name = self.action.replace("TOGGLE_VISIBILITY_", "") + + # Logic to toggle visibility (placeholder) + print(f"Toggled visibility for panel: {panel_name}") + + self.report({"INFO"}, f"Toggled visibility for {panel_name}.") + return {"FINISHED"} + +class BIM_OT_bookmark_panel(bpy.types.Operator): + """Bookmark Panel""" + bl_idname = "bim.bookmark_panel" + bl_label = "Bookmark Panel" + bl_options = {"REGISTER", "UNDO"} + + action: bpy.props.StringProperty() + + def execute(self, context): + # Extract the panel name from the action + panel_name = self.action.replace("BOOKMARK_", "") + + # Logic to bookmark the panel (placeholder) + print(f"Bookmarked panel: {panel_name}") + + self.report({"INFO"}, f"Bookmarked {panel_name}.") + return {"FINISHED"} + + +class BIM_OT_manage_tab_panels(bpy.types.Operator): + """Manage Tab Panels""" + bl_idname = "bim.manage_tab_panels" + bl_label = "Manage Tab Panels" + bl_options = {"REGISTER", "UNDO"} + + tab_name: bpy.props.StringProperty() + + def invoke(self, context, event): + # Set the active tab name in the scene + context.scene.active_tab_name = self.tab_name + + # Populate the tab_panels collection + context.scene.tab_panels.clear() + for panel_name in TAB_PANELS.get(self.tab_name, []): + item = context.scene.tab_panels.add() + item.name = panel_name + print(f"Tab Panels for {self.tab_name}: {[item.name for item in context.scene.tab_panels]}") + + return context.window_manager.invoke_props_dialog(self, width=400) + + def draw(self, context): + layout = self.layout + layout.label(text=f"Manage Panels for {self.tab_name} Tab") + + # Add a UIList for the panels + row = layout.row() + row.template_list("BIM_UL_tab_panels", "", context.scene, "tab_panels", context.scene, "active_tab_panel_index") + + + + def execute(self, context): + # Logic to handle the confirmation of the dialog + self.report({"INFO"}, f"Panels for {self.tab_name} managed successfully.") + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 914eaaee78..2d4bad1e3d 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -993,6 +993,24 @@ class BIM_PT_tabs(Panel): row = self.layout.row(align=True) row.prop(aprops, "tab", text="") + # Add gear icons for all tabs except BOOKMARKS and SWITCH_TAB + for tab in [ + "PROJECT", + "OBJECT", + "GEOMETRY", + "DRAWINGS", + "SERVICES", + "STRUCTURE", + "SCHEDULING", + "FM", + "QUALITY", + ]: + if aprops.tab == tab: +# row = self.layout.row(align=True) + row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab + + + if bonsai.REINSTALLED_BBIM_VERSION: box = self.layout.box() box.alert = True From 0c428c54ad0aebde4af7f6881066181c68033cc8 Mon Sep 17 00:00:00 2001 From: falken10 Date: Thu, 24 Apr 2025 17:28:16 +0200 Subject: [PATCH 378/657] eye icon to show or hide panel --- src/bonsai/bonsai/bim/__init__.py | 25 ++++++++- src/bonsai/bonsai/bim/operator.py | 24 +++++++-- src/bonsai/bonsai/bim/ui.py | 86 ++++++++++++++++++++++++++++++- 3 files changed, 130 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index bf0f322099..2b6b8f59ba 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -232,6 +232,27 @@ def on_register(scene): bpy.app.handlers.depsgraph_update_post.remove(on_register) is_registering = False +def register_panel_visibility_properties(): + for panel_name in operator.TAB_PANELS.values(): + for panel in panel_name: + prop_name = f"show_{panel.lower()}" + setattr( + bpy.types.Scene, + prop_name, + bpy.props.BoolProperty( + name=f"Show {panel}", + description=f"Show or hide the {panel} panel", + default=True, # Panels are visible by default + ), + ) + + +def unregister_panel_visibility_properties(): + for panel_name in operator.TAB_PANELS.values(): + for panel in panel_name: + prop_name = f"show_{panel.lower()}" + if hasattr(bpy.types.Scene, prop_name): + delattr(bpy.types.Scene, prop_name) # Classes that need to be registered after modules (due to cross-module dependencies) late_classes = ( @@ -314,6 +335,7 @@ def register(): bpy.types.Scene.active_tab_name = bpy.props.StringProperty() bpy.types.Scene.tab_panels = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup) bpy.types.Scene.active_tab_panel_index = bpy.props.IntProperty() + register_panel_visibility_properties() def unregister(): @@ -359,4 +381,5 @@ def unregister(): del bpy.types.Scene.active_tab_name del bpy.types.Scene.tab_panels - del bpy.types.Scene.active_tab_panel_index \ No newline at end of file + del bpy.types.Scene.active_tab_panel_index + unregister_panel_visibility_properties() \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index b23b8e8a70..6dbe1d6107 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -1608,7 +1608,7 @@ class BIM_OT_attribute_remove_subitem(bpy.types.Operator): TAB_PANELS = { "PROJECT": [ - "BIM_PT_tab_new_project_wizard", +# "BIM_PT_tab_new_project_wizard", "BIM_PT_tab_project_info", "BIM_PT_tab_spatial", "BIM_PT_tab_project_setup", @@ -1699,8 +1699,25 @@ class BIM_OT_toggle_panel_visibility(bpy.types.Operator): # Extract the panel name from the action panel_name = self.action.replace("TOGGLE_VISIBILITY_", "") - # Logic to toggle visibility (placeholder) - print(f"Toggled visibility for panel: {panel_name}") + # Find the corresponding panel in the tab_panels collection + for item in context.scene.tab_panels: + if item.name == panel_name: + # Toggle the visibility state + item["visible"] = not item.get("visible", True) + + # Update the corresponding BoolProperty on the Scene + prop_name = f"show_{panel_name.lower()}" + if hasattr(context.scene, prop_name): + setattr(context.scene, prop_name, item["visible"]) + print(f"Toggled visibility for panel: {panel_name} to {'visible' if item['visible'] else 'hidden'}") + else: + print(f"Property '{prop_name}' not found on Scene.") + break + + # Redraw the UI to reflect the changes + for area in bpy.context.window.screen.areas: + if area.type == "PROPERTIES": + area.tag_redraw() self.report({"INFO"}, f"Toggled visibility for {panel_name}.") return {"FINISHED"} @@ -1741,6 +1758,7 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): for panel_name in TAB_PANELS.get(self.tab_name, []): item = context.scene.tab_panels.add() item.name = panel_name + item["visible"] = True # Initialize the visibility state as visible print(f"Tab Panels for {self.tab_name}: {[item.name for item in context.scene.tab_panels]}") return context.window_manager.invoke_props_dialog(self, width=400) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 2d4bad1e3d..55308ed421 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -1081,6 +1081,7 @@ class BIM_PT_tabs(Panel): class BIM_PT_tab_new_project_wizard(Panel): + bl_idname = "BIM_PT_tab_new_project_wizard" bl_label = "New Project Wizard" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1088,6 +1089,8 @@ class BIM_PT_tab_new_project_wizard(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_new_project_wizard", True): + return False if not tool.Blender.is_tab(context, "PROJECT"): return False bim_props = tool.Blender.get_bim_props() @@ -1103,6 +1106,7 @@ class BIM_PT_tab_new_project_wizard(Panel): class BIM_PT_tab_project_info(Panel): + bl_idname = "BIM_PT_tab_project_info" bl_label = "Project Info" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1110,6 +1114,10 @@ class BIM_PT_tab_project_info(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_project_info", True): + return False + + # Existing conditions if not tool.Blender.is_tab(context, "PROJECT"): return False bim_props = tool.Blender.get_bim_props() @@ -1121,10 +1129,12 @@ class BIM_PT_tab_project_info(Panel): return False def draw(self, context): - pass + layout = self.layout + layout.label(text="This is the Project Info panel.") class BIM_PT_tab_spatial(Panel): + bl_idname = "BIM_PT_tab_spatial" bl_label = "Spatial" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1132,6 +1142,8 @@ class BIM_PT_tab_spatial(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_spatial", True): + return False return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get() def draw(self, context): @@ -1139,6 +1151,7 @@ class BIM_PT_tab_spatial(Panel): class BIM_PT_tab_project_setup(Panel): + bl_idname = "BIM_PT_tab_project_setup" bl_label = "Project Setup" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1146,6 +1159,8 @@ class BIM_PT_tab_project_setup(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_project_setup", True): + return False return tool.Blender.is_tab(context, "PROJECT") def draw(self, context): @@ -1153,6 +1168,7 @@ class BIM_PT_tab_project_setup(Panel): class BIM_PT_tab_stakeholders(Panel): + bl_idname = "BIM_PT_tab_stakeholders" bl_label = "Stakeholders" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1161,6 +1177,8 @@ class BIM_PT_tab_stakeholders(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_stakeholders", True): + return False return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get() def draw(self, context): @@ -1175,6 +1193,8 @@ class BIM_PT_tab_collaboration(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_collaboration", True): + return False return tool.Blender.is_tab(context, "QUALITY") def draw(self, context): @@ -1182,6 +1202,7 @@ class BIM_PT_tab_collaboration(Panel): class BIM_PT_tab_grouping_and_filtering(Panel): + bl_idname = "BIM_PT_tab_grouping_and_filtering" bl_label = "Grouping and Filtering" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1190,6 +1211,8 @@ class BIM_PT_tab_grouping_and_filtering(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_grouping_and_filtering", True): + return False return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get() def draw(self, context): @@ -1205,6 +1228,7 @@ class BIM_PT_tab_grouping_and_filtering(Panel): class BIM_PT_tab_geometry(Panel): + bl_idname = "BIM_PT_tab_geometry" bl_label = "Geometry" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1212,6 +1236,8 @@ class BIM_PT_tab_geometry(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_geometry", True): + return False return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get() def draw(self, context): @@ -1226,6 +1252,8 @@ class BIM_PT_tab_status(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_status", True): + return False return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() def draw(self, context): @@ -1240,6 +1268,8 @@ class BIM_PT_tab_qto(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_qto", True): + return False return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() def draw(self, context): @@ -1254,6 +1284,8 @@ class BIM_PT_tab_resources(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_resources", True): + return False return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() def draw(self, context): @@ -1268,6 +1300,8 @@ class BIM_PT_tab_cost(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_cost", True): + return False return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() def draw(self, context): @@ -1282,6 +1316,8 @@ class BIM_PT_tab_sequence(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_sequence", True): + return False return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() def draw(self, context): @@ -1296,6 +1332,8 @@ class BIM_PT_tab_structural(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_structural", True): + return False return tool.Blender.is_tab(context, "STRUCTURE") and tool.Ifc.get() def draw(self, context): @@ -1310,6 +1348,8 @@ class BIM_PT_tab_services(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_services", True): + return False return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get() def draw(self, context): @@ -1324,6 +1364,8 @@ class BIM_PT_tab_lighting(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_lighting", True): + return False return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get() def draw(self, context): @@ -1338,6 +1380,8 @@ class BIM_PT_tab_zones(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_zones", True): + return False return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get() def draw(self, context): @@ -1352,6 +1396,8 @@ class BIM_PT_tab_solar_analysis(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_solar_analysis", True): + return False return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get() def draw(self, context): @@ -1366,6 +1412,8 @@ class BIM_PT_tab_quality_control(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_quality_control", True): + return False return tool.Blender.is_tab(context, "QUALITY") def draw(self, context): @@ -1380,6 +1428,8 @@ class BIM_PT_tab_clash_detection(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_clash_detection", True): + return False return tool.Blender.is_tab(context, "QUALITY") def draw(self, context): @@ -1395,6 +1445,8 @@ class BIM_PT_tab_sandbox(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_sandbox", True): + return False return tool.Blender.is_tab(context, "QUALITY") def draw(self, context): @@ -1412,6 +1464,8 @@ class BIM_PT_tab_object_metadata(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_object_metadata", True): + return False props = tool.Project.get_project_props() return ( tool.Blender.is_tab(context, "OBJECT") @@ -1438,6 +1492,8 @@ class BIM_PT_tab_placement(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_placement", True): + return False return ( tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() @@ -1458,6 +1514,8 @@ class BIM_PT_tab_representations(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_representations", True): + return False return ( tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() @@ -1478,6 +1536,8 @@ class BIM_PT_tab_geometric_relationships(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_geometric_relationships", True): + return False return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() def draw(self, context): @@ -1494,6 +1554,8 @@ class BIM_PT_tab_parametric_geometry(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_parametric_geometry", True): + return False return ( tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() @@ -1514,6 +1576,8 @@ class BIM_PT_tab_object_materials(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_object_materials", True): + return False return ( tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() @@ -1534,6 +1598,8 @@ class BIM_PT_tab_materials(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_materials", True): + return False return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() def draw(self, context): @@ -1549,6 +1615,8 @@ class BIM_PT_tab_styles(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_styles", True): + return False return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() def draw(self, context): @@ -1564,6 +1632,8 @@ class BIM_PT_tab_profiles(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_profiles", True): + return False return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() def draw(self, context): @@ -1579,6 +1649,8 @@ class BIM_PT_tab_sheets(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_sheets", True): + return False return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get() def draw(self, context): @@ -1594,6 +1666,8 @@ class BIM_PT_tab_drawings(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_drawings", True): + return False return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get() def draw(self, context): @@ -1609,6 +1683,8 @@ class BIM_PT_tab_schedules(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_schedules", True): + return False return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get() def draw(self, context): @@ -1624,6 +1700,8 @@ class BIM_PT_tab_references(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_references", True): + return False return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get() def draw(self, context): @@ -1640,6 +1718,8 @@ class BIM_PT_tab_misc(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_misc", True): + return False return tool.Blender.is_tab(context, "OBJECT") and tool.Ifc.get() def draw(self, context): @@ -1655,6 +1735,8 @@ class BIM_PT_tab_handover(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_handover", True): + return False return tool.Blender.is_tab(context, "FM") def draw(self, context): @@ -1670,6 +1752,8 @@ class BIM_PT_tab_operations(Panel): @classmethod def poll(cls, context): + if not getattr(context.scene, "show_bim_pt_tab_operations", True): + return False return tool.Blender.is_tab(context, "FM") def draw(self, context): From c8306d44b90d39d9fcfe9b65f2ae8e19710c4b28 Mon Sep 17 00:00:00 2001 From: falken10 Date: Fri, 25 Apr 2025 01:07:38 +0200 Subject: [PATCH 379/657] First version complete --- src/bonsai/bonsai/bim/__init__.py | 18 +- src/bonsai/bonsai/bim/operator.py | 117 ++++----- src/bonsai/bonsai/bim/prop.py | 2 +- src/bonsai/bonsai/bim/ui.py | 393 ++++++++++++++++++++++++------ 4 files changed, 383 insertions(+), 147 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 2b6b8f59ba..f60c9df09f 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -233,7 +233,7 @@ def on_register(scene): is_registering = False def register_panel_visibility_properties(): - for panel_name in operator.TAB_PANELS.values(): + for panel_name in ui.TAB_PANELS.values(): for panel in panel_name: prop_name = f"show_{panel.lower()}" setattr( @@ -245,14 +245,28 @@ def register_panel_visibility_properties(): default=True, # Panels are visible by default ), ) + prop_name = f"bookmark_{panel.lower()}" + setattr( + bpy.types.Scene, + prop_name, + bpy.props.BoolProperty( + name=f"Bookmark {panel}", + description=f"Move to Bookmark or not {panel} panel", + default=False, # Panels are visible by default + ), + ) def unregister_panel_visibility_properties(): - for panel_name in operator.TAB_PANELS.values(): + for panel_name in ui.TAB_PANELS.values(): for panel in panel_name: prop_name = f"show_{panel.lower()}" if hasattr(bpy.types.Scene, prop_name): delattr(bpy.types.Scene, prop_name) + prop_name = f"bookmark_{panel.lower()}" + if hasattr(bpy.types.Scene, prop_name): + delattr(bpy.types.Scene, prop_name) + # Classes that need to be registered after modules (due to cross-module dependencies) late_classes = ( diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 6dbe1d6107..f507120831 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -33,6 +33,7 @@ import bonsai.bim import bonsai.tool as tool import bonsai.bim.handler from enum import Enum +from bonsai.bim.ui import TAB_PANELS from bpy_extras.io_utils import ImportHelper from bonsai.bim import import_ifc from bonsai.bim.prop import StrProperty @@ -1606,63 +1607,6 @@ class BIM_OT_attribute_remove_subitem(bpy.types.Operator): return {"FINISHED"} -TAB_PANELS = { - "PROJECT": [ -# "BIM_PT_tab_new_project_wizard", - "BIM_PT_tab_project_info", - "BIM_PT_tab_spatial", - "BIM_PT_tab_project_setup", - "BIM_PT_tab_geometry", - "BIM_PT_tab_stakeholders", - "BIM_PT_tab_grouping_and_filtering", - ], - "OBJECT": [ - "BIM_PT_tab_object_metadata", - "BIM_PT_tab_misc", - ], - "GEOMETRY": [ - "BIM_PT_tab_placement", - "BIM_PT_tab_representations", - "BIM_PT_tab_geometric_relationships", - "BIM_PT_tab_parametric_geometry", - "BIM_PT_tab_object_materials", - "BIM_PT_tab_materials", - "BIM_PT_tab_styles", - "BIM_PT_tab_profiles", - ], - "DRAWINGS": [ - "BIM_PT_tab_sheets", - "BIM_PT_tab_drawings", - "BIM_PT_tab_schedules", - "BIM_PT_tab_references", - ], - "SERVICES": [ - "BIM_PT_tab_services", - "BIM_PT_tab_zones", - "BIM_PT_tab_solar_analysis", - "BIM_PT_tab_lighting", - ], - "STRUCTURE": [ - "BIM_PT_tab_structural", - ], - "SCHEDULING": [ - "BIM_PT_tab_status", - "BIM_PT_tab_qto", - "BIM_PT_tab_resources", - "BIM_PT_tab_cost", - "BIM_PT_tab_sequence", - ], - "FM": [ - "BIM_PT_tab_handover", - "BIM_PT_tab_operations", - ], - "QUALITY": [ - "BIM_PT_tab_quality_control", - "BIM_PT_tab_clash_detection", - "BIM_PT_tab_collaboration", - "BIM_PT_tab_sandbox", - ], -} class BIM_UL_tab_panels(bpy.types.UIList): """UIList for Tab Panels""" @@ -1686,7 +1630,6 @@ class BIM_UL_tab_panels(bpy.types.UIList): icon="SOLO_ON" if item.get("bookmarked", False) else "SOLO_OFF", ).action = f"BOOKMARK_{item.name}" - class BIM_OT_toggle_panel_visibility(bpy.types.Operator): """Toggle Panel Visibility""" bl_idname = "bim.toggle_panel_visibility" @@ -1734,10 +1677,40 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): # Extract the panel name from the action panel_name = self.action.replace("BOOKMARK_", "") - # Logic to bookmark the panel (placeholder) - print(f"Bookmarked panel: {panel_name}") + # Find the corresponding panel in the tab_panels collection + for item in context.scene.tab_panels: + if item.name == panel_name: + # Toggle the bookmarked state + item["bookmarked"] = not item.get("bookmarked", False) - self.report({"INFO"}, f"Bookmarked {panel_name}.") + # Update the corresponding BoolProperty on the Scene + prop_name = f"bookmark_{panel_name.lower()}" + if hasattr(context.scene, prop_name): + setattr(context.scene, prop_name, item["bookmarked"]) + print(f"Toggled bookmark for panel: {panel_name} to {'bookmarked' if item['bookmarked'] else 'Not bookmarked'}") + else: + print(f"Property '{prop_name}' not found on Scene.") + + # Add or remove the panel from the TAB_PANELS["BOOKMARK"] list + if item["bookmarked"]: + if panel_name not in TAB_PANELS["BOOKMARK"]: + TAB_PANELS["BOOKMARK"].append(panel_name) + print(f"Added {panel_name} to BOOKMARK tab.") + else: + if panel_name in TAB_PANELS["BOOKMARK"]: + TAB_PANELS["BOOKMARK"].remove(panel_name) + print(f"Removed {panel_name} from BOOKMARK tab.") + # Remove the panel from the tab_panels collection if in BOOKMARK tab + if context.scene.active_tab_name == "BOOKMARK": + context.scene.tab_panels.remove(context.scene.tab_panels.find(panel_name)) + break + + # Redraw the UI to reflect the changes + for area in bpy.context.window.screen.areas: + if area.type == "PROPERTIES": + area.tag_redraw() + + self.report({"INFO"}, f"Toggled bookmark for {panel_name}.") return {"FINISHED"} @@ -1758,7 +1731,15 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): for panel_name in TAB_PANELS.get(self.tab_name, []): item = context.scene.tab_panels.add() item.name = panel_name - item["visible"] = True # Initialize the visibility state as visible + + # Use the registered properties to set visibility and bookmark states + show_prop_name = f"show_{panel_name.lower()}" + bookmark_prop_name = f"bookmark_{panel_name.lower()}" + + # Retrieve the visibility and bookmark states from the Scene properties + item["visible"] = getattr(context.scene, show_prop_name, True) + item["bookmarked"] = getattr(context.scene, bookmark_prop_name, False) + print(f"Tab Panels for {self.tab_name}: {[item.name for item in context.scene.tab_panels]}") return context.window_manager.invoke_props_dialog(self, width=400) @@ -1771,9 +1752,15 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): row = layout.row() row.template_list("BIM_UL_tab_panels", "", context.scene, "tab_panels", context.scene, "active_tab_panel_index") - - def execute(self, context): - # Logic to handle the confirmation of the dialog + # Save the visibility and bookmark states back to the Scene properties + for item in context.scene.tab_panels: + show_prop_name = f"show_{item.name.lower()}" + bookmark_prop_name = f"bookmark_{item.name.lower()}" + + # Update the Scene properties with the current states + setattr(context.scene, show_prop_name, item["visible"]) + setattr(context.scene, bookmark_prop_name, item["bookmarked"]) + self.report({"INFO"}, f"Panels for {self.tab_name} managed successfully.") return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 4663f7ca6a..b10aacdc97 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -493,7 +493,7 @@ def get_tab( ("SCHEDULING", "Costing and Scheduling", "", "NLA", 6), ("FM", "Facility Management", "", "PACKAGE", 7), ("QUALITY", "Quality and Coordination", "", "COMMUNITY", 8), - ("BOOKMARKS", "Bookmarks", "", "SOLO_ON", 9), + ("BOOKMARK", "Bookmark", "", "SOLO_ON", 9), None, ("BLENDER", "Blender Properties", "", "BLENDER", 10), ] diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 55308ed421..bb5056844f 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -62,6 +62,66 @@ if TYPE_CHECKING: from bonsai.bim.module.project.prop import BIMProjectProperties +TAB_PANELS = { + "PROJECT": [ +# "BIM_PT_tab_new_project_wizard", + "BIM_PT_tab_project_info", + "BIM_PT_tab_spatial", + "BIM_PT_tab_project_setup", + "BIM_PT_tab_geometry", + "BIM_PT_tab_stakeholders", + "BIM_PT_tab_grouping_and_filtering", + ], + "OBJECT": [ + "BIM_PT_tab_object_metadata", + "BIM_PT_tab_misc", + ], + "GEOMETRY": [ + "BIM_PT_tab_placement", + "BIM_PT_tab_representations", + "BIM_PT_tab_geometric_relationships", + "BIM_PT_tab_parametric_geometry", + "BIM_PT_tab_object_materials", + "BIM_PT_tab_materials", + "BIM_PT_tab_styles", + "BIM_PT_tab_profiles", + ], + "DRAWINGS": [ + "BIM_PT_tab_sheets", + "BIM_PT_tab_drawings", + "BIM_PT_tab_schedules", + "BIM_PT_tab_references", + ], + "SERVICES": [ + "BIM_PT_tab_services", + "BIM_PT_tab_zones", + "BIM_PT_tab_solar_analysis", + "BIM_PT_tab_lighting", + ], + "STRUCTURE": [ + "BIM_PT_tab_structural", + ], + "SCHEDULING": [ + "BIM_PT_tab_status", + "BIM_PT_tab_qto", + "BIM_PT_tab_resources", + "BIM_PT_tab_cost", + "BIM_PT_tab_sequence", + ], + "FM": [ + "BIM_PT_tab_handover", + "BIM_PT_tab_operations", + ], + "QUALITY": [ + "BIM_PT_tab_quality_control", + "BIM_PT_tab_clash_detection", + "BIM_PT_tab_collaboration", + "BIM_PT_tab_sandbox", + ], + "BOOKMARK": [], +} + + class IFCFileSelector: layout: bpy.types.UILayout @@ -964,7 +1024,7 @@ class BIM_PT_tabs(Panel): self.draw_tab_entry(row, "NLA", "SCHEDULING", is_ifc_project, aprops.tab == "SCHEDULING") self.draw_tab_entry(row, "PACKAGE", "FM", True, aprops.tab == "FM") self.draw_tab_entry(row, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") - self.draw_tab_entry(row, "SOLO_ON", "BOOKMARKS", True, aprops.tab == "BOOKMARKS") # New BOOKMARKS tab + self.draw_tab_entry(row, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") # New BOOKMARK tab row.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") # Yes, that's right. @@ -981,7 +1041,7 @@ class BIM_PT_tabs(Panel): "SCHEDULING", "FM", "QUALITY", - "BOOKMARKS", # Include BOOKMARKS in the list + "BOOKMARK", "SWITCH", ]: # Draw a little underscore below the active tab icon. @@ -993,7 +1053,7 @@ class BIM_PT_tabs(Panel): row = self.layout.row(align=True) row.prop(aprops, "tab", text="") - # Add gear icons for all tabs except BOOKMARKS and SWITCH_TAB + # Add gear icons for all tabs except SWITCH_TAB for tab in [ "PROJECT", "OBJECT", @@ -1004,6 +1064,7 @@ class BIM_PT_tabs(Panel): "SCHEDULING", "FM", "QUALITY", + "BOOKMARK", ]: if aprops.tab == tab: # row = self.layout.row(align=True) @@ -1114,11 +1175,13 @@ class BIM_PT_tab_project_info(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_project_info", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - - # Existing conditions - if not tool.Blender.is_tab(context, "PROJECT"): + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + if not tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")): return False bim_props = tool.Blender.get_bim_props() pprops = tool.Project.get_project_props() @@ -1142,9 +1205,13 @@ class BIM_PT_tab_spatial(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_spatial", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1159,9 +1226,13 @@ class BIM_PT_tab_project_setup(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_project_setup", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "PROJECT") + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) def draw(self, context): pass @@ -1177,15 +1248,20 @@ class BIM_PT_tab_stakeholders(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_stakeholders", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_collaboration(Panel): + bl_idname = "BIM_PT_tab_collaboration" bl_label = "Collaboration" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1193,9 +1269,13 @@ class BIM_PT_tab_collaboration(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_collaboration", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "QUALITY") + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) def draw(self, context): pass @@ -1211,9 +1291,13 @@ class BIM_PT_tab_grouping_and_filtering(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_grouping_and_filtering", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1236,15 +1320,20 @@ class BIM_PT_tab_geometry(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_geometry", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "PROJECT") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_status(Panel): + bl_idname = "BIM_PT_tab_status" bl_label = "Status" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1252,15 +1341,20 @@ class BIM_PT_tab_status(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_status", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_qto(Panel): + bl_idname = "BIM_PT_tab_qto" bl_label = "Quantity Take-off" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1268,15 +1362,20 @@ class BIM_PT_tab_qto(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_qto", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_resources(Panel): + bl_idname = "BIM_PT_tab_resources" bl_label = "Resources" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1284,15 +1383,20 @@ class BIM_PT_tab_resources(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_resources", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_cost(Panel): + bl_idname = "BIM_PT_tab_cost" bl_label = "Cost" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1300,15 +1404,20 @@ class BIM_PT_tab_cost(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_cost", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_sequence(Panel): + bl_idname = "BIM_PT_tab_sequence" bl_label = "Construction Scheduling" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1316,15 +1425,20 @@ class BIM_PT_tab_sequence(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_sequence", True): - return False - return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): + return False + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_structural(Panel): + bl_idname = "BIM_PT_tab_structural" bl_label = "Structural" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1332,15 +1446,20 @@ class BIM_PT_tab_structural(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_structural", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "STRUCTURE") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_services(Panel): + bl_idname = "BIM_PT_tab_services" bl_label = "Services" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1348,15 +1467,20 @@ class BIM_PT_tab_services(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_services", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_lighting(Panel): + bl_idname = "BIM_PT_tab_lighting" bl_label = "Lighting" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1364,15 +1488,20 @@ class BIM_PT_tab_lighting(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_lighting", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_zones(Panel): + bl_idname = "BIM_PT_tab_zones" bl_label = "Zones" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1380,15 +1509,20 @@ class BIM_PT_tab_zones(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_zones", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_solar_analysis(Panel): + bl_idname = "BIM_PT_tab_solar_analysis" bl_label = "Solar Analysis" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1396,15 +1530,20 @@ class BIM_PT_tab_solar_analysis(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_solar_analysis", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "SERVICES") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_quality_control(Panel): + bl_idname = "BIM_PT_tab_quality_control" bl_label = "Quality Control" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1412,15 +1551,20 @@ class BIM_PT_tab_quality_control(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_quality_control", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "QUALITY") + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) def draw(self, context): pass class BIM_PT_tab_clash_detection(Panel): + bl_idname = "BIM_PT_tab_clash_detection" bl_label = "Clash Detection" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1428,15 +1572,20 @@ class BIM_PT_tab_clash_detection(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_clash_detection", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "QUALITY") + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) def draw(self, context): pass class BIM_PT_tab_sandbox(Panel): + bl_idname = "BIM_PT_tab_sandbox" bl_label = "Sandbox" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1445,9 +1594,13 @@ class BIM_PT_tab_sandbox(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_sandbox", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "QUALITY") + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) def draw(self, context): row = self.layout.row() @@ -1456,6 +1609,7 @@ class BIM_PT_tab_sandbox(Panel): # Object panel groups class BIM_PT_tab_object_metadata(Panel): + bl_idname = "BIM_PT_tab_object_metadata" bl_label = "Object" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1464,11 +1618,16 @@ class BIM_PT_tab_object_metadata(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_object_metadata", True): - return False + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): + return False + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + props = tool.Project.get_project_props() return ( - tool.Blender.is_tab(context, "OBJECT") + tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() and (obj := context.active_object) # Hide links empty handles. @@ -1484,6 +1643,7 @@ class BIM_PT_tab_object_metadata(Panel): class BIM_PT_tab_placement(Panel): + bl_idname = "BIM_PT_tab_placement" bl_label = "Placement" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1492,10 +1652,15 @@ class BIM_PT_tab_placement(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_placement", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return ( - tool.Blender.is_tab(context, "GEOMETRY") + tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1506,6 +1671,7 @@ class BIM_PT_tab_placement(Panel): class BIM_PT_tab_representations(Panel): + bl_idname = "BIM_PT_tab_representations" bl_label = "Representations" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1514,10 +1680,14 @@ class BIM_PT_tab_representations(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_representations", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, "GEOMETRY") + tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() and tool.Geometry.get_active_or_representation_obj() ) @@ -1527,6 +1697,7 @@ class BIM_PT_tab_representations(Panel): class BIM_PT_tab_geometric_relationships(Panel): + bl_idname = "BIM_PT_tab_geometric_relationships" bl_label = "Geometric Relationships" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1536,15 +1707,20 @@ class BIM_PT_tab_geometric_relationships(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_geometric_relationships", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_parametric_geometry(Panel): + bl_idname = "BIM_PT_tab_parametric_geometry" bl_label = "Parametric Geometry" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1554,10 +1730,14 @@ class BIM_PT_tab_parametric_geometry(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_parametric_geometry", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, "GEOMETRY") + tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1568,6 +1748,7 @@ class BIM_PT_tab_parametric_geometry(Panel): class BIM_PT_tab_object_materials(Panel): + bl_idname = "BIM_PT_tab_object_materials" bl_label = "Object Materials" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1576,10 +1757,14 @@ class BIM_PT_tab_object_materials(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_object_materials", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, "GEOMETRY") + tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1590,6 +1775,7 @@ class BIM_PT_tab_object_materials(Panel): class BIM_PT_tab_materials(Panel): + bl_idname = "BIM_PT_tab_materials" bl_label = "Materials" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1598,15 +1784,20 @@ class BIM_PT_tab_materials(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_materials", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_styles(Panel): + bl_idname = "BIM_PT_tab_styles" bl_label = "Styles" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1615,15 +1806,20 @@ class BIM_PT_tab_styles(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_styles", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_profiles(Panel): + bl_idname = "BIM_PT_tab_profiles" bl_label = "Profiles" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1632,15 +1828,20 @@ class BIM_PT_tab_profiles(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_profiles", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "GEOMETRY") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_sheets(Panel): + bl_idname = "BIM_PT_tab_sheets" bl_label = "Sheets" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1649,15 +1850,20 @@ class BIM_PT_tab_sheets(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_sheets", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_drawings(Panel): + bl_idname = "BIM_PT_tab_drawings" bl_label = "Drawings" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1666,15 +1872,20 @@ class BIM_PT_tab_drawings(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_drawings", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_schedules(Panel): + bl_idname = "BIM_PT_tab_schedules" bl_label = "Schedules" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1683,15 +1894,20 @@ class BIM_PT_tab_schedules(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_schedules", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_references(Panel): + bl_idname = "BIM_PT_tab_references" bl_label = "References" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1700,15 +1916,20 @@ class BIM_PT_tab_references(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_references", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "DRAWINGS") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_misc(Panel): + bl_idname = "BIM_PT_tab_misc" bl_label = "Misc." bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1718,15 +1939,20 @@ class BIM_PT_tab_misc(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_misc", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "OBJECT") and tool.Ifc.get() + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass class BIM_PT_tab_handover(Panel): + bl_idname = "BIM_PT_tab_handover" bl_label = "Commissioning and Handover" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1735,15 +1961,20 @@ class BIM_PT_tab_handover(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_handover", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "FM") + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) def draw(self, context): pass class BIM_PT_tab_operations(Panel): + bl_idname = "BIM_PT_tab_operations" bl_label = "Operations and Maintenance" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1752,9 +1983,13 @@ class BIM_PT_tab_operations(Panel): @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_operations", True): + prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" + prop_visible = f"show_{cls.bl_idname.lower()}" + if not getattr(context.scene, prop_visible, True): return False - return tool.Blender.is_tab(context, "FM") + if getattr(context.scene, prop_bookmark, False): + return tool.Blender.is_tab(context, "BOOKMARK") + return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) def draw(self, context): pass From d0dbdbc20566d45b5a7b1a050f5facf0ede46b00 Mon Sep 17 00:00:00 2001 From: falken10 Date: Fri, 25 Apr 2025 02:47:01 +0200 Subject: [PATCH 380/657] added lb_labels --- src/bonsai/bonsai/bim/__init__.py | 31 +++--- src/bonsai/bonsai/bim/operator.py | 30 +++--- src/bonsai/bonsai/bim/ui.py | 157 ++++++++++++++++-------------- 3 files changed, 120 insertions(+), 98 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index f60c9df09f..409d8f18c9 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -233,37 +233,40 @@ def on_register(scene): is_registering = False def register_panel_visibility_properties(): - for panel_name in ui.TAB_PANELS.values(): - for panel in panel_name: - prop_name = f"show_{panel.lower()}" + for panel_list in ui.TAB_PANELS.values(): + for panel in panel_list: + bl_idname = panel.get("bl_idname", "") + prop_name = f"show_{bl_idname.lower()}" setattr( bpy.types.Scene, prop_name, bpy.props.BoolProperty( - name=f"Show {panel}", - description=f"Show or hide the {panel} panel", - default=True, # Panels are visible by default + name=f"Show {bl_idname}", + description=f"Show or hide the {bl_idname} panel", + default=True, ), ) - prop_name = f"bookmark_{panel.lower()}" + prop_name = f"bookmark_{bl_idname.lower()}" setattr( bpy.types.Scene, prop_name, bpy.props.BoolProperty( - name=f"Bookmark {panel}", - description=f"Move to Bookmark or not {panel} panel", - default=False, # Panels are visible by default + name=f"Bookmark {bl_idname}", + description=f"Move to Bookmark or not {bl_idname} panel", + default=False, ), ) + def unregister_panel_visibility_properties(): - for panel_name in ui.TAB_PANELS.values(): - for panel in panel_name: - prop_name = f"show_{panel.lower()}" + for panel_list in ui.TAB_PANELS.values(): + for panel in panel_list: + bl_idname = panel.get("bl_idname", "") + prop_name = f"show_{bl_idname.lower()}" if hasattr(bpy.types.Scene, prop_name): delattr(bpy.types.Scene, prop_name) - prop_name = f"bookmark_{panel.lower()}" + prop_name = f"bookmark_{bl_idname.lower()}" if hasattr(bpy.types.Scene, prop_name): delattr(bpy.types.Scene, prop_name) diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index f507120831..988f7fecd5 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -1614,7 +1614,7 @@ class BIM_UL_tab_panels(bpy.types.UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): # Draw the panel name row = layout.row(align=True) - row.label(text=item.name) + row.label(text=item["bl_label"]) # Add the eye icon for toggling visibility row.operator( @@ -1692,18 +1692,21 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): print(f"Property '{prop_name}' not found on Scene.") # Add or remove the panel from the TAB_PANELS["BOOKMARK"] list + panel_label = item["bl_label"] if item["bookmarked"]: - if panel_name not in TAB_PANELS["BOOKMARK"]: - TAB_PANELS["BOOKMARK"].append(panel_name) + if not any(p.get("bl_idname") == panel_name for p in TAB_PANELS["BOOKMARK"]): + TAB_PANELS["BOOKMARK"].append({"bl_idname": panel_name, "bl_label": panel_label}) print(f"Added {panel_name} to BOOKMARK tab.") else: - if panel_name in TAB_PANELS["BOOKMARK"]: - TAB_PANELS["BOOKMARK"].remove(panel_name) - print(f"Removed {panel_name} from BOOKMARK tab.") - # Remove the panel from the tab_panels collection if in BOOKMARK tab - if context.scene.active_tab_name == "BOOKMARK": - context.scene.tab_panels.remove(context.scene.tab_panels.find(panel_name)) - break + for i, p in enumerate(TAB_PANELS["BOOKMARK"]): + if p.get("bl_idname") == panel_name: + del TAB_PANELS["BOOKMARK"][i] + print(f"Removed {panel_name} from BOOKMARK tab.") + if context.scene.active_tab_name == "BOOKMARK": + index = context.scene.tab_panels.find(panel_name) + if index != -1: + context.scene.tab_panels.remove(index) + break # Redraw the UI to reflect the changes for area in bpy.context.window.screen.areas: @@ -1728,9 +1731,14 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): # Populate the tab_panels collection context.scene.tab_panels.clear() - for panel_name in TAB_PANELS.get(self.tab_name, []): + for panel_data in TAB_PANELS.get(self.tab_name, []): + panel_name = panel_data.get("bl_idname","") + panel_label = panel_data.get("bl_label","") + if not panel_name or not panel_label: + continue item = context.scene.tab_panels.add() item.name = panel_name + item["bl_label"] = panel_label # Use the registered properties to set visibility and bookmark states show_prop_name = f"show_{panel_name.lower()}" diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index bb5056844f..76c2a5f145 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -65,60 +65,70 @@ if TYPE_CHECKING: TAB_PANELS = { "PROJECT": [ # "BIM_PT_tab_new_project_wizard", - "BIM_PT_tab_project_info", - "BIM_PT_tab_spatial", - "BIM_PT_tab_project_setup", - "BIM_PT_tab_geometry", - "BIM_PT_tab_stakeholders", - "BIM_PT_tab_grouping_and_filtering", + {"bl_idname":"BIM_PT_tab_project_info", "bl_label":"Project Info"}, + {"bl_idname":"BIM_PT_tab_spatial", "bl_label":"Spatial"}, + {"bl_idname":"BIM_PT_tab_project_setup", "bl_label":"Project Setup"}, + {"bl_idname":"BIM_PT_tab_geometry", "bl_label":"Geometry"}, + {"bl_idname":"BIM_PT_tab_stakeholders", "bl_label":"Stakeholders"}, + {"bl_idname":"BIM_PT_tab_grouping_and_filtering", "bl_label":"Grouping and Filtering"}, ], "OBJECT": [ - "BIM_PT_tab_object_metadata", - "BIM_PT_tab_misc", + {"bl_idname":"BIM_PT_tab_object_metadata", "bl_label":"Object Metadata"}, + {"bl_idname":"BIM_PT_tab_misc", "bl_label":"Misc"}, + ], "GEOMETRY": [ - "BIM_PT_tab_placement", - "BIM_PT_tab_representations", - "BIM_PT_tab_geometric_relationships", - "BIM_PT_tab_parametric_geometry", - "BIM_PT_tab_object_materials", - "BIM_PT_tab_materials", - "BIM_PT_tab_styles", - "BIM_PT_tab_profiles", + {"bl_idname":"BIM_PT_tab_placement", "bl_label":"Placement"}, + {"bl_idname":"BIM_PT_tab_representations", "bl_label":"Representations"}, + {"bl_idname":"BIM_PT_tab_geometric_relationships", "bl_label":"Geometric Relationships"}, + {"bl_idname":"BIM_PT_tab_parametric_geometry", "bl_label":"Parametric Geometry"}, + {"bl_idname":"BIM_PT_tab_object_materials", "bl_label":"Object Materials"}, + {"bl_idname":"BIM_PT_tab_materials", "bl_label":"Materials"}, + {"bl_idname":"BIM_PT_tab_styles", "bl_label":"Styles"}, + {"bl_idname":"BIM_PT_tab_profiles", "bl_label":"Profiles"}, + ], "DRAWINGS": [ - "BIM_PT_tab_sheets", - "BIM_PT_tab_drawings", - "BIM_PT_tab_schedules", - "BIM_PT_tab_references", + {"bl_idname":"BIM_PT_tab_sheets", "bl_label":"Sheets"}, + {"bl_idname":"BIM_PT_tab_drawings", "bl_label":"Drawings"}, + {"bl_idname":"BIM_PT_tab_schedules", "bl_label":"Schedules"}, + {"bl_idname":"BIM_PT_tab_references", "bl_label":"References"}, + ], "SERVICES": [ - "BIM_PT_tab_services", - "BIM_PT_tab_zones", - "BIM_PT_tab_solar_analysis", - "BIM_PT_tab_lighting", + {"bl_idname":"BIM_PT_tab_services", "bl_label":"Services"}, + {"bl_idname":"BIM_PT_tab_zones", "bl_label":"Zones"}, + {"bl_idname":"BIM_PT_tab_solar_analysis", "bl_label":"Solar Analysis"}, + {"bl_idname":"BIM_PT_tab_lighting", "bl_label":"Lighting"}, + ], "STRUCTURE": [ - "BIM_PT_tab_structural", + {"bl_idname":"BIM_PT_tab_structural", "bl_label":"Structural"}, + ], "SCHEDULING": [ - "BIM_PT_tab_status", - "BIM_PT_tab_qto", - "BIM_PT_tab_resources", - "BIM_PT_tab_cost", - "BIM_PT_tab_sequence", + {"bl_idname":"BIM_PT_tab_status", "bl_label":"Status"}, + {"bl_idname":"BIM_PT_tab_qto", "bl_label":"Quantity Take-off"}, + {"bl_idname":"BIM_PT_tab_resources", "bl_label":"Resources"}, + {"bl_idname":"BIM_PT_tab_cost", "bl_label":"Cost"}, + {"bl_idname":"BIM_PT_tab_sequence", "bl_label":"Construction Scheduling"}, + ], "FM": [ - "BIM_PT_tab_handover", - "BIM_PT_tab_operations", + {"bl_idname":"BIM_PT_tab_handover", "bl_label":"Handover"}, + {"bl_idname":"BIM_PT_tab_operations", "bl_label":"Operations"}, + ], "QUALITY": [ - "BIM_PT_tab_quality_control", - "BIM_PT_tab_clash_detection", - "BIM_PT_tab_collaboration", - "BIM_PT_tab_sandbox", + {"bl_idname":"BIM_PT_tab_quality_control", "bl_label":"Quality Control"}, + {"bl_idname":"BIM_PT_tab_clash_detection", "bl_label":"Clash Detection"}, + {"bl_idname":"BIM_PT_tab_collaboration", "bl_label":"Collaboration"}, + {"bl_idname":"BIM_PT_tab_sandbox", "bl_label":"Sandbox"}, + + ], + "BOOKMARK": [ + {}, ], - "BOOKMARK": [], } @@ -1181,7 +1191,8 @@ class BIM_PT_tab_project_info(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - if not tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")): + if not tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")): + return False bim_props = tool.Blender.get_bim_props() pprops = tool.Project.get_project_props() @@ -1211,7 +1222,7 @@ class BIM_PT_tab_spatial(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1232,7 +1243,7 @@ class BIM_PT_tab_project_setup(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) def draw(self, context): pass @@ -1254,7 +1265,7 @@ class BIM_PT_tab_stakeholders(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1275,7 +1286,7 @@ class BIM_PT_tab_collaboration(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) def draw(self, context): pass @@ -1297,7 +1308,7 @@ class BIM_PT_tab_grouping_and_filtering(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1326,7 +1337,7 @@ class BIM_PT_tab_geometry(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1347,7 +1358,7 @@ class BIM_PT_tab_status(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1368,7 +1379,7 @@ class BIM_PT_tab_qto(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1389,7 +1400,7 @@ class BIM_PT_tab_resources(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1410,7 +1421,7 @@ class BIM_PT_tab_cost(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1431,7 +1442,7 @@ class BIM_PT_tab_sequence(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1452,7 +1463,7 @@ class BIM_PT_tab_structural(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1473,7 +1484,7 @@ class BIM_PT_tab_services(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1494,7 +1505,7 @@ class BIM_PT_tab_lighting(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1515,7 +1526,7 @@ class BIM_PT_tab_zones(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1536,7 +1547,7 @@ class BIM_PT_tab_solar_analysis(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1557,7 +1568,7 @@ class BIM_PT_tab_quality_control(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) def draw(self, context): pass @@ -1578,7 +1589,7 @@ class BIM_PT_tab_clash_detection(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) def draw(self, context): pass @@ -1600,7 +1611,7 @@ class BIM_PT_tab_sandbox(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) def draw(self, context): row = self.layout.row() @@ -1627,7 +1638,7 @@ class BIM_PT_tab_object_metadata(Panel): props = tool.Project.get_project_props() return ( - tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() and (obj := context.active_object) # Hide links empty handles. @@ -1660,7 +1671,7 @@ class BIM_PT_tab_placement(Panel): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1687,7 +1698,7 @@ class BIM_PT_tab_representations(Panel): if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() and tool.Geometry.get_active_or_representation_obj() ) @@ -1713,7 +1724,7 @@ class BIM_PT_tab_geometric_relationships(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1737,7 +1748,7 @@ class BIM_PT_tab_parametric_geometry(Panel): if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1764,7 +1775,7 @@ class BIM_PT_tab_object_materials(Panel): if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1790,7 +1801,7 @@ class BIM_PT_tab_materials(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1812,7 +1823,7 @@ class BIM_PT_tab_styles(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1834,7 +1845,7 @@ class BIM_PT_tab_profiles(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1856,7 +1867,7 @@ class BIM_PT_tab_sheets(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1878,7 +1889,7 @@ class BIM_PT_tab_drawings(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1900,7 +1911,7 @@ class BIM_PT_tab_schedules(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1922,7 +1933,7 @@ class BIM_PT_tab_references(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1945,7 +1956,7 @@ class BIM_PT_tab_misc(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() def draw(self, context): pass @@ -1967,7 +1978,7 @@ class BIM_PT_tab_handover(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) def draw(self, context): pass @@ -1989,7 +2000,7 @@ class BIM_PT_tab_operations(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((tab for tab, panels in TAB_PANELS.items() if cls.bl_idname in panels), "BOOKMARK")) + return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) def draw(self, context): pass From 4a71ea1fd6f00f0c531ae1edb9dda792b0fc0015 Mon Sep 17 00:00:00 2001 From: falken10 Date: Fri, 25 Apr 2025 09:55:51 +0200 Subject: [PATCH 381/657] code simplification --- src/bonsai/bonsai/bim/ui.py | 153 +++++++++++++++++++----------------- 1 file changed, 80 insertions(+), 73 deletions(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 76c2a5f145..f4329db149 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -131,6 +131,12 @@ TAB_PANELS = { ], } +def get_tab(bl_idname): + return next((k for k, v in TAB_PANELS.items() if any(d.get("bl_idname") == bl_idname for d in v)), "BOOKMARK") + +def get_bl_label(bl_idname): + return next((panel["bl_label"] for panels in TAB_PANELS.values() for panel in panels if isinstance(panel, dict) and panel.get("bl_idname") == bl_idname), "NO LABEL") + class IFCFileSelector: layout: bpy.types.UILayout @@ -209,8 +215,8 @@ class IFCFileSelector: class BIM_PT_section_plane(Panel): - bl_label = "Temporary Section Cutaways" bl_idname = "BIM_PT_section_plane" + bl_label = "Temporary Section Cutaways" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "output" @@ -233,8 +239,8 @@ class BIM_PT_section_plane(Panel): class BIM_PT_section_with_cappings(Panel): - bl_label = "Section Cutaways With Cappings" bl_idname = "BIM_PT_section_with_cappings" + bl_label = "Section Cutaways With Cappings" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "output" @@ -1004,6 +1010,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): # Scene panel groups class BIM_PT_tabs(Panel): + bl_idname = "BIM_PT_tabs" bl_label = "Bonsai" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" @@ -1178,7 +1185,7 @@ class BIM_PT_tab_new_project_wizard(Panel): class BIM_PT_tab_project_info(Panel): bl_idname = "BIM_PT_tab_project_info" - bl_label = "Project Info" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1191,7 +1198,7 @@ class BIM_PT_tab_project_info(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - if not tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")): + if not tool.Blender.is_tab(context, get_tab(cls.bl_idname)): return False bim_props = tool.Blender.get_bim_props() @@ -1209,7 +1216,7 @@ class BIM_PT_tab_project_info(Panel): class BIM_PT_tab_spatial(Panel): bl_idname = "BIM_PT_tab_spatial" - bl_label = "Spatial" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1222,7 +1229,7 @@ class BIM_PT_tab_spatial(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1230,7 +1237,7 @@ class BIM_PT_tab_spatial(Panel): class BIM_PT_tab_project_setup(Panel): bl_idname = "BIM_PT_tab_project_setup" - bl_label = "Project Setup" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1243,7 +1250,7 @@ class BIM_PT_tab_project_setup(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) def draw(self, context): pass @@ -1251,7 +1258,7 @@ class BIM_PT_tab_project_setup(Panel): class BIM_PT_tab_stakeholders(Panel): bl_idname = "BIM_PT_tab_stakeholders" - bl_label = "Stakeholders" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1265,7 +1272,7 @@ class BIM_PT_tab_stakeholders(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1273,7 +1280,7 @@ class BIM_PT_tab_stakeholders(Panel): class BIM_PT_tab_collaboration(Panel): bl_idname = "BIM_PT_tab_collaboration" - bl_label = "Collaboration" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1286,7 +1293,7 @@ class BIM_PT_tab_collaboration(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) def draw(self, context): pass @@ -1294,7 +1301,7 @@ class BIM_PT_tab_collaboration(Panel): class BIM_PT_tab_grouping_and_filtering(Panel): bl_idname = "BIM_PT_tab_grouping_and_filtering" - bl_label = "Grouping and Filtering" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1308,7 +1315,7 @@ class BIM_PT_tab_grouping_and_filtering(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1324,7 +1331,7 @@ class BIM_PT_tab_grouping_and_filtering(Panel): class BIM_PT_tab_geometry(Panel): bl_idname = "BIM_PT_tab_geometry" - bl_label = "Geometry" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1337,7 +1344,7 @@ class BIM_PT_tab_geometry(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1345,7 +1352,7 @@ class BIM_PT_tab_geometry(Panel): class BIM_PT_tab_status(Panel): bl_idname = "BIM_PT_tab_status" - bl_label = "Status" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1358,7 +1365,7 @@ class BIM_PT_tab_status(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1366,7 +1373,7 @@ class BIM_PT_tab_status(Panel): class BIM_PT_tab_qto(Panel): bl_idname = "BIM_PT_tab_qto" - bl_label = "Quantity Take-off" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1379,7 +1386,7 @@ class BIM_PT_tab_qto(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1387,7 +1394,7 @@ class BIM_PT_tab_qto(Panel): class BIM_PT_tab_resources(Panel): bl_idname = "BIM_PT_tab_resources" - bl_label = "Resources" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1400,7 +1407,7 @@ class BIM_PT_tab_resources(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1408,7 +1415,7 @@ class BIM_PT_tab_resources(Panel): class BIM_PT_tab_cost(Panel): bl_idname = "BIM_PT_tab_cost" - bl_label = "Cost" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1421,7 +1428,7 @@ class BIM_PT_tab_cost(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1429,7 +1436,7 @@ class BIM_PT_tab_cost(Panel): class BIM_PT_tab_sequence(Panel): bl_idname = "BIM_PT_tab_sequence" - bl_label = "Construction Scheduling" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1442,7 +1449,7 @@ class BIM_PT_tab_sequence(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1450,7 +1457,7 @@ class BIM_PT_tab_sequence(Panel): class BIM_PT_tab_structural(Panel): bl_idname = "BIM_PT_tab_structural" - bl_label = "Structural" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1463,7 +1470,7 @@ class BIM_PT_tab_structural(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1471,7 +1478,7 @@ class BIM_PT_tab_structural(Panel): class BIM_PT_tab_services(Panel): bl_idname = "BIM_PT_tab_services" - bl_label = "Services" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1484,7 +1491,7 @@ class BIM_PT_tab_services(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1492,7 +1499,7 @@ class BIM_PT_tab_services(Panel): class BIM_PT_tab_lighting(Panel): bl_idname = "BIM_PT_tab_lighting" - bl_label = "Lighting" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1505,7 +1512,7 @@ class BIM_PT_tab_lighting(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1513,7 +1520,7 @@ class BIM_PT_tab_lighting(Panel): class BIM_PT_tab_zones(Panel): bl_idname = "BIM_PT_tab_zones" - bl_label = "Zones" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1526,7 +1533,7 @@ class BIM_PT_tab_zones(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1534,7 +1541,7 @@ class BIM_PT_tab_zones(Panel): class BIM_PT_tab_solar_analysis(Panel): bl_idname = "BIM_PT_tab_solar_analysis" - bl_label = "Solar Analysis" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1547,7 +1554,7 @@ class BIM_PT_tab_solar_analysis(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1555,7 +1562,7 @@ class BIM_PT_tab_solar_analysis(Panel): class BIM_PT_tab_quality_control(Panel): bl_idname = "BIM_PT_tab_quality_control" - bl_label = "Quality Control" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1568,7 +1575,7 @@ class BIM_PT_tab_quality_control(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) def draw(self, context): pass @@ -1576,7 +1583,7 @@ class BIM_PT_tab_quality_control(Panel): class BIM_PT_tab_clash_detection(Panel): bl_idname = "BIM_PT_tab_clash_detection" - bl_label = "Clash Detection" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1589,7 +1596,7 @@ class BIM_PT_tab_clash_detection(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) def draw(self, context): pass @@ -1597,7 +1604,7 @@ class BIM_PT_tab_clash_detection(Panel): class BIM_PT_tab_sandbox(Panel): bl_idname = "BIM_PT_tab_sandbox" - bl_label = "Sandbox" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1611,7 +1618,7 @@ class BIM_PT_tab_sandbox(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) def draw(self, context): row = self.layout.row() @@ -1638,7 +1645,7 @@ class BIM_PT_tab_object_metadata(Panel): props = tool.Project.get_project_props() return ( - tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) # Hide links empty handles. @@ -1655,7 +1662,7 @@ class BIM_PT_tab_object_metadata(Panel): class BIM_PT_tab_placement(Panel): bl_idname = "BIM_PT_tab_placement" - bl_label = "Placement" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1671,7 +1678,7 @@ class BIM_PT_tab_placement(Panel): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1683,7 +1690,7 @@ class BIM_PT_tab_placement(Panel): class BIM_PT_tab_representations(Panel): bl_idname = "BIM_PT_tab_representations" - bl_label = "Representations" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1698,7 +1705,7 @@ class BIM_PT_tab_representations(Panel): if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() and tool.Geometry.get_active_or_representation_obj() ) @@ -1709,7 +1716,7 @@ class BIM_PT_tab_representations(Panel): class BIM_PT_tab_geometric_relationships(Panel): bl_idname = "BIM_PT_tab_geometric_relationships" - bl_label = "Geometric Relationships" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1724,7 +1731,7 @@ class BIM_PT_tab_geometric_relationships(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1732,7 +1739,7 @@ class BIM_PT_tab_geometric_relationships(Panel): class BIM_PT_tab_parametric_geometry(Panel): bl_idname = "BIM_PT_tab_parametric_geometry" - bl_label = "Parametric Geometry" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1748,7 +1755,7 @@ class BIM_PT_tab_parametric_geometry(Panel): if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1760,7 +1767,7 @@ class BIM_PT_tab_parametric_geometry(Panel): class BIM_PT_tab_object_materials(Panel): bl_idname = "BIM_PT_tab_object_materials" - bl_label = "Object Materials" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1775,7 +1782,7 @@ class BIM_PT_tab_object_materials(Panel): if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1787,7 +1794,7 @@ class BIM_PT_tab_object_materials(Panel): class BIM_PT_tab_materials(Panel): bl_idname = "BIM_PT_tab_materials" - bl_label = "Materials" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1801,7 +1808,7 @@ class BIM_PT_tab_materials(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1809,7 +1816,7 @@ class BIM_PT_tab_materials(Panel): class BIM_PT_tab_styles(Panel): bl_idname = "BIM_PT_tab_styles" - bl_label = "Styles" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1823,7 +1830,7 @@ class BIM_PT_tab_styles(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1831,7 +1838,7 @@ class BIM_PT_tab_styles(Panel): class BIM_PT_tab_profiles(Panel): bl_idname = "BIM_PT_tab_profiles" - bl_label = "Profiles" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1845,7 +1852,7 @@ class BIM_PT_tab_profiles(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1853,7 +1860,7 @@ class BIM_PT_tab_profiles(Panel): class BIM_PT_tab_sheets(Panel): bl_idname = "BIM_PT_tab_sheets" - bl_label = "Sheets" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1867,7 +1874,7 @@ class BIM_PT_tab_sheets(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1875,7 +1882,7 @@ class BIM_PT_tab_sheets(Panel): class BIM_PT_tab_drawings(Panel): bl_idname = "BIM_PT_tab_drawings" - bl_label = "Drawings" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1889,7 +1896,7 @@ class BIM_PT_tab_drawings(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1897,7 +1904,7 @@ class BIM_PT_tab_drawings(Panel): class BIM_PT_tab_schedules(Panel): bl_idname = "BIM_PT_tab_schedules" - bl_label = "Schedules" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1911,7 +1918,7 @@ class BIM_PT_tab_schedules(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1919,7 +1926,7 @@ class BIM_PT_tab_schedules(Panel): class BIM_PT_tab_references(Panel): bl_idname = "BIM_PT_tab_references" - bl_label = "References" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1933,7 +1940,7 @@ class BIM_PT_tab_references(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1941,7 +1948,7 @@ class BIM_PT_tab_references(Panel): class BIM_PT_tab_misc(Panel): bl_idname = "BIM_PT_tab_misc" - bl_label = "Misc." + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1956,7 +1963,7 @@ class BIM_PT_tab_misc(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1964,7 +1971,7 @@ class BIM_PT_tab_misc(Panel): class BIM_PT_tab_handover(Panel): bl_idname = "BIM_PT_tab_handover" - bl_label = "Commissioning and Handover" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -1978,7 +1985,7 @@ class BIM_PT_tab_handover(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) def draw(self, context): pass @@ -1986,7 +1993,7 @@ class BIM_PT_tab_handover(Panel): class BIM_PT_tab_operations(Panel): bl_idname = "BIM_PT_tab_operations" - bl_label = "Operations and Maintenance" + bl_label = get_bl_label(bl_idname) bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" @@ -2000,7 +2007,7 @@ class BIM_PT_tab_operations(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, next((k for k, v in TAB_PANELS.items() if any(p.get("bl_idname") == cls.bl_idname for p in v)), "BOOKMARK")) + return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) def draw(self, context): pass From 1fd3e2791f48f69b03a56fc39ebbd37661938f92 Mon Sep 17 00:00:00 2001 From: falken10 Date: Fri, 25 Apr 2025 19:21:18 +0200 Subject: [PATCH 382/657] added TAB visibility --- src/bonsai/bonsai/bim/__init__.py | 14 +- src/bonsai/bonsai/bim/operator.py | 103 +++++++++++- src/bonsai/bonsai/bim/ui.py | 256 ++++++++++++++++++++---------- 3 files changed, 280 insertions(+), 93 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 409d8f18c9..d054c1a236 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -129,6 +129,14 @@ classes = [ prop.StrProperty, operator.BIM_OT_enum_property_search, # /!\ Register AFTER prop.StrProperty operator.BIM_OT_attribute_search_values, + operator.BIM_UL_tab_panels, + operator.BIM_OT_toggle_panel_visibility, + operator.BIM_OT_bookmark_panel, + operator.BIM_OT_manage_tab_panels, + operator.BIM_OT_manage_tab_visibility, + operator.BIM_OT_toggle_tab_visibility, + operator.BIM_OT_load_json_layout, + operator.BIM_OT_save_json_layout, prop.ObjProperty, prop.MultipleFileSelect, prop.Attribute, @@ -206,10 +214,7 @@ classes = [ ui.BIM_PT_section_with_cappings, ui.BIM_PT_decorators_overlay, ui.BIM_PT_snappping, - operator.BIM_UL_tab_panels, - operator.BIM_OT_toggle_panel_visibility, - operator.BIM_OT_bookmark_panel, - operator.BIM_OT_manage_tab_panels, + ] for mod in modules.values(): @@ -258,7 +263,6 @@ def register_panel_visibility_properties(): ) - def unregister_panel_visibility_properties(): for panel_list in ui.TAB_PANELS.values(): for panel in panel_list: diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 988f7fecd5..30bfda6826 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -33,7 +33,7 @@ import bonsai.bim import bonsai.tool as tool import bonsai.bim.handler from enum import Enum -from bonsai.bim.ui import TAB_PANELS +from bonsai.bim.ui import TAB_PANELS, TAB_VISIBILITY from bpy_extras.io_utils import ImportHelper from bonsai.bim import import_ifc from bonsai.bim.prop import StrProperty @@ -1750,7 +1750,7 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): print(f"Tab Panels for {self.tab_name}: {[item.name for item in context.scene.tab_panels]}") - return context.window_manager.invoke_props_dialog(self, width=400) + return context.window_manager.invoke_props_dialog(self) def draw(self, context): layout = self.layout @@ -1772,3 +1772,102 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): self.report({"INFO"}, f"Panels for {self.tab_name} managed successfully.") return {"FINISHED"} + +class BIM_OT_manage_tab_visibility(bpy.types.Operator): + """Manage Tab Visibility""" + bl_idname = "bim.manage_tab_visibility" + bl_label = "Manage Tab Visibility" + bl_options = {"REGISTER", "UNDO"} + + def draw(self, context): + layout = self.layout + for tab_name, is_visible in TAB_VISIBILITY.items(): + row = layout.row() + row.label(text=tab_name) + icon = "HIDE_OFF" if is_visible else "HIDE_ON" + op = row.operator("bim.toggle_tab_visibility", text="", icon=icon) + op.tab_name = tab_name + + def execute(self, context): + return {"FINISHED"} + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self) + +class BIM_OT_toggle_tab_visibility(bpy.types.Operator): + """Toggle Tab Visibility""" + bl_idname = "bim.toggle_tab_visibility" + bl_label = "Toggle Tab Visibility" + bl_options = {"REGISTER", "UNDO"} + + tab_name: bpy.props.StringProperty() + + def execute(self, context): + # Toggle the visibility of the tab + if self.tab_name in TAB_VISIBILITY: + TAB_VISIBILITY[self.tab_name] = not TAB_VISIBILITY[self.tab_name] + + # Redraw the UI to reflect the changes + for area in bpy.context.window.screen.areas: + if area.type == "PROPERTIES": + area.tag_redraw() + + self.report({"INFO"}, f"Toggled visibility for {self.tab_name}.") + return {"FINISHED"} + +import json +import bpy + +class BIM_OT_load_json_layout(bpy.types.Operator): + """Load JSON Layout""" + bl_idname = "bim.load_json_layout" + bl_label = "Load UI Layout" + bl_options = {"REGISTER", "UNDO"} + + filepath: bpy.props.StringProperty(subtype="FILE_PATH") + + def execute(self, context): + try: + with open(self.filepath, "r") as file: + data = json.load(file) + # Process the loaded JSON data + self.report({"INFO"}, f"Loaded JSON layout from {self.filepath}") + except Exception as e: + self.report({"ERROR"}, f"Failed to load JSON layout: {e}") + return {"CANCELLED"} + + return {"FINISHED"} + + def invoke(self, context, event): + context.window_manager.fileselect_add(self) + return {"RUNNING_MODAL"} + +class BIM_OT_save_json_layout(bpy.types.Operator): + """Save JSON Layout""" + bl_idname = "bim.save_json_layout" + bl_label = "Save UI Layout" + bl_options = {"REGISTER", "UNDO"} + + filepath: bpy.props.StringProperty(subtype="FILE_PATH") + + def execute(self, context): + try: + # Replace this with the data you want to save + data = { + "example_key": "example_value", + "tabs": list(TAB_VISIBILITY.keys()), + "visibility": TAB_VISIBILITY, + } + + with open(self.filepath, "w") as file: + json.dump(data, file, indent=4) + self.report({"INFO"}, f"Saved JSON layout to {self.filepath}") + except Exception as e: + self.report({"ERROR"}, f"Failed to save JSON layout: {e}") + return {"CANCELLED"} + + return {"FINISHED"} + + def invoke(self, context, event): + context.window_manager.fileselect_add(self) + return {"RUNNING_MODAL"} diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index f4329db149..25eff9e109 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -131,8 +131,23 @@ TAB_PANELS = { ], } -def get_tab(bl_idname): - return next((k for k, v in TAB_PANELS.items() if any(d.get("bl_idname") == bl_idname for d in v)), "BOOKMARK") + +TAB_VISIBILITY = { + "PROJECT": True, + "OBJECT": True, + "GEOMETRY": True, + "DRAWINGS": True, + "SERVICES": True, + "STRUCTURE": True, + "SCHEDULING": True, + "FM": True, + "QUALITY": True, + "BOOKMARK": True, +} + + +def get_tab_name(bl_idname): + return next((k for k, v in reversed(list(TAB_PANELS.items())) if any(d.get("bl_idname") == bl_idname for d in v)), "BOOKMARK") def get_bl_label(bl_idname): return next((panel["bl_label"] for panels in TAB_PANELS.values() for panel in panels if isinstance(panel, dict) and panel.get("bl_idname") == bl_idname), "NO LABEL") @@ -1025,67 +1040,64 @@ class BIM_PT_tabs(Panel): aprops = tool.Blender.get_area_props(context) ifc_icon = f"{UIData.data['tabs_icon_color_mode']}_ifc" + row = self.layout.row(align=True) + row.alignment = "RIGHT" + row.operator("bim.load_json_layout", icon="IMPORT", text="") + row.operator("bim.save_json_layout", icon="EXPORT", text="") + row.operator("bim.manage_tab_visibility", icon="PREFERENCES", text="") + row = self.layout.row() row.alignment = "CENTER" - row.operator( - "bim.set_tab", - text="", - emboss=aprops.tab == "PROJECT", - icon_value=bonsai.bim.icons[ifc_icon].icon_id, - ).tab = "PROJECT" - self.draw_tab_entry(row, "FILE_3D", "OBJECT", is_ifc_project, aprops.tab == "OBJECT") - self.draw_tab_entry(row, "MATERIAL", "GEOMETRY", is_ifc_project, aprops.tab == "GEOMETRY") - self.draw_tab_entry(row, "DOCUMENTS", "DRAWINGS", is_ifc_project, aprops.tab == "DRAWINGS") - self.draw_tab_entry(row, "NETWORK_DRIVE", "SERVICES", is_ifc_project, aprops.tab == "SERVICES") - self.draw_tab_entry(row, "EDITMODE_HLT", "STRUCTURE", is_ifc_project, aprops.tab == "STRUCTURE") - self.draw_tab_entry(row, "NLA", "SCHEDULING", is_ifc_project, aprops.tab == "SCHEDULING") - self.draw_tab_entry(row, "PACKAGE", "FM", True, aprops.tab == "FM") - self.draw_tab_entry(row, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") - self.draw_tab_entry(row, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") # New BOOKMARK tab + if TAB_VISIBILITY["PROJECT"]: + row.operator( + "bim.set_tab", + text="", + emboss=aprops.tab == "PROJECT", + icon_value=bonsai.bim.icons[ifc_icon].icon_id, + ).tab = "PROJECT" + if TAB_VISIBILITY["OBJECT"]: + self.draw_tab_entry(row, "FILE_3D", "OBJECT", is_ifc_project, aprops.tab == "OBJECT") + if TAB_VISIBILITY["GEOMETRY"]: + self.draw_tab_entry(row, "MATERIAL", "GEOMETRY", is_ifc_project, aprops.tab == "GEOMETRY") + if TAB_VISIBILITY["DRAWINGS"]: + self.draw_tab_entry(row, "DOCUMENTS", "DRAWINGS", is_ifc_project, aprops.tab == "DRAWINGS") + if TAB_VISIBILITY["SERVICES"]: + self.draw_tab_entry(row, "NETWORK_DRIVE", "SERVICES", is_ifc_project, aprops.tab == "SERVICES") + if TAB_VISIBILITY["STRUCTURE"]: + self.draw_tab_entry(row, "EDITMODE_HLT", "STRUCTURE", is_ifc_project, aprops.tab == "STRUCTURE") + if TAB_VISIBILITY["SCHEDULING"]: + self.draw_tab_entry(row, "NLA", "SCHEDULING", is_ifc_project, aprops.tab == "SCHEDULING") + if TAB_VISIBILITY["FM"]: + self.draw_tab_entry(row, "PACKAGE", "FM", True, aprops.tab == "FM") + if TAB_VISIBILITY["QUALITY"]: + self.draw_tab_entry(row, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") + if TAB_VISIBILITY["BOOKMARK"]: + self.draw_tab_entry(row, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") # New BOOKMARK tab row.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") - # Yes, that's right. + # Yes, that's right. row = self.layout.row() row.alignment = "CENTER" row.scale_y = 0.2 - for tab in [ - "PROJECT", - "OBJECT", - "GEOMETRY", - "DRAWINGS", - "SERVICES", - "STRUCTURE", - "SCHEDULING", - "FM", - "QUALITY", - "BOOKMARK", - "SWITCH", - ]: + for tab in TAB_VISIBILITY.keys(): # Draw a little underscore below the active tab icon. - if aprops.tab == tab: - row.prop(aprops, "active_tab", text="", icon="BLANK1") - else: - row.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) + if TAB_VISIBILITY[tab]: + if aprops.tab == tab: + row.prop(aprops, "active_tab", text="", icon="BLANK1") + else: + row.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) + row.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) #space for Switch + + row = self.layout.row(align=True) row.prop(aprops, "tab", text="") # Add gear icons for all tabs except SWITCH_TAB - for tab in [ - "PROJECT", - "OBJECT", - "GEOMETRY", - "DRAWINGS", - "SERVICES", - "STRUCTURE", - "SCHEDULING", - "FM", - "QUALITY", - "BOOKMARK", - ]: - if aprops.tab == tab: -# row = self.layout.row(align=True) - row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab + for tab in TAB_VISIBILITY.keys(): + if TAB_VISIBILITY[tab]: + if aprops.tab == tab: + row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab @@ -1194,11 +1206,13 @@ class BIM_PT_tab_project_info(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - if not tool.Blender.is_tab(context, get_tab(cls.bl_idname)): + if not tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): return False bim_props = tool.Blender.get_bim_props() @@ -1225,11 +1239,13 @@ class BIM_PT_tab_spatial(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1246,11 +1262,13 @@ class BIM_PT_tab_project_setup(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) def draw(self, context): pass @@ -1268,11 +1286,13 @@ class BIM_PT_tab_stakeholders(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1289,11 +1309,13 @@ class BIM_PT_tab_collaboration(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) def draw(self, context): pass @@ -1311,11 +1333,13 @@ class BIM_PT_tab_grouping_and_filtering(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1340,11 +1364,13 @@ class BIM_PT_tab_geometry(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1361,11 +1387,13 @@ class BIM_PT_tab_status(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1382,11 +1410,13 @@ class BIM_PT_tab_qto(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1403,11 +1433,13 @@ class BIM_PT_tab_resources(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1424,11 +1456,13 @@ class BIM_PT_tab_cost(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1445,11 +1479,13 @@ class BIM_PT_tab_sequence(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1466,11 +1502,13 @@ class BIM_PT_tab_structural(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1487,11 +1525,13 @@ class BIM_PT_tab_services(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1508,11 +1548,13 @@ class BIM_PT_tab_lighting(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1529,11 +1571,13 @@ class BIM_PT_tab_zones(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1550,11 +1594,13 @@ class BIM_PT_tab_solar_analysis(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1571,11 +1617,13 @@ class BIM_PT_tab_quality_control(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) def draw(self, context): pass @@ -1592,11 +1640,13 @@ class BIM_PT_tab_clash_detection(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) def draw(self, context): pass @@ -1614,11 +1664,13 @@ class BIM_PT_tab_sandbox(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) def draw(self, context): row = self.layout.row() @@ -1638,6 +1690,8 @@ class BIM_PT_tab_object_metadata(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): @@ -1645,7 +1699,7 @@ class BIM_PT_tab_object_metadata(Panel): props = tool.Project.get_project_props() return ( - tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) # Hide links empty handles. @@ -1672,13 +1726,15 @@ class BIM_PT_tab_placement(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1700,12 +1756,14 @@ class BIM_PT_tab_representations(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and tool.Geometry.get_active_or_representation_obj() ) @@ -1727,11 +1785,13 @@ class BIM_PT_tab_geometric_relationships(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1750,12 +1810,14 @@ class BIM_PT_tab_parametric_geometry(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1777,12 +1839,14 @@ class BIM_PT_tab_object_materials(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") return ( - tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) @@ -1804,11 +1868,13 @@ class BIM_PT_tab_materials(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1826,11 +1892,13 @@ class BIM_PT_tab_styles(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1848,11 +1916,13 @@ class BIM_PT_tab_profiles(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1870,11 +1940,13 @@ class BIM_PT_tab_sheets(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1892,11 +1964,13 @@ class BIM_PT_tab_drawings(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1914,11 +1988,13 @@ class BIM_PT_tab_schedules(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1936,11 +2012,13 @@ class BIM_PT_tab_references(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1959,11 +2037,13 @@ class BIM_PT_tab_misc(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) and tool.Ifc.get() + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() def draw(self, context): pass @@ -1981,11 +2061,13 @@ class BIM_PT_tab_handover(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) def draw(self, context): pass @@ -2003,11 +2085,13 @@ class BIM_PT_tab_operations(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" + if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + return False if not getattr(context.scene, prop_visible, True): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab(cls.bl_idname)) + return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) def draw(self, context): pass From 9aea302d9288af60a517ca02d5bcdae0dadbcc7a Mon Sep 17 00:00:00 2001 From: falken10 Date: Sat, 26 Apr 2025 16:31:18 +0200 Subject: [PATCH 383/657] added reset option --- src/bonsai/bonsai/bim/__init__.py | 1 + src/bonsai/bonsai/bim/operator.py | 52 +++++++++++++++++++++++++++ src/bonsai/bonsai/bim/ui.py | 58 +++++++++++++++++-------------- 3 files changed, 85 insertions(+), 26 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index d054c1a236..7d0672e55d 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -137,6 +137,7 @@ classes = [ operator.BIM_OT_toggle_tab_visibility, operator.BIM_OT_load_json_layout, operator.BIM_OT_save_json_layout, + operator.BIM_OT_reset_ui_layout, prop.ObjProperty, prop.MultipleFileSelect, prop.Attribute, diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 30bfda6826..d15c019079 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -1781,6 +1781,17 @@ class BIM_OT_manage_tab_visibility(bpy.types.Operator): def draw(self, context): layout = self.layout + row = layout.row() + row = self.layout.row(align=True) + row.alignment = 'RIGHT' + + row.operator("bim.reset_ui_layout", icon="FILE_REFRESH", text="") + row.operator("bim.load_json_layout", icon="IMPORT", text="") + row.operator("bim.save_json_layout", icon="EXPORT", text="") + row = layout.row() + row = self.layout.row(align=True) + row.alignment = 'CENTER' + for tab_name, is_visible in TAB_VISIBILITY.items(): row = layout.row() row.label(text=tab_name) @@ -1871,3 +1882,44 @@ class BIM_OT_save_json_layout(bpy.types.Operator): def invoke(self, context, event): context.window_manager.fileselect_add(self) return {"RUNNING_MODAL"} + +class BIM_OT_reset_ui_layout(bpy.types.Operator): + """Reset UI Layout to Default""" + bl_idname = "bim.reset_ui_layout" + bl_label = "Reset UI Layout" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + global TAB_VISIBILITY, TAB_PANELS + + # Reset TAB_VISIBILITY to its default state + for tab_name in TAB_VISIBILITY.keys(): + TAB_VISIBILITY[tab_name] = True + + # Reset only the BOOKMARK entry in TAB_PANELS to an empty dictionary + TAB_PANELS["BOOKMARK"] = [{}] + + # Reset visibility and bookmark states in Scene properties + for tab_name, panels in TAB_PANELS.items(): + for panel in panels: + panel_name = panel.get("bl_idname", "") + if not panel_name: + continue + + # Reset visibility state + show_prop_name = f"show_{panel_name.lower()}" + if hasattr(context.scene, show_prop_name): + setattr(context.scene, show_prop_name, True) + + # Reset bookmark state + bookmark_prop_name = f"bookmark_{panel_name.lower()}" + if hasattr(context.scene, bookmark_prop_name): + setattr(context.scene, bookmark_prop_name, False) + + # Redraw the UI to reflect the changes + for area in bpy.context.window.screen.areas: + if area.type == "PROPERTIES": + area.tag_redraw() + + self.report({"INFO"}, "UI layout reset to default.") + return {"FINISHED"} \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 25eff9e109..1aa2c737b5 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -1040,53 +1040,59 @@ class BIM_PT_tabs(Panel): aprops = tool.Blender.get_area_props(context) ifc_icon = f"{UIData.data['tabs_icon_color_mode']}_ifc" - row = self.layout.row(align=True) - row.alignment = "RIGHT" - row.operator("bim.load_json_layout", icon="IMPORT", text="") - row.operator("bim.save_json_layout", icon="EXPORT", text="") - row.operator("bim.manage_tab_visibility", icon="PREFERENCES", text="") - - row = self.layout.row() - row.alignment = "CENTER" + split = self.layout.split(factor=0.9) + col_left = split.column(align=True) + row_left = col_left.row(align=True) + row_left.alignment = "CENTER" if TAB_VISIBILITY["PROJECT"]: - row.operator( + row_left.operator( "bim.set_tab", text="", emboss=aprops.tab == "PROJECT", icon_value=bonsai.bim.icons[ifc_icon].icon_id, ).tab = "PROJECT" if TAB_VISIBILITY["OBJECT"]: - self.draw_tab_entry(row, "FILE_3D", "OBJECT", is_ifc_project, aprops.tab == "OBJECT") + self.draw_tab_entry(row_left, "FILE_3D", "OBJECT", is_ifc_project, aprops.tab == "OBJECT") if TAB_VISIBILITY["GEOMETRY"]: - self.draw_tab_entry(row, "MATERIAL", "GEOMETRY", is_ifc_project, aprops.tab == "GEOMETRY") + self.draw_tab_entry(row_left, "MATERIAL", "GEOMETRY", is_ifc_project, aprops.tab == "GEOMETRY") if TAB_VISIBILITY["DRAWINGS"]: - self.draw_tab_entry(row, "DOCUMENTS", "DRAWINGS", is_ifc_project, aprops.tab == "DRAWINGS") + self.draw_tab_entry(row_left, "DOCUMENTS", "DRAWINGS", is_ifc_project, aprops.tab == "DRAWINGS") if TAB_VISIBILITY["SERVICES"]: - self.draw_tab_entry(row, "NETWORK_DRIVE", "SERVICES", is_ifc_project, aprops.tab == "SERVICES") + self.draw_tab_entry(row_left, "NETWORK_DRIVE", "SERVICES", is_ifc_project, aprops.tab == "SERVICES") if TAB_VISIBILITY["STRUCTURE"]: - self.draw_tab_entry(row, "EDITMODE_HLT", "STRUCTURE", is_ifc_project, aprops.tab == "STRUCTURE") + self.draw_tab_entry(row_left, "EDITMODE_HLT", "STRUCTURE", is_ifc_project, aprops.tab == "STRUCTURE") if TAB_VISIBILITY["SCHEDULING"]: - self.draw_tab_entry(row, "NLA", "SCHEDULING", is_ifc_project, aprops.tab == "SCHEDULING") + self.draw_tab_entry(row_left, "NLA", "SCHEDULING", is_ifc_project, aprops.tab == "SCHEDULING") if TAB_VISIBILITY["FM"]: - self.draw_tab_entry(row, "PACKAGE", "FM", True, aprops.tab == "FM") + self.draw_tab_entry(row_left, "PACKAGE", "FM", True, aprops.tab == "FM") if TAB_VISIBILITY["QUALITY"]: - self.draw_tab_entry(row, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") + self.draw_tab_entry(row_left, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") if TAB_VISIBILITY["BOOKMARK"]: - self.draw_tab_entry(row, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") # New BOOKMARK tab - row.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") + self.draw_tab_entry(row_left, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") # New BOOKMARK tab + row_left.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") - # Yes, that's right. - row = self.layout.row() - row.alignment = "CENTER" - row.scale_y = 0.2 + row_left = col_left.row(align=True) + # Yes, that's right. + row_left.alignment = "CENTER" + row_left.scale_y = 0.2 for tab in TAB_VISIBILITY.keys(): # Draw a little underscore below the active tab icon. if TAB_VISIBILITY[tab]: if aprops.tab == tab: - row.prop(aprops, "active_tab", text="", icon="BLANK1") + row_left.prop(aprops, "active_tab", text="", icon="BLANK1") else: - row.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) - row.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) #space for Switch + row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) + row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) #space for Switch + + + col_right = split.column(align=True) + row_right = col_right.row(align=True) + row_right.alignment = 'RIGHT' + + row_right.operator("bim.manage_tab_visibility", icon="PREFERENCES", text="") + + + From 7852102b33faa6dec093573cea1b897554eeb7e4 Mon Sep 17 00:00:00 2001 From: falken10 Date: Sat, 26 Apr 2025 23:48:01 +0200 Subject: [PATCH 384/657] load and save json settings --- src/bonsai/bonsai/bim/operator.py | 78 +++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 10 deletions(-) diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index d15c019079..6e2f0670ec 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -1750,7 +1750,7 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): print(f"Tab Panels for {self.tab_name}: {[item.name for item in context.scene.tab_panels]}") - return context.window_manager.invoke_props_dialog(self) + return context.window_manager.invoke_popup(self) def draw(self, context): layout = self.layout @@ -1803,7 +1803,7 @@ class BIM_OT_manage_tab_visibility(bpy.types.Operator): return {"FINISHED"} def invoke(self, context, event): - return context.window_manager.invoke_props_dialog(self) + return context.window_manager.invoke_popup(self) class BIM_OT_toggle_tab_visibility(bpy.types.Operator): """Toggle Tab Visibility""" @@ -1838,11 +1838,33 @@ class BIM_OT_load_json_layout(bpy.types.Operator): filepath: bpy.props.StringProperty(subtype="FILE_PATH") def execute(self, context): + global TAB_VISIBILITY, TAB_PANELS + try: + # Load the JSON file with open(self.filepath, "r") as file: data = json.load(file) - # Process the loaded JSON data - self.report({"INFO"}, f"Loaded JSON layout from {self.filepath}") + + # Retrieve and apply TAB_VISIBILITY + if "TAB_VISIBILITY" in data: + TAB_VISIBILITY.update(data["TAB_VISIBILITY"]) + + # Retrieve and apply TAB_PANELS + if "TAB_PANELS" in data: + TAB_PANELS.update(data["TAB_PANELS"]) + + # Retrieve and apply scene properties + if "scene_properties" in data: + for prop_name, value in data["scene_properties"].items(): + if hasattr(context.scene, prop_name): + setattr(context.scene, prop_name, value) + + # Redraw the UI to reflect the changes + for area in bpy.context.window.screen.areas: + if area.type == "PROPERTIES": + area.tag_redraw() + + self.report({"INFO"}, f"Loaded JSON layout from {self.filepath}") except Exception as e: self.report({"ERROR"}, f"Failed to load JSON layout: {e}") return {"CANCELLED"} @@ -1850,6 +1872,14 @@ class BIM_OT_load_json_layout(bpy.types.Operator): return {"FINISHED"} def invoke(self, context, event): + # Retrieve the directory of the IFC file + ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] + if not ifc_file_path: + self.report({"ERROR"}, "No IFC file is associated with the project.") + return {"CANCELLED"} + + # Set the default file path to the directory of the IFC file + self.filepath = os.path.join(os.path.dirname(ifc_file_path), ".bonsai_layout_json") context.window_manager.fileselect_add(self) return {"RUNNING_MODAL"} @@ -1863,15 +1893,35 @@ class BIM_OT_save_json_layout(bpy.types.Operator): def execute(self, context): try: - # Replace this with the data you want to save - data = { - "example_key": "example_value", - "tabs": list(TAB_VISIBILITY.keys()), - "visibility": TAB_VISIBILITY, + # Retrieve the directory of the IFC file + ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] + if not ifc_file_path: + self.report({"ERROR"}, "No IFC file is associated with the project.") + return {"CANCELLED"} + + # Collect data to save + layout_data = { + "TAB_VISIBILITY": TAB_VISIBILITY, + "TAB_PANELS": TAB_PANELS, + "scene_properties": {}, } + # Save visibility and bookmark properties from the Scene + for tab_name, panels in TAB_PANELS.items(): + for panel in panels: + panel_name = panel.get("bl_idname", "") + if not panel_name: + continue + + # Collect visibility and bookmark states + show_prop_name = f"show_{panel_name.lower()}" + bookmark_prop_name = f"bookmark_{panel_name.lower()}" + layout_data["scene_properties"][show_prop_name] = getattr(context.scene, show_prop_name, True) + layout_data["scene_properties"][bookmark_prop_name] = getattr(context.scene, bookmark_prop_name, False) + + # Write data to the JSON file with open(self.filepath, "w") as file: - json.dump(data, file, indent=4) + json.dump(layout_data, file, indent=4) self.report({"INFO"}, f"Saved JSON layout to {self.filepath}") except Exception as e: self.report({"ERROR"}, f"Failed to save JSON layout: {e}") @@ -1880,6 +1930,14 @@ class BIM_OT_save_json_layout(bpy.types.Operator): return {"FINISHED"} def invoke(self, context, event): + # Retrieve the directory of the IFC file + ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] + if not ifc_file_path: + self.report({"ERROR"}, "No IFC file is associated with the project.") + return {"CANCELLED"} + + # Set the default file path to the directory of the IFC file + self.filepath = os.path.join(os.path.dirname(ifc_file_path), ".bonsai_layout_json") context.window_manager.fileselect_add(self) return {"RUNNING_MODAL"} From 403d761e14f8583589ac2d1ebb1a871de04c651a Mon Sep 17 00:00:00 2001 From: falken10 Date: Sun, 27 Apr 2025 00:16:42 +0200 Subject: [PATCH 385/657] remove comments --- src/bonsai/bonsai/bim/operator.py | 43 ------------------------------- 1 file changed, 43 deletions(-) diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 6e2f0670ec..f497f241a4 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -1612,18 +1612,15 @@ class BIM_UL_tab_panels(bpy.types.UIList): """UIList for Tab Panels""" def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): - # Draw the panel name row = layout.row(align=True) row.label(text=item["bl_label"]) - # Add the eye icon for toggling visibility row.operator( "bim.toggle_panel_visibility", text="", icon="HIDE_OFF" if item.get("visible", True) else "HIDE_ON", ).action = f"TOGGLE_VISIBILITY_{item.name}" - # Add the star icon for bookmarking row.operator( "bim.bookmark_panel", text="", @@ -1639,16 +1636,12 @@ class BIM_OT_toggle_panel_visibility(bpy.types.Operator): action: bpy.props.StringProperty() def execute(self, context): - # Extract the panel name from the action panel_name = self.action.replace("TOGGLE_VISIBILITY_", "") - # Find the corresponding panel in the tab_panels collection for item in context.scene.tab_panels: if item.name == panel_name: - # Toggle the visibility state item["visible"] = not item.get("visible", True) - # Update the corresponding BoolProperty on the Scene prop_name = f"show_{panel_name.lower()}" if hasattr(context.scene, prop_name): setattr(context.scene, prop_name, item["visible"]) @@ -1657,7 +1650,6 @@ class BIM_OT_toggle_panel_visibility(bpy.types.Operator): print(f"Property '{prop_name}' not found on Scene.") break - # Redraw the UI to reflect the changes for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() @@ -1674,16 +1666,12 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): action: bpy.props.StringProperty() def execute(self, context): - # Extract the panel name from the action panel_name = self.action.replace("BOOKMARK_", "") - # Find the corresponding panel in the tab_panels collection for item in context.scene.tab_panels: if item.name == panel_name: - # Toggle the bookmarked state item["bookmarked"] = not item.get("bookmarked", False) - # Update the corresponding BoolProperty on the Scene prop_name = f"bookmark_{panel_name.lower()}" if hasattr(context.scene, prop_name): setattr(context.scene, prop_name, item["bookmarked"]) @@ -1691,7 +1679,6 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): else: print(f"Property '{prop_name}' not found on Scene.") - # Add or remove the panel from the TAB_PANELS["BOOKMARK"] list panel_label = item["bl_label"] if item["bookmarked"]: if not any(p.get("bl_idname") == panel_name for p in TAB_PANELS["BOOKMARK"]): @@ -1708,7 +1695,6 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): context.scene.tab_panels.remove(index) break - # Redraw the UI to reflect the changes for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() @@ -1726,10 +1712,8 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): tab_name: bpy.props.StringProperty() def invoke(self, context, event): - # Set the active tab name in the scene context.scene.active_tab_name = self.tab_name - # Populate the tab_panels collection context.scene.tab_panels.clear() for panel_data in TAB_PANELS.get(self.tab_name, []): panel_name = panel_data.get("bl_idname","") @@ -1740,11 +1724,9 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): item.name = panel_name item["bl_label"] = panel_label - # Use the registered properties to set visibility and bookmark states show_prop_name = f"show_{panel_name.lower()}" bookmark_prop_name = f"bookmark_{panel_name.lower()}" - # Retrieve the visibility and bookmark states from the Scene properties item["visible"] = getattr(context.scene, show_prop_name, True) item["bookmarked"] = getattr(context.scene, bookmark_prop_name, False) @@ -1756,17 +1738,14 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): layout = self.layout layout.label(text=f"Manage Panels for {self.tab_name} Tab") - # Add a UIList for the panels row = layout.row() row.template_list("BIM_UL_tab_panels", "", context.scene, "tab_panels", context.scene, "active_tab_panel_index") def execute(self, context): - # Save the visibility and bookmark states back to the Scene properties for item in context.scene.tab_panels: show_prop_name = f"show_{item.name.lower()}" bookmark_prop_name = f"bookmark_{item.name.lower()}" - # Update the Scene properties with the current states setattr(context.scene, show_prop_name, item["visible"]) setattr(context.scene, bookmark_prop_name, item["bookmarked"]) @@ -1814,11 +1793,9 @@ class BIM_OT_toggle_tab_visibility(bpy.types.Operator): tab_name: bpy.props.StringProperty() def execute(self, context): - # Toggle the visibility of the tab if self.tab_name in TAB_VISIBILITY: TAB_VISIBILITY[self.tab_name] = not TAB_VISIBILITY[self.tab_name] - # Redraw the UI to reflect the changes for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() @@ -1841,25 +1818,20 @@ class BIM_OT_load_json_layout(bpy.types.Operator): global TAB_VISIBILITY, TAB_PANELS try: - # Load the JSON file with open(self.filepath, "r") as file: data = json.load(file) - # Retrieve and apply TAB_VISIBILITY if "TAB_VISIBILITY" in data: TAB_VISIBILITY.update(data["TAB_VISIBILITY"]) - # Retrieve and apply TAB_PANELS if "TAB_PANELS" in data: TAB_PANELS.update(data["TAB_PANELS"]) - # Retrieve and apply scene properties if "scene_properties" in data: for prop_name, value in data["scene_properties"].items(): if hasattr(context.scene, prop_name): setattr(context.scene, prop_name, value) - # Redraw the UI to reflect the changes for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() @@ -1872,13 +1844,11 @@ class BIM_OT_load_json_layout(bpy.types.Operator): return {"FINISHED"} def invoke(self, context, event): - # Retrieve the directory of the IFC file ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] if not ifc_file_path: self.report({"ERROR"}, "No IFC file is associated with the project.") return {"CANCELLED"} - # Set the default file path to the directory of the IFC file self.filepath = os.path.join(os.path.dirname(ifc_file_path), ".bonsai_layout_json") context.window_manager.fileselect_add(self) return {"RUNNING_MODAL"} @@ -1893,33 +1863,28 @@ class BIM_OT_save_json_layout(bpy.types.Operator): def execute(self, context): try: - # Retrieve the directory of the IFC file ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] if not ifc_file_path: self.report({"ERROR"}, "No IFC file is associated with the project.") return {"CANCELLED"} - # Collect data to save layout_data = { "TAB_VISIBILITY": TAB_VISIBILITY, "TAB_PANELS": TAB_PANELS, "scene_properties": {}, } - # Save visibility and bookmark properties from the Scene for tab_name, panels in TAB_PANELS.items(): for panel in panels: panel_name = panel.get("bl_idname", "") if not panel_name: continue - # Collect visibility and bookmark states show_prop_name = f"show_{panel_name.lower()}" bookmark_prop_name = f"bookmark_{panel_name.lower()}" layout_data["scene_properties"][show_prop_name] = getattr(context.scene, show_prop_name, True) layout_data["scene_properties"][bookmark_prop_name] = getattr(context.scene, bookmark_prop_name, False) - # Write data to the JSON file with open(self.filepath, "w") as file: json.dump(layout_data, file, indent=4) self.report({"INFO"}, f"Saved JSON layout to {self.filepath}") @@ -1930,13 +1895,11 @@ class BIM_OT_save_json_layout(bpy.types.Operator): return {"FINISHED"} def invoke(self, context, event): - # Retrieve the directory of the IFC file ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] if not ifc_file_path: self.report({"ERROR"}, "No IFC file is associated with the project.") return {"CANCELLED"} - # Set the default file path to the directory of the IFC file self.filepath = os.path.join(os.path.dirname(ifc_file_path), ".bonsai_layout_json") context.window_manager.fileselect_add(self) return {"RUNNING_MODAL"} @@ -1950,31 +1913,25 @@ class BIM_OT_reset_ui_layout(bpy.types.Operator): def execute(self, context): global TAB_VISIBILITY, TAB_PANELS - # Reset TAB_VISIBILITY to its default state for tab_name in TAB_VISIBILITY.keys(): TAB_VISIBILITY[tab_name] = True - # Reset only the BOOKMARK entry in TAB_PANELS to an empty dictionary TAB_PANELS["BOOKMARK"] = [{}] - # Reset visibility and bookmark states in Scene properties for tab_name, panels in TAB_PANELS.items(): for panel in panels: panel_name = panel.get("bl_idname", "") if not panel_name: continue - # Reset visibility state show_prop_name = f"show_{panel_name.lower()}" if hasattr(context.scene, show_prop_name): setattr(context.scene, show_prop_name, True) - # Reset bookmark state bookmark_prop_name = f"bookmark_{panel_name.lower()}" if hasattr(context.scene, bookmark_prop_name): setattr(context.scene, bookmark_prop_name, False) - # Redraw the UI to reflect the changes for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() From 7a90388f549e1dcbfeeea1b6b057b5c911a3f741 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 29 Apr 2025 16:51:32 +0200 Subject: [PATCH 386/657] documentation --- .../images/bonsai_customization1.png | Bin 0 -> 1588584 bytes .../images/bonsai_customization2.png | Bin 0 -> 1723728 bytes .../reference/images/bonsai_interface.png | Bin 0 -> 946257 bytes .../reference/images/bonsai_interface2.png | Bin 0 -> 958977 bytes .../docs/reference/images/bookmarks.png | Bin 0 -> 359492 bytes .../docs/reference/images/gear_tabs.png | Bin 0 -> 140972 bytes src/bonsai/docs/reference/interface.rst | 83 ++++++++++++++++++ 7 files changed, 83 insertions(+) create mode 100644 src/bonsai/docs/reference/images/bonsai_customization1.png create mode 100644 src/bonsai/docs/reference/images/bonsai_customization2.png create mode 100644 src/bonsai/docs/reference/images/bonsai_interface.png create mode 100644 src/bonsai/docs/reference/images/bonsai_interface2.png create mode 100644 src/bonsai/docs/reference/images/bookmarks.png create mode 100644 src/bonsai/docs/reference/images/gear_tabs.png create mode 100644 src/bonsai/docs/reference/interface.rst diff --git a/src/bonsai/docs/reference/images/bonsai_customization1.png b/src/bonsai/docs/reference/images/bonsai_customization1.png new file mode 100644 index 0000000000000000000000000000000000000000..bdc1bca9a30bd251042580b65216b808dfb408ba GIT binary patch literal 1588584 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 HcyR~7?HTA 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

d82a%pnbcp; zlN}!Q6Oa3wX@ms1x93&s6lXr$q)t4y;46W2dUVnlxVK?*#$3uH0nH6A<&wUPxOVSB zCJn`}qyOF~e?wlx6ZimI9wH#cavjM^gu#H~(?S&K;S>^8 z(Wy}Fzmr-r#V0=F&I=wzNu7kVv3}j1#B|P1kFImgefa3L^xtJCjIBvkn-Y^>blVk3 zlOFdksEqZK3yvTXciEW6$>Wl8SbR%0lmyM{@~1c6k|cM@W%m@Rw{ zts|*li7&})LkTqrO=s}iNaPp8wR1l?eH!C5VMKJK?<_3K2zCW$TDZEE5VjhQzvc96{GV_iR8`{-FQ{^*>QerWuHs) z3^r;usz6H}f8Mh~Jn-dy$fptzk`Opy)g=f_9f&`ip+#h8E$gGN0G+$ z6IM?pZLj2DBv}%sZ8bXHhLTy&@n?Gc4Xtyum|=i;F9~>zNBXi&u$6sAed*ou`nlKN z3x&9psWU_Bwnq`C4}hMam!Q-r84BkPvbCWYuf=>#{+$Pfj2h4^y6)(kd9KU|(aU+z zz1Fr8r};pdefr&&>)%yLEHBuPxE^2ua-NO*gBsB9-hf+PznEx>cdOyElmLeH2!wqE zKwLcXwkR33^n*m6oSc-= z>xYAOC1wV*mxLfDUW;2Q1m8NMN&mMpzt6i&r?cEHwYQi$_787HerhV->AV~BXcS+P zB*8&J^tWpMQqA!kNSks#Ll{>CX|MAqjz z#4G_kBmwo+Dn`a!-x@=$nd-{u`|;gCs-F+{y5`fyE1CmtslN zUt&kb6!_$=Tx!H=k0`4uLu>wfB|{74hYprmED|@c$tV3cer#ArG&a^=ZPFx#?xdw*$jmpO*IX#9lYKeGE>Gi(x!E7JE zwV%`=f;C@^W(ihC7xSiWsD5TZi5ERq8rHEQsYV}WYG<0kUYh75ee+YPJyY5i*!?JH z4sObZDn1^ieM^W;c5)TxAF@h&HQE~v*<)k5SIFH`*0cYVf?~Ay0YtpynLhHsu+f#K zL#4g1oVR;P;T7KvUwK1Qq_1Vs!&-%szNQ|BWFJUVB;0v<&>|1pYG~?w;qYi=y{tTP2aF2o?rhRMs=v6zr1&{$Tm+`%lmGh5IHfq^!jlw z05L6^nR~I$XYX3rp4i(g3w5^3)-3H|ibp8M{nH-*IdE4t6}_nM7u*qG<6(mA#1AZt z!fKg&{tlrBc|&k=j_V#_epZ6*(2foxf0(Q0x*Co5vg6v4bv%ygIEhL6S3xy*ghO~J zQsYKfu%Jg_bbcb~o8lLjXC3DZ@1M=NW)&~-rA?c8(4hIvj&A(l3LRU4Ty3TRc}%1G zNRR=CK@UOnS)M!LJ07MAfjZAxizAA(5(((GWw5uX>qWAv?`K*toej6u@=jv_u8OxAx#)hDewUsTI^hf_a+Tt|T>*B4I#dLBn@v1T%$-ecM@3S(`Wa!260!%*iHwH4UzjTvsc^9b#rxs!_?k&QFD*dV$_X!sT^FE ze5CYc(v}!$`A0?H__{ep6kWKY(nj1TUDaxT_AETXnr{dXsk!mScOeHaGg|z}P%%nVb^p^|B3EjUhQs5Lyo@*jZ7-xm78E2Od7cVYpl3EWL0R$9>Rj2c&EPA@|U0S z47D>46H&UI)4RUpKb3m_)LBC8bigVuDN5=jn^%Fxe6DZ^t=|WAEY7M@NoOWqWK+<+ z_)~5FDjPOuCEt%VA0?sFGHx&)i2U$b@5x$rt`2<$>Aj;4Lh7)^>tP>~eGPW1e*O)P z4(-$@F7Ii(d78CeS>*qHqb^JQIwx?gfIxg0zt1fBO<_BHQ!+mE*a)KO#{du+0bXmm z3kQH);hlJ0()1bgJ;fdAYuSKhryBEYrr`w89<=eybrgm^%*W(6}YaWf0R ze+Tm^iF=ocn!hY(M1b0;o4`G;B%ZDe+QiL0W-kN0si4IYKAFUkWEKP@Oo02tXCVKH zRe{PHpA--+VgPSuKzw|NU-Nj#C$N9v6N5%&X5)eRlv39K7K;rquKWOK%v}}mcmUgl zW~*_Jsy&)1Vr}jD#xw?_KM6EU5LOWcSbKoF`G%H(E({+4P$|v^Pst*{Lu~L6t7Fhl z6NBGERGge1G6R^@1Ez%Ed}mt!GxBVUdB{>fB777{`j8I<4EX^aE z*WV~j2tC%Cw?{d~Gm+G&>8DieXT?GsCqse$@+g8BsEP zZDnEu1sSjXrp(FAQyH}7q@P7~I>d1;9G!LYqD7xG_}JoOyrLi4Qty?ffts)Nq=ATS z#nqQLWY&YKZAA>6f=hI4k-=kk=SvxlCm{j_@8K|!oBW0>Mdv+8wOo6$MA}h#=xYv4 z`@~`B3*O<=t z)Hp*Syyafi7&ZE^s9jT(e>WUal*`_fp-Ep^;`nu`C)_EhgxcWs*pIG89<-;Sp?MAS zm$6TUytQ8N_i~2Huv7G7tvr^(QOzF}-8?23px2vk*2w#dcPEuT5tkQVi^x4xQj1bdno73bu&Nypo?=T(oUC&zLh zh3*IyY9GV)a(dC<{YMV!xpmk@3@&qcuv(L&{06h>Fjj zG?ax)qjIF*d9`v`z1z1HU+x&4muZNUYOs5D7q%Bb*$Sy2%jHEteP5N42gf{*u1O(> zd#oVG^DdD2B_xOlEzGKqbo>UNKuz0%bIKu+c-S5qp0V5mxL5Hy@Ol4a%Sm$?x3al! z+8K7?m{p{>|AmOAG&k|Ejfv-IP1~CoGQTCpxX>sT=t?bdji;&f6LXm3y_01corPF6 z+=BaoED0qN%%D@{pf_nL9*uYuzV33vrdm;$$#s8^nWe z;X{=8bTWt~<58;h$8!;afCl&*;P62IQ1FoWf+sV+2OA$s6Sn)&xrI5}nvMa%O29jP z%45f=_@8%<#wUA{gP<56P6LhbHvzMgK-b9VEeH`^2MiTE%Lx#3Zf;|+i1a@W^=}5; zfJzYSCXfXeV-TC}&)xv=-xxf=)z#G%Z&t_0twH1E44ylvKrI!5zYc>&oQ^25KVf*} z4Dht$`(XL%XDf!07i&-gcO*?3)r+%;B%VzlJLX7Q)$bN8ZjLp zfl>ibS=!;f6nKUL;Q1vW9)h_He&dt)TTdi&wyJ~Aix;0)Cyf3|!kkWR;s2aF-W!$p zo)kdi;G24h?nDet|L-{D1zD02A@6HK6ZSPWN(+?oYe`Uv^*&<83(}|`AV-zy@2DpD z5`ZihSZ?A$2iWy-xREDXpXN7mNDF|1)?SuYR$jwkdz~X)JxvhbMzNq}Amix5_VxB7 zkVqw+rYFG1r~o7=n}|uKUy5Kv%JP6w(MmysL3R0vuw)I8^q%VF_O3*9U1Rq(naO%E z^Ya(IVSiFI{d^($m6}@&;|fnOa@5?(?M6oeBOF=xJBifw1?+DkUM8rN%|NG!ODt@i zD%Hx7nRnyDAjukwdwaf)C=HYMtUCH7#k(v95ZJDZ?Fnb}*Iw~?)KZvJt%GsKQC*fN zL#7sF#QNfN*na34=cyLO$tYHxAX1IH2(o4yJFK@8H|$=cmho0QN$C&R0~QU?Jhe)B zRe9L-Q5C^);}N67Oc^WPVd*J!R?fqC(@}a_t;(h-z6i|T=7-*SbZs(Dh~&K0EIktE zp3Vo<_@x_$rnY4qK@YWVQ8U@1jqaPvt*(1)pRIhq`{cb+<8K8=Lz1}r zvEnxrb}et1bCNaxcF%#=qVE!IC58C~yvx5be!Kj{IcL@W=dV>4!R2IuV>&WCK}t(( zDg*!qa{ABD6_{=HTeM(1E6Yd)=g6pTn;y8|5s+G zx#F)7vr|9qv)Ajh%TG{US7-D0_m}K@1br#OT$v)`K!w1UNdW9tE1;}Mr29yKpe)!_ zNb!7ZpeYi}01>YZ|5X4hr4naKgdE>+U9~6F&NA>jT(dcy`oxpfT?4gS0Nb zKnP%aE)jshH6BuG2^5g0)ed?Y`MgqZfpHleu9kETYXVCUcog7K(~%T@cLo&V0#PPL zPc7ds@NuD!K*oFo=m-_B7u6R@CY4^Ko&Rrg&@W}V$66$j1t<(FlI|O01FMTXc&Hr= z_PH7d;wyrn&(WgMR;>=L_*9p&QHP3_Z-}TojalWkq4TyOp zvzt#|cq!M`2@?t74=$VXF{$)LRU&INh9A_TXCA(SYX$0YLPrjQ)gdVqd6kJZnHbI? zn_K(|=|v|R`}1a-Pd=oN%Du{1IL*jpG~8TX-{sPXILqFXF|2L2pj|IqB1qsHYiv}3 z-Q8$-@kazpV4b-~I3pCc{sFEHJd8{p$s;}qe>z$BrduIBYY`{BjLr$tdx4#($8j~r zqEy_OawAFTT`;0QAT2NE#waL9)Ii+IIA?q+VxEUwUl!iQJ+~CtM$vROBkZ zAv3)C9xbig%Z0O#%Xq|4umnorK8%M_G7YD4AI7X<9HR_Ng{@^eSBfXTpQkO!)3Kyb z2>FhbrpPY0K4kPYDoq!E?26FC@}VC;u}iYPWg>N+%7gv5`pGdpemwLiC)}L=?hxtJ zMEl+nX72)qS}z-4tJ2Pg9bl(55A#q=uYN$UhblGY)ja(?RJ1cH2k8hCir|m55)w!= zDm9e!PoOMlS9jA|Bq}=5Zr2gRjIRh=7(>Lywqc8|>z_9;WzLGX;IuDbXAbki;fS~{ z%jXd`=MjFT zfma9(5uZtld6%C#EitAk8LH??#j$7tf<)C@F>FKhfl0&D532&TOcgz~_z7#WTVjYV zrj)9w zHh`W2UJJe`7!P=sK3TbI2GCsi5HGmX;RzKuaEy2hm}OI2exV@X%MQ>I3C8B%KyS`V zfKHqPFikuf5r4KL2tD1x^EL4VnrnBJSpl;NkIVph%Sx|BiDr8Fg;+qsO06T*ZcQ#a)|K|h?vHsL?j{p?RtO8b_ zq4Y{N$o&Jv48SZ(x)(Q-GKF0}zG@eCNxmcY zNSLS~iwDKg9LIV+gn$k8Mj#|smX%E-Un2eU(3Bw*BeR`Q=REB_eP(3HW#x19QQYw0 ztjWF3y{_o!&k++yN#kjepsg~nTUnm~pO!pd%{;$K@UoeZ)DllRN7-H_dvgh(c1Z{T z^;{H;kY07Ng;HbzgcJ$V-QBneblKk~5P1HpplJK@4DENpep~XiY*Fz$jW{pl;~PF5 z`{}H5LBv@!M z&H?wP{}3adOh|+;rp)Zl4bn?Ho=K5AiCDxpON?_2Q0{+s7N0QkR+D8|+Ihoj&iplk zn8)+je(R7t=M3LnHHuu!XK|?iOv(O4%6^zJ zRm&7nOXHJ^Q}wQBdhrQj3Y1J@A|q=ihMow{D| zwhwQ}UE)=CdMq}UjkL~EHht$<`I~2lZ8kaeKxgNX)oTCs-ynuZAW)N{6r4SIQ55-SuFDAo>n+@nZg4u7oXo-B3Ha} zk=5b?Zdz3uj_`VmXXs_5hq{7KPWUXv1^2VLtsT9iqgUQz#uqaM`}}!0sHQ)B_|u0MHA1Z` zsv^Z-oyW^yL?)~eJa1-|L}GZe`+vpEm0j|xrR$%jg-_^obTfKCVdf?E4xEp*CSbi_ zVQtfj$h_(AE$>`2SU}&sDD>yz{OF(B84&ITd)Lze$823$>C6tPqu;@JxDJrE+CYhe zUU)X1;0Xq~F?iAt6BE-hsA7o3oK0eszL>Rx67j$-|BKUlQ0p$}eF*mfz+y#r_qyZ$ zdTQSlh5DsbrwUM5`rBjpcZK?YUV!;1Jjvqm^2gwRF2n%Q7y*!~HBW@^xQ$skI5;#@ z`)w0}N!C25%N8U%h3&@A-V7PRN_K?O7FLBOgL9FRu!KNdkw} zqDFNe4HTekQG#*12dAWDNvnHr54w}tThtZ2ko;YHEQ2PEwfB3hywsvMz*TGmRNgPj%-R{^3NA~h^pXz~Ui27~_?4QOih#p7&NZy4 z<8^KE2MI^{zTy{AI~ zS_bCQkA}4gel3Kho7v4$j2^qbNb)grDEXyLmQ#Q4Y~U$l#N?AZ{kFr_fo?KAS8J~` zl`;6~6ch3^)WTE!mR_3(8g)xBn>?ES!2dvb+sO#H+$fyw$6+OT3y*lA?XSPu5~bex z6UwcM{x#>One_h53AeX(-5jBi!x{R4R`g=|ATdF>fO31wD7xzTr5^igj~*CxW@%K@ z;MJk`e?=~G>qRo|Gk3{|Hq_3g+K!HNrQP8g{XCk-oAzOiTEkiJPGYGV%CWH{;3VJR z)B$OOjxE!h?$_2!*bwAoVByNZc(SZE7-%@`s`-k3l!UyDMJi#F;PQ;*4`f_^8}Y<@ zQ0(){%pvRjHBf5%4nN*69JCHS?fu+ka{tD!JK8p%x%^FWyAux*M;~7ZGWM4_N^02L z?Xv1B8OTQD`gAP*dg--Bs0C3YiBbVY3Zx!;^nGpbGoSf{9&JCaoi*OQi-4ExRJXr9 z$ye!nADQU?r2jS4C@pazyp8sDmFRiB8FN}3)6G)xZvCW?SCz zSJ{nThiWlDvmi;!#ikuDHaejkUOVinK59|8oLf&XZNJmE4IMPr3>BO~=Xi$BRqo#` zcD|SHSZmic`+2@lztQK}<|Dptd+AJ-Y~2E!N=nZn*k~RVlrAk-CeuWuo5;?|?Mn6J zIem`5Y+n*}<01BINn?kDgD&;OhY3@mch#xt4tMmFhYHvUvhu60eU*4ETgf`Nw`&$f z>9ISc8xu2nQAEglWSSOM^Gxbc`*gUdDmw(Q|M0*>z`iSjAAgSRTLxtioOs~-d`Aq6 zu4yzNrvD=VPB@ikoAJ%#D`)Y#8UTCJ08BL(p22a)AGd?Qssdo2nWw5kfG(rY9BpPZ zo&k@qrdnBDl>-|QUYWZ%DZls*V8ZVJ%xscqEo;53feLV4z&@p{qC(mP^s~8ETAfyW z3D)_!AD*F(0i97h@tHW{#n-p++Yjghr~t<$Q45W2pzE{X>A8{ofRKtue3MLJ!1gHs zIyikcoh*v|2>#tn@F%95@*aI~0%q=;qR($=OC1>CTT$@ZA@`{J=ENJ*7hf)S+;O3x z5?^5@kOf}~0luq+y9w-3gajFWCyqQ8O+Ni+&;~cqiFGPsu;fVcRsF<%%?5wL4W5*1%} zTxTYx>)he3M#eR#lhk@pDojvb#48gV9-n zEuU7`>1u(YYuG~$@ykukijfhevs85ypRDSJ4Z_YPIPtgn5T68j z%><7Jdcsz2hAv_1=`vH>BUYo7k9PdZ{!XOHw5r0aZ6kM-|XeFH}2(4{LX1?xtz{;WC9oQIgwk zCf+Nt(|?h#?+e5{k2J%DEZ^R_^+jJZ!d0NOy-x8%Ok!^aJye4Q-l6ikpeZxzUYbw5 zGL~6Iy7+VItl~{9e{hDPy3?qL#dcIvEk_%1FQYHSctWf)QyFEEZy;{3oRX_&ILmviqXxK9$5;5J3b(J)}=<`Z*dv;NPe)1 zoyAq(-LCHDK*uXLW7=*&Fjo0}HqH~1?$u(!!&#O^u?TGu!h+3)&Gy5Oi5HL4gLjY{ zP5A~M_1jicTi-3Z``6Xax5=_4yodvNn}>&o?^hzp_&u^kitIC$B0IrSq?a+Sh1|lW zfl+3?%v5DzJ+c0)V;{KoY#DL)L>BH4wHH|3+#YMGr<(aDvUb zF#-ZC#X$7I57r!S%5q=&wsKyefYASf)~UNuZ+#a|O`h_B5+6N#BfFmmU+Q)a=p5$7 zo#}tT8shkoL2l~u$V2Y&V&3%1%uy6oq+bcodV#x;ZTkK{fGm9*8dd|}a2r=vDao>~5Mj@h2@;^#l?Eu3v9 zs$>gt(x|*spENgS5$nAj5^@O2RbAF5TM;2MRRdx(RyntXypifnv9+V|AK9Xnj zceQ&O3il|{);?~SV=SQFpB}mWe&!E8$$KWk{5Ezm77;0eV0G)=de!$#%;)QxF1k>1 z%94;XIQLRLQC~QW!~kbdkKPD)2DM7I^-+H>B0tGcm)>8Yi4u@B~o9lji9qN zC$stBv&nRdBG`yt+w|*igOzkgGJJ`93Ts|_A1TcfUXMR%&P0EOn1aCgu>5?Hsx{v= zoe>%o(c-AVPxS4{gN}rIPj7JCWL*&EIJ>a2LK}^MZb7%e6o^Io1_3g_=w1Ne0bAdt zb+Z|e6$(iB4=2do6BB0LOxW3a{$pCeanj+6waX8|%t>0$DWLIaYtkf8N?ib?(^$pg z%1RU9_d>u8^<^FZi;DeS2Kl|W+-CoG{o^{Ck)n%H<3oT-99pCru*RV2g>-Z4KtbWZ zBi1B6td91|K=Al%Sbn{Zp0?7ufD&VK07-z3Y^LE1=m5$EQBFsF3do9NIru$0klF?+6M$oywyV;Zw?y=Y>T`Lq8utI7u0Pke1+&h2 z2aMj-9D`Zj-vjB^KkG7&Hg3hgUais5`I#gSqoFw{Ox%?eQargGwFcZjiok6IVi2G7 z@`jx5H;2lJGWE`mRG&$8&XYr&&?OlE|gDs2Dw9q8~iI#p3n zYC(5ps+XT3uN949P%z!%j$4o6f0IM-x4Rm|8_dge=qOt)w}2h~$Fd+kKf_03&U>Nv z?htO{Q9T!XXWH${^sQ%PUBS3;n%)4yt;!Vi0A?4VV1Fl@k0E{eOWFLDVuGeSlP^)H zFO4K7?qM6(WkE<_6u1y$$OofJ@}At8@@=|(8=<(XTMe;aYKLS z1*yV$;zt{YG9J)xa^)ZyIDdQIA@}aP9fEmcv;R*$J}6(J`6@l!k#n^3oykV8PS#rQ z!IjaR?SPl69^Uf0W~xMK77c7q0nV}V`MaKE<#D74A8U_CLzM;}md{15W)uq#*j_g{v?2bMUV9ZhA z(0PWk9f3ukq7i+u@nEV0QViyeBwBlU-PiU8u7K?+a0j>)U6yixyOGusT~? z3mj2k#~0GI89~E+J*~W#CQ{o+Lumoqw->{mPWpj9JZBm@g5j_UG-W7CCH~(5?aWFs zbKR7dQYSXi@G6y(S`WZW$o=)}sWhDCztdB5vl2M7{)>j7E*!hPJfJr$2jahPM5{@I zf(=SH){lc^egUNGpP^lkX|2n2-z;0%I4~r&IJ6w?9mp;6M`DQ}Klvwh;N9A|&l;_x z@!!}=kh@C@HPzGOq=DF||M4MhO1o*4^{fF9if?IES5BaoFMW)b1FkMoeu@@50iFX= z3zacuSP@_^c}nXU&5U@P%Gz2vfd&zyDr@f z6Y6{0jOE2j^6P3wtvpCkbg?Oyoy&U}Mf#@8lO;OvKa66tGQbuQns~ zCEm5vNXVGW2v->iBtP{j)ZEHzHsg~i=4o6tw6*q)ai5nB)5DOXSlc~#Wo*pst|Mw8 zBQM%q)L)-06@_ymD>mmIYVfP-v0WZdYI&01If(2PFK`>jkWy}7n@Tx4bH;87kM%C} zdcIiDoC%wKk|R=tj^2cA>J4kP1&?O%$)))v4%W@i)Tk}0NY+z&5ANV6Wc?)Y54-l0WEr?sZLEAV^&z_BDFpq)vS#SlkBV{q>#~u9Vudn)%}~D)Hn3#N#14j2 z?YU43Eecr|=|h`VlDBxx@|2*AwOg8-sn07n)(rCrOTwz2J^m|PYw`XaPKt_(fh@95 zpHENZ+!OqbYW}c{8{hnR;WE3HNY4f#NHJ0n&zfu4c2e-zpd`K3vO6R!B1)5!kN4t}uloV>CsfZI8DN-(WseNnk|J4+ZhOsO z!y;nBPe+cMOPmaB_;xL}1^>imQQ5`wL}e+YtM=ZESS3pgs+Eni!Ba5&Rm4@H%V(iq z3cHdI%_W{fJ}gQENioTWII;SQV#U7CZ`n@CB0eXxZ51Zu7eRC@H|@(`+cTyCzViJlmToh6jSmaPzT>*R*OJ&$wBUb`lnbR*BZFQ+W10KXOkEmv z$W5pJj(WRnG`Itk77cYgJ$FC#+JalMo?gt56=j;FUxgwtP2jZT1QQ>|6}Okx9B7XigoU04S+?!tYOCU}6BK0U#Q~q%5d+vP&F1`$EIk zXTl&sbO>W#mb=G6!=sjnzK5ijeQlZ5%+B8Uc`(5r=h8{wEZDsgMCEMJgd!*s*sUS(^-7M0T}-|hX!@;4|FZ? zS)J7=>6{}4s%(_N=?>1)(u^peHasTZm&4rpEz zZ}%2oNh`8}vz2UC%mYy1Fbowo)XjT9apBPx#*(hKnZdmZy9k!k1Y_LuR9xr05Vya2 zy7p`-Tc%FfV?2UQwCaeZ7*befX7Ql~yRe9A=AMn!WM#njbyA4ozj zN>(D~p*r^nIN~qZeCmTNGXu7+Q|^!O(VyC5?xdrw%zwFd+TWCb0#;gKH`uV6=i1{a z)oZ@2fe%jXqif84Xgy)C2TX!NzvBR{G@Di#PTT1Ac7e|R>~ApMTuI@1xlD$rd_W6R!4(%H$I7SV|=DTi?d z0_3aVkN+?8HqPz5^BS`hv|K_em;%2}C=&NQL4nDa<4<#}%9J`vZ| z2a0}nxO?~RdT-K^_#H=$8gS4k7C~j7aBx+P6AwL1oWgx^Pth^_aQ{z$>QCX!6x&_l zFT8TZkc##ERv3R|dRRG6aMN{%miA(kZ680;c8!TaT`62^TAeF~ zt|vn=^j?*o&q01utu@<#;X-m4Q*_91MzPoJt#m?^(^jAPm*!yNx^g6z{9&IFhPjf| z1Z%11BznJ^x~)oemf_(yt}p6L-@^zKWeffmKg#vy&CqEL&wX@gn21LQ zH*?$3zv_AqY2z*T;z>)gD30ORp-*yRjk&Nllkcznn#7^3zZz zL*M#s9LY(7d!Fj`+P1jYa%WGt77yI(lKfFM?%7TYIejyc!o!Ptv5)Z%cJ6x;8kzBs zuge_`$)xkGiF~zTeG=ODFdqG*97S&7y@hTX9X(TwYM#jI>^V^9W~Y1a zw?@Cim~B8Vvnq&8dOB(-@6_>CI+ww~dDxIUZ;oJob3S_DBHLxgg6DTELl(8USsjo+ zi}!fDGo;JI3?70MA>z?H`gyguwT!N>YpU`GY5#5jH!|BRDkrO}S8+&@pBKboqL!IhoG{2YU(nAet zIUJlrwL^I?d)vp8XQlU$@5Dw@<=ST3ZsIOp=jD#EoRX^>vE6Vs5H~ci>`}<(b1ffz z!|v~uUur9-&L4v3$DN7I(|5n2nU^uSY8%nY&Qw-_lx*>u^r{bKjnC)D0S-~iO^&$6 z#=@KgiIJYzGOS7eFxP!(bLr^=eSI`~fA{8^W0^zF^`EZAc; zGP^AZDslCL kq$_-O$tH|%3J`^|0KaJS=Qepdmd+YT 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%0A^UEeS>9_tZY3|goQ@nk-PzuYv3&=%kTdE+;?? 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

AR^@ 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 z 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

6pY4&Epr_E-Hmri( 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 z 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
XaN(Fz>S!|I$QKZaui;1-L4&g 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úi@KKc); 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 z%0D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≷Ixf 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 z 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%0D!xE&K6G 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%0DZ2f`O>o6n7s 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

(rp2dQle84`(wi`MRi}UAa6iI663zs(zv~| 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

ZJK{63{ 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

}# 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 z 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Ȥ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¬@ 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 ZIrq|C?!JcPUM}!wWN2cLcholIe*iln;9CFy literal 0 HcmV?d00001 diff --git a/src/bonsai/docs/reference/images/bonsai_interface.png b/src/bonsai/docs/reference/images/bonsai_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..def9977f4bd190d29f533f2847b4ac4e1e5c64a3 GIT binary patch literal 946257 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

kq1oMo#v7CfhWZB)7KV(a4$ZCDU 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°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 z T2znEkRE(m*c1TwKwpX+KNOz6v`&t& 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%0Aih-^L$lrMUtJE(TsGTd3 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ȸ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
Bxvd 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

~M<8p;`2#+=>Aj3|v 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 q`pm01?GZ^LAy)m8W7Y#=SNwE3~d z+OqH$ea*^+_MV23ZN(6aQhw#VI+Z4$z{nPfSqO^P;iOmz-i`wuc3zw{$#wwNqCX@l zUI?RuVCIOzs+>_l>((!-P%Y^&cS>e$n9GP#aqTZ<_MiH7#g=n<9#K!r?g*bL*5*W3 zCA5+-^=$pxg2?!e5SC;|AI{*DujV6+49>ms>wAfsimorqES(?9L}Dk(H{RX%WzrH0r}k5wBtxlcRB+mIP;dxx4nc>qEU zM7}GY*dP33-%$~M;}nqpxLH3+wX@dl!S0dz$(&0}YzicfC4e|`M%CO+5Qsw;O$+)M zM0)5XBDCZbp>?N0?Y-&jov;xi!{Xes?3%@*| zn!S6&ED&&?@NkttN={y^&vw=f4UC&FS3AGyeYhcCyhCL4WMyV+gyKd3>uuNv8n@7|jq#Q3&}NQ<|dazn{fo2Grm-Cnb)j5*ud}KgC1> zhp_%f4|pxEVkm^%-wnd^3Mn5D?|-qKv?AbxgK(9?mF67|Ha3t^Exq%5@m;t%S#H3O zM+|t=XP|xzURlz0!S^NlHtx3cDl$3+J_Qx=`zgN38heNF@dI$KEg3ZRxN`93h%Jf) z0UFI=G9IF7C~tcWYgi(BRdccC-=O%)$QpCg%hwB1Jo!7y53?tL5^CWmoA;0{_)K%f z_B8i8?IJC)M=0*rffqqOfl6hl>8{I$mkbB|oWT!ld3m{o8kwx@^@rhwPZMbZeaPMGER6c=vu*J!ljl;VM8vQypjqjKwY4wnajo6I`H;X&?s|+c|0RB>K z_@N;e?y0o0Iv&?JVLJoHIZeakS8q4XbQW-13{_lIJw+~s!O%@%GYD5~D-L_-PlLV^ z3+7?2N-gKz#}(V8qi%BpEoSQs-&SzQr=;1INYwZM;azLDw#_IEAD$QK=jzBz4}@V` ztY+6wBrdchUXy(4IvKzM-#1L2>V23?AlwM(vO9L0Eewbswj^%Rk0I~3>}gYIC#dB9!f{A3XC9GHW|0vY!C zFlUh4>Uo&?n|5Q>`0_Oro!IOh`qCeNe$68yD+jr*3Legb&-(F#5__+6dOvGc{&|}Q z3Y6gv=tY535E5uw#=1T1?3mqRb)Y`dD+Rd!)4%Fz=cui=+yos}0u##ff}VtjN^z~k5zIKcNbRFg8UqALr6%7addO3W4u>G|~ zLOXiDcYn4XhK-eHT-|-Q9$cwzW!H=?NrDx&Z~1*>*}wb^vmNRqw`U=#tMFn`my z(U;YeNzT6DP}+9ovUrgeLB_zH><+~m#2@4$JS~EE^!fG3Vy66+rfSMEZ6k4huC|+7 zb*9!GyKm}l;}~E5`$y4P&p3oTey3+|twV*eHs#PANUZbyelsJo!W!%9`fhJU5d!LR zwSw<|*UU-IjCwDO$b~a1aA|*c=vwH~PdgGnVg2S08ieIm7c=(*AguKpJV(Ab7;bUe z7L>zCy43(J37{V%<{7}o2HvFUAP_bhG!qXzAjbJm%l@Ml3h4XX9IVou0yMtX^F>?U zY>_lz`wc|fU;g~zh4%bok;VWyMF{JQ_O*ZFue-lv8eWwH6EU(WhEyg9>1vA)eJ!v@ z$pG;}0!$=cs;+NWFY~}{$PxHpWqLny`Tis{;pAT<6#MW~CuuXOHn~h%Ch1-~AJ)#l zU&c$hH5zH4S73~f?zB=r|IL@Pzrgm6Eh-U<_D5usAPf6_{hu~A+Ue*Igvq?+F9E_? z#~;5_E3D!jt=PlzeA1f|$)TAH1QF1ng4F3pKcoHMihx4^4sW_ueelD*38j*vLZvn! zM<-5MkHuTnF|wuqRX8JNtJNWez_Okq&+vO6pc2Z#FV!Z(LQ7W+SKDcBZ_v<=SN_HVo(CG0O)I-~Z_d^S_RA0Nb=f0HjeYUEMwUhNR< za~;MN{r)13NOzG1?i3Ur2MAh+tHf(;#^YD_>F8Ij+gD>L2c7Nc%o&Q>th;%Et|{5- z*@XT>avKtbU78F}Xx-=OLa7vg<4eC_3vm!iL~|LZe?mvL`}i5#Ky#*CX@~|-(y1R6 zG~-4YI8C#$x`~m>rA8|5{?vAs-7QW%QS5eE@+dB|)2v?b^Nyc7)qY=REzmc06y5n6 zBgu1aNr`u+T1a&q^XnyyQbVBCQAOnUdl~2`*(f*SdYmx3e}%|V-u~lLeLeyvL~W2y z9tIYkox69t?pZ+M8!t~Cm^rsPA5u4dPt|rT`?L zq?!%aPu|a*Uu6|slOoLbfIGw&>&AoC)&w{ViUODJp}tO{-un7k=0BA;06M@$sKt@N zOdPYCKgt!0Gg__90$y9hTMiOk@FZ?eJ^=?>aIYewnTIWsMydQ`LH1*ad;6LJdjby9nR09)MmBfmac|174@<7{@IYOd&>_U{&t(v^$rC#-W91C2< zgL2dlRg^B}QMhTmD1X6db>5{t$v>ln{9N`6AA#GOY>G5~kGUT>1ZPzkwoQUZg?6>x z-^vK!u6Z!%6 zk1x$7Bovi#j(;P)X7^OYk`7yn8?IUL_=jG!vi9#u5r$f)?|)B?#f+cV8txf28*5NB z>auCoE`IUjXs=1w|FhAr+j;Ai@~7=~-3<)(LJNmM6f5gcqY}@cK)cnPxpq7;;aU@V z$d>X9^rwGp9)~X+jR_{h!AYDbNg{_4TvY8GEL9xhw7e?5>Ad?-K#XVbV9j_gyhzh- zKIVQ;sx&ncn?%>J_t_oLqZ7|;Y;K}pg;I^HzrYUJ)z@!%ElT`!N?y<_l#6 zy>ra2s#!rR9ztHhA)2#aS}R45tv&4qz*w}OcHUbDmwqOl-f@T_zfiMsjh|t>8>;i@ z0~yqu8YP#=DlI92gUB)@`1JdGxh;qwYihgomZOfc=Mi^6_iJl!*Pdvu#(* zhwQwCRIb|PC{;xT;B9Vby3``}jJDC*hOf|u-Fx-*upkC9Q2ww)=xACqR=j6^WPtCv zq{w7dk>2>p{J_^#=Or{Uv61#iSd(DD`3yaQyGB@Q5=yW$Oq6p$QDDl^8|hDA0aG;K zuU~%$l19*3g0T?MFfm076C3&{f?HLciHo0Kjz4F8p}r&)1Z07(r_rO)mlV%Z&SGll z>Zw84>0+e7myS9_>rI8tJr1w$O?+}}ja(VM9 zei7?r`}*~FV-8wN1zW+kpcYoVlG0Q-hlcd#S{X*U!R@{vu6zQeWk3MM2gBy^xor!1 z%Sfx(tVS-U!>W|vMoDKs)QQpSKeU8tDyh)gviju&7Y{Ow!;*@sZb` zC8yD}rlP&lGddQDQdC`FvpBfl#Q)Q~jYZBLTd}F^Nr{LT3NN-L)Aj~O>jWm>sM6$9VrT<9t=Z>sb^zT zxhj8t?YAiK^c_1Do!L1rcn~ePS=%QhsLg)bH^B)|hKK6{;H$-}B04kg9E<=oW&SwJ zBWf_4@@v(di->W%d$_e{$e0*1s~4g<2|xCEiAd^7ZT_*vvD7ny-JH6 zlH=w2ivLtUc7ZDrE7`9;UdI)Kg+`;UC*xQ)tWj^Z8d*W=w{_~5s%1NsU1}X?zNzpz zmV!*;R1%f;M^%|DG|ADIha+7X;lYQdN;yysop06grQ1SZe7#;lg9;6qT7Qd{4t@A- zT4~5${T_n`M1$_`2OaGrk|+?0d@gK?(dDD<}Dl(TweGMIls_1_E=In7)g-%|q`)$E8L&(u@;bck7F}&A()wG)>O+w!1 zGw%sbK1JF#o@&Zh$VL;EfIP_0&i=(!t4gJWpedk}kADg2b!ax+sC}*T*$ARbN=-d_ zd1pci2#(+qOH&O0^~%4KyHSD(MF!SU240gZ;CvXpFmvr(;5!b-H~mFt1TR3 zjnVdBNKA>^$V{L3Rr!WMD(tqT!kN0hqC&l4sXnB^u!)p>Eb+pat(rWo#qb11*|h2M zwuJUtRQY2s?@+Z~iKFw%ENAJ#Y}?_io!!biMp*xe3;CnA9>cxu1)W5E^DWP@LrzdD z7yqX2{vHOybhjq08*@AM^Koh=LAzz~`RiYjl2k6_G-))SZ~YS&RVR#hY$k2}KaFt( zIy<*HrsTr#Gh5n^n6l7ZzSBIRtsx6T3z@_s8%CPtN}Qc`A&cL^HkSN`l{&Zp*=t5r zQ;7B{a2mT}FK=%8aWco2s6{K8R_r`YT9wH!0&^mkELHfr#14#Vp?c?hRcAYjON$5k zV7jK&J%o8>>uzm8hMXZmJ=b>t>_nh5s@p|i!|s%@{JZ%usQ1?oeMmg)cVG@B4j-aq z{QrN+6jyB_{SJTPBH_7Y&e1IEC1bg1?$H|5E z-otyTP8|7*2pRfnb5By=azz)hJ9~u|E@P_E^Uh^|S&0{nuUxQ?daI0yq+?a)ZcNeg z-bvmg{Ih#3+{cRKTd+Yy2M0!Qh|;{thW+FZKFib)8eDD zE%90mLx21^lMpT)X@c?M#x_G6kEhYbQ6g2pS&qx$)ziuse8?>{__w7Dy4^3V&gZ~z zVgALE@5dkv`%#{$CG*OF_U}i}zfaPI=qr}w^#j_1K+Qhi%eQ2E@gNr$-g{mk=w+|O z+6M~9pg#lE9ObbHi>tn9aOfDyj(;tYGl0;cx`MZx{Ze>VGjw5n?rdzM((!KwvM@R= z2#M)FF5nlxBj8&^lWHYQ&MZ@a=)%u``X{h-I5B1v%i5Wf9F4cvW>kod*Zru-?!2zZ z5&RRRa)2PCsX&Fa-_ghZ*$8HW&)#?+MR$#?)d?T};4jZ3UN8BIX zHZF&I|DkCLm{qUlxv=9YMMh3{Mjr_V-;0jMQx2YsIk+#HaTUu7wuoijxn-isE@ zlv~iP9-N?i>J*kIKdLHfUWU|CSJ)c@ZjJd`Az1fhSL;!ZD)6sYt^eklQJKxXavXJP zcxqAj;fKNOrWH+_lHnSwQ@m1)hrlW_tn-ho5+?70Pho+oZ+FqGtvW{rKu9RW14zK% z*AMkG5ef#>m!|upy{=*=+5*JthKGlz(|Moh6Akc~dBbcVSodKItLu(`uPHReP1uji zzMYuWg+r@S`%8Q*@M|{ZkI4{Hs5{0OUa-=I77ViVhOjG6&ZuZXcH3_E$aCu~**vu9 zU9e6I00h#lT54+3tZzMZNiy|ssik?41~2p{=i%6}cpTJ*BiJtCn7>4BsO5(HkLdyI zyb(L`*_2Yuon{~Yh#f{m&FtD)$Kg5u{+VWyhn}vaG##qL&?uMpaTw(%nhQUanadS- zyxgoDOLKGciJ66-QWFbOx>q0DQyN<-N6+A_82$NA?;f$48PW*wG+6F?srcZ3>horI zgne|2d~Wg4?@b#6zE#RU`?xk-)EAcRpQlO*%?{~P+iEl`Jp*Fb1z{J-s;F^x<{rum z!hEf4I!E?)?)q!&-R`d(0W{}+z*07jS@#_F%Q+W&ezFepKAUvW%>jT1T#c9Bo(NEN zw&X)7I^NlALQpEO!F3&!1K?2Z_4RvPYVq8rjM$w_kT(XnwCH$LCF)GBz#pmvpf>rB zTYIMh z*Mo!TC1>=97}+&;_M;4b^pdgn1nve0waGg4uBE9_Z#*)SG&L)=K_n%BqZ)w4N5D+> zG4&K=Anm-I5Xrk(xXlov$@J_buplZb%B1y-g*XOe`8F)GEhn*kk40(ZK1vO*k0I_D zzz;K(q_a&-J7dqlrKzKgh{_U@8)0Cor7H8hKz765wBga_F&Jo*>nz6|NL;Xpa)-np zFDWM^SUBFeI+CCUn}|8!0az;}F}vjaXymiewYOsQUP*WmiUo!R530;JTR%Aw*aOEr z9^qJ)lF~PTMzKY)<87RJ-+k~4mZyT<5$NI#`)xr7Lg`?241e7@oUT|a9Cmj0qQ z2aQHSL8sfpA=)G?5fT#(g#Bg`h9^}dkEK4qJFa>*yh8LEt5;0z1FH#L6-(L?Z$m@C z24i#)FuWnbmwq__fLQbnYl6h*+#3Wq?ife$PT#3Sa-VVUBPR4&+a2GW@a9l^uXXlR zS2y6|xN#{IbbA$_%ey03W(sA*{h$b%QYm@%T(DN(<`v}OX@s}*fJt4m61DH(mhGql z#e?7|w*5P;V+I~hIDT6SF|^k$s=oe|-N`rHeAAao>jw7~cdH~#@A%4@PR;Cxv;nKV zDcfpSXgGYsnoLTP4ueV8{+(#Xsqtf2OHTa4_bxE;5dE@)SEB{rz1%$t8pE8!uXavJ z7CLk%G5iVRU`|jPk0_rl$v^Co5m}=(HevR#s(kZo6m_m|{D*h9g!&B?(rCTUZM(kW z-sQ2Sg?qImXK#mMz50QpB>&_ZUpW3p2PpfiVE6PnMbgp6`alr^A&$J>{-s-{5$n+t z8hORBg$$_MX3t&b-=jPVzI7>#kUG?OJDJB_b{Ta9gsCV4f^g2I+8)U&boe+*tQJ%%39T7J*b;=MRedm9qYT&2iw3 zW%=K<`-$NHcI4=YCAwPhzj+gg;3`B!hmjX6X@Kh`#>bGC7{ESkZf>EW#-!C#$3kw@ zEpjK*5Yl2pi2BJKIPxS{*wd$K7b!02E&~<>#6_fJ850`$L#Vj_y`3wx>3yeX8wVXn zWTM0N;^l`aixIivq~Bgkn3{?p7AHxw!DT}n=x=g)eS}-B(IpqCN+{7KnduSDSN)ft zKbcZeQabas>h((ifH<-HB`)r*a)_AA+qjiX-OHodGAsALw+^|&?=Oij6RfcZ-v(GD zC#^9J4~Q?;CNw5XOklhgwV9WxrHp)d+s&t6X;`{wyV=QMNk=L=>Z~NOK%^qGimuR@ zY>|l;oEL0g2+&1by!=msUMZ=Q@>qBOWS{IL4ba%}`e2J(-7k<4=%q(%+vB{$uK%^& zzWPwxtyRQCi%lo$vdzz}E~VH$?B*J1rhn`xN;@!Ci-m8KpoW4U!L79KqRzUI z)$2e!(HvQvIlD{|XCJ!2`hKyNC`&|WaB0m}eqRM^K^lit>9&3y3bDSdfE$gdyhn25 z;j}T*-ysgSPjY1r%fyi`1fu!0%U`HzIq>IG$gK1wO>7|Yj$aUV$gc;<#lEBkfJ}V! ziLTpk?`bdi!{a}#SPG044li)7N2~=TiS&r(_h3H%?v8c-uLLk1P9BE9gAgajL-M1n zx6|(+C+DZLbJ#AE*ME#jWwhfjD(O_%x%RBMq8Y~RSb^+~Hs( z^Jf}0+Dv*5zO^YBNG=N<%AL1Pa#;8O;)!n$Px|a4wFDH#0=&7g+5fI$GRM3g{{;S1 z&T2i{JCotB6Y)m~c~aJ!SIq)Ej?E1i(if)dX;HbC9b2q&wsy${gjX&{++z9c%!T0o zsfEOvtlv)L#pG-}WX*@#kBtj;t2|CZP*U|+Gt>KjI>u+w&6Ak0S(81h&d|$Rk`VuC zzLqqkkt_J7>OmLQx^$ozd~TzGPf$DZ#gJ}Hs>(RZ-C*^=FrzGB0RpgQf=?GY)){=h ztg!0sl{Ne3rxCBg{x~OR6{pqxRacrvp1Zy_v>MK<0;?jtFU2G(wuX)GEiOz!(p@g@ zsKX3CA`n@}8AT0y-G6nqgnPhqb@s_LJn#>vek4O?7|K{ZV_TEk`L)ESO z{;x45{j;5H`*2p-a($)-eW|uZDS2)5dSN?JBVi%#L^g!>I)C=9CRvxt%58;boAl6o zf(GeaLH&X6?Np&JfKyo1?5qZ8CSvWfO^9H?=(4^bdIOwwW_mEh0CL9AkSyWOdalR& z_gPHQnVFd{c(OyXFl-hFNWF~2yM8`Fu3h&{sXTe*v+ni#?@rfst2xO#524!wlT=2V z%39N6&mGYqrzC=zpKprsCo&ZQ&tSH%-f2YcRqWOGboA6apKGPg?V{10`H#JE*v2Or z7WHQCCsLyot0iy6!JSU0Nf?@nEmJ(}nb4@GJCH9PK-eocOjjd)BY(B z;ep6n&z7Lf(71acS1i@8ePk=Dsi-{j1~uS9Gp~?pbIeO4+Ab@0dXFTB+UgyP5}z3j zhUIv*l{=4+`@F%Y>&N<>0+B_T2SbZ(_THn`HsiXgX;V(cJ}c548kmI*r-Js!P-A#@ zxa8oExrl#kXrUy&tlBZ_gt!WbuvIzeL>r6~|ByChVb5!I`rva01O9(~9rlxpPeYCMY5UcRr_8KvPLameiT8LJhXVZ}h@)o8O%PbJ^jLbM4sPP*qh`laq+u z^EI_>wBYeyZX~bW9=Vzfu|)~bldL^m?UMInd+N5p-9~}R>#VDX$74>S$&v;(RTQGW z_%JWf;fr-9RIr#WAnOYuaj>(~I|Y`Pm3ar|gRS3Z^|zqybmWK;GJiXTv1ZrGsY)^s zv2gb4&2oB$!uq8gV;Ko)K}r2FQ+OIVo9X)y<=jyLGJWeCyz?ReQ$V#K0$e!#f38UK zEw`4u3tk7?1>;wu1qZ&yy7zWPeD0i*w;YBCFceL$hiBMQ#j}6X-Pt$S7KlD_(Z-^+ zbxwRn8oOUU7oFrcytNJt4dfB3IS@C7t)2mTV*iR^PcirFFkj285=lEx{?@IFIs#2j z0YTS|Am!Dep5;XW0Uqh%xy|t`hj$~QY@@USDXZ?cyr8esGxJLc#bf(ZD+$My9BF74 z+1ML^a@)< z2r6P)(J|WaR<~FHKd`wu!ez&FKuvmyyr&vf6bT&jjbT>y_R&d|Y_STtXeg_#_<{B` z$yq0EC?GImK$SbJ?}A79SVYpx@#FY!uXJd4v{|>@BAQkt?htM=Q#xDiUOjt^@rVsC z+|uW_aHoy&{T$7e!#RX9*kTh~w7$Tizkv9rbnlPh&(^Fh6D1XaS*%(AxyIHvPxm(_ z8x1Rv@fA=;Ck_;uUX%_sI1MljGRWk$kwvG%#E{94IWeHowIGpO0kHhTse z4eG1-n--W8l~NZ=6kSxkOnn)l9wrUH;G-urgdyr=!YoYkT~Y~_j1_CNb;ITaOUaz7 zmW;X1pM^I)L#JR>Ebh+4H5b*5QTVji@z^{FLS>z8w)Gs24KTx#!qfWiJBJkdNd0%d zo8EdL3&vXl&RO!%ryapg#g~;+K^{u$sv7L5D|fN~j7dIygI|1pBj*%hFAuVaLAYYn zgkN{hK58(FLdhDMU%28eniO!J0J7tu_EpTDsp(k%*C*&MQKU|*45`WU8lm%YL%F7{4S9nlxQu&eK!++on7Dh!I?K0bEcecxE$BREpR3p+TgXFA1=J$HiX>qmSCX< zmWhBJ7qFpr1c~2iV!w*p$pojoRMSA>duD=|^V=g3jd167?J!b@eZO_wJ5@iH5*r_P z_>(6Yk}!|<0y}i_O+5Hj-!Aj)yt>9X5VP7ZuZGFoNN!b_g_%C?#oPDnFU;7uvrSwc z9SDg$D{|;JgQ)=oIgqpuNuoOi1y5Lf-J%W60wU3)w^(NKnDF>1Bc}vlETYPzq?H^4~-%+Gopx*2=2>Rcv5aX&^v@qox zbOq(fp>vo6`d6RlWO{GHbK;n*V)5m%gO*Wz>9<0}mI8T55opZx*VPUOy*?X-5y@ol z0vgfEXb7K6fR5bGk%>d;z9&oXpxns9s##G#T7+35y7q??p`lRBQLZv0K~ZC8_DB5)&(C&PKe&Q&)T^tXwkPD zD%7v{ybE#=oL4!XSlg|F|DO9Cb@sq5$di5d_O30lsw&4;@aN$jfgY<`xQJ*X_P~hl z6}8XF8Z4iSSnmHKgBnm|T7kX;A)f^5Eas(zl-`!u|26t^?iQSwd^s?uMvTL%$gvn< zuv~SvtAD{h9rFQ;w&+zKx-00`0cupWz@i5=1*hG9Vz354d>>!D_4ZD86(3li>FykYKtge8&idfE-hX z%OA!owPahp?!tOXts>z;5iyo!&`?~gy{J287Kqjvkd;eW(~5NTwhGXnIMbQ+9Nvj0 z%!1wPT9MaEKK>m}<0kZ64JS6_!M_&FcIF?>e|9u(m>Q&b|2)q<9>TvwrTik2<6IN` z@6y?Yjkv8xQ&tg!yS{s}Hg^iqWWME~;vd zMs-bo^fPNw%Pk2a*v~Q)+YFw=Hu4HRGMBd3eCF$+%k64WSINBsQFo6Op2@<&Hg_%E zVb8lFK(g^^<~UZxVsq7$J#?A%$i6PfOyhO`xCzeES3-Tv#ZQzM-9JZ-zg<+UA?e(! zM=>wJ*T)l%UMH0my07LZQSSfsvS4y~*v?B;!{`}!)m?N?M-|BGC*I!f; z{^rA~5++SCESQ3~JXf#vsJa{ThU-eXONAK|)7+GftA0j*n86Feej@07Owk|{vsky9n};V9E|PhJw#e3I&S`@=YIa^PHZyu2AXje9OnmkXTENI*O8*qHZ7AZ>{AW>!K8~wIgC&VGjr0^OoC*kL z0^$90`S`a|hAaQ<`vJX(t50p?s4p~LrS&TiXuQU{`xM&!yv-cApDk^zMXy4>yrolj zkTq^gFW1D1ES1d`Z#nd43($N|G0{-BiqAUi_N70ZTh2pV|dXu}%Yqqy&!z2590 z??#xWc2pY*JFSX|{4G>}y~qNsSzFNVr~e~f+YJ(T zdOBrV+-tRA)r62LSZONds23DN!|3yq5F}|n^8CZNr;fO8wCg#NFi>hA{ypuN+gngImSaz zp)}Dk?3VlTN_*j5r<)G^b37lmLxWcK>i7XK$0Jt-S+o>s0Ow9SCff#Gi%3+i?@R9S+i+*;2Ta~j3mKv(>2e3ZH8 znyhp|DVB`hc=ab2Zn9>xV!N*8&?V`qiQKDuT)ec8eJ&GRowubzwd?@jbHWw=+2$Fu z_4LN+p}xC;p|v>Syh}@Zh5OeN^$xid)yD+Io>4ffagsjry-m7X7Y^@{2K3)rH)dMz zI|sv^$k19EJ#5+q@CV0sxThRIFy%$#+7^~CZ-=dqv z;D7bnOy60U2iUs2nPPvx!}Oi@=W4Zf#_uoL2QfE=gsOa<)j|TjgNiSfAfk1I&N!Ai z;1+peY;NPG^Rd}n67%7)f`@8ty9#7SFv?erXrtvRtoz`qHRbQ5UFJ>q<@cEV_gz=p zG5&w=L4Xl&c7M_Teezjj0zZ+Cb~|ky|0!gmxAK;DX)m=FLKL61W>DPo$B??vM>{x+ zd`4BQQh7}_Y&{j#AQ-Pjf8|gnL||n=46L!#p|Dm+Jdw0xg+3)Q!JewRf+|sj>ToRm zOR!mvq5YBA)TXqOo6HZ5`cO?(cv?LWMFaU-hx+92ynt&_# z@y)wNh>@08j$gNGr8X_LjJ1u;sxw{JG6+^jP{y=bxJ5)_()gknk-JbByhl`DuhNCv zWht+VsZz8Ci>*&zKuPIKymOfwig&)*Uncds$2Tv;#L7;z5ocQ8xB(y;4E?$+ZQ+0p zOxn;BW0lSBY4R)TMi*dwF4%u=T5miY`Zo?qzKS+2L1q5&&WO4KlvLbU*%aChJJbWaaT$wUou^YvhQPy16t$nEf=J{i>)O6s0 zbYN!1_H--WycSC*44-_lH0`I0TCEYjMwjtGBwN^e?=@d%Iauf6yl$O>IHXycl&^yY zVIVuxF(Ux^2-usWtH%{OYjb{drjfrTJD+EP!V+*LMP8dEJR#ECZK~L=-S)3;V<{i$ zjx;B!oXm6C`@K*da5YG64cc*+fF1JIfOL=wb4nf?7pK9I@d%LyfCx`(_dVT?pSc7o ziF3ef&IiG2E$6wQsRv4%v)l6-m#b@p6inb@Z{wu8_g^)6{QHf-%hQ?rWr-bF&>`$9 z-0TVs3zai*~N3#PG|G|zcFP->L<99Z1f|5&?)+{_p_UfQ$~P>y{7qckms1-prhw zVz5ep=o*-qSb2N%w>x*n5&le@uySuV)(iUt*4TgrhS*K|ULi@9g*49eky7`2c5GPK z!Z7sNYh1%8*1TZrPQhK2rv-qb*RV{`wR5Qfp`Z`mWh))fX=rwMNAYy_^P|^dwsom^ zOghG*Fmnsum@LsD#q+@$b0>JtUS^9V)_sf6W+G&V_-}OMMjdqU@GElf{aml)&qN33 zQDlKFF^j)TKgzv85421lt}*jWYBb-~Ubwg8SX`_XxGgSqNUh2S88+;aAt`GwI)igMKNQZMW~| z10p&gK?KDY+>RCeK#0G*o6_AV&Jj6Y(yQLEU~B773Bk8Jq7S#{3aI)-X$-JK1@Taw879uKxz!!zz@*)MTK10gaHC$=?3HPv9gNj)6q!lez2W zCbHagUoMKx-0<{Lt3)4&*k&k|!z?*?L$MHbg||qpANxaYEdQVUH*y!tiz%3asd&U{ zTZjv9o$~D8kkVA`-+U|=WW$Q#1RG!|-dQp-O2(mLzk*}QuwB9PI?ZO{zsol@Zn!2= z3CwpZ1TzH7N9gmocI;2VoEGK(-Y&yat8ljU2}!6(CFW0$bL~0d>z?m7Fx@D4vOR>_ zf(c>un8lGy(NPvs&Yq4FHx3IdN-;5%aeyvy5Zf;0NDSCy!S{f}_hTsEGp_mvtE|+} zPvhE4#?`LMv|vfDoV!b0S%_20`=F^5SO% z2yFo+Gkv*g-nPX3=);$*D?zZl2IYT?iQsSiKdRm;Dhlp>8%9J)5l}+9ySqz5x{(s3 zI|ignX{4kZl1OB->H7Bg|2^+o-vK8av6wx3-}ja0jt{&*EGDJajo)_k z1k}%wl6q}@%PSp+w=V(xcS;MW$nXOzo`WAIsgcuw*LNB^(UiN@Ei-iaN?zE zVr+r+dFx%J&9l;3vkzSi4!?_BKf?&X?8lFAkiY9(BV=0nLQ!k7$8Sn{(Ae6!{f7W8 ziyt9FFdp-z&i&FnBZT&peB&q;3jHb|J3LH>V4s%Lgy|bKy+Y7Bxz~IkM4gDN5dV6X6Yx z8b0H1evAh`^%WPN5p4)KK&wR1b#--D^p~#j#O}t$hIT940XEU{eO*Kn z1!$7No@@*Z)NmVChM0dA7&k3yd^WhUjRCd}_iIg?#vH?aSY_qq$Ct2}Q}|Cauy=)j z;f*$hH`ASfcCn+(L!VH%dl2q*TnBw|fMIvIyhRp0dUViwVF(_0R8T(X7p&sDqoJ?o zU7vGhfRMF$+&JPJ4Za=lmQ{G4P}|>pHUK37N5lraXDnYm{Ga9aYQSjYY|3aeknEOR z>>egI4Dz(&E_{K?w$Om}6dd0w!1GnSYwi_VJjOKiT*qa(2Ae<{UfxRI=YJ^0>n`Qs zlNvhAWi#K3)(^2&qx-!X<_3!szONWaRPK zm21yw97NjeC)lQ!tdZo^nAEHGy`h<$mpjSTfAc;#1sB^zTZ%ZI_ArdZ=8YlFBL&KW z$rY*^`Fu$*bH?{M{oPVq1?V3ScYNQMfBrD=9fNrqp458ZEU5mI zC3s{(=Wm&1l;0n6Iay+qk=D{3JP9#BdcJheD@z;AC0IA{%8c&A&UL*pafk$Mde2A( z<+OifZ9bo_ep{GY+h?|t2JIWnj|frZU$K#14rp<<4P3s#8>vQCg;WCYN&@{}kNCr{ zNhkC!*7LcZM;a=E2e#gU2P)^$XxTC@$j+3_|7ih;>TX0oG`V2prbJ9l>F6?1(MU}L z;Vo5cY(m`5kZ<{dMZ{8|EM|?rXsG=YDYZxh#tA`K{3(&a6mFt(s`|Gtx9x=c%B$}$ z5yyGr1)kP^T#e!k^;q`Eemp%Q1UWZ}2cuU`x%=f@6n$x1H{> zsflL`VtLBq9X5TXYg`DcB#H`7!sLqz3`);)8szs!niJXVqf7hCU3b1uKT{l^e<9#% zwf}wV=03!yyh%BI?mH%xWZ1VC_JkpwV2T7=-Z~Iv&$Vs7CcDOh-`S`EA3@Vu5?p*s zEasO1W--uO#=|_Yn&o}4vf2{??`a?BzM8CW>uJBMe{c&7+yIuxnwlD&q#n4H@k3Nv zM#fr2^TF)V6?hlK6a+i|xw#y!Zu%{Fn_b($lGJj0GC&a0Ij$l$G;%vQ0{kgpZUQE> zG?QwS4)||D|DxwnC$a#Lrvcff{^3jKQ(ti4`J+8S+o&h-p8flt&Vf$H`@bp=+>r18 zrd<91fH#rlZ!!0#=L;?=bfQ<*XbPo)q{F{|8%UHI99_qLR9%%^S1*)$w;)^(-?yun zBLK}hVdG6(jAU0tZSQ6onM1GpcH+cLM~|I8ZSK0HmdH%K_|0Gh<%SYAL`SdXwP0C) zO0pvw!rZGFAb*cT>9?q9)+3v%6L4BaSa4a*4D9Y{aW@B)MCTwM-b+%YfIRz_UmT3zg3S=kGF-=__HN)30lvUG4S52Q73;dtuPX#=OqRlz}l9pkGuf#@#y)di%{ zm%Huvwg7Y2YXhSY{5m||s~N!wp~zRa4pb-sP|El>J(V*)yFEKxC`ZLEV7aqV4&a0F zci>Y1Iy*ieLtNw1B{jiT6(;OT=QPa`=`AT0=OCnh;lGIpVgrS_WQy?^plnH`3?Jkm|Tt7p?G&Ki8Lp@yvbKJ>m;9 zQve18oNm{5APq_H&jD@mA9-%x!M=ncJ7p&a<)1u4OtWHz#cW=A++bplkdU`KfBt#q5;lfA-w@{LUT}t%8)lL(*{IjWsZ;=! zJvJaJrITy@fMO0dc}qI7)M+p~>mRQNF?eb9vI# zyC|osR%Q$2eFvaXGjwDZ6#SeZw1k|N)KmR}4oI{+ixSzf)?|Ek&Je6E2(nY`uGrt< zve|FAG339I(b46y7D#We>)o=$6x-bQ80?Z-@rs@QixTbV=(=ZmC(D_HV!D9J2sy~@ zYg7pqyV748x{=TcqhBgo);ai%_K;?c_o!qZn;i?H;<#!<5n*z z?#hCBLuen0b1z}bC+@n>xY@E{%exO0I|RHK;EuXkdhi1vn8!&Uo$kAZMS96~KCLY6 z1&uVdfCi9lumF!bfSafCCoQK9)AR$uv;}U_{{ohy73{ql`kTeS?Ey6fAfHEaxl_>skx-I z*=vP1j?!GMPHHrOyAC1#wWr-6hMh*pQ(zH!g!mMLfE}a#at2HI>ymj?hi{3 zF4(3dyiX(CF2 zB#e6%&Wi8Mf=Tc^j-F<5pFd*#_O>XU%Sp3%nj8g_e-Z%G&RRqlNYn8I<^mH3K_)bR zzcVu_khT_?W;$~bPo*qL3k(ghD{1^>9}Lo5P>vAit$?L zGGQhj{|q6g3&B?RLsEZGB>!s(7G}CJsMtNn!zI~+sozb#e>&U-*<1h|ZtxZJd@skpl`J_d8z zBWGgdrHh*7P5v_dE_NqkdAU}@ z5vgFmMQ9cuJ3dB+0G&%~$_K^q_v>5{kFnWHCWN<+ikkQaHSrjRSX3+9wxn0J$iVc?r;_y$q?e zg0&M*L%(%g;IKy0=db(3AWjg_YV&yDIL1|QX>K83yZmfH`Qx8A)u(vs@}&L^!?y~! z^S3?of7o8E4;P*$()Kx{N0$8wbYy8hgFe6)6_v@E7qWBhnF_z?6_me#wlbwPc z57`6nv|N)B?BWg!O~KY_Eg)E_&GOPMC066b*3l5tJTlTVEnXbfw^>A zn;Vz9iRzRmh+PLiYS@ztxyAf2S3Uvzp05iM=}78U#-+sNqNj;CP}4if9{B>+5+AK+x|u4( zQ`c{OTt&3ZuX&J4yoE zwRDR$(fjglXA}PM`k)Pb2l*Muy#}oyjJiA)W{7;`D|XXtOmNxezgN8w9jq?jb{yrX z%9waLv~)W}Wj_Wd7r6fOIz57Hh90_rpT|e5BR&DEtIT3o2hXRC4$abq+6G4M$sW*+ zYlemc&zP-jQ=VF%*v0!SFCogK*W4yP+$A@j;U69!?Z>Dr{I1h0XYMebJO546>LvZ8 zRugZ%0sS5`m(z7(dc(P~%&xrOP$Qt7KiZl%{lyE9ttS(XxEMrvMVjTvT6$A;`wDCk zK03eoi}T+$g?~h*T=^Dz!imR5M>{ZPmYaI=DXjQ&r~myJcMtavRkZKE8(_fzBUV;X zVL|{$Rmf4mYtwz<>$7w?qeLZ#145yOEaK(!1Kxh9wp1F_azY!2owyUYPtssxb1Gp! zrnjYdb#Uq;vAL+0R<4?nnp=CqdDd!QN7@>gz8A+u#eBMk_vY)X-XJx_np9OM-!V-} zq#(8K^F>kb3Br8Itc=Y#mxUKUEaAuU$MWHCR64W8X!iSn_HEYn(jLD;E(?dO5gvSk z(M?azr=u5b_0p||AH2@X5NzjM9mHlO5GAOq2WS*)+M#6X^0N}ZJ;@hB=Zxa0ncp@3 ztlgceW->i_6U2=>|5;aEAJoGiZi9dE&?q>-VEJg}W`&B79`{MWs^ zQKgk!iuO{-p|Sv{ZrJNfdvl#Er0wI3%W8~;L0Djr6_W%lPU*bWml&P|tnl z`8I$U_qp1!tm}M{nwC;R`bxvtzD}V@Qps#2p+3*Sf@vv|3=B(%>}eoYud9%bTa5ih zlNOk<$-Q)s=hc$FlG4)MiSFTzX8z@3paJk%`@p}Lu94F!=F&r#bFXsPtj{b*X!}FP z2fGU(W4@ngzkZvFUb7Pehp?hel%~!N|4A?wzhDS--+hQLtyozzXgjhsGIq3&c>a*h z7ap+4i3%)GEhlgNKgT?@lf@Ub*7D2Y%C9jB0-T1<43^R|~W>EiK#B!kf!O zBOH-LiEUi&fhb}jz242%0|Cqi`*?ZLv-VB|MZnQSG3^jKSP(!owu+xO@ES+-CHByx zMbyOfLP>dGAj_SwQDer7F)M4T80hau1J*u3N7U-&s~2bJozs1$oSd3s0Nq+FY%93$ z)|?|XII4YZOB94sqX`t~rVOzpzYO3X-4d6NF`s49?Unh5P0fDYdIeQZM?lLOGNhsm z(=f6AA}?{V^JXle)h1J~6^5WQc;!*yyT#nKH!c2LXlj(o)U3h{94r1G(~cj6N0hA! zA#KWv(o<}Sq%w-ncP=@$1p4X_@I{U<_cE!S{Bz|?Nn)uP!dF(B4VNm|A@kTQ{Jsrw z3Jef~TZ6*eEJevL9L0*LxhWZk>Xpa_XSY;`&%3_J!T#YSD(YST4RBl<)C zx_l2&;#Y=fSZvdN@l{&4P6bX*arM5No~C52_2);V&?@5Nrr?j@aW+hfSpR|cz#34} zmVN*vZe&e-VQ#337nIEen3j%gYOX3&ytHrWuG_9EiDoomOC=`>ykx zco3I;L!EhwR%uN$;vPY9E)VYj6!~QN|NXS$Nl>@DWQ@@TG`?8Lv zvfh{6RpqSMUlHbB^4Cc(Iv0nqCsWJH-^f!#(yH`JtKXJt9Ep6sB5vC>!7QDx!Mlyx z`AOwkIJt9QRa?Kf-GZk61K8hD2qPCW& zRN6B*{u7h~dlMH#ZUxw4qeG>9kWv)flP|3Z+rAk?`P5y_f>c$%)X|rGbSgV=5p4YH ze$mj#KDaQS=oF`L3*)?o<@rH*Q)cxTwKPG_K>qV?4K<_6Vc)xYWK#d5pdKRhX~V++ z#UT%@debp`E564T=+NZK46_8R^&E~GhqpYghPYFZcNby$3+6plisKoVI-ADOrh~YS zI(zpFjqKjaLM04-JL7pdhmW8Uz3Jf5qg{3b=4V}7yBR0Hv&Z|bE4<^w@NR)DdZ_P1 zI2wvmEIlEQpSBy@cCSSC3gP8JTi}3L7%I%Azh0Mtr&P z1o`~9C|5QBfS;Ujf_vod&X;+>#KD2}1-4-H>u;)G(=@TMxgB}f$x_xVUHIFER+-T8 z?e0>jzQ+DR`T12t*<4(rWdQGi0SJMOtyA4RLpJVtZ(_uL+6d=aK{IhWa!!w`CNZY% zWfS_P1CW%xHK}9&=&|hV^9qdQCR{LV_&lBM+SL2Y=V|U6N_Cn3AAyvPLlmYCPwC$?~VL^ZMNU9KTaPV-#a(D92~e^i}C*jeSl@6*GtH! zqK;uUKRja;&-+fJ^+l@jnKHWNS>=R{c>og>LaTgK6u=?R&dYjQh?oh&ujhE%4&$l& z8oNtv{DQEMB-ruph^TGuF}k*j{aL8V!c+7qH$r|iu(B8?;9W=$+GCH4pW}jdPW8&E znWd#d^p7`fB9HA_F&VoUu4U;`Qpk0pGGT80RTjt?e z_H+ei<`=aCj;{PsgxO`ZG~M8)-zi>yoY?wo?qz97eTVZ zp&2)MirB5U=eTqvJcMgK zpu_YeJyNvd!I0${=PqRRn~cI*-M)KB9nWzFls6yI+q2EQZcp40<4C*vXqU&p-8If# zld>W`RbfoqodH1P)>?kNruS}&#PENDvN8Wzm?pRTC#*#%+gGUQ62OCkp| zzRRSRqeY0!DJonp>7UioogUYW(_P^oZXDpG>rlczeM8;yR}-OuQt2Q(B}Q7Ya;0-< zNQoF~?CIHP85((WaR@?APKB8V1drO>nw7ASK$faWNz`GM zleRI9IF%-UR|-4~Sv9b%bn(__&>DSWE%pV^&YJVQFPt({T9f2TNmiP1=I`}zgDBFQ zvCl#xHU$S0Bksa!vw`UQyj{)UGH&UA2f<0sUKDEnWBSlp#a%#goy4hwczk!$g&c^x zHd#4*u89sS4#%xr=PzFv!#oU)%vUsjro#Ar1>$>OG;R5|U6=0e%>n%Zu)BIj!;@q{3Dtlv|4vR{0i=PZa@Pb=1$w;5jRfBtz+(ss- z8QU03jUKm}*>*YFC>MMc@)D9sO$GOgCP|XDlwAX{yq}ds9`n2KGqmfQ70>Sg`{rrO zAVXC%^(i&Ga(0bFVUI&>ei|}QTWf^?3(6GyCfInDblwCkA%sIN12mUy3JlhJ+B4oQ z6H_;FRvxR3)N)q5>G+J_N_e+GC)P~)IQ^x@rw97aR`qk1=PIawnn-qfwd@MyS?DDU zYG#OUt~5G%aQ_UhJI`E_Iy7TZGC?v6td{~BoZ9NoggJCH-xzk_>3v-mkmfX!;^@uaAShkd?;e|%WpGY{I ziDkY=K}^|t0tMYw7W1*i)bkNV2ihDs@#H9=9YW!H09aPzXY-nhXX-KqQlkPKWNX60^A@Ltfp=G6j(syDX zgt}?uByWgkE*3Cdfx6Dqa08DYvq=1XJ^C8;w+-nhLEsyyn&mP3j=p(n%bGP|lLBcG zAN#q~;4|w}J)3Gq#RE~6M?Pa(!|~?cmm+g>b3mB_SXIAKXlf011nO`Zh*_O(Q}W}L zb1;M2d+JWb9_21@dRp}Q(A}7R6S^JufvORPKe7$ zCG3X!1v1C}nQ}(Kmhg*KMkw2Q!Q}pZWd;HrMXwd0;KHh%{WPlIkP|IA@YVWd;%QO- z{b7=3VPvaBGhAwR84-P0rDpB~%@-;BCRNh^>^Jw&DIs;YumxF0&;$O6!7#xdMPUTgx^?BW_)Nh)s<9^4uZhWNGwPzfD z4Z)5z30 zN5(_vO>y*F?lef@B*xX{3MO!GP~&6>*Nxv~k;~x(xDidc-Y_0VC~}wu*}h_~XbW?F z^P4W7S5lrBN|_iplqqQF_X?I`%e~{OHzad7Rqz5TC(n^zYR>HLMRvGXv9H$1%eP}; zH7utW+N=CHmT-DfZPd0to$yPeucsm1)8G3@{Lzx)G=xM`4O=V6|7Df)d;26-LE>N` zmd0rtjjJIG4zBV9o*q8UnFzAAeu+npW2%(mJ;r?E>j*_A=ke3B|F`gc%BOk@f1o}6 zutV>C;3y)s-1oRAjF%Mo!pp39&|`5V2u!B_@gh4C1R8Z{Zo%PhDVL>5=pLswvnv0m z=(~6!>beOyZW34qdX0&Aaqd#x?{Ey0@x&5mTgVk1B2ti7O)frhE6o6G=sPpu-}-P} zQcmB$<8V4TPhHQDSCB?a6u#Nj;&rfJ#T8+k+F&1MKuUk9I7N<`TaB~z4p7Or2AG?( z&jNy(_8jLe9XCb&ZXRWszRwze#Gc47N#g+h-M3s4QfbKmXC7lACHaS+{Gq&+`T6r{;S>fk;stQ$WWML%pQs!*@Sg z>Q0A4Pa>umlH|J~k}rc%UKyt{K*na0(U4HmB_SKrhsi@0HJi4U`?NoGt02y;$+TJA zX*VoE6h{h+Gsw2Rao5_JZlzJSXS8Knl8oyGz)qJ~YWPyx6gNVXV@&SboRU&hrE{qU zV&}oVVu@AR+aRpREHCB;E)Csg*8E7GK@%PL#A)7W!Aea!a|w+8eN4Sk+e)baChU!$ z!bU2730uI3VlYLMJb(>_;0*%mUjv(6wJ1^oH|&)g!(tb#w4bSz`M2@ce&wR?J>}ZA zB?06%n2F1kGj^o(M&*dFVK0df@Nv5d^T#a^_rep}u_&aGDhqkVSV#;L{I`Hu4B@j96Md9ODdYgMa3A)ItzG^UfEo@SG$7Tvm>T{+&z zD;9`$Sw1rsk|7M?a7|SGV`*5fMsuxkfxdrBmuR;BV66!&MAQWt*DeGg znwS{Ij|tG|oME{aB5p!z(F4SjUvBfUon;BZg?js8=P2M!BMT*I#Nr{gx;#)qI&?}i z=kuS^x^+rsjMqK`QL;Jg*_ID-iF9Q4U$Tcd++8;mH#_8BqexiQp~8+DUG8>e8b^nX z8fCcKrR*&OXD3C{yva2FQcntOiX<`^Cwy;fjWC@{IPsK!(hd#PdcjUK(z@)3xUq#0 zPkEXC0}{Ncus5YoMVG@Q@~y|0aOkvS!!N=+<^thO{-^DAZ`P^w0tRD()oEoT8oy^< z?~Ndlkfa#kku>T3t%?3?5o?9_BBk5*K-$E z(efrpjGyK1mTOi(EM3z(GjeZSvfi@g3o$m3&(2HGRRq1oioa$_91ro(Fh5HO5k^z( zxJ>Uq1$UnE)Kl>uXlV*$a;hAUVeqbMq6E6DK~->Iac!>8au)kc_gRT~C3%k9@2q)e>X-CPnfpWPG7E zeu?6sij@kn6O!Ld{fk{*#V7%38jr!B7SUoG1;JmtY42CU9HqrO>WqoiF*{U_Y!lYJ z%bLXw(w&sLzWE8=jf&y#H&!voj$%2geHsSz%WDPQk5oUd>;KWa8BDMYCF~%kGd9jO zq)Q$l+Xl&}4OuZY&QTw>pPajib{@p1>qLdFSuN|V8t7G0D_K8zR8IchcEqeslYG_WidjxBB_CFGw6Lh~ zvo4Ta;pZ+c15HwFm2fs)xW-1Z(R(+)m6=D@NS&mTA=K8gdC7SUWD9;j6)Jr`$(w)T z7NI|~;wAi3I*~PpMf+&uvxJ|h|FX==*_OSAP} z=@N0{Qx%13l1-rGVoe?0Ft+;=LIsLlg(lu5#i!xmJgYJJMgK+JB79jc?jLstg4VO9 z8rvDaa#vbJQ+IRY>2vD`K4|wu_tmb&- z;y|%3l=e+NrzK#yk&=uF&Pg%^h8{WUZ5bB!PaHBQz`g;X3*jgSalm-ARe7WtlQsRF zx*t8_2K!~gkE>VPM=3%2losG$&A~vUJ=2kb-w?r?#Md%72kvM22XGKiq*_k>>vv( zna4XB9<%ul&S!2Hy9sEbWJ{h>W@`;6Kec??Pcuc7Kx7SVG*wBh-pGwQ15E-&dj^rg zSi*!rjPq@&Bj20VApX6*n%33zLoPS6eYKQ<=iQ^KT!cAyDI0$16weHxB(r`-@}Aw> z3IfFp*vsr0JAZ0vSy*SECz+eWruLCQGq$#~Za6cYE3pj4tq`D8ktDt}>M~M%#iG>j z+AKHB8Ri)JyECJmw(ARAi{0rl)5ecHTd& zJh{K{43Rir4DxFEPg-ltpCkqx?r4KSe3w3?`+P3`7rlLyWW zvb3Kpg0PFvIWI_#Xj2`Kg?U)-ev@EnBP!645?j!ER2Gq!>^7OUDyvW;PD=L|prj-} z&Hln`ltii$)@a&o7Z->4^GUslX~jnkr>Cpx5WE6=^+sL=@c*8>aL)!A7I=``KHn5G zy{F$6Xyro4%*gPk#KyTBTsL{2A1;}CuA{NF-E!tTzZ&O$emks1utURqo-%*EbH}hHR-=x7&tE;ky^YX zV7W}kqLtWlkB*N_*zBA+^u)Tc{+7K#X)yUSwZeBQ@8}>?>D-1zogq9(mi6scpOzw` z8vG^GCc`Be<2Lr2G_PBWAMq>$_A8fQ%grc4EW1EOl%ENJM{%s1nUA^ZR`HEBDNga_ z<4}At!fnm-!p+^yYj#ea0d)-F;`7ktoxNTyUXtw!?);~)(?4x?$1>1P_HaQ+)}&wI zOQ)LIoEFVq=MeoTR8~lue6|J;KWo1k%5oXZ>e~mnef;vY&Q-wspi9}NAN8n8V}X2C zO#UTbd65nT3u$IVQ?dMpAn`}Zs*a5how;3aF@{6Ee*SgldtE#r*}Ne!cB@Y}XWJ(& zynhzqht!Z8eS-+syTgS!1?t5|t%tsc-B+>dCu|Sv?Q75Pm!HG)@V{plTK9vb--k4~ zXou>s{oy|R@DBN5nG9SPSFKAot>6BFFP9ZJEaHDbDK04M8BfdiEOYxYm{^97uO80u zFZ;;aJI@!OkA)76DYPmNoaFa5`G+4}v_q!F$z*h|m_EI&k63BQ`7Sa+pr7PgLOu@3 zc+46SkMn*PmqLmcGtjw1Xs@cM*GKbFwY9U2;-_b^-`OPb;Od%9^<-~Klc{je+nkPy zl<5iq95rQdy4KezZ(>S?z1*W_n9TbJ%!33{KL<>Q71i6Wod(xDZzG41-!molr*>Se z+}+sOJE-fXSf1_hp!HBT8XQ=?dQU;0Wch0yotyD(k>f&Pqf5HMkC;PZBSes#DiTEg zDJTWs!alOA55cxVf)T=83^RPYtWZzK*zfA}oQM&HdCpoNJ5lfiB z8xGI9k0}JT4DO;`8p6ic#XP_e616UxJK-4jboNFM^!c86yUmWZQD(m+$Xxgmv|I zx35uAHv%M#i#zseb>sNIwQ14WNqb1g+|g;tEA)J#$xU&y6kd=lyft&JQO4<^R-OGl6KUe(`@$Edf6Eue(gS6}^EBh~<$q{a_CS0NE>o@3Ojk&G znS-!WbC=|bY&gU>kgRkk#WQwTA8S#%8O$LQJL&H!+q?}BtqoDx={jA$D1h1(s?{Qa}*7rl0;y~AS%Oi2J;ENjnX^{|r-TLnlY+l1 zvTGXEuR#BdUej`op1po|*xEUnxrq4F5~8-r&95VJum(Xm^uKewDv$Xh8dh=6EL zB<&Wm=M75%i>YuW+b4sx-j=_T;XU%et9d z)jM>)!_~EntQ!xUlDwlaCK5VvEyPRMgJ(JrG2(C|em)IWr1!vHWiM#c`bQ(LxLC^s zD$=aTNVXcv(lS(td0GBF*m*9lEw2@h(44vB75;<)d+0~ca?^G_(!tkEaKr|__fm!| zpf5OlJYqhupL0vvTNLRnQGu!UdrT{?S{@%PG{bed8@omig6qy#Qk(6t$pWkZ|GzQ! z*bnep91zWVc-Ptv1&N&?lnv;z93RddT~0TK_F4<9Pu%Z^msUXG6O7OQln=NWZm%mJ zym%d!u7=$`PKWqH7cJpWtO4nN*^l^-@n4}<5fee(Z@l!4+Xgq=u1{Nzo0r5Uwkvg* z5kWMBvPd=>8i=ALhDxb@SP^AR7SIv}a+Cma0^Mb^w2bkW{l;oh5MrqA*J`rDUb!5h z7v9s#QH%<@QPqbx-4LIzd425sdolvytADt#-w&qQv5C7Z{;V0Q_O=lAZ~Zx#$mwl+ zBkXa5ooMSqQW&W~FCmPgIQ8Dvwv_6EL91J)Nuy79u?mXBH=XX0b*m8;jU~^Y=hvYg|+TFQ<-^X_jWPf_annWT+H>X`ini3ux!qjGLW-n$tFC96p&7s9VU8`Ie1$74_T; zhui7cm3_9=k}K?Ld65=JF0SDHjn4VZQs6juJ_*uv(t>69QbLAh)ps3QWgLU40&Pc) z3T9IR+Fw{Xi~$L5SU}2Pjiyq!Q)cj>NN4Ec@r!1@**8?rwY`v63KG<6vXZD0&CuwX zj4$dEOf7G<$8D`OXD2rOjo;|2>Z=T)hV>7mG_8N%R!{|ft<$AKGa+qj?(N@Iz{eq~ zXnjZl9ChlnDwk)sgrZBOTwHgGu!0~don{a6dQO2!zC85=3yv^mVuOG^q`^UPyhXL; zlD|+eF$2K;c$>sDcL`x6d`&%NA;xCA4RfRFG*K$2f?B(_2HkmgKnBnSH;NrkRQe?X zM&}fijhz1#T?Zc99{}n0zj1tE(bw1iryMl89!qZUJf;1u3j=0xF_6UG+S~qc@sO37 zNz!&+TM5~n1g7K*|LnI$zKNg}G*4J$60QqR>yt$Pzh19xN&Bx)dxis*D(?Q48eIKV zfVNf0(-+y6_*X9Zbc8PX$CqnJ`A0-V_^dM-t-$@j%EB8}a0CYP1FSMgL+$0itP@rj zoR%_#K<7&?j6nL&1^oigvdqcRDL9kct+9FCxa3y~&?1X#69(2fKkbpv{l4>z%&`(2 z=t8MNqh+RUP@t{bjjm;fIx}xnzD;R2G=@#$UEH5g^aLa3=Tp`RE$Y*Bafh|=N?^U8 zJI{|gE$a3sdGy17ZBq_y$nA}JMVMuXve1U&$@2CG^!nT<#|pQ|EldB=a#0n;^M>sV*)6kphl0N;_gfFH@aWmLt3C``}8{ zj0@8x(dDbqAh!!5;*t8ArD@(f9U!FP-g-1;@U*bJX610fL3DoQSR0ptA^|VjXsbBE z3JVEjKEwWQ9@&2m+GQJzKNb0cLxEA}UTTm!K=CE7{MoA8vk?w!C`H!h(Sgc=s-Z`C zvXSS0SQv|v#=&CS&`^x%mfQ!NLeyIzk&!G3eA9)bC0QwwmCDF^}#~`u5FRJ~< z{ee~NdNk%=_uRL?|MK>8O*bqY~!2g5|y26MpX+ia`a0- zZ~k!15Aw)3HB;ynKi0^^qrDQp~pY0r^b*XC}1yM?jdSeBSoo zHLnH8vHa29z5Ff6#B?keOhTJZl6&bYC7!gdN}u=zg8pg(Vi%~_8oW7ccc?j2Om{nv zZ%C6Y#%N;8lQw_7MKxQl?P$+#(qfL^yu_CCAuj0ld(7LvpkdUamP&iJrM2hw46UQ% zT)?4%YOV3Sv6LX>Ym-{nkbqtJp_zGrN^YChh*VHoAI)q8Y9Ll#M_p#PbF4aQ-EZtR z2Eei?F+lX(SI@a~HtYy|700<1h~KW;XgM>|KPvf3n7ME%)d7^^^@I=l2x}arQaMv-Z0eMOc+y`VIj@8`KGh^Uk%(QKb#l= z*7bH7S?s;9Z)UQQUuvb_S*e|)8r0BwLV9#1tEuIxn9)a0zjqAhMSa@Ib><*W z_DoQ>*qyH1S4=39XSxXNr`CQo1RH}&P+_n~&>qAEb0F6(Jp>j*I-ObY46`g(@;$TW z=YiOo6x?g;>#M1(M7iQR0j<}pT7eK zo4Nba!#??JpAaFIyUHb>i=+pROgg}tGJ`q|W7To$^jglZaVl&BxAr=*zob1;j3u9& zBcOhRS}_NCd%Zj<$kuu;z<7$D0{yX1ci7r>?d5nN3L!RaBmc#=!Ak7}GS<)S`c--Y zYu;LdS9iLhwQoS|2B-WE&+n?J^xU&5BT)IHjnU=W#?ygH*0Fipxb(hiU;ofs1JcT6 z=L^{j4*U2q69~Ee@5qozhlmYBVBd67BAZK_Px8n|-v{hybP=d&6J!m{XDQu743n#?* zXaKa+0!{kAUYfmwgDj6StN_s12NEQHr&dNqMVZD3MU#Q!cDq7$Pw}v7bc-H9z6@V} zFK4IPWXiQ+<@Jjoo}}$0vGPm7c787o+?d5>P_}(-1F|oGGwblzYyb0r{x`(=9w6}$ zILv*&)*P2k*yw%%hCb#7k$zrAiZpmapb8cezMIlx&dzLS0^)7~=(BNdu5T&Me}#xY zXsrH-hJ8#7XYOLp2)OH4L)u*d=-4j zmOTRFXDzSrZl^#x(|+@^$0O@CmYZmOPr!&9Pe&C6FNyQ>11wR$U$ENJwTiZ1gD0GI z_GGD`b1^lw^b6BV>&a4Xs`L%72yIom%}h3OM!=;_munaErLPIcq^e_29cU;DO5}*K zToUbX(`g*>*_*UmV_jRvF1`Q#xM=k6@Nsss8-a_zZ?;7<>?8vPe+n`ptPkx}FmsS? zrOXea?seIV9&jU|!Wg}3+fHUTM}Nh~9`tq84%UcyLF%xayrJ9b^=vlj`6e%){Konv;WCJg^Lhwpi;KxCH#WcBD%l>C0UP48dwj5@w+@m;{3EsjaC@_ zx~Gzrh(>bP4N()Kb~gKUwY|VvdB`U-$e2KOHO7Xd6v=#?8Jy^np`A48G?qpc#@F>dB zC(!6R-v|_Lf}-X_j4F3HJ@X2=cckuL@m3ngN<(>t{TwK+0#)q4f?R>*09=)p54=k8 zlHWca-caG+y5@q`c9%>T|0bi-+&%^}M&92Y{+s|-Fthp!GcAviAZSnyK=8&~h15Y^ zUg-qkfSX&c6tHAjn3f@0K+D$$SZhSk@)A%q-X}eojQiT4+Fey3b>xmRSEK7={wbK~ zRQT$B=DxR(3JJnMYHklbb_hB59QC%^177gSC-?Q)#*krq%Egm z{SyMKZbADyP|bLG!n{9xgqi&>LxOi3G-z%gbIO(-1S!*~rqd$xP;|e6m8~fnD^oGNz@&_kN7}4$0EbyA&vPRfsKzS^fg7|Cgp{XKouDSdP zxGxSCU|>1^V^gaU^Fs1SPSfvB+{EO_TOta<5B zSI^v*JiDg<&gm`j1YL6`g#NP^=JyXmUB%x!VVnnnlJ>oc1gt0lZGk~0Yt=Y!7%iJ1 z*q6Gr25Rj5?Y3c6n?(YB1=lgr! zd3SII9F|@2jw{aVJPLmMznO@L{ZOsmphKxjv)>`_E!{-pPm0u0@hGbcOY`1kNMzvS zf$A$hQ-!GhWf};X#_a~HKApjK8)NO$Hj$c8rHJ>DL0;`^;g27yKfljp3a=tc^o26n z-kO=6%h7U4l7@8P{@8FJjv}^pSl^_>g;AmrmflMcXAEIR7KWC(*nnQ`HsqWpF)Y!| zbGXDW^}Ha9H~tI;U(arbM{KkK`Nhzp(Um%sHp7~HsQw{O*1Sd&RzLW-VIVH_W{3qf zpUL^Fd7IvGc+|@AjcCtTqyniEu3iJ7!<}gok1X~SMf?3x#`|jQ!Z?cdHX%`sxO|#J z(!Vu_j`8KO=6%|E{>I5}8FFZyGc_S-eogQq5*i7;OWx^yR?)3q$BcRPswQ-A2Mn(y zu8$WD4_Ciul&0s?{7G74x=CypcHk%IsiYa$44FgMXEX9?mIflD$xQs;?=m+vv~N3E zLB*Y#0Xx_amt@AhuKyq&Pb?FGGi7va2?2r+%^E+G&vy2B%KYiH;mFO%RqD$o%rF1$ zqJce%uI5O`5CRUc_`JdT;v51e$6BlRdguDgu<*~K;tP@58PJp*K(^C}4Et_?A;SqM zioFBdHyWIO=LTap7C1Y0b_MEm%QT}{8wY_0;DN@AaOR^<5nS&8&AVEt@GYp`c`1> zp>N8q`otBQBb$`(_vPms&LRv9+Ar)t(Aq(bBlP|Z2y3ZBSxx)A{ej3zpFo4{^_q03 zxs5fWHX{PwV%vsK}DvNN;Ev^=m?X=R%DI7ZxU$vLc2mZBSeHjQexH;ku1xHO5CD2}lH z478aW{MUaknS#y-b3lxDbP>CK1dn5}uHkIk4vw_>Iu=pXI0-hC--i?Rk7hv>av{pE zREi>~SQ zG@jYz9L2lMo+`KWcpAlL{Au`uv=p`I*|eiuSEURd>Z@^17HiD19bZ_k<4=pfD(=k^ zH>VR3Qpvh*D={P6)x=VA-2#3-LbTA2A5ZVK?-vkNN(U8}&3|;$blt+BF6(qKxoeaL zsN3-!j)XHv#g#v2NjENb|Dfcty$G=fmF2;d!L5oiSH54)BxNyu6PA6*cG@g*j=$HP z7e!=tf-``&^ZM~sStfR|dQPi-Mo?JJTKV?wPlsauA$vtI-?{Om*a)3b8x`9wHSFGS zT-N;bm^=MnhVb?OG6bEEG%QH#<||pwYxcB=N31-hSO@=&p{4DrjC?RAD;m5z|3vxr zpEUJfJ87I^M_TAFWqIG>Lud)Uq?o9AyQOR?l^6p_g}xyg?D+oKwid2B#Z{WGPSOzl zlQ&x6mrG?j|B@f+@Qn*kZ6Im42v`XBxivKW*iK#N1g*=pH{^gf&4l&FO`$)94vEZ+ zU1W`->l%y{kRciJ_jGa+ress_>gytroiJb)G{}{=4sOkf{+=ub%O)P|pN;F^WU%$x zD93yKRojWPdaaU%_t5oIue_!^`8%>Va@}KC--nA#)w_JzJ92;HyMM4&+`mWz_wlp+2DGFCQU`v=Q8UG7+zae*V@!yQnMlXv-l!dEqol4! zV&GolE69wq7ei$m^w7SZ0m3tz-obox4A{0`siSO*jLx*^>Z&W;GzfF-gN30o#6b-T zC&QmaqBk88yM%GYYpt^n8N2R=sTBkMIe0Cd zBJFbuANlO_&m7jTu>Wd&>>Z5kef7&;_*<;wOJLrmj_vl)=CK8(p-HQ+8}lwlAKz+< z%Z!r%>nuQq5!v$=P%<-z758al$^C^ZiDD^$rXk(^t&%J!fgA7BO!VN<}nX1Ucy&b!omOU zFHaZr343&Y9L-^t9G_WbbK|g8;m4utlSum?^|I57bH$4J6>e5ncR9I!$<%=wy zM(=j2daE@WD!$1AyYEl)MU~HPnc!FEJH%qqx^u%>soux$wv9gBdSk#z0<=+2*Fqa} z+hrzs;fRj6uM*i9V$U29zO9M)mcKn+Ih54Ce?Ux}G?YW_6c%a97_;J#TF2sY^*}h1 z5`Ry5EmMn`RfLgUl=>^lk+3HjbLH3KIAw(s?T_kP?jG^Wh7@>JRg)BS5hP;jkS! zu*a>34I~t4INV{J38r$!Xg;5C^V{|c)F3Hjji|2mj?ctER?^LM+cAxd=QmPq!Feo%sJ*EK+O=tO~y_?7wDdIq7ZWG4>iqRK9B5| zDy08>`tC|yE!p!BbK~sx9V7PMQ;Xdue%k_hbqU9n>vVZ>Ep;76KmT($g?ancli>a3 zYcTCC-mg5?OGd2iM}Ii5`}u>>)s{ybQxpiCmO}#TDKFk z*!d_I8ZK)W7njePn*1jM6|+_j=N+hKweqDDqjFf1b;T%417^|>SKpaoZ)XXWq!*gL zdo^q~Uw-F%33uv~384aRVFoQyFH;GAH`TzxOxao+B)w*%%X_!I*wQNM&FPxeRE7q_ zwQYCk2*#pp{(Vqdw)l~YP-FMUf74u4Ri~c1NVdqKaNk8?-`g6C1-LtRj|H6YJMl5n zR^(x5)AqEQGh*`5uP*C1h?jt{$nbaRGJ^%t>%>Wg|CR(L!vDDo!2?#d6h=EUp@&@- zA1S&x`k{;G9%m)(O^%pBi5eZI!mq43c3Ay}SMETEW5p@SnyAz#%Wv^AV1()<;9BU;>VOT$Eq~eOT4;hgRG`A(aiF;xs*o^FT%bT=UJ5Y~L$1dsk zmpp>a8!2E?^2Imf=9OLVk;zV=%UTpJRvG!OkIO61VDbpce$d6+FMN;02Cnwo4sPnU zKeX%Rowrq8G8Wp+`Tt@v@b70aZ|9!RaI$*G4%d1MnrmpuofR-=f+%C9>UCq$);x#s2@xk zocQe<>C)euj?TY9(Bw!RZcqeP=%n+hB7vVIF~JpE%znOv}|;2%czqD z4M%gXg`T#PhY#XTPOhqITRaLT#+&X#&kvcr3Dq7nEA!~EWXV=<(Bq-X8NPdt0=`uT0}UHIxVplA?%3LP2rZJTorUZW++@!x4j4RQTvX z;alXaP^dx%8~AlUjnLx)3TpHA4b-Ga{E~pcfKIaE(H(yXF?{WY!*mbIPdu4|yt}K* zQit*yPJw*nI4U}oepLuue$VN@eOh%v*4m!h#j9pFza(uYH$uP zAx+tgH=aZhS9GBtns0Ln!`Dh@SXFCjRh^(MbG|)x$)fHn*oJ{OHp_4j-oD0OwAm?H2&f9p;4!e_#g$m}wHGHieJx3%)^W1r=12?ELL4WdQrW!r0d z^J6Tjp_}R}M+Haq3Wle;{aP=_5B*vhvF@F9f7T@PF+(-xS-1?;l+T_w?|pP`=Ckc6 zcjeX7Zy7=RG5HQ|vRoYtTdLN%9@qM(n4F3v;;E7k3411DNQpmY7*YC?7-xVliw6k7t)T2(t^G*d<|Hds%{gLOH z9*+Fsy*k-%cv-y^aY)+6+nDbE z`#d!|hf-%cb*;&z-i;>IuXKOVf6V5sLa%QNmIA}J5j7@*5_^HUrn1>2GK4IpUE)i> zSWc>OHFw#2d-4E=Kz$&$C~Y=L#N;fcs-Re>FZ z0He)8{A)Jg#?u-mzn(RU@i+X*Sf9_^wpliAOIfjE`?b@c^>9-j=YEkaJ*w*~L6)-T zqVVuFK~_ni58a_v1Rt%Mz|-ahcZMDn-$!vp-u%I^bOx<;D_n_l{(py4p2$a6mYe`sK}l)S%r2>ZST!2~IHMsU zyH4$P`XbIH-^G`&5&WRW*(pUi911t{1%xZmB^DJ+=_@|pK0pF>{Ix{`A$Xtd} z0)Q`dzir=gM@sW`UnMPmSrL0&^r@ff(N?-ag-N1yuIK5V4NM%qVuwGt+_f%ppiCOvH z#L<{McRurb4*jzg1yKrp|3Z}=V<t8C#5HE-c|4Kq;&6`FatzMp_;u;B0$nw&F534S|=F(-WS|mrB7+`?9mS`vO8?H zzq`6tVwhmYeC*$5WHrm3XI535ILw2eCAv=w#NYuvzN@p_lEmO^0woT)Y z<c<)VY2!GDjMFu3;Cn;_PgwX-F!e`>qr;r%MFBiV_6+!;`~ zruoYg=oZ-J-n~qkEXGSEsI@Ii^!@FdxoL?qPZ{Kf7ama@rZ0(%0RG_(V07@<71+~Vck*;! ztBVOU9QA9;%W9rH-XSTO?#CcS@{nq9J0x3d1L-?-ZNu&r;ss3HiVvZ&4mtlNBz1p1~$ zfJ3!NsRntvot+ip_{elqqQ*&Wb7Lf&&wN{7#7^)QM?GejcVkt@{(;)IWcIlh?yG$_ z&6zPZdXv~dpR^X%4zCIkG=JFk?iwrqAH%A(R~QoLrQ6vS7Fr8uDyr{O2hk>rA@<7r z_Tv%mcBCC$bg?@j!bkPjf>xe|uU0Q6u!J5Gx$G?`;qGPM$3k5gRZdtiu5;P2FCZWb zpPA*5dChkjRxF75j>#s&KbNh?IliT>r)|iqJZ=+!h}#`yGBLYYVbvbQ>?!0N8K7_2 z{7rXFZWL5N^WVuKyE=cN-=y4DlsNsGXEcf|!~9Wt%<4*CY**C*mYWW;YiM=C-+23k zZQXHp6;nbMu<9pbyn*tERkdrh1u?I`XwrWX(z>&FbT;t{f{%?fB&O z>tkU4stIS&yUrgzYDXOI6+9ftNcOuVptKSxVrB2qO6&Qv{Lad|a5FH5|KuEBvHor% zl(GJlpDl3j!R#C1y$WwJuD?WMG5C z=9jT~z5jTG&EbSS&RvaOjl4hdCVKvAPSyCUEcLGC7%P1|CMn&da$3aG0o&5NOQp1Z z!VBRWDF&oNLZ|I;_?kb5S&WP8_zFIY;59-IX=vZCP=|4;xprp&DcSCJiWa>Vl%-AA zbfAkOuX8#jXH!ewf_u-VnT`f+`gktpiU;A|#$&$n{Vd}KM?>^O zqm!x%Rvt}V+!2^@;G}!y43oOMEk90M7k7<9(+~$EOaptcacuIx@JAj4@%ew}6Q{4N zMem;~rN866JGMF@2u>;?!!Cc~AFbX>*EEc|XVe}dAd`u)xg#_ldr7-W$c>lNTMF0D zFHQ`rX=1w0t2$`CVGtPBvXiqlmLklCR8{%mB3JyOOu<8ibHN~kb(w3I*P3|z7BU_S zA^V70@bQB3lg+!kvqfH*6a!&#)sr~6fT{@oV4W6)K01QBWUQHKkL z* zZx25G2$mYh-^E}ayK;s{E;Ns@hb%Pb{g8RdPD9K3W_ax@8sd3bp-ph3IscKhE^ag~ z#$1u_bmD@nVK-{Q3}Q?>vv<82yY%~@wb?v-%mSP)%IXWTAcT6Hjydmv%XAla-eGS(#z z_;noWHnqhJ;IR2jtLXEM<(FYDL#M=q7>ib5elf_FL`pQ?ap``!IwO3^mbmHopkCV$ z!D`SH-)au~A_betq+fBit5pFWuvJgKW+A(tGFHHt+-jyVo<>6C_9P23^02j6CV%!C z!dtqzhGk^&Z?DWGf`|Fz>-nckX~V-0sbYKS_o2*ED8Ik+{AhZglu;+|eS}fH$Bjq# zK@ngRaRQ;w1Ngff@V4_`Wo6guW7Mzr-+?TtdbH%oTZjB=KRnQiOlPT$gVV>drC)pj6c4?h4!>V*|b6+XbpQ$1gPt7)i2$6(Q|tY||tp zg(ZPRyw@Yo#6Y*eP-mPN-5A82uC*;SigiUy(&3s|mZVQP?<#LNCu9CctX_j0B0@MQ zp*pQ5KpL8p4`o+@ndJn15Eqc|P+?mTcdNt1nlQ#AH(s>`!@m2A^4x>9wtikwwfYdz z3M9g6Qqj}l19%-J=jG`t|L}amdLL{keSA^TUIK5P)M_eLuxjz7PV%Q8Qo{8O^-6_k z;);&WHBNb!a#$|!N;Y}gnXRrIsiNh>SfNYzJ(MRJl4}rDvy9(fkiq>N78~XL32QZ= z5e%DA3#P z3lvtjY=0c!yu)U?#rv z1}KFX)caW{Ul@-iHTV{lo@byTK5>?tQ*~Qj*WVwyjepZPm~M0W{jW@B9S^foU(FT8 z>v@jw{I*-8kr7Fjs{VIl#^aNoXusNtZck@@gJMFg7ZurP5xW-rFsLZmD{#7won{;vAnDhTvENr~ zq_Z&=;)8a7{w7h4J?)%Yk#HSF3i%Yb$OHf1VS?$%w>GN!zdW44TxSs{P@he|YTit4 zNUCj2o?l)C>a;bHTxH*EUMuUXzF?SkVKty^j4&&t*QG;96pT+ zI24Hcl)wsu<2NzjRp%=yv_I)k8IDr|@|2vdylP{br;aJvXHS#k2Y8Dzob#0t3@rkOE|0PD=wXHM=<%VFwwxhFv>WHfcOGnF z%I`m^@RR+bq1|;RwtaW#TFhvIMy?W{Aq%ryhCZ3^w*8z|;A0p57=#krYm|5xRJwn0 zaT)tjP@K?xx!*N{sFsw`OJEDGfv_Cra8 z4c0@KL2LR?M829pN?X0M24-&-7QR4Ib%%Nut6@y@X> z4_}fy%8mRh;MC?PP~~*#L$IrD%$K72klbkFEVu7cvF`Bie%K{L8Ba!BF~uFx9EEgP zw9$~k{{y6gu57XEV?iG%-_`HtRg}UwO&kwb81?|v0Vb8ald+({OR|)IzPm80|G%Yy zGrH%cUN)VIV&L$XhUm0GAY^P0f)ltJiSVRp?yL!V7#++hex(uQ{p?k5R$Yo$6uRXg z_FAjCvbs{yS^4HVjyiOqe)_nB$Dk^`Pu-?Rr-;Q6Qr%QKT_vIs#_Yj9QGv$xw(-H4 zHgA@7#O^M(lsHDZMZ$zTBA(U$59g(3y5(`?&t%$WPmgl8{=|EX(5&q*Da;20_o|Iu zJ{>=QrtvwNv{_zyh-FXQc%vd;+HVaQ$4C*V`tIbXh8J56yfoL=BnL?ct#>7}gq z_?kkdMfF=fxzPjVe!={WC(4hR+RT9yNJA;pM_EKNW(LG@e6mHp5A_;Z%--0FExtqp zh8F01uNk1elV+*VD3_{@azrdyz3yQh#ZfTp@oPo4nhUAe;{-IT#IuMlZz5sI`Wt7( z1p@=#AEe>9nRE{BUMSyq-=xHgsm8%|`TnG~;(l1r_Mf>qsy3A^fG}S|bkxa0KfWi* zH+96ad=n*bC#+Ps5n~AMq$SVm9$?#Fwu^gNjv{~_lHJ*$eeb0FjxCMs6%r9%F1Pa9 z11jT7?vu>B>q}wMZpG_=%#FT5^@id;=Hg)Ych^T2f&y0EY|SDOsDyg&+Sd6|TG@H9 zROH5wAk$S-Ub>b`QVscV!sY9?OD-d54#%=bwiWvZ`_9(55^UF0hAntT#M#Q{X@_D7 z5ZgSCDQRbYB#aQ)YE9&YL#s_Cfb_bZC=e9a(<6C4L47V?yQV`DZ8-^GI(ZrJTbn3U zww!at68E~Q%*@j*JC85(3J`ke5YoOn2Ts*YnfD9ZFMhFd-nWT906#di{B*c%^N}=J zmeL)dm$;pF&_#3qXjsY+VuxXOg({;wLUed#`kN}_mrHQF4E<>(o9G_#< z6tRGVY@e^2rGY`kJ8de`^f4oz0FUM+YUrvV&KlnK>Yo!91?2u_q1RJdE$RuXHVoBG z(HgcmXMD6}i#8bceH2+ur7xv&s6^394%|Y+3mW8}R&Jh=ijNg~`bC`=U3jliuDF(q zw~8+gkKxQ(YM;M*7H$-8*kC2q^Y{D{5Zy^=F=`D^^4(u@_VB#RdNu6B*X5I7te-@g z;Ys(MfDDu!av=1|RN?q*+;VSk6k!!Vny2=WN_wXoRLC|kea|n%dh=FAu4@Df1~viz zN0URw+y?i0$4?3rVoE;dx?EUhcFL@=S>m)#_+P5WYEawVx)m3ABMAN9lu#tyf4gdLtJqtnZ+ zA2%kruR0?L7V5l-rnpf`EuGU82?l4h3zt-UVj45KrAs!HQs~%R1tj0A>z|xJ^)A7N zHdG?EE`;_6a535Mj6RxqxW>JY{7lrkwvMwmu`if1!jgFFT@yRc11;TC<+7c%aqYzg zSptTy>jC<~+wO90dGrYMj%E&u76n`PHj-5JD-5nWmMMWb)N-fG65B{eaSO{H>BxLE zsA>J1ZkLnlx5=5ecz}Us+xmF*hurWpuclf|Oj(JG4)A)CVQQXu&@N6=(Irq~rddv$ zmsG4e+6N}FFW{%w@bI_eLXXOzKN}@*h5O&2&kM;94Hl>c0|4ornVr3}+Hx8Spfuit zm>b=mM8G2sz$ol?M#%2&?~~KgtlsdnK3$fb|0H>Y=uF>U6bKEzV0JQ}b~Ay$;cX&> z%) zwf)a+72WBKZ7|pqxz295NF&AJe)xv0p@yBMoD`j|Y@Za8A~i=H`pNmNGi;SFgl*F) za$a;G^q*rKp1h)~b)RGW)_%M;T-jPS9%pj4?D^$?0bEf|C1nZ1>alMd0 z2}@?`e(1)CiTJk!Yc4`OO@E)zPt_sh2>1XuX@S5oF6$wia2jHtDZdL zA5=AD8sS#zA|@Yu{l8lii0S*67P>*h7Wv^pWLqU3&)jJfne42MP={Jx+1k)mbDm{~v-OR2A=u{9;X zSCXl5;_B%VwPL&djv(yOCA?aVWI5z}PiJRU`spk=m&qF_H)yk7vC7}2ahDwaf`U_n z;vR^zX*Xpo*~BXvuP;4_##!rl1?9S?-ENlFcN!`-*uXNX^|=szbNi4Ixe70M+4wKK7b!F-(&)2lXeR-x89N5LI5j>k8i%or~j}O49)$=6Ffb&2N$4#fPmM& z*76z{>=d1LetEtim{9`j72tFMe(w|jiT1f8MFlfWZEPa78GE=|PLaWUGJ|v;MssuX zP0R4X0sZx|kB{=r^(v}Q()sqVsB+bjN8|(;61}K;9l-DX zM5gsZM!VS~zNJMFOMJEL`L2w|=ZPO4l~{YM%+}|A-s{LQbNyfRJMfzTSUPU+2kw{u zLT>vt*g}=i=ZnlI%$IoLFM(~-=qb-8_}AohM*hExbpHcoveB5KKn~4keD&$e{CDa5 zN9Ds0v>!)RxOkVP)Y)n5EOmMt2m|%mF}>0mZ5EKi0_+aC3zVR!(=mYZHl6;taVEr( zBdEznq#Ia3{oLn$VcRk)vWo5F;J%_QD(rf7&M3ylF_CJ68&F8@GS|)E$^Dt25TBmK%``iXp^Yk_ z@|=lBIMGVcu6|)$7pZFoHMIFk-z%rA8QV+On(vF$SNkg{he?0Sz8hj-ItHPOpDcCJ z6qPFAO8BQl7$*fM9GhbW)MbPjm#FDFt*^CGhvFU#XZ?DkkGAG6nAqb;=(+MPSGn;0 zd}C?=B>I)jdx<4p&A?Slr(yy#-dy1e_1Gl>ZEMV?{oA$e%dR*pPKR@&KjlWOo>d1;*X zH~6g^KdD~U7{_WYK4FQQH;glYX~YZdRJ0sAhuJX0#RiBTuXbrdaZ9YfPii)1_>Y%( z?&-R9m`d;zp%nOIftWGD%J4HbIK*Bi!MGzkUZTO|mu=_!Gqb2jrn4?A9U9CV4zEWE z4ZTc}DHf{y$4IuC*Dbfk4FsdyU12!xyLpLq0NCNam27%*8s#(a_b-$J|0%4`LywPa zp~{-xW3f+w^}N6Szn39fc%d8Nr+%MXrX~>Krg7W*0X8#d<~Y~{FD%Bwf{e8Q9NiC! zSTAT%UAI-ZqlW!b6M~-ZZU7D1-8Elw-zFk<-$2*(dA!^b^ziV&#m6THQ7)jJIsicA zmZzNz5^XDA|L9#y4mF@f#>i3v&(G{^vX{eU$?IGWP;a}bgl?r?ezva1?)#UoUt$9G zfbi$T)<>>(=8b8e$7wtQ0xj|ftzGVtZ7L*D!OKF0(-%Sh$o31Ohq_W?Yd+krpx$BT`L!`@ewFT`+WByiw9Tt7c81Af!0I$%}09aQvidtM#< zdA!@=YL&tbjFW!f^03Lo#>FLx8|bz2iev>G9L9j0sY2VOW!qdGLdOp}yNw}rmyOu} zSI1Jzaz>j;S(*7QlY%8Kl~|RIEya+pdNMsYa=Nm2T2(Y>Efl8af|nPGq$ZQWsP&D*yVDlH77$VQ=>zOy3mt4c#*y*FJy$IC6$O$ z`#p&HN|%P3Sl~v=8@KpG<-u#K!$zyjt$Rm5nm#-#2 zK{52uKNDTXWCWPcp93W*&6Vg?cY7(^_9abwQ4WlkeZT+ehg{|tQ1W~|n@Bn5&REkw zVqwPIN?4BcC;xaw2|jj~mxI*LlR^1nu_X3D;mdoun6JGIH1LE0=!whq5+2OrF5Kf+ zk39!S`UriFZ`(;b$E+@h^w1_ggz9M$jdQNUQulmrwcDVHcMA{PGXdm5pgheXu;*O^JUFH6f3KKWIgR(nZ2z zzGlf8FrJA5L+$wm1@(5TFp^QkI-gu>oJ&o3MoHMEcXS(^Li!V#ep0_#zF)fLb~{;# z83t$``E*|KdhM+sp$9Us&`m)}r17XBEDVRq;dHHQYdeZqAQa6Hyo&dJt#{bVh5CYc z1(&M*YCGJ^NIi6fqx0E@l;CNI!VAIl?(QxrGjqE=01D~6_J18loQSpGQ@Fk80k%)sh>9LG0pwXZ{UgoDaoPt0TwLIE|8fq1hyc983uK5o)Nj85 z4C!n=y4N29lG@En!tUcEl(EesATW4)zCFqw0g68-CmpDm;-h~aV-C4pj|f2~O&!|a z&(u0#3k(IAIXSyum~->Ct&8mA!9aZ>xMpkfzlIk6k6xtDIj)r=+%&`!&P3-Xh4{9=G9?43;=nLBE)=*l`PS4s*K`zEp0zO0;IS z#BfHuj4@thTT74)FO+USIKm4XCMD|ic%bKe+eci2pJNIql(_iC^-W4Yf9hZ{yK4No$G zEZl2$rNKr7)fP0^U_oEDFYh>a{x#tt$(SyG_k=urTayjZ95uchqnGbC0oQa&#no>1 zY_TK79~3o<-5iQu6H9EqDUnhSccp)* z<>oF0Lyi0oCmk=b@u97cXNaLTT|?4$>X8YXyG(Dc1Q zC5d0}ucC*yE38xX9=h}ZrvaqFPaz=UzdD?sc0!Ny5j=~II+;*bI0XsC*^=k6{mNfo zXQBd*t+OS%e$U#_A+4zTv8xz0=wJM{XO5szGtUa~U@AiT>QW&^uu^rz%)F(@&q zmKB4jc8K!-l#%ouYr-RHb!QAN&*RR`*6r<=q?iUuC$*_MW7^YQ%t*4J1@LMqB1C{k zBe8h6W`6Kfw^{1UM|2FA;mx&Abu@my-c3iyaZ;u||PP zx$ud+hDL$ob;eQBrK|E(SibR^`4`1SKlT(r^-w9J3}E?M`b1GTc-&4v`ORdS(l53U zt5+rTc6N5lvZ#oKPp|8Ij{*}IXJ_r==a(v7i=dIc6@QOG%IV%%mwv-^w&%}*I>{+T zVO6Axs;X)y8~0T4PF0C`pJaxcY z<2@}jd=756UsKvcIvK0~PJ4DpaJA1K2w|adhBMdu@?%fwuQYny z^yh4{dG+4?({TjzuvJ6oni{L zHD52u7=r6+=0wCVr*`ZbtxWochNj~58 zae=1pB!Tq&6ULcjH1g_PxeeM#GE&vA& z?II_+{U_6E0B)O7%~ZshbK#B`+k|Fu`K?PZvqi(yyPN>$>He8w7l8VSd~!S&)! zJM$TcZ>f>`1EI2$4mfCvCN0LJZRn(zkATe~yAFlx+->RQTmq1}hMH}9`|5msgn`Iq znW}c$1&qtbvJx6Djb)(sVBo`oWo4P zkz`?GN{Q5-67CUy;>4`@-93g&I)J{NB&ZH|GxN zgjpr|riWSx4_#xtGD8_Jjod#$z1XzuDbj^Wt5#Kg9r5oxgqHClw_KJ;Rk?hi+csJ+ zD5hvcxwV;D3sTPhwu50kLqOc->~;Mri^owzsu+2Nm=~4!X!G}uT#tL|p`!xkuXvSq z#4;s@dossl`mpseVf$bz{7^OKD>}!t@z^f3pkLmG~u}s>gBaeKhm+j#CKCg3?AROD`XGU`oNZRj?Hp#2? zX|K@n_itk1N?W<)pM3@YbR-)S-T#ggH{l+fB+)Z{7WKrj!4$U7?_9c9C;r*#M3O`P zOQp|W_(R`-lksjVs8=aLsF!2qEk<jRN+=xQ!sI=%huUenATY@H5|w5n?1q{Y0$ z@56jmr$TCJ<$=kNp|C?S$Y}NQ`2A61RCF}DuGeXos<;o-e#KZePB&w z)PY%f$qttvQhh`j6Ait*(o|@xS1JKyI-Rela#*k*r{x4r*ZbC3@cDLl{a#SLOcy{~ z7`!A;@Et{WiV1L_jC!`FkVmRnUWA;u;W2=`DT24 zJa>FIKWydZh8uhiQb^7PL)(lF>QJ|x>>zIUGm08(t^glUi{^Z(pLKL}Af`bChX3n* z6!_c~+%5soTy8VnqIwSX+6(zz-RDvrU`j2j`<5RUmrsGo09qi~%N?8fbWz|A=*Y?G z>DE^Y2{cbHdEz;a&neD-#h;hwC8wquf?=HAQ#HOJgT(F^Uly-D<;=BcNn$bx%+u5H za|WoLy@a}8S9+s>PUF4p;?t-k$xAcovdpKM=0U4;!!i4lMunaOUq}wMc7qc_2lEX$ zSv~^JVc+r{xMN?hUHhD9z@DTpGqE_@T=OjbH;K?m-?OqvtMDi!1(iPp>$UH?O&u?N zadqWzvLfuYyiN7Ito158(Z}#siSkfF5euoqEaB<$YwKapk7D;+8E{kMxx5LJS!^h6 zBo!W^CEUN_rgyQq;4fQO6UGnp1xj|K6$u@Ps;c<3vx@4Xb2}*Sp!Gtm#kvY-&(Hr) z3xGc|tr|*W;@PW!jc@D>mkX~kFS_spRdR9j`6=(`!IGMucYM|;dA!R;zj*f(P2B7FlEm?5g?gHDi&_N+WokeC z?y2FPM0`b(Oq|UZ7w_HI4QhGb@8%^BO#rJN0C;H^97zJ-Me$@%75zy=|6aZ-9ZnF2 zykxD&_?`FPmzM=yC^nurN7-5e#MD?-qn}Iv!C{~ucODOxE1J=RA z(^KQ0*Be}z)5}htn_WWdz2Jm`PcE?vGkmw$EI|FB-&nTeFS8cmMh=`$N&B1ub|4uE zH>XJZ6pw55KX}0lma8M7awERwYxnj0=YIi?+f#8|kPbAa-DrV~ZfP3@LGw!g%Wn@V z(Y=-9Mv`MYHS$G5A^J?({On)tUz5Q;!sE-cIWw&^Cn~VmWkrn|zT+FcNMiWQ;JzV` zoz%>N=q#*PM)kL(NIr-9O@c8GfYNTB(r40cHYCHgc2^Kl=jjBXX(UWyE%t>fIjoAI z!45XL?_Z7aD2-PIHlE2j27?yj@1(e1qnBb8kLMMA#`fvWder&Kchoa@pA&cp8Ng{H z5(*iM)A2Cre@3QSwWyxsw;3P2-Eui|zJ0)fg|5~t`RuKOZ~V6;R07Dv0{k4jg>?x) zEDkQumkjbrYaSuumUQ=ucKuyIRlIZ_p7Qc_s^3RQRf3}!zX;L=X{8FxR{vZ$tuN@ zaKrYfkIVQ$K1KSFa?gy3|EGZaMyP!-@j(N{JC{_hp{AN{mtqkq0PUuw^{0)URzy+J zpzwh7`?&o}USTwLcuNPk&$V4*4S0RNCIxSBjU7gr!?(UT3T*n|Ao93cezq{9KvoeI z-whd&P#uUHb@C6}m1X@Np@eiB0<&H~iP!A<>o!CE^jAFp*mtQnnBorW?pH!huA(_Y zP;|zeM4*7~`AS?Fx6yW$LMuCMJH;~s)P}}(*`tJ>xMO2un|!vAii*zuzCxv^&Z`-> z>b@;2sCDhN6h>1lycI(?s-!8^Nj1o2>W@f9_~gVd_eoi0tpC9F-S4TVat(7UGT7ZX zQ8a&}agI#^th?4IHk9bQRumlUs>#0!C*kH(cU(omxBPLmFI--D{x z0YNtZ*MPGH_ZTc@cS_>dGYF1g2Zbv-jDT6q)bPajPva z-P&3&eN)8Bp|-nfcSc#b$9?r(wBLq{i?1WTKXICUDl#XyL9=Jc^3W}0`7+ClR^aDn zR#9^c@x(Q&kY2~}iDq6=$=CL*5g{iT0s`TgO~NHA9nzWudYL`N9!Nw)3#-JPRhUBC z%Dw8rBIWFkAz3-|(KhBFsO|p~ob!uj?T7rg#RP&TBBh6lMfWNoWV!wCdVZJ&3@t~g znM?A1E}7h5XZt2&*&6bt`G6*qhG>!O^87zrF=^to?E`&-^^w{epXSkxm)Ei>SoGH|^ilJ3 zQ&V5dwn4qMfa9rTzPE;c=~{YT=2h_2aR2bXay#)w<&3*yWxj)N`rKFOLrsP zEeI$eAl)rUr*yY8f^A}EL(g;Xxz?KVSpLnpufBbg%6GtqqnohUG_{boAMUB|~)t07@pxGh#Vtg>_ldVLe&+`2${*-TmO^&3$ zfYR79seC^<@AqtWL&|TI@o58XRaI<#eSKi`rbP~sUdrU z=oCj#V%RKsuuW~uup%{+-i#PVHabSwS478zOAt1+%)dgoWse~vcZ~!c7z^gH9ciI? zGg1~zIMHnTlWWQU#jLPh;@_6X?Gur^Z7{3Ceokg$_(@${5OYXGKDnUO=o;U3!Lyli z&9=vTHiaBs{HHyz29zD;+iTv;=eGhW>ajqAS`*UBl~(}AvA`13O@!R7ef%5i0KF!U zB+P#Pf`kQqw1sz18BFTDZq~@3ywQW^KHD!kU!L1cR8~=c6p%kwI-NNs=+o@CbmUpm z+TO5~_I~uRZs}m(mbcI3KXeqRHuLtqU6!eVG0Z2-6661!$$ar!^x){HQJ4g`%0A)h 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

jC76<_eykE7s*vuPM%B$&znZ*#(7- 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

(; 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

BERv;{Mt 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 z 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⋘dE2y&skg?x4PIO~* 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 y^-<`LK}+HJ-AwqM+fA!KD2Aqm-=WRtz# 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
j5D7wugoWh9Goe|si^v~pHH=6j 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�cSTu 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

bC7iuB?%uYO@dx`vxy=*3tpwQ+8T?Nv2< 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�pR}7ZOFe zRS*61@ytJp0q%~C^1Mk#8+650!sr;WkSUOeI$gCb5e0gRTfP#=75dSE7R(x=1rKEv|6pQXLffu;nnCe{qJN$>x z3H_>Je=UNt6pLu3uK$$z%5ubN_T%Ty40)hHA8!AdX=bgU-u`Ch#}Kj0u$$4+H)nBd zeoUM~&7gybB_UIO?9%)Yv z^dv`>;>lfyEIjx%(HN^GJK0ngh-gfXP{;CEhBa#@4_OX)Wj=*)GqaYJy6;}lwa^@3 z8Dc3mHkzXvmBV-oXf#ij_wr6@ccSadtPNk(!S`@yXJ_33uJiQpa8ybP;8agC`k?r4 zeGx#aJ>w}=2WRvd1pcG**xQLb?#o@_Yf}C|Q^PKxpdPz;Nl&&5yWFdWGx^Vnh>Gq4 z5b0_M-xWGr_`KIfhDg@PF3|2jumXs_K9n8*R|JY|*oR%BZl7~IqOqk;yU+iBibKKO zrtgGu_9^(q^g5Lvf!;^&jFW*}+7TbCaAF_(8iw0YMrxxSqJ$-ocHIlrZN#!T^<55D)U#_6zwJvbjFfndEPnqs+}>v z%nIEL5ls}{$C%E({p8Zs>6Tb#B%0vp&`mykq5WgUQ>#xc0dt)JA9PMlvv%=qhQ_(O zyfOPKUD}eXjS;Zy=k#DL59_eYmD(IENBqnCGe0-7R48b@O5b%nh%T_&w{ItWTSKuE z%@OgJDa>wca0)YV#*>u8#OT0YvlcVdB9iQwp~XHqIJF+m@iPSn_d@KQScb;;5vJ-D zX+mH6I8)F4rAU{k=T-JR|M(wej*wB1ANVl&DPH0>Hpm!MT7W_seg^M4+CT6ys5`i|Z}+f;$hF{DmWQPNP`nK&__5%h zhi|#2o?zDK8Jx2kkd9pAzx#X7qH~0ibQ^QQ+-O&oe!JKaJL!u77rhO^`lRExujmet zOS+s^O@A-7jak#y@ru9JZfPoo*?d>a?4hk(goUCO7@Pa`r zl&Y6HH|e=V^z>X!(i&EHX1S*)G!nkDCM{3&m)v_NvtRg0WForok_iP@p=gjVe`Fcl z^Y{kt#czQ65E(uDk{G<&iEI;CKC3(K#zlP?aX1n^7cFadFBIrFi$4*U7_MMNZB1HL zH?zAYFXJ}5y;;*kn6$FB0sf26j=`dh%z2QEb@j|37T~V74`)i-o-O*fUIXm4Dk#vg zT?;^Sdf0F5KYvC#Tu(X7xJuL>Z;Z^M(RI7KyE8zKx9sIDxZ}1)GU2x(>eq=yjbH~g zG9)Zyjs<1R_WjP9z)^q)hX$~VNI+B>?RWBPV1>zR^~bWrf8oM?Gb<}N@c2m|$^Xj? zZN}d3C{XOMRdIK&>PCr~WS4(mepN*2qXl?0aR{c*K~y>S(^v1=$jPeU6>Gt}RDUje z8xH*lYCV5ZTLnqNGAoVPABYJYva(l{%91ets_S~g$KP&#|1%xtMao-Z{0}YeWaQ*Y zt*n)TjM3m;l618d7Z>CwT#eUY>VV2ja=BZL)9{oa3|&$E22Dn2FJI&p#wHPouz#^X9Wg*}K*W zRWXZOu@6ksBqcuhyV)rz0OBFjixW@!iG){_JLGl&;qRsulZ9nAe+h(T`<$g?h1j{> z49`6{suR&NYNjN*+~4~)F6a{|HrfjS*-RZ$u*bD`mpOc->KS2431f;_$&Ss0nEXDH zPcu5%z`7uK-z07A(uzamm%WZibYC*=!p;`s_qF5u1m~;YG(I@};K5&>ek*CzCb854 zAT=j0#(Va0d|UFdLc4j6(ngA2(s%Xqq7ksP6jHd$t(n@Llc=^Gi9+?KR1T37ScWZkEVr_~U(*c zF>8OJ(yg`dxYDkLvDuZv2=AMYs)Ef*;uL-%4)%Q+InTYu4O9@*RW_i;xm5r|H|3eC zZW)MZVD!M`3*%<%Tlnzqc%EuqZLI~+L0)isq<{xXW6xJq7f<$Yu3PKF7`=N%L_|;w z`<`Jf0Qsek&;Me;9nk&H0w>XBV|d0|C$NFQjuN7Nyq{Nnyd$#vg(Oar zI`g^r9ew)mE2fqo@BM692CW{Hsz-JlyYVkSnf*CT6D^h7HxbXjeb?xFBPpNwOgDMQ zIx<#9K4GQ#b<7O^VIJRI>aTlOe>(fjtKQGxU@WwxT&GWnR1M)iq@U?phw8rCmhi3N z4MrBiHnwC5<0~tpW>{Up#TZ89i5OXr|*#R{4B* z1D+r-b0b@@@L^sd+J;!&MH69d$Xd79ewutjQ*wg9R~m2Udnw*NyI&X~?%k!g8hh9b zZM6E%%Zdr%=hh8Sx?}Ltpj;oqw9XqOz>4kF!gi;EDaU34`Uoriwx911bIa+q~L=*WL=ttW3Q z1ad)9;Ej#DC|Ru5euaAM>51L}D!xz6?9vkq1NU_m&@$}6_}O0=rVPIGmJ&vJ;G2)- zeTtKBLiY{~`t+y7Zds98>iFd^{ zVv>l6;|E7?YR5$^NHY(UZ~Z8b_9=z=YC^tTU3maNDdfDzqCFt*M+1P*|LmND*MI>^ z(Qj1|1u#)+!2m=P4YVK+-!@GnO)D#aVlg|{KEMj7xow!O)8j?iJNTqYU!tnfmC?|_ z+e3-)+eM(XvoP_{!|#xq+m=2wz;bYSqY0ePtQG){S3ykkVtQ=s$2`#KgYM?@8v|-A zEkJK{{Vh+^efuxh{g6sPh1h^#Kunxm7`yMr3Xt8 zmfkVN3z*y!Zb+EDSKp~gA<8Z+PbeH66Df19qH$NfVB+U0j{|Q)Ok227B0ro_-via^ zavhk2Gq!Vt?D(_uy(ZthYLx1tSg~4n**9)cs{^uS!`w`^Eya~_^=>{d2G{esnH(o4 zw8r0VF)#dgD%+B~r~l9J#24PHZq(tYzkabwiitTY=cP8AFm%-0IXIMWzT*+AWml~W z;Ar+*>=bZU#%}uYguGrY1^-EOo)qluMb8slOxRsN>WJ$zwy~6otd1R` zvo+?#Oc_PIrJneOQSvR{sNVYn>(@S`oV#~F`<%fq;QB40%&^(o#ow3+l=gI(k3{g? zfo{=pEurzvg&&FYFZ=QjpEo7AKGG5C2HO8A*Oor=`mH!^#Kfjx%$fYUi|zh&E|@E3 z|Cg3q%B9L&@?tyZ?9;5UMGV`Qs`(t5X8%L;lh_k=KVPvA)8VtXTDu~3J_lroLzI1; zjG^SPJnE0JuL8pMgx{@H8UHeLn)VZYt~xtt+K9&Bt%1(sSNCk5eHf3`P*gzq&>5w= zA3;`*_)1^$CD8&$u=y(g^2NXzg4;?vOZt@u3#IkM^y((XQBu^u;t1x+-TnRYn5x06 zZ=u{)Dy?HyjK64w-VY#fnv);j4Er3`ossf8X0`Bh7b%_q!+$IXriD2Ez(dH7xF5jH z2k~VbspP@ZN8W#_i@duQ%EIxA1z^*+?K40pdc^H%a6cXrodu>^nE;VobryhltdY5% zkg4^@Zur+t6ll)g4g~^)MpeMD`^y9XX>O4RyKS#Qz|gg8r#k*Q7h*sVSKyB+*abMe z&DW=po7!9J=>y>A63k{SZwVqZ|NiA%W6E#-v}~z6RNdN5bX|SR5DaMELn?xfC~kl9 z;zh=y*Sqci(%KHU7~Kj0UYUUoAop#{^gU7*6!bYxTeQ0k4tJvgRLHLlzx^}6^6S5v z*ME;p#;G_pro*W?QAYdTNhwBWE0F7L@GkHhs=Z6$`CswLmyfsv(JALIfv6JTKDn>; zC(w}2`kR?`Y5?s&oSK=29COWd&g?VE42#duhy5CcS-2$U=7E|tA0wKHB$Sdpq04DT z)u#m}r^yt;)m$8*E$xk1H4oV?a~+Kdvg2jq6g`xT zv;5(z$u885nX%-R^IpYcW*W#{)p|Rha*?aXaV|jdb>vej)su8Z$REnD)ZZt!LzH5k zZhkWZ1n?iUDu{*teZdA7+vdSOk5_ZD=hv`Y2?uQOUds0lgNjRsa5LxgbT~TocHD$0 z`i{F%dj7wgU|*|^9~qu9Fs~G9s)bmQ7ZJ)bYO{}qQvR_=_62No{!j{O{=?`KUc`~s z<-4+-H7!_Ew7j|%vr!xS=v`@@&|&mhshahgNOQkaF+AT*VYf`@RN5hc{!K^H2`yZEtILsd|1iG?rFYVN}Kc zH`rkz7sC{aG}2%N~f3NjtcO^JroV6uzp`IibCi@}jAl2oHU^BBDP9B>x9<(>x z=|%6QBd3PK+)w8cjie>3E`F<>(k1-p`>XbJSvsVDdVS#uXykW_S}828JjYw-u@~P0 zCt*B7f+L~QH>NX=-%5QoS#20<_f5Jg;+)in;8d19pz-0;)lYVOHPLD*vxVOfi7`pV ziVJi;%oZY`i)Nhdq&0I&4xqG zhbCEJE5|SWG0BoP^2s!MO_Q42SdwcSIx3|UMSkhxh~J9RQOcXpO^PLumq0P&#S``o zcftx1k2$9>bq*>?AM|h1d$^J=>k&|Z5DOeJ`?Qe_G%)403kJYp0qJYvH4yLpzFy|T z{=9Byx{`hG11tcJT0e8k=LR0^j=l2oK~=)%%to?g9OC-AfY3Ta+6U+kLLzR(g&80y z5)1IE{k*WhqCrSyg4@IjpRQqpV|%90p7`a^;+47&fa91Opkic-J-z{+~&tB@5%xoN&?l{IUU?yZJr*+{#`0 zt;<^fBRaBjaQeIPfSE&5fj|KxNNwk6HWMdZi_K@H6YK8yd>j(06S0&i<_U9wPf)WF z%}(cKMosG@C(+_%<7X@=3KFq%N+N0}NtU~2VCz7AxSp*? zqWS+)gYVhwbeeewM;y2`Sp{c^!)o&sZ5~-2Si)nw$N;LbXEnl;={pcM6QJTdga=cYgw;1orTQx=WJW3{Q z^!3%Txq0w<-5&ctc%|{d2jjcEtb17|8f`fPQ<<;4)jHR^sf8zi9Y4ttVtdbP+OFXydDnFfecs;F)(a zY<{j~K_97LTPdCJ&xOUn{xS z&IALYl#N8U9PrpIZ>&4&bV*}dirUg&#x+dQFPuluH~SE*y5qit;B({1F*3F z1)Pxc5J-j0MVw4!pSda1QR#SISL=DFpN-RV85_9RN>y;1EfmU;dM%przPnu8-ems`{=TD73d-+a=U zcYms~Pg`ecmlHs3*>Oriq5Do`1cjLppi!)frqV}5i7(RTu#X^akARxjB~4h?3A zvQX0PEV9m`-_`cnwGiREhE~ci)$(|;t)6LJdHyyvRC4F=bW;}+IqhRT*`)uXUX@<- zHfuH%r}&s7aaEj5FKvfOrA>9zCQGkp)N^O_3k=lVe+Lo3ER%fjol)v5L za|1a^=BR`kk1q_CM}Ub8XN2Do3*51vU@m^-Sq~f4i_8jy`tj4PtF}>+W zeEv1?pfRlvY}Dr|Q7U^9IV6>G+hX7__lr9VB57rw~KzZjATR*&ZpsEPn$M*Brj zEme6kvOVO7k(c)X^~4UA4n1SJ=lNwfB@g_Mc>Y*;hHZ7fn)2C~+8E`U#+8hp0}l?% z30ZDd`U)4#O85UCQ*Rv>)%%70(jh4!(jX-vNGdgyinP)VQc5>cLn8tb(j@~b5(5lF zNp}q)%@9g=*D$~kXY+l}?>&bnd#(Ha+~Fgx>#f_!>}OX8)0fQ0sZFq* zA5^RZy%fJuM$r_`OD!t4r}3_h5|3QOGS#IJe>pk!>3y|k?3#2!{Gca_NF~>QQ@*Km z(suMwo$rL)eOP{61h&|%?a@#kCB9aZHlQYf&!WY>ncK{P^S?< zy6gdwvK4o4r)w#C|K~v7jhTR;huS5#5AXlv!0%vA3-({XPm7s&@BW{S#X{U-_E-wr zPAqL*{-i2x4y9g_S%2I!Le~+3FmAIjk{lcP8dpK;de0#Ls=NOV?lv4m-yijM7ON^UODpNvFf*}T4JdlZTL=|Y&^^9P zk(!tKsCc}j5SfIw&;2sX6aU^#AU{G7{?UGAV5lSYT!voh1&nI3Mf5%mdOC45_UmS# z$|Tp6Zz*H3hs2h4Z#H-gDC{>D7_)nZ5Ji|xPa$1)^wt~O7p!xX$Ckj{_`xFh{=T;_ z1(Wf|hJE2Bj;x+n8=4=2JcB3yH1=onSp)de{wc9_jm74?{uxe=8|HB?i}%mf1LEBI z8scA)`+WSkH{=?0QaN@D1SGu*08;CAiwkorfw4%&466PJ;K(ho0J=d8oE0M+aJS?W zx>*+5y}CF#0|=GV02sycZlf_|CyD_QEbW2tHy&re*8*fosr+|_0LbJI@EX4b{Ei@g z)jj+6yx&`jVy%4!yhIKds49NCLj<1zu<0Cla2#y9QN)oOHyVli;I@^ET_@!=)hsL z0Pr3-6QJ~e4yTZvI&iXmkG}8i@88XFLAF_>-g?hkDWE=^ydg9aLHjC@33rOZamxR0dliKNQ>n@B5cH4RSru69kfmr^aeM?GxD{brlVb)6Iw{E z6%3xnOB&ow_HB)5EypuA{p}3N+SNwtn-_X57*I(SPV)d?z7vZzX)zZ?qv%6ywl!Zq zT%utZoSIX-!aQahuk~*EO))6a3lZ=eM>aLe zG<);AT1_-)7h5DOqkL5_ttwUsXEy05<@t9Cq6}t?_B2DFGx4%^O#R`urxt;STgjJmmXLYtAlb-sWt;?mHplanfnT-5x?*|2q($(t@s1H?)>CKSrX$fnC^}&m%3g{ra>~?N* z!o#PyC(lj~Tl)t@)@Qi_EsCd2)IsMbz*bmd-R$%{_ICe!9E?u3mg0)lZaf@i?FE4X zCYuT%Fpj|DpbWjXZGCY=*Si%i{Z~1M;@hF*IWvZEkoo+P%=vw377^jl?4w#i<86ia0?kJjv64AR`f)eztq1~{)ZvWkFptox&MZEfu?kn3!$kED1P5HJUz zBN&N8fNB)IZ*=-DG28sz*}&}vD%irmw&m>ie;b8I^kyzD1f8x6mcy=t<8~TvL_X=i z7cqg2OwcklwGZ*zDAXhwnmmW7XyjX}KA!2t{!Rs6#v`IeCVp;n<$7(-KpOp3iRSY3 ziA6X>)wVeTc#^wixrO~-==MeDDW^v?)TTO6GhlV2D07rWB4N=!c?*mMa@HGR0f|{3i2oR`f<-BYrKGBlW56#qdi85-nUs*ERY^A%$vH zdQ=wbn!`7$x(!x`=Ue`r9&R;1%CW(l8o2HGj{XZ!LBCvnzc_C|Cohn&9gSvARNyy< z5Bx?w&DiEq4C)gwog{Bv%3;iJ1pqU^=uzX0x6Io?RS`E2*&AO#Dp;4n`TFqP5-o0#u+_FpN8=4Kp!;D$F4pF? zCOJ06GnyYrLo8sYgtEswZ?b!2@Jm`VG`hT^9sOE94~O4e2F5)_s}Y;~C-h#A32UMD z>I??q(M)Fk;2jLA&~%3EtkC25YE<^~v$Oo0+ELcLl^&$H$-m#gV!9?kyV_)oC$nrD zh8V6CT;iZ_=v@tV-5+#5(9>aD@cMxK<2*Cz35Z{76L7^Z)TTN18S9r_w=)Vu5WWu7 z8W_CEg8f*p+aAt>q%QGP>KjH3XB7%_4+M)P(Jw9fpB6w+!PN1QsKgc(&0<9Ddhc4b+lk!dFjrM_Jc{%6PPbLIXd#!p-;RJaPhw7f49EK z4*s&a-O*-8e-DQ*)-o)=Sx#sUvvorzVnP9PfZr{lQ3h72NVwQMt%eUGfXghn$-6LC z@R@|fU-1_Ee{1y}?o6@}7;g6C$TzJQ3Z!YN=neqgCm=iQx%BS@;Lof84|^r747p*g z9sizj4Sa=cz3~nJ5+EFb0I<9#4@fYLt(ZpDt2=4z=4aqtOZvIn^hV^{|LI5WKQ7K6 zS`J*Ek`4HGdm8Su_16#6b9=&-t$_jii{M}3wa)O3CIln9!24ukVampc4?t_UwDeA2 z1V<$7?{|fJcmWwskq4@B7kgV2*JD`81Q!{2qqSw_#GYE|S){nc1$gdnm*Omnv`oLs zuc^~7Ou!v*a}o+c^-|0@k5v!(@_Q4nqlg@3=*|PlQ&yf&@(@17CM!w9xx#Oaxu@0Q z;YKCmWe-U%vD>nFua$286oPvpW6rhiN@QM{F?V$J)`S(&#bC;lZWycH>v0et)dvv<8ofyB62Df1I1AaU_6t4GZZa@! z;&OIO)bP5W*WZy2376U5|Hi2qT{7S;=8!IcqYt zXU2+1!L{`1dpmxR>}u?wK7zdIrs7G|E;mp#@XnCzlJ&E^2gF7#+Be_$^Wjcch{GPH z1>9U`asph&gx;4>dHuW38#wc9au$s~L(Q)Y%qqWR=zuA&j5JF*BvTdK zP50++eqULt$XF-w*s(rUQU~{(vS!y{@~aCr0E$ z@1?#7Gw^f@cg?_iXx`TN_e zVDNnIjZnhOC>a~JgQY^UB0Ek@Qbc0)2pc`5x3{)7!#UDNHy ztwyDvbtI>gCd5)pcmV{6fF|+0o@^^c?V3yzG+SRV!8(l8Aq^J1aP!D@$z0aUX+P6&@f~)b<$i$L=;@gD8kl2Lj zi?htVVTfRW*7VEI>T_c2^Gu4jx_?ZUZTOnJIdvl`Do^~(P7$0)npSe(08XJ_c^hXc zP0O`UVdr|My9r|ZZ5zio;c`kL!+m~{PVvs$=n$$()dShL%)^ZQTAD3Fv1O@zJZF=D z&F34!Kv;6J6>S!sfF2WYjLBgcm6JfeMbt!Cpure;;0WVcb_2-4snQ-yfnB@y)l{eV zZ}v_ui=Tz|J>dXk6zPTeOU!26$C8{nI{PG1AK5;;T21o3{!I(OHs9R*55wPWLE6@= zd*_w!j_U-L#Xtn4cgw;5hlik6HRf_5u>072BYxHZIe+Fee0vz;>=cBt^R@l}yJ2Om z7)Q_BT3`}xXId@+U3_}3ti_eR2RV(KTU_`LNo){IF^9k>MP}?*rG-PQ7}0k;mNd~q zMNp`SPaX!`v{knaHF~8MCfck{Z1dE2cSas>eiZ-@#Yr+6m^ZRz6Ey z^3OjHsAzJ1x2L293p&$%P(xtbfw1${Ft4ZFXn*JiFCltB(H89YBxSWVS@l*7l?|27 zqy04bct-^dAm%1!(0zrTHznu=w?HU3V|ea1U(Vzh=k1u{Z`56_;3k z{(yY(@U7&`yjqfi?A$7$me=qE=X=4FLBkRp2oFzk@+Dh%rL!WrtL&I+cHr>XD~M?( z+}?akDtcR!0lMhER3G1x-|uXpau)Zk{+|~*G|p$kXKm|AxU)|WubukbFeV!oqdqH_n+{Ia9&iSfeXDi$k80Z4MhCfG%r}Xqr zrI~L~^f2m1J47~6hYO_jXWA4U$TO?d^oydkD?mi%#SamOD~=a+D*;&<3+sgIbA7X7 z$fMx2agKpbrMJ_mhFfEzHGZSh|2s`V!2U*NVKx(C%YaJEY(ccSDohra!I#(KLe zH=XL5v&DAAcV7I4yd|yaNSQJLS}*TRl$^^XkfT}1Z-d<=@yQvR z^UIi4ss{uR$Z*(i%7~b75iZ@{14Sh_Dl04dxVeoWBosZrB_A=BKA|TZG6x9p_9}p{^!c{dP_c6zm($fOYun?F z{816Tdj*@xU`JqwC_h(pF9v>W{*fUmc`XLfYaO=wX0E>5`2;mez^7qZUQDir@#Fg7 z{{mMt;+<$@R&sgUM3NeN}?ug|!vE-)5-j`tDTwR6O9qPZigH^5;Y=T){lG zhGsL%%8vhqOzmh!PQ4|w;DaH~qC~BZ!lV}O@`P7ExOnl1>&I@0Lzqj9-JXm$m z-_kE;J>}RFmPQB}wS;o+#UTS!RWz2A=%}oTy5j(rO z3at@06NvjXGg-1c(_3C?PNHjd7~|Qk?@~(Qt(9a+NVhJaXzW=X#NXx9eK)xS-IqQ> z>I#qSUiua!@#rjVQDeydR;_;t*vw*gBNa2yY~4)`FEu(CQ62X+Q*c`lRfjw1k(OCcMO2 z$v63yPvW&ug%zoa3ke%`q2j)qZ&2uW4N-`t;k{WHB|H`| z2T|{c)szXoAk)0^yR`ZKblA499l3dL-{A8b=(P=V&uOvsQk(%VE6n3jH0c;akhP)? z5+m#aRf%GkbO#+M$bu`&+)TifH}1{AWM8ppGU}HY%Lr;djQ_AehI8WQa7NBFvQQ>( z^g$hWa^CsP=iY3U1P6#Z`ImRk&8HF4<*n=J#S6GukcX4<_$i)R3`nmq@ZintGhsIh z`jbY!_q*QTgc&vL`SE!#SEKqYDT+PTaeRud9Yps7%jp_J$kp_T$S(ZK1^eK<2P`kp zSM|Vd^(>F~@^m$#^m#c9=~l_IxN+35pes2y{rGI@Do;}#xY;94iz_=IRzf3$6}gtK z50l0R^;c~!np!E(TV#}91^QFS*bja>NIzs8m{RusxMwh4w{q+7qqKE|B|*j4`Ktp& z0MZ}Rk~STihV^=4!Cvz2mgX~Ok{^6^fbFrQhj0o1-&T!{Gzw`!JIU1!&luhty*>LW zdvt0Pu-6Q$CEN$sG+#{&I7vX}GD$Y}9JS~1(J>GI>m z&gu1krUpGk7Fei$v3``Tyz892I9BU{nf$2*%VNF^2|``RXmZgh5}<@wRLn3B9SApm z^bZ4U-th47T}%Jh5Id-i${>GWT6x7UaID@u34;ES;HT5fF?~TX-ri^q$}(Ne>6r5S z&e)7A5v@qrG((>!ac>F8`xa;J@pXwNSGj$+<}hTl?l)Y=g}=aJ-qqp9<+c*b0m!>Z zWGQv=uJiyQ|{60kfuLMf0!8ezAJs& zu+aSz7Z;a`TvX5;JQ-85Hivnd_YSVQ?whC=1_~Kk1^GGhtgbd!W|j?JYu^wr`Yp;n zZ>OzhXN8coiZa9jOJJd3Ymr5u6^$HnK3N@fX$i0jkBc<(_3Gu`c;@`JPovn`zLl*} zS@(UT%MYFNrlpFD)DHMH9tZ_=5+(xiD->XZC4jPG+O7=GX&^jae;W_FlW=(-WFNxW{U-dfR2r6#_bIht&;CS#l3h4OW}q_~q2+EK!iM+h{8 zopH_aT{8~67P`xO`C@YQVKK;dHyi7AVmraPz)VihT-0R$zS>anh%C9+X8<{O zaLPyUiEsK>KmAxf50ubMNqoM0qm!aY?lFEEH9TZw`b1{zL~Z5+c}kw~oz4F3k(I*# z9GH}eHlvHA$)?)wzR#;*fqRT+=gIGPLkZ2TqolLXragyePv;O5$Zt0+(w7FxXTi6v z3AAcoghvJOH+gW@b4U-g?Z1SdGHp(%^3*9Dtf0D>-0U5oYBjR3CskL-ot`!YZWhrm zzvE4K-71p8N7=(-2|6>nej*eni>Z99dVTP5O8%0U4_8Ko1=JrpeNBGLPCuk?K{tRX z19$ZgK?BhFl*IYSFN_75*PsO zzt`o0dIyLC_-*+6QdZ==O=oon52su=N5^>w{_?zw16vn8aov>-d!77+*SX+P_bY`u zg@Bwse*0uLpCvtCplNiRv{tl%CTc3}6j4p7?o}yWt~$7E|1g}QLO)QCAw$K2i}qET z>bpP?xtRwTHqjE;2If&|Iy}O?JQzE}DYc=MxD3JzVr@kkvC}NZM9(|o55*_X`^%*U z+~S##{TMd~~1^#lu|-5BMN0Bv)~<)K)HA|6Vy=!pTy(w&ECM5gnW_TaaX= zD8Z18o;JuYD{lcwY>YlweaG7E*^1{I@80V5r+1yIWdrodYjz#gDBQIgG2dhWsm$S8 zzRyd`V2zd)z6Bh7Uk7&2CkMg11%{faXyMzgjanmR!thW)#{Xm?Bczr*HWPr`AX2bJ2NMdCZqR!TA_g z)50PCa%?jt)TMx^(|zk+wEDS#EfjcF^Hf>W%|zW4|2Gg{Zv6i+DT|gN++uU)2OZr5 zXOPxo3#W~89XlF<8ODR@+nd(r&RRkB-Mc8*uUL3tM0PuP1mqHrGZz7$xzP;8LTVyc zicROiYXGHE?rb7s_pnzNCzl}X+_*&N=36)`xJl$8ME%zYryx&F11FJQ)QFm<$S3TJ ztdep#`1EMD?aheDgpd$+GQ+e}Ww+o-&K?CUSfRUgXh>rY@J-l5s|Edb^B8r5UL&Z74y5cUZb{cUiwJV%mKN~l!ILzXaIXLfr`C@p%U zD!!GQ$kTSTcF?In%B-Zd*Uw)g!P4F*Cxc%YVhz^8gtSIAXO$Uz3Ck%R=9c|%oF7Y} z&p6qV$M=}W3UDp}Dpfl4h20JGtCA1wtP7;-Eaufh#nbo)o){-mKLYLPbksNSJ-Z)} zD*mUP$1A$O#;#W{qv>9#YL0*gmG+~&OA6P7yy!ZKH?3n6u#sscm)#Zd{O$ln^B9;!2)frRD2H!%7j0~mIrkR(h-@*Qi2wG`wbgS7pR@n84C8w?DL zfa{+}2JKGP%;Qw`N<0)ZjJAQq-DyIR61_gSu zj*zAiPJ`XQ+OS^vwp?O~^SETS0_w05WzAQ<{;Tp-$^3Q8YC3w<%vGQg;hwhkpHz7K zq9!D-6tpyKaLE4nMLcazduFGu&rdAmH{ijx6l0Lw>Rd~HM?zOCE3 z6HXb^;%+&~L09?3jBnrGq%=X|EMH=KD+S5OMVcP*r|OMK{yle9(=S^Sj8)or?5^|B zzz@lLKT?1ZviY=fQAbH8{)SG>H~+3e&@QgOHDl;4VA&{16)lu0a#c4Q0K`te)3VC+ z3B^pf-kq*NN1m0*ugjL^A<`wJQ0qn|;13>DFYwGcqB>XZg_Z_PD=(y?Q!F>X>Z@(0 z^bVG0p3>nC2c%M0KH4Hbh2LU%B^29ijs%W*L%<5IN=dmJ!oTD$%)WMDl&Yt=cn*-~H7{F*vx}@q@?7!@cvtNn|Foz?x++ zOqgcMcD$K+pYBtq3#@apCIvPetWL^64x^@Tlrg2oouU_-qGAlli9NW;Nj&JiE;Ooh zuo6^kp>cjUc$zz0`nMCy&V8A6fSw`X=3}4M5w4Q&H%Hc%7;kJpOV;flV&o;(5U9>s zC$9$(RdF!G8`N2U80TwQEMz$-uSj;kv>E=)(IC2P&(U28Y4FX#DeOS_@=!-0YNkX` z=6l(8%J5oHk5|me+`fjAXD$qoGzHHBSKQb8!OncYqCzD1E&_&?;e(gGaGEM_=_m9C zZzYE=XB;br|8p_=ZYg;3n2n-9`4i%U|MN##;lF06wy>eItGYl%A*j&gcOI|n{ezqG zW_0sGO%!WT-8jzhPr0)4NH!)M9J6QC`HMQ_?xdA&V^3ZfD`gvF!)&NDF+I^(8jszz z=~Oy$c}#*wG;xUVNbDv+E*^}0_LwLdnP{2 zCWqlK-OGjCyDm^fWhk+oT*5FCsgr~Hfqj5N%D=3o7fiP+f zDYG%tJXQ%swF~&UInxPYA0iK`FIg~)wNn44ji>jwiof|@OpyOc*ge)U@ewnk7_n?V zIr{~O8EEB5vFI~N`#?Vv{Cajssm=YKpwEKfM_Qp&N;+$JStS)mV0x#q!88iW6z<3h zfsy2R`c={)UeQ)7L-jv`Fj|*cl5F6Cv<`I=a_(s*4!oY0&Du^mI56Z!-SY8MKW;o_ z2Y@?ikw8GnS|`88NpY+?+X`Gj14%Z-TcehmejumDE^)SUQ)qS#l|F`#+BHY~|F$vs}WOQ=L_~%|V^Qm=l zSZEK}y}lp1+3RrX{7=k=ZrYGNi~rcv`6owmyx{`S9Ip*E8)Ob}FuFa>BW5xjX?sS< zHQNCt54FK#9Va{r57**#b`KV(9|RL~Z8TXLu;Ss6sk^gLs<@F=`h*f34UP4vU) z6`VDqpPPHPf|9ZwIEWsHwf*WU5acu&e&rEeV~2!%Qf?z(sRVM_w7rRut1s>c5+xaP zwS$O6Dg><~ut0*eOnBlu>q?5)hG)g+EY2vS`VqkKqz$7)@QK}I(U5)>5a*?HfRc#$br54s6DD0Z5qOac1_lhhS^y+J&LWvF zz^`8yZr{Sqw?LsP`C$Do<2G3>H=k`^w$7Gsspf^Usx-%MPYlASdTRUeu3Jzl^x}&|Peoa$;utgKBUM)mcbDt|Qay^B6P8*5E?T}W&(A)CW zJEp&z?V7zE;b?{sr?ny796d3Z&xyGx8DVJKafM8xE7B@unp*sccLgc%Gs+Bvoo1y! z^~j0AbT!LABj2w*ukMyu=K9-weIV zPUEANQ?+!}fR^)2&HJ9(zPfKmXSo7A3DTGN^>;x3@X!KiMTZv9xOK-~6px(uT1hrd zrIdITOO!Z=R$JRSPL@s*G+<%wbBz_{D9KDaN-5qjuXPrGX6sp=hbFyvI7;S*U3T7Y?~d!msSzy{)2dQKcF!=N8VFuF7^PGIh5%n7srbbaNLSe2d;2Rc3Xb zJO%Eo^54|cOui~UV3EI#O9nXltg9q0{3#Kyz7s|y3PyW7Qy?8poQKCVxAnrGfDhtSr#zQf$G0#&_?bF7~=Zpqsz^+zsi`*E(A>dDt6$#vR;^e2stlnbTpPUz5H;A|T*_ zs0q6lswUoQQ2sJ|$PO6tFJ4ala!5M|703oTTM8C)twIN<_%m_Ytp5_3eJVLPa!({a ziA4(+@5s|tWRfY6 z>qEd~QAY+#Jv|G9zb9!~ElC)im}aI1>}t^^xYDx=6&tNBj!_0tcKC%12ZihuF!9|& z>r|Y%X@TSwZKt0qg)9mYwjF3Nb=hD%@^@#a(r+9SCv(4sFI#p`KinEG{Q?VLE`N2l z6y2@LvKhj^{Pa+9_xa6=>L7dY8X~6tU(Kv-Oxba+DU@-WWiDBqZrah~SlspsWiF3- z$bcCd8nS}b$0P2w76j;**)b;7?9J2a-O5N>BT-HvXnj8ZK40)IT(_{!LNQglZ>!r{ z)(G&j_k_qQmgK;%Aw6L=RIID*^LYv22fuOsWFK*Wl#Yx<)s79go<1~%T^3>jz-EE> zPM5;|I{^nw^M{|FO>d1CrUzXB$+t0pjmKxN4%xi#?Q?l*FDeRX5bg}B^}XKhAHD1S6 zKO_uNqxxV4j>T{By&4+hf4E(jKMdBjnP_oueV+G;&0>&1d+vmf?pJ&|!L079z3|Mk zO-Ac6~rkeMaq?v5w_|umP}|uNr0)D7IkZE_qL-# z_Ic-=YE|kO7l@g!yQNJHbP`vhJHZ<91)deSp_?( zy=1G1^6O)&aGA4dgLf=X{pwfET>&shv0Gd)#{eHTQudldQJ&9q}z%G;=`- zG_nni`4Efw<#GJc`LzFMM=j>bu)eHOl!>z+uCIk)jhc ztpM-~sZ`Ma1~#}pK0do93zt)4LKXmxNOm8%-fMUufn$S%=C_wfAv7ab{*Lc1R%G|Ak5L^ z^>bzxmh!#^IQ%BdvdlR2#@&kKdV7U-@b51)vrUxj$4O|sndZW@#a4}s;^Xq(o8Lb* zK3(>-Bqh6QRIc}j*J=|5v%9q!!Ju7Fm^!gf7>&G#InsSA{iCC~!EPo%R6z^8RoiHW zU|RFdHz-Bpge2vo>21keGO?{mj!$VtOo4yDP*4EbpHQ$G4*CPxzPs82*)^HP>+b}&AE1Cc>+ zobA0d^e?5V(fNrpb8kxt!|BLg&FR&SUt~^}o%shAjoY+%TQn9p7HeDMyVK+{kb>0u z%h}e-(!=3tp{hZK0pcxMr0T!kPoIM|DkUynq7q2sIa1F|uy#4c7T9!N!vOWs^SBFp z?wguDt#PTve>)#i9lsfHc@5C^c-nTGo1mu}g4=nlSb@Nj&j&GE3L99vdH@YhVbfou z4W&fkBtFC+_-R)U9r?U)SUg0SA#Q5TOWG13nJO*a0zqqt}+U&m52)2apxgT%SXW z>h9M8fLtIxZeBCzIUpPk*cS#g4}umgPQaqEy`+cquUr5oQoAdN;(t|zeQ^~&-&WgU z^-dy_Yr%>>QP5vt2XAR9vN?_OJ z=Ge0ugW6zDiD}l;)XkNa{3ou=M2P;-d77|tPhZ2S zHSnrhmkstSG%t)ZqDluqQ`o0uoP3jp&eJ1_!|39CC^WMy@iFGu>Y9{^@MV+95wcWk>A?$-dF3&9aI8`P0Qj_r(|k>3EDfF(n@U z>p`NYqMSi5mK4t{B3i+>T#VgUj(pVZ&AM7TmzeS^W0Y#AOD?uTC++~ZjsFLhDIXoscKx3hEp?K z7014phBSudbMux7Dp6DSZ;o-_gy7=b+mlCl`W@GMAr7K8v(;eL*d4WW#*nn1zpVdE zrg35O8jZvYV+2wj=cyQRQ!4>eA@OgT>3zziuW$$@M6-t;a7J@iv@4NGtjj*5^P3WH zF;&o3Gc?!hmPPTBhHdAhyeIUY#VujBACdsC@}clkXxowmpB#yE>XL6KwFh(O>am#A z7dbro2WsS|#V{-tR4aGFyAhmk}8@ z5LLg911a?h#2!!)-J#fheyDfhh?DxQMRiVRu4cG(D-gnBOLReXlCDUEso5 zFBM%KjFm>Du>E_&u8d6gs|J#xdVtR})LAWgn-6L}oK9_5W%OnY64{Scm!OS`6M`)8 z86(rUuGiYpqc7p9Wl1xQ53_z1=+0Qo%B_ zbwvMx=fAROKgiJbtbjzjs<+DRE`xQ*ta)U>kX$>u=)OTF`~?~@Ksw#NE%cpOL1m%*pz)hCqjE)job@~96r z#u@6|Y7*In;|(5f)6=k==1vjYu}epdQ^RAm)=cBONqQ>TDF)7MLBETKJob4n&A*z5 zc5*tU4>{EINFAqP&skwEcTHE+Rs{X5p|7VZ8+0YjBub@fKm&Thi2-=2zo!`9bzAP% z{6SMuDY6fU01ht>-?dZ&H^2^NWAusjs-3k9Zr$s4djqaEeo_j9SwCm80zm+b9bqy8 zkCBn_x#v1*$hCXl56z7e$(|Kqb1+KpZ<8N2mfQLuy$rw)stZ61008s*Am$&VM0-Arg<6oFuN=yUXLGJmI}vPOZ>j$K!BgJ_!}1s}Gz-J;EOFB_GwpZ& zo-sxxH7T5J=CW)aj&K!;Jl8oAW}4qNB>lG&;Abef1qCnPR?5{-r z5ja!{NWUmuUND*@d|p(l%k|X;H>0}XS8ryCnIq%b<08tvwRT(na(7EatDy8_C6G_t z$-@(DTRlaxjp$!5>{(3}{2*FOw|nQu_i0Rz)4)FLi}$7*uZsI;Cd^gNb-v4I!gnfh zcTS2;q=ky+t@WQ)*M9e`A0Q9u?0ul;Jgk2K-PS2J4_&iKNy_&6Ms1SrR9IA!$IVg3 zOjGvHbdT44?qh`c{ZdvoFVm{Aq<%(@x2lGf$!h5>4km)xdKOD+E|s%XmErBg0hdcTRJvd*_mhr%)8rRgcc->7oZcS<>ZIA9V zKU%Vj`aj;BW@IaJ+l6@RheAwG-s!_a7 z3;J<;*FORJW%Ot<#&l`Cvv6`RixJq?v?{RjM8a zne_)G#U`^cHSLv^+hDJtq2yGXyy;29Dgl$-P{654p(j3YVitnw&Uv&ME2?KZxo|JN z^vu&Nxckr|g3I~Ag;8Anwtr7Kwdo=nY~4h<+b}n8v0+ed?bHP4J8BRx)gw4LEfF!9 z(bMM_ZTGg&G4v}tSoGv@f4yOnPS*9MS*(3(>cM>A$&gY|K9R<*ID7k}fivsV-UL<) zCKZ1meX=`a_V3>=(P5b?wts+4IuJly8YiOTnIyx?%APm@EBp&m*{RE^GLt&*od-at z84CRR?ub7RzL5b0wiWgD(SR{-`FL&MxzFxHsc+ z=x8n7P4h-v4h$5ey|-xq0$*fz-NN6$r~T=PlvLh<9+?L~Z0z4UcifF(NN*>F+!tW~ zL)aV7+_}EaU2fL+ATDaecH}Yp-OrMch!sKS!1DS~_W9nzjq@o6d{@AjZe+7Lk;_(b4jxwTW@E^F<}fo30ZouuyFos8L6gznKzidAg1g*kS@5fgnnBp%;$bp4Ex4yP;2Y!p38WN8tcKD8@{R@y}44gj*|<) zMYora_oDvz3Ab$++wk+HyM8eWUNl)5+gF-a9W|ci;cU~&Hn4XiwFoFb3$ zg6?&fw7f_EKATq6m-|>om%XiTao)!vo;F&xWBa9>LZsSX)G0UH@_GVK`nSKYn{CJi zXCO|Z^RW@`^VLp)3uD_d$KO(C{j)KDzWKAJCf|f}%Juiu;JGC>ec!j1kM{LRFc9n6 zo_^w7C74;)XJ;0`v}n0tNi3a@>PK1RmVF5OyREI3lRNi-*4#2)mc0={-iwb-C0q*y|Mr$|YOv*!x{?WLMfa|A#IxhHq|LoVjX z_sb3vw$hBA?+gU>Mv~CE-8H8`=hlcf}IuQ=5)@81Me5 z;h!KdRq-Pw2rrAb^9qSM5+nYIS&Ed%fWI@?YwZa34ruMI*O1k<*jNViteTuJ%tPJb8hq3 z2i3m`XOnpIBYLcI4^AelErEBM>y)m*$3+}bjZY^W(jMP*&)uoDXe_rm>Yzb}%3%D) zKEO#WS~M+XgcEyx+d>Z~m#pi^9Mlm-po*I5CK42`vxV|&a3@DX-hAU@{}Jzkn)z_M z&B<3xA-f)lw$tNUWHWrHi_>yQ8U&|Nli9B^8Ox2o)kb>k8RP z#;ArnEFteQG*4m#-nxh%YP+KwRkl$0@ z4a0qsS4-hmlil|v@auuQMK^|8iW9&P{?9Az4-0rD20?qVgNYw4u4pD=%Ur#WDXhi= zOr}?VXFK}BGaGtT)WOzD9J+aEh#Ss`s^K6a0aqp6+V+Xvi{!apR~t3WN>O2V*A(;a zgc716M_~3G$5=vg&3IuU_ok5FEA{SWu(!WQ;R4uLOX}=sSM&imi;Vrl3ia_uIk}@I z^IIC_s{JsAr#a5v5i4)KTu>CGUTy`Lr*Co)MV!?~bdXX0nMXM^SaaM@<6 zG>mDBMWgSGy5M$8i4r3Dt+|wS~b{mSed2(D{-3Mt}stH42kyi(6DCWYwyP}yd z6J|yGkI2Y?bi_H*!CLrK2aq-5c6zkaI)k&eQBtDzl3|Zfy0{mqwjZ%0{iPVV2gXyU<(zwW6r8mpifIl0sP1v4C|8-m!4tk zpK=_#l0Eg9rv~EmIzJVAAJY-+BO2plgt`8l-2EQDJ8JWbRr)CHzdVudP5-?`){kWW z(Dms=@fl0Q_9tPss~ywzzD#eoem_PC^QsI7U4QA2ndPV=cAa?*Vet`pa|67Q5k714 zA$5c30dA5BdJgf`4kjVZW&>?rkGT?%LL=}DA17|xEPjFwUh(vDp;}&#G(-NIG~NPL@?; z#Gw&JsG)WjAtzzaMJ_#WbUagHS6Fn4K0~c`o8zw}Ze$#$_bq9;_DUV3`ShRf9M{CA zkA|*1Ma9~bZ0vAoGw}M1h{c~?U1!ix&C!jAN1*~hGk>`+s`)SG$FZpTuL*y>T&#S* zbBb$ZH{7!k?Hf_ZaMeYOZ%s=7vahYI|MpR}mkNKLi`l-AOfKldMfro7c$yM-9^;9B z5rGRLb_gsz6C4|fh%X_!%B0D}*{O_lBhhbRc?zV&vhDH5Ztv2rSvmNB*6=D|OKe)_ zj+>7ZOS;i*w&m!n9nDbbNij)A=hdB)ydm@W&Lc&dEg@^hS3)58U8 zRm<&nd}ki#u4B@Ar%MTvzkML=dVX2c;CI~C9^QDZEUyxOcT{KV_1@`a-$~e1eMQiC z;RkOg>2VjrH6MhK(zs)YkPpK1@>y>9w`ZwgIC~>tesHVtY&a)>aWA`}r3KTZdlJ=Z zd6cjKw92sRv^J{o74+8?V&B_g;RTP@iHFhM4~}de>+clPepw&I@ez_L(Gco9vx$r- zc~o?^dt2Y$DRY45Mp=0|L+%Y9(yZ|V>0Y%T-kl~!k_eNI2d=-FDH0*UdV{g9{vA%m zH0Jmco|!uL#Yts@0Sso@gvT{zdKKT6XSOO<$vG!4VP|KX$0o^_yPJ3becy=m@4;bl z9uxJXX0}_d{y0&O-nriZkmCaoU^6YgnWx9xBJFPj6fqL2mtBeXs04^V(;1ymhCXCu8Fa6aPf{S%NG7 z(sfE_r3agSib%QOILaysH=F3GgZkvo*+{+~Yq0o`4YMubUYX_3Mk!da#)WhCPsa5! zyaf)lH{m(1KVAxK2}X|!q+S}ox#XWbMCrUrYJa4Odmnw&vOP}zK$+*}E6Lb9U8_nA zi_XOk7k+qLCm&@JltZUzP6a-HRj3x3n7|c6n%J5O8U3#pfP#)XC2Iy$P{;Fb**)Ou z_1VxsRDg!^7+ICjv?{mh&i8gYG5QogH;CzFz;>CM zD-SyWA2&X?Z6~wRis2bFHJ4iQyE7)+LHK0>XT1XRt-Z*Z{{GS*OZKqdRn3hNQfaolVlhGXIq6!$tj9_cNE_AV z_IShweQb4*tkz#SN83^ShI;mE9eBctT)Sri7q0!imSps{$L)94S<*%ZNCyIcnz7*# z^%)^oPK?f-%toSxd{8|!4lkCNeXOwWE|b;dmFACoE6wXbuA>2hY+RPi@j`uxpFOrW?j=>baXH5dX=u1gtExhC)S~}Va2}EUQ%AgOBmZGCAS0(0z+}Ke-vPpYtel*# zrM;vAoTA&ow}J5#?tfco);Bg@15tM?4gZLj)stt%grDQ(_N9PKI$7lkTwzm<0h|DP zZ1<9BZEK^9VwVj8a%7c-;qFoLz{Uia9>54`tS)%tfp-K3hOhyJiKlNj*#N3Ywtf-; z;7x$40iitrTN``?`G*)M{v&~g0lzV?^}Y`5Wk9d`M=t+`d)1v0C!7BUC!fBYZ~XZ0 zxg5lYIiN0KZr%WJFy!I@((Zb`=t`M7e@GxUALR5+DS=D$(jJsoU$dSV||BGOjR`|3_46<=D=*&IT=`MK!5 zk{9u1ipplCj|~@S4{Uj69TNBtu8-bX?SO8?T^i@t;N*v{p-Ajt2Qkv}j9OvkdY)Lw0#AiO;y{(et>9*&<9?hJ23!WOf z>Llb#eFdjL5+|hmu)j9y9rU**7|{cq$j+(GI_-4{Sw+J7#`K=L7k-tQhl8bygBafN zc9sC|w5H3#aSGV0K|IsLBc<$(U=1iJ8)s4e%912T`UVJN>zkXZywk|&(zEhT`?LpR z3PwLfZpiSZd~I7dHCh;vpx8*739~p0uk3)ov4o2y)d@jV$1M(Z6`rPUa7xTn1o*(l zeS&w_NL*VS@XV3Fe!kQhkLM#LYI}7v?x0BNTEe7V4#Fzw?kmiD6An|Dm7DXIoao3v zpKDc+nWlMvs^s?8>P70z>fQ8&Bs}4%3T=seZ?Pu&?~<)w@^2Ki%pz*PkCDoA{Be8g z=A)-ZZ&a|~{3B0PjV`((B-U8>tFG0lS@?E3{j{ycyOv(=K@wk4Mm*pz711%A)~`lx z)exP%A5W|u(1A^`;dRpFV*&m^#ZF{q)lavb<4Y4ft~fwtclBKF&>VXZNvdEjb^s@F*~l=bySt_D`#Xf->e})Hs04@y7P3nd@uO5Q=E%_Ary_oZI;DLlN}XBrs#W>D(~%x?H6_ySduR^J(bIy$?!`~_I3NkrJVa|mGC z`qPsv_SF6FW#Aj%s#6F%P5S!px%Z}O65zh!Ep^(eAya|=Kmb?^Q{z$VELcJORV%-y z2d7}>+=DBN2N#esT)GpD(N7wA(_^t zw`M*co1fu4ec88gUmSg%b!Lc*OZAq0k6hWSo%0J!-m32dWEf4iE+{>I18pj!zmevChDm+CbH!O&EylUVMb>{ zOIN$tPa@F&=uqo~{{OKF?PP=cpg;s3;4t;Ei>W>VLGb68-lnDmZw5e#O zPNR^Aal~bY*D%$kFwtE}SaFn&=eSF{e~}Ss4s0}Cp5SC)m?p5gN|<;NH}_)1#iGS7 zAxWVW`GNt&3g>M#cqv;|6u_?;yp|$ullRoAw&{Ft?eOH9(m4<*H&!^ItDb?Je>&r5 zb13!f80iLp!s3SHCXPx>?2HnG>^%iF{B#vdlwv84vpA) zTMG9HtWWdaeCzjW65LNf*2x^U?b=U(AYS@^?FNkXrH`dn4Fk;jRfC?iTLO0|`0D&O zGCKYiQ#0xsI$@csRd3KH)>kj`-;ZoLwl*?@eoY81LCk`5HiBk`GVo;%>vdkztZN!f`Z>CynqgfEN~AIen&7z<013Et&H#f=TyX?`*3Yh?mP*xA~dGoio_I1^xd5Q&nOemkwL_D$zcPl;8H^)yG$Yd6k7zBWM+2O}zeK7ip8J7>Ivt8$%b11{X8#gENafoW;%e!!R@3p51d zM?;gZXh_*>g~jk+g)@pa}T*pSMg6U#k&y#XUdjW8csehttAhjXVf0ZD#`TG^#EXXj0jULiMV~Px_9CP9oqr(=& zuE*Rf0L5<`<>RlyUvDi87EcuO-DO5YY+L2ESCMs^&kTIlcsd?mDvru{lmj6PT@3#w ziS#f|Ee+e{2JX7Mqvt_qWK)1cVguw@+n^a!i4VjW-=P;u-2pRtb*{ZnzNce&LaW^O z$*@r7G>A)bMgd70P>e;}j`5 zcYpTIiqXlRVE@JyX0Kn2hL&lYSa~`-D(q&4Ombbr(i5Hmlgz4iU=7@(agQ^p9=>NeAF zoZ|F|gnX2Pw9WYJ+L=`D>!}N7h`*7=6awK#RyF1ouA$Q$`1XCWEZ?7at{wbqsTY%nT!PM>Bu2!Ks%)pIxRlL{Y z69~V<8{q*C3kzZq8$<6PZ5il{M*_knavAOMQe1!f$lurh9(<&^dI*%WM@L7$2i(8a zX9>hTy1&`V=}&4u*aAQ%AcuS+Txzmi+rT$8XHElt8pz6HsacRKrDc zsvDFPUbPm^&d!2FOP>zkWGMrj6BGTh@P9=A=6kN?KwS@rExWUTXoU1{9hL&HGX7qV zsKRkCWhD-&olN#cfQ*F%M9nIrtlfS#1zw(v*zqnAc!O+-kn;gIzIc9#iUgNufa!F) zi6EKCLn*+-n!T-f+2x$y6|u9-oDckZM`MoM`>qOyoNyPv1MTYL84PSN;FYW1Ji5XJOert8r7+% zt|YFUbDFy`0lbfpUg;Ke2h_Cv?0*TxGVot=3x#5dx+x>?^gR5 zT$v>awFT}BgNw`)Py%6-bDz}jB$?qaEfjB{VzOTg58Jv^F~rSndDl0yPSVE(_Dxu$ zMb6)HA&;(oZYQ?Kb^*hGKjV*$=p%W$@cr(9llg@dJMg_nQ-|a!=aXG%Z!>SpMP{to zCt;mNew35N_|{>PGgo4I!kc1`6KjANt{(3CeQb~$xIM~rVi}zIU3;;He->X6Rfk1< zPpDd%7^EVcjYT0wK`oY2e5b9d>FlI)!-G8}K^#`=%t}K87fE}$vp=LWhuHGv3_N2v z!9p7Sm+?SIF$)laNT^0+fly(3nV=aDN?NM?Jw45P zbFGOl-@*GmCmx$qlana%2NM!3Zcp7&b5RNvTV-JH)MpzZ@8P`PA2BRknUd61HPj-Z zWFL?gZ4!(+hfZI<;HI+O28&&$deQ7!gMUJk1DPDV9!?(!6pAUihP9>E^1FB^1vn1`?o#q64 zrWGb*{}mnByNeV%{Cs-z>fg=j+IQQtiYq7RSlaLZF#oFvCWxQAL-bba9>iyXv5q(a zTnrM5pN);VFL-(WJqBb_Ux5`LPCqL7%5>jC>uKR2mQuFH#6VQdVvHv?w$N)2J73XX z!b6`~{UuqxP07|!H1k@bRW2eThE1Pc?A7f1d@lIfD%2!cGx4}H%jcsY!SmG8AOz~B z7U#v~)zefhFB%h;PqmG#_L2rBu5Yv=&|0ETkW1RN_4D(gaK z!15L}1~SC4CPDOBD`|u+`gVM|qHEqZ_dMoWT5ouST zDFt^b01E;3Ekoc>;95~(=gOUa1<{|%(UJWt_SGk&H*?J7ZT4uJf*_u^c)KEGIV(KO z;)W>9LF8_eC7Z5Z798DnD;IDS z4+l#(b=Q87s3#u?2v6?ER4DgxIu|4BP6Ie%2J&Rn+LiD16%?VlN~)@=zA@|{w>*vc zkNM!W#KT&th*BXVfNC#Y3joLbS1rC$!s<5bmT409627@08`Z2r`UX@rSodzG8XGAY zGMuM89D1fTJsT=qqAR7YB`v5M*(|S>xG&%S)$Jfg)YL*@9H*=ZsYC#VHM(Ha8?X=x0EOz7#dsM3Ag4 zx(hLF>dfPyRhD+*fDx<@%kHfAb0nX4HiSpN+Szy`sS|o$*_m^*e~D(EVcWcu69rup zc!#kNTk(ugdG$IqURR*9h)r|3a?ip-ey#pESW%aAqmGu1!xOz&;Pikud<3&ksE9Td z8OLT=Fp{H=q?8Vtb|5%SbIaIql68VMjU!6^GZTA&6C6F)i*pgs{5+HqdhaJ`-qvix z+qW|WZovda^my-eq=Fh3P5Vxq$0Vw1KZj_?NJ$9{FgJ1OxeRy3*AAG!XKGMDe?UVKO!5e%;vflrO=t-h!`Onun%AT0EfRw zKCY6vJR)P23Uv3Do)bjceN+xNo0{1$!fOc@OLuNve3>7S+@;n;LhC_oq+h`@<=zbV z-Spom2e5K>M@Z3(e`7RIAFQvhzhW}N>(n7phT^s~@j)~^)@k1t;9?l^k;$^$&>AP! z3Yny$V=i5k7O8l*<9YWGU%J-Ak?D>+hq6VdJa5@WtpdgkTxX`J!KYKy7+tBvs2Z z+L@a2@;M&Q2mj91)A1ib|6K4?=uUNh|CAHM{}D=xl;sf{eDpUxTct(oz+4%=N-wdV zwfJh=0k2zDapTXrNl-&!UqIuV-zSg zsf?D{6hAV{8|1iE`w0qezon;^9Jj3YGTNA)$jS z5?w$1$Lcj0YN|O4#ojJ|e>T4B)w8zJt;`NJzpN!b>@(iWCG{$c7P%w*Pf5qUm257 z^K{1hnX8vvC)4tkmR%Hlt$O$(qPAvK34375@E5{?UdMt~{agI2ddK#HV7E8e!`ssO zjJ9hX8Hk_0Fu!8=lzYj?@PaQ+dAE#{WPw^j_IC|~7jO^PqM>oag5sO@hu>Cx_iV7p zIX(m$3H9#{a1smQoIfP|ivQr{(%$PjO(*KBUb+*Mv1Bjx7LvM3PW zbN`3qaVXV&RC-faMpJRs_x~@@z?K{LgdVjrep{q8y14OiJn)2E1*~DMDPGcPb5<+# zt|B@SeOs@XWxwRIvbN2WQb!c|s86q9G5oW`o%o?V=tvew%m2>(G-KnRwT zZ$@c?x6S7_vO!45Uy)}o=z(Ge;EGZ9?mJo8>nD3h{UhTBR;0*vs+M{}+qU#QM$>WL z)9s*Hg>qgVV+jRM<-Bk#21FiRml@C+Ujng0{(Vo}t5FBc4T)%2W4qv`2PtYz`W7|npoXsRAo)F6G#%rIK>JS7%H0Z5 zgQzD2Y=C3e)+?H-W9prq!P#ZMSq) z+Y`5YwpzH)YBGtAhn%OiuIn}H*%9b<-`Z*Pt|cS86S)*|fZ$xPeyh=Y<}Zq^D5ECx z?79l+(O@ZdE%|0u=R$v&o0F`NkHt(*kC0xC6J2K+Ek^Q*oOJ7en%XxVv+A=pnYKfj zP~@3J&`9Y-6n$om+Ce9<(|BBQrmc*W-OFQ}8AtNCYnBWG9GO;Z!ROuZ?+%Q$53hl$ z1iL*Dfm)U)w8Nn*q+j4iU*|p$ihmFWymvpY1YXcB%vER~$l5NzkFTspLw76>qB&a1FK%|oj+^JiEpQ%%A+#V_?%N^r5#gUG?U zWBWgip>%b8sFk^z907HnH~|B^^2NJe!mf9oAzlEr+a0+Z6} z$d8HA-uo%>Fx+25rz>=E2rr?BvEvDW0%f-J^x`WZj_4039+kgN%H$7jv6$b`HWWY^ z36ysW`8hpIE5~ewsk|(AyR|)>&dAkKtsNF=*j`uQgvcqw^IvOIx>c&Xk-d7$PU3(4d+gRcZ+ckqrg!{+loyXy-w+xDHqZ_5!JV(>Wf~oa^0z%U9X60 z>hC_HW@bWbV$}^f^`kg;r=LQ}BSOQCG2c0V_T54n;nM0#3q&Uy?))16UaQn<=H=4w zbHkVqCra5Q&0uT^73b=yc~(zyE+xt{HAF!|(_BAzkkK#wS$5lplmM9K4{jyLI zJ+`MR9LZhqDOcJz0p_0S14mAxNd_3_H?~AfsCgy2u_izKuBYykJAVL}W7lQYnpk7$ zGANZ1Wg)tjt_OM65ndEZb{3Z)ZTLyq>EwUhbph%Bhem_TSSR^9rKzg275?i5sO^N2 z*eR1?yVRe}eA<}Q%Q_hl;Ux~+O_dHbPr#engJiE!Ovd#!)Mg@``YZ;yaw(_Yyrn6z z1%fq70vjVM1==1HK+4c7`M^tZd{2(gzP^eLT#eunhJ00reGp9=DHkY0g@xZl>DY8Ug;EHT@yz4nC5*7$kB;TaD$%6M1ARCXxK55tg+6p)vq_LKE1MG%<{0-1vYO@ zxMDG@N|T=K3hnlV!W?5~hCMhj8dbw$P_5gqaqRKOj7doxy=4b9%ADkY3p!t9yCDx! zs+Icr0j2z63!Re+?_a51YP|VgNcqQJm-&-(^K%xHo5;R!I4R_H}7m%-XSImXqEu<+$?(&MqB4((IFx6wgnbnu7jS{$ixUU z@6!ZKUBO}h7bMrKiW`Gnb8s6h1+P9K=I>&R%~)*Yv#coT!_;mR1M6_1HqRcGHN` z8)Bkj3HhWvO@VJHK2!hCbF>%r{9NllFK@mHYzqa-`GAig;WB4;=Fp0jrzb;dYU;Id zD7z7DwE#1T{5$cTq;_QjhWZZ)G)a3biRt?J?0#G>Eq|-rL>Im8!?IyT^Tn`*`fC!Kv@v z$%m8q@?H9{N2|18yXCN4EP4k4SEpI|}mhb)w z4xVny_(o4{p}cPpm~lv}=PSelNqI^}mu_3=zM|Q%Gxmm8Q{)eaK*?4a=S;a*q=GD^ zk41WV0#E+=gOIc8;G^}7F3VQQt|nUrTa6IxPJw?iP|v#b*0vegA|7w@BsX&SO8i6# zF&M!W;TzZ;H6MiNkfE2wO$N=;9d>1u=w$9&u)G+JHvNmcgBdqc=Jn}ANLMQhoQU6^ zn=8RarGyaRE@w&UQcOCO4 z7TC!l@$*Y|L63~>K8Xs z`#)9`7-Z0d5TEptIcwlPzjV_45$JpXiW9V`#|i|N8UNodV3eT(*?CASKVeuO>P;J?$d(g%={Co?>w^%UDM>;Te+l>8I_K~VtV!!d47N7`E%SBy;)H0Iv}5Ap%D7*ry0hB zr>?FhsZ8JAu+Q7_bt;S0=SvC6=N6qHunqP;lw(I&$8x3)MqnG2T%I#lgfaSpW}iim z`gcvJngkSN{*vUjnaPO>Q<^^t|M<`!VY*QQfoZLiPyN3Rs7oKVS+@T!@wl|`oja6O2^yE$ zJY^GNw>K>iP3Ju%qY4YoSL9{Ahr1+GFGT?_{p~eu1DYh>O5S&68SW3XzAJ6flEgeO zJ0f;~(r}^dwFV#QlYb$K70V}#=h@HBE`tg3@6zb?i9{mcD9Pr#F|MP%`D!b%jzx)5 zD;F*E(x8vUV3@2iR_I^fnO~&5Brbzi&_1~~Hj5OMFFKz21a5GUj+_Go4PLWN0BZvF zjx}d;8%DMJ6aFNAOOwAYY0zQ|n4T2ZZ@Y5OFA3uuzIXJi*pxM8?DA+P^R?`>&tLr( zeP79VX#G{!pf7RRHhRQhTv_SFWYL7={9$)b45uc0W6~eH`c6BFfh10n^Np}8togLZ zcVd#Km#Wq0&F&DE1dyzvlt29HIVotsnwS$m&@0e%sRkS6=L0jmRNRL$FAx<-F4D+r zEGr4KO4IS0v7zZgf9_g~zX!3C-*74y>RL|DHJ`nA*O?}VtJz1TGtxUC_Ca~~4C8TB zwq)uLUNM+qT(kG}LXS`~gyY@pZ(4R;g~a9nitZNku0CM*^LGb}4$Z9k4?Xbw?Pq-D z15`|I|47IbHoKYX#5}#pEwD4@_ukM%0`$7`W7d1T!7@ zXPS|6>jw!Gw zY6R$e``fk8BE2k_)(OCR(Hv#@&p8@US_1s{?~zF++y9pfH9wQWn0P<)Tk(N_qF-drQ;~&IUw)6)dUNKe zkTCxj$!*7QOX%d`eZVoQrFrcZo9C4~$*28+_7>dcCe@@O4SPsg>I^tz>FSdc`YEC5 z5bV`YP+%VN1Gzl`u*<9u!2NXcYbOnT7Ih7UX(m9Ue$ z*D5o78Vq4S?Ky3o`{>ci7_IeFjA$I2Q}O-gn2gYmT2($^Wk2w2g{h8inQ?~Bz#jUV zfEY?8R5UCFGe(XwPK;%s*TZ`r{ ze7Vlj5Ygk)a9_u+GS&8^WnhfP*h#rkduEFK2xV#L;0el*S}j;hHcn3X);%Kwg06mR z;kKB>e|=Eimu_*mx-aJZ9caW_XP)zwp9=5|94|Z;@ohLx6^>yui=Fywi zGv*yL#8#G(;=X*`FJ`rGc$>v=_`a`q zwbO0Dk~H<*^)&1m*&65X2XCa{F`D1{QjLzx2nmUPMI%~oi{d?ZGPiBLKJ0DH+7cMs7qblr9oQHdE_ ziIw_@MTlgTi84hhC-syPA@6l2J|h17j8%hk7~O@xL<^vJ-%2V1o8*nSX3PKBO&@lY z{Ywb==Y~s(x$r9e_OF2Tb(@J1|Jsh6`RSNjn;iE|vM7c3l$<0~-&}IWsV;3ac5YZL zfb8((F3{g?6!QzIv!7x$L>74c>I%y}o~({5yxJl+6@$OQ^eIeVjPY}oI;3WiiWH3# zjNXc1Ojt&c$hVj3#W41q%+r6c(tl_tYFN$EkST_J{jX}G%_ z@0~xM$2{UNXSZIO1}*+Mb_lh}H(w3)0~N0tdnqm@BIkxka`gqg&x|3z8rt{@9xaDg zXhS~fuBHU&&*-WUvZ$jRhpukwptU`tba%CTj#C>tqI4i5S{C|;Cue!adA$oh3FNq6 zuRQHzw9B=zMHV7u{l4G4eH+WRfk2m`kgf>j-|h4v!=Z(U5?2v^3De{tirU4PTJJ_? zYe7=el1Y9>gZsB7h5g#_<2==oMtr}d7YrE6+oc3`gWGtIi*I#b)Xp1nGW*W_Ans0h z{0f`k%*1118Oj|Q|5>FsubInADKb&ZUgG;F{_~ugd`!Crjh(%%_L8$*U*TL3L`>GP zIy>U4e85oWcOcq;IJnB;wb()4Ga%{q!zS(gu~*;_r6;pn|6JYfgmwQ9$};9B!&fC( zyeJw1_%|LoXvY2K3g&N+L=lHnxHHd>LQublC^MmJh77)%Zvgd8i&0Q8C{VFq2JbyC z1Ru^NG1!*zkn>tNa$hsn&J))zb0YuE*blB9y6Om~aIFg^it)G)k#1to34gG<-HoNddKK)Sq3+Hz0>6S|N95{7|4BbJ)>ft-~1xvVu@(2c{?Zk=w z5(0+9mIQd?2tjG>;~@tKnMQQ*HhQCK61L^H$W1Rkfa4tteM*F{ImUyD`d$`R2H;-&d`lv>OBY6x5DhrfM@y}1;+44+-1iqpx*XsEeF_ zH%4Ss?EuDCmm=Zlm=+8IoXvSQ!{3oJtX<&gCWr3Ao`6q86P@afY$LU~Wus3p+~t)} z0Y!@QtKM}kpbXCUCR}$4rDiyO z)||voWpW6Ci4E_59Ou>+%U(RNdt%A==3&S+?pV z0ORA242aFQNDeE!XZgNVwd(ZPnDM$8fI9%R!M@S*$!p#9fBcd6y2}!H%D74m$& z>7PX_UPNZq`Jj-)OE5tjn+PkX>kJVE%E~~Ig_rvd%?&mt8NM;QH;uEwyu@l!r<0)1 zPy73}vt>E_{=-Ti{$jtthb7MFOBxjkbFI*(SZ8w{KK5`!LdtUiloNaRsf+sG!UImE z5k2GZVH<6~ne1+)ZW7|i%fco);(MOo4(-g7W}jtZU_0}Z73 ztF>N}I?J|!Y$yQY5`dyD-Y(U=U^u8!KObmLeLzq%t$A!$_hQLa!1uTD{>sGal`bLv;t*>=tWpEkLO@y~gK#62hzR9>tn1z^nctb zeM=Qai#5Ysl4 zPjibxYRBT(u0aN|I#_!Edmu-n>|Fz4Y zZ%!+67NkFoUJ5ua*y#w(c#a~p{@Qq4=XK0(-uRYjD5P0RTae-*PvFCW@MZx-j;OGD zF{_hSa5!T4?gz#uMYlG-Q>6#)&Y7kZ`6@6Gw|S(^veta{zFFQczB8|w*>7$oA2ag9 z*kC%*d$xMDj)4OOPTKtf(#itbA|=e--iW?om6Ysy2isJ>OOiOqYNo@sAzZsgVgQ*- zYZU-xsEy@1De4pN<76CHkHI4P#Kj%HT+)lZBy9=kjM_`4P4nMi2a5LGa}KQ zHB5Y#ryRANB+5FA<+HnkxH?q<1Ew%nob-eakT)m0yJ8xrSJx{+cw^fPzUeEdVHkFG zR5j4F9#eV5EwY9Am#;FNBCVY^e z(2c$^oSWybhIm+9?!6H=X-Jx!p1z(EcyN5vNJaUCUbEx4Eow-PJe_yK(K?!^5C}jh z{MZ7IMk!@RC69sC63Ad19VArYkBFKrU?3Q7V3%z5v}r3OV8D*C{$%-HG;= z!y`8w1{=R%AK%J-2{vMKSAL;hX@yl)h2X)$Sw!`11?VG=Z%B0EI zc=l0a>USqcMHqfW?XFL3-q<(ACaudWDa~ER8+K0iZTn(z83#VtlL}L+_OcL5``Yys z*dU~DX;1mQ7#SIVM;7m_Vf+-UW`WPi&0fC3+MtCI=Qa_Cz<3r5yPPRu;*tHU93*^&!-t%J&w%g zL^N|fFMV>`9p*nye%7V7gWA^uPDA#ZR1gr*2! zT(i%(V)}RszTth1sn_}M^82lR!1B)KYT+BWp?hk5`#HphFQo`+=?nljea;!6Zrm&;y{QYS# zW`|ig;86Bx6Js{UsHdnu%oXbJbuhMcT|VKod8-vGx`29E7^WalwU)yFiasX%3Am~l z>4YgMuwkye!Nwy1T{VhJSAm(9z0qxz;ykk8bN^PcR0`!HIeyrpts4XtLMff0R6@8f zM!&`2otWHvzBic6iL8@R=u@FarEz6GJ`2)gEi(5NnP}R=^EN{}vrqoG>^n4NFA|Fo zRi;$naA%cpq}y>Qe&m?}VYr-L-zQ)qVpU4A=zGv1V7yVEif*4%2CECwlsR0HK+Pb* zuPxkoDSfyuaxNmhO@cLqsB4`{K30<+AIQHS~XPC!$!8>@|xlXR!9%s6X7|BgLP( z4@=pnA1q%a1Ty(za@A&#QGRm+6P4jl6PC0L8nc%4aj=c>*vw-eeeSonOw(xB?DL!)kC8NK$^a7_s)iywUMz9{N}FTRaR#h=`tc~{{vxf+5$58t4mA@T73Nx%h0$OQ4c~8mL1u#vBzucYz8eskx!a0 zhi6bZ=ZtJxZS+uih6P~mY%6cchF$D3DMV1o`c_v-BsSuo|egdeAzDPCNf5ee8i^2h$`RD_y4-7d) zLTFvyN6gU61diN#Z{DBjwp{r*IXl9i5kw!&H|ZQ3LD+v^pLf*~Xxt2+T|hdA(NH25 zZ3Qe7VT1|2I1#9Zed71mVdOL6a}XG0BlVobwrVg|4s+DIORYwilm1xogCx1tE#~}y z&n8?QBSuE4@u>-yl6i0=_i>_D9PS3~;*G2_fz^yT4DxZm3m${rF$lq`iv zitH5T<2o#Cx6TOc9zOMeai{AO#g^@MrDcpjOy zRW+<&ukWh){YAngB}YtSyvhoQy`VYqN|Z_${Yi0>5bMnC+ZW^&P!YHeJo=+ISM@r< zT$?l?8RsfWVPrcoZbOhX3VZ!%0vg8d*QC)BMr7XBCjo=l&i;yzh>Df41}(o>{k%!P zZ%P(UO@}nmFltC-B6Fr06?PgWVVFHfAg1rZ4ZFK1tn=oV9US)JpH%sIej)k?r*8rb z=az^+ZYX=2FaD)-aB1Z`Up-uwltpJ-5g^;$;Dq%(!~C;_;J&9BWa}e&x)n&%^fmFr zm~*W)8T^o+%Ua$mGHmplJfg|Uv?u=7_WyE=-7TAS{crjfjykJ#DLf93%LOcE0Z{{FSLkSTXAJ7)CUE91N?}0P_OBC zqq<(m0kdlzud9TR=&biyQ=!AW(0N$E_WtQaP~A{R*lv&LgSu*~f4Uj;bGimk)ncAu z716xK#eeC)xBM9+rVbbNnv~JGO_M)5FG3wV6K>8|Mh=qo<4|iyE2$qv)9--vVR^5GHhbo zHm~KCA9-}Aw4?A(fO?$4a+M>WXr!rUdyzNJce|CBX*l&EU$L1N%RDOc>b`JvvUy1b zLP39`a(=Lc{u{PGd5V+{y&_Xpm9)F^#l>dA`%ODiuP@PItVzQp$M>!FUA3+#8&*&!zWYpY51j#Ck8X zOag2pLLe}WpV_826c-n=HUCEtMHf2Yo{wGKgC8Ia`bRcTeNH;|$#naV3xLyvI9t~0 z7+5n$oWIwv5dJf0ctiVfOO1PL@y>}Un3M;7s2C^m$Q0e8Gp>1s_%`Rbz$(w zRDT*Edi5h!MiJw{I3e2-w<4NNgZn#oow%$f>fcy>6kjM}fhEOyX>Tkg{bm(CdbD(kRVMn2aJq3E3z8l5+GV@*E-5xHWnXHWeWyp~7`0Aq5H)8#l2vywc z@-e|1RDQ*2?bnxE_Y+B1E9Od58lo^OSr7Ls$|qGN_jSc&f*)7f3h0;rPM005GxqA> zau|zu$1so}VRW*baDuJghH8JoLbM~ei#VvPbK zaf|-{LY!8{d8%dlZQQ`Zj0#xo;wuTtsOxF$R^-9#?`^+REsoxw(lEY!@)#fX`DUbp z#19a8?AjPUXGW$1bEXBJC)MjYbImxXP3vUNx`Cf_7f&82F`gxJ=cXCo4q04W3s^+^ zZz*dXwHBpX-<(-g_MS!6ZO-tCLe8Ho5SqDa@XP+zhr^vBk18fwv0<}pU?~h)?MJ*i zgiUXha(Gk$vfW$Tt`-W|$f!Pq6VPAGSrecByLm3j8J}PN2K;yB>}T-dw{$eDps@O zoUSB621O9)qK+@B%h^7@dZ_So;%%aahnON*3uR=;_3Y(0iF=>E{wSJ&#~}gqlI~AstRClqp`aUBW14klPYsnm76h=tFbQz(7y-F5hKM4t7`BY*6A1 zGQFVTWy~r`zhwiT5{q6+bl5=lCDuH{t@2`{nUb6Z43@unXFic^h3)m*d4Mw7`yJ6n zn9uK4BO!1rr|yzX^~7+A6u z)=o7Ug!$PgMN8N5I_)=(MLq_CMhN3~uV7CLe;r>>XdSJf8tO% z%yI0`QeXEoHDaabxry07f=~4TOaKJDad!p8`seokF1fYp^OKkEPCtNGBdsUx~SHN43REQ!LX^lB%(Wlfv3lK2{i zO9KT|SoC8kFL`w-q(5q!4fCc2{ z-8a9pWb}st*#8Y)YZW4k*S6_g<=NNurE%F(^mYp74S7Y;So?vp3VBjGneD&cNZ=>b zxIYXn#`e6U;-qWM3cb-wK7h7`pa6c%*Zwgl+XhcsNz9};1gFanS+f#sF`2xXDsL88 z?*)~vi;u}&V&4yiRf-B&Y;S6vtQpVKx?=w-XB%xf^a*$3K*wCuO>czsls_F78AAl6 z;z?T{wHi&L3YGJW20FPK$3>82VK}(c2k^->>!$k2o&v3!AXG3UBzL@XdI`5xr?o44 zJaMwi9g*$!d3T&+Q%$YqT4y-nXt1u*xWj#R>Y#XRN@Vt@cZg8>=0sanfi_J_i<-8* z)-KtO4?V~d5uvDyt_Rz~&Kgck}*iVH6?R8i7pM z1Jn&G;&iB1+$pW&{G>xVcW+{ubkynf4~?Y-YX8^0pS^Q#jeQK*8i4#PfZe|&H{I}Y zbl}CdfH{*P+x(*jX-k8o%XI4CsXUf)=vNMhJpi8qLOkOb?s_{XV(}RS0HJftM1=;;^np&I|k6QAr%HK5Hgqm4Oubr0$1TrN4UG^hw3Cd19DgvfPe%=`rs^F z8^G*=Z0{~%HLQIbB$hdVx(TmzOl5ELpA3n<&*ZTxK|1XGm-|EvvVwEIQs3}50s z=<@%FitKO3=-a?6OyK7uPg}g_{bY_tK5j7AKOL4f)f991QdLAU``GWW6wqB!3-4rE zYbx6{PK6^@MV8J3LB#B?zA>Dn5`r{bSfQDN{wreV&AL&Q@9t)(R4(QZ5Go0K1E9j9 z)#>fnO^&$UD)JbY>X8a~da7l)`6}M`+X&n|rAqovuD!k~#XE0u?;}n4y5^_szAp=z zf`vEICbJ2C(>@8!5Bs!gr08H%!o+G8ctfmg+n-|&bg^MY%4VeaZR~ePm@^9Md-UeWg6QM#QX) zJg5^lT_5X#`P@7%tVOCS*@j0eZ&!(`pZWIDt}d29X*LX?txIZd59r+ze!JamUAHv? z^nU3-+SUwLs0AN*9_7c%h0?}%1NMGPdQFbEVvo9=JmQOg{Z(|_RY7`uihXcK>x7;e ziwu>wOtp4y<=zWBAGWrX+lr;pH4K|kYkU`W$3>LLS){MP#@)92j1orRf#7Kh+s$* zqqq2*G!%AE&@PzDC1=+V-`VFiH{X}r*-)0OaNKY`CDs?DA)H{ z9QWFnVUmJ(>&wNzoEw?8sSGl?jd!`zO&{uc83mNW7bIToylsjy2&QP0?~Ff9e0UvV zt%h(gHYaEb0U_wO!da80$NHV+l7@%=DQMSQCJ?~c;KBO^Btt$HivMZ={|7q7Q6D;> zl%bvxN5mOG+Ge5S{Ix;#5yjen@< ziE|iB8mUX1d7C|`yz2k3Yj)6Q{F*((fkK88^s$v%obKc5H>b~l8SJ-h%HGqlv3ezO zl@?xM7;m_(Z#?Peeqt;sI#l6N${qIFuKgj$+uPka{vn?HD*NPw5IVGKIw5aD2nw4} z1}1v*GnvTfr7rT#hB#C|9mFL*)*eejd3OIM1!Sx1@3lk_s@77!ev4~J1@DhgUdy0Y z4Hp;o<#N{Qzvznj{n=mDtN*-9PWigF15M$CP)OtT?zS+;N`RTtZ#o;jSNMmisc@j< zhn3RzXo6+uH2BQT-(1Z#FBeDqpb!0QbPRmEh;BoPOzZ5YXm)3J+yMQ`L%HRX;n+(V z?#DL@d<_j??#6)>^9HhdN_u|#W_qybHyc0gl!?1a49Pp6*+zWM21^gtZ74TzIXn5M z$#azXuJ$bQ?f!jogh264C7~((Zm3(rTm$rf}sb|^0O(p&6%ns4O$N9@QPi?ir91$?UdHRHuvmr zZ3u0Mfc_A#d31|@tvl)nfoHHgIIVD!hX9EDSLSelTPqGk-lJ|Gge{HeT1zPfAEulf zp04-b_GjntxbE5APQIs+d))%;W_gsD34)5`k&&ZE|IoyIvJv-PYe zOTTV^8=5#dk;>KhC>r|rIW7L=0Q=L5)@5Ycv`xQv*?h8GKr5uC_$YUDbA5(m4 ztf<5V)WO!uwZmaiL=qgSj%^*CR89yc|2y!#6J8 z_Y=;#?i4A4M`#91TA_9fZC&mv!2{ZL0&|X`PXgQT9LFBonc;VN9^1ZgZ)uE*(Y$T- zt34tPTb9tG#miy@QYA}yP#@WK1^T}S21qH->bbP14~mp}hGY&!d-BOAeg=#B{739I)u-9NSz*CNDIppGJWv9KKKV?CPnFF!Y)y>W`P z5EQ=Ui-M_A&)9k^Nj%x6d#9Ot9W_f|_Gh^mr>@#TDPskD?fIN^pW5xp(+rcPo>lV~ z5g&yCm4_Ryh<6R>&QyWh0`GUpNe6SB2TWJr=7Tz?^+wwDa2H{b`@A1alXdJJQ78*iIr(OVAgfS%2K8}W-||U-p!Bl(z?6X#aN(P11R=z z2}?Q(P1o-RJ{o1Nta(*PlSYp;Jd88}`1S5TNkTomC{$P52Kf?47~6hh*ao{+M`|da zjJf<_)!HsZ&*^V90I6{9VAVm>_$&Z8X^ zRoJ!(oCKWtF?&i+3AdFX8p2WCJP@j@i}}?T^?CQk-ywxh%^cQfzNRgTQONvU+O6Kv zuTDR-YyUAJwvImiAJhCbAG-UB$>Xtw!4MH_cdq1oeZGG}^_|DhP{`bmGTW=yoJS&} z1zTnu=sy!fJ6F`a&1%4!IYx|8#iu7`(qkvV_oB6NWlF3k_i zyh=C3&Q1Kb4oNoy&PBUF>BlSwn*&^pJ-a2L4#IveRJLKYzo{g+_xlNHPV>(QXEfWJ zND1HDJniib@%QjLOQ|6My-qfxP~_YxKRAEfJ+9>I{8S71kvx$#wM((t^M69ml$Q8H zYK5h)#y0|loP(dFx}lWq_>ilm>~il4WXkl_`ZvdYHVy7k7HXNO7MSNwZ#1k&7&?DB&G$<<-P9oFaU{140pX1uyuiaC0 zg{4mF(-Kp<=B-}N5-ZgM;#l@o)j#1lb8kdbbff`>%tw`tsn$AbU)I8~MKsyLz7C|p zwB)Ty)_gkh9~XkT7ZPnDDq3{}ZdTL)SsjbaKgtcoJ}J^bd-XdD!Ay!#K8Ecq{iSS{ z7i;h>Gx;~-G&LW>m?tsyaoag^NZ|tuM;YM)T~+6>hNp2Fuf}WLX%=~4YxC2kpdUa;A1)QeFOdL^kwXfF z7p*ob%w(ylgbt_fN`Iwn0GMkQZ~J=MS!1@#2t%TAQvja!8e7A$Meo?I8F zIy)gquhm!og3p|B>wQhe2Os)}ZPE4m7_Dq4vDhjuuk7;(nLScu*tYyx4 z(HPTHVVj~SYUOawtvtxzq=2mnLdQ?o#HsKz#m&}+LaH3dh z1$CsM!Dr<$%yzgpzz_NjQ??G25JgorFPM6Ak=kealqn$5NMF#Yqq!&5;apLGd~bXWw+I7*XnLTqp1EKpfr@!l zFzFc4V{Sug+g=WOHJS)dqCJWn7`Y(6zDqyj$tX-UfDXMmQUt z$KWPY3(fDd>wf1e=h+ZxG%o%LFe5%uM2zwzXX?p)ZMHUA*YQ`yYvhLN3R zj_(GLv1@vI+F;!hcNw$#2C;2fxGQ$@QvXolF^OI;M@wgC$+9ZGoijdA(0o{9=tW?^ z7V?UYr}=19ph7{cuCRL|)=NVBrU;c}oaym7$5RM}RdXdX>sgJFUh>5mO*SxpCy`hD zW`jpJ#Wy(HZR+lQ*lCa4Jo{bR*(A8!23E0s+8lit&1I4I9l53o#4R<}TJi@q=O%?O z?L?hZ2;P1YGRS|rb}0k z5F=>rnzCol8g7=yS|`?ZA2*9F|J13Nc!a)O`*1QOch;KF5L*EX3O7ebZ)^!S=7?CS zf2tknP(Lk)4HnQMPg47dZ^OYt@!1-mh*La!!}I>$Q=P$e8?(OHBZ;QKea)b$3%P-W zz{&dRXvI#P&rvh_5EZs1zwIBk=)7GfDl&h7-QJj6BWj_r12wVUO%1VRkGylZm5Tfc zklrVV5C-fn1fq~UYw)%;_{)2r_4+p$MNj%&)dRgQpZw6G^1hlXSZ2HNRy||Rc)I?d zsKAoen~T`PGO2Cs@x1qoRMagw7w#N}AR*_0jScJCN6lj$_)ALh<+CRgxcvOG)tQr@@+VC6 zhMx{CYXu0w&83!o=@NQ$XPy5`xO77gx~k}R!lwMRxUCa^a`8ViA_hB2+f^1h4|}~X zHKQ*Qh=n_RE>FI1d*c!2wqLf@ZH@phQ$2yFFJ6*`UaEgBaUr1M8UMLEk-wD4e`_Sq zq-Rf$k4HkCiS8GXCOr9wCq>DsM5PGMHia1{0x50;!&$?yC_`KkG;8+B{yQF&1lHce zQ8-w7J)bF?g%3z>2A)87S@wxy%r5&zDb}q1EpBJk-Pnb-3kF~>oZs|@v z?UfddwL0xh1)UH8sJyv!nw$Zfl5ForKAWn-zY`HK(rQBi%NN+G)8@>V<<5~k9z+cW=#_0@WV;KU1+N)GylN#=d~mb1<0EFSXK3MWLmjktslm zrDcY5=pE2#8jPg5>1)+Sjb6T9CcV3kBH0BKn{kw0{OYxyuL0}R*?s;AdY&fDT`+LU zLaC!R?vfkUL0{0)(>CwrrKNi6M0`Sblc@R*!+DFzne*5QnnsMGQ z5r&+P3bi&LgrjBDalRD`)oI#>LyKXd6viqKA zRUPXtu|Tx?t{9mq7Ygr%jTR%vqDQp24-=mzL}eh9=D)rS;ZsG*&Npk z+}g}c@`ju%Ac2}wF<{HSR>XEw)6gXv%9tKb|9tTAhmc!Qq50)5t&ULmt@n)#bQlmS(*&G&y z%DT^B*ZQ1LWgib!02Om)=yYJ5uLKjYL(DwajKLY#aqAs)F zYp9PA6%FD#RoQgAJ)*#YhCNUZ*J@e=XWQESWIq!>`+Ho1CZAW&dZ4)@9hb}4xNBYV zv0b&Z^6t>j_2SEPYK|7w^n+J$OyBWm$i0BWdzwcH{@P~3l$IJeN==kO(H~NG3qCB6TufLyt4ui~!zWg@wkYnaI9sMH}6&!MJVp+Wd zcm2kK7bV{|D&8M%yJjrhenOhq>_|0Y7lgxKQd2G46>eEvo>89mSM)j=S*r{PWlr-Z zybBAR`N*zh(-qFb#KbiG`TjBc*?;HUty|4V~C%`7m%tp6&)aYx(i8c9seTnDA$qy>_;f5fhFXfFP zD(5}=>Lu~BJ~x6Hgo zfJ+aio|y=;=A_PeM!K4lzB8Qyp#u|!my&Ih^fNu&Rx^Ll{l>iN)XJ`pY#u1bcxSG= ztyvySrY>0UKR4j>L0?>5T@2AHO>`W<^WaMPCPi;bxFsiZn3qbXN*# z?q0_|D{bdBy2?QFyY1_3WzI`gjrSmaR<>6ZWaE^1XNT=5u>KPtgjfGFC^ygUl<#Skhp2s+h{Rg}c8Aa4Q@pj(?&!g3G>xxb zYc*A>^N&V5B4YWu{Bo@lgHq&^UWcKO$iz!|*Fp+`8g!G|2pe2rZ&5F1Efn^NwY&Zf8mi(%&2ng_@)Q88=Pd%S7UH})(?ZQM@kgAp1NcFtS8YJItpBpB1Sr1 z<;+!j4mW&%V7Z4vPUr-g59&^Xdma)W5GN%E)(mRISF--XJo8ScXO_@n)}W2IiK!73 zeaTPB-#V_S^4S4ws+ZjBzF?A5=q{Z}00uf6hNp9zB~h6*?D=^kgg+FWnH+r&MuBpU zb%zJOKV~y*guW|ZK>AIwFFV&X+VhPRdc0JJL$5md1D^CGRsI_C;#r=KCYCjiL7b*Y z<-5v}=TmiF_Aive`fPWcJ?q$(r@Q0iCx&FIVPo1>uL=2u*qVi!l$<^WBmg?3flM68 zEHxA99QtrQvHH#fXPFn~Bb%uU=|IrLQg|NC&1s2{S$?)6H2&!Ku~f~V7d^YsbzCO? zOdQm>+TFDI%PgB0HfyZmT{>;hjSzxXNcc7Kt|kvqI-5v{4@JRi^idLdi-&pY;pi%;^%-^CxDjtmxHC@7 z)o{ns_a=V#_P)F&m@JlzhctHo2JaQKKmwzdSk?$@Q3Sd(8s~PMc<=xuqXW6Sr-o~T zf*QfZ(`I0jzi{W%6BlZu!8p=frRLfA&9Z?dQ2@BsS|9`|^V|~T*6(YYxvtv+vAsBM z8_W>fGwv7TZo)_1@91Bh8(0GNyZQHT{MsxyE0s18K>VrsN_F>C_)~v|CB4h)TYJ27 z0WqUbxN{mrru~PWu1{2-=GNHewIXuOk-+Nv2BP!tOL$QD^c62{^i*rvA|U&4d>5ai zq7Ht2@%f#OC*FKqxgs+^alPNBva~0D$ho3kZ4Gu^J;yz;(fjnsQ_%l4!J&jFUXSm) z9n-hFL)x&ZAMg8QUlgmIx$@8%%x7n}KHtCM>*BxE@8;>zL$Lc`+M{@Hd!0?y*ShkK z$SjpAKl%DRO7)AKkbQC8DSHOv=Ej)qo@f`;t5Y%knJeF?h;w^x><61#+*cmKrgZ%` zcy$u=zJ${cj_1GIcmErcihWMa*R(yeO9cvZzDJyk6Vdc*m>T1>@A~f7cjB5*JO&Iw z?s{8xWdu&#jJ}7t|7yU#0do_o-=O-#nOR_8^Z+gw-old$r@()GvJN(OU{YATJpN$BWwKrMaPTlOKF^Bv>bgH3F#NSd5#Uu~5!vz>zM&DGNP%PUh{Ria%*=5q z8&~U`kMUM)_bM;63pw1 zV9v+89u2ke84U`(BAGwB-7jAe@lG$%M+!tBegy8L+TY8jkcP3oPcm1X-;vhPY@_}g z&)Reonhosc=z3CttBJM;#7m%VZPNAk;%zTXu;|AoV9-}42^Rq5vaFLo&&6>$Piq9}iE7jHy6HJNIprS#Kk9NB)6cDr#ES#i%2z$|-CvlKA-lsQwUfWA z{-MP;v|OoC^VT{fv7_Fl3mNiY4KZYQFQg{-#~RDxi^YlW{0C7@W)C4fEp-B~yAY}| zo%4}-P2Y@t9b3%L&;9{=|8&Woe1+zJLH%pDy8GQ+C}-Sg!})EHi*_!Lu1nuue{KTd z=QUxKHyj{ZH|(%Zpts;|aKx|C%$K~4dAN)zb@FD$w0eJ*F^^K)6WmdTIr{x{o5XYl z^xpH~9Zf02VB%A5VsGD`%bzC)pYQKyQ9}K>h#NLRR0jH~P-NNx-T!yO!z1ION#HS; zn1L=|LG?q~QM&+6K>%O9FSBdJ{(D8fZ3?A?vf4CMbjB#O9^9rqnr$yAK`?VTxrDEik{f* z17+69_#z{q%4cF@A+mb)vKH`6*EI8G-xjUUNsc&2gk()(V&rf}A$DYB#7f^pKZP^n z{%{(1xA;RyrBY6c_#$*`Zq?t=qQ6-kVlq;Qy;JF_QC+$&du5ce=I>Mm%l-n zPk+$BTQ-@kU3qf$^^+7!u8?`V4k>i}>jZJN106u8d z&g4;v;~IH&%ab`|AZkT*snQVKAu8x=FS_h+qluASEq(3cN9WXo5KW$xDDwiiMEzP&inx#>sas6Z7Kmfx@aaCm#^)v;6)afkL zkPX8_Byd+dG>7e0ZSv}I(%00mOIBGSNMB>?A}>ov=ifgNaEu>Hn!LCE%nZDrgx{3L zrsU+od`~tKHKN4mbg;4ssa5x|7}R1?dImvZpITz4{;|#$dpg+PTOZOfUIfTiS1UEt zIdwngEETkJO(cF`#Y?x;Uf^FHB|JZSyW_{JgOb2=zry~-Hv_}F#?wNPp7NZx4rkc~ zkM{sE0zKX$vScIfMN-r`__Gpz>nKdK+v!mbCbN_Ppsh`z9LvSS3`s<=UqWlh2Tg&< z0ZE=}ruB;p&foI-UKN!?Ps`#rlQUXnSWMSPasb-;yvbdOrXk2Bc=?hWkTuSTN4Q2c zf+YcE^?@Y==7Hlq-bvJ7w?X-S>_aV-)2$290WJ}hkyMZ)GYJN<S7UAXeUa|D`qF9~fGa=hZT1{ln7T7gcSWPyq?rSOCB3%+8#ipf!5d%7 z;B!$L^vcwbtCm2v!Kr#zP~n#_p}5`Xp1v(L-6a^ehg5W5_e;e~xMvRwj)(3x{JuLF z_zk(nzb9RSsX=^DBktZ->eKMMI3BSO6+G&7N3KF8Qj)GbGXho@nOl!OiSoq0K4WEK zxski69v_U^4Y}!g;lX)S|H@4p4+Td036-l1+0!qV!-Q1*+erA^Qh@| z%T`8#AZ<%G#yIDUi9wsxgRUEwuFqr@VD1ul3l2F_JB``6@GWycuS~gqYfs@QdIG3* zPlD(^zK>W?Je@^qG}BD#dL9fAPXZc|P!biles!_k$BXJNB0ng6%UrXwbz~PZ6N!CP z)LDPlM*L2%l+fAH<1TB`_&UUx|-v#Vpvwt=Qd^Og z+38^oDK?K6n{A_~kwlGAM6}t2gVu_o=j|SpmVH~yZe(OzBNd;R;%D^s4-mLh`6Wh9 z%<7^^35;+9y}$dU@ciZZ@0E@}3c-HIDR7VF)ir2Hv2C6im~si8*~M1mN4LVgJAtCO zoiy-9%JG&NeXw!?b^1VWg@Mq=T+3N-_34z6K{y@ zkTpJH-fcJLX?lL@Qh~BA3sOVWXX=E~nw^RMl-1j{DZ{y_Kw_9ZMM6^3FwC4Y4jt#2 zn73eT>%d9~ot9F=%}Xczb$5|(Q4P$*IdyFM5BPbe=IO0we_g1vw+*^sjmg_gVaIXC-A`TTnBsDN!cW zletptvu&tW+3g(jB&5!d#-x0MxyNFc@a-k=!=yUz5S<^=`r?-yhie7RM#Z(>uN$2^ zMtO4$*kf2kESA+e%uJQ^D2D{~a*La>+jDQrW8}!#6xyYP0A2>*Dw{h}&kd^*AAv)QE zV77R10*6qj-Q`c8#vVeOB=)m-!EZH3sx&Rf^*;4ctkNJ!>3#rpC(0N zPzDG2ek2ro(_lKQ|Hf&X$R%lM=uNRf;Va-`Re^ZwKG{-d~Y`WwC?;tr& zn&kBkiouoUmzVs!8r!ZeE@Gl8?DAqf&ASWxkv9Nb>c@*Oz6frU$7(7wS~a z7$5`pVC$|*c}1K1-bVMGaOvr!s{LJB83d%nHIj^JVZQzNq`i7MFQB$c>Gc1?Fyt)m z_g}tG~}_e=3E!>@26S%l)q@Q_1}RTq~YG=J&%! zUy1B}cqk{P@tq0+OdhW>h;rHo%n6?s<9Iz0{&d6>{Z`I|K95AwcK}lE`6S5b+mxx@ zC}FyAN{I1~9JZaj@<{PJhB{yDEziMDJT^rpFy6E zq;SF^DH3`O(n8X$#$7`#LEmGj5siE*>)MnJ`h&q4%tOd7nyOEvSuU6}dXJEt@(Q|? ztyK&TAbwJP$$M#LQ@0|^?Lj8U<3R~5-X_O)+)rfoQdgn!2>~$mwXc*hFfwjZdHH~> z=>74&?NFweDw5zTEnup2kUx z4xL)_{jF-POYleA(w7lr<>gB><>8xt-X2})wVNuvM$NLt&U6Qx8eH41W||}qGw!@dG?B4MiHJY{Q~Y6qc9UeK$No7@P=)Z&>Nz7Dp004H zxu=!2byi~(``BYHrf#4{)qM6xn~XEbMlwTH8bVvw^h-9vVG^t2Jjg`p7k^RQDEX0b z-sjM8mUp<(QAt)6mZRkJfD#DxuWx4Wy0x{D300G*g7EQ@{$`v3&o<~S`%x!84!&^s zh0To`f}mWMpe2O2xqQS_ zoEsl2uFBtJ$k-8(*mgrTt5!h#_BBp?va?F>6{u22Z-53zQ{MJegZfbjIg_&Ja{I_< zv>3e2K(jq>`re2^n5!z4GA%h}riaUP>TF;&DIrsP6$ zJ2#i_0UOLqCwtvoiD!4yDqhS+ImO__vbAdXe+(&pnN#>)dMxlX@hzAflma@6^`53I zNU_FXs<|}af1W)}Y)_IF9`)%keQ9o0)LMusnWCOm9bJ;yu3GVna_1xVY$&FDOBw+q z->C{*-G-`v=+4oJi<%F3)9jPfZgMJ#Y*E;qzn>L&OHuJX-P$k|3o>v{!U&*<($rC~Q*Fw>&&v2Pr&#xzh z?a6-s*yG32-E``vgJi%&{73E2Tq!{p^3S+|ByLZf;SkwU zAHCX z+Iv5X#r19W#q6pRXtK8F69VZ^L3O-vqIpKIu9D}wXRAXQ5l%8;DGWe}(rL8QTXQsS z3H`Y8$$B+*H_rEYX|HM?ycay(D806rGK9HoThyDml}}sU9lIjd;2SC`lyqN?bM zY;06bnV|z`8I6(_6{M$Z=V8YN!w3h>35DjIsk%-0VXBpN)e0b*B|_ICA0IIBs`lI1W-)kca){ox2F zF>`isoc=uap>Q=_i-pHa_v);U-JN^ht$j<$g7ltj(gnQsgOW7zF~fkODHxsEFwwoa z7EB6DB+M#?yCyoBx&wqeUHUpK>Y?!sm$hX@H|Hj0H0;mk^Zyj`=+u3B-Qh$t(Mg0% z4Eni*$JFf%VX9+%Q@(uPmr+eQSFCC3sW&eT^-l1M-i5A*kj6D`LBN2C{HF#qPq(ms zBDmx&2@aITnzOwn8{vFq14eI{?vIIeZTMkZ?rQg?TGB!-D+xA^o*=Yq?L0D=nr#mI zI6iJk*ZPc%1#p50?jLoh-tVgEdPuR4nO|Vc-CX1uxeBMt>h31~nqaEgv<3Q?B)qs8 zfqi^Z4cejf-a!NNHmh^Kt9(TE`#hakT2o;jv+$JnCMa@QJld?mIIE3rZYdft#=PiJ zY^tJ@!(T6^0Ovjld9_#*DCV-VvZqcx%~g;5=M&YZaUlFO`(A`Hmi*^11w`hjlcKk^ zD(mY55{kI~4Mttqs%RVw*ndcH_$h|d4F+GNb*)rVot?o%Vc?A-^ap~DeGx0&*|s88ZKE-!N; z6Pvu1tK*Zu+IQ(uY=A!-ilOV{$6y{kj~4w!c{lFihU>HPtTjT`8BZ(5m`C}p8I38; zAQqNk7k*aZ>VEZ@C7a#8kO$IRR0a~NS0@7|ZRjXfSdoUB_YEwkMKM`KpcNUp_Tgfa zxfnBy+@H2K@(~cGT*~z9Y{rh$gT1C56JrClhYLfE5ou=TtLCdJ}1$X!a&Cn&Z($ z8~PV~RF3()W(z3P619nZC1DK98D3FiHDocwJGdtHIjJe>XE{<=wIg0hZ#-w&U|$af z9T>Ro2z=~aX;MXd=z*RLtx8cWLvuZWM#$fcaIQx}Ljv)5BI!docX^V+K7K~***mw3 zIs4f&J8CpnDgiK3<+WEESLxTsW|gCG0hIltJCbWo;Z%&mC-k5-KR;K*{xQPDIj;{F z7KFKWBX)@-*^6>>AbB|XJtHUmx@j50J%84ZHxS_U@Ia-B(Y$Zpa#5a<_eA#jFDY~i z0UzhSLHV*ycm730CCZUU(#E7eUmB`(Y-#evo!Q{o+4vk%>p(}xjJo@d1VJA>c@fYe z{aS}kSn1}hVszqVqNY(^fjc7BckKZ7rD2ib=yMLxRXhYf_;{R%Pho-hz}OB$G%M{^ z`Vs>JZ39Q>pSsVlzhnKdyoW^eA6lqL+Dd<=7Q@cCHZm{2ywy>7^5^&OnY1u++ICeu zghS1LqrDD$e2fP9%3OtX2z8ahiSJk(9TVdoN2|03j7&pHOa(;immlH%MeaqClh6+^Y|@u&nlHcLzi#*@ zQV1giKkBnI(GrL+W{&A<$it$)?;z%ek>}Ruysg7MO+_@2y?+YdV3y}la(>b+(+DxpVO6TJ_2 zjH{1oASH%giR%B4sjm)bvVXg$1PMVwM5PoNEhtiwBJe0BAdK#i7+umKAPP!{Qd1;1 zx^n|WQbKAlx?wmvH^zQ9&-;GA?~nheac}H%U)MR;Ip@j@>tc}7s_nC8ydxV+uvNK1 zW}bmASsJA&d&=iwu`v$serbi>a{brgxrgVg|N2tE;O^`TjM85$7Ad zc!8am?)xjf0^>7b{ld+39&F3N3h3H8CV=o&FfOG{RbO9QtEj4ax7-~sBgkM+FnuQd z--+G=4X$Nw_xxaJ`D`6Jbi~ejech^M8|HSm!qT0xjr)7CDiQX5g^lIUBkV%CA}wgy zK}AV^=s6tk_&nQSa{P|>u&s0$|DB`KdG0e{6zFzWO33)*Cu#u;uw3eV-GB!qx9{WY zkdV&*XaOLuM%l?LA~p=Fkwu~sZz2wb&s>(eUueMYN|!&aH)S5=L&m=BL#~&8dP6M@ zKB|wxhN{1}hB8F|M5{W`ZB*^6uyrT<1|yW#g;(DWBnuICVA2MK4B*DG`R+a3xMxeo z$B#WQ)T86ZB*$t-b~7*3YG!J}w;^zq8WW*(7#5=zQ^kFGt!*kTf@(tJ7Y6gm+(^cm zOs-ettlh@F6lHy%z{kLw*6^2cX|E#m+*j!RPpjo|nelkz`9-xjI8g{qREvSZt&0U4 zwOFfFgR=8<9Ip=Wu}b9r@*VJ3my%lKM&+O|+WB zx_zSr`GBcQ$-O(Dj-OANAx1IZ_gS7s{27FCr5oe5k}QVg0=mirk>8ZX@Qg2Sow-Ey z$`Z;ukS$+}0HcCI{NX{Y@s((KjImCrbqTh;){XGV(8M;l!lez-W zLCU*x=I~Z#t;if%B%RMNco64r@;&+JaEvya^+KzKH=PI>Tjda5*NxmKPUAQXh||ae zWG45!KcUl&@RtBF(GcB(_D!`l=h6(piLyq(M?+ykJ~@vwy5iVncK6~#*{18=sNCD# zW<9#u{nlmXKkfjVD;tOx_{yfHm{5Fus8ap(FJL3Gt24TW+I}cUGidt=Wf3p4)8ggn z3d|dS)gz7`${r3Y&H3Dmvk5x=$=S6zTIjLUdZJ$juk*rV>urEo8;i3(1Bu^JK*J(= z%N23eb)JP(qcF48xqEg>@Ipua;o9&PSlmXj;?e4Q;M zC!|*OwI1W*BltOvsVBs>(pUeNI(6D4EKs9veCvp3-5gV#m&kMM;Ixd{!lL2Q6~tPu zAP&x(wc(9erOQF~-lLA*LY9iA$$wHYO+9=m7DI7u(ndY`O5;5Nt1e0BP4%ymW^=A& zlzA2%q0cWtK>CZu3 zlsZVDxl7BNfwTm=I5I)H9lbTlnSZ1(M5^XMRb}8LM00F*ckwZtFqtl$w6fmfYOUb3 zx_)L3FElRrvJ_7|jW2{Taz6E>2tBqBeGlxs7an~A%&}aN1mDZ> zrIHd$S64u8Sy2(@+x$5yDvJNz-g3M`TrmE4k+2i0fVem+4?Gb{w+MMEPuSF2Zl~hx zB%I90*Vc-gzMb_somrQU2I!E*ws3MoL&G+px&Uj$JaC7OS<*gE0&~pWk0o5tk?JC? zHvy>H-`_9gxpK8@`Ek>%uyFHV(ceQuHji#Ej2l?|LIYy#%byf(qyRb`T3T8|W8;p! ziM#$#Pn>WvYAIkyitc9ca%j)xX#)ArRzACcJt8hj=cfKaM>;=WM zarm#?5E2$%yD)tw@qZKba1x8$52U%M2f2J5Gcz-Kj4-|%_uZP)g3^v99N5Y&Y8@hq z1OnMz3`mdp?cQ9ECBDSL;lV8T`5BBlQAD)`uPemKI(TmG&H=dN#m!3JZxY(fLN{WA zzn}(BjRFUXcsd^5nW&TFkTghCCm(Y*VPX_Mb7Zpn$nI<~A0wi^{daD05Eo5B333c#W~&L1+mC{0%hW^0 zf7ZsWf?m73dR^m}2>}jKfS1K@BFcV@x^&xtx>fiL$mMpVFRV2K-O&6lKUPaM(pns^ zXONBsXhmh670@MHE=_ClI?;`OL*3P<1Elb=_E=Wq?C3yc&7E=IRNUFlfGo3X-kaf{ zjk|5F$Rz&^vLP;#g7dF9joJrzvsnh_@EmMRUwPGrSMa{z*#IuT;M>8Y^7BXthkZDL z&GWIx{)(#5!-tD#NO|`8_AeF-jnbaN$rk@7WeA*8(5j$CdyZV-Zen~8MO%~?_7Y13 z9c0dD?L&dK-tT;`d+*`|$q5{QxjNsSxz7M}cMHW&CnKcY7f7}dcvs+H(PT=xb-7)v zxmlyi%$PrQaPYMP1r z+V4AmCo9S43EOY?+Q=CeE>U`+0>QCmw}X}>3|@}78+!6KH2M;&qs#*zh5(h6oe(RL;+ z*>K@R#X2cEyTp5GGxp+@=g!Sg?J zDJ42@uV`XQgUddWf^@aFTWq^pTv)zZU=$iJ{v0O@kYoH%iv~dz0n=wHnT6Lp*x}X> zy=u)=K%&6XM>(@db2RhEQcbYpXs1B0n?&NaT4ciSqSVbAVs+B@5dp!psAFWR1*%di zj&)D44F?Wq3r)H(4Vca=M<;+%&=gf${!Q^9$K1iZsy;XBXh7~S%HS9h9Hj5qVO52yrG*wfGA;pbVLnv4PbP(}R6`!wq5Pdu z)>{#Os~g`Ztyu6n69v!W?4Ja>_?iP(b_~veWSfO>Z?O#%?WZ-9j;7@8?DCZa6@rBq ztDw1rAr>)1GsK5;Rf5|I<2k*;P;GPEK`^7Kfs6^K+F3)+*;?3zFl73fc%>B!{}@iY z^k&a#Tn>H9*k5(Qr&rx_-iL%2xhJ3)+z!FtLwu$hX?)V}q?OrzInVJMFG{9=bF|Hj_Fvaas^PSCoHl*f|tn*C+Xva%x8lHH@o3EEc; z+Ku4s{1Go76S&<-1+Q~Q3Zl7u+`?gn|R8(*Uk{)9&;|q5nmZf3^_kgAU=8j^S=CXW&Gk=rdwC6 z2;##Dl1OO4Z#R1^w2_(yVrx%Z=kaoEQtp$TAc)wNArB`r^kQ zy>D@fj+tU`T8YIksb6d&p5fR)F+9CHRR;h==NOh~(~dwbu=^A-3b)2yPm+o*mCtCa zw^_KmBMswdSQyF7yP|n_5)Ovl%N_q-KWOC=@sSmDk5APXxU3|3&B;bHlZQHy2ZJgv z*XCpOxV_I-U_JR6Er35N3s4o}vdphp@R|m1tL2)o8%_R=G>QPvPj--_bnntzVPqtM#aXY1PYR`Bs|Nf^xT6@KIk^eB2?~j3U`U+8jlmkz(f0&m1^#| zu72?XzjIQT`M$Qcwpfk;HZY6YDo1i${=(%i1Nmmo({YMQ8`^(NCCBSw=-*he}$`WLhEqTURGkai%%F{WTQ65L z$Z`y;%g>6>F&M3KDI@nuE*_tF$!K{`x>yr>%@LGb^Oz6q%lwTn+@-3#B%1?Rmnycs zU_8$~h|gQ6{>fQ4QJ}f!Lw9QA(p)T$@^^wKY|3}2sOhr`2o!?8q=DAl>5D?@*xAW3 z9NoXl3PfmTIo%mxo_NLu@F!A~PZ9`62(eR6t?8J66qS#&cI#CP#=+e1xs+K+N@39q^$<`8%ig+*BG4+}k|J|5 z$5@Kb?d(=gMZ?YCu#*?yp}s#^)}$z<(;Gv3bZ?Z<{Qmv9ay5fAz$DsGdgABV1G7&C z4@e*%ayMh9)joMAGVI5ZqTCr(VE2?kpgpXtCDMY9F@qO0-UMSsUK?aXV)^e#DC_mj%ZPD5sW@@wk+k#8;sdR>iS(fAy8ehz zrG}P$IT9YMQyT{yS6|oQ8z-fjdK&sI=llJB3*l51fhVp(Sct{Xk&)MBJ16+yOH_EW zJ?nRIw!Zfw^zg-oZ}Vw6@dyd<8mFDg_2t1>$SKgI#se2<>N5_Odb@3!8!G4f_jaAj z^!v*evb<%V262$Rvp}VAN-9r08(JRzu5@`+Mn)Jpf)8~_Sc2+~O#baJ4%K_2*X z5?_@rn_xnTOi*ClMF~SLfll-d`=qsCxTrd2|fDvN0f~w5LEy& z(hnM4sb>thGZw>j;`7O;O+{Y)f#alQc@pU8spI&t=|PF=yALAQ2Obyq&l@Hw-)J?n zv4n1MDUyES+AMk~apTaAB%1(7;b8Ou*Af_Q`r8=4_vr_ZB9;$|Bh2^I*oBJgiy<#+ zwfN(c+8Ut47x(#feT2Bm(cG%hK48f_dTGjxXWz8kV0Y6QwSxk-WG665O$B>i{^yBF zx|p%)xN!8{btynLh-eD>%&6R8@M^TV=XOJqoEk26x#9JQ#jUeOH{H;(UeWRIPNC)U zGCKiF8QqA-Bobv1r!7s3GnmV?noCASNp4flmEbHmwuMiWGEBzbTym^?vi7%%tqz%Q z61!cLeh%F0;g54bixSIG<3lhnC2*3qx5->w z%8^w3d*xAW;jlktTO$&lM3HYr|=6&AFYm|KZ^FP2) z2oZjE=6}BNLZOd9sJ0(k0>ZKVrl;rL0|3d|!{Y`PFx<=TU!6NaoM@UmhtA{Yq6>2Z zXfBJ&faLtApV17wjMo@|ArmL@wEN%QPj8Vso%I&~P+ia>$BGT<_1f(`~6_PSU-PIs*?F{KFdT(qoZUyV&J z;HH7OKj`@HR0Q;Vh1c94IBA!sbH;bt1=xSru#%+iKI?;81X%y596+S7i)&AO@Zw)m z{|WSrF68hB=VBMDTPJYVF9%|LG5<2L(e&&cHt}+4r;TAjSN}WTW%_tmnM8tvXTHet zTe86!;HK(T;1~q%XN3s0ccT_(3CY=8k*JeKz6QIw)IaR^Wm{KdL`S;QFk^>~Ha`>AEhl$p^Y^opxPfv}-L)D62 zfxt9A4A*S2OWuvms^`$+yg67TVKKAc^@V^$B)^0}CDwfZd z+633ycDEdS^4vV|ZoL;iS}Q#HQ~?OTLGhzVHT#me6$6)nJNIT1@>3S399V&6YSSih zs6x#i4J6g5=Oe|6T1i<2k&Q5NoVhco`Er5@jp9GZV3MZNEPOr zub!ao_$L5eOr&Zm-ix9 zoUt!aXn{2)IFrq2DtxjA5_a+RPL`ZlY;EdaYRJ6ouw2YmhWc!^=j^C>K6O#+rfjv> zSKq}XeTLTl035wO z=F8?_yYl{vRLiXldvu|G2xy@QNZSwB3c*!3tu>Up^vMF^ns&=DfKJ_ekUCW_oN@*G zu)n{ctWJEdRKXmUD?*e2AgIn;HNu}5NtII;P*U1DFIkvg|wED}!csi1f zNST}iC`$xx9EgY72^Imkk!V051RS&_&WlCP%RW)J@YSLl@z`xIoFRzB%gf7eGe3QI z_a_562}jVb;tVj7_yQQmP{<3P8ShceOMnFsukuq$gn{|NOxfr(^}JI$K(@{yAdzb8R3q(N5FAlkAZh8B{fZ z(h^SpY`R`jd{0;6>RMo(zKxYORP`FhpdjD{$C=PsKTnvM>XJa&a?Ma_EZy=0?XdZAsxHK^h!I=EmSxg5*wM z(hEd!UJ}n@u(IcI>qU*%cZXba!NGAmx3tdHfaRKEwVcRO_b(D_b;SNtZqye^MZE>T zlYrJ@|G{8WCV7NLt(;|mupyTj+H^R?&1qhZkN=;OF=-ae%zQ#5bGOGPW*E^((%>`v z*exUF2cb+^OAx7f%RsS8pJ-g$TCBCI^<0&c+e89fnO+h3!eF`ywXD@V|8VJnG_8&E zRQ0>Lf*XUaqOtiu0I4OW*mI%kK`n3a;y3Dz*dU{x8G-U_+Gq06Jc>LX>UcGZm4I!o z(6PpJVH1}}y_cLnJ@>+1%LsQ$P&bQv%!c;OPmSQcjt>yw-4nHd@ANe%Jc3?K!21RG z0B+#AP0edn*+XfD1{Bgm@W`X@`c$8f#*fGp8KqE3=)qhi9q8EBk<+}=)IrAQYw#J( zY>S3yHaf~iZ}%f4W2)K8GgP(InkM5M-xHMA#Vf1T^5q$l26#pYjwls7_&17pLA*fS z{&~^0bMSi=aG!Po<0Kn{wCVw1ti}|0{I`Af?fhpzt+oh*mvw|*3=!`DY+*O@ydSv$ zvB2NGBt5l4_LENmIwWi- zd#d{x`)6uM%M0jbIqC|_*>Vv|5A+DWzp?IEW&w1llTAL5CE(<<0L5;xc;00mA-DI* z)*=TD>>WfA{o7ff!4LKRH<{tfb6vL|;#cIt9IFx)_2D9t*Gi;2F?4kFYu65U+uo?U zff+@vYHGVj^z^C9ih0`9)YRzV4Vz!uB0}n=6NbO%F=%e&U!gN240@F4y0LcZh{jRQ zVl=EzadHr{ID#|0u~7gs<*_@3{{^e+ZtOxn-Zkl#a|2vYncNpyP5wkdYYU9pDm9^$gD?-57 zt8IEnNw87U{^LnZCPbgg09?<7=bYXFC*BP5QY75x64R_33#qr+u6odBu{g~0 zVf0Yjq{Jo%9(;XF5q0Il+=9E&L@(44|goP@%#(|KSf?ImdJ?H|5*9wbLf(v<$)-!ZU2RWH)X z1_^gI2Mh3!Bj>*}qAV{nbz_#4n}!9?*@G3?BiZNCd0ydxlTGlyjcq;;9p$t}+v_ck z2oDZd8>APj?t|oU1pdw(15BO5f0(+3 z_3LW?kWMgtbYyS^IM3SG8 zKQ^+Oe>8yJ5v~|IY;;T=lQLHebAsX0`qye)u&k}PpFG1cZFXKNc(d<{e2A$cY!N-o zAem4`4FQrRQO2S_N-g!g*@X6@s7D3JUGFB?W%{z+UV&82A0)7Ysnnl8NV%O&nUq-@ zvuXLLs1)~wC$(#NkNb`)*)7G{Lm6-cA*X&RGkZvQ>3V|cLmt7!3i{!AOjALx4CAa1 zhrU^<>inRP+PkXWuR_Zt3%N%!6_sfAY5n~$w^!*Pa)HOW8c0EJ`O!4*o!s8r=*eIA z2p+`E<~bBPF}6aBJ?2vc;|okf-E4YMP2@*?__)K-6Nr~;=XF%j#8a0OJEN|4M$Ikm zIU|#*PMI?1Sy#z)dX?`I>8S}e>rW~w@1{f8OqFR%cPF_QAIB~Co_!{iL2^oMv7_Jl z#5T1fudd!Dx5SwifN2leBwepny8jYgdrM!jZ_HqCv27(*REUPs;;a+4X7cK6yW0mp zwrFR<-z{tzvxXgsqw^yWZGX5+26W8TmtH@`2J!rD85DJc-@7IwhMmDa@8kt7ge7H1$|u8ZDq0J=A>D0$PwI>_UWzjmad8Y zQ#JYe7+3+~?6>b&nvlPd>bYiT&tzS#2|R+(0+EMk^q%Z1zs4(wOxC%uUiK|P%dGQl zx>|Bka)HMSmq_4+0!{}|fdUeWEQL^xOL|=4Vp(Ac;M(wwTnhi%KyE7CBmS$GqcEjY ze&%LH50ooG`*eZ8k~9bV>qw2Z5A9c4jT79|y7r>#$7<OVTv1=!NEUS5(5jW4)lI<01hf9ANf$4}jE#&Oxxa0Xm{Ds_uy{Gc)J(?|n{>HS$N%UrSnqQU1;J@1)>PY2buM<# z%;WoLSe**}SL(P8KnQSDp2tGYKTH*x;McWHykN6xRS-m7ctkUU9y7Y+M`#*tLP_>% zO+B6GXIi%y2O4K&^~n7H$TDD1U8A7Xqbj|8T}FE|z{$)v_1c0=#{~93(T%!9#d&c1 z$*F1c+f{ooRnC)6YJ9WdxEOmB_2*{9`fjV+yrVkWzG`yt>5AL(LSrpm z5MC~w9`<9~ZtDw5-o14sCPGzuSEj}Q^vo!*Pn5Sxk0AIi@9Y_SgM`C*8z|IlxeYTQ ze-;c@2ZzYTGpbP@p7ElMX1Rr+5BHqh`f~As(1)8tqQg(qUQh-44zD*_i4|W()D;v1 z+cBv%jMjhY*CVeAm$*h(6*>-`^l*!b{8^V8X1neLW%P;AM}}CpOpZ%KVkOlYZKFcKg zsRIamEgaXc=~(=A&-Bgxx%|y<cuxj>a{Y&J3Zn)j@^%S&sTqJ%ymyBYEd?_Fg5%3-FU=)CMm5%mFx zXA4SPwGJcn9S5h9nb}KQF4HorphdQ9lGh^Csqm8953xCWpFiyReOg^z?In(O9lre^ z)6%UczKL{~viYm0Cm)2Uysk+Dre>9f6$0Y$+}Ik@rEZ;yPvw?gotqiF2mP3?Q;w)Vo_=Dd&0yxf;|_ zbQ%0Nt{XB$POvL`fyPF?QQtf!Vggh@(hyMGQ;9<;HE^981-_8pzhsvA{;AV`_;UC9 z)Ke>f_neXdllJA~Egwxj`)zwf2Ujw>1Lv6qfhGPP1zd)Joa(i{(SdJBEJFC9$E{j# zQPPVUD3u<+ zlLwjJDi-T`yn936)IbYRoaH_rRc0GEEB}DkQAZG4nWY+!M$ z>fq-3_C%p84UXS%F#;wG)lx(!s%0Gt%j}y!@H}zJaZ%g94&tb~Yn^7XQrZkMyoa(X z3g3o`m~?7F#$88Zg^p#~4(GxzB1&51cQx+<8PMgxmm48#(pTk8{~)s(@94&K%lk* zTT^HE<}8rrp3>FdKs3>rN^E5^Q4D!&;*B~m+XtHGjwhApas9|Qf5Po!U?{0{cG6Li z*!>s?#)k|+^6n~y+FU?aNde0(~@kM z6}c*1+vKx8%SUYh%TGaV$echr$2H!Y%a@Tr@C&m5taT~X<)ZHJb~bh|&6!3*B?yTWqD$8dvtAjg}2YW?hLsGY$1 zYB(sos3hg%$`@%^g;6sKF+|I1tDkv%W7s)L5kwfjhQ6Bo0|J4t3RpD$?Ojigttk(- zNS)Q;X$5kqldd0{sZdATC8T=4$m9et_Hl~x??EzkS-6esW{~B+4$~A66UKOI51K7_ zIpKdb9!8~#$S4|))JdzX2%e|deC1QY%#sphc7k|7yD6edMTi6WPc~wWn~i)*rm@z5 z$`laK73YNsd{_Mk#C`g=7*l!gPPngun9f=T6T-Fv(%S!Ay5z1}z%F=t6eHlIW!L>Y zIm3g^prARv!W#S0E4%kkfgsdz-lVzuAVZovk#;{$Wj2*w{C??>FZLIy#s||{s0f#( zFaB;F)`--4Va)5`cGg$LzuFcjn!Y=E0ULL8sKezI`i>CAt)+t>_xxm!p3^=u17$$V z_oHZ{k~j`Fa>RH|MFeyVAX)(f?#WwhKHpmT7IlXvh1rGn3iw{W=T{0i9DuM>ZD*SX zB#=z3NWVBsS;3m{mOxi`z|mYbip}NwFe_A+rO8CjhSzQ0Pq{_r3XpGL=U{2RDzt7| zrS_5)JFZ}WdRDU0Is;ctpRk*87^Hr$U)N^@^L=4`E2Q|j&*<4V5rYl$I@H!v!0d!H zHHi#Lm*B06Q(@$@JbGqHzNIE*Y-TnP`~myhw{nZ6>{oNh z`p<^HxY;k8zFE*%IGIkZfwWsPgdvgYI=)qF2mS1 zxU!im@hugkZj|p+Bfp2DVjigoDgbTK>qQX}v2TR|Xt?&*4~4PK%`$@m zVRFT<)c)rF#{Bp@DLHkbFK^=U*|(gVLGw$R*@@6uF-@+^>*tv+9)M+>u@7KG0lw0y z_;CFlWNymot&sp*6JwjvN_}L%v;d;>RTJ-=B^_Xi#o_8CMLl#v5-wf~3BHXa%J~giNLR{uIHSLRFp-9`0%S3?FrD|LFVl zqM5~Jber^+FstRN9*aH0(WARHBS^ks0;l_T&)JnT&#vmoXQi0HN}RcBdYMxMLVPIh z%2A)pEwI7NLFwD`;y}fa9Qk;Wrri^th`ld-F%pNZ5Q{$OaSMja&-M;2=we(k0B9dC z^pfN(1YDAeo&lFO36xZ@@OX})p1dX1v1N}x21nIv!0Y}k7CJ5@X~rD|Cakx|DU)Ju7v-+vr^pU z7JS`mPf%>DGn3ivhc>YXx;5T7n3k}^p*89w;BE+x>2d@c)i&`l2Y!bbbHK}TP!A=S zud?}y;gPjupd`QSR2j2_rga3#1QxYaEi|w6-}crSN!N_T3pD)sC+0Z$T3Q7G)+?zY zT7`6BW+r4|EF_(oZ}7lO4_+mkmsKuEtyJEb4l&=?GIy}_5xcATH>dqE2ngLJrjfK? z^ot&=+I)}f;uehtJ=0Tp)=QIW!qjqiY)C1$pO(ilHL?v>U^Kn7ZVI*%`-t7w&4{cg zUE{G76cV6TQr)oo_nj=81`28Hkq{n{>JCSuR)TappMYi?gE*3H)js3^L^`18Ri^4Q z?R-;$1#2n~SMGu-SCCS|1|APZO3d(U+1qk_ncJh2p}xp8iCbzH-?x2mrZOUcp!l+X zD}LXePU}qs=Is@o)j|g5=t^yTWni(GLOyp-?m^+z$@e(ZX4eK7xxOQ-Q=m$3U0I&& zdZeZ-jGlWs;dW~DsXnuJycipOHnZyAjKsGgyo##P;Op7daaRB=A!3}W3L@EL?pDqQ z)02LycKlQts6T9Ud+~3-m!b5WiYY0>3mm}|rRO-8htAE$FG|2Y)zHbTj;+|cZPr$7ybzFx90L$UF0w);PW zsyF&56wMcB1PzFn_r#|7cfCVW74+@~bUEJzfOU0sHL#O6^LL;{YMbbROfdll+iqL~ zjE<8Iy=FDd0?PqL-`43mR_#fp*6Y}5+2c#FsLJjE(OYVVsC2VFw4Oe9;!aQ?L q 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

Hw55mLCp!2uspxMMIaCQx~;W$Uf=RQ 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�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

iCeLa3h;lU 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 z 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

bUT!nyV7^}cb?@Whql;8t@d?4s$6_(d4n=hv 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

~!o9dy+iK56U8b}Ya`+Ld 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℞ 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 literal 0 HcmV?d00001 diff --git a/src/bonsai/docs/reference/images/gear_tabs.png b/src/bonsai/docs/reference/images/gear_tabs.png new file mode 100644 index 0000000000000000000000000000000000000000..1287c8953c0f1e3f94f6f9cde92281e8059cee8d GIT binary patch literal 140972 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⁣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

MyER;o<&tqW8#)&W)jg0$ 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 - shows main application menus to open and save IFCs, import IFCs, as well as tabs to save and load customised panel layouts. +2. :doc:`Outliner Panel ` - shows a list of all geometric objects loaded into your 3D view. Objects can be organised into collections for any purpose. +3. :doc:`3D Viewport Panel ` - shows a 3D view of your geometric objects. +4. :doc:`Properties Panel ` - shows properties about your project, non-geometric objects, and selected objects from the 3D view. +5. :doc:`Status Bar ` - shows useful hotkeys when a tool is active, statistics, and version information. + +Panels, such as the :doc:`/reference/outliner`, :doc:`/reference/3d_viewport`, and :doc:`/reference/properties` can be customised. You can click the top left icon of any panel to change the type of panel. + +.. image:: images/interface-panel.png + +You can split, merge, or create new panels by clicking :kbd:`RMB` in-between panels. + +.. image:: images/interface-split-merge.png + +You can save panel layouts, or switch to another customised panel layout by clicking the tabs in the :doc:`/reference/topbar`. Bonsai's default layout is stored in the **BIM** tab. + +.. tip:: + + Depending on your screen size, you may need to use the mouse wheel to scroll through the workspaces or, if you press the mouse wheel, you can drag the workspaces to see them all. + +.. image:: images/interface-tabs.png + +The :doc:`Topbar ` and :doc:`/reference/status_bar` cannot be customised. + +.. seealso:: + + Bonsai's interface is a customised version of the default Blender + interface. Read more about `Blender Workspaces + `__. + +As an example on how to customize the interface. Go to the **BIM** Workspace and right click :kbd:`RMB` in-between the outliner panel and the bottom of the window. + +.. image:: images/bonsai_customization1.png + +Select **horizontal split** to create a new panel and dragge it upwards to the desired size. Next select the new panel and change it to **Properties**. +You can do this by clicking the top left icon of the panel and selecting **Properties**. + + +.. image:: images/bonsai_customization2.png + +Then select scene and click the start icon (bookmark). Now you have a customized layout for Bonsai BIM. + +.. image:: images/bonsai_interface2.png + +You can further customize the layout of your BIM workspace to suit better your workflow. + +By clicking the gear icon in the top right corner of the TABs panel + +.. image:: images/gear_tabs.png + :width: 350 px + +A Popup window will appear with a list of the available TABs. If you click in any "eye" icon, the corresponding TAB will be toggled between hidden and visible. + +At the top right of the pop up window, you can also see the option to reset the UI customization, to download a json file with a customization or to store the current customization in a json file. + + +The next thing you can do is to select a TAB and configure what panels you want to be visible in that tab or optionally transfer a panel to the BOOKMARK TAB. + +In the example below we have selected the gear icon in the Quality and Coordination TAB and then selected the "star" icon for "Quality control" and the "eye" icon for "Collaboration". + +As you can see the "Quality control" panel is now visible in BOOKMARK TAB and the "Collaboration" panel is now hidden. + +Additionally we have also "bookmarked" the "Project info" panel from the "Project Overview" TAB + +.. image:: images/bookmarks.png + + +.. note:: + + Keep in mid that the reset icon will reset all the UI customizations, so after cliking it. All TABS and panels are visible and the BOOKMARK TAB is empty. \ No newline at end of file From 71538455b4f26e11b6695b02ecfcc5c2bea65e43 Mon Sep 17 00:00:00 2001 From: falken10 Date: Sun, 4 May 2025 11:49:43 +0200 Subject: [PATCH 387/657] black executed in root directory --- src/bonsai/bonsai/bim/__init__.py | 4 +- src/bonsai/bonsai/bim/operator.py | 46 ++++++++---- src/bonsai/bonsai/bim/ui.py | 118 +++++++++++++++--------------- 3 files changed, 92 insertions(+), 76 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 7d0672e55d..6b1bc27457 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -215,7 +215,6 @@ classes = [ ui.BIM_PT_section_with_cappings, ui.BIM_PT_decorators_overlay, ui.BIM_PT_snappping, - ] for mod in modules.values(): @@ -238,6 +237,7 @@ def on_register(scene): bpy.app.handlers.depsgraph_update_post.remove(on_register) is_registering = False + def register_panel_visibility_properties(): for panel_list in ui.TAB_PANELS.values(): for panel in panel_list: @@ -404,4 +404,4 @@ def unregister(): del bpy.types.Scene.active_tab_name del bpy.types.Scene.tab_panels del bpy.types.Scene.active_tab_panel_index - unregister_panel_visibility_properties() \ No newline at end of file + unregister_panel_visibility_properties() diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index f497f241a4..2d6f7b9340 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -1627,8 +1627,10 @@ class BIM_UL_tab_panels(bpy.types.UIList): icon="SOLO_ON" if item.get("bookmarked", False) else "SOLO_OFF", ).action = f"BOOKMARK_{item.name}" + class BIM_OT_toggle_panel_visibility(bpy.types.Operator): """Toggle Panel Visibility""" + bl_idname = "bim.toggle_panel_visibility" bl_label = "Toggle Panel Visibility" bl_options = {"REGISTER", "UNDO"} @@ -1657,8 +1659,10 @@ class BIM_OT_toggle_panel_visibility(bpy.types.Operator): self.report({"INFO"}, f"Toggled visibility for {panel_name}.") return {"FINISHED"} + class BIM_OT_bookmark_panel(bpy.types.Operator): """Bookmark Panel""" + bl_idname = "bim.bookmark_panel" bl_label = "Bookmark Panel" bl_options = {"REGISTER", "UNDO"} @@ -1675,7 +1679,9 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): prop_name = f"bookmark_{panel_name.lower()}" if hasattr(context.scene, prop_name): setattr(context.scene, prop_name, item["bookmarked"]) - print(f"Toggled bookmark for panel: {panel_name} to {'bookmarked' if item['bookmarked'] else 'Not bookmarked'}") + print( + f"Toggled bookmark for panel: {panel_name} to {'bookmarked' if item['bookmarked'] else 'Not bookmarked'}" + ) else: print(f"Property '{prop_name}' not found on Scene.") @@ -1701,10 +1707,11 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): self.report({"INFO"}, f"Toggled bookmark for {panel_name}.") return {"FINISHED"} - + class BIM_OT_manage_tab_panels(bpy.types.Operator): """Manage Tab Panels""" + bl_idname = "bim.manage_tab_panels" bl_label = "Manage Tab Panels" bl_options = {"REGISTER", "UNDO"} @@ -1716,8 +1723,8 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): context.scene.tab_panels.clear() for panel_data in TAB_PANELS.get(self.tab_name, []): - panel_name = panel_data.get("bl_idname","") - panel_label = panel_data.get("bl_label","") + panel_name = panel_data.get("bl_idname", "") + panel_label = panel_data.get("bl_label", "") if not panel_name or not panel_label: continue item = context.scene.tab_panels.add() @@ -1752,8 +1759,10 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): self.report({"INFO"}, f"Panels for {self.tab_name} managed successfully.") return {"FINISHED"} + class BIM_OT_manage_tab_visibility(bpy.types.Operator): """Manage Tab Visibility""" + bl_idname = "bim.manage_tab_visibility" bl_label = "Manage Tab Visibility" bl_options = {"REGISTER", "UNDO"} @@ -1762,15 +1771,15 @@ class BIM_OT_manage_tab_visibility(bpy.types.Operator): layout = self.layout row = layout.row() row = self.layout.row(align=True) - row.alignment = 'RIGHT' + row.alignment = "RIGHT" row.operator("bim.reset_ui_layout", icon="FILE_REFRESH", text="") row.operator("bim.load_json_layout", icon="IMPORT", text="") row.operator("bim.save_json_layout", icon="EXPORT", text="") row = layout.row() row = self.layout.row(align=True) - row.alignment = 'CENTER' - + row.alignment = "CENTER" + for tab_name, is_visible in TAB_VISIBILITY.items(): row = layout.row() row.label(text=tab_name) @@ -1784,8 +1793,10 @@ class BIM_OT_manage_tab_visibility(bpy.types.Operator): def invoke(self, context, event): return context.window_manager.invoke_popup(self) + class BIM_OT_toggle_tab_visibility(bpy.types.Operator): """Toggle Tab Visibility""" + bl_idname = "bim.toggle_tab_visibility" bl_label = "Toggle Tab Visibility" bl_options = {"REGISTER", "UNDO"} @@ -1795,7 +1806,7 @@ class BIM_OT_toggle_tab_visibility(bpy.types.Operator): def execute(self, context): if self.tab_name in TAB_VISIBILITY: TAB_VISIBILITY[self.tab_name] = not TAB_VISIBILITY[self.tab_name] - + for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() @@ -1803,11 +1814,14 @@ class BIM_OT_toggle_tab_visibility(bpy.types.Operator): self.report({"INFO"}, f"Toggled visibility for {self.tab_name}.") return {"FINISHED"} + import json import bpy + class BIM_OT_load_json_layout(bpy.types.Operator): """Load JSON Layout""" + bl_idname = "bim.load_json_layout" bl_label = "Load UI Layout" bl_options = {"REGISTER", "UNDO"} @@ -1844,7 +1858,7 @@ class BIM_OT_load_json_layout(bpy.types.Operator): return {"FINISHED"} def invoke(self, context, event): - ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] + ifc_file_path = bpy.context.scene.BIMProperties["ifc_file"] if not ifc_file_path: self.report({"ERROR"}, "No IFC file is associated with the project.") return {"CANCELLED"} @@ -1853,8 +1867,10 @@ class BIM_OT_load_json_layout(bpy.types.Operator): context.window_manager.fileselect_add(self) return {"RUNNING_MODAL"} + class BIM_OT_save_json_layout(bpy.types.Operator): """Save JSON Layout""" + bl_idname = "bim.save_json_layout" bl_label = "Save UI Layout" bl_options = {"REGISTER", "UNDO"} @@ -1863,7 +1879,7 @@ class BIM_OT_save_json_layout(bpy.types.Operator): def execute(self, context): try: - ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] + ifc_file_path = bpy.context.scene.BIMProperties["ifc_file"] if not ifc_file_path: self.report({"ERROR"}, "No IFC file is associated with the project.") return {"CANCELLED"} @@ -1883,7 +1899,9 @@ class BIM_OT_save_json_layout(bpy.types.Operator): show_prop_name = f"show_{panel_name.lower()}" bookmark_prop_name = f"bookmark_{panel_name.lower()}" layout_data["scene_properties"][show_prop_name] = getattr(context.scene, show_prop_name, True) - layout_data["scene_properties"][bookmark_prop_name] = getattr(context.scene, bookmark_prop_name, False) + layout_data["scene_properties"][bookmark_prop_name] = getattr( + context.scene, bookmark_prop_name, False + ) with open(self.filepath, "w") as file: json.dump(layout_data, file, indent=4) @@ -1895,7 +1913,7 @@ class BIM_OT_save_json_layout(bpy.types.Operator): return {"FINISHED"} def invoke(self, context, event): - ifc_file_path = bpy.context.scene.BIMProperties['ifc_file'] + ifc_file_path = bpy.context.scene.BIMProperties["ifc_file"] if not ifc_file_path: self.report({"ERROR"}, "No IFC file is associated with the project.") return {"CANCELLED"} @@ -1904,8 +1922,10 @@ class BIM_OT_save_json_layout(bpy.types.Operator): context.window_manager.fileselect_add(self) return {"RUNNING_MODAL"} + class BIM_OT_reset_ui_layout(bpy.types.Operator): """Reset UI Layout to Default""" + bl_idname = "bim.reset_ui_layout" bl_label = "Reset UI Layout" bl_options = {"REGISTER", "UNDO"} @@ -1937,4 +1957,4 @@ class BIM_OT_reset_ui_layout(bpy.types.Operator): area.tag_redraw() self.report({"INFO"}, "UI layout reset to default.") - return {"FINISHED"} \ No newline at end of file + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 1aa2c737b5..f89c64c45d 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -64,67 +64,59 @@ if TYPE_CHECKING: TAB_PANELS = { "PROJECT": [ -# "BIM_PT_tab_new_project_wizard", - {"bl_idname":"BIM_PT_tab_project_info", "bl_label":"Project Info"}, - {"bl_idname":"BIM_PT_tab_spatial", "bl_label":"Spatial"}, - {"bl_idname":"BIM_PT_tab_project_setup", "bl_label":"Project Setup"}, - {"bl_idname":"BIM_PT_tab_geometry", "bl_label":"Geometry"}, - {"bl_idname":"BIM_PT_tab_stakeholders", "bl_label":"Stakeholders"}, - {"bl_idname":"BIM_PT_tab_grouping_and_filtering", "bl_label":"Grouping and Filtering"}, + # "BIM_PT_tab_new_project_wizard", + {"bl_idname": "BIM_PT_tab_project_info", "bl_label": "Project Info"}, + {"bl_idname": "BIM_PT_tab_spatial", "bl_label": "Spatial"}, + {"bl_idname": "BIM_PT_tab_project_setup", "bl_label": "Project Setup"}, + {"bl_idname": "BIM_PT_tab_geometry", "bl_label": "Geometry"}, + {"bl_idname": "BIM_PT_tab_stakeholders", "bl_label": "Stakeholders"}, + {"bl_idname": "BIM_PT_tab_grouping_and_filtering", "bl_label": "Grouping and Filtering"}, ], "OBJECT": [ - {"bl_idname":"BIM_PT_tab_object_metadata", "bl_label":"Object Metadata"}, - {"bl_idname":"BIM_PT_tab_misc", "bl_label":"Misc"}, - + {"bl_idname": "BIM_PT_tab_object_metadata", "bl_label": "Object Metadata"}, + {"bl_idname": "BIM_PT_tab_misc", "bl_label": "Misc"}, ], "GEOMETRY": [ - {"bl_idname":"BIM_PT_tab_placement", "bl_label":"Placement"}, - {"bl_idname":"BIM_PT_tab_representations", "bl_label":"Representations"}, - {"bl_idname":"BIM_PT_tab_geometric_relationships", "bl_label":"Geometric Relationships"}, - {"bl_idname":"BIM_PT_tab_parametric_geometry", "bl_label":"Parametric Geometry"}, - {"bl_idname":"BIM_PT_tab_object_materials", "bl_label":"Object Materials"}, - {"bl_idname":"BIM_PT_tab_materials", "bl_label":"Materials"}, - {"bl_idname":"BIM_PT_tab_styles", "bl_label":"Styles"}, - {"bl_idname":"BIM_PT_tab_profiles", "bl_label":"Profiles"}, - + {"bl_idname": "BIM_PT_tab_placement", "bl_label": "Placement"}, + {"bl_idname": "BIM_PT_tab_representations", "bl_label": "Representations"}, + {"bl_idname": "BIM_PT_tab_geometric_relationships", "bl_label": "Geometric Relationships"}, + {"bl_idname": "BIM_PT_tab_parametric_geometry", "bl_label": "Parametric Geometry"}, + {"bl_idname": "BIM_PT_tab_object_materials", "bl_label": "Object Materials"}, + {"bl_idname": "BIM_PT_tab_materials", "bl_label": "Materials"}, + {"bl_idname": "BIM_PT_tab_styles", "bl_label": "Styles"}, + {"bl_idname": "BIM_PT_tab_profiles", "bl_label": "Profiles"}, ], "DRAWINGS": [ - {"bl_idname":"BIM_PT_tab_sheets", "bl_label":"Sheets"}, - {"bl_idname":"BIM_PT_tab_drawings", "bl_label":"Drawings"}, - {"bl_idname":"BIM_PT_tab_schedules", "bl_label":"Schedules"}, - {"bl_idname":"BIM_PT_tab_references", "bl_label":"References"}, - + {"bl_idname": "BIM_PT_tab_sheets", "bl_label": "Sheets"}, + {"bl_idname": "BIM_PT_tab_drawings", "bl_label": "Drawings"}, + {"bl_idname": "BIM_PT_tab_schedules", "bl_label": "Schedules"}, + {"bl_idname": "BIM_PT_tab_references", "bl_label": "References"}, ], "SERVICES": [ - {"bl_idname":"BIM_PT_tab_services", "bl_label":"Services"}, - {"bl_idname":"BIM_PT_tab_zones", "bl_label":"Zones"}, - {"bl_idname":"BIM_PT_tab_solar_analysis", "bl_label":"Solar Analysis"}, - {"bl_idname":"BIM_PT_tab_lighting", "bl_label":"Lighting"}, - + {"bl_idname": "BIM_PT_tab_services", "bl_label": "Services"}, + {"bl_idname": "BIM_PT_tab_zones", "bl_label": "Zones"}, + {"bl_idname": "BIM_PT_tab_solar_analysis", "bl_label": "Solar Analysis"}, + {"bl_idname": "BIM_PT_tab_lighting", "bl_label": "Lighting"}, ], "STRUCTURE": [ - {"bl_idname":"BIM_PT_tab_structural", "bl_label":"Structural"}, - + {"bl_idname": "BIM_PT_tab_structural", "bl_label": "Structural"}, ], "SCHEDULING": [ - {"bl_idname":"BIM_PT_tab_status", "bl_label":"Status"}, - {"bl_idname":"BIM_PT_tab_qto", "bl_label":"Quantity Take-off"}, - {"bl_idname":"BIM_PT_tab_resources", "bl_label":"Resources"}, - {"bl_idname":"BIM_PT_tab_cost", "bl_label":"Cost"}, - {"bl_idname":"BIM_PT_tab_sequence", "bl_label":"Construction Scheduling"}, - + {"bl_idname": "BIM_PT_tab_status", "bl_label": "Status"}, + {"bl_idname": "BIM_PT_tab_qto", "bl_label": "Quantity Take-off"}, + {"bl_idname": "BIM_PT_tab_resources", "bl_label": "Resources"}, + {"bl_idname": "BIM_PT_tab_cost", "bl_label": "Cost"}, + {"bl_idname": "BIM_PT_tab_sequence", "bl_label": "Construction Scheduling"}, ], "FM": [ - {"bl_idname":"BIM_PT_tab_handover", "bl_label":"Handover"}, - {"bl_idname":"BIM_PT_tab_operations", "bl_label":"Operations"}, - + {"bl_idname": "BIM_PT_tab_handover", "bl_label": "Handover"}, + {"bl_idname": "BIM_PT_tab_operations", "bl_label": "Operations"}, ], "QUALITY": [ - {"bl_idname":"BIM_PT_tab_quality_control", "bl_label":"Quality Control"}, - {"bl_idname":"BIM_PT_tab_clash_detection", "bl_label":"Clash Detection"}, - {"bl_idname":"BIM_PT_tab_collaboration", "bl_label":"Collaboration"}, - {"bl_idname":"BIM_PT_tab_sandbox", "bl_label":"Sandbox"}, - + {"bl_idname": "BIM_PT_tab_quality_control", "bl_label": "Quality Control"}, + {"bl_idname": "BIM_PT_tab_clash_detection", "bl_label": "Clash Detection"}, + {"bl_idname": "BIM_PT_tab_collaboration", "bl_label": "Collaboration"}, + {"bl_idname": "BIM_PT_tab_sandbox", "bl_label": "Sandbox"}, ], "BOOKMARK": [ {}, @@ -147,10 +139,22 @@ TAB_VISIBILITY = { def get_tab_name(bl_idname): - return next((k for k, v in reversed(list(TAB_PANELS.items())) if any(d.get("bl_idname") == bl_idname for d in v)), "BOOKMARK") + return next( + (k for k, v in reversed(list(TAB_PANELS.items())) if any(d.get("bl_idname") == bl_idname for d in v)), + "BOOKMARK", + ) + def get_bl_label(bl_idname): - return next((panel["bl_label"] for panels in TAB_PANELS.values() for panel in panels if isinstance(panel, dict) and panel.get("bl_idname") == bl_idname), "NO LABEL") + return next( + ( + panel["bl_label"] + for panels in TAB_PANELS.values() + for panel in panels + if isinstance(panel, dict) and panel.get("bl_idname") == bl_idname + ), + "NO LABEL", + ) class IFCFileSelector: @@ -1053,7 +1057,7 @@ class BIM_PT_tabs(Panel): ).tab = "PROJECT" if TAB_VISIBILITY["OBJECT"]: self.draw_tab_entry(row_left, "FILE_3D", "OBJECT", is_ifc_project, aprops.tab == "OBJECT") - if TAB_VISIBILITY["GEOMETRY"]: + if TAB_VISIBILITY["GEOMETRY"]: self.draw_tab_entry(row_left, "MATERIAL", "GEOMETRY", is_ifc_project, aprops.tab == "GEOMETRY") if TAB_VISIBILITY["DRAWINGS"]: self.draw_tab_entry(row_left, "DOCUMENTS", "DRAWINGS", is_ifc_project, aprops.tab == "DRAWINGS") @@ -1082,20 +1086,14 @@ class BIM_PT_tabs(Panel): row_left.prop(aprops, "active_tab", text="", icon="BLANK1") else: row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) - row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) #space for Switch - + row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) # space for Switch col_right = split.column(align=True) row_right = col_right.row(align=True) - row_right.alignment = 'RIGHT' + row_right.alignment = "RIGHT" row_right.operator("bim.manage_tab_visibility", icon="PREFERENCES", text="") - - - - - row = self.layout.row(align=True) row.prop(aprops, "tab", text="") @@ -1105,8 +1103,6 @@ class BIM_PT_tabs(Panel): if aprops.tab == tab: row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab - - if bonsai.REINSTALLED_BBIM_VERSION: box = self.layout.box() box.alert = True @@ -1218,8 +1214,8 @@ class BIM_PT_tab_project_info(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - if not tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): - + if not tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + return False bim_props = tool.Blender.get_bim_props() pprops = tool.Project.get_project_props() @@ -1738,7 +1734,7 @@ class BIM_PT_tab_placement(Panel): return False if getattr(context.scene, prop_bookmark, False): return tool.Blender.is_tab(context, "BOOKMARK") - + return ( tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() From 3d18aca2f2ff27261d32df0e03ce7d3aeef28909 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 21 Nov 2025 17:24:10 +0100 Subject: [PATCH 388/657] Add operators for saving and loading blend metadata files --- src/bonsai/bonsai/bim/__init__.py | 2 + src/bonsai/bonsai/bim/module/project/ui.py | 13 ++++ src/bonsai/bonsai/bim/operator.py | 86 ++++++++++++++++++++++ 3 files changed, 101 insertions(+) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 6b1bc27457..63116e7d6f 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -115,11 +115,13 @@ classes = [ operator.EditBlenderCollection, operator.FileAssociate, operator.FileUnassociate, + operator.LoadBlendMetadataAndIFC, operator.OpenPath, operator.OpenUpstream, operator.OpenUri, operator.ReloadIfcFile, operator.RevertClippingPlaneCut, + operator.SaveBlendMetadataFile, operator.SelectDir, operator.SelectIfcFile, operator.SelectURIAttribute, diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 6fe5b55604..c728908ed2 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -331,6 +331,19 @@ class BIM_PT_project(Panel): col.prop(props, "ifc_file", text="") row.operator("bim.select_ifc_file", icon="FILE_FOLDER", text="") + # Blend metadata file UI + row = self.layout.row(align=True) + col = row.column() + col.enabled = False + # Show blend metadata file as a label, not editable + blendmetadata_path = "" + if props.ifc_file: + blendmetadata_path = props.ifc_file + ".blendmetadata" + col.label(text=blendmetadata_path) + row.operator("bim.save_blend_metadata_file", icon="FILE_TICK", text="") + row = self.layout.row(align=True) + row.operator("bim.load_blend_metadata_and_ifc", icon="FILE_REFRESH", text="Load Metadata + IFC") + class BIM_PT_new_project_wizard(Panel): bl_label = "New Project Wizard" diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 2d6f7b9340..3d74f20596 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -236,6 +236,92 @@ class SelectIfcFile(bpy.types.Operator, IFCFileSelector, ImportHelper): return res return ImportHelper.invoke(self, context, event) +class SaveBlendMetadataFile(bpy.types.Operator): + bl_idname = "bim.save_blend_metadata_file" + bl_label = "Save Blend Metadata File" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + """ + Save the current blend file as a metadata-only file (no geometry), preserving settings, window arrangement, geometry nodes, etc. + """ + props = tool.Blender.get_bim_props() + ifc_file = getattr(props, "ifc_file", None) + if not ifc_file: + self.report({"WARNING"}, "No IFC file path set.") + return {"CANCELLED"} + + blendmetadata_path = ifc_file + ".metadata.blend" + + # Save a temporary copy of the current blend file + temp_path = bpy.path.abspath('//__temp_blendmetadata.blend') + bpy.ops.wm.save_as_mainfile(filepath=temp_path, copy=True) + + # Prepare Python script to run in background Blender to remove geometry + cleanup_script = f""" +import bpy +# Remove all mesh objects and mesh collections +for obj in bpy.data.objects: + if obj.type == 'MESH': + bpy.data.objects.remove(obj, do_unlink=True) +for collection in bpy.data.collections: + # Remove collections that only contain mesh objects + if all(o.type == 'MESH' for o in collection.objects): + bpy.data.collections.remove(collection) +bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') +""" + + # Save cleanup script to temp file + import tempfile + with tempfile.NamedTemporaryFile('w', suffix='.py', delete=False) as script_file: + script_file.write(cleanup_script) + script_path = script_file.name + + # Run Blender in background to clean and save metadata file + blender_exe = bpy.app.binary_path + import subprocess + result = subprocess.run([ + blender_exe, + temp_path, + '--background', + '--python', script_path + ], capture_output=True) + + # Clean up temp files + try: + os.remove(temp_path) + os.remove(script_path) + except Exception: + pass + + if result.returncode == 0: + self.report({"INFO"}, f"Blend metadata file saved to: {blendmetadata_path}") + else: + self.report({"ERROR"}, f"Failed to save blend metadata file: {result.stderr.decode()}") + return {"FINISHED"} + +class LoadBlendMetadataAndIFC(bpy.types.Operator): + bl_idname = "bim.load_blend_metadata_and_ifc" + bl_label = "Load Blend Metadata and IFC" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + props = tool.Blender.get_bim_props() + ifc_file = getattr(props, "ifc_file", None) + if not ifc_file: + self.report({"WARNING"}, "No IFC file path set.") + return {"CANCELLED"} + + metadata_path = ifc_file + ".metadata.blend" + # Open the metadata blend file + bpy.ops.wm.open_mainfile(filepath=metadata_path) + # After loading metadata, clear blend warning (no geometry loaded yet) + props = tool.Blender.get_bim_props() + props.has_blend_warning = False + # Load the IFC file into the current session (preserve layout) + bpy.ops.bim.load_project(filepath=ifc_file, should_start_fresh_session=False) + self.report({"INFO"}, f"Loaded metadata and IFC: {metadata_path}, {ifc_file}") + return {"FINISHED"} # TODO: Unused operator. # Is there a need for this or 'DIR_PATH' propety subtype does almost the same, From ba3c96485a969cd664d1466eafcbd495fa2719c5 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 10 Dec 2025 18:44:32 +0100 Subject: [PATCH 389/657] major refactor using blender props which we cna now save teh belnd metadata --- src/bonsai/bonsai/bim/__init__.py | 2 - src/bonsai/bonsai/bim/operator.py | 123 +-------- src/bonsai/bonsai/bim/prop.py | 22 +- src/bonsai/bonsai/bim/ui.py | 439 +++++++++++++++++------------- 4 files changed, 284 insertions(+), 302 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 63116e7d6f..23ecb2fea4 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -137,8 +137,6 @@ classes = [ operator.BIM_OT_manage_tab_panels, operator.BIM_OT_manage_tab_visibility, operator.BIM_OT_toggle_tab_visibility, - operator.BIM_OT_load_json_layout, - operator.BIM_OT_save_json_layout, operator.BIM_OT_reset_ui_layout, prop.ObjProperty, prop.MultipleFileSelect, diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 3d74f20596..aeff79283a 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -33,7 +33,7 @@ import bonsai.bim import bonsai.tool as tool import bonsai.bim.handler from enum import Enum -from bonsai.bim.ui import TAB_PANELS, TAB_VISIBILITY +from bonsai.bim.ui import TAB_PANELS, get_tab_visibility, set_tab_visibility, get_tab_names from bpy_extras.io_utils import ImportHelper from bonsai.bim import import_ifc from bonsai.bim.prop import StrProperty @@ -1860,15 +1860,14 @@ class BIM_OT_manage_tab_visibility(bpy.types.Operator): row.alignment = "RIGHT" row.operator("bim.reset_ui_layout", icon="FILE_REFRESH", text="") - row.operator("bim.load_json_layout", icon="IMPORT", text="") - row.operator("bim.save_json_layout", icon="EXPORT", text="") row = layout.row() row = self.layout.row(align=True) row.alignment = "CENTER" - for tab_name, is_visible in TAB_VISIBILITY.items(): + for tab_name in get_tab_names(): row = layout.row() row.label(text=tab_name) + is_visible = get_tab_visibility(tab_name) icon = "HIDE_OFF" if is_visible else "HIDE_ON" op = row.operator("bim.toggle_tab_visibility", text="", icon=icon) op.tab_name = tab_name @@ -1890,8 +1889,9 @@ class BIM_OT_toggle_tab_visibility(bpy.types.Operator): tab_name: bpy.props.StringProperty() def execute(self, context): - if self.tab_name in TAB_VISIBILITY: - TAB_VISIBILITY[self.tab_name] = not TAB_VISIBILITY[self.tab_name] + if self.tab_name in get_tab_names(): + current_visibility = get_tab_visibility(self.tab_name) + set_tab_visibility(self.tab_name, not current_visibility) for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": @@ -1901,113 +1901,8 @@ class BIM_OT_toggle_tab_visibility(bpy.types.Operator): return {"FINISHED"} -import json -import bpy -class BIM_OT_load_json_layout(bpy.types.Operator): - """Load JSON Layout""" - - bl_idname = "bim.load_json_layout" - bl_label = "Load UI Layout" - bl_options = {"REGISTER", "UNDO"} - - filepath: bpy.props.StringProperty(subtype="FILE_PATH") - - def execute(self, context): - global TAB_VISIBILITY, TAB_PANELS - - try: - with open(self.filepath, "r") as file: - data = json.load(file) - - if "TAB_VISIBILITY" in data: - TAB_VISIBILITY.update(data["TAB_VISIBILITY"]) - - if "TAB_PANELS" in data: - TAB_PANELS.update(data["TAB_PANELS"]) - - if "scene_properties" in data: - for prop_name, value in data["scene_properties"].items(): - if hasattr(context.scene, prop_name): - setattr(context.scene, prop_name, value) - - for area in bpy.context.window.screen.areas: - if area.type == "PROPERTIES": - area.tag_redraw() - - self.report({"INFO"}, f"Loaded JSON layout from {self.filepath}") - except Exception as e: - self.report({"ERROR"}, f"Failed to load JSON layout: {e}") - return {"CANCELLED"} - - return {"FINISHED"} - - def invoke(self, context, event): - ifc_file_path = bpy.context.scene.BIMProperties["ifc_file"] - if not ifc_file_path: - self.report({"ERROR"}, "No IFC file is associated with the project.") - return {"CANCELLED"} - - self.filepath = os.path.join(os.path.dirname(ifc_file_path), ".bonsai_layout_json") - context.window_manager.fileselect_add(self) - return {"RUNNING_MODAL"} - - -class BIM_OT_save_json_layout(bpy.types.Operator): - """Save JSON Layout""" - - bl_idname = "bim.save_json_layout" - bl_label = "Save UI Layout" - bl_options = {"REGISTER", "UNDO"} - - filepath: bpy.props.StringProperty(subtype="FILE_PATH") - - def execute(self, context): - try: - ifc_file_path = bpy.context.scene.BIMProperties["ifc_file"] - if not ifc_file_path: - self.report({"ERROR"}, "No IFC file is associated with the project.") - return {"CANCELLED"} - - layout_data = { - "TAB_VISIBILITY": TAB_VISIBILITY, - "TAB_PANELS": TAB_PANELS, - "scene_properties": {}, - } - - for tab_name, panels in TAB_PANELS.items(): - for panel in panels: - panel_name = panel.get("bl_idname", "") - if not panel_name: - continue - - show_prop_name = f"show_{panel_name.lower()}" - bookmark_prop_name = f"bookmark_{panel_name.lower()}" - layout_data["scene_properties"][show_prop_name] = getattr(context.scene, show_prop_name, True) - layout_data["scene_properties"][bookmark_prop_name] = getattr( - context.scene, bookmark_prop_name, False - ) - - with open(self.filepath, "w") as file: - json.dump(layout_data, file, indent=4) - self.report({"INFO"}, f"Saved JSON layout to {self.filepath}") - except Exception as e: - self.report({"ERROR"}, f"Failed to save JSON layout: {e}") - return {"CANCELLED"} - - return {"FINISHED"} - - def invoke(self, context, event): - ifc_file_path = bpy.context.scene.BIMProperties["ifc_file"] - if not ifc_file_path: - self.report({"ERROR"}, "No IFC file is associated with the project.") - return {"CANCELLED"} - - self.filepath = os.path.join(os.path.dirname(ifc_file_path), ".bonsai_layout_json") - context.window_manager.fileselect_add(self) - return {"RUNNING_MODAL"} - class BIM_OT_reset_ui_layout(bpy.types.Operator): """Reset UI Layout to Default""" @@ -2017,10 +1912,10 @@ class BIM_OT_reset_ui_layout(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): - global TAB_VISIBILITY, TAB_PANELS + global TAB_PANELS - for tab_name in TAB_VISIBILITY.keys(): - TAB_VISIBILITY[tab_name] = True + for tab_name in get_tab_names(): + set_tab_visibility(tab_name, True) TAB_PANELS["BOOKMARK"] = [{}] diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index b10aacdc97..5409981181 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -613,7 +613,17 @@ class BIMProperties(PropertyGroup): ], name="Time Unit", default="HOUR", - ) + ) tab_visibility_project: BoolProperty(name="Project Tab Visible", default=True) + tab_visibility_object: BoolProperty(name="Object Tab Visible", default=True) + tab_visibility_geometry: BoolProperty(name="Geometry Tab Visible", default=True) + tab_visibility_drawings: BoolProperty(name="Drawings Tab Visible", default=True) + tab_visibility_services: BoolProperty(name="Services Tab Visible", default=True) + tab_visibility_structure: BoolProperty(name="Structure Tab Visible", default=True) + tab_visibility_scheduling: BoolProperty(name="Scheduling Tab Visible", default=True) + tab_visibility_fm: BoolProperty(name="FM Tab Visible", default=True) + tab_visibility_quality: BoolProperty(name="Quality Tab Visible", default=True) + tab_visibility_bookmark: BoolProperty(name="Bookmark Tab Visible", default=True) + if TYPE_CHECKING: is_dirty: bool schema_dir: str @@ -628,6 +638,16 @@ class BIMProperties(PropertyGroup): volume_unit: str mass_unit: str time_unit: str + tab_visibility_project: bool + tab_visibility_object: bool + tab_visibility_geometry: bool + tab_visibility_drawings: bool + tab_visibility_services: bool + tab_visibility_structure: bool + tab_visibility_scheduling: bool + tab_visibility_fm: bool + tab_visibility_quality: bool + tab_visibility_bookmark: bool class IfcParameter(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index f89c64c45d..bed40c2b04 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -124,23 +124,26 @@ TAB_PANELS = { } -TAB_VISIBILITY = { - "PROJECT": True, - "OBJECT": True, - "GEOMETRY": True, - "DRAWINGS": True, - "SERVICES": True, - "STRUCTURE": True, - "SCHEDULING": True, - "FM": True, - "QUALITY": True, - "BOOKMARK": True, -} +def get_tab_visibility(tab_name): + bim_props = tool.Blender.get_bim_props() + prop_name = f"tab_visibility_{tab_name.lower()}" + return getattr(bim_props, prop_name, True) + + +def set_tab_visibility(tab_name, visible): + bim_props = tool.Blender.get_bim_props() + prop_name = f"tab_visibility_{tab_name.lower()}" + if hasattr(bim_props, prop_name): + setattr(bim_props, prop_name, visible) + + +def get_tab_names(): + return list(TAB_PANELS.keys()) def get_tab_name(bl_idname): return next( - (k for k, v in reversed(list(TAB_PANELS.items())) if any(d.get("bl_idname") == bl_idname for d in v)), + (k for k, v in reversed(list(TAB_PANELS.items())) if k != "BOOKMARK" and any(d.get("bl_idname") == bl_idname for d in v)), "BOOKMARK", ) @@ -1048,30 +1051,30 @@ class BIM_PT_tabs(Panel): col_left = split.column(align=True) row_left = col_left.row(align=True) row_left.alignment = "CENTER" - if TAB_VISIBILITY["PROJECT"]: + if get_tab_visibility("PROJECT"): row_left.operator( "bim.set_tab", text="", emboss=aprops.tab == "PROJECT", icon_value=bonsai.bim.icons[ifc_icon].icon_id, ).tab = "PROJECT" - if TAB_VISIBILITY["OBJECT"]: + if get_tab_visibility("OBJECT"): self.draw_tab_entry(row_left, "FILE_3D", "OBJECT", is_ifc_project, aprops.tab == "OBJECT") - if TAB_VISIBILITY["GEOMETRY"]: + if get_tab_visibility("GEOMETRY"): self.draw_tab_entry(row_left, "MATERIAL", "GEOMETRY", is_ifc_project, aprops.tab == "GEOMETRY") - if TAB_VISIBILITY["DRAWINGS"]: + if get_tab_visibility("DRAWINGS"): self.draw_tab_entry(row_left, "DOCUMENTS", "DRAWINGS", is_ifc_project, aprops.tab == "DRAWINGS") - if TAB_VISIBILITY["SERVICES"]: + if get_tab_visibility("SERVICES"): self.draw_tab_entry(row_left, "NETWORK_DRIVE", "SERVICES", is_ifc_project, aprops.tab == "SERVICES") - if TAB_VISIBILITY["STRUCTURE"]: + if get_tab_visibility("STRUCTURE"): self.draw_tab_entry(row_left, "EDITMODE_HLT", "STRUCTURE", is_ifc_project, aprops.tab == "STRUCTURE") - if TAB_VISIBILITY["SCHEDULING"]: + if get_tab_visibility("SCHEDULING"): self.draw_tab_entry(row_left, "NLA", "SCHEDULING", is_ifc_project, aprops.tab == "SCHEDULING") - if TAB_VISIBILITY["FM"]: + if get_tab_visibility("FM"): self.draw_tab_entry(row_left, "PACKAGE", "FM", True, aprops.tab == "FM") - if TAB_VISIBILITY["QUALITY"]: + if get_tab_visibility("QUALITY"): self.draw_tab_entry(row_left, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") - if TAB_VISIBILITY["BOOKMARK"]: + if get_tab_visibility("BOOKMARK"): self.draw_tab_entry(row_left, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") # New BOOKMARK tab row_left.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") @@ -1079,9 +1082,9 @@ class BIM_PT_tabs(Panel): # Yes, that's right. row_left.alignment = "CENTER" row_left.scale_y = 0.2 - for tab in TAB_VISIBILITY.keys(): + for tab in get_tab_names(): # Draw a little underscore below the active tab icon. - if TAB_VISIBILITY[tab]: + if get_tab_visibility(tab): if aprops.tab == tab: row_left.prop(aprops, "active_tab", text="", icon="BLANK1") else: @@ -1098,8 +1101,8 @@ class BIM_PT_tabs(Panel): row.prop(aprops, "tab", text="") # Add gear icons for all tabs except SWITCH_TAB - for tab in TAB_VISIBILITY.keys(): - if TAB_VISIBILITY[tab]: + for tab in get_tab_names(): + if get_tab_visibility(tab): if aprops.tab == tab: row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab @@ -1208,20 +1211,18 @@ class BIM_PT_tab_project_info(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - if not tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): - - return False - bim_props = tool.Blender.get_bim_props() - pprops = tool.Project.get_project_props() - if pprops.is_loading: - return True - elif tool.Ifc.get() or bim_props.ifc_file: + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + bim_props = tool.Blender.get_bim_props() + pprops = tool.Project.get_project_props() + if pprops.is_loading: + return True + elif tool.Ifc.get() or bim_props.ifc_file: + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): return True return False @@ -1241,13 +1242,15 @@ class BIM_PT_tab_spatial(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1264,13 +1267,15 @@ class BIM_PT_tab_project_setup(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1288,13 +1293,15 @@ class BIM_PT_tab_stakeholders(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1311,13 +1318,15 @@ class BIM_PT_tab_collaboration(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1335,13 +1344,15 @@ class BIM_PT_tab_grouping_and_filtering(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1366,13 +1377,15 @@ class BIM_PT_tab_geometry(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1389,13 +1402,15 @@ class BIM_PT_tab_status(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1412,13 +1427,15 @@ class BIM_PT_tab_qto(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1435,13 +1452,15 @@ class BIM_PT_tab_resources(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1458,13 +1477,15 @@ class BIM_PT_tab_cost(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1481,13 +1502,15 @@ class BIM_PT_tab_sequence(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1504,13 +1527,15 @@ class BIM_PT_tab_structural(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1527,13 +1552,15 @@ class BIM_PT_tab_services(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1550,13 +1577,15 @@ class BIM_PT_tab_lighting(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1573,13 +1602,15 @@ class BIM_PT_tab_zones(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1596,13 +1627,15 @@ class BIM_PT_tab_solar_analysis(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1619,13 +1652,15 @@ class BIM_PT_tab_quality_control(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1642,13 +1677,15 @@ class BIM_PT_tab_clash_detection(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1666,13 +1703,15 @@ class BIM_PT_tab_sandbox(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): row = self.layout.row() @@ -1692,15 +1731,12 @@ class BIM_PT_tab_object_metadata(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - props = tool.Project.get_project_props() - return ( + if ( tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) @@ -1710,7 +1746,11 @@ class BIM_PT_tab_object_metadata(Panel): or not obj.instance_collection or not any(l.empty_handle == obj for l in props.links) ) - ) + ): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1728,19 +1768,20 @@ class BIM_PT_tab_placement(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - - return ( + if ( tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) - ) + ): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1758,17 +1799,19 @@ class BIM_PT_tab_representations(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return ( + if ( tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and tool.Geometry.get_active_or_representation_obj() - ) + ): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1787,13 +1830,15 @@ class BIM_PT_tab_geometric_relationships(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1812,18 +1857,20 @@ class BIM_PT_tab_parametric_geometry(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return ( + if ( tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) - ) + ): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1841,18 +1888,20 @@ class BIM_PT_tab_object_materials(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return ( + if ( tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) - ) + ): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1870,13 +1919,15 @@ class BIM_PT_tab_materials(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1894,13 +1945,15 @@ class BIM_PT_tab_styles(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1918,13 +1971,15 @@ class BIM_PT_tab_profiles(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1942,13 +1997,15 @@ class BIM_PT_tab_sheets(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1966,13 +2023,15 @@ class BIM_PT_tab_drawings(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -1990,13 +2049,15 @@ class BIM_PT_tab_schedules(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -2014,13 +2075,15 @@ class BIM_PT_tab_references(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -2039,13 +2102,15 @@ class BIM_PT_tab_misc(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get() + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -2063,13 +2128,15 @@ class BIM_PT_tab_handover(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass @@ -2087,13 +2154,15 @@ class BIM_PT_tab_operations(Panel): def poll(cls, context): prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" prop_visible = f"show_{cls.bl_idname.lower()}" - if not TAB_VISIBILITY[get_tab_name(cls.bl_idname)]: + if not get_tab_visibility(get_tab_name(cls.bl_idname)): return False if not getattr(context.scene, prop_visible, True): return False - if getattr(context.scene, prop_bookmark, False): - return tool.Blender.is_tab(context, "BOOKMARK") - return tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + return True + if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): + return True + return False def draw(self, context): pass From 89973a7a7667ca5c596c52d69427b1625a61a960 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 11 Dec 2025 01:22:34 +0100 Subject: [PATCH 390/657] Refactor to use blender properties so loading metadata preserves session settings --- src/bonsai/bonsai/bim/__init__.py | 41 +- src/bonsai/bonsai/bim/operator.py | 122 +++-- src/bonsai/bonsai/bim/prop.py | 13 + src/bonsai/bonsai/bim/ui.py | 754 ++++++++++++------------------ 4 files changed, 370 insertions(+), 560 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 23ecb2fea4..81dd85f72a 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -144,6 +144,7 @@ classes = [ prop.ISODuration, prop.BIMAreaProperties, prop.BIMTabProperties, + prop.BIMPanelProperties, # Must be registered before BIMProperties prop.BIMProperties, prop.IfcParameter, prop.PsetQto, @@ -238,42 +239,6 @@ def on_register(scene): is_registering = False -def register_panel_visibility_properties(): - for panel_list in ui.TAB_PANELS.values(): - for panel in panel_list: - bl_idname = panel.get("bl_idname", "") - prop_name = f"show_{bl_idname.lower()}" - setattr( - bpy.types.Scene, - prop_name, - bpy.props.BoolProperty( - name=f"Show {bl_idname}", - description=f"Show or hide the {bl_idname} panel", - default=True, - ), - ) - prop_name = f"bookmark_{bl_idname.lower()}" - setattr( - bpy.types.Scene, - prop_name, - bpy.props.BoolProperty( - name=f"Bookmark {bl_idname}", - description=f"Move to Bookmark or not {bl_idname} panel", - default=False, - ), - ) - - -def unregister_panel_visibility_properties(): - for panel_list in ui.TAB_PANELS.values(): - for panel in panel_list: - bl_idname = panel.get("bl_idname", "") - prop_name = f"show_{bl_idname.lower()}" - if hasattr(bpy.types.Scene, prop_name): - delattr(bpy.types.Scene, prop_name) - prop_name = f"bookmark_{bl_idname.lower()}" - if hasattr(bpy.types.Scene, prop_name): - delattr(bpy.types.Scene, prop_name) # Classes that need to be registered after modules (due to cross-module dependencies) @@ -319,6 +284,9 @@ def register(): bpy.types.Curve.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) bpy.types.Camera.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) bpy.types.PointLight.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) + + ui.initialize_panel_properties() + if hasattr(bpy.types, "UI_MT_button_context_menu"): bpy.types.UI_MT_button_context_menu.append(ui.draw_custom_context_menu) bpy.types.STATUSBAR_HT_header.append(ui.draw_statusbar) @@ -357,7 +325,6 @@ def register(): bpy.types.Scene.active_tab_name = bpy.props.StringProperty() bpy.types.Scene.tab_panels = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup) bpy.types.Scene.active_tab_panel_index = bpy.props.IntProperty() - register_panel_visibility_properties() def unregister(): diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index aeff79283a..1a646ec0b3 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -33,7 +33,7 @@ import bonsai.bim import bonsai.tool as tool import bonsai.bim.handler from enum import Enum -from bonsai.bim.ui import TAB_PANELS, get_tab_visibility, set_tab_visibility, get_tab_names +from bonsai.bim.ui import get_all_tab_panels, get_tab_visibility, set_tab_visibility, get_tab_names, get_panel_config, initialize_panel_properties from bpy_extras.io_utils import ImportHelper from bonsai.bim import import_ifc from bonsai.bim.prop import StrProperty @@ -1725,24 +1725,29 @@ class BIM_OT_toggle_panel_visibility(bpy.types.Operator): def execute(self, context): panel_name = self.action.replace("TOGGLE_VISIBILITY_", "") - - for item in context.scene.tab_panels: - if item.name == panel_name: - item["visible"] = not item.get("visible", True) - - prop_name = f"show_{panel_name.lower()}" - if hasattr(context.scene, prop_name): - setattr(context.scene, prop_name, item["visible"]) - print(f"Toggled visibility for panel: {panel_name} to {'visible' if item['visible'] else 'hidden'}") - else: - print(f"Property '{prop_name}' not found on Scene.") - break - + active_tab = getattr(context.scene, "active_tab_name", None) or getattr(tool.Blender.get_bim_props(), "tab", None) + is_bookmark_tab = active_tab == "BOOKMARK" + + panel_config = get_panel_config(panel_name) + if panel_config: + if is_bookmark_tab: + panel_config.is_visible_in_bookmarks = not panel_config.is_visible_in_bookmarks + new_value = panel_config.is_visible_in_bookmarks + else: + panel_config.is_visible_in_tab = not panel_config.is_visible_in_tab + new_value = panel_config.is_visible_in_tab + + for item in context.scene.tab_panels: + if item.name == panel_name: + item["visible"] = new_value + break + for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() - - self.report({"INFO"}, f"Toggled visibility for {panel_name}.") + + tab_context = "Bookmarks" if is_bookmark_tab else "Tab" + self.report({"INFO"}, f"Toggled visibility for {panel_name} in {tab_context}.") return {"FINISHED"} @@ -1757,40 +1762,20 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): def execute(self, context): panel_name = self.action.replace("BOOKMARK_", "") - - for item in context.scene.tab_panels: - if item.name == panel_name: - item["bookmarked"] = not item.get("bookmarked", False) - - prop_name = f"bookmark_{panel_name.lower()}" - if hasattr(context.scene, prop_name): - setattr(context.scene, prop_name, item["bookmarked"]) - print( - f"Toggled bookmark for panel: {panel_name} to {'bookmarked' if item['bookmarked'] else 'Not bookmarked'}" - ) - else: - print(f"Property '{prop_name}' not found on Scene.") - - panel_label = item["bl_label"] - if item["bookmarked"]: - if not any(p.get("bl_idname") == panel_name for p in TAB_PANELS["BOOKMARK"]): - TAB_PANELS["BOOKMARK"].append({"bl_idname": panel_name, "bl_label": panel_label}) - print(f"Added {panel_name} to BOOKMARK tab.") - else: - for i, p in enumerate(TAB_PANELS["BOOKMARK"]): - if p.get("bl_idname") == panel_name: - del TAB_PANELS["BOOKMARK"][i] - print(f"Removed {panel_name} from BOOKMARK tab.") - if context.scene.active_tab_name == "BOOKMARK": - index = context.scene.tab_panels.find(panel_name) - if index != -1: - context.scene.tab_panels.remove(index) - break - + panel_config = get_panel_config(panel_name) + + if panel_config: + panel_config.is_bookmarked = not panel_config.is_bookmarked + + for item in context.scene.tab_panels: + if item.name == panel_name: + item["bookmarked"] = panel_config.is_bookmarked + break + for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() - + self.report({"INFO"}, f"Toggled bookmark for {panel_name}.") return {"FINISHED"} @@ -1805,25 +1790,33 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): tab_name: bpy.props.StringProperty() def invoke(self, context, event): + context.scene.active_tab_name = self.tab_name - context.scene.tab_panels.clear() - for panel_data in TAB_PANELS.get(self.tab_name, []): + + initialize_panel_properties() + all_panels = get_all_tab_panels(force_refresh=True) + + for panel_data in all_panels.get(self.tab_name, []): panel_name = panel_data.get("bl_idname", "") panel_label = panel_data.get("bl_label", "") if not panel_name or not panel_label: continue + item = context.scene.tab_panels.add() item.name = panel_name item["bl_label"] = panel_label - show_prop_name = f"show_{panel_name.lower()}" - bookmark_prop_name = f"bookmark_{panel_name.lower()}" - - item["visible"] = getattr(context.scene, show_prop_name, True) - item["bookmarked"] = getattr(context.scene, bookmark_prop_name, False) - - print(f"Tab Panels for {self.tab_name}: {[item.name for item in context.scene.tab_panels]}") + panel_config = get_panel_config(panel_name) + if panel_config: + if self.tab_name == "BOOKMARK": + item["visible"] = panel_config.is_visible_in_bookmarks + else: + item["visible"] = panel_config.is_visible_in_tab + item["bookmarked"] = panel_config.is_bookmarked + else: + item["visible"] = True + item["bookmarked"] = False return context.window_manager.invoke_popup(self) @@ -1836,11 +1829,15 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): def execute(self, context): for item in context.scene.tab_panels: - show_prop_name = f"show_{item.name.lower()}" - bookmark_prop_name = f"bookmark_{item.name.lower()}" + panel_config = get_panel_config(item.name) + if panel_config: + if self.tab_name == "BOOKMARK": + panel_config.is_visible_in_bookmarks = item["visible"] + else: + panel_config.is_visible_in_tab = item["visible"] + panel_config.is_bookmarked = item["bookmarked"] + - setattr(context.scene, show_prop_name, item["visible"]) - setattr(context.scene, bookmark_prop_name, item["bookmarked"]) self.report({"INFO"}, f"Panels for {self.tab_name} managed successfully.") return {"FINISHED"} @@ -1912,14 +1909,13 @@ class BIM_OT_reset_ui_layout(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): - global TAB_PANELS for tab_name in get_tab_names(): set_tab_visibility(tab_name, True) - TAB_PANELS["BOOKMARK"] = [{}] + get_all_tab_panels()["BOOKMARK"] = [{}] - for tab_name, panels in TAB_PANELS.items(): + for tab_name, panels in get_all_tab_panels().items(): for panel in panels: panel_name = panel.get("bl_idname", "") if not panel_name: diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 5409981181..7c501d6184 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -530,6 +530,17 @@ class BIMTabProperties(PropertyGroup): inactive_tab: bool +class BIMPanelProperties(PropertyGroup): + is_visible_in_tab: BoolProperty(name="Is Visible in Tab", default=True) + is_visible_in_bookmarks: BoolProperty(name="Is Visible in Bookmarks", default=True) + is_bookmarked: BoolProperty(name="Is Bookmarked", default=False) + + if TYPE_CHECKING: + is_visible_in_tab: bool + is_visible_in_bookmarks: bool + is_bookmarked: bool + + class BIMProperties(PropertyGroup): is_dirty: BoolProperty(name="Is Dirty", default=False) schema_dir: StringProperty( @@ -623,6 +634,7 @@ class BIMProperties(PropertyGroup): tab_visibility_fm: BoolProperty(name="FM Tab Visible", default=True) tab_visibility_quality: BoolProperty(name="Quality Tab Visible", default=True) tab_visibility_bookmark: BoolProperty(name="Bookmark Tab Visible", default=True) + panel_properties: CollectionProperty(type=BIMPanelProperties, name="Panel Properties") if TYPE_CHECKING: is_dirty: bool @@ -648,6 +660,7 @@ class BIMProperties(PropertyGroup): tab_visibility_fm: bool tab_visibility_quality: bool tab_visibility_bookmark: bool + panel_properties: bpy.types.bpy_prop_collection[BIMPanelProperties] class IfcParameter(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index bed40c2b04..6589197f56 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -62,66 +62,101 @@ if TYPE_CHECKING: from bonsai.bim.module.project.prop import BIMProjectProperties -TAB_PANELS = { - "PROJECT": [ - # "BIM_PT_tab_new_project_wizard", - {"bl_idname": "BIM_PT_tab_project_info", "bl_label": "Project Info"}, - {"bl_idname": "BIM_PT_tab_spatial", "bl_label": "Spatial"}, - {"bl_idname": "BIM_PT_tab_project_setup", "bl_label": "Project Setup"}, - {"bl_idname": "BIM_PT_tab_geometry", "bl_label": "Geometry"}, - {"bl_idname": "BIM_PT_tab_stakeholders", "bl_label": "Stakeholders"}, - {"bl_idname": "BIM_PT_tab_grouping_and_filtering", "bl_label": "Grouping and Filtering"}, - ], - "OBJECT": [ - {"bl_idname": "BIM_PT_tab_object_metadata", "bl_label": "Object Metadata"}, - {"bl_idname": "BIM_PT_tab_misc", "bl_label": "Misc"}, - ], - "GEOMETRY": [ - {"bl_idname": "BIM_PT_tab_placement", "bl_label": "Placement"}, - {"bl_idname": "BIM_PT_tab_representations", "bl_label": "Representations"}, - {"bl_idname": "BIM_PT_tab_geometric_relationships", "bl_label": "Geometric Relationships"}, - {"bl_idname": "BIM_PT_tab_parametric_geometry", "bl_label": "Parametric Geometry"}, - {"bl_idname": "BIM_PT_tab_object_materials", "bl_label": "Object Materials"}, - {"bl_idname": "BIM_PT_tab_materials", "bl_label": "Materials"}, - {"bl_idname": "BIM_PT_tab_styles", "bl_label": "Styles"}, - {"bl_idname": "BIM_PT_tab_profiles", "bl_label": "Profiles"}, - ], - "DRAWINGS": [ - {"bl_idname": "BIM_PT_tab_sheets", "bl_label": "Sheets"}, - {"bl_idname": "BIM_PT_tab_drawings", "bl_label": "Drawings"}, - {"bl_idname": "BIM_PT_tab_schedules", "bl_label": "Schedules"}, - {"bl_idname": "BIM_PT_tab_references", "bl_label": "References"}, - ], - "SERVICES": [ - {"bl_idname": "BIM_PT_tab_services", "bl_label": "Services"}, - {"bl_idname": "BIM_PT_tab_zones", "bl_label": "Zones"}, - {"bl_idname": "BIM_PT_tab_solar_analysis", "bl_label": "Solar Analysis"}, - {"bl_idname": "BIM_PT_tab_lighting", "bl_label": "Lighting"}, - ], - "STRUCTURE": [ - {"bl_idname": "BIM_PT_tab_structural", "bl_label": "Structural"}, - ], - "SCHEDULING": [ - {"bl_idname": "BIM_PT_tab_status", "bl_label": "Status"}, - {"bl_idname": "BIM_PT_tab_qto", "bl_label": "Quantity Take-off"}, - {"bl_idname": "BIM_PT_tab_resources", "bl_label": "Resources"}, - {"bl_idname": "BIM_PT_tab_cost", "bl_label": "Cost"}, - {"bl_idname": "BIM_PT_tab_sequence", "bl_label": "Construction Scheduling"}, - ], - "FM": [ - {"bl_idname": "BIM_PT_tab_handover", "bl_label": "Handover"}, - {"bl_idname": "BIM_PT_tab_operations", "bl_label": "Operations"}, - ], - "QUALITY": [ - {"bl_idname": "BIM_PT_tab_quality_control", "bl_label": "Quality Control"}, - {"bl_idname": "BIM_PT_tab_clash_detection", "bl_label": "Clash Detection"}, - {"bl_idname": "BIM_PT_tab_collaboration", "bl_label": "Collaboration"}, - {"bl_idname": "BIM_PT_tab_sandbox", "bl_label": "Sandbox"}, - ], - "BOOKMARK": [ - {}, - ], -} +TAB_NAMES = ["PROJECT", "OBJECT", "GEOMETRY", "DRAWINGS", "SERVICES", "STRUCTURE", "SCHEDULING", "FM", "QUALITY", "BOOKMARK"] + +def get_tab_names(): + return TAB_NAMES + +def get_panel_tab_name(panel_class): + if hasattr(panel_class, 'bim_tab_name'): + return panel_class.bim_tab_name + return "PROJECT" # Default fallback + + +def should_show_panel(panel_id, panel_tab_name, context): + if tool.Blender.is_tab(context, "BOOKMARK"): + return is_panel_bookmarked(panel_id) and get_panel_visibility(panel_id, "BOOKMARK") + + if tool.Blender.is_tab(context, panel_tab_name): + return get_tab_visibility(panel_tab_name) and get_panel_visibility(panel_id, panel_tab_name) + + return False + +def initialize_panel_properties(): + try: + bim_props = tool.Blender.get_bim_props() + + if len(bim_props.panel_properties) > 0: + return + + for attr_name in dir(bpy.types): + if attr_name.startswith("BIM_PT_tab_"): + try: + panel_class = getattr(bpy.types, attr_name) + if not hasattr(panel_class, 'bl_idname'): + continue + + panel_id = panel_class.bl_idname + + prop = bim_props.panel_properties.add() + prop.name = panel_id + prop.is_visible_in_tab = True + prop.is_visible_in_bookmarks = True + prop.is_bookmarked = False + except: + pass + except: + pass + +def get_panel_config(panel_id): + try: + bim_props = tool.Blender.get_bim_props() + + for prop in bim_props.panel_properties: + if prop.name == panel_id: + return prop + + prop = bim_props.panel_properties.add() + prop.name = panel_id + prop.is_visible_in_tab = True + prop.is_visible_in_bookmarks = True + prop.is_bookmarked = False + return prop + except: + return None + +def get_all_tab_panels(force_refresh=False): + panels = {tab_name: [] for tab_name in get_tab_names() if tab_name != "BOOKMARK"} + panels["BOOKMARK"] = [] + + try: + bim_props = tool.Blender.get_bim_props() + for prop in bim_props.panel_properties: + try: + panel_class = getattr(bpy.types, prop.name, None) + if panel_class: + tab_name = get_panel_tab_name(panel_class) + if tab_name and tab_name != "BOOKMARK": + bl_label = getattr(panel_class, "bl_label", prop.name) + panels[tab_name].append({"bl_idname": prop.name, "bl_label": bl_label}) + except: + pass + + if prop.is_bookmarked: + try: + panel_class = getattr(bpy.types, prop.name, None) + if panel_class: + bl_label = getattr(panel_class, "bl_label", prop.name) + panels["BOOKMARK"].append({"bl_idname": prop.name, "bl_label": bl_label}) + except: + pass + except: + pass + + if not panels["BOOKMARK"]: + panels["BOOKMARK"] = [{}] + + return panels def get_tab_visibility(tab_name): @@ -133,31 +168,29 @@ def get_tab_visibility(tab_name): def set_tab_visibility(tab_name, visible): bim_props = tool.Blender.get_bim_props() prop_name = f"tab_visibility_{tab_name.lower()}" - if hasattr(bim_props, prop_name): - setattr(bim_props, prop_name, visible) + setattr(bim_props, prop_name, visible) -def get_tab_names(): - return list(TAB_PANELS.keys()) +def get_panel_visibility(panel_id, current_tab=None): + try: + panel_config = get_panel_config(panel_id) + if panel_config: + if current_tab == "BOOKMARK": + return panel_config.is_visible_in_bookmarks + else: + return panel_config.is_visible_in_tab + except: + pass + return True - -def get_tab_name(bl_idname): - return next( - (k for k, v in reversed(list(TAB_PANELS.items())) if k != "BOOKMARK" and any(d.get("bl_idname") == bl_idname for d in v)), - "BOOKMARK", - ) - - -def get_bl_label(bl_idname): - return next( - ( - panel["bl_label"] - for panels in TAB_PANELS.values() - for panel in panels - if isinstance(panel, dict) and panel.get("bl_idname") == bl_idname - ), - "NO LABEL", - ) +def is_panel_bookmarked(panel_id): + try: + panel_config = get_panel_config(panel_id) + if panel_config: + return panel_config.is_bookmarked + except: + pass + return False class IFCFileSelector: @@ -1181,12 +1214,13 @@ class BIM_PT_tab_new_project_wizard(Panel): bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "PROJECT" @classmethod def poll(cls, context): - if not getattr(context.scene, "show_bim_pt_tab_new_project_wizard", True): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not tool.Blender.is_tab(context, "PROJECT"): + if not tool.Blender.is_tab(context, cls.bim_tab_name): return False bim_props = tool.Blender.get_bim_props() pprops = tool.Project.get_project_props() @@ -1202,29 +1236,24 @@ class BIM_PT_tab_new_project_wizard(Panel): class BIM_PT_tab_project_info(Panel): bl_idname = "BIM_PT_tab_project_info" - bl_label = get_bl_label(bl_idname) + bl_label = "Project Info" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "PROJECT" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + if tool.Blender.is_tab(context, cls.bim_tab_name): bim_props = tool.Blender.get_bim_props() pprops = tool.Project.get_project_props() if pprops.is_loading: return True elif tool.Ifc.get() or bim_props.ifc_file: return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): layout = self.layout @@ -1233,24 +1262,19 @@ class BIM_PT_tab_project_info(Panel): class BIM_PT_tab_spatial(Panel): bl_idname = "BIM_PT_tab_spatial" - bl_label = get_bl_label(bl_idname) + bl_label = "Spatial" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "PROJECT" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1258,24 +1282,19 @@ class BIM_PT_tab_spatial(Panel): class BIM_PT_tab_project_setup(Panel): bl_idname = "BIM_PT_tab_project_setup" - bl_label = get_bl_label(bl_idname) + bl_label = "Project Setup" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "PROJECT" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + if tool.Blender.is_tab(context, cls.bim_tab_name): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1283,25 +1302,20 @@ class BIM_PT_tab_project_setup(Panel): class BIM_PT_tab_stakeholders(Panel): bl_idname = "BIM_PT_tab_stakeholders" - bl_label = get_bl_label(bl_idname) + bl_label = "Stakeholders" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_options = {"DEFAULT_CLOSED"} + bim_tab_name = "PROJECT" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1309,24 +1323,19 @@ class BIM_PT_tab_stakeholders(Panel): class BIM_PT_tab_collaboration(Panel): bl_idname = "BIM_PT_tab_collaboration" - bl_label = get_bl_label(bl_idname) + bl_label = "Collaboration" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "QUALITY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + if tool.Blender.is_tab(context, cls.bim_tab_name): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1334,25 +1343,20 @@ class BIM_PT_tab_collaboration(Panel): class BIM_PT_tab_grouping_and_filtering(Panel): bl_idname = "BIM_PT_tab_grouping_and_filtering" - bl_label = get_bl_label(bl_idname) + bl_label = "Grouping and Filtering" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_options = {"HEADER_LAYOUT_EXPAND"} + bim_tab_name = "PROJECT" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1368,24 +1372,19 @@ class BIM_PT_tab_grouping_and_filtering(Panel): class BIM_PT_tab_geometry(Panel): bl_idname = "BIM_PT_tab_geometry" - bl_label = get_bl_label(bl_idname) + bl_label = "Geometry" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "PROJECT" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1393,24 +1392,19 @@ class BIM_PT_tab_geometry(Panel): class BIM_PT_tab_status(Panel): bl_idname = "BIM_PT_tab_status" - bl_label = get_bl_label(bl_idname) + bl_label = "Status" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SCHEDULING" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1418,24 +1412,19 @@ class BIM_PT_tab_status(Panel): class BIM_PT_tab_qto(Panel): bl_idname = "BIM_PT_tab_qto" - bl_label = get_bl_label(bl_idname) + bl_label = "Quantity Take-off" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SCHEDULING" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1443,24 +1432,19 @@ class BIM_PT_tab_qto(Panel): class BIM_PT_tab_resources(Panel): bl_idname = "BIM_PT_tab_resources" - bl_label = get_bl_label(bl_idname) + bl_label = "Resources" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SCHEDULING" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1468,24 +1452,19 @@ class BIM_PT_tab_resources(Panel): class BIM_PT_tab_cost(Panel): bl_idname = "BIM_PT_tab_cost" - bl_label = get_bl_label(bl_idname) + bl_label = "Cost" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SCHEDULING" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1493,24 +1472,19 @@ class BIM_PT_tab_cost(Panel): class BIM_PT_tab_sequence(Panel): bl_idname = "BIM_PT_tab_sequence" - bl_label = get_bl_label(bl_idname) + bl_label = "Construction Scheduling" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SCHEDULING" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1518,24 +1492,19 @@ class BIM_PT_tab_sequence(Panel): class BIM_PT_tab_structural(Panel): bl_idname = "BIM_PT_tab_structural" - bl_label = get_bl_label(bl_idname) + bl_label = "Structural" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "STRUCTURE" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1543,24 +1512,19 @@ class BIM_PT_tab_structural(Panel): class BIM_PT_tab_services(Panel): bl_idname = "BIM_PT_tab_services" - bl_label = get_bl_label(bl_idname) + bl_label = "Services" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SERVICES" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1568,24 +1532,19 @@ class BIM_PT_tab_services(Panel): class BIM_PT_tab_lighting(Panel): bl_idname = "BIM_PT_tab_lighting" - bl_label = get_bl_label(bl_idname) + bl_label = "Lighting" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SERVICES" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1593,24 +1552,19 @@ class BIM_PT_tab_lighting(Panel): class BIM_PT_tab_zones(Panel): bl_idname = "BIM_PT_tab_zones" - bl_label = get_bl_label(bl_idname) + bl_label = "Zones" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SERVICES" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1618,24 +1572,19 @@ class BIM_PT_tab_zones(Panel): class BIM_PT_tab_solar_analysis(Panel): bl_idname = "BIM_PT_tab_solar_analysis" - bl_label = get_bl_label(bl_idname) + bl_label = "Solar Analysis" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "SERVICES" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1643,24 +1592,19 @@ class BIM_PT_tab_solar_analysis(Panel): class BIM_PT_tab_quality_control(Panel): bl_idname = "BIM_PT_tab_quality_control" - bl_label = get_bl_label(bl_idname) + bl_label = "Quality Control" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "QUALITY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + if tool.Blender.is_tab(context, cls.bim_tab_name): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1668,24 +1612,19 @@ class BIM_PT_tab_quality_control(Panel): class BIM_PT_tab_clash_detection(Panel): bl_idname = "BIM_PT_tab_clash_detection" - bl_label = get_bl_label(bl_idname) + bl_label = "Clash Detection" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" + bim_tab_name = "QUALITY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + if tool.Blender.is_tab(context, cls.bim_tab_name): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1693,25 +1632,20 @@ class BIM_PT_tab_clash_detection(Panel): class BIM_PT_tab_sandbox(Panel): bl_idname = "BIM_PT_tab_sandbox" - bl_label = get_bl_label(bl_idname) + bl_label = "Sandbox" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_options = {"DEFAULT_CLOSED"} + bim_tab_name = "QUALITY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + if tool.Blender.is_tab(context, cls.bim_tab_name): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): row = self.layout.row() @@ -1726,18 +1660,15 @@ class BIM_PT_tab_object_metadata(Panel): bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "OBJECT" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): - return False - if not getattr(context.scene, prop_visible, True): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False props = tool.Project.get_project_props() if ( - tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get() and (obj := context.active_object) # Hide links empty handles. @@ -1748,9 +1679,7 @@ class BIM_PT_tab_object_metadata(Panel): ) ): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1758,30 +1687,25 @@ class BIM_PT_tab_object_metadata(Panel): class BIM_PT_tab_placement(Panel): bl_idname = "BIM_PT_tab_placement" - bl_label = get_bl_label(bl_idname) + bl_label = "Placement" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "GEOMETRY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): - return False - if not getattr(context.scene, prop_visible, True): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False if ( - tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) + tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) ): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1789,29 +1713,18 @@ class BIM_PT_tab_placement(Panel): class BIM_PT_tab_representations(Panel): bl_idname = "BIM_PT_tab_representations" - bl_label = get_bl_label(bl_idname) + bl_label = "Representations" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "GEOMETRY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if ( - tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) - and tool.Ifc.get() - and tool.Geometry.get_active_or_representation_obj() - ): - return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1819,26 +1732,21 @@ class BIM_PT_tab_representations(Panel): class BIM_PT_tab_geometric_relationships(Panel): bl_idname = "BIM_PT_tab_geometric_relationships" - bl_label = get_bl_label(bl_idname) + bl_label = "Geometric Relationships" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 bl_options = {"DEFAULT_CLOSED"} + bim_tab_name = "GEOMETRY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1846,31 +1754,19 @@ class BIM_PT_tab_geometric_relationships(Panel): class BIM_PT_tab_parametric_geometry(Panel): bl_idname = "BIM_PT_tab_parametric_geometry" - bl_label = get_bl_label(bl_idname) + bl_label = "Parametric Geometry" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 bl_options = {"DEFAULT_CLOSED"} + bim_tab_name = "GEOMETRY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if ( - tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) - and tool.Ifc.get() - and (obj := context.active_object) - and tool.Ifc.get_entity(obj) - ): - return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1878,30 +1774,18 @@ class BIM_PT_tab_parametric_geometry(Panel): class BIM_PT_tab_object_materials(Panel): bl_idname = "BIM_PT_tab_object_materials" - bl_label = get_bl_label(bl_idname) + bl_label = "Object Materials" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "GEOMETRY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if ( - tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) - and tool.Ifc.get() - and (obj := context.active_object) - and tool.Ifc.get_entity(obj) - ): - return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1909,25 +1793,20 @@ class BIM_PT_tab_object_materials(Panel): class BIM_PT_tab_materials(Panel): bl_idname = "BIM_PT_tab_materials" - bl_label = get_bl_label(bl_idname) + bl_label = "Materials" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "GEOMETRY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1935,25 +1814,20 @@ class BIM_PT_tab_materials(Panel): class BIM_PT_tab_styles(Panel): bl_idname = "BIM_PT_tab_styles" - bl_label = get_bl_label(bl_idname) + bl_label = "Styles" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "GEOMETRY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1961,25 +1835,20 @@ class BIM_PT_tab_styles(Panel): class BIM_PT_tab_profiles(Panel): bl_idname = "BIM_PT_tab_profiles" - bl_label = get_bl_label(bl_idname) + bl_label = "Profiles" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "GEOMETRY" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1987,25 +1856,20 @@ class BIM_PT_tab_profiles(Panel): class BIM_PT_tab_sheets(Panel): bl_idname = "BIM_PT_tab_sheets" - bl_label = get_bl_label(bl_idname) + bl_label = "Sheets" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "DRAWINGS" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -2013,25 +1877,20 @@ class BIM_PT_tab_sheets(Panel): class BIM_PT_tab_drawings(Panel): bl_idname = "BIM_PT_tab_drawings" - bl_label = get_bl_label(bl_idname) + bl_label = "Drawings" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "DRAWINGS" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -2039,25 +1898,20 @@ class BIM_PT_tab_drawings(Panel): class BIM_PT_tab_schedules(Panel): bl_idname = "BIM_PT_tab_schedules" - bl_label = get_bl_label(bl_idname) + bl_label = "Schedules" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "DRAWINGS" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -2065,25 +1919,20 @@ class BIM_PT_tab_schedules(Panel): class BIM_PT_tab_references(Panel): bl_idname = "BIM_PT_tab_references" - bl_label = get_bl_label(bl_idname) + bl_label = "References" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "DRAWINGS" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -2091,26 +1940,21 @@ class BIM_PT_tab_references(Panel): class BIM_PT_tab_misc(Panel): bl_idname = "BIM_PT_tab_misc" - bl_label = get_bl_label(bl_idname) + bl_label = "Misc" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 bl_options = {"DEFAULT_CLOSED"} + bim_tab_name = "OBJECT" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)) and tool.Ifc.get(): + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -2118,25 +1962,20 @@ class BIM_PT_tab_misc(Panel): class BIM_PT_tab_handover(Panel): bl_idname = "BIM_PT_tab_handover" - bl_label = get_bl_label(bl_idname) + bl_label = "Handover" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 1 + bim_tab_name = "FM" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + if tool.Blender.is_tab(context, cls.bim_tab_name): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -2144,25 +1983,20 @@ class BIM_PT_tab_handover(Panel): class BIM_PT_tab_operations(Panel): bl_idname = "BIM_PT_tab_operations" - bl_label = get_bl_label(bl_idname) + bl_label = "Operations" bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "scene" bl_order = 2 + bim_tab_name = "FM" @classmethod def poll(cls, context): - prop_bookmark = f"bookmark_{cls.bl_idname.lower()}" - prop_visible = f"show_{cls.bl_idname.lower()}" - if not get_tab_visibility(get_tab_name(cls.bl_idname)): + if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False - if not getattr(context.scene, prop_visible, True): - return False - if tool.Blender.is_tab(context, get_tab_name(cls.bl_idname)): + if tool.Blender.is_tab(context, cls.bim_tab_name): return True - if tool.Blender.is_tab(context, "BOOKMARK") and getattr(context.scene, prop_bookmark, False): - return True - return False + return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass From 34cf69e3fb1ff08501600ea1532f3b4e76768f67 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 11 Dec 2025 02:05:08 +0100 Subject: [PATCH 391/657] cleanup --- src/bonsai/bonsai/bim/__init__.py | 3 +-- src/bonsai/bonsai/bim/operator.py | 3 ++- src/bonsai/bonsai/bim/prop.py | 32 ++++++++++---------------- src/bonsai/bonsai/bim/ui.py | 38 ++++++++++++++++++++++++------- 4 files changed, 45 insertions(+), 31 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 81dd85f72a..52a33368a6 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -144,6 +144,7 @@ classes = [ prop.ISODuration, prop.BIMAreaProperties, prop.BIMTabProperties, + prop.BIMTabVisibility, # Must be registered before BIMProperties prop.BIMPanelProperties, # Must be registered before BIMProperties prop.BIMProperties, prop.IfcParameter, @@ -285,8 +286,6 @@ def register(): bpy.types.Camera.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) bpy.types.PointLight.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) - ui.initialize_panel_properties() - if hasattr(bpy.types, "UI_MT_button_context_menu"): bpy.types.UI_MT_button_context_menu.append(ui.draw_custom_context_menu) bpy.types.STATUSBAR_HT_header.append(ui.draw_statusbar) diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 1a646ec0b3..5f6eec8d59 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -33,7 +33,7 @@ import bonsai.bim import bonsai.tool as tool import bonsai.bim.handler from enum import Enum -from bonsai.bim.ui import get_all_tab_panels, get_tab_visibility, set_tab_visibility, get_tab_names, get_panel_config, initialize_panel_properties +from bonsai.bim.ui import get_all_tab_panels, get_tab_visibility, set_tab_visibility, get_tab_names, get_panel_config, initialize_panel_properties, initialize_tab_visibilities from bpy_extras.io_utils import ImportHelper from bonsai.bim import import_ifc from bonsai.bim.prop import StrProperty @@ -1794,6 +1794,7 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): context.scene.active_tab_name = self.tab_name context.scene.tab_panels.clear() + initialize_tab_visibilities() initialize_panel_properties() all_panels = get_all_tab_panels(force_refresh=True) diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 7c501d6184..f0d3f8e5c0 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -530,6 +530,15 @@ class BIMTabProperties(PropertyGroup): inactive_tab: bool +class BIMTabVisibility(PropertyGroup): + name: StringProperty(name="Tab Name") + is_visible: BoolProperty(name="Is Visible", default=True) + + if TYPE_CHECKING: + name: str + is_visible: bool + + class BIMPanelProperties(PropertyGroup): is_visible_in_tab: BoolProperty(name="Is Visible in Tab", default=True) is_visible_in_bookmarks: BoolProperty(name="Is Visible in Bookmarks", default=True) @@ -624,16 +633,8 @@ class BIMProperties(PropertyGroup): ], name="Time Unit", default="HOUR", - ) tab_visibility_project: BoolProperty(name="Project Tab Visible", default=True) - tab_visibility_object: BoolProperty(name="Object Tab Visible", default=True) - tab_visibility_geometry: BoolProperty(name="Geometry Tab Visible", default=True) - tab_visibility_drawings: BoolProperty(name="Drawings Tab Visible", default=True) - tab_visibility_services: BoolProperty(name="Services Tab Visible", default=True) - tab_visibility_structure: BoolProperty(name="Structure Tab Visible", default=True) - tab_visibility_scheduling: BoolProperty(name="Scheduling Tab Visible", default=True) - tab_visibility_fm: BoolProperty(name="FM Tab Visible", default=True) - tab_visibility_quality: BoolProperty(name="Quality Tab Visible", default=True) - tab_visibility_bookmark: BoolProperty(name="Bookmark Tab Visible", default=True) + ) + tab_visibilities: CollectionProperty(type=BIMTabVisibility, name="Tab Visibilities") panel_properties: CollectionProperty(type=BIMPanelProperties, name="Panel Properties") if TYPE_CHECKING: @@ -650,16 +651,7 @@ class BIMProperties(PropertyGroup): volume_unit: str mass_unit: str time_unit: str - tab_visibility_project: bool - tab_visibility_object: bool - tab_visibility_geometry: bool - tab_visibility_drawings: bool - tab_visibility_services: bool - tab_visibility_structure: bool - tab_visibility_scheduling: bool - tab_visibility_fm: bool - tab_visibility_quality: bool - tab_visibility_bookmark: bool + tab_visibilities: bpy.types.bpy_prop_collection[BIMTabVisibility] panel_properties: bpy.types.bpy_prop_collection[BIMPanelProperties] diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 6589197f56..8968821244 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -35,7 +35,7 @@ from bonsai import get_debug_info import bonsai.bim import bonsai.tool as tool from ifcopenshell.util.file import IfcHeaderExtractor -from bonsai.bim.prop import Attribute +from bonsai.bim.prop import Attribute, get_tab from bonsai.bim.module.bsdd.prop import BIMBSDDProperties, BSDDProperty from bonsai.bim.module.pset.prop import IfcProperty from bonsai.bim.module.model.prop import ( @@ -62,10 +62,9 @@ if TYPE_CHECKING: from bonsai.bim.module.project.prop import BIMProjectProperties -TAB_NAMES = ["PROJECT", "OBJECT", "GEOMETRY", "DRAWINGS", "SERVICES", "STRUCTURE", "SCHEDULING", "FM", "QUALITY", "BOOKMARK"] - def get_tab_names(): - return TAB_NAMES + enum_items = get_tab(None, None) + return [item[0] for item in enum_items if item is not None] def get_panel_tab_name(panel_class): if hasattr(panel_class, 'bim_tab_name'): @@ -82,6 +81,23 @@ def should_show_panel(panel_id, panel_tab_name, context): return False +def initialize_tab_visibilities(): + """Initialize tab visibility collection with all tabs set to visible by default.""" + try: + bim_props = tool.Blender.get_bim_props() + except (AttributeError, AssertionError): + # Context not available during registration, skip initialization + return + + if len(bim_props.tab_visibilities) > 0: + return + + for tab_name in get_tab_names(): + tab_vis = bim_props.tab_visibilities.add() + tab_vis.name = tab_name + tab_vis.is_visible = True + + def initialize_panel_properties(): try: bim_props = tool.Blender.get_bim_props() @@ -161,14 +177,20 @@ def get_all_tab_panels(force_refresh=False): def get_tab_visibility(tab_name): bim_props = tool.Blender.get_bim_props() - prop_name = f"tab_visibility_{tab_name.lower()}" - return getattr(bim_props, prop_name, True) + tab_vis = bim_props.tab_visibilities.get(tab_name) + return tab_vis.is_visible if tab_vis else True def set_tab_visibility(tab_name, visible): bim_props = tool.Blender.get_bim_props() - prop_name = f"tab_visibility_{tab_name.lower()}" - setattr(bim_props, prop_name, visible) + tab_vis = bim_props.tab_visibilities.get(tab_name) + if tab_vis: + tab_vis.is_visible = visible + else: + # Create if doesn't exist + new_tab = bim_props.tab_visibilities.add() + new_tab.name = tab_name + new_tab.is_visible = visible def get_panel_visibility(panel_id, current_tab=None): From 888ab85548d535b339dd9d9bae7b71c9b3375dfe Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 11 Dec 2025 02:41:52 +0100 Subject: [PATCH 392/657] Refactor UI helpers into helper module for better organization --- src/bonsai/bonsai/bim/helper.py | 145 ++++++++++++++++++++++++++ src/bonsai/bonsai/bim/operator.py | 10 +- src/bonsai/bonsai/bim/ui.py | 168 +++--------------------------- 3 files changed, 164 insertions(+), 159 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index 873d368fad..6ba13dbb4d 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -784,3 +784,148 @@ def draw_filter( op.group_index = i op.index = j op.module = module + +# ============================================================================ +# UI Panel Visibility Helpers +# ============================================================================ + +def get_tab_names(): + from bonsai.bim.prop import get_tab + enum_items = get_tab(None, None) + # Exclude None separators and the BLENDER tab (not part of BIM tab system) + return [item[0] for item in enum_items if item is not None and item[0] != "BLENDER"] + + +def get_panel_tab_name(panel_class): + if hasattr(panel_class, 'bim_tab_name'): + return panel_class.bim_tab_name + return "PROJECT" # Default fallback + + +def should_show_panel(panel_id, panel_tab_name, context): + if tool.Blender.is_tab(context, "BOOKMARK"): + return is_panel_bookmarked(panel_id) and get_panel_visibility(panel_id, "BOOKMARK") + + if tool.Blender.is_tab(context, panel_tab_name): + return get_tab_visibility(panel_tab_name) and get_panel_visibility(panel_id, panel_tab_name) + + return False + + +def get_tab_visibility(tab_name): + bim_props = tool.Blender.get_bim_props() + tab_vis = bim_props.tab_visibilities.get(tab_name) + return tab_vis.is_visible if tab_vis else True + + +def set_tab_visibility(tab_name, visible): + bim_props = tool.Blender.get_bim_props() + tab_vis = bim_props.tab_visibilities.get(tab_name) + if tab_vis: + tab_vis.is_visible = visible + else: + new_tab = bim_props.tab_visibilities.add() + new_tab.name = tab_name + new_tab.is_visible = visible + + +def get_panel_visibility(panel_id, current_tab=None): + panel_config = get_panel_config(panel_id) + if panel_config: + if current_tab == "BOOKMARK": + return panel_config.is_visible_in_bookmarks + else: + return panel_config.is_visible_in_tab + return True + + +def is_panel_bookmarked(panel_id): + panel_config = get_panel_config(panel_id) + if panel_config: + return panel_config.is_bookmarked + return False + + +def get_panel_config(panel_id, create_if_missing=False): + try: + bim_props = tool.Blender.get_bim_props() + except (AttributeError, AssertionError): + return None + + for prop in bim_props.panel_properties: + if prop.name == panel_id: + return prop + + if create_if_missing: + try: + prop = bim_props.panel_properties.add() + prop.name = panel_id + prop.is_visible_in_tab = True + prop.is_visible_in_bookmarks = True + prop.is_bookmarked = False + return prop + except AttributeError: + pass + + return None + + + +def get_all_tab_panels(force_refresh=False): + panels = {tab_name: [] for tab_name in get_tab_names() if tab_name != "BOOKMARK"} + panels["BOOKMARK"] = [] + + + bim_props = tool.Blender.get_bim_props() + for prop in bim_props.panel_properties: + panel_class = getattr(bpy.types, prop.name, None) + if panel_class: + tab_name = get_panel_tab_name(panel_class) + if tab_name and tab_name != "BOOKMARK": + bl_label = getattr(panel_class, "bl_label", prop.name) + panels[tab_name].append({"bl_idname": prop.name, "bl_label": bl_label}) + + if prop.is_bookmarked: + panel_class = getattr(bpy.types, prop.name, None) + if panel_class: + bl_label = getattr(panel_class, "bl_label", prop.name) + panels["BOOKMARK"].append({"bl_idname": prop.name, "bl_label": bl_label}) + + if not panels["BOOKMARK"]: + panels["BOOKMARK"] = [{}] + + return panels + + +def initialize_tab_visibilities(): + bim_props = tool.Blender.get_bim_props() + + if len(bim_props.tab_visibilities) > 0: + return + + for tab_name in get_tab_names(): + tab_vis = bim_props.tab_visibilities.add() + tab_vis.name = tab_name + tab_vis.is_visible = True + + +def initialize_panel_properties(): + + bim_props = tool.Blender.get_bim_props() + + if len(bim_props.panel_properties) > 0: + return + + for attr_name in dir(bpy.types): + if attr_name.startswith("BIM_PT_tab_"): + panel_class = getattr(bpy.types, attr_name) + if not hasattr(panel_class, 'bl_idname'): + continue + + panel_id = panel_class.bl_idname + + prop = bim_props.panel_properties.add() + prop.name = panel_id + prop.is_visible_in_tab = True + prop.is_visible_in_bookmarks = True + prop.is_bookmarked = False diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 5f6eec8d59..5569f0ea1d 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -33,7 +33,7 @@ import bonsai.bim import bonsai.tool as tool import bonsai.bim.handler from enum import Enum -from bonsai.bim.ui import get_all_tab_panels, get_tab_visibility, set_tab_visibility, get_tab_names, get_panel_config, initialize_panel_properties, initialize_tab_visibilities +from bonsai.bim.helper import get_all_tab_panels, get_tab_visibility, set_tab_visibility, get_tab_names, get_panel_config, initialize_panel_properties, initialize_tab_visibilities from bpy_extras.io_utils import ImportHelper from bonsai.bim import import_ifc from bonsai.bim.prop import StrProperty @@ -1728,7 +1728,7 @@ class BIM_OT_toggle_panel_visibility(bpy.types.Operator): active_tab = getattr(context.scene, "active_tab_name", None) or getattr(tool.Blender.get_bim_props(), "tab", None) is_bookmark_tab = active_tab == "BOOKMARK" - panel_config = get_panel_config(panel_name) + panel_config = get_panel_config(panel_name, create_if_missing=True) if panel_config: if is_bookmark_tab: panel_config.is_visible_in_bookmarks = not panel_config.is_visible_in_bookmarks @@ -1762,7 +1762,7 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): def execute(self, context): panel_name = self.action.replace("BOOKMARK_", "") - panel_config = get_panel_config(panel_name) + panel_config = get_panel_config(panel_name, create_if_missing=True) if panel_config: panel_config.is_bookmarked = not panel_config.is_bookmarked @@ -1808,7 +1808,7 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): item.name = panel_name item["bl_label"] = panel_label - panel_config = get_panel_config(panel_name) + panel_config = get_panel_config(panel_name, create_if_missing=True) if panel_config: if self.tab_name == "BOOKMARK": item["visible"] = panel_config.is_visible_in_bookmarks @@ -1830,7 +1830,7 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): def execute(self, context): for item in context.scene.tab_panels: - panel_config = get_panel_config(item.name) + panel_config = get_panel_config(item.name, create_if_missing=True) if panel_config: if self.tab_name == "BOOKMARK": panel_config.is_visible_in_bookmarks = item["visible"] diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 8968821244..76cb29b991 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -35,7 +35,20 @@ from bonsai import get_debug_info import bonsai.bim import bonsai.tool as tool from ifcopenshell.util.file import IfcHeaderExtractor -from bonsai.bim.prop import Attribute, get_tab +from bonsai.bim.prop import Attribute +from bonsai.bim.helper import ( + get_tab_names, + get_panel_tab_name, + should_show_panel, + get_tab_visibility, + set_tab_visibility, + get_panel_visibility, + is_panel_bookmarked, + get_panel_config, + get_all_tab_panels, + initialize_tab_visibilities, + initialize_panel_properties, +) from bonsai.bim.module.bsdd.prop import BIMBSDDProperties, BSDDProperty from bonsai.bim.module.pset.prop import IfcProperty from bonsai.bim.module.model.prop import ( @@ -62,159 +75,6 @@ if TYPE_CHECKING: from bonsai.bim.module.project.prop import BIMProjectProperties -def get_tab_names(): - enum_items = get_tab(None, None) - return [item[0] for item in enum_items if item is not None] - -def get_panel_tab_name(panel_class): - if hasattr(panel_class, 'bim_tab_name'): - return panel_class.bim_tab_name - return "PROJECT" # Default fallback - - -def should_show_panel(panel_id, panel_tab_name, context): - if tool.Blender.is_tab(context, "BOOKMARK"): - return is_panel_bookmarked(panel_id) and get_panel_visibility(panel_id, "BOOKMARK") - - if tool.Blender.is_tab(context, panel_tab_name): - return get_tab_visibility(panel_tab_name) and get_panel_visibility(panel_id, panel_tab_name) - - return False - -def initialize_tab_visibilities(): - """Initialize tab visibility collection with all tabs set to visible by default.""" - try: - bim_props = tool.Blender.get_bim_props() - except (AttributeError, AssertionError): - # Context not available during registration, skip initialization - return - - if len(bim_props.tab_visibilities) > 0: - return - - for tab_name in get_tab_names(): - tab_vis = bim_props.tab_visibilities.add() - tab_vis.name = tab_name - tab_vis.is_visible = True - - -def initialize_panel_properties(): - try: - bim_props = tool.Blender.get_bim_props() - - if len(bim_props.panel_properties) > 0: - return - - for attr_name in dir(bpy.types): - if attr_name.startswith("BIM_PT_tab_"): - try: - panel_class = getattr(bpy.types, attr_name) - if not hasattr(panel_class, 'bl_idname'): - continue - - panel_id = panel_class.bl_idname - - prop = bim_props.panel_properties.add() - prop.name = panel_id - prop.is_visible_in_tab = True - prop.is_visible_in_bookmarks = True - prop.is_bookmarked = False - except: - pass - except: - pass - -def get_panel_config(panel_id): - try: - bim_props = tool.Blender.get_bim_props() - - for prop in bim_props.panel_properties: - if prop.name == panel_id: - return prop - - prop = bim_props.panel_properties.add() - prop.name = panel_id - prop.is_visible_in_tab = True - prop.is_visible_in_bookmarks = True - prop.is_bookmarked = False - return prop - except: - return None - -def get_all_tab_panels(force_refresh=False): - panels = {tab_name: [] for tab_name in get_tab_names() if tab_name != "BOOKMARK"} - panels["BOOKMARK"] = [] - - try: - bim_props = tool.Blender.get_bim_props() - for prop in bim_props.panel_properties: - try: - panel_class = getattr(bpy.types, prop.name, None) - if panel_class: - tab_name = get_panel_tab_name(panel_class) - if tab_name and tab_name != "BOOKMARK": - bl_label = getattr(panel_class, "bl_label", prop.name) - panels[tab_name].append({"bl_idname": prop.name, "bl_label": bl_label}) - except: - pass - - if prop.is_bookmarked: - try: - panel_class = getattr(bpy.types, prop.name, None) - if panel_class: - bl_label = getattr(panel_class, "bl_label", prop.name) - panels["BOOKMARK"].append({"bl_idname": prop.name, "bl_label": bl_label}) - except: - pass - except: - pass - - if not panels["BOOKMARK"]: - panels["BOOKMARK"] = [{}] - - return panels - - -def get_tab_visibility(tab_name): - bim_props = tool.Blender.get_bim_props() - tab_vis = bim_props.tab_visibilities.get(tab_name) - return tab_vis.is_visible if tab_vis else True - - -def set_tab_visibility(tab_name, visible): - bim_props = tool.Blender.get_bim_props() - tab_vis = bim_props.tab_visibilities.get(tab_name) - if tab_vis: - tab_vis.is_visible = visible - else: - # Create if doesn't exist - new_tab = bim_props.tab_visibilities.add() - new_tab.name = tab_name - new_tab.is_visible = visible - - -def get_panel_visibility(panel_id, current_tab=None): - try: - panel_config = get_panel_config(panel_id) - if panel_config: - if current_tab == "BOOKMARK": - return panel_config.is_visible_in_bookmarks - else: - return panel_config.is_visible_in_tab - except: - pass - return True - -def is_panel_bookmarked(panel_id): - try: - panel_config = get_panel_config(panel_id) - if panel_config: - return panel_config.is_bookmarked - except: - pass - return False - - class IFCFileSelector: layout: bpy.types.UILayout From 76b6f6b16b85f6f03ce2c08d8339903c99a894fe Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 11 Dec 2025 14:34:42 +0100 Subject: [PATCH 393/657] Implement user interface customization features and enhance metadata handling --- .../bonsai/bim/module/project/operator.py | 19 ++++++++++++++ src/bonsai/bonsai/bim/module/project/ui.py | 18 +++++-------- src/bonsai/bonsai/bim/operator.py | 8 ++++-- src/bonsai/bonsai/bim/ui.py | 26 ++++++++++++------- 4 files changed, 48 insertions(+), 23 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 8bad2e17d4..e4ac3c8dfb 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -1056,6 +1056,18 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): return tooltip def execute(self, context): + if (tool.Blender.get_addon_preferences().user_ui_customization + and self.should_start_fresh_session + and not self.is_advanced): + filepath = self.get_filepath() + metadata_path = Path(str(filepath) + ".metadata.blend") + if metadata_path.exists() and metadata_path.is_file(): + try: + bpy.ops.bim.load_blend_metadata_and_ifc(filepath=filepath) + return {"FINISHED"} + except Exception as e: + self.report({"WARNING"}, f"Failed to load metadata file, using regular load: {e}") + @persistent def load_handler(*args): bpy.app.handlers.load_post.remove(load_handler) @@ -1748,6 +1760,13 @@ class ExportIFC(bpy.types.Operator, ExportHelper): if save_blend_file: bpy.ops.wm.save_mainfile(filepath=bpy.data.filepath) bim_props.is_dirty = False + + if tool.Blender.get_addon_preferences().user_ui_customization: + try: + bpy.ops.bim.save_blend_metadata_file() + except Exception as e: + settings.logger.warning(f"Failed to save blend metadata file: {e}") + bonsai.bim.handler.refresh_ui_data() self.report( {"INFO"}, diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index c728908ed2..6296c9a984 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -331,18 +331,12 @@ class BIM_PT_project(Panel): col.prop(props, "ifc_file", text="") row.operator("bim.select_ifc_file", icon="FILE_FOLDER", text="") - # Blend metadata file UI - row = self.layout.row(align=True) - col = row.column() - col.enabled = False - # Show blend metadata file as a label, not editable - blendmetadata_path = "" - if props.ifc_file: - blendmetadata_path = props.ifc_file + ".blendmetadata" - col.label(text=blendmetadata_path) - row.operator("bim.save_blend_metadata_file", icon="FILE_TICK", text="") - row = self.layout.row(align=True) - row.operator("bim.load_blend_metadata_and_ifc", icon="FILE_REFRESH", text="Load Metadata + IFC") + if tool.Blender.get_addon_preferences().user_ui_customization: + row = self.layout.row(align=True) + col = row.column() + col.enabled = False + metadata_filename = os.path.basename(props.ifc_file) + ".metadata.blend" + col.label(text=f"Saving session data to: {metadata_filename}") class BIM_PT_new_project_wizard(Panel): diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 5569f0ea1d..1a1c07bd3f 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -304,10 +304,14 @@ class LoadBlendMetadataAndIFC(bpy.types.Operator): bl_idname = "bim.load_blend_metadata_and_ifc" bl_label = "Load Blend Metadata and IFC" bl_options = {"REGISTER", "UNDO"} + filepath: bpy.props.StringProperty(name="IFC File Path", default="") def execute(self, context): - props = tool.Blender.get_bim_props() - ifc_file = getattr(props, "ifc_file", None) + ifc_file = self.filepath + if not ifc_file: + props = tool.Blender.get_bim_props() + ifc_file = getattr(props, "ifc_file", None) + if not ifc_file: self.report({"WARNING"}, "No IFC file path set.") return {"CANCELLED"} diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 76cb29b991..4062991aa5 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -702,7 +702,12 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description="Show mass and time units section in the new project wizard panel", default=False, ) - + user_ui_customization: BoolProperty( + name="User UI Customization", + description="Enable user interface customization features (hide/show tabs and panels, bookmark panels) and save the session settings as part of the .metadata.blend file", + default=False, + ) + chain_filter_with_set_operations: BoolProperty( name="NEW filter mode: Enable chained filters with set operations", description="Enable chaining search filters with set operations: ADD (union: combine sets), SUBTRACT (difference: remove from set), FILTER (intersection: only elements in both sets), with autocomplete suggestions for filter values", @@ -753,6 +758,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): mass_time_units_in_wizard: bool chain_filter_with_set_operations: bool default_filter_with_set_operations_for_globalid_and_class: bool + user_ui_customization: bool def draw(self, context: bpy.types.Context) -> None: layout = self.layout @@ -943,6 +949,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): row = box.row(align=True) row.prop(self, "default_filter_with_set_operations_for_globalid_and_class") row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/comment/27030" + layout.prop(self, "user_ui_customization") # Scene panel groups @@ -989,8 +996,8 @@ class BIM_PT_tabs(Panel): self.draw_tab_entry(row_left, "PACKAGE", "FM", True, aprops.tab == "FM") if get_tab_visibility("QUALITY"): self.draw_tab_entry(row_left, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") - if get_tab_visibility("BOOKMARK"): - self.draw_tab_entry(row_left, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") # New BOOKMARK tab + if tool.Blender.get_addon_preferences().user_ui_customization and get_tab_visibility("BOOKMARK"): + self.draw_tab_entry(row_left, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") row_left.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") row_left = col_left.row(align=True) @@ -1010,16 +1017,17 @@ class BIM_PT_tabs(Panel): row_right = col_right.row(align=True) row_right.alignment = "RIGHT" - row_right.operator("bim.manage_tab_visibility", icon="PREFERENCES", text="") + if tool.Blender.get_addon_preferences().user_ui_customization: + row_right.operator("bim.manage_tab_visibility", icon="PREFERENCES", text="") row = self.layout.row(align=True) row.prop(aprops, "tab", text="") - # Add gear icons for all tabs except SWITCH_TAB - for tab in get_tab_names(): - if get_tab_visibility(tab): - if aprops.tab == tab: - row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab + if tool.Blender.get_addon_preferences().user_ui_customization: + for tab in get_tab_names(): + if get_tab_visibility(tab): + if aprops.tab == tab: + row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab if bonsai.REINSTALLED_BBIM_VERSION: box = self.layout.box() From e4e1364eaa9f3d5a65c14caa77922111b38b87a5 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 11 Dec 2025 15:05:26 +0100 Subject: [PATCH 394/657] align underscore below the active tab icon --- src/bonsai/bonsai/bim/ui.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 4062991aa5..7d24161e23 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -1004,6 +1004,10 @@ class BIM_PT_tabs(Panel): # Yes, that's right. row_left.alignment = "CENTER" row_left.scale_y = 0.2 + + if not tool.Blender.get_addon_preferences().user_ui_customization: + row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) + for tab in get_tab_names(): # Draw a little underscore below the active tab icon. if get_tab_visibility(tab): @@ -1012,7 +1016,6 @@ class BIM_PT_tabs(Panel): else: row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) # space for Switch - col_right = split.column(align=True) row_right = col_right.row(align=True) row_right.alignment = "RIGHT" From 08d9e31a3a7dd14020f426ff9e673475b2ccff4b Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 11 Dec 2025 16:33:22 +0100 Subject: [PATCH 395/657] provide user feedback in IFC export --- .../bonsai/bim/module/project/operator.py | 19 +++++++++++-------- src/bonsai/bonsai/bim/operator.py | 4 ---- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index e4ac3c8dfb..9dadbba79a 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -1756,22 +1756,25 @@ class ExportIFC(bpy.types.Operator, ExportHelper): bim_props = tool.Blender.get_bim_props() if bim_props.ifc_file != output_file and extension not in ("ifczip", "ifcjson"): tool.Ifc.set_path(output_file) - save_blend_file = bool(bpy.data.is_saved and bpy.data.is_dirty and bpy.data.filepath) - if save_blend_file: - bpy.ops.wm.save_mainfile(filepath=bpy.data.filepath) bim_props.is_dirty = False if tool.Blender.get_addon_preferences().user_ui_customization: try: bpy.ops.bim.save_blend_metadata_file() + blendmetadata_path = output_file + ".metadata.blend" + self.report({"INFO"}, f'IFC Project "{os.path.basename(output_file)}" And Metadata File Saved to: {os.path.basename(blendmetadata_path)}') except Exception as e: - settings.logger.warning(f"Failed to save blend metadata file: {e}") + self.report({"ERROR"}, f"Failed to save blend metadata file: {e}") + else: + save_blend_file = bool(bpy.data.is_saved and bpy.data.is_dirty and bpy.data.filepath) + if save_blend_file: + bpy.ops.wm.save_mainfile(filepath=bpy.data.filepath) + self.report( + {"INFO"}, + f'IFC Project "{os.path.basename(output_file)}" {"" if not save_blend_file else "And Current Blend File Are"} Saved', + ) bonsai.bim.handler.refresh_ui_data() - self.report( - {"INFO"}, - f'IFC Project "{os.path.basename(output_file)}" {"" if not save_blend_file else "And Current Blend File Are"} Saved', - ) @classmethod def description(cls, context, properties): diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 1a1c07bd3f..eac6ad26f1 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -294,10 +294,6 @@ bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') except Exception: pass - if result.returncode == 0: - self.report({"INFO"}, f"Blend metadata file saved to: {blendmetadata_path}") - else: - self.report({"ERROR"}, f"Failed to save blend metadata file: {result.stderr.decode()}") return {"FINISHED"} class LoadBlendMetadataAndIFC(bpy.types.Operator): From 633474b4f6512c3708f33520a3aeebab7eac91b0 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 12 Dec 2025 09:13:15 +0100 Subject: [PATCH 396/657] Refactor UI preferences to use 'save_metadata_blend_file' instead of 'user_ui_customization' for metadata handling --- .../bonsai/bim/module/project/operator.py | 4 +- src/bonsai/bonsai/bim/module/project/ui.py | 2 +- src/bonsai/bonsai/bim/operator.py | 39 +++++++++++++------ src/bonsai/bonsai/bim/ui.py | 21 +++++++--- 4 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 9dadbba79a..607a1625c4 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -1056,7 +1056,7 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): return tooltip def execute(self, context): - if (tool.Blender.get_addon_preferences().user_ui_customization + if (tool.Blender.get_addon_preferences().save_metadata_blend_file and self.should_start_fresh_session and not self.is_advanced): filepath = self.get_filepath() @@ -1758,7 +1758,7 @@ class ExportIFC(bpy.types.Operator, ExportHelper): tool.Ifc.set_path(output_file) bim_props.is_dirty = False - if tool.Blender.get_addon_preferences().user_ui_customization: + if tool.Blender.get_addon_preferences().save_metadata_blend_file: try: bpy.ops.bim.save_blend_metadata_file() blendmetadata_path = output_file + ".metadata.blend" diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 6296c9a984..fa45494e0f 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -331,7 +331,7 @@ class BIM_PT_project(Panel): col.prop(props, "ifc_file", text="") row.operator("bim.select_ifc_file", icon="FILE_FOLDER", text="") - if tool.Blender.get_addon_preferences().user_ui_customization: + if tool.Blender.get_addon_preferences().save_metadata_blend_file: row = self.layout.row(align=True) col = row.column() col.enabled = False diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index eac6ad26f1..78d59054d8 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -257,27 +257,43 @@ class SaveBlendMetadataFile(bpy.types.Operator): temp_path = bpy.path.abspath('//__temp_blendmetadata.blend') bpy.ops.wm.save_as_mainfile(filepath=temp_path, copy=True) - # Prepare Python script to run in background Blender to remove geometry cleanup_script = f""" import bpy -# Remove all mesh objects and mesh collections -for obj in bpy.data.objects: - if obj.type == 'MESH': - bpy.data.objects.remove(obj, do_unlink=True) -for collection in bpy.data.collections: - # Remove collections that only contain mesh objects - if all(o.type == 'MESH' for o in collection.objects): - bpy.data.collections.remove(collection) + +def remove_ifc_collections(): + \"\"\"Remove all collections that start with 'IfcProject' and their contents.\"\"\" + collections_to_remove = [] + + # Find all IfcProject collections + for collection in bpy.data.collections: + if collection.name.startswith('IfcProject'): + collections_to_remove.append(collection) + + # Remove objects in these collections first + for collection in collections_to_remove: + for obj in list(collection.objects): + bpy.data.objects.remove(obj, do_unlink=True) + + # Also remove any child collections + for child in list(collection.children): + bpy.data.collections.remove(child, do_unlink=True) + + # Remove the IfcProject collections themselves + for collection in collections_to_remove: + bpy.data.collections.remove(collection, do_unlink=True) + +# Remove IFC-related data +remove_ifc_collections() + +# Save the metadata file bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') """ - # Save cleanup script to temp file import tempfile with tempfile.NamedTemporaryFile('w', suffix='.py', delete=False) as script_file: script_file.write(cleanup_script) script_path = script_file.name - # Run Blender in background to clean and save metadata file blender_exe = bpy.app.binary_path import subprocess result = subprocess.run([ @@ -287,7 +303,6 @@ bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') '--python', script_path ], capture_output=True) - # Clean up temp files try: os.remove(temp_path) os.remove(script_path) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 7d24161e23..47d51e5484 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -701,6 +701,11 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): name="Mass and time units in project wizard", description="Show mass and time units section in the new project wizard panel", default=False, + ) + save_metadata_blend_file: BoolProperty( + name="Save non ifc data to .metadata.blend File", + description="Save session data (window layout, settings) to a .metadata.blend file alongside the IFC file. This file is automatically loaded when opening the project.", + default=False, ) user_ui_customization: BoolProperty( name="User UI Customization", @@ -758,6 +763,7 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): mass_time_units_in_wizard: bool chain_filter_with_set_operations: bool default_filter_with_set_operations_for_globalid_and_class: bool + save_metadata_blend_file: bool user_ui_customization: bool def draw(self, context: bpy.types.Context) -> None: @@ -949,7 +955,11 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): row = box.row(align=True) row.prop(self, "default_filter_with_set_operations_for_globalid_and_class") row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/comment/27030" - layout.prop(self, "user_ui_customization") + layout.prop(self, "save_metadata_blend_file") + if self.save_metadata_blend_file: + row = layout.row() + row.separator() + row.prop(self, "user_ui_customization") # Scene panel groups @@ -967,6 +977,7 @@ class BIM_PT_tabs(Panel): UIData.load() is_ifc_project = bool(tool.Ifc.get()) aprops = tool.Blender.get_area_props(context) + addon_prefs = tool.Blender.get_addon_preferences() ifc_icon = f"{UIData.data['tabs_icon_color_mode']}_ifc" split = self.layout.split(factor=0.9) @@ -996,7 +1007,7 @@ class BIM_PT_tabs(Panel): self.draw_tab_entry(row_left, "PACKAGE", "FM", True, aprops.tab == "FM") if get_tab_visibility("QUALITY"): self.draw_tab_entry(row_left, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") - if tool.Blender.get_addon_preferences().user_ui_customization and get_tab_visibility("BOOKMARK"): + if addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization and get_tab_visibility("BOOKMARK"): self.draw_tab_entry(row_left, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") row_left.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") @@ -1005,7 +1016,7 @@ class BIM_PT_tabs(Panel): row_left.alignment = "CENTER" row_left.scale_y = 0.2 - if not tool.Blender.get_addon_preferences().user_ui_customization: + if not (addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization): row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) for tab in get_tab_names(): @@ -1020,13 +1031,13 @@ class BIM_PT_tabs(Panel): row_right = col_right.row(align=True) row_right.alignment = "RIGHT" - if tool.Blender.get_addon_preferences().user_ui_customization: + if addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization: row_right.operator("bim.manage_tab_visibility", icon="PREFERENCES", text="") row = self.layout.row(align=True) row.prop(aprops, "tab", text="") - if tool.Blender.get_addon_preferences().user_ui_customization: + if addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization: for tab in get_tab_names(): if get_tab_visibility(tab): if aprops.tab == tab: From 70cc77df905c733f4ccc46f628d1ca7b62cd4e9b Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 12 Dec 2025 11:37:33 +0100 Subject: [PATCH 397/657] Enhance IFC collection removal --- src/bonsai/bonsai/bim/__init__.py | 1 - src/bonsai/bonsai/bim/operator.py | 55 +++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 52a33368a6..6a3802c44f 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -370,4 +370,3 @@ def unregister(): del bpy.types.Scene.active_tab_name del bpy.types.Scene.tab_panels del bpy.types.Scene.active_tab_panel_index - unregister_panel_visibility_properties() diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 78d59054d8..7eb1ff16fd 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -269,22 +269,55 @@ def remove_ifc_collections(): if collection.name.startswith('IfcProject'): collections_to_remove.append(collection) - # Remove objects in these collections first + # First, use bim.override_outliner_delete to properly remove IFC data for collection in collections_to_remove: - for obj in list(collection.objects): - bpy.data.objects.remove(obj, do_unlink=True) + # Collect all objects in the collection and its children + objects_to_delete = [] - # Also remove any child collections + def collect_objects(col): + for obj in col.objects: + if obj not in objects_to_delete: + objects_to_delete.append(obj) + for child in col.children: + collect_objects(child) + + collect_objects(collection) + + # Use bim.override_outliner_delete for each object to clean up IFC data + for obj in objects_to_delete: + # Select only this object + bpy.ops.object.select_all(action='DESELECT') + obj.select_set(True) + bpy.context.view_layer.objects.active = obj + + # Try to use Bonsai's delete operator which cleans up IFC data + try: + bpy.ops.bim.override_outliner_delete() + except: + # If that fails, use standard delete + bpy.data.objects.remove(obj, do_unlink=True) + + # Remove any remaining child collections for child in list(collection.children): - bpy.data.collections.remove(child, do_unlink=True) + try: + bpy.data.collections.remove(child, do_unlink=True) + except: + pass # Remove the IfcProject collections themselves for collection in collections_to_remove: - bpy.data.collections.remove(collection, do_unlink=True) + try: + bpy.data.collections.remove(collection, do_unlink=True) + except: + pass # Remove IFC-related data remove_ifc_collections() +# Note: Scene-level BIM properties are saved with the metadata.blend file but will be +# overwritten when the IFC is loaded. Screen-level properties (BIMTabProperties, +# BIMPanelProperties, BIMAreaProperties) preserve UI customization settings. + # Save the metadata file bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') """ @@ -301,7 +334,15 @@ bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') temp_path, '--background', '--python', script_path - ], capture_output=True) + ], capture_output=True, text=True) + + # Print the output from the background process (includes debug info) + if result.stdout: + print("\n=== Background Blender Output ===") + print(result.stdout) + if result.stderr: + print("\n=== Background Blender Errors ===") + print(result.stderr) try: os.remove(temp_path) From 5dab742623ec2a04c77c381dca27b8356a1273ff Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 17 Dec 2025 12:01:16 +0100 Subject: [PATCH 398/657] Remove documentation files: restore original state - Removed interface.rst (was added in this PR) - Removed all PNG documentation images that were added in this PR: - bonsai_customization1.png - bonsai_customization2.png - bonsai_interface.png - bonsai_interface2.png - bookmarks.png - gear_tabs.png These files were not present in the upstream v0.8.0 branch and have been removed to restore the original documentation state. --- .../images/bonsai_customization1.png | Bin 1588584 -> 0 bytes .../images/bonsai_customization2.png | Bin 1723728 -> 0 bytes .../reference/images/bonsai_interface.png | Bin 946257 -> 0 bytes .../reference/images/bonsai_interface2.png | Bin 958977 -> 0 bytes .../docs/reference/images/bookmarks.png | Bin 359492 -> 0 bytes .../docs/reference/images/gear_tabs.png | Bin 140972 -> 0 bytes src/bonsai/docs/reference/interface.rst | 83 ------------------ 7 files changed, 83 deletions(-) delete mode 100644 src/bonsai/docs/reference/images/bonsai_customization1.png delete mode 100644 src/bonsai/docs/reference/images/bonsai_customization2.png delete mode 100644 src/bonsai/docs/reference/images/bonsai_interface.png delete mode 100644 src/bonsai/docs/reference/images/bonsai_interface2.png delete mode 100644 src/bonsai/docs/reference/images/bookmarks.png delete mode 100644 src/bonsai/docs/reference/images/gear_tabs.png delete mode 100644 src/bonsai/docs/reference/interface.rst diff --git a/src/bonsai/docs/reference/images/bonsai_customization1.png b/src/bonsai/docs/reference/images/bonsai_customization1.png deleted file mode 100644 index bdc1bca9a30bd251042580b65216b808dfb408ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588584 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 HcyR~7?HTA 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

AR^@ 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 z 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

6pY4&Epr_E-Hmri( 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 z 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
XaN(Fz>S!|I$QKZaui;1-L4&g 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úi@KKc); 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 z%0D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≷Ixf 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 z z<>+pB7M6_nHD@28pkjkUVcDwLp6R?@dtZ3Wz0v~=t&Dr_`qa3;j@|g+^jMUyp|RQW z$D@*at%MJF*^)*Hk4fh!+<< z#_P%gg0QN^rzVi|#v6Jbtt~XjXxT_=D}QrTou1`(Rs!b!2DbqQ(~>7~Fk2L2Xtm7p zK!PpCpjy_5IKG``f6E?{d^SZ@P-Q%eX`)7daZryW))MNZm#SOiCUCC|yC(62kBW42 zdz)b>06P>_+)cAsZID3hf5+KpI-1%5&3W;JP3w7C32)n?0Kt3V1j4L7`ZC208g3F7 zEJ`~okY5I=7MxtaU+0TfoNP}mFyzy3-4JF7D~9qF*VF`oba1W>L3i(^h#7B$^J)5} z03y~jzykP(s0Zt;uQr3A8Qsfz;M<*gAm+AbGIE+kK1bI_y!K84R0{AIgJJ<*biNMb z#gA_eU1}HUEf&G-@FY=HmqKX*bf1!0dR96yx;K}4ny03wKq)Xv+})jz*rYLXN(>3P zwYj+oZjf(~;9U;t4cN2j=$a(DRE7Tau05Kao&CG}-Ws$L7Fg{gFH=ZCTQJ%k<>AU3 zdgYKIM1Fi~s=2R^oGR#A#xN)N{NRU*%F1GJpH36sRF0i}AR&l8%8H1#w+)>IZzUlT zG?K_AO^A+nGX05d4BH|Bbj!A`wDcR$6h-$6J_T3k_0YNlj4r~gOUhW zkQB44rywxIBF?E+JkU*0@caI=E?@;D`t?$R!E>i^no#ud|6Ggaz6s{=ml9Who89En~O)a_Od@hEu-2*Vo zAtq9<5LlErM(f6OAF}s<-o52R>8!dbjyyRN{$XqCP-hs17^Tj&q>4!I?}Lvh>`Rzx z)IIaDt%d*OPe%O^*Q%K-p)ORb^Q3o@{oZ=dL7h_XZv5f>1n|g=Y47WF*i1R^l~x-f z)O@CV?@xt0*w|3)pVT5{AS=S?N+~0|iEgSLq4M7$e+%{k`Pp%v;mPX~?RSKK$hf6* zx#$@=PH_LzpHW3{-i~jMdQ^bIz!}$+q-bS}-Q?OQ%a4jIxSCcxB>0s27U3EF9#6Z> zNx4V+Wdt%1S`)#ix0UXVEacMIl9!)A+W&Z`xbL2hP`z_iBC<#Ml?eaXjE}(VE_rf*+;th-Hd5@^9tdSclAFSM6KIo3qqNOcLDYt3i0 zbh=p%fAuDI=9i()$*d_qGH%LFvA81N*Cx1o?{m8mmDom7zB7f@Mvzm3K)Fd@4(8KC z*jb*kNXXx1d$HGsg8~&ZRyxwU!6%!eV;>*Ns_ZN2SRNlq9+aMaQj$@xPJEexd|h2&d?xHQAY-|G zqxJVjV>RS*Oa#olPEq9!rS6+ zRvgNCS6CY!I9;mviGzmDrUrry$MA9lQK)RC`wUxrcZ3;ocHhN!T3`sRT@`>At`n`g z<#HP>o;#Z{;d9k4k1+qHP!%pVum{q09TDbI{y8^tUuHMY$1HDG{aJbN^XJ9%Qzr&0@a&qs)D86G zxQ(wQJ_qhBrdZQ7E(iy|)3A&(Z;7Rapk!@nHS4wC{>Wm~r^R5*a#+YJ6Re}HH0-;) zf$Qz|OzJECV8|p9lqvb89c2$Sw@IKDvRV7Ppf2!l&z#KfM$ngp=jd+6V!M@~RVju? zFjz1}^Pt@zxstfB0rk@0=HVow zdpE1T8)uOeOn(Rp@O)*h-_wA;_451CG8Hgxk>kyIZ7LYcll}8gJxwW^E4KGplK{hX;*5yhjqmeVh<4$cI0Ltn)Nzb{vOC=W`-P8PP@mJ5dh$?&=gDGswDI`v)whs#X zIo3k`)iptbiZ^uYG4}N6dDL?oOum&ssg0%P7g&zKy+vB_K9w6~Z$+rqI2AoPH0elV zK2g;1lP-txS$=FU>Wxq5YJ++ZWWRlm}mWd_6Qj-jYAMz*Xv+Va4Nf3b(CvPp$sjnF6P#gDa#!$=p&7JV}3X& zNo3TA4gYrN;N@h07*e?H@QZ+|i_u{64Wr3zbfwNy?PZFD{n&2Su5~*0{=OooUNVmw z)}*RS(SqkAKGd8WtxknFtHiVLu8;ATQ@5>UpX${)qQ)l4s^T$@y+hcCfloQ+$6`-m zV~hZj19c{vRc;%Jp;$iU@)^{pNuiQ@LF(q&EGX-x?LDatvDCpW-HTE zp5XiMA2_CM$XYk<@5v=oY?M3I%@E6+{>s}OsJm5jQFMAz7JL4Qbmc-ExzY8J@2+uj z3f&*-t>3z@`7aFG<@f6i5#(#MR-pT>JD$o+kim+pCW`wdCelNz?M=7bp|Lgfx|aoW zlA!>U0aXL+V)eIJ(GS$MjC!g_X8iMg+qe`fRSI?Qwf?mj?{9&!A276)c+HtaLyPxx z>-di(o#{AS)`Z%0qa`=iO!~hWo936mhV6cabN;{Q`1e@v{!h=HOhbD^=2s&A@5eV{ zZE?L@;Z~u?4BB?S$*&8W&et&i@*C^o+K&eml<~I*;vYF?S&=e%4G_^84pYsp33>Uy zdrLKQraSbCkywH2TUY9L$$GWrbzidgq$h_2IqOwbmKpw0e0M9UijGazo6Q0SsyM`^ zH(IgThE}FWovBNu6{ru3ZKi_t{ZzD&(*vjDoIMD{^OX}CW>vGk7oU9-p;L5?CaT#~ zaIV4H;5NIgx?3F55ekJFcWP%_j=hSB8mKil{fihkmfS$4*Lg19RsI3fD6V5eG6mmK zCRvGZ#Xcg6HqGjTK2O^_Cxrk_X{jy8r9IlKG% z`rf(R(chf%>-7{?(y_JKXD*u6Xq)U=31fms5%vD8s2FH7D~@B)rWN3A>Ez*pOF>SSZRLm+ zgRZ7OQzF_TEB6bEJzL(72JE7QiS=mL%M+lL*}d8#1~p`ITo((y$ozcP(lrD=9D;xsUT;DYPnb=uRThYJjMWmQ{D$&-GaUNiT^dv2(%CWj937SZ#I zoHLE~k1WjC-8o{$HGV$LXLCNbM3*s>AHiM<^q_|?iiO=D4Y18~B-MM;8?I#H>Dlc6Mk!Aupl$kCI>FU5=<(GqQ!|57p<1h4{9bh&gvc)g0{=3>V8Wp5*gR}L@io)++_uaCfy0Hmr zGr2c#VEO&#EwL2mjnDPXP;Z4C)qx7vX757QtEVRGL2n)k@<~CUE##8_awU>LwLQ*TQZjSxH>CrO5heyQMNI5G!8}r(KDY|s*w>MJ~Kz}Eu7+~ro*`fmC0u;i31sFkRurY4t|_uvyds>dXEP|@bQjU?5sLJu=gB-)T z{q^cJyQZC?GQyxi`S{o#j4)}AY0EA9f$?wVDLtDZb%7+_& ziK27@7MLJ8me*Tcv~9SRDMyNbTd3(+jkOyl$}Dz_&JR$dK9{PK+qM2ytK@=czC_-Z zvM*v?w6wM^m@%@j4mJpS=GW$Szc{PQHWcvd;Uhqa9dpY$`CVnjd*RNUdUfluBQ`dB!+o9ltG!_SLn(X2vo)G^)7EV{bngUGMAmQ^mu z>nf|7*oPLS1LEHihjb|z525#7(9LsWvfXMfz=stAU50x5$A>lzjaQy(;$ZYoLS6Z- z?!YgzV1g-d!M&9gwzkFHjYeYw=C+Sfrqxh(zKorA@j3BEsoG(`97%J@+~NI3@v9%Y zhFmUOLeQ?y4NnTX8HL86@boeW1XqJ>+t4vH$Sbs%%|zJyeE2!7w!_d;&QA=Dz62T@ zfF+JkOh8JbyRB<8F7%6w?aI@#SuZxQw@zOClMWf5o^BZ%8{0rVXl9=J?^J`m=80A2 zF{9Q9RwL(CV%O{AXRmpil>T1}``^UOa{T@9ukfEsmX|@rn~e`CV6VT}($kq22i3i$ zlquqEvXOCoLx_AyK=JCJL4hJ49@WjzR{4Nh`Caj~33r-QoD-9>{xQjYZR>LhiYA>t zZU0~FK8~yJF!|luA>ohxpL~0-Z&l+k78wY3^A6l zBl4Hn&}7%moYPjfPicEOL(Hp}usb59fn_{s}h86#!3rqs!cm`uG3x?;b zt@9vFu`9@ewpLTY=vEwaQGp91meZNx=L72KY!!BsTzyK2rtB(9SO0=!-~5OJ7$3Yc zR2Xi4g=Jfe!55qQ$BAAUi0qjGtd8s6sC8q!azaN0i7@sZBu{$MRaw%EyIOp->U-b^ zuM-Vvk+KkuD~lbhLEQdTN1R{E=&5QRQX9>N9V+0gll{7#y&Xe>_%T|Qzog-oEBjj` zEhw5}lcDKuw=X7FPaB@)8hsvjdz2w-9^IQa__O${1!tErw&-{fO_%2(sY zRnV?7qN=nzUq~9;1J|-fj~@k=CU@e8;{?qqW7Wn$By3j+!+gcYY3^9tTam-gR1WdS zmu)YchRb<@4=FXnoUH=%8W4*>gWymdlHEOuVffZ|nds(33jC~R$GNZE*Z zs5QQ8h)QSG^N8#P);EiGd6h0@)!(V_&Xf#e?Uk~9g^RjRd3ILFu0QGCIZJ{*y%TSfPvo%$7V`{CUR-cCOx}lhpm1e^;XmesEX?~d z^NII%7&%w-w&&Mf^E6xtK(VR5Ky>>Ut6=4q1602W{)GR}WykWDIMrP=C86NmQoJ1j z@7ch&o1tkD#v9hg{IO`cqIdr`A78a#VioC+rg7Dl*qFrbKWV|ihQARg=V?MV$IGv^ zPs-i+$P~ulh@MyY49R(KT3Vt_Prk7V>*y;k8TTEEdc{g@`61*`!Mc9m%gdSK;QpcQ zb3L*ZTIyKoAI7DD_vQjwdj-70UCLaM5mz24xc|(#CTuX?ORcPORdq|Zk|dH=MB|CKou+TvDoRGjF$h07!_ z%gRB6BlC?xaohNYhvagk^5W#^d~0;O)!@5fzK-WnWBxNc`w|ioiB#Lw#=TS~X!&|x zjzJ{+3xAApN4}KL!SWs6B*zIA2O9&3rp&5wovtx-Uudds5(iUq({e(ZN)-+04L@(f zXeMMohicuD`#wCKd(x-yHjlZ#qBHy*8gYY+x~*T_8P<}DE*#-5kt11jo{luLR~LMjKi`* zv>(=_hnFQ-yVolFJu;zqF?DZ*^>>cc+e*HU38%k%95*2no4B9!Okf5oz{H0J+0;9? z#)my3cwc^T4aanWd%rj-cel);f$B|;=-dJRd7M?*RsTSbsS$7MSzdiEs61Q=-i&)O}<%?#tYRdTmCUdr~aYX zOC6DwKP5a8TYB_Frka;&KJdMtiKSXAKG!g6ledxUVfE9D@ugp#X5cL5$gjNud=RKZ zg#|^f;)U*x;Zqi61MU0}nDMQKNw-g2$-&nE6(LoRminRqe08-Q(m-PC|ezgN*b%C{2gP8Ea7nC@B@FNax`1l{~YIA+xb(z!mWszMOrxzo=LWL8_ z_ug-Z)EOEie9GI!xZmoHbOH~vhflANsD?siRB?vIHcb(EfCE>NYSXF>j?PC0zD}dT zmTU9BZK6DuBap}=%PuVM1iZ&gp67>H@*E2A)w?o0 zjmd-ZUFJu$#)>42=jZcqejsI&J=(yf)R115|9fvBUEHAKbB}Kbl3Z+JYIhQR_r6o& zboxvj7Jgt{&*6T7iM?p_q&QrIk`iiQU+Ub-dZ>&-B|PX69hY4$-BWRK$FnYKXoxfUnmj@V148 zp!xnvHA~jg%xLrH8fj(qI}UywFCe9<6t5&i!wJ_8dD{I_Io@K={#G4L^c1j8ja$Ji z0<_Fr>^9*Kj#gRuq@J}d6N`Ke&GeOWv>-i1>6KKCvPN6i>T-6^zaD%`eK#LWF!q;1 za@5ATv<|Odi%fQJQ{0-c(tVlC8E70*HLG1&G3VvnMa=)KoEBD7=>OvT6NWH>L{)+0 z{^Gj2I`JY+dzSsXsswZ zcD1B8e^vi?d>VdudU~phwJh`@l<$Y%YOSgf8j6-ceS`6zpC%eG62z1$$4T1~AMs6> z5A`lAv<8(IoB$r?$Nw{ewGDo~`^9L-ms&JHxZv9mz+Ui?T(SW(+^We^As}hCoJhA} zW~S2Om;`M(7!l;z>?_tab+psU9>hTAq;Whao-%|{R@t#2lHhw@n-$TTnQ#s@faG{) zpqX2L73w9gmk#Kd?w!1ezHDoG8LWEthxfX&%3h#f(Ai3fE@P_-Pg%a~alXv(+5No- zRF5gF*bnbpAjInvHDk0S96?mk+UsNTM^c+68ge9K%nx`o zFoH3j#RhUwcD>jUIi#tRSKr;-A3H`HX%q%?5944>#%1-ZR@7fhL;H_6+t84ylev=N z+cPzs;8w%L2^(YAr6kH(pFxJS^Q>hfz4OVXl6Tivx>z}v#;OCbTsmTfH)Whl#hqs4 zDnffI9CEvTavhZgd~Cp2BEAi}{dbprA4^rSj5&_9;;V$c;uIDIWOu$fC9|{HoOovR z`&#K|<$35f*it+w`aZyYgV=Ju4GhlJLX1=4JBTn3f4*$Y7?v z#yyJ`6jNs)pppRsl*NoFFor`0Mxxio+N{US;Cm=>=S7b=LI0nub5C}Ws|Y7Y3;1?w z;_Hfh{Uy{r9XR2P(|V}iWOnE!?%*>_WaT%PuSIMT_Kj!5mp;N5o~v`(9NqSET^6!S zc@`q4R|tmDSi22~1P%RE^R^c3xfAMYX=c{|(wSsiZP;vbZH#KtPjKXBDWCDy^}N+6 z_^YLYlwzy%%4}<^P5I>Y1;Q(VdNT(M1-U||d9_Lxw@z$=t}IWNR?5ue`KGGJphy0R zKmA!^?uv^H%I8pj5t{kZjJ3nPqm42R*mbRi$G*8X%K9&1RINsr;=bC|fb%h*gta5! zrRsKg@_%5wEaGkboj+^qWZPZ@dRxhm{|k9&8-A!nfY*4{R(!G%DL;JiSvcW5o0%XP z1Tf^=W)}L|DXR|L+8Q@DX7JSC`!SlCqyFV-*7Kv=xoVn$(f%;4d&I4g?r}4$JfFHv zGuixT3YvvIRC4vB6LCCydlQPLJL?(5mf3TqS{s<)UE&Rf60PJ`GbzoKkTkuS$zxsW z?_@^5CV2i=G5Yf;-SKcAa>a+-CgRO{D0bPKdYRrWSR zl^`EVFJ>n_0Oc@*7K{yfpTx+{W(d4<}L5Uj`EuJoNPwH zC6a7iSa({@CvO>n=a7--)|iAwDYJ2h-7? z18P>4j1Ivv#P;v1v5T^62(87M?EZhg<&j;+=R+bC<1)yMoe9oE$v+!+hg8lFvnD%* zRtlb{`cVt(j)jQDCgPYICr$~Ht=}T*-v=N7PX!FU0S^ibS?#JIG1YIks~o&XI_+ zDJgqpJLWNSj9`|uu@LMrhXqg$S zd`{flxd)@(r#zWfTv-*Lhy=9qQUY}@-<((|;sTzs(%~1kMxciFu)m_QTckFeuM> zZHI`-rVL39wx#KG5;>^Xj?+wU6i_-P-~&*KE6e0R`p%cChFqk#-X5nX2d6N+ZRAN9 z1#TG)qbXpR7wu#QK=sG1*^%RK18ZFFanhYcpSwQxu^R0n=J7ptsqQxh;Xi@dEt4(x zoky-IMYhg}+E)--C#cQG6I!@Q_Y%99o!A))LUeGIwV3ATcV7DW+acEhQ#i|GiK}n_ zGvhA@k~6^*-Xs94S4>7AkWRXQC=P8ER z`OrTu2PtLkUNex~2ZLZUk^XA}23vK0LZhFl=g>YB@?-pE`7>^|cFOxJSsR(jFLsWP zu7r&zvSkGORTHU$_lD>xOfLwW_|hnqwuR3ySnuT3*Q@+q*vh3eo8+u)ukF)l;u65` z&C93pWhByC(sY-;)MjCryP9b12bE+0_8B!MXPu0S2Npsa1!nA9)jc7`j0o!uQ}|>q z>im`d4n zE|PF|hw|K8+D)XaF#EvqTed;RCtCzB|kvK7Iqlp*E(kdUd+^9bK7&(j< zw63k0SBMAP!#!D2Cno0t6`hT0p!E1-r&S1@gGhwyM9=#n-+TkDs_gwIkNc1yLslR% zrNACt?5j9sCv~qy|FRM}=Q=gik3sJpSF-ukzzA5k_}epVd4SGjiv6il>#c=%XxKuB zjGmE5YV~&i9&f_a%iJu+ch=6KHo2m+J8K!XpLNOPP4$aq0lBRYPN;?+e@E}P%lTW4 zzrB|nqnXJhD=Yhk-=n3_;O)s8tzX&A2PMmg;QfcT)C8uWoc^VJtEJUd7fxZpzoB;r z85VQ;YZ;ssnego*_u;?e<_1Grd8q8~dD88;&9UH>r<6oq(RNSfDLyi5=EgNHe45#) z#(S#Z7tBuKks}i2iCkevVt= zm#Y(OfL^k0^H}Uimv-M8)%Ts@u;pE40cRqb3Ap1nv!zsXL6(bG1$B&ALj1mlOd#hu z8}x!NCVY|_ZIF}I^ZP0bRlkgg=!yodaB*3!K#*m$3UYFCX79bf7{=w(hTNLBhKf$D zkEL&nd!MWCaTN{IQO$U)f9U~Ev(6PU*NEL=FF8p&hjr9aI_L7IxVX9=Z99ZX4ucKh zhlevviSZOeEe^R~%bx!+=K~n+M|Xx0lDKQ3h2=FhXZ2QA7SXNy%{V_g)`=LV5D{gV zjybrpMhrH0WJ18cbk3#wjKh2IRMKA|nOkbwe3jA*9r3S}c&O1KQLjS4W@xVww7&kO zpBgTtWgC1q71}S43|IFSHLeG6T4#f+)RF-L*d4NO|6$=^T`PaZC&%n z@=Ik&(C7`+w+;lrllqVZRu*quHl2(2i|~1!DMHrx1etTKN^AF?XFW{GBi8&)z(!|2rH)yLu_>P4E4yl=mr_t`(H0`aRO;9Og6w{TJeCXp>z_@jmKCPq(N3YE}1}P z4*jl4|I9wM8IxX`C#V@`YZ~D_UXumgYYCRlet!|%IlMExH{Ik| z_ZijCCJmX{)aigN;42qBVY%#{p%R709)_tWmcqqhX^Wg(w)%e;2*YU6Q1z_Ixy`9| z5|YKCZeFq3P+DW8LMs8nt)#j?1iOzMeSh?VMlB8sgZ;HgC59&s4g?1J2kGg}E zFD&76!i1^HK4o-?fkz`D>ZgxYWYGdpJhEsWi67opk)oh}A5*E$7q+y=Ys=*GYIOf7 zn;|wMZ0!E&;xE@_HBWaVmN-ZzWQ0oEytq^0M~}~gosE%hwrH}LRU&a(3t;c#!d3A6WFeb^+mtcv88*L+!v9HZx`!M_eB0-p}>a1A!g;W4G)el$+ZZcQ4Z zL`^QWk!;mT0#>4}#gok*xTfZi8`VcsG@YFMHm!&u7t<4u9q`vTGu?kE02IE+Ldah*>cFLY@b94o7-8S#~S z&F%#oZvOKt-gr;$dNN5~Zd)U~verUnCqN$UHt@JdP3|3nznxJmSvvoQaq%YSTB3MXndpAn(y$?))c^!eJ8~i# z8LArKI61-IU9GsDMT;wIlI-#qI}&O^99Yer3leXHH(kRsRYXiz zp$%xXc{YyG8Z~Anrx8!uOF$sT#>YwU$%jTcTz8Bd>J&ZSy_?Bsn#3+#jJNqr&4KZ(E-1YA z=%UO?sSn)vsPbFVd3qXYyy7R~M{mXshqcyl-(M4QX0M=iXEo}ZINY1=K50_JTdOm% z7Qpc2q_mRRNscB0eFOiv+JU>2A>@avInw?^C^G5U2KI+&sA-maT{i5M60>!U-0gdj ze5#RU;-%%~0XXgtObTI2zqUlK|q_m4Wx`_;b|*? z4K@!4!CG-vWwR3#Hm({8m*b1_TUz8qD7xmUe8-0)e}fy~w%;p>zBY!7!zG3}XudkH za-X}ECFQPvTxmFs6?;Zx(vQbktt+MjrJq334$A9uPGOSa-V`dOd)^GTcI<<)=B z-2YMJm+CpvBPY@{9OVvr9s(Y0#@LkBd?)%mNGDEaXDtF8O)lSxID{m3EQ<hZ)QT^N^uEQENr44hf zH(oDKNVApy+CM?3Ro)D>XEg)wy#Ut?nCi8==J}P2cbepkXFdu?z%?q#mv=>We7KzB z@^9TKCYJO4-PEH9{N&GC5w`^9OhsAa7Hv)qp~XvHwaW>$ z<>fO-+vFdAZn*w21)$n0={$(i^&;1yb025m$5^x6=;1 ziwc}d>jowO_vGG-HsGuxiI-O`2xy$iL%Rv;Ae;VEfT#{Qq|E?hZ~=8v^(xZw-+Fn~WYEV>Cy%DeMYfJzH4@&3u&a{Gn!Ww_b|Bm@BQp4?y`IO?r$|gpN z5PFV;hK@hM_wX#@+ocz{CeLZ7Qa?kCL0}H)kg?#~jz~uuD+?d%H!_385~6_!*R0}u zq;N}CK7M9!+}gJDEgmkNpguom2C2FaRV=_}W)EgZa{CN(nA>Ig?T59HQ#E;jY(3D5 z=Ls>9!v9EHQ&_GnTQ54lHzK>QEM#EYj7Jl2k`fkO`!F7=!NbKi?FLK_k40Sx zKHvp$yVrk;JH5qYIu2fF;be(-BKhW)ewkv|;7hqw1q~&Ylt)6dU-elf4@Z)oh{;4{7FTZgrXG1xYxrWxQmgOW+-B5K2&8n zb38g^<@L*txUGG^!40#&R^`L*HolHAznf1+1JAp5&+lqOy6*@6AzMAgs+PqZ#pdPK zAB`F0bS1GnQdV^}N97EMBl=}}^8%PSs0v*Z6U(6YL1+P^SNF8_+?HNED$l{2>1b39 z`Gm{^x1pf_6v&>*lccEBIE1Mi9vyG^PMuSI)cXSJlaL`g*0iXI{dQ+}z`NFOPe*rR zK!#)H)rXn~e+55V?s*j?TB#XME^R$fG3AR#nWo-2z-aWZR>C1t2%81$k|BeMKrStx zY5IQfqOT1A3V+qlF&Ag6_S^TEAr5TlH5jCQU%TRbORc?4y_I*X+oMKzLWaQVeV{ls zv?e+d3VoncjXB&v*Zhn#%kREi0AK-1rEwatm5r)fyMVL-&{xb3e!_1aCqv)&LbZhe z0Yvp`E%9a@6TWZlObJ$dpnHSD@gGSl@FVEof_np~=(#;WN!v%b=#tCfRch{~O);cr z#TJNLL#{REs2;yO6A4@JD4*9txJ@?#Q>^qi-B_j-*n?|fZlr*Bw4e;D-;TzOW*n{O zbqe^xlxyD{VB<8xa7Fb`kWpa`E&hiS_!e(ML+lGb?95i_KvppptI4!!fl3wjl!$Ni zQkA@{`WMf>klus&7=We0nYcBx^kLS5rUX2f_L>eNZ#@b)7{3nQtWe2yxxDju@Z(lc zToF;epkq=G*(y_fey~Xj)e>uYc-^apag%3Wvr7Wp^HLjO?EiSgB=)3znvs|@5YgP2 zhs+V{*j(;k5tGBOiszS86(A-uQF$v1n-0P^;4-q(2YJfsa3Ktqn`;4!k?36wV0v|{ zqyJ0V_=PV=4v<@3QUq2%tTo;n)|ccuZt*>}JAF6h6^&Zp!JV*b>*oBtHJsXJ^@l8H zT>o4=dMpoT5!9YxPf?Kc+l37YsI;}2F^bHf<0oy9ORmy9&lCNkB+M~nET<=eo+saK zaIRBwIu_f5mo{IR%vKcJxUd-IMC?qg?Rh@q_hIr1WD z^)G_^hA5Q`!f)682xxu}#Scj$C(1otzXMXKSz&0o;c7T0b^fQM(r42LJAWJR`jz4r z#=3orD&1{>K(_6fV_S<|os*pa>=kY=M0j7%@|O;jkeei1*et{Li=-NRMz^cF-)N(L zai8PfDXzLcK4$=^D(jku&pVD9v^zZIg}pY6;rwTj*i~uj94GV9gps9=ctbR z$X&9*kX>rC|KD>Iy2w{jxOmo@9{?bR5lBoxpFYLO~Q#y;i) zj>owSbv5?1@+BHD_b&y}2JnjAttEDWqgeAHM{hZz(&rFVrhg7kT?L;*$#}j3NDukV zT`fW?W(7K74_Wb*7*levs9EbiT#!VSG9eywyKqUZ;N-rFLo=C z?T{K(mziZ6N4aEfY%8l3nCaTtl4e?}MK0|52snPt%;!MJyyUh1B?a-UEmr;-;L1+u zN+k5KTOkk1p!!ujr5vt9t##N1qiG&mtL1}muqWke%}+Lqnr&mB6=lVTMx_N-xA5$G z+tBk}DtUeu4zzIE7cPB0>q-*to*$+`9k7pyilECn=x5UP1^3Z;$M=TB43;rsGmSgr zh}8I&!%EmcS9%S^C^ z8##t`qZnF7%`1rJHm`L+?^N zUUB@`mPaNR*!Qfq=b<<~)9uOVw3-lK<$N8j6vcyPg2CM1gq+SFSAkOaYfN3CI`vY8 zNYBuFw6DFN!Xwo>@{?8+ClUE+Vx=CYU^(4XJ`Z3EJa!gSdDPioRcbzZkmWlz?QrT3 zl2=Z2ZgTxGQ}ekU)O#p1;f1>Hb)4bLdD9@ZriBV=_a3ccBIS#IT)hpw>i?rkyz|aS zsn(_xLU#@yBdxFi8p;I99*i+cFo{=<*_tB0^v@y_!e_tw1MHZDA>Er!Ae zeCmtn6aZ42q9I1rg?x^L4H{4E^}Qe2Y)D>i7%Uw`iZlab`WD&4XZ^Yf=6ikQvAAuO zA{0H;jl0mg^5?sby!-S+=y9-(oWp+#+)=yc>c7}h&(nC`0-Ox?vNd&YB`OB(pGv$~DWK>ViR$Q`ZOC{mXEd2^e%UAC z`XgSmz6wH#j!#7cA<`&xZIksqk-Rs%6zDY*YY|qfz6spXj}UlobD!Exhe>ZM|7_*( z*3A2RgBit!0hz9_#FlpkDOk@tQ)|qCWaK`aeYBQJ&3UJsdgJKG@S$A1@*76|{ey%~ zzs;;R73tmbgZ){Bo5_}9QEXQa6{&8e-*``F@%uNLQCxn(QVcHlHTrlU_{+om-DR!> zUvsUQPa>u`S_JH$`+3@F`#gE85o!4~pGReR8PE2kXDOr3CGOa7zdXtXz>MACu`Y?*!ys>dmtiFC^UPIsSj0w8rKcZ{&y&nZ6nwtnb6V7rqKxcN zU2jy4MSHBDsOe;HO<3~~|M9_azwStY{1D1i6Z2kJfMJ};VlG|ka41z8;BJcSV3RPZ zt8tVr#~f=Ekq@bx4dcgwRt#ec!%wn&7>pv8pm}3C!#47$^pnS%XRqD;T@0I^J~oEg z%8!Zh(s5D#80vCKGV=#au7jnn0FTAM}QrA5(Z!6Dp?~>BUPyR8OPKj{%_K z_BY+z|8O{xpQhZH+N-u7U+xb%K3J*bD&X_?uDKXNwE!5ijCYWC)A`7YPrP}e0#s%^ zn$w^YM9<=sn%-_AFw=)jr*2h`FJu*M%i$9*I5+#=#J2bVz3}m`uCA^jAv+5Be`p*v z=l_@fPNSzt;rPF!eoM?xqw5sx8Ucx}*lYf4YsV_er~5svXK_#ec*5YZyD|Vheg-fe z5Ol#E?+ylU+Lt!;oUHUrGT7^Biv5p?8^@EU$JJZiN*h3IFkh7NrdHYc zC`p=zF_tQgD`-krWU;Vy*3ApWf(EaiGQCr{h-{xxbMng%eT>{KmtE0G8CY+>^I6&S zhQuGJ$JZ|cvQIibQHnqPd#*?d`(*wrW9;B0Jm`X7j@eb=o+VEifPS1EaMDL&F>Xx83_lcE6C89PN}0^EH;j z{inr7Ip&G)JqT1`_-E9+pks>#5VP%D7f)T9S5h6BH96?hTvTQ5WH(c~OiI`Qfjq_= ztGOmJ(0XWYEGK;2(!hMj4@#3<1>U@}(-3geCpXgoCuv{Ov*8YGWSu41s2NP2_ymg{ zNQM@?UkADm4RMGIf>pM4nY}~Wq-2*f^s5ssS6<%-939 zwl2>k3R<6xnEhDVyT|XEuaAhhI3Pk@6(=H7sJsiRLZgZdDOz0#jqO~Be=L$9fJKt) zyLwW_K{>j!{n*9W<2KnkG~*QACYh^Dc+eMTOJlb3y@Tm9^?i|tyM`x1)}G4I!D9qA zMUbSA{rui%g$nJIf!s`6DTQoG?$o(Ek>T74=P#M9G%uT(r3{oDIKyCtGy&RwXpg-v zMfTYD6?#?-_QXM!7xAVk18K@=-_Wy}%82FcKZ`L4B{mZn_dh{X+tKB4oItZeU|h(Vy+m^udtmB}%Hy_>+^cx$ifd~yExlRng#$~AFJ_vO|F}a2;oCDITA_ z3l@09d#v=907|e-`8)$*SO#E!?Wov#^P@SSyQ@xX{w=l@M=R-TlmcpLWt}`isU&g7 zHZ@!4zK4}=?zP|v#V!F^x3WXJRTV+%t>*a~eFB2@DfKT*&Mh02nrZP;gxKpl51TwQ ziU&F<3!W#p>$pm^;y2y8`n@0IgQJXiJ6w*uRCOo3R2~@!endM2+3$dRDqSrNo}L{6bK_9K z$MwwYIF+As)SCA-#Vpps)MxF$or`PyLk?rKp*yM3{>(!za9CTtxE)8Cv*^W3ss6jq zaAh#fN{lR&E6{lk5SnO`>A~bcJ!A!aXomblw5xA@FN2|;{=jOM`Ybna3gl5o@}U_G zfUcRIL_YA)jfY}3UXLy94YW%ios@~2k=fKo!yW6e8+kLCV)lS@{eTl!AaXPcI`nn5 z?LL_&NTIbr8BprP13_BdQMCrle;OmJ>d7;NaK%0p@PY&O*3NU8|2hRsVJ#P?fMhDP zV9c4Y-^rY-7DdPUPwt?-{{pU#KUMdrPbtn)0EZ^F zg5`dkI|~*_PCW%Ou|D*mcFUogVE^Nt*Z8`L_gpU3=T2u+k3IkjFc+D;@&5aspLi$Qf4 z$ifEs8}9qL$MjZXQ(+_gbrm<$b?5rXxlxtvcb#V+gP%@WnGL_=O1xUvTaW%By}37k z>H0Xpg&HL9u{1wOFJpe?qapIexW+e0;QkHu&Z?dbF#uLld&83$$a6 zj;dxUONTbRZVOF{Ji>9?OSPK4aJS#XL_+RI<-Bx-555i{KD{_c`?+TU&Q=0tJ*r61 ztC{FSkG$EJVE_!j+=ew5H{Bm$4;0(fr5Ouc3Uz`mT(adg;mQ`O%#K!lIQG=n1bANF zmwleVC24;;C=oNQM{o1d$6XBw{3;b%Etv=66Sf9fwg#J~VDW|ge8PSx0`=FxubD&y zf2A~gN2auFk`1mQ&(Rs;<;PIRuK9WyEB3;m!nfLm>+_t6y#Ss^l8@?Fa-ebGrZ`)e zQ1X2Ua=<~g`x;R3+Gk(V#%3zy+|jJ{5+clhV_Z~EYJ9Tb$Q8ItEw4M4sme#S>1y=! zle7AkGSg4z8zucJBmrBIFP#o$t9`pGkI2u} zh%zVZSi`v*k2!7UKj(k$tq!W3Y_{C5Ghy08u;bttvt^xV5-@Ka~MaO>BT`|Enr zh5HB;qw2w(e42(YpEJ2gVAlBeQ-UsZ!chm2Y-acPgD9v&0we_tuJD^P)QFchMH=y~ zw>L_=N0{M5hS17(4B>=ugK;7;y+Gx6zQA?wb5JR>-&Q#4ghM}8^ToK(b*uN$J^3g! z2eC6m!f#e~ho9()uDKmYH<$yS!D|}T+>+W-GH&(b+J}WVvrJj=={-{yc3r{*3kcQv zaW2MJqYeG_nYL=P%TSCEbyRoDSLTj`3tRWXlr7d9=xGTx;fe(PpWwFVm)?q9azHCX zoO7v+{iIqc8xradBBfIehh^9n zPgQ7>W3QcWOt=4i;06AZjRA9UmAy4m%5mpWdCK(T;NDyH<{Y#&AxD`LqGuOo;GB|I z#=lj;+-ec68dRTqey#l;-+|x2cZl}lUT==^{9${h7Ic;$?nb?;yZMgb(2{A8Uvhu zNM%-*{8z)Mu=d8LO(rx5mRoWNLw2)=);@nu{DknoD6h+re>Ft=5$`g#7nAar_)s(+ zAz@`z=KPAwqe!0R+rT?e*AZlg>VRae_z&s)%r@ti8Ct03g>K5mNHnO4gNySswY(@z zl`QQ@FS-Askf^LMwB`Ce{MCG*k|wXV{q8Rx`JEVeQ1J|4vA{xR0SSg_?x7@FW)$G0 z@cOPuQ&2np;=e;aTcaIC;5OvWS|&>maIM!R+)*bk9LU~*2rt-|n%Ak$LXYa!l&n49 zW9cbukEYqp)_VTErTbUgHuDlVIv`+-v1LsW?W32s{!s;(ZH7`Pf74y3#jVqdcHR-& zkFN$Ci`KE^dIrE3jbQ>PO_hp^#*`%zie(SWu(Y|z_lAJBe%;IpVf1!Ypc}rQEFEMQ z*C}i;N#zFO^8k*_6}W-3AZ~|WVwe=h(opKgQWZ6ZIL}xk0)8#>o zSZ*l<3!FESWxu2_Z}Y24k~%>pyw#zcAIT{{=J3hm)kez6DyJeyoa5C@zq4~L=%G*W z_RDw%BQ`Vc+Lf<_9_#T8V?^xsNbf?<$}UtXX4fLuan2jAKJ>%Y+0psyCddq#TfEvR zEqkG4zF+g>L(ZB0QrUsY(h|_UhgCxZJirxA?*E*(O6V||S}l9FlH`PRa!NJjn?Cs6 z@+{T&74R-9p8UyiEVn42e4R?iirzQeS~nt<&~op2iN;&<>D42M2~Nbabl2_$hL4p= z#E?+w>yb{x4rxiQgQE)ifsljEB@Qm;gSS!qs{wBV>C@nT1V{CZ2)eH-FU@@H?v z9UVj7-KB57{&%ZS64tgA`FYj}*c^{9)NL*sT|c!1Yw2bggm{R>cwh~48Q^pMpwag* ztum4!LymE8h#Clt4|d*#0zK?{{5iWY+?fvdu7cvUs&+e4<0v4< z=XWg1%_gZG5PsGm7EVvA500%#2HFwAOZ%{vo~{?=59m$7)OyMf2guczf7V7fJC@(b zVn*p7>lgPliW5d+7n~gV{sM{xavLLxJ*>GS1cpxko$q+_+snH;0*(RtqigwP{Irh) zcFeE9!%20+0}kcU%ChuMjk2D>!~?Ws8+evKmCl5I&}atqo3R~&*7QKWC4{C@-38+xm}CKE(Lv4evaeSgRciS!epw^eV8xBC3>`` zgCUV>{7E}6B?P7qDhd=DJ7V&$mVwKcyl+nqThILIaVSsUWSlDv(%VTlM3*9TV@AQU z5NU@|WtOt^WT|_p9^B>^;S zuMWN7=bMItxL%=4OF7gZT^P$68i5UUA}czB2OfWH3s)jt8Qw`sFWDT}0P2-GIm1-- zSQ1*!zZH$9i~I1yTztr5570wAzjLmaLApAki$!r)_J(+$&cef~+j#>7Ser{0B6+&( zfiBv;>sW8Dv}qDBUlU3$wufn{zbEyL4YmF0L_RY zascDnT%*22yk)lhqglm#a;!thwdmr5!~@qsEDtT!^~w#q3n_ z@gfFrk)yD4bj*?CqmRH8D0!Hm`)UL*JTJ>@$?2si%Q&btN}G>!Go2})Z$^8;G&MCp z68JTHQYxXF3+_p`CSeVHIO+Wr8As9TlU|vw?>g~AC&jx@cmPV2+jP^Vvq(#TV7d3* z_COfs>I$i`o(6*D7Th-dPE*0#Y&o#bHW-|2|;m{;C_;G=PH67TB}xpU!fS zOlJ(g%q<_*3@ylm0pn1-wWpr5N(lGNe@V%WQ~TY3I7UB7-hJ^(2HpPv#}$fF%TS50 z|FU4$WCp~wKLr?gO{-L#*l(DIYU(}@8vUj^fzIXUOYPj;jGBLl)1VYD*aYw9dDbz05??HZg_)cTSLDX2d#CPZS$%=c$3 zSBPC_b93pdK(Xf)i`+IfZ{g$0Yl0n1f>fg+$&1#P3%y_P{CP1{T%aX~7`JaHn(Sv^ zz8TfxZFYew9#?bpS#k5O0ej-Uhu*l~Rkcak@+t3OU(r!Ii#Z3-qQ^wZSmd zSlfH%V@7&sWram3T%Ht2WMCNha}!E+;Sz@8?CY80bt8*SB2?Gh2W!X)bVo26) zzRgdYrX-!`-z7`Yq^435h4du+NLyH=)L%gIgW=f;A2NV=-1Ky3Zvu2evt>0}WX^p? zfp`>n#L)AcVU+S}r_6os{gHU%eUz{(o%G~+YU%Ib1bEaiCJMHoak$2!rBOjQavRZ| zhWZ@^tQ~sc2~uXQ2YHxhpGt=|bQEyGv+gmDg^}C*q%7GWQpW}};2-5Sy)F6WkSe8i zjpH8~%sGk;RKBcmLQBRx6zK$e<#swkHC|OVYuD|5rXw5Z-50FDb9{nYmpZB1vW8i+ z!=3N4`w=Wd<>+L!yQo5pn^ zGk+wS>s3AF-kQQMnaFw-{Y0WVqzU8WJOeK-kc><`rxWfLre-G`)?9p?9HNGDIR5PU zf#6h)n$x45*JA$uohV52ZRm^AGL7nuth8dZz-2)i7Lu9Kn*F zgY%f*r9JNC%pm&`N@N!s`cNFpsPUK zf?&$)=}Q#m`-}i5yH={;wC6vrw672Bm3e0pplFNao$n7VzMP#(;7Y=7C9m0ed&}*6 zSO1&Rp~))(-sk;w|({^*w$80#Rn^-O4R(Qs_Dt zCEN|ZXOg%f(<0bAZtRRP?>&HDwSPy99yN)ksV3!yOzvKH`(XWWzsS~D6XYQI+1R9q zg=Qaqllfa1#rMgACKpWA4lx}z&y^W%d$_50Q|T4f6t`M-HzR7;d4cXYoKWQI6!0Z7 zrssv^^m{^Y>^t=fvg|;EW*TIxL$D{eNj~s_k9R8sZHfj&ym=YphKEvg;W-cCZ6AgV zoJ->iI$=&KE*}xwOZ>FsCL$CCGPz+*FCM=E50~WkyYlRXj#}>nB}$_A=_KE;7wC6J zL_EUAYw2q&N7klW_>*ovwBIZEQ?+-?P12l--Dfn|yGm{VQEq(PuC%UxLHDt!18OCV zgLEsXB8awN#txbP835#kNKvCNA?_aG|T)6eK zpAhNkFE0I6gDkrn(xDO7Y>&BE%5zDEO{)=mxsyZL^|2f-UGpNqxM$+$-Yj>yPGa@zNx;e@O7K9dP+&0cwwFk1o5kld^pXV@$C9pea1tfP~F*iY#v0xv&MfHi7i zN~ch)esY)^K6Ee!%3L?Ubah+$0Mo%9+Z^ZWhp3P({1Zc#0(%Q=c3o?zrQ7f2#I{ZV z*HdQk1dx4YY|8YvNdF$y)LMrESFy&<7v5B>C1%9m~B@O1KZI3rhBse;LIz#+eS zpvO`mjAofB(G@oFcQWDaq=P4f#~RpGp3$lR{BC2n3WwY|0E%gMl0u*yZoi8H&HO%! zM=AKMNEeWklzo`-Hog*Pe+zW$t|Y9kbB^rys6PCEbaQu7Q2*nnV=6LhOQm$hQ?&;A zFRFP<>Z_xD)zgKIGi&iZ0v=nbIID+D`vpZU8>jvP%I=FF%O=IY){Z9t*BV~l+B!wm z4Mr=5g#vmRwdQBag)3VP190<4^{nW|5H#c6M{xRji?`1%{S?{+FgOzbXW{bQoh-!r zsNB5G^)vTedOC&RypKXAkS6uDfl{Zi?LCl$wReP(?YKSb=RS=+2a!8gE7{b;AfD01 z^!?v#+}?BeN^@Ihr%P{sYu*Hg5X!x%jL=?!dESduXn z-%nXYI1Kw&=2{e-6?LO{BKQ<=tk>d}>Cw->gHCl21z5G?#v;J}g|~$m6rXA(&E; zLMjo>Hx$1M0YF{%@mpKXsfJZ`<+S&15k^iE-t8~fURsl7N)ZD|x@CH)O&8)LwIc_7 zeZh5=JA;bX1H$k06$4Z1z_~Q&YE|=3$xUM|O`Yq)k6&rozdOjBuo}hW8?+AivZAG5 zX%9agQM<5vlSjtUJDCq+*V?8bo+2@}eS{@a{*xV4l%mh~Xm7wZ&RI#nE`tepPg&;-fJJp4hY!b8fGrIgX{1 zYH%^32k}f3&mprzG{lycntvB;&0TZJ0`7wMLr0Q4aq`fG))s{L+pBV2?wi@*&xy2W zBQs!DU4pZE>Mu))O}boon1^m<9SB<^d9E5Ro&+&lDYVw4k@dmRfeQFPQMH`$y{%Kyqz_b9>LMJ zajq*zd+jpueE7#dir)`@=KpU5UnP7(Rq|yJwnT!8pbkWoUCAlpO;|C!fo$I9` zx?`{T-UXSP1g#2OH(MH>pKA4H#Lsb*F8|-o7^$ySXdJ0ZloY^Ev0zME)ui#05m~zA5SnGi2mkSzQiD6=Z*38rTxvVKZpmhyuQi7;NVo)RQfef#- z`c(eNxUTz3^!@5CO7IMhl({9iATxODk)|&n!HcJ%rbsH*nMWx<^5AV1e`o;F3-6qt zNhn?B4bww4>ePc? zK{V|@)I-AZr8no0WJq5X%x zymNPD?aS+Ft5&!D(Zu@(Xi@?f++}93qEDKt;;MUcy=8Zo zZXt%T6a#hp{gQ9$?eMaI>eAu%mZViB6+XtfRa7V{YId$ah740z{T*!h&a2IgxadT( zp#I%|AGztunm_L!ANi%QRUW=X5CQs9z|TkU^ht}NqAaNp`oQ09y#Mw(!5b-o;H_xM%8+vm(#Q(YY_wcG31lo!)?NW z)oB+wS;?E8Jn65B+F4L6*Qr-Ww2b_@r|1H-OI*O^{V+<~s@3@bz zxfsZgn3~}`m8X~*=|Ra(>{eF&^~EmumRR$yQ%``8@Xe^>l|PG{Qr z(>~P$%`@|QhNA|CsT|aDj@wxVoa#yI>DQ;&)ctR%KcO~ToIik&}fs>;PT5_S)E2d|!q}Nh zS#)a~!D!(MkI3N!2!9S#*UW}7+ka)mf@vQ|gzug3BNM6owVnE1ByM_g{W9kH24k{F zl%D3E6`(S9~$e@ zmFbbSQhAU>1yswjqY@)|r< z_=yIRd^RSjLZ_G2oj&g=C3X$9$)@WUrX!=WebGZM0Jowo@|DhE!;Ox-gPm*sV+)ie zq3n|!gMCKi4eNc(GRh;Dz78w%mbsDy;@)v9I$ygfhZzL|;xsCD_T$H;@V?S`o2=zL za;my&??w5sYv0INQ_YstPTM+j+C_C|0vZY-ar|+gxi%`lU+5ej34~~TWRjdvYF@GT zr$R_BqB2%TMa7>1$-6gvaxR16BVftnS-X1gEWRz?_IVzxW1Fuwa~4VA$>3LFO%x%P zW~A(Lg_SLX;QCKE{UtjLf@*9QgI*H}2z*`8&oe@m=sAGi<&*@o3RNqM0-_&~H?LcA@%PAZ_0Qa%7$`%+MDiz!rz>{RO zDh840^!tfT2rWdBPhq69=dFcPbayn;ZOQ4>nMpTdA z{9QnDXH!J<@kaoQy&o$MQjMvHp8oVzV;;0X1>a-X>oCLKso4A9ZG6nec7V#*RJL<} zcoE+t3p8ME1r%Xj`?=i)X4E0T)%Xo ziEZ|q6O{}mqxbSVfE@y5V&zj$V;i{WkTz^o5&BLmj3HRPoF1#1A~owtFad;zclUB7Fo zy!HF;dl*F`eZXQv$mNXZfBB_!Z)KQ2E$90GsCw(DsQPGs7zGKDE@^?GySpTZ6p=0^ z1SF($Xcg&h925|wyOEFvX{C`a>8=5O-|^n(UH3hIu$F7h4Cf4d=|3X)%=caq13J#F1!4f+uEPNSK6AYIuIHu0mY)>KEcxX=b#9 z$dgZwPohitJ^lwF_G_0s24Z0mipz&=wI#UzlDTBJwlXNw#U@D_T>VU;-Hdmfv0dfs!>r_N1iQW@AC0sL;hMR^hS`=vhMBdc1d5fvC^&q zcB)T-@o#zgK}SQiF*kv=-kD~#99px4%|8n9_BF8R)y3oI4CttvBi}hjeByJPxF%yZ z#Ah0{$|l8o`6M>N7|>nK?l1Sn)yn#~91M+~__lby>M$E`JHLsJZrwd|{NXXi<(nrV zQ<`Bo7ss32v&I+J>KyCalgK#h0XItyh=7*YhM=1TO zUf|2h%{tt-Yk9NM5U)JzEv}q#gz`jkY3zJ}`7T}N5HMbi^2}Fi zW6>Q#Ur3(B&1LEn2`b9szw26aQ)h$chB!SDrJH)u+=DIL@9&iqD${m?3fV3HrcA!} zxbHIl>k|diVpk)lF$!ka!{7+VCkU5=4!12;SmcFuID|G{ZOlUgeX5>}TZ8_<*X4c_ zY1XEvR%b36>V=QKDMNd?^b)^)Kp0tGH7_#YqanI<^2(L~ce)7gy=~$1gGST%pJMnK=fr`1n zFl~bx%2UzpQ=f}7FDWMZ%yJy5mX>|bNUh{+TZK@=(#Hz1OLm2%Dg7VTRV|e?UXM=T z)A-sKGdS~2N6z!@9bBs{Q`9lswEVq9Pi?|eC45di8c&3t&nP18UvZ5PV4!DJ%4tusdNBvkL|RlK4+7dUeW(R8%iQj4AVS*I+6A`@r%nvk-p z|GLl7_QCT0x5v+zST@#M*UjLZCSc^Q}vht#fEg&xR$jtxyT) zrSV7lnwdb>+WS7CcBKqvq3XBKh;43}cgrbjr0vHNx)rK&UaKCV8k!w@#HeFybG2cO zRVOD-Yv~2|e6Q|oWszRF?Q^9r05AG;DhzZ*oM^Ive}YI~bCSzhoQW`n+C8586&hC} zzf6&}UPk32H8XR)botzvc}%3Ui&~UB2a$9%SGcSA*|qQqk7w+*EZcO6WZ!nn{4NF7NT|HtqOg^*>!?{4Go zAj8LFa0BJ9i2-%94uCzI(&D326B~0S3HVUCTV^XOYMC6pD?qlg4%zApz)gjIMRdvQ zgjg0%Zokrij=Vw3Z5>PP1~>n+TL+8CWlJcL*_Jhe<7>a)y-S$<$G;xxclrCY{ufKB zsi|$Ww+Ero$J5hQ);aTk)KQr17h0%Gbg=ag@Z}Q+oYK4szxycUpRioN)BN`?zQCOM(!``m-6kL!=-8sdr{K3#Gm{ z)&9T77xqyb0hFnILe(kX{qGevquJ#njm4c3nDSXM5;+^@>(#u)=v13*-d`M5orKPQO6Wf7O(Yv@m3$k%DR&ETMTf#_ z9aIft7%zKY*C{uAK$&i&(}Pkh`71T}WO9$DK8MeZkB^VCig2^)6Hey_%zm)dNMC2X zBqX8H)0tvuf^}cU8_NZ5Z8I|W=6_0=5!3T99y=0?SMud=jnuQ6iZ8P;Ko}kCJrQjO zyPYBOtCjd@O=0-*hzDX#isOi%a;by&9YD~9LfU#Rsjph?>aF~(8DoLT@!P=^OFI9! z+FzFRPv7Ct@(w~B%H(I_PngXulR61B(C+<&7!8_Pjh1m59r=-hg?MaSqo-E>y*Hsm zAzPlgL|8Ymisk=24|BhV_SIK#1M&*XfeOr;AS--4Oot^$dJs+9B*;f$Iqq4K2QnQW@oWN&cQZk zq{L*~Vz(Gms5lm9x;@lFlho))R8L@3*GLX?ELmP2Ezsw?$((3tFxPXRp z%L{ZbuC^87pji#61bhL?nR3Q``cIy4B|o#jWNT%s3m_0UX(lSfoN+j18KJX|CUfLi z?EKk1^~~LYULzS&ySfb}ABHfERF%Oh{3)oRnzye0QPs7p*QN>#P#9yH&D$RN8SdF+ zw-zFd1P-vI9c+6ujWjIz0CqjEe9MV`7*J=~M|g5}wtTS?(?j{^03D^t?&sfAG33jT zwzVZ|R_fI;Kwat^i1B@*iB~7JBIqQd$%9=>J~j%I6p+L^z5Pbq|y*w zOO&5nv}V^c^E<6xz{A7K`TfTISD0lS=kEDHaN>Bf1J%F7{^iS;C`vTm5M&JIA`pf{ zPv_mYCzgURXxhLQX`@)TzR^zxf&cX#9T7ANtpxt_jqVo!hw-KIUXAlY?nMp36=Rt@ z;l5vO>$l){zJwGXOcWa=TpCtunG#>dzU^0eiWhJ!(D!tK72M#d;YD6cfgU!W2{>xZ z*Eu?A)tUUiJx7;Kc({TY|9E_IlFUCkyu-frPy*K_@}i#kl+mEKAG_L8OOueWAPlBY z5*9@kVoOcl7kVlCi9?P3{*1_>Xi8UW!c=?!7n|JM34UGIgMUO0_WXC zc$z@`z4?^AK52$9B`Y$b13_8Bip|~2=S&8WFYd6RmC)x*jY8+lv$4+To7Ifm8qBd0 zIs|@d6@BtUJR}QHqx7R-NJ}4$Of$ffuPmSmuto8cyqj%6rFgbtu^sx?YYiQdB{E1FwV6F+s|Ej+0c*a znM_9a$6XKD)~U@ll=E1c(h!3E$%crqv7`z5a8#@7I#x~QwBD?XDX1A|2Rw5weWF!e zp#o}8Uh`TdjU}|`M_tJ0Dt$@J;OG>B1NXF67WqBsw7*93`OxfFLAJ94W0wBpHpgsD zolY~H>Yk3U))~{xpO^L?<53BHXX#J38$8TxRSOtyGTM*! z_|{B1=Vi--68f$%T3m}7ZUsJT^Ezua@xtcY^e?HIq8Kax?FU-e~2D=>RCoEC+` zpAz{c;P&xMf|Q4SW{^pSZ_vBC@CZq$eZgfhq(+xKMVX1dCf!u!W#v~}$v$jQVt?JvDBLxgyd0}B;(ble8Io>cKP8Q}chWMU7 z^YLT}S{6zsqc_}4v6o_Z{^Yf}R1yxxl@6-#g*Y{xPCDFDi??t0t3{qz*e7z{yJ37_ zAiKgAHhaXM7l0uf2v(aD^S}Nn^WC%usj5AtP)*_bbXEmOXj#&Ak)8661276``tIdg zlinVaJ^Uslx9)2|fF`?s`VMB}=0-ee7U0)Y&!u0ELT2Jdpdr31fB+Bljt@ALgl3b+ z5n=cOXr($gSy1h8Ea{&3U4#Y*M;)A zin8h7JuRmrviUh=#75u%s0rCd(@(-QVfR&&Iap;Y-JH-~V*KwBS}JdlpL{(+v z-wTqZl$|dGH;PJ1I>8Q!!!xNFTDANH^v6FeRiP5A7>4oo&xF)gJ6O^zVX?KVmISx? z%4zm;e?rNu4?{%5(+se9z1ysoSCev`Wl9;`)J-w7k{3Ve%y9<(%FjFY>KW`@Q1hm0Jk5iC0|h&tv;Rbq%Q#iMQ!$-md`s zxkq%mOeVF_7!=52rYuu21|f>McIK|{TaKxPwmS0+s_s?62GL?|GQ-h^WiPMn!qxMZ zaZFc>2rR~aswb#fd5kC2Ch|eY@M7?qZ7P*xrM21_%EjSekY!@)6_|cbN|d+7Gtg7O z^20+n_7h7?&K~B;G0Tr)hiUH$krH=rGi7`$Rd4Al+{v6!SC~ZRZ3jSIX*ReyO!88$+S346z7oHeo<~sE?I)YqB{F?nff}DPDEf8wYY7rC0 zLcdX%Sio}hmP*ZH$SOTEGqV=%WOGIG1+`E9THLnnG?IR(Ur^iMY$nlMhcwMT#FD{f ze03G_AvCmO!S0Z`XgKddRKb=)tZi&}GVHCYRLFyNM?Uf{-j*^05|-E9T|oke%mY63 zR@q**l(r6i=hi_5$2dl!&u9*;S)xS@)O^xmy4M!>rR9FDCJkpD8NxSS-QAokfii%^ zBR$KP-Bb%($!N$tDWz$`J`L2jKH z#6Kj0ij+#UfIZ{pF_LF(tofP2df)%*q)PeMMOS6!F0M@OR=!A z!6Y+wl4V&aHmGts{jIkG(1%XYto)|)#Yd|@>Syop^}oAb_;0Ft)fG;nUu#d^a?u4a z)Ycn^;#(@j^zzXFcTcUuY`H}bF0u`pYWC*WE!Mv`eC+fCi+S-Kkw#na1MG6w4UIXc z4xGP|(bBhG&6k63yWzfjVPC$`6&p7Y4kUxe9{6X~uoO_}YOSc=O8TDJ|6^xBFaa+Q zPvGus-3l^I3JAN!*Z(bb|M%52d+{4Osn8p~8cJ5spc znE`Uf0;lXhN+;c_TlD)!qx<%O+1;rba_(Yli0|K91joU0H-QpWka~vDD;pb@(T)9< zYsX^48kL**l^AJ9?dli*x4@DKBK;97W2)R;F#!mRIrm8uk*(Z>Vj2~IZy9?`TU{K+ z1VjSJ2^CKQf8S@a=>X7SrAN!SSl-VVu=NFlnWT4OJMUA5t{GTX-is<$4A_i{Jh`s4 z3=dH}ib$}9!6YDEBTM;V_?cfj)DzXL2&TO5g(gBhHj9HHPeWU6v04eWq%z*)&*9W2 z#A3uki24}u(j4U zLucc};XDKFWlJ{Ko8QX0nfS$P)h{B=b7VNMRz7;Fv_!+PsPozqyx6jozvRf(g0+u>?N>#wSHIQ$u_&T7LxYd) zxmk*jCM;DdJ++9x*`zeq`ocr|`udzQt54spPE2STEgqw#_A6BV=^zeRo**hc zboaow*?Pie6S`%LRKu$ohYMCPa|xk-x}~qs9CmXzj*I!G(HB-edn@uC*2M37rio$9 zGGQDar#Evm@mzA?s}Ci(ChTA&YTgP4O-Mg6WFil!hofm{s@ti;rKg8JWv|9RZYv|@9f?75|9N{3o2B7eLXHRVyc-&9WUray>kK+@bib`u<#Udv&~{Gce1vVb>R>(D`>XB-4{Cd&-8 zmzc<~A;kXO?OSDBsf|omr>R$=OMq@>ohUVlU{p;;7BXa0_%+3Jrh*yN@TX}u>LX`W zGrK~!07u3`Hgo>~rtAo=A5&A0LB$?jScrLD73TAuX0Jlo3m%G!EAm+`;ALIF-c$uc z^M))2^}E3gBq_ZjT@D@s)rOqNns(8KAr<($NN*)C!|}(@G=Ar!KIRqaTW3!Uaj>ffy-t- zI7(@y%Kzj+fds>|5Ub26_@;KdGd1<=>2@PvR&BkAXl?V}_!NrGRsRGcNA1*hFICi) z$+2;Z2{|EytH*3T|D~--hZ$@;`9^?31bkmk0P9})fz90sN+evrw0_t|$OQ>;c^$q2 zSr;A1Ryre;a1XS+!HoUrN+=%x@GtOVQw4lx@>36htmASuA3Q}2E+B9~Le#rqwr|aG+H}3*qqN^I&ko#UN#hXhNRdE9$vacWlr zmX|@fD)A!k{WEQtP+(6x`OvsN<`|dQ;I#Ul0a}VjX72EqV1uMpoLwdy(IjD35Z|UK zwDQiKo@z9Rn^`gOm8Qes0KZ21@EhKbJx?9ADKMb5`4Uxy=I#!DaeP{HaombaR|IL@ zitt$ZyyhpOYjdmT6Uyxp!e!|vs(h~5W^*E41m>%AKeP1=(~h1-R2gz<_+z^fRu!_T z#BZz4iP%c9WBVR^K)#j=SW5d0kyBE#e=Q#&wiad8T*o=_HCoMsEb=i{d_ub{eitcQ z`B*YsroB~3p-QJG-=m58FP#-%*ONhOhk@anF#EWgmnO#sPslHyt;;t1TA4o2#TlvM zE9ppA<3m?)4;Z@Mf$}*AR}VVV-~E((gziBG)m0}h`2EI4fMWb(>vLg;`BkB)ZN3ae zC1^U^Oi#j3b%R)qg)i2mM*bP30vav*N*=&u>^Yt!R702GaNsVpzDq28DJ3y25CQk5 zvr^&LV9NTs?b50)caqGfL!G6p@#mGNxp}t5aA41q&s2P@QAJT2o!~Xsy)_9F>J2fA zr%|ugmw5#?qH_cdJBFhC9{Uttxd>6@Kf#Q&ROg&HdW>ed|1Co&ub5|Tx9uc_r`Hwz z(r<>n$Yo!KVdhAZdRP3Y;Wv=dO509&acPepvi8mWTDQs>-TYWHW<5~OJUp-rlXxRJ zdXi}UorzjdvY@GE*PAT#n{)oDmASe3%vGAsaI=k2#(|$SgoaTeQ6fH&<(vQ$26v^l z)flHRW)w(Uou<9hX8MviU@50WBw&;d6T%FBmRC4Qa=*{`MT+I^u>hYIM|qUMnZOq7 zWU@z7l+X9*rKP1_yWuQpT4c{BC$yoHJLB8u>SQK3-Rj~MeGk^1fwbU^= z5>N-gx&TGgheErY(Kb+zd3QIEK?hFr?vwBNq9P+-f~NB^1;xX2I;4H(C3rN50LQ5u zt>0o0#sOF#BMLzQ>_YPz=iBzH)9pjhcS&U4wE}?t;48NumQk%e){U?utgQ9c2h>+8 zP}RIHmO?umd%+Idm~#IcpMSXC<4-RAtW(vtL{euJG4EFkfNvI+UAMRmTo)~2Ab5B= z{qf#d0#Kj=KH5~hGlSG=f#y<&6u+0YlWma>lO2%2P z=u3LU%nlpr1J*hY<>joRY$CqT*P@rto*x-z!d><{x5x$0MZ)qP+F*1+C}WP@Ms%tr zFPoQE5^G{(Czy!BUTnjQNc{V~VwIRE7q{tSFe)(xqToW7%Uuq0*7i{eC$a|kFaLh{ z=@(8mp<~qqq`W-vgys@m_Q*9uc>jtLcj>9re_8;7v&8pd&UU7zHt*fFd|dpBAog~y z+)&51gkktJ;Ju8 zJ(de_I*Gel=%eIo4xL>GLS;=jHj!4ss(NAmuB4RIIm`Z#n1&Yb$L((fEV=MZ3B%V) zE<_S7qv9zu^-5 zn;-Ui{TI-DFlJI4Y=|ZOI3pd)EZmH^nX>l5V2g7ZyP9)DYe=Sk9zB+@KRQ#+T+#)j zt>8#qri;<4=60apOR>`Q(N$@}J^oIObxWn_EQBMPDn04eF@R;06$n3t^o8}z^6f%b z(%%`UywH3S5Ne5{Ygvh97?E?9oqYnCs%BnWPe@2uny$p@>`Qo|c?&Z>YouTMsz2n% zUjRS498Z?qN~_lzH`A^ZDGD5%;i z%ic8pAZ2K&lSs1@ad}+vdN4hDfAo)_U$SX;w|itn&7A-II{?owPqyB=r>>lwoV=W_ zv=TXJLsd;tkSf{(Ln(3ucWhWA{h2As|C4>P#3(dB%U>)pZXY`8kKe^fFGUMGX!qJu zH46vr>k1>cH&*)K>veCsbGx6anm+7UMZ>Q0q)l34&=lR`c$#?gZ04-UNJF> z78whG!*_ux`5=e(=G#h_G!nb(j-u??-vz%M$@e*fa@c+>@iUbdRTh77DU`Mw6uXYs z)X?sfqmO_Bc!fM;P!|u|Q1KSqF=#u%oZNx1&+{Rq1n@;2>f^QCJym(Mv0v5ogZuV~t%HmdjR(GLJ(LrU(ca92UsMHE_L|%M}4VX(L zV}XnwkT{#NNa|h0Y{UKUFu|I6G=bY?n-DGJ6B-)Izp#O9VP_X^Ju*Rg)vtMz;|K_)1-+fi9gC0l5iC52hvPWYt(yxV3e?A49F`GThVIRbZJ3+ z3C#ukxWZ-F%E*NG#yqOE`W^JnMB)(5Jb~S+gtxuPR>ZID(4>!YIJ!)sJ6Ne$xy>k1 z;cEZ}t5@v$W<~aGKu&OP11e58D<#3%F>E#ZGEuT&*o8jVA+54)b%QBwdAS6~9P^xY zoWg=~2FAaI<)$QT8P9+tt6lmYx|8N{vpTurZ|W{=2|vHL`7z7zCntqlo9cUO2p$P< z7fFA=;DeD}=wy=XFEovzRf`uo1Qcep7Ze>$EwRmpRBZhV7k&vpzl$h8=P9|g?1ALI zpg(}^>2T5TlVB6>60IU>)&4Tc6|YyZJZg-8 zc;?5KID-g!+c$O(c}z6J*Ca>@w(8if(-6iCgN(n&e_`?1{!Ef0Vbmtz+3E{3H^#k{ zFzcTAAuEb~>7Bl3mbYPL&^v&gU+q;y;x{HT>RAXWk86f41a2rg`y918giO3WI+oy7 zG13ln>wM|Mv|(xa7hOlkUq;MHIv;ndk|ntZ$24>Bv`XPo-cwDD?26wFl7-6RVUkyT_$*YSTqFOW~`Uz^bM}q=qk$(POZk| zdxjeq5henbHTejCLP_xSe^xd*`lg15kIx)BZuxO6VSQ=wY62q)rTVHGE}@+38}D7grganZF=g2Wc8%V_*y{few_jg z@BvD(Q5{z^&E+}J3B0MHfcyL{IPf{SDKV=1aqb7iLYlKp7dQI>F-W@tvLZPH&9i6c z{h5?|fh{d9osGJO#i^tzCLZL-caG4s?5_-o?{|XK!J09vLkT==QjWH>-B|*_Xa7Mt z_=4w$iOf|KlcGeEohmTsc5Gorqy${1cmYKLGLcJ?zTR5Br+VO9FM!A{7xir_PajYT{@;TdF$ka4@&RO<2r}g+JdYM=>Y%2 z!&5(6JY{*>f2F9|?t+2t~Tm#WR zraJQ|N$CFT1ihwv7oY@~e;lmp?Z zK;oVL(d|WK>UoQs{ucsV#<)+k7XuxXm3lh49V}U64^u?8lENti3+Qc1Lexmpa*f*( zZ^AdlsH`+i)w%;TC?{Xon=mfvRb_?QXC+>!S;Tu3H)PpK>3qntJ6m;)LDWX-6F=~l z8TMntg8s~9W^NnVsF%#?HoHp1;WIH!#ogVydr{wp*Eev$KQ5L~v+|`nzga21v{Fk- z$GyUUSk$na-t?u;FRHcqy#}?Fl@;A^V8yW=Ba%@X)xbwf@}OjFV04a})x4HCS0K6+ z9X1^5iQDPvD;AO!`t0Z`Bf*-wZNONd6oD0g!tNeLU!^+s<@GpZ1XidfJ&9>Nmv_?q z1KVqhUmlkg)sW7N;(ioV6E1vIqi|Jf8?ADE=w9|vI{(KLnsF$T57(g|2wq1Ggx`_S z33H3AIkSO%E0y`RAMUR^wo}+P{T&KT*L0SiJP~jYsMTp6u(&_yn}N2KdzP5X)Stnk zk)+-~*0zhWiDsJs&%23hzPxXeLS{_1wV`#EDD)d1Q&ejf&($eGyFB8O-Q2kd*!tI1 z7BEAHi@PKwuVP;NxDdKt+!}cgS z`^mY*y?2+QlRA4FGanV47dvQ!9#;a>>j>p{wMV`87EpC(( zo~S)^lNw;&r7}jl@OPn*)_kLR`%~5VV}Mx|`!gD#rZQ&o*~_WX98Yjtit3Hj}%T8?B)A*}3|r^0SC{{9mZu z%d}xGrh^+CE(=1*8o?K)9mEmKmf4cq^l^%shSDKVFo)|e1=Rw=7306V+!Fe=q$r83 z#>$mD%nI4hHwq#infL<1LCd}cz~`65R2Sx}ZM84Rj~?^~WCh%MOMrd@$w!JIg7^Cl zYOe1du8KW)0>kB^45f0xOy)2MrbR4b97x~|OI>rIES}B2)uXh1goo!jrLqj#luit( zgL_DURsF#aY|xZZfH|sIzv4bJ3sqc--Q7_rBklBKe3*<$$fc*HTKr`8VJfIBJ;Qc2 z6t9Qj)ZLwc6F@~-2N2n=D=0si9^dPcRR=Jo^{er!JffmuARWRS)E=+d*+1w&Zvm!7 z@?nYNNH)q6hqe>RXX9Q9CU$?Cz5fYD?^qhR8dl@~t2rovs@&gS3`QV{m+$+2c%BP> zo;!lL(g>%>s3`a5k9qe0KY?fVsEwO_b$>R6cUu2TNJq_k-dmQ?V{B{`_dt` zw*mXvUv6c34OMPUs#R7=T;p@*lhtt!cZvwNR0 z45*+JZVK7X637fqu3;OUltbIO4Hdq$=#Hj2c7QHp-N z7N~A`)2YvQIi)|W^(;mFI!GPDE((K?3M)nQlM7r= z8(OQKC2mJdtfdEhfHkN*zqeNSLPD((2@W6umkmKlb;y{6#h@!!rP*(jxXVUn3!mQ# zU~IAu$6}IHufSBEP|!n-BHLGdMk*_&qN!01k=)!!$4j|q+nUQur!xFal+FE@J=?C{ znpnrVU>`Rt)3XgqN4fE<=f9}F>MP8PSH@5Fo*@)iWrWO~@X_A8BL-39v%t=XomDjq*)&MRW-6-;=gyBzQ+#Baeq)ggA+_aY#i_pu_m{m_QbtH&8@$gy z_V~~}FFaGWKf+lQW_xuuJ&J~y+nS52Rr*}Y)^qfn>C7)*lV&GrAKO{vCS@m53d96&I8^e=0}xiqX7JCcr!mT z@~oar#doIq%xU4SHQ04X6a!2yPWA9p08xWTKW;?J*gnuua%Xz4r#+^j=?2PAIe@&M zZckbOWjJz-19u|)pla|nQ9j&8r9`pe(tsgLNf!TeSs5Pq#11gRF>E|4Q;l`W_=hIloQ!(`GB*n3 zaMDEzBYDl1>%9o@`%zJlL;?_#2_dMqd;mv*q?daVG^NN*x%)1L()cm{r9pvJ-^(C9 znjCm&v;h71u*|EAy&QZg0KAd_Eff-?O6E3;-VeCD{vwT>4w3Z)i9#U`LZt=%cE4(z z01h2zfN`w=RTxU3ybGWhxX<|0ssAa+Oq)|PGdnc{uEw2iZ0lx`#DICLFrY@LJf>cG zolRR;*pBCAcM1F`dGp^?hieihLI@!#m|`)fpr!3uOEHT^`gktJQd-{q6Uk*9h`j!p z`U*z0d~xBWBun`U^kNq~*3uCGwPY`?|Ir^5D3STOf+Yi!J|gg<-Ivsb_D+J^Yn3vm zIaaE0M2?i%*<67nv^#zZBQ;`O)H(9ua(Jxpn_~M|{wn<7EvGEpS&>&!WDSW9((y(N zh<@BwL*6G_FRPx_*<3?yLOT$*@sED&DoGdh`@0lhQ1QpTuFf{8ly+Z_j8Jlp?Zj?; zYp`m_T2~O8B&BDCAq~ZisG<%1NoLvpAxwrs_%^TJltk1pBkPFAj6IdTBag{!_$mIl zxmM!7N|Q_4H+IZ54zoAs_hB=%ZtO<^vtSthTzIS3YEF5V|8CN`smlHZw36xSEwT%>{iBj!64}X|6LH)7JAaRYNiP0bB@k#CZfZPkPAX z82v_}Y0eBPbQDnt#G_P!Fv;-Mlul2FsYIeWhZ)V_4Ph8&HK#X5Bz#7+rvPq z&&lc{c)exVc4B^% z{`GotsyenZ?&hL}b1N-{C*y&enZ~z)BSf2(>a3vt-+n*JZxjAhbCWfW-^M)GXj~_} zh~L9okfO3z-Oaq!J$6$quh2i#p4=y$gRqhIi56aR`PEW38WFLWsvLbIjRn9-yk8s7Zr1W1Dp zPtl_*N5j}hmaVxTkAw$3x2$K**V0kd+^eHzH&`f)nT|#Q30xlWnRTy!pUhUfU)aGN zI;6ss)OgvlAjr*%lIL>vEj>e^g)-?l?_R)%y7wa90=_DeLGwaiYo2A~TZQcO>}Nqp z52ay#OA8ozo&uWL%mFP?9bmje$H34r2mqRJPdC1`$r!_qi+%6tHlW6Myng9+Mv8XN z$JZAyhGw>rocA%PoKSE@76YH}PumL}Mte4+w(RGO+PvKVe%@VaH829iw#W!zPz|&% z;^+S5WnWMAI89rnEP-+pvVZ-r21#G#NF%*2d4qCK@zDVOLINl@ry1M)SD+6;isp+< zPuV#1%by@JH@xe?KvwRy^&ECqmDL4g3xNhzua`7$S2goYKxpbG{Yp!$KY$DPC&JLy zlmz-!=WcRqBmoPI`QrbWz*srl_AWBBNHbu#D}>b;a{kJ)0E#%!4pkN64fgB<6i(!N zr|J-BA#lMQON)+UkdPb#+&*?))|vdKj87|sW&%DA+57d`*;@gS5EkjAD!a+3opb&+0~ zhJYtacY5jXH#JT-r;{D$H~J01Pn1u{{|Acy0i;B*0MGM_roBe?!*hVp4Vc}!AjNtY z!*>WxU|t|*u@a#AzjAyn53%b1T40@PSuoH4qUlGnwe7LWbqC+Y4^>8#Ct^YB56u#Qq-^@>W>b6!_SFwW+ z*kxB(`#w;leUi$MSMvYlc<3JWh#pVDJMMApPB}OCayOd;T?)s{?`47!ay-F|qlS{M z5jL1fGzoWf_79nsZsiQpHP5_?N?F`-+!k-x>U;a=nyh+b^`;=kfbUZ5+{E;N@${#i zwy2WVBhKvc^vI^R6WqyWub_nMkH(4l7El`bsHF96txgq##GkuqLM;b&$-CP#R7nj< zkR_c%da7XC;$>yB7lGXoBO=fr@(=U8iIpC5C7e)V!1sH9uvU_DYi!&aDaMsj6&0Jf zCtQ?P7udp8TIrkgewW09!nO%f9@wCr)+uJm0PLbhCwL~+J%x=;klBv2RB}Y6lu$8o zdmV~&J=lHl0C8LySc942GDb&xOn>x1UDu$K4QfP8mfc;*(ObdS<$j5{Ked%zBzvVZ zO3f~+*45VBo7w$vM4TbTR$EF}=7_6PtHrJ(FY{+QB$V|bjQd-DK1P&cPROHa$GZGA zrNBSD_1|F3tcSw5ObbyAjQ+xz zrP377n8cqyD!F2O0P!S-&Y-^%icr5qaF0!{EOXTrOiX8Va}QM2bB_EGLdhvpx^#^9 zf;dp*+btkSU+;+rUqwPAaVL1|zl0sOFE|Xn`nF*J0yQz;? zsXfndd1{wNUCLOWDS#JL0Fym7`)r)SM0eL6w4q2S@h6WCW4t~QdK-lr7qCV{E(;fq z+jmjU8q8R6ZLMtJ%9tQ)%+Jh0SW8$h`tsych7w`L%>+3$ky3){-TIBw?xxGLal3LXcem8l3Bw$dE1;%192xOc z2Bt6Y-PIl7c@?Zt+RwjVUtd>%5@RcU2du%PbVRYm;thyLlBi=5I-C3w$`tdHWcVGD!~Z9vBQ5t;pgTp;yh?-1bANG1*dSWf+{`HLp|K4bt^ z6SAMeCwzG+g@4XDe0=bee|S;V?21qWIC`2v@>gf6Ns|)*;9mi5(W`^<56Vl=y=ss? z{S%O_faByqhTEF2bVt>njHw=ikWRX0`2O_;Ske*0KP*9n?8K1MD^m6UPaX^|f&f4? z$k+npAPolIB7fDZ$u~960-^z^wFESFXrG6B0I-qa*ocL4Fj3b+f-H?lT^`c*<27h! z8iKScW?h4Hq$mKr5ot;gAg>Ymiho7)sF#8F?VsiYS7^^UupYH3NgWX&wJm^ko&o^c zEl~SY>Y2Ff)axz)9imN*p~zaIwiAdp1mn_uyNTjX~Xg zbpWvprVG|z{Vl2h#OSYW_v+c*e^nClKk{Q#6a+Yt*RqesJ$5kf)z-++$X{iAu7t- zUyI8`Xi08CVy(@U#nD)>9LO`Q&sbrb?8Urd^V{O<^a~^F!t@Y{=yhuL1oiRKg6B-1 z6Uy~}>ud4i(6ZB5f0Z2Qb?~D4dbn{mAg-IP9<;>`k3C=FJFK9eE|mGDul41FkY>aX zmiHG%+9G;PyXGfpF{oQA=ZV}7u@*WyvMT8nW8rRs88f}Fyk*@-*k*9af<)&T9`PhOIZHrsuKF53TV1}8uFg}! z0A^-pKv@-bvsW?<$6ffd)>)gHI}xYVJhBm5s-u3fLqDCI#U)CXI5wfB7*g7}-^TeXeA>-=y7q)G` zm%*pk+6i|@qWWuwa?0Ymd0x5G0&GlOK}3c{UQ%n1G_Y7{gyxErC(dYKCe5_u^z)rKXu+%sr-jm+8{C6n8!ycUW*-_?OwPsSSe zuxa6jD-mh!bC!FE@=80fS--*MYtnWmh_X*>1qw7kNQ@EeZ@%@ZEt=e>=H6QIy%xx; zW*WD?_m2Cv7-(>WGQRi$KiQA{qtnrIKY5UzQjET@6d4G7Jb?wD@27TmaBdJ4Zp`4ZXoYary(0An)DE&tG{{N+7B zY?A%OMFEwD1Su**0$s0e@r7H!xU@2`K{Xwr{9~quMe|GaP`W9oh>s~Lu^pb)Ml_NJ z1Q{h7LoGM{M-S$8_!+deW#7*p-UV#&q(R#L(*k@=S&kOpYXcS5HxtksD1liwJJw!6 z_wnO2q63hja7jv}844^@x_z`gS=NIiJcrZ?7oGcFZRKlktn*<+cYyZS7~}tQMqpq> zE7AH9Bd2hw!!XUoaQ4zR(BnlQw`Ks@%UfOnfp_d>&4fVvvB?5&0t#rr`yjjRoM^F! zZ~c!m4#V}D@1OtiGwo)6e+732?u)h!>+9Shn{V6Mh0t>YaCLE{E5n zufM1t;mXqN9QtZ&QO_F@;%r^(#N&VlZAsX%ScJ81)aLWF{fDe!Rm{9-g62(Q8ZKfT z!YB_Wuoo{g z>6pL2p7tv*ujYeX)hohQHo~!muovfX%4>Y4_zPkCu%9?uqWVE#gU zO8Du8JBY1bjcCuq9b4EEW!~qHey!a|8?$iowt$&Op>oYa$4aZFnod&F##Q~QY~tRG zuBq~5eogte3Keth!2sLh&FO~zY-1YkzJ;~)j*Z8YdJ)iO%F^0Dkl#9l{R0%BJl9xL z-@h>$nyr-SH2XV4pnzaJxS_+9lD0*tU!pP-zVV2&oG5H$aLwpP1eOUS(iBOJ$iCyX z_hc^H%vA6VYB#p9GWBJc?kv!sXRNu4 z2%Z%zO>mfAyrof6PL_`qxXmDyDB~)WbIDZCFDY;h9TE1tKRCUT`ncfLWHM8C)^^CG zW5;>XHoQBFQ{95``~WK+(e9^rY<7DmV!|qfCi{%ykS9#Np>_Q7J#@12?1^%;0J8k! z(KHJ+f8TWO&8|_mYo-uh(hiAPgkYKPjdaz3y-A@$-KEJ7!%f8 z5mv4zHyn02p|DE>0_8W_4SDyQB2K?L8n_Q)SH1@w{%Y8fnRk?cYZ82EK%Ovz&_FEe z?(F>Bvw2kjYAQQ9X=x+esjhOxGzn+(ZEcsul;{BDjF;WUl%R;wV0&2hTQ?^X@SVfGP-NJ{0 zKVqugF*no~%i^m=keyt{fJJN~z+3IS@yT-;xFqGOraO_WAlOSy2DULgYE7|(+3r2} z@80h^{Z-1i%_i{uLP~hy_+umKjkHE-ZlyR@Yv(zakdM1=sV+fHOggh`W!PRWODl%0P<3h-k@a`OXj z8ycV`Kq@6Ea)_+}KGI^7CQ_tt4A8l(#y(qLMGyxaOF%vcw9x+sbD;c)22wq;2(tgj z*H=bG^}byL7K$h$B@F`79n#VaDIlFPga`xDIg}vM-5mnb49vhVNY~II3?YJ~bb~{_ z$LIOSZ#^I0^KI6eS!dQd_qp$V?Q8FS@jRjbl~-X-R{dL63`c1ZRWP#=GPTf5K}Fp-|3Zf}&x%qUMGyNz%TKJbye}>f zhit`&%E~UnY~=j&zFalGTMFC3KJ~0Fa?PP5R=Lnu_<&ac=_5F{rv4R{su0D|kl(C7 zrm*g!_Ip2ScO>9vrLdYM`A`7p#cr$NPXAT*TusC@H^JhccDA$fvWSAumwor$NaiM5 zM%!0f4J~VIrNTBS5IVTq2 z@J}}kNY)m8b)17M4Hp~j08GSH{dyn}{7SA0{D>dRL!^GnO^`uY=RqQfTiX} z0Fa1<#nPN2fiwwo03WWeIvjq#qCamXN1riRhUFOv5~3Rx)5l7zAZ-js{ZdDCVQ-VS z2*b8102XPW!v#`h6W#vCL@gAi+sj$?VnnrYNju#GKF?q{tCLyo+~h*l^CV$F{-y&o zXe1F~R2cdT;=b)yfEy)LyozO!j2sVY{XT+d&0J%@8YcM|w2}R~JWBWWLN23(G0%9x>)!@Edx2KQCp1w(YZRi_8aG`ux)`x$v^ zS>N-%PdV$>ho0(65vsQnbF`YKw%h^m08r3C)`9i-5KE(D(!_q+Z4#vr4LruoFFV^s zGRF3>-`6OHZy^ z=N*>;P5a}W-kT}EX)F7jSfbBKgSltk6@YIi1YsFq5y*y zKT&{mzc+GJV>iL_H}AdiWXc$*55<%l|Ch4n5$=1`MsDuMx7&QA@mEBSA3V=f`S*8b zSDX5Ut*z32W2CFsg@uJ)fVBP~G57K|P!olJGdH9O{D-1km|P?AGOL198az>D zJ@XpHLn@Vl-`@5;lgS#_PlVXNa69qD*L#J1_7i2FEi*Q4Dd{^>g;CCo5oWh*1usV{ zMfk`CXz$l9DP+P7N(YyoiJnSGtz>H+HWgDih{XwG^^)b`rGMH2auqSnc}sfNmiJ%` z@&1r#@>td8=`KNi)Yzx-1{}9O1(?0_S7p>;hb-;#K%bnqM#To@?e_YrzIjCob=e2Y zSmM21Jhzq#Mh>>L>Y0Q_Q(?PT1Ig<4_LKIEXO)~?QifJst{--=^bdYC{HD}>nq7(? z{~+1AC69C{^{xK12H5PV8)OG*I{Riq_gt?bZqn*ZhdVK<6$G3f5yr=1vB^8`NX|42 z!GFpY?fc|R6A+0PoA2BOgcv1*uJgX}L_9V`Lyb%#7@Oob*r4Tu-V}EtjOCS!9g_jY zkIZ%4ygP(gaMdS6Q9sj4&zOE8A;cfx@&|FC~}jkU|;Og(4{`id7= zTU*l?VjV$#k1IJBTNGTnpA;qj z?k9K*>-#=8M@9By9R4-0WN?_0vOUy=5~yr>b#-w`cm@ZSjf--l)D!mO-;A&>lw~-u zhNlD1H;A)n;pKjT?M^6_+hd(x%9iWt-Kng5D_-O1 zt4#Ez%n*J9pB~BMKgXgU_xARRyW|NrtxYN&VPQ?1{cy#JWPjS*s|oalR%=#4MJ>tl z7zvML=N1*0VjyUmZWzz_wz1Ce?IKKaZ>8g21xKXws*g^O4;o6VtaKS2%qbBAD=)Tp za&j^VR1S?$aKBW)Mal6~QUE{rQSS12LhE=lYXpS}lU-7$l@6CvfdnJy#S*^^zq2e% zF+{E0KF8J|Z}t&dtLYH>p+&>9(s%Uq4}bI4Q;LPjNE*%Kw+_a_{C66xwNV*|_cJ1aU?)N?$}|laJinYUZe+p;G7x4( z+kTTPuRlw^UCfO>rZxtQnpdE6Z(36bdi4Se|Mx(qjqoE_NF&2U_nTR+d4Qr1X4$S-C)y+=T)!OM?{XF^(W5l%oi;H zeWCpux1qnC;CWam`~9|5bAM4l%#)E&GgnCs+1_rI*yukI+I zlDL6U`8j;njkx3b^$|v#cwOY{eBF|5@Jc(_1y^gV;h4Mfk+(egp+&;vdy`>0` z4~J%+0a@i{;b`n(=GToDV=~r~q7%XNHK6Rcd(aSejg*CWutQ-@bk)#8gi+{-ebYGg zP70D0e0!+7-ikM|%J5{_C7uQ=QPIB+r@(!qdCJ>e)l5@VxXlhuy8ClgKY{#rbdPS} z1=$(a164VUfmv2^)(`NLC;sdu$rLmd#SI$#-0l>A##JEcCzm;oz7-uB zPBI8`@uT%5*hnRBIXd8nDv`aCUsW`8dyW+3cS)C``@#{=t~P>WT~Jc;VjB;nU?hL8 zPPv{qErf3BWB}i8c$*x$_NE98mNzqnw0++Zi5aW7{i?Du={NZ1Pd#JaV!&`sugNS4}n z!Y*?uGY~YV`mw^3j{}U?J?&QdSZaS>-g3;ONFX2$^E(W*@I_z1Q7(lxmn632GrP zDPQXat#hW9zt3IwO$PO~Yh{0oOd3;ES`ze7hxM>9Gp9xaUPHygpxRnKH8nMZvB|rv zu{G+Pu`mt>l?5OJYD862g_}}da3yqYJceKCb^&nOj;Q{;!t{I_|EPRgg zV9EfknD2J2(yud0KsEtv{yKY|{}4%a5>RG!p#X>!Q}DHPXv+iThxb9(pvFSx-bU?1 zemY2;t1J%B`$VSum5WX69i%*nC`QLPlZ>ik?@T5XE3%*I2xLisCb}*2#RZgx-})x+ z87BTSdE*Sz?L-=HTY0mJ*Q7G9o^v|qR;zGJnVD2c@G(YMqeXkX72q! zgKZU(v?E+9;x-I4AuTd#_T`#k)zIG<5MEtkg7aIZ+C|?P&36)UyI760_aH_VxJ~-K z9B8z6(UlQS>LOFu$9j_PUtQidPS^Y}5C4WE~oSX=WWG{;HTX>RprG_V~fiQ z_OE|Zw6ANE@EKHbnV45Tb)Kw^TmkTog-;Z_?{JDt(p1Fi^3u~Cne%HBhKfxjz8dNB zEt`V+?^>H>8=3kd8jIYCtX%HjKdTmr?TPp6Q6ybrNr7MDcV{cL|eg%3kjnt%*qBfP!hl zK!he}%RBD}n6#0ucIWTz>Po=vKhV0a)LS5S~Y7iyHS}A?&M5Fm&)(1yc=cf)Zsx5CrMa z&O|QVS0>xj9J288bw1$>IF3#TSyR||{g_myBlk!e=5!vwmFvN>z?HcDVwHWVMM7$< z^-J`MR}zChL@i}{55*k~*-YW&<31qlK#eU|B6Z$QUc~q}P z;CkZ{d9YT-SGIHGLO#`cYkbMpZaog(sb|93uJ8B&PG z8Y(=L#U)<-*IqhE2-M@WJUV_$abk+AQ8^8ngXFhmzM2j!x2?W!n48#EPH1!kx zMbWyGE>D>FxMEHGF5!5af+0+lJQ};3DF@>#3H~N`@4recFLi%?&eyH1zQDiQ9|82U ziSgdKCP(0vzE&cOQZpsw}kk%HSc_K05rGTwvvQ`+H z1A_4Yi|dEMK007Iaxjae_o%K#SRc&Y`eFIa*hkP4Q^CbbXc`0_s`-ZUXdc z?Ye-nBdrKqYlA5oX~^m`3Z)TBFTEg>e0o5kFtRVhtFX;&KcBRmoXT2B+LvkhCJBQ5 znN5gv2pUjWd3r92Ax|^oHM4STcYS~p8uz_miO+%sdQ{aqFY9%Wh)thZS{UmR??QUV zQ4>;mVoR9sX+eC;HyRhW=IASnhvTLK??$(Iv&Ft62GlcPg{cQxrX~t)E4|0!(ciUo z9e-W;-xC!W@ao1oYZJ#pkP(6F>hTU6NWF7sEk5?ICWxL$>476xqNd#X@^EUCYD{In zH31X(H&*q`1{P`Vam3ZtRq5n=3K|-&sJyQmAOy3rB$}=%-=0&+L}ZQ?wHB`By~>WK zEwYoI;+LHhu##K$%HA{MfH8M+Tcyw581NCEG`(+)?dQPH;JMYu<%yD1=wEZEJ{GAK z&;Pa|vCItlI+HTD|F=K>$MnAyYbh<@VgzmsxY}uu-e$MkcT*{VcKN4^2D@MXFu?J= zdx`f!qMs4RzKFpv&_=AD|B0c4TW10$1ry8hs)2CgC1^=bSDr%$_X8Pn1@86B&1gEO+ zf^$IVhq320E3&9kjjs%U?$8%q1-B;onTbye`@^i6h2Y|GH+^9|?gjkI9uGtMD=S+k zD#WVC_NRmK?Xsb{vIz6OM-qrbgLpj_F2w_T6+ELP6Mnt@VYn{&12lyqzrLMu&Q_cW zLfOI%lB0Tn?G6_?^ly$!9MHAaU|1~(HcB8&lkyDO2whU>BFRWRRw8Sd{lw(e=RM%g zf=7{R4_FhlJ4n%LEg<`NyJjmt_HhKP+%ewcdtRlq-_OGUPq{FuXPx72j|5k>Uir`U zQ%n)k5F#b9krRNX7-^&ZaBE}ZelN#kv=&*m;*2nN>mpCXqP^baC_Y+ykKG|N^$%58 z>4}mQ`G+~}iba})a+d2Jw1TVdF6h8Eui$h0@ejq2F@7->)yxbB!0lx4YJw}fDoDeU zrTammiObcmoAskNfC^|)%BtMhfikTRr@2wZ_ikB#v7g2vc_MRYaS7p^PY(HRp;df2 zKA;T#X~?x*YejNmxSU44+g@dx@y;ppeqNemx!tRELWB$NP!*-9>Lw?HIq_?EZgqOg zr|3Js#cr+6PW=r4&q4HZ5FTi3f>svFK>E}q9De36>M|_fj3J^E%klTuYgt`*XJT9; z%FeRz>jQF%a>m!5tqT16qWOKPpplDzw?Ac zB%M6R=P^d=083IkcVnd z-YO%?KGUoONa$HHtJxtYm);~aRt$lp^mJv;rO?kohTc%oNE3;aQLmW@Y_Yffc=AHs zd%TAGe$9<0NjC#0DVMyJJht)WY6bOnKk?Fv%h$bWLRQM||F{jh6nc_i&E1{*v2ky< zpYLxr(rWgphXZlIGQE3}bHtLsOznH)gaB)X=|gNqH`}#ITnfb?#+g2+&*-k2H~(u> zayd4-z528ldhd?(B6SX(5`mZe&CXfi&u=q=PLSTOFG*%h^%KO^?Bf)D7UwNdtE+eR z1FsdHrorElzy4L&aLobMc#EE>XMj)%(CqJKP^@{I^+w{Ut-^0T`nMLKiR?+q5&-Icd7Djl z&j<_Bcvn6AU8G{ff!erp_mx|!>DR)+#2^Q&-%R^g^F?F);4~X!b#t8e4J&2s>sHi) zbTM@hJ*b^#W9jZHB`uJIy1(!bU_x}~zkB@$FPV=|17lw!QfNSy53 zZz|d&XTLUzfYyU0MlJE?bJrXj+#Bx>TCKc9s;$F>34rIu zU1&8Mbd_>J@r0zQ`;09$A>25(IIo*f%Dr9$74X|B1!5lgUw8G!brV|sdr?~;vJ#VRpkbu5E#LECFB0t%lKtb9G zEmj)`!K)%tR zMLUJbYNnot&WYAM@)dC~119NiP)=bLyhI*b(}mJ^aSt3DxxNlKC4*Ta7lVd7#@W|w z-)xV_1&+C}bLlB;ln)I!(tiOR62yX?kw#-KbBtF#GMT8hH#y8FtD%wd6#ZLZVG9`Z zi;VrOh-$2f=FiFDsh9c+RnZx!=GUsv19Vkz{@mP&&cc}h*aIM`%utQlJ=r;KPPE(~ z_O$%C7Df-^gykWO@o8MlY@)#~twGhyc2kToj=NvuN1J?Pe7I1cYT3}Y~DS4oO#21~{ zbtWJGId3mZ)Rb-?#aG$y=joGV0&TO^j;d2}f$3*~Jo(7^nft6lGTZ6C6H!{}6E z6*2gq{^U}i{HBgzYQQ2 z5Sk>@PBY>(zijyFeM&abjUQb6u}tHy0ki9>0@T?xbuQ_Y0#&KwG9J@qBE2zEq&jOr zdI$DpFLmLq{*m=pp4A$}F&r0Wjmpll8W>TDV7%v>L!Qvm#1P{=H%<`nj!>j~4Ys3- z7|e_XEhIZf(7S>XtE>j-@l|#NGj3<`W?Rjx7gQ6HfYM?jbV67I9Dzwv{$uLDcXmR7 z!%vFkByytRGji(!Wo`vL3_UN-(KYTH(ZEOF-c@o6=>31zH49!1=Mrx5&kzl&$u}Q_ z#l#}=^Yi;3qaE7+$4(D;0jie?r?o<>Dbqn5&0JK)c<-Ku$E$Ie5!oCm8c;%SlGqS{*C-}0mPPudLAbNelqtQLtD z0I|!TSMsMg`@R>IPY~)rK-I6!1#3+P7y>tVjQF0kmSv?jH)_;Q}>* zTeTLuxiVU^;${dDOgAI5TB%Eq_8fcB)H@!++Ptad?8fioy1&5sU}X}YA3S5bzJ-rk zTM56KJ@Pk#nkyri(ybUI&er+2RgWTe&2P7ll9YSVvfh6rXp_)ov|2|j^PK6(_Gjrd zXE=xON&L0B-aSoGCn2bvdI5D|pGLaft7|9NmksfZVM?tR<y)~H&G7ANJZIp=uRV`FzyRVuh+wFXDujfP}Z*HC9BTSSgW~pq=k=*VCe9;%u zJKcCq!>>eFWbs~1lPRQ3;frUq_&vI%GykKXX{9&lGS^co`DnPvKB>ifXKOMr2-?GE zzo*sqxW?Z8skq4Zv7G&-)~u(X<1Z2)d#@d9Ud-_07u+wTcD9d4BkYb(0Fs1ISKV)2 z%!TTf&shimeR1ln%gmF|7e*CJ0kGd&-jneG%dfoec0;KEu6|F`eHsprNz?$L+YdQI zEakqLh3#F`W;^^%-355PE}%gP(BZhhLsZnwhY*NuRbL%Jp2!ekCy+TFCiOCZ&H;2y zmz;=3vSUnxZ7>q2L$g;RJcqxH;gHNBo6SqH_gswf-Rn%FpV7K9o2nOggioSB{+CR7 z$rSpJ56yY)_uKxaPka342!93}4Y0IiREt<;xgsEa6ZQLV$ErtgJVKcE_*+>-=luk) zj>z?dIEM&&7_Lv4YThj0GXH@kvsv5}uu)fba?xazux0R*D%#doEB=YceC@bF#=OC4 zTU}L1wkFS3c(Uj~q6WHfffjC4oqTho2Pt(wXY(b7LIUY5QdVy+bDH-}d)R3wR?^;p z`obv%qFGD2DGVtfTNY^py2&^8=ZDg61{!xx6+9n;7T*OFmSlcWprQ%O(q?1er!ep*hzLE0E$k>{%y7{zXW#|c*G(X4)z zx^6d&6^g5Nbi*zKPAMsO%z~~`YrKyHjQ6B*3j6iDv!j^1e`enn7B&qES;=^5LnW&d z|ENk$5nh{DV@ljFA#fuku(ufrgj?u_+$hcHlRa>Ss`K!bQq~Kni)|gIb>yDe(H@=j zAGfXRBu*k*ih{$z?@EqHuPxNyd^-*MHe2+1$x8+#V+UqW1xN%StUY_ ze$R=I0zm>jqgj%lrrtfiD6m~F-{VOYX(pV z{O@c6YU+fJe|#_-UA(>c{F=^pj}mNWlpQ9ups(wz?>=(;VGGI2dyC-k5F0S zMEp+Pw-h4}Z`tr$*))})%1^7xuCnQ}Z83Eivpr8}t7_+k@|UXJpQ-Sl?%qyY*eUZ1 z`{;=8CrdKoUG>bAGmJbPWSz%^W`VEoRs%8ikf;t))q;FAy(-}vpE?UWj$@Py0DBNOznD&Cc!sit3FSqcOvaU8<*IjG_))?7MIn~mtY1TH5OCSxNDplt0Q%fz z2q9%HAKCVifYwf602QP8hwLp9<=E}ygGli{3Z zzRZpvxBrBwp{DkysD<@UYHhS-i-&Qc`6}j<$t^v6RGD4sSjiTQ|R%aCRqFx5JTRlYfv>h+MM@y(X`oi=tOcmBz3mw;*DL`Wobo65+QL?H-|BMWtM zo7~JTBpZAGQEtxiVWBIv`4C47gyMIaA)`45^m%v9`ONFb{W{PSO-=KJgpxShaLxfl z-=1!D^|*-Da&Zj}vbWhDhV0)I2f{jDcerKl#;Tu8E|g29`U?xcePg}!(+&XH%L{){ z4SRGE)LGWghI6H3B}SZq+*DSq+EMM$NLjTl_{1*8aALPa?iC2}O7tzFs)a9ZeR4hk zRZs~#3R2tJrvwgbGX7(i3CD`=pgzhflrD5 zb!|TX#|OuEthj#w)6K@QA?-6Z`HuaFhQNdS@T4IQ_Bt2uL;WYZO&wIr`8^feD9C!< zXj=4JO^yb#!DP~ltuHk#JW~dBzXiYlO4Zzwla{Cb{`%Yh94} z_MBf{sILx{K((^%Lv8<=w6AIq>C8JtX0^V$54U_Fm$B+*<1gW08y@9K=tUBW)Ap3l zCdYgZ8@GVQ7<7R3r6coi5wLN6T>+{!@FUiV)FZ<|iYbaw#{#)%LsqA+rjm@qX|>NH zg2b2@T7G(z)SN=fb5lins0FxaC$ZGiKg6RTn$?AFnM|o)E@7 z!{{aHp6D)YWj-t(c@Ak%N^LfmxH&)kgBMx;Ql)bQa zGM^25lqC&m*lMA*T-+$%qMj6IVGw0;_=z8#KB>RXR824T$t*)8DN5jbnm6{@%ZXGl zKPj zQekV!lE)tsg9u20rVPP#=v8mc-FDp#g~Xg*A~mr>cLV=`^``iyH|;^TK6gcr#VQ`; zJ9hodBI!4TcJYD(L+Tl5trj;1ghD5EU3cDC)}hm8jyS|$cq4X*JH_-tsuGK{!x zOPoD89nM|4tW;vv5RkZ-gi=Exkz#G;T?O}WZ5u`3k>9*&Lrlx*nbfFf!-|-w7)fW{ zjDw_&&S!PTk?N-p^~=>e>W9A}Tx&dIZT7@1yAA+P+TXFffNoOebGli~6dj!BX4u=6 z{Qw>In=5rdMcTf=DT;!H&zm!$a&n}HXOzwm!Ifq|7iCBT#jOBO4uh=4TwA5S_!avc zQV$J-+Fs5lgimLO4=km!M&RA-v|crwEQHbHY;*x6QoRhI;qb0M zsu^Z$s(Nn;hOd4Hzaoh18ANTmrhJ~V9&8q(zyHV`6C`HCc{d$TixS_n^2-lv-%u&* z63MXNG1QDq-u77qFSlYG?pJ`TMDUplar__t7E^WC&s{TmIb~2T85R@t`eFHFj+s#V zAvU+(F+QESB=qWrJtk$UB(tNZWY+b8Eq+#5(2nFm+8tPm$y`d5jcbaeh?Y2}mTw20 z#mmf3dA37&i?XxUuZfUzgKzEQ!)A)9tAtJaBbgLys*B%j?x?!cqFloO1mBPEC7HpY zT};Yu%-4GDk#9#zuorK_TYakZQbZ(7Gyk|zO?yN8C`#oXu05s`EE192-cx02?Bl_G!3|$e!l%9%G5ytH8kRQi z7qvPmY2v?)Q*L`EvR!#Tvv6^HC*9icm;%4MW?nkPuc_ksL0TV7phM7=>t=pfAxG0! ztXDQ?or>n+g_M4+55KKp0nI8s*0XOnLN`zHs5zr=b0$T)9y};9FM@4&pv(8LEjz5& zMAgO+5fjAX-I)W@kN@cHKeN&dG9re z{7K(`na&!yT$LvoCbq11_1B~1aJ2^|4ov?T6BF|R7$J$SQ26(LUmOVN`IiuLj$0?< zdgY{5CdlBNTi_gzc zi$X=tI3NyQlaQ77a!SFaXfh%v6^+`g&`e-6lQ5UC^NcDXIag;oDRk|Lasjj_uz~Ez zfts-|+VnFKl7j}76#m0cB}Zw#o~kR3I@Gi)tIgi`8yl!bv&4fwh!LrF8E8pXB;{{dAJ`^#LL!7`7chb!Byft^fN|R5>%-h5-fn1hiXJC z2QYEpZF0kSUc~yv0F|pc_waw0I0JrLmkY9MLQ^`r+j4C4 zn|d66+x>rEiL#t{HC)5@h97>dOApkxa82g=$^f;a(v7HLEEXHgZ1Ah zxkh9E4O{paYQWlKnIs|o+>(}#?y;VmkqwxuYn+b?MKroqT+U~7;;(7T<0M3L!*5QN z_@;DAh$FM%E*+&hs8zS-6yB}mjtS1dSb8|d;Lc8XRGviOhYfd&*+5qxsXowK7_$Va za?<^)8R}PvMlDx^=5Ux;#3)4#`7{YBM}LIEEK@F~h5`e@^z~RI3MlR?OAoFVWXIg#^kTPxN~HbdhcG+OhaV!`jPi@bE*eF zI_F~063dJ|HNZWE?V1LA6ft)3Z~We(#mj_Cfx~Uy z5(QYy1b^YmSpzZpcrpChx4zVli6!YxHiz?tx7oX2_s&z)u@-)d^0=QVZLaUIJ7IeQ>oMi=q;^Q2hL@DK$; zqohhitZ5o$#26n`#X7Irc&29;M>v`4&s}{N~eA9v7O~ z3XDQjC018DK-Yh;Ec&OzytDHHuhF}-Zc=@)KPyJDpNs5??9H!!N-Qu*Xjt#yX01N1 zF0U%#S?(qlK2P)HI%sg>w@HrY#VaB z&P{KDECd2R>}X*gHHqwgq>$*=K)(k|;RhcjrJ{Na!dTym^@tX(Pvrm5UBgfo%B}oh z>4T{gZvmoky=&MCN4b-Et>5mH&X3Cix$SK6_OUO|xTTw7S67?QqX~)njdlIAfqi+y zc~F2el0Udo=}qm$3#T2@fgZ4%>gg2y&)Fu{D(UYQ5i1M8(VFwP4Bt;3-}e22Fv8;6 zf;uW0Q#M5}w_e2#ELKKJ46XX=J4x5d{tpGy6I>&?mGo&E zk4p8*Y&#{Y&YWo5x@R!XOp|-toO4X-saQAtR>$Xaeo}iU3{%#^dIpk_1#Ny(y_U5U zP$!G_6Q$2qbAq1TgBUYB)R?FON;W$}w|GGZN6+Xg!`6lp(Qhc%gA7e$8e2J7d;$-pN{WiTrWDT%3#_u$Z z)p#%>t>8PwP_imJt#qYvi`rzR?;Dx*+RUEMel=7CRz~=JpH$koFgyEYurT(9Ha4vw z)J^B}SX>swN@rmozg<025tw(DS+Ua18`&b+F*yzEPWU=lZI=o|z6O8q7xvH!c&AZg z)iEj|9O5A7Mt|yJmp+U_p|%Qy);xyqfju9N^KlH&dC-s=`F2NHGtaXcf}mBJ1_31x zjp$!0j914P0ua+B8NIez_1e+Femx)9(f5y;-3EK=zYgo0hNmHLUe=qJQw7v9qd zEzQ48Z2a!a#WUh3pZdEwIj!4ydmWG_iVXH44%<7471@)RVxmHZnY6jz_GRTK_T`=n zFl$5ih6RcR+ntAhLbPzG9@C_&cpBtM1qrQS#FV^!JcBUI-hGat4A39}ae+OJ)u6kt zd|fKxwN*kvI|hz*WMfC^EU=S1^O|vi#aqIrVfD-}Z86sqS>V3j4eLfo$SL6N;jkCL&B_8hYb6;+-Nc^`JfVyFl{YSDF=b(+i z_TC;4*iNEfZDx9d`ZmYDMeVScY`H_@jS%|YNnZiH1z(>+fG3V(VTsN5BsJL+_TD$A zYIQ6WIC9)}tW|$qTs=9nDV{RO^a+8cv-YptcdINs@{=;(GcU&5?0q!v;g45_y64$V z^go#9@4SpL-~a6L@w|e-E}sJ=ugKuH0S?9Ze=q+yUS5YWi4PvEbDpV2R}NefZ*lM4 zm=ge*MINRUx2%_Y@b2sp%}p2*=yBS;D0VQC;QP)TL56EQQ!y+zP;B8$$8*i~cJ24? zQjhqe=x4s+<<(!Q%&mnh85vIrjRkE8RNmNFmNrh->J#Hey3h8%B^dDfr5e2GC$+E- zt&Wqo*6C2!pRuH8%9Mis=z;a94t89zz`8jz8ju5I`}V2QlbA%vAfS-ysZiy5kTbZapNGqbKNsPuy4i>GhcNl?rM$l%M-@5j#Wt}Zq z{fH_s`sKTed9z)ZYtoudxd_4Yi#V>kvak)K2yaz%yGi74YEslPHAVtBD83>7A`?KW z^c`>FwKIZzz~idB7BJ!Q$z;Aym37jnK@RjZ^uX3JkV|2vIiknGHLkFJF!baS7X+IU^FC0bmqL) zJ*I{kWHqS9gOee(1`lOrIR-E(CMC8qr-L>XzRzexBr)tCQ&E2mr+R*7)Kv}F5peu) zIeW6!!0GG&@=q!`Ufw{a-Yj& z4R>priP^WU{N67dVQ$!`meJa7hopvq#u)-BF5z1FG5+jO&82xQo(j(QE8%V2OC5lvfFDZC8NtcPgf(BX2UHJ-b2)_Ql0{25d&Kb-67zaIDvJ2spoitdt$(9k-w0kA-3tcCi zZv#_g>i5wM+7XkYpRy%q&RKH36+Y%?K_bI?7<&xgUFxFsNV4|%!|9+C}(4DUb*ub(Y>C5aT-g%Ds&8TFSU3L6_*dGVz=C5H#V=i zL6fBi6$e+aY$)1QsCbj7|wC11^MQ8obqRX zU4IXsrLT!O;C=SkI|m#P5b!b2*~_a@m)Arg0UqKBcQ+Q_@|#Xo=W6y-H*6N*m37w* zpd*mz{3_sRE#@mv4b`L)=lBJV+D*)VY4eETehzH2^R^p}@Nv$9ltdoevyRNdz#T_e zee|Ru#G$pJ+yVM({mrf|YbN;!1D;~x?{4ufwh>w=r z9@KE&2^ez5j)`hit^UM3dPF0_9KkLtjM&nMEgfrcFwNul5gnYJu7Z1O7KVJO1t-J8 z@DU8HcZJdJ`L4Y7d&M5b4%7_{pF^`sBn%xSwrI8KI>1oBchk-sbG>h{@JVFUvDq3= zgjm;#lvc5TJQC{O;y*qk(DAOp{eU>thKb&&Lo@72 zuOB_MwcY(?DK*{pu?Ob)sON0P^@)YJVlfW151f5zeWt^Z4bF-$b%5p#l9#WsMPt&$ zdINJrIm)b#E{(v3(%|=EFPQ#yb#+Q#_uf$4Y)D_dxE!Oq8k;U?RQ?A;3MycYI7#&B zeaQoAwkHk60QlJ)+{1J*tXWS&ABt}^+Huy0R~Ni|e&?x5 z@Oza9KWApzfdhSn(9e`kVMAT!TYX^>@q341mYIGs!85)aJ@gc5egTp{Ti1NCLX~Vs z`m|FCKZa_#Rt@nQm$jzS^`STiS^}Xi8RFuRKHSur5uwgjV*0`xcCe7~+W`#V8sVFm zS{|;68L8<&{w?J6YlVvlfGfDhGZ-Ook64q#4kW}jO{d$MdFP;9=SE*+A^N5l79R~- z=I^Tf*`y>Glp{klB2{d!yOOws1$(n|avX__9jMol3w#Fas5GRpwQ;5180wQRHgaL> z|50`3(NOH1CulmEr^EeALOGEN^qth;)O` zz4HrsTbh6D#i#OeaR{lXudnYlvwH-!QZQWJG271?K8DB1JL=6N3uKUn1rn?d7c#8h zg{&Y;zsQ8OAwJg@M3fZ_*em7fG~{xKLIwb~>mskiQ8gADJ3bB-Pu2qJm$)o-uLIl0 z%=e=Q9+)iUE+?PBdmxc==uVg`sCNRVZT-3IqO_qw+3?}_d)$Bz;2-yxP@r5YoVHlt ztFe0L^Ze7{mIns7Ie86I;ZOI!vwSc0`cv~3hrB;{5qSs^zN=_YB7d$3!(naU&gvQu zcAW>}w7#j#f1+`Z!A-lMfO7G|YQ zmWhLjooVdJ&dJ1Uvky7-04v)Zc>L3MprINAjNgH}u;?ko@bAvihSZ6SBWCZ_;e70| z2o=mvCrR=@C9I|l&x!YpoRU!zk6HdJ6S}Q&;Yi;IV$(zOz+61(vd<`^gv5%0l{)v& z!UCA8#Rpxx;)u~c?bJKVbW+!!0*P65Cr`h{75BbHHl1XcIjzydC;=q(25C zAondMqjK^iF())gZ=V0k2ZPFj93&30VSHKTQDYpebn0@Gu?jaOIYFjn#j88gEkj^F zJe^0y``dfmB0(F^l5IT8wi=Fek(V8no)Y#uPGBI;lV74xAa zC3Qo7M=Lp9%8se5Iaev~7G-t0IrNK*?R#b@w(5NbdJNvKcUX7J{bogJevRp{Vuq?i zDHq26yrAY`gp#A$pLF)Z5TQx=YV!QNh<)iRh_MRqQ8$tsy=&>$ceCPp#nvjw18-~_ ze;B8BXe(b3NRxK3Bt2&kx__M*Lp012DMR9@P%yL0P9Em7W4G~jwg|%)yv|C7KksZA zLc_=OjAcAWaWRPHC4|t0S;v_8gzCIrL_(R%*xT}OdlwwMz)gHOaaXI%x)Axy99j7F z&WX?)DIkEm<-Jr%|MGmH?Rbx31~(BD*lZkZulV|SnMN=tY;h_6rktbSlR5UKe4#%% zB4aKTyrrKLo0W4K0*j+jMPv$z*rjGv#}J2CVW3gd*yx8{y~c1Er%-p)3{Tqc&+}b( zDuF|cTFZDS@R&h%+$CgK`=+t^#P8WwCg+W%r9e`0xxx)9M<%i!bIT$CPpg5rrmYrS zdt-cp%9xN43uH!pM?+pSQu{VE$W#Ui{&P#h89l-1W)zw8m0aMR2FEh}H^A@uA zazseRS|!ohApXWjQs5tBX`f){9^aTPeKqQlCj5}`Mn$YHhM?7 zVL2je0449-YQRqIdJZR=o^WzRh&{E<-K8j>xcTk(Wu2o+SMX#yg{`gw{HSTARd41~ z6!TY+51Rg)6DOyy-;%9e$VFAtz8I44n$&SKw*C}Bb?Tm8ISVZ^^a6Y^LHLi0Hw9Dc z5a@syaGTV>(dE?R$JeO-_oDSvZM?4i=F+p|Gfy#t9vzkA(H-)0UdbuaHslXAHa6&p z0Z9>m4jH$?M4>aAgZ{?LmQq9L3w?MVJg3Zm=UoahTUVck;MV!1HX zQeoOXTaZ0P( zW3a*)Z6W=m#Pn}X&zEoX?WBM2<rib0NPXa%OZS7|Bv z&5a-pZ>K)QfZP5Wc%b%ziYwP|-|*I)iVr|5S|JS4Nq67C$JLa#^eM)hxq3A7R@j!z!5gi-~{3;%(^`%QiDa70|erl9PJAZXS5e{lC-$Ox= zkm9uy)gC~y^kNOFZr44&Z@Pbw@-0eNF){loNq1#?$?SXicydfCu@I+;q(!nBSFfPF zyI5a@QQ2B6-p!z(5nLtcnC~ZDB+5vWrGLE^XPLFd7jsdptVN}8J1TVFECa0y4WWOc zeg11AGgqD}jNXK4Y;#&za?IuI68o4CUE@Q2aE=o$u28na)&Fc$C6;csv9RZm!CG8k{6k?hC53me=_Udn$#MhR-}P2bbv{{=``VaSR>LS+8Vvr#YIMw70{HwD3S=Ld%8jHQyF3LC0=T)cE!m6i-8 zw*6jNk$hD?{Fo%dirZiMVM!8$UiW@vs#VYHrmgZLJ+U(C?ZV|9Qw0Y>Gfv1Tf?wHg z-fB`NLshLydu|b|o4m;rWb}mCTp=rKxL45#qCh#W>cv7xP zTS;}ufr=Oe5(G`13%noRK(ma|61$d2=?JXt7u;e`6rH87a?$D= zA^~nmDn_oeh}v&kjm$~+;81SMLm&hFcn7qVzY{KhV-?hE_P2GUH8b*(yr)l-<-p|! z&JzM`wtVl=dkjN2_=c_gdvI`A5gC$sZ~NjR?9v8&%SlOVK_NNmd)9X?zA5;&H&SAOGbR-!L4XCuyIwctg^MXLt>-pu;=1`qMu z$%&U>&`7z0s3wuDiCa`2)pML*=%+6`PNdwyYhP(Xd{Lq4XP~Ou5|X# z12vzY`*p0raj%oX`~A zqYDm147|HM0YrGd1@6HjGVwiYoA{w;znE5_a+&qRBeI<`ev>o;^+i<^9~67mnNOya zn_`cKVy6ZJmIv1WyJ-QFPgAE`^B)`jW~l(_nAq4;KWge#AYwheH(wEbHx-$wkmhKH zNmwjB)v3om@Z!U1n0$nRI9AhQw;ziI7teO0twiOYzBmvD5DR9l6u@IyEI!+?@>G#jGBHPyMb>@gZvf;f*tJH$3py zF;cv9?FhKCci#!@QjY=7)2HtYKAd7ELV#cFaowHxq~F=pT+8m2Q7k_hV|dT;eS8`=s$%9!T%Y_GI|X-yJWtqHT(*$JEp@J3TfN z*58_7WIXx(k*LyZ0bm#1PzsUTPN$s!HB->U8JuTu$ z;Zu=P?Y4%{Cc|{c2foV5WDmZaV7JQ~iiG*?&U<}UrS-1WV_p&`&muJzIBO&UVL6YF zOv^}@oMw~F)I_fkM+cy`7zzJ0gxEI@wa{d+ax6;Is#7$aBWM#xa4+?)J{?t2^SzOc z!Vmf$bb((kkK~RDT@qayuxe#V#g$ju4VL0Rb9gX8ia;8G$~v50#DC~BVc1A^T3&j2 zS^DP*3}`^h0Zbr|CEpIQqFA6%!uw( z4T+F#_KLJ3`UBdUg00))DyhCvPST<5`Kj9R^$EJ&-3e4s=vH986Kj&VC###q)m6?` zNgkpkw^RsglfAK-5HHH7WKOH;!{wX5)^e^dEoDuvE&S7BBZ_%%@$iLgaFwKD-$->6 zJm4+Z0%%^Dq+otTJD?ro*@YOOcs?9r`a(m%~*cLkp{CIOKcw3rk)GcaakjjqFufVTTgrRP) z+o|Q0WKpcZO#n#VyA1+|50?PR2tb21$KnpW_c|?NfZYCYvG`bYjv{wFK{)W;UC26q z^N%+vU{g;`^-o@&b=aQO1W=4j4gpszkfhnKw^ab38&I79@yke?;J+F35iu9Q!zPIt zwQyL={GSrmDM*MojgIom4zH`@{XG3r>CeoAF@Dq5FmoGG#U zQr9|j1o#w$-3;Pye@^(4)@JvaI zYfZhHRRmeXI0T-?^IrLIzL-)e@$E+$VzgT8kL*GfgZZ%`8h$ASOl8+~?GmKo94w)_ z)24t-sNr|8chCayj37C#6lj9_QfP4u7vPctFJ2`CATsYOD#Gf_Nh71zX(`kkLbQ~v zO~#RqQM=K~ix$eEIkzgs-d-G5d34=@gmFc2vI+f0@F^6t;KW=jLe371VqR%_4BWe? zJMnywL(b=$##}ZR3bps>yq$kk21otR3kIk;)w8)}pzN{F&lH11bh9oj51abe{Z#5l zs!79k2I6q?J8qd&xEf0b^GeQnbF(q;SX5b1>O<O9~q z2w>_7coUYBN0ycfqyfLzg?I1F``5GMGlhZ|xJ%XePEa!%m>#6T=ONP`kruDEhp%zZ z{ZpU0Tg)veZu;o2jxVkh4S)u5Nuxzl`G#&12+;w%*~t1%f2m<_ksDFgZNZnMRqnj(NK zBUjQqS z)U1Yq0;A{bw3z|>Zw>+8p(2K&fMweu1S$hnwA1IBJ_S`jJ8XJpS#6dh!r-^4m(>WU zd`~z4#@eoIA@+Yt+EMR(SE}i-YmC^pS^Gb;OqIVqTE}@}*iJzn$L-2{H=~sgvX06F z!vIUw@gpoi>E7}>B3oeBod6iY?lR#R?srHOa5{ua$N#sY?5vb+-I+`LUgU;*k#x+= z%r2*zODM8ZEt7QLbA=c1u|(CJtvFKDk|El~JiObtN`V!HugQu|4K|v~+q+~fCqj(u zAXk5eWM$K1ZRz8Aj0y(u-#>CNUwBtmO1{FDSycH2N|bu^MT|#*LoN!@t_$*5bQ3o` ztv5F`P`}kyakhX8ICmi<~^* zS17<%Rtn$LJvnW;J~tX3N@@-<68~EIJ;QpSHLWFOOCi9VFUVS84KE^ZK@MH-CEsM^ zQ_z}ooOUxnp`iNk=K=KA9|Jlq;Sly_JPp(SRh82O$2D_a-Xrr6kG~SWc~L_2MOGhT zUBB%Wzg&L;uZqxhNEf#PU3^3V-xd%{e)a7Ct_*omvhrqod;3)7UYvKalHN`eT2n{} zwQ8J`ad6OL*!HWtm^k!X&Lbj){_;_%>-`cmibp|URL346zvy$8-N6A;??9}HnLyo6 z$uMda_t1xshg|&C#}^{=DRHG;>AzDP(w^nRx>vJL<_`_#i179T)vG;jKw5sU{arww zuLh)R1m8OPK;Zbh&8{TzOmiI=GE!e=-7O^S0aE!|x;8zP40#)3h z6@n***)c`ShnF{8=4vr>Lz0t2!zn*huN5wS8NC-v_T1!Vvqfzmjv@_=2kZTZQg%Ea zeX=DZn*aRy^GVT`V%UZU>PCoBMWnQ}K9Yi~KOf86g-%8GxMT3;S%S;j+{vA`MT4@H z2qV|qz)7MM?oH_NYb`DJmHKibSz|lNtp@3@tQ@!2v$L$VmI)kGAl`a7OIfi(BQ(Wd zY(`%g$?_CYeAY$b^&CfVp4ukY0lb;t0K#oZ*k&4H3(ln zBq<9x`4M^6BeA=Y|78At8y~ZxZcr@twF1vqP56i%69W%p+sa^2)t!ZBfg{4SCa0tp zV{r~L-FGm+vZi`_nv$qJpIoV3ZQ=7Adv}_Q06_w|=cG^hNbe8;PVeDWWByfJ>;q?2 zvjuRFOdAEv8lj%l|5F1z^-jkg)M7^$%au<9BS72=IXRX+ZXwijVt3U}vlX5bjA_wY z+x6IrePqi22{V54qZS)vnAuJ4yDj|vK9bBU%kZ!Ide-&*>9YaNJszR?{An7 z_MS{02Yd`;bc>#4KVr*VaC2m!n>g4!Zhd*h#0sv5EwFYV6G2(wlY7uC=*zUXdtCR$ z%)VW$?2MKTyjW`fGUiY9H}aLMHsl)Gz5FVPAO$(O)C<&KaYH5oJ8i-KMMia{kr~P= zYNOk{;{6gSEmK3$RW7vV*2{hhMbLIt#zT=4B~-#9Jv6s2YE`2C zG*jhi?_-~14H+{LY_v!&g8Sz=uV?g5JOcLA}zl=QY z@i+5<#q|BYp!W_O(WGz()x_rDG%%cSyGDiLVjmDm* zoOQNLW6|beu_s89lQJ^OCG%9Hp-*t43F4$mX_Ay$#34DGskBf$w(30`XKRhKwsrUm zXaN!Cu)oa)fQ)EJVjyH$eVg{Gl5P{?ah9L-xknV8xWROpHrm2z^d8kgM`W$jr5mtwf9*5)lsPH>yq`Vp!si-UtMh5YAKMw;ljhZpeSlMWhIMndH#fn~Hx)ehvKQ`T2Qr%wd7CWHJybk6qJSOE8P9t)PE; zp4<8(9sJ#A4kOA&Cw~H&kTl<@!@fU(^tpBGkB1E4=ogG|>~~pXxNq=`FIZa2up=TF z@#K|HwhxdYBxu*Le;qwzc~mDT9~L$V4YP;24=9{dK@CXW)3&h!<|bJR<%*aDjTtrW zTl8<$VqUh!a9Z_Wyf2oC*Xq*+M@8$JHSsDO$nn3!?ccX>YK@VzEp#kln7bjd@f};X zt36vjlOuz+Znq<e4$DHN#koyo{>Xbte9on^X|i?*`&Z76nedf$760Eb&@ygEEJ zuy1J5A;FS5kw#pc_M_57JV$Sz9XY{JQD6rzwm)*itxEkWudige1A9m7iGq^Sc-y^2 zk}6UQ{cHX&qOzkE$nuIRD;K*}T7aeY>6r#ruie{Tb(|v7?f^c&(W^pxrMRnX z55C96j=G(b@S<#(vdteOS9vc5$$FZy2I1`Fvtlb(&n>bADkbjyQm>!%?U=hA2^1R* zdad9YS=?;qFj?Tky-T{R_UFAbe_18xsO`+d0f@lypV@4f|64h!{`g<^6Wi`FZ=A-7 zt(l!4a?-iF4xx`PpxlP_Bknzrldg`54R`%~R4(Bjwfx&{|E;VY4LII0fP86=Gsb1@ zkoE(SPm$8*EiSc6)d{s3{&nDJ=_WCm5r64Q?8I-y#MfU@=kjYwpC0yPwR%xKG2qWz zb-^kDF_CY!t~n2b&-Nepr5{eIvE)=!p0XdT+j$St4ds9U@$pTU5n1;buD{h%8LuHY zPAKN)4DpcPVYMv$&N|^&%$3C$)cN~aE)z`69()Nff$hv5($MHAWL3f{M?BWIw8%5d zP`#x|AOEF(*e{pj_8N2U5ZB+$r4xSaRvM1Lnhw1&zL@#2fbxS3vd2fqo*-!WENAWhgky%mdS{wGHVw%l}!Y5Fmf zrFHBZ0a2g54cmV>>;OR%PXxlp{iiXOo?A7ibc8|IpL`pNt!|l=^v9r*89OR30Ift# z)#E!sK}G!Glr(!S97VJrJv`^(Jvj z0K#EFx5@Xg<0UXpdk@G=V3)qZTsThxVP&Bb9na4g@dTw|%%%Q{Kdf*pJ<+Gf3Wfmx zFi=%8qbi3`@-XO}NoewHh;Wa=aBWnaqK6q(+Ki&P_|UIe@@5X#18Zfc52B+j+jltj zOjJrdz7WY3DKCgYE($kN({x8=z@5`UaxEN`($`IMU0fU9-$t^h8)M!X%{<~(agpYj zPezHnKZXocYs^-;RV7^9%sUTrIj?Lj-dMr$dno;>N`x>+G_BTKnh~~K_$A#4q5M#= z!M5RO%T?Kyu$T-E%;`h|sUGy_o70{uD*B=EI)l9889od0g8$bc!}c})^E#1boo%Jk z2!=~F2iFR{Hhinoi){rX=XT{O&APhRSe-vn3Skx1m}eR){&7L*YmAIk9*Bnt_pQi z^?{7)d}joez#-6renIRG+)3+n@WaG2Ws#x7Ozq5|6?7ok`tH5y;vhR;Z*v`UiR*16 zDu>2uwFWZ-DfG=K^|*l}@j-E5PA(X%|AT4Kec)pJZJ18^xPQ&a=!i$#y-Zw|;SJ$M zh}CTc_l3O)V{cR20v=9Vu(=w)J}`k;<$(mU-mfj80|%4Sw;XGZ=*uZL@7LS~`rO;k z%|=fMA!W{aGudtQKA%QyF>7;D^*0}pkDeq=7(m~*o+BnRa|tO546anG4y8F*Q9V~E z`4n%fPZGU$|E)%R;AJ7dg!+zj&TA}TZ8?f!J5LOtOW6k*m{z1HN>#`NlkD*8R{Bjg z%?~?EU$!n92o1})mPD`1PlAJ)b9h*7F+Y7)mzQ5wnyL*baBMa_MX;DApIJYZqv}ju z7%rHa3O;K>)T`uVoJC>k%V#9XJMyJPK1PVActSNt%C#TCRk3TX-rTopn0+a{U{D9R z`~#Qb?kD5Pu6CukF910aPWj$9u{rq+ch;2kY^%el|xwb8^#T z)o#ClUFZyiqg$S47(Z?){{=0VK5f}4K&k>0OP*(f#QJ6#Q|Fd z>)Fiyulb}1+i*fy?J9=nl!^ZP&v4Tz921Z%vl6zTgivOnyFd;MY!)+rmyFr`z6-!~ z|1MDemGX}~)Tk%4%~<^R5c-V|x#NDVm`ScPKJnebZkFW=GVL5F<19{YfAbXmO99p# z21Ai|wZu0V5(?7G?GEgr2#s+!2if)a0-lbB9(k1k5MS!1tiJmC^ z;{B{Wxb%FVdFe;>E1PW`vS+0G69Se^@AN;s_suh^lsP^i{OWJtP;)^vH;rC-k+85E zMr2goi#DAHNHjU>?S@B&?0~R$j$irjl~>V8dh{xvZJ@6;3ra$URb!S zzUMlvk$-XvJ*7jRzRxWAHWsL-Iw+mVNFLmu2zQv!v(imo-E#fB!Uz|%c;d9BgmDx_ z(JmscZ_~T04nrvB;-fym+JT~P5fZ04egKvlVwyYKR+$q}#y=);#pC#}tAk-5){7=S zJ;)0%GQ29!p2%xz$ISkB^!f)=U-JI*TkC#o43uBsvDe=ih+SfruKNFjDPgRgy62elkvLE2rH~mx)#q zs1ico8sebZ7(XM6-Q|)U51_ZHKONT^Zhd9UXGeuw`J>`P2KO)WIV{VZtw#Ms7ftvC zNM9a3lQ!O@^g_|CI#f6E!YNHPSCC@S3dJiXIb2fQcWb(p9-Dd{;` zJMHtoeZI;7tdXd9B!<$>7+Sz62MCt$eyK$Rnlw*+MS1zp`na#+LM8S}Plm_3cbHx} z%_SLs^K#PG8S-UEvu$n8F%RbGo$aB^-$qqb?)%I?)ZX4fO?vIfdDw#AtUgjgQ^V2; zpJo9gD7y&`#9T?-gkP2&<%Tq_aw1No&sWoHxYIn$>15lf^)v?sT38Z<4T)c~pCD@% zC*;6plJd!3(O{p>DS&nT*~x-(^Jz`~RC##`7=m1{8ALMyY2t3V@`|w}Q|i=xrfjdeZdmvuY1dPwBL7v%j;^n!A;2n}*ktM!qh5H#U*xl~QW0xr`QXqZF{ri+F&YyO|L@*V! z2Kz_wwx|3ZOWlVptCf^@9l74#4CBR}R==;43>Nrmxl+}hiBG(ouqH)g{0flhtpq}X zz4e|sr&sCo$908YtJDkM6y$Nx=C58HZ|+*uwOvK}w5mY=I?-oNm`<|)t;PAMlI|7X znNIP3hRq64=aW09SwDZh%HUzE&JH(po6&aLkTn$p`c@SU#l6v+7jL&R=cxS%JC!j@ zT3)#9_S|Ukk5QD{((YQy5c7vgUZifqdvyjpg2#5|v#ls|85OEMc#N38>K$ONb|uQ- zi@miq{l<4A_xXjQZ#4UL>V^`#ILA<6!OfTRFeM6&YXI@y$boJN0ADYd1RC&WvceYmmZ@t|DrsziC!KrIYy zT6KM$s~2JSoE_pj7B}%I4dJ7=2O|v(xtS)RC5F!qEort$r~mZ{?H!ur4nrC(asL|m z6~)!%Haj%_NnWLkX9rUf$R~v%Ht!cH%}v#hMXhNF)d9L1t9HetcTLe z@ZPGa>t{)p3(DENE^>gDv$%A1fvOT_^b2PzD&+w0(kPd7h zpg?U7;N*!#09@H8#&4W#PDceKhD`wDo{9`4GnOF!+7 zd66N655Uay|FrwZ2}k2z6O>F+K+KM3Osqdu`vKu3pwLjPZb2Jp;+@I@0K(vIZ#X!_ z2)$?kBALNMf0;smjd!0=)5cqQD6CUt)_T8u9!bXCH1hLLpS#4Zd(fSL|6eLo?>Q2fUx|GOvKZpy&|FN331cFluxxk0@&h zD|zy~_RtH~W^T4XHN$5uq{R&&^*{myiaPE|FWB}eUCdf?P~$+|Tb1&SUo z_+IO*I_W-UWW`bBY+5Heo&ST2aB<90i2<{yfIzNFNQ7Dwi!^d(B-`qDd8M%aPb5$o zk0wQD*Hg?ojLxO?ZLRYE{6YSF542Y$p{QcO{SMhv>BF{$qkBD=YJ60qR7~NoceZFo{=8k=d%E3|dlBsRh_M#X$WN2v>+f)E(K6ic0rxR{?tPqT1_H zE%%BqK4i-5eg#OiBb#%Qd+0usKt~E1eR?0Dp)JTz64C4{1W1jgGi?VIBANMkY}esi zIEo)paND}uPN@G(JtM#iH(gEbeieW>_APdSncrLGnWLlOtc(1K z>yNSqw(dHA(nI&ql$7?&9Db4RNN<$8-dVO~{HE}SvUBFSl6AT5)iI(QY!@8UeR}_g z^ZUG3G6$44ssj5g0EUVCu>aXne+y0DzZI(7@PDm39JVG_4{@ta00}(?@JlWHb8tEb z*y5X=>-(|TZ&vIl&Hqk(t2D|oB;Nn>?L2sPn6+&49_qILJQJ3`gC3jBg!O3`_^Rc| z?S2URv&xcjU*h>A+m}_$$0uAH27-_1e~Mn46%N~x6SRnxAaL;|RPGWw?EL*1_%1Cs z-|a>p%CK<(QN2cy>m8I)iCJ&839`GIG)OfkP ztX4X{ku~FE_<0iS_l|GEElQ1+sR9eT3uB<9vAh~8yCy|pcHBQ>oWTCt zWR4F`^lBgDyj~T;@V*FLxi&VEruNuiJfbzEqqVx5Jl0m-{9qSe^OL1^ zd3WGe)6V9coxz@up6mM#&JGDx!3u%d5vu#wsU1AqjWHAFP-3t&roim#u1J^IC*SwO zXZrkG^<4#ejKp283Q%fQN>^yIw!~5& z=9j(2crr8mQN1L>mXhK9j?q)f`FQ%$hd$n9eg(ktw?}uAg@1yV3C5;|;3pk;os<1O zBwX?Jm#2Aibyp*fxPSWvre~x!dIcCc>>txrcN)lY(Dywa^9(3xgnk`ZJUa^QAL$q>R*^OD}58U%9n4rq*Lo z*ln=NHDeiIL6{klIl0hn=W$V$6}x{tL~`g-&pvYGLmPN5bHKM?9|sWc6q zXofl*^h$Q(EOme)K9A4n7IWaB*Pn9p%;yEgm(@zmlf4O@ToqY)b`$&lhYIIwL6vNjQfX zNRVr2`(hG2f7`${${%e$bn9h4vz1z^pDJ4{%)E*-3B_}bu{rmZMI}6Ao#M*Q(mE$S zLuM4T$l5sUTqkSxGwu2Cr1^d$l-7p&Y`nR2VK85>r23}C(mKTtE&0Zgey`@iEKSKJ z0gs~`H4(#AFbp@%%3)_`g1Qk1oTv}+I)?kr^5LO;BR*83!lK9!68h`&U~Ai; ze83f7s7)#D&gVfTbSG>e+)ui+s;X**!vZJ`zPp6t;$9mBVyW!)&fWRorpaM5O4ugznrDWYmEfCbvyaD0z1#GFB^Z(ycDgTKQ-ds<1*nn$XDJ{= zEX=UzSi0D>%&r7b7)ag@uAWc5Fi2%-`j4dz>kx5{BHLbyZLLQ+Sr)B|bc{%>uNCCsamB6Y5F3%#M$-aKNa$5^5 zj_l3qye?6#?Gj^&r$lLW@J4(zvgO~1uJ2JYQ$1W-pKkKM+a4D_v%dAdRcaPL*9pzFh| z8RV@f3xf-Vh6RQ;Q`weMuhZIEcV361LElO-z#;_|8&@Y*+@?M70okWT7Afs|!{Pi8 z%+MrTcjfiyMeg9Y!?dX0pbfxvA?m(ip5<4kJ)j3xbu()q?WAXL6I$_dmM6%4VVIYm z&Dx3mZ}Gn46L8PqyJLQz`c<2Np9#fMKeD`S=5s_){64oYAB^n2zGe|&M%`2{r_fw} z=iGashsJjnRht*q)@#lA<<;=3D$^JX$cc5G_czO}j2c3Nv`r&-!u|hf0WNqZNr6NJ z0+)`*#4yX{ZI~Fp($=0x7l=C)mG{N}AfZ@HWrKQZ&n%LBfT~_TzNgQ*QbUn@D`7RC zxa9C23n=-4{+g@*y+<*$e%HLB?%j7=93tkGE)V;C*yA1&;&(ax9Ot`_k|SCAuQlkm zsoT3PGktU5))MEYQPhgK7a(};{?r0Ax7MR5BfBLz!KFi-86 zXcVZ&buyPz%4I6%x{ZREnZK(*GJmRdWtS!fZam|SxzRJU&KNJOB=fw>ySt;+>QJyf z84oyh*eL=Mvd^}|pUn)_F(A-tnGs*YAw*a`;p}i8`DrMtVYvkbICY<%` z7Wl_aQXD|7DZ0ZQ`vA1Lw+CoaUX^omMA8Dce~#a)2rgKAL*}@I7anCMdDGUy%Fd1s zsB=Mmbva0%gt)G^8VL3jdwQg9s{N_;gT~o%&r!UckCrakR6i?! z^al(x7q+k{v9aVKX)*zU+L2|_&n|}#dwvr?YQ3J=4WNs<*{FA0&QW*-D%5<*rf+xt z{%2V?58k2ns@k{x_cidX@2$}VV|KOvo7%6u!xT;yJJ&`8eA$>J(_8Zbj;y^VtxsrM zJB4o-xh=JbTvrIAck)T?r0JG<0pm=(6tGvZ4rY9p$Z`(0pT==AI_(hCoHEWqg}uWo zC73@`jxthy`Nz^A9>F)1BXzVQ-2!}G`#Jkpvz{o;g&K0F7BB3s``6Kzg9ZohE+!jIUewdEZzrGY3~% zMRAGT?YjZy+4m8s&|j!EltX+q>&Ng3#!wj2BX6Rnhu4=mC#Cxp@I~hRWh`D|EUpP> zy+-#sz8c!3Sg3o3H7TvF>b0rPAPO8~GWF%<9k< zsYHU}naghJRbgxQ3f$8arG$T<#U@z^9jTcEW(oqbFxCdKJF7 z3a>}EwYO{B-H>ty<(YVam@~B2pFyuby_lYyr1+X>X5pX_Y%3?pF00)j_qAu8=zpaI z8nTk1q3bk|!K`WjSI&!m-sDTTjDq(ulEh|DLG3|%e8L|kMJQA!uw_} zDCc$;9jm@|>r31Yv5@+LEhySsH6J!Ta(w;55Pgi;9af{@yyTD+^JA%Ioa2CZ$`$1Z&SlmR{T8M*N_>pG6WSrnQxn<3GjlRI%Xk>&#xS5wAy63*+ z9p6_)NZP|JAHSLHs85Mw!gTfxK_hkDS2UDcJ+5V{ zFrCHGdutAv78&w*05a_i->|C#hI_sucmuG)&8Q5TcW^7kqm+Zj+@jx7ePa=zY(F^N!wsE_pEPIPZ2{2!Dnvsd0Cc zI-WQeb&0jgDxOG9AZ+p00O2QK*##5_K6*VVpc8)Pc35{`Dsl_FoJrcNA@i=z><3ka z5q-|B)t;j7L9F)CMB*LSnbBn=S= zt$-d4U!7Rx#1qV`2(;oU&QHCLk;=A0&j->d&Rw~5(hYaGmtS#oI2~dECBB&Cv<+X6vA^`fg0nC)I{d1WmrTf$QhCs) zB~ZVbIlbv?%XY8C(x>1p&#l-L8|?$Wdan@O#z+K*=yMFlA6rzYiMMCFz8`lc_Hdx0 zq_m4JkLCK?)nM_)QWU?cA&0_ixVh_3LcOOJb=t*O1WBnb~hP1+|sF0*{=x9;O+Ee~8aFHo8XJYAtHRu+;$i zX6j^4SL6A_(5s1JJYHM#7KKNaYUa-d*uWGZD&~V+>rbrlE86X@q5^L(@;sxipggv_ zce7P&*riSKu7~7Gu=6A6Xk3tzK>CYTuP^EMm%HH)qEC$qlB3cCS5w%@9_nDr?ULD05Rl*2}UMD{lIMWAgBIcC}osTN#9l8Z1_ zAr3cUf|uoUj~#b-7lZYL!sdKw0e8Ztz0sJr*M65-Dx0RydY=91;5t7;E*H?<{*gPE?vs88JsxVtwxi z9xDR<7oaO~Ut{B{f85MK+{A;xaktJm(%|_CGqKH3`BMIlb;=&E+ViJ>0grX&J`-_{ zhFUr$8Zk)c_Cuz*3@f7`PrbzWN7b1$CFVVV2AF}8mUHV}%~L06r_cJtV^5?}(icSz zpeRiO?^JIQ4z5wr3@*FwZOm%SXZ(9>+`e}~gUVc-!)q?p&a|kLmHPgFTzIC!!VGoz^p?}KoRnX~<4X_eBgMjZd$8+tyIm&-t@q8v-@WT0 zBvCEJbLACry+hOQX}uy zH{v;9qV2(MZ7j`i%=t@eASyrhn}?FOY(bKghp|`B!^r%q%8;`;1nCyNWxycFOv+>V z5igJS6Rhpp23WZ`a(tjAT{d@2!{`KEuu|H4^CzC-`NgEp7nI5RGOpQNoIb~VX_LHc z;tu9jq2p=w_t0XRm2=`#8;2t^|C#|(P$GixbK?zQy(}xLfsAE(3+!~EL=)EccAiuY zGA3Ezp>v;73Ylkr1`Sll^i;juc^h^s-8Zpl!D@k@CNp}pB}biQ01>U8SV*IF2$f8B z%%&K(QQ#ZZ8Ka|%{EV74Q5ke;ERR%ce4%-H33Tte9n;O6GSbswv%4}Ix&)7^rV$Lq zQg2)?O!G>5V`hl%p1bxk8rek}z?Uxbe50irC?Hi8I!_4$YG>Q` zvp}kSs&>vA`?)nCQ|sH5jq;(0$29fcnrXNdmy_0(@0~05vuniEny>y74&go+e%IMT zQFvzWmECkoO{xb|d!#KSGvnltd7@-Hwv<_9WQ!tu z9{Zq-5Ql6B$I8LM!Lir*y}Q5n=f3aX^{0o&+jWlj>$+a!Iks-lB7Z3x&;irW*EQwS z!|RpfEZ!Nh^?3#;m8qaL_o*?@P5==N^pA>1Ld>k-SZC|Fki0RA(M7KeA@2ovtgup5 z(O>-#hN0pAs|WX)pLVDN0)jM>JXoTL1ao3X+_hVa?@afX&K9ru0}3Fo zoqsd_F_6ufNZwkeJiRc>zQy(o!RBFpSE3v(esSngYe%5&qVa+Au@CJZ)C$-6A2M%k zBtDnhK)SWOU0y?zP`9}q@{9e_bR`B-rkK9o`uz5ruY`S?iKe|VuI={}N7u^xxbRSs zIDJ*ghh;u&lAaR3UCuSuSw*g0FC8a6fyRC+)M6MnQL^@}FU0Phl(EKny`BsgG?xr5K`blnbgIlYQ*MQ(6~Z$zteCYAh@cNDWHObD;kUQPMGX-M5j zqk=Or$7y0}0)NDp;rMXojL0%d#LOy3D>U;s=sWmkoj84DH2X2rt-NB(}o=t zO7k`>P~Wn{Ee+4K!Nc7HIl(%#)1FPC?@vN1hlr<#2hjJqgg`LIIk}f|JlHc4Bc9@D zcUcVxb)pM1%Ggo4jNj9bo-uYOvMZsd>edwj7pv289>aPAwL&GODc$xCt+RnaL<03M z+wItYgz-b4=>fW6YF)mmU+uL(FZOi)Np2V!yTLZ)a(Q|Do*x$OnhN^`#t4Toq}~^@+m?+NM^B zeC^FE;K&*0pih<~j;)f+`5jk3KR)noweIY{kgLQV9{5%4;t=b(OA?<&pLkkMYy>AZ z0~@vtols1tEoMFM1|*aEZ)c2DqvK_miKeUhw8W3`v=aB(!O|&3u<=*bX2p?GDcy$8 zJ$cL$x%;1PaC~xOY7P-DzRU#=?a;fIjeH$TD{}1>OZ7E(7JMPX6O}G<$EU5}^4Tuu zXN;~WmV?)1_Mq>BO-M{(@SQ_IFPm91S5SG%9i_*mEj=1_CUyyJR%{Lpe?4k~xRaYK zQ@XXBrficowj)ud;xWYEQlI*ZYve}D&fGN*hgrx~o=CHHOT+p?yzi#vB~~P6(KCks zQi0NrO&Z9~$#hL|%nlCnGOwO}T0f4r2uUVE!1r?@%;vr~M09*c<0`H0IU{Lk`U zJ<2J|eIRn9AXfI$@~1B=(~Hk!-OGISX1+g&aa})PE{gHo_;r!+@=uSiy6|3slV?mA zM)xG+K=AhHgld-W*``z=M4RTzHm7flx~Wo0GmPiQOs$>7XLQQ&J_-`ME7sZ|!TXp# z^8LEcwDUaX+d3jHAjom*UdbO=Ms60Qz7r&Hz5flw?2hL|hWGTK1!cRX?z0O=0OuIF z3y=~2EanQht?Zmf-}fvG$egJc?U+#8_Q$U8TK=xQxmLn<{nLeQ4bN<47x$W@o4R`@ zGT5e90(%_wS1Zdr6&&4kJwebtkU=t$AtsyWBx(HT#h*SNQskqrGj&Av{J40``f}e% z<8Z)glOKNO(=xzD#gyzk{I}q~Js^M?1oW|pp7v91@9*;e*Puldyf$|fVcht6S7Y08 z_%nE;m1TSnL;X{B(jUjXkz#z3S-Uew4iTOKwvVi9$rJG9iuGFyn0svq-?V~t43Gj| z=uvO9NAiyH4r_&kFA05jnF@CDT`p-STSR(SCu?xg`?Wk?O7T;Hivs4 z512lqRyahxgr1+cUP0LZ8I)OQrrPZ4*I~afv@7#ww;|9mIF0{DIfI_97*vZVy9|Es zUXGmIt|7zX*@iWPvZGt3s*ADw0!>4i)EZycAU<_4hIs1+!G&-{ulIDa{@2S3s%*B1 zF=17tzC(T>Cb|!{?0J9cB68qN+4zYc6WI+o0cbBx-0QFO9p3}$lEojF+ZfqlS|DiM z^iv$$Y@Xi|)7}-u%x(RjgkCpw?_c7ZAO&B+Ut=`qzF!>nagthrn&BN}yq$44nW$k# z^i_$=V~aj(f+fUJG@z`Ph4`uYTd}Sqm7p1#UE=NJIQ6=CJ%v~e@hqbDVY^?u06}+! z!Cs2qN^yuINjkVMy(n}4%T!~F@4wlL8;#P}n+V;<(PdyqMHo2}_m#ffWMhbZ_LD?K zk;uU&+fgxgN^c8dlJR!;W^F@VK~RK(NE}Nx!bFZ>+GI$0gaaB%cAHc0%ZQN(COpPh8z5e6N9kw#B=V?l??~973eU!>mRXOkA zP`Qp*yss+mq%ri`(vOYlTW0^*YjhkIil0u}$AU4M^`mIL1V|K|SB zWc4^m;y^tt`S~G3p`kprwCjoNLTdA}?S720KQrKzJEq8Tx@wGx!lM4Xl!%GdpE<VY8mV5iezjFsDI_NF|*8^;LcUOH}rp7l-B==g)BA+X)}yj`)7a#uZ7z zcHe3zn#hW##HFePr}1#?>QAn>cS8_MXKR6USJ@KtiMmVDrlvmEhKIMZzx(2w*OG5{ zt+l1fI{CD^c`n?-txF(U<2C} zx}J$xp%NQ`UiX1^e+Ys*563+@!f=s#M_g&-gi z-f$)SsD-#2OP=&|p7Y`@&*{6y{PA>A+-ob7qYxh_zN~t;eEBy9V}s%Vxqgv+kmBkP zxl--b*r#|2z1AtL8~$^qMb04<^OOAJa=Wank$pO0M^QJamyCL^b;Bry<2>TxEsllr zY%Lwr&+mRVId|Qtp4|!g%lO0R)TI(TVFTfjSC&E_SjMIYW3@SiA>!p-UFSo5rk(B$ z)CagJJzfXNj^hWJ{y}{bE-%KORV$fear|hVQ6$8Z`@e^mBceZ}6yz z>6g5LAB5Ucz`Dw$UAUVj3Dt__>P1DDxD^~@uKrI+n|*bHJurMt{yz%l z@AWu=>V#-r-qh4I{mu~pUt?ij3|9MdIr}j#Cx!ckd&k@h-Z7=-K6IHr`$EdTuNhSE zs9|Obo8K#fOq(~1aJ}U_&x8FxB7nI1QdruT_LloBlQz8B|wXd@9(LXjkfYH?;$fKozt?{8KlrPO(~q(4$q#B)d}WTjoG zYdN$8A zzXW0LzPCCZ{>W@H8$WLMp?WxMcmDk7#YmIirSfkOLbncWXLA6|*y5fHk~HqUWKu4p zTUUe!=nsAG47$eElbucTW+ZYO{6z`A4-)OIGl8$ueU$(3ETb9X&#hrbg^QboQIkDm zJ8KYh%`J_^ALvj$>>JBp;2i<#XYYcm$RF?8BszEb`snOComHC%tL%a zgA~y9x4zLOWd>e(E8tKCNFP2O0mRyEK14lR!C`oONY@0=;qc{HLF zq=%tL-y1-2e6c4;^nCW5Tln-o>`-k@0U!g`VH9d3QrDFM=q0a09Xh-xmNdU&oM)Kv z#be~!1JF|s@=wiQq(GOWtHK(Z4NAUtY~{1<%4Iq%Xrgjoub&zP#gvtPuY);Sh~Ula zQeuZ8964j09DRG=X{r5UX26o~$Nat)2Yk=bm1nSf;kPpgM3fyTwfkL9c&fx#i;{zB zQFLBXSb@zWeTjR1wV}LZ1TMqh}%Dgq0<94s(-v%3fFYuddE^T3@S2rq2$LDGU%cTC+ z-vA_A|Lse&GHd3ckA8BCv(=X9>yi+G$G1=3X;1E`CLPK(ZIkatA=L`m#;7^?wN4un zJXzvG`8zQ-TM-W14Vp>!4M|X3U&~ji3ixf?s?u{2kh>qxN*;+WnP`^9g*ZPNk)ipj zl`LvP^Ce8b(S+^8*~W7E!$BRXtxnM)N1;!P4kGtAIDGGWpta9>un;>U$fd_hF86Aq0T131LzTu+V+6NorO;C6~?=Mkt z3m}h~wP^#iHOwIQ?f>e1!K*W!{MT(j)iQ}TftEs)yYn4~76&47b?~A;a2J^tO2wa=f z<5HlrX^9gw6@<4!U7Q`ne~4323wzCe;T`(U{J`vd1r^ER&a3ACU;!Ndgq`{E20q6m zSZc#`Av`ImcQgHtd_y<@jH(ncJjgFNUjKZ8JtchO#EUoIxqdDHE`4n(Az?FJ;pGL) zTXJN`{5Zp<8W`^F2b30`X$$H5^6oH3N{LXJXsx@`X}SA->k!s*cX)vbT&2|J{_+=20N|6W@kuYfLz{Ck}|iGZRf z6>MeMC`D(QD6O5zDsru^@{Km9y;hVnlSjrBCM(L}sFKbY{IQ9l;FI_)Ep+^XKqc=hP%+MEtu$`^xAk zzF1{=>3pO|+Bn8qvml+Ug}05D*{@43U^M~hW=o|9R5^Z*_C>}Vv2Qo%sQEJOG^wi1 zfCnaSSL;7K;oEB0`&EuDc^993!-^AG#clKnGW<1`d#A~0U=Hsf(sC3DcX&0ZK+31Q! zNsw0IwF)h+wd4Lcf<b?HY@TAQ?)U{< zcH7j>Z-Vg=cbY~iwp9RX4a3z`8o9A`n1T6elE)k99S9e2f*smS^#p2?)9D#snNI+p z@Y zMO9o*%k{EE8Obf$K~^gEK3swLM(DAMbQJw1olEb`W@;X=fBdbL4bUpih&>K65oM7r zw~F^VR25^1b`Y&5R1Zuju)Ur7s-`Juj}OdJjYmt-Xzis-&r<2~Nf~Nzinc71MzpSL zQcqB{o7G$%cG5g5WLpush*O2d%D=FB&hgmz1S>3?j!?)*y^9{MrBBmI9xg9EDP@XY zR?W(LUxjkc5#4iYE+i4h9DP^AJ6?0vKe*9-s$ldC*j^MBZgxTQZLEU24*~)7V`=rVnYa*58cV#H=TL{kc zcJ61K_q>a-@^zxKd+dw$(4w8gjI}b?d<@a8Z@%s}i(6)QaP_p;W$2z}U{>^zVP@vh zqL1p(7fqClkkEv_)LlJj75`BLS8xECYsEL~Jj8G@VFT8pCPS~6#T+bN!#J=dv&$bvf{v+k< z!*&F6xO#tb$LnD^$BGU6>)!!+ZN=Gy`J&}yT?TE9biiY_WDEEFad7mJwz@PYqXNwO z++d5SpB)ZT@$BcG*1ZaxD5L$BJ6^pw>DCMtb&B)Zp4zL-CySRCj(Aur+yXukYUc08 zFCu~##wjUWcG-+N9L1HpI3p$*S^q+QVmCNc6JbR-)r%{ql|(#9BbdJszkQ`_UZcEa zd~7t4G?81Zh^Q|r65yqptzRFI>yY~zR4FYs%Hh$t5cEMvy6oHO=>B(fRnrJnw^l0; z`z*m4H2K5>CQ-_yi8m;FVz2(r6Z%K%kDV{JN=SJS zE6D_I5SvOsJaWOy0nG44lW`sfDGX#$)55*Jp=+Gb;X*>CP}W*MXe02{k8xEmQwy5i z4QXSluvnC8n8?u(oFUEk#XDwfpUjx)?8XRe-8^&VwG4xQM~CwLz1lJP_%50jt<;y2 zhTJSy!Nne5-jlA$ZIL3b(k>y^DkV*xE*z~;V1i%e7*y1PP9aj-S!|Wje&NeZQ6--h zH(WkwVn|f4wo!sCcVzwdRK99eY`EC>7GO(=ux{VeuOq5Vxzz_(i;q6-9!Uy!?xDEn z`>e}NNO#(W`$jEoE%*x!XH58yGT594JFc!7^SmEY=>(jg(;s1rP)GhG`mz{ZTaE4a zBrsbiriSnXo0xv&3=OJ09jV@K?2d3_!OBYV{jyuQwns%@iE=+Fjw1P%H#70^A(U6O zs-8Xm_bQt6))`%y`_&jt{&YbEr0~zBaru5Pf&3_|`YUF34+ss{`HnMyy4r!7($gWQ z@5w6c2o8pT5-eDV*@QZ^#f1|&sKvz`x^+Niy&W+D`7x`JAI+G>(m6`DTn8P4Syp0sIm6raZnl&_fARtq2aN06JYF>bhjiAoglZYeyRVZAM5~7> z6SspEkyx4OvC&8cWwDPWmhJT9Dxx*o ztnzAz`K>P_-ZsLaS({AWd28CF;@yPz(n&9XxGh~QaAiMSE@Pc<# zDBr3SUs_IXE}{e}2M2Y?qh@C)?(y^(;Tm~v6i78@zK9)?R1Y(W6$RWMwGaYg#y9G^ z$>bvCuY3MS$MIb@Czi-r6ASt=J5mMZCYzj$rDpSw5G@r2h3#WpaG}Lp(&=<^xw@B? zt2A!xO@y_TDNu+ED_->Iz}XmJ9%fy>!f5%55e+>C?sT{yb53hc_>P*3Z|DKHMzuBrgWW5*08%2S-lNLRYMSiQKxge7O`EaH@uw;} zg{xSPC8!3|mdi!^4uEb0mh)dc02r4=<%W_oo);B6p|9~dxg$y^aA%roMK!>ng3(Eb zI@mJKb^LTxX5cwAl_P$tDw=$7%mQh@8QT@K`#2N`j?!r4!~l7|@pRPWoUfIWb?NAB zsa@WnXF4T8Jyqp8-sN~OxCsL5fq`sW@v@{5+f1u?1QKstt^rG%3~wAOEsr&fUxV3C z5nS%0quuxP8wpZ_l$+rV@T@fXvD6 zTpz7dP{dDE4luyhQa2nc4h^^P?d1 zfU2!URevLF*97&C|J!2b+E#{u7yDq|;PR(~Qc`(|p?lAm3>$j|0pxvR_2+>5bgjO$ zShGCSch5|vuBV{RwoRr|hr=1hcYY<{#Cd=$KhPnUV0%t9p3&o96L}e6juc>*nMqPP zG(9>-76%oT5<3E zQ*ir_+<>r*kk%^4iz=JKstzCglO`RG4=po|gUrY>4SJh`GH2+43#=Y}=Ij6~jJ*-yN^g2K z&Qe-_l())Nbi1%HO7Fr`k!<7oY&F&QStvs6g(y51%QGq9ID?4$_#XyD={<#QKSf8& z-TcT1O5rM(WFM8^PQ8>WXe%CM?>t)980-FCbg4|zuprpy$_k~xFc|q*hZE^+=8b$J zrirIYq5B?j{e1KYz2L*2ihyUJb-DfaD@JS*@^}zZOa!6hDQ#n;ilb%G+PoEBSdvJa z{6Unt)62eTI*)?SiYHhF*kHRH7tZ`^bX8@{rLf=w7g0J{qu*F!u%+R|7`l5~t?U!m zx6^*Yac{0Ry1am2t80@dV)u$|QaYGxYw^5nqD+pPf>g3#+gm*w3n^xkJ?Q#Z&Fw zsm!gcta`ZE{JyI~(Qt>{7vjODSJdo=1~)(g7<`O%S?mAG_4!42%=S1tU#=6pfN%q5mCI6xX0%d`hERpgp^6`L6~+K1DnnQSK+;&rc<`2I}6q2J(%4m+sE~!^u6N| zI*UWlo*S{KX}=CV3&+T}m*I0NQ0;rP@T2a5*p%AaIvXzkToaVJ11Dprr7G%&|BaiG zwT7RkTdH(PnIOytOBrYF7nL5@{TI9c&gY#C$kpTneY5Yjj zO%s{b_s+^O>c!J(hFiim3I&Z=!fjJ#>@^ILIj~cYGa-wuRZPy;FXJdakcHOwRUhbs zI-Usqo;drn)Y>7_img?dJ@=cOPZyoV!~pnnBc#RO4vGLRTvkHgc)?vg;OoCbQ5LLs zgjSbUN87S);C?&qurn;S%5#=VFlY*X9DaQm2QzY_lxf-|0H!2((H|@OQe=M1V|~bH z(gC{ybL6u59i@JO6bRTIXMfaiPkQ{p^MTX7E5bflfna~cC$^w1btD5r5fgYAnG*_0#?KT`3=7}LTTu>Me}Cm1e=*iV;7|51`p@gPh)_znNsof=b7z&R7`Cw zbRjpA`5y4mAFmABwsMdTBD3}tWm;m8hX_3H#U-*hsMQ;X;oX&CD^UK~unzgUmG1FCVELDL>yZ?$nv~gZTKfG3{En$aS4( zQnWRF^XJw0&Fe;s2W#yhz^X_PpT}igRH3WCc!1Qbm8buBaJ9+iQsO~B4r~NTCkiOh zd(CHwFON;5Wy?|iCoxFtmi;*`eaV~x6{gEhrKESvN9a`#cHG|swGT=iDqZQLHMe~dFY?HfwSK( zi`a9P6F;ew#g@v!qvq|_$h-$2BrmfxNkvWSE})lcmyt<9j%rwh1f?a_6c-h)Ne1U| zvy5VWrwzrLygFk9V+F{V-{}=Z)(a@k#6a3Zo{D~uZt_yJJ{oCztX3t^g2fSH zk^EWbS?GwW{{)K9(Drv`shPjo6W09stDO}?Kgtmvd$KBC+8AtXg>s+AKGN0QJS3LR z1GW^7jm5S%V6jTR@{j%}NBa%jP`H{PPqpte1htS>JJql#yA0DegPDH8<5tJb3MXBc zzW7i5rO5~Ekxuzf0pr5FT6dz6@7fD>CZBN{6O|=e7>u=z=@^Kt>;5!9U+|;C16mfVE^!y5~h0ZaN`wl3d?Zy zPz;j-lDQja)1t@G*b&t4>2N%>u$-*!E&AFEE||@6+GH$L%PgqC)q{JhW=VM}FoRuI z&U*izHq81y-L_vG<8k&rBEIDY8cn5nd8SQaTzLDbunQ{#Rk>+mdXWDS-NY03K(nJ` z7y~(;Igla{;jg1R3yY3GY`U5LnE96~p{zJkh%x&D!L5hzvY5JG{DEaLw zi#;J|oSw)fe8&9-D!12)Qy>zMH?9jc$kRKr%y{+h)gyxx4xbp$xMTpk7cY8sQb-tQY*Sc_3C%!Sn5aO&Bw_SLS@?+|tSA zzjgkCnCmBJ-N%_#?A09>WCAOk4Wu$z@SO|eV0%UjlBs^NzEEE|h$kh%KrO18Vg zJ#8)QkV2UiF(~uO$mhFVzVBw&pmb^=^|%Z^6<*&#w?Pg}9vrc;9_d2uKJE zsWZOu>7m@B<|(IEAH$w;cm5JThJ|l(M_KRo`Mf8nUWFAZwmSXDtW7i+(6gPE?QMKIr&l;Me8Ta%LUF`^m z_$}YG+2c(P092PKnb4n)3XyQNogst$zs@l;p8f>S`%P(Wf>Tw-``tzzYra|n_Vix? z-Rt=oEjA@DdmZRUovkuK=th5^AyD+&uI0N1iPo4vN}cwFXa?mNvvINA z)ryZFo**?0U7U$nZ|=`HpA5YK@on52;C2gec7H-mV^;hzfR}Sd$4jdauzjWxdIDJI zphDzP%}7C$_yVr7RYmU+r7B~!Ck&!=UIX!cPe(2lK6$&K@DprJ?4Y7`8oGo4IqrA^ z1{r8~+^x37nddI}{u;6i0C=Wo>kXL6v>~`e7qs`9z%Q#FzMeuHXKx%Ms zPfHi-E+Q~mqmfTTDv}Iuxtf{Hx}Tb-$5JM3GVC}ofk%Zj3zauBo~|?^gKF#bR?#ce z1v}P(s!BL`w%*AdgkDsOvMZXYs3b@eUMo)*xSOS?dC9!cUFL=6z2j*}|BfKC)dc1i zKrkGV1k+9sT&}RTQR|0Wx4@-a>?t&aOcQHL7j4D7(E8+L=kg}IQXwizG*um*shX8k zXXs5&o(2bcw7}O$jZ9xHdSa-;@^|9Im_x=eq~G+na|V1$J#a4#xWKFC?9`u~`QR)U zj-j~oZy)cE9@;QORTHz(DD_z@+WpkW49PuU#KBFJ2d&eQe>3AfR2<6CgJmHodxe5K zY?+>h0X5SI?{c*ye~q?lE&UrGUWbm~6lI)L3TKl$=snw;D}0zUknY;wdqAK;dhIeF ziYfr2>0X4ckPAl}RG9fEC+m&=%hum8Siebx0-Hm z7;sf^wvjYlC|y0epioO9YYvAo^KJm@M%PDpRGp~*8Cj-`07eAj0gHg%VGF&0U)iP| z`oe~80|zMWpQ+6D-TU&UjN&)GvaKU_0-A!30(N-H@&jhJem{_!)un9fZsM9xZ~*$~ zj9i)NpVowwBD5q+0}{%uxlH|a7?0#^KG@^&FBdGPg2eNn&=jl))ji9wcOAi#UomDV#lkM$Dz)At>bl0YNluV`bI?~pU)5ys6 zgY;AG=3Gh=Rq!WvV>!mB$YqTn6z;4->I~Rfbk~8yCW)M#Kp!-5&``1pDSN5T>1z)r zm6^Amn~1}3|ESHD2yFNMfaRvPM)Emdv%GQUWU=dkQTe^niA)~_yDFX&z7S2tJp7xk@p@mS#wa$+4Usq;o{!t5qBTMUYdA#5-1-L#@C|6)qK;{J zGcup~okAiT5R*-q@b*hN6hsK8rwUvn`RcBUa{@thL?atw-wH2rP?0vFJmV{167#%F z`>`&GDXlnVS>ppRxQx2#lQH;aD@%Qfxr|7qDz(Nn_~)HbW19q5h^C(TPx^gNOO|{k z0coRG{6k;1)a8g^rjAE>2A(Y2O`>zh7Q4aKjWX=P^O6upiiHhOBu4>mI%z-(ESEYQ zF!qM)JQ!%OsRZ!04j|jVUwD~eCc#sUDwTi~sAj>PKd^1M$yoB;DmD_2>YTsE%kCA} zXcR*?QJm)d#Wzr=;3xg+v=@x8(M+XQ9S~W1A7PgNtSY6ox_I~%ZdDIggC*MxJfj8%;O*e7-Tp;#Gv zTGGaJsHVCgZorm0VWJJ3?K*;qQ&l0gY3H~?NO=rWf(w`nGW^x(|WqG6u=UfozH_3PU-uN<0 zhO5QrG=`C@5^;xc8}4S2-{rr1l7$q|Q~2aW{u*@fo^5HYHzasiD(FRllCj}Ag>fS$ zBe;_?4565wF@DMZJQKRC03(mSjHQnNv7_ZZ*gtZ^$?(@MDhnd2qha$}bB&*~#sK7? z$jd}*1_6BdBCBh|mXm_}_+2L|!LZ}G7}Z2yxS0%&9CE?I{9SQMiKq*)u@n?auZdJ* zT`6$Lm!qMbP-(itom2Nl@VZ(iHfPx-A%>q>+J{%zL~JCaHHD{Bpz{&5-!Fr040tnQ zw-0U_w{4f?oR115CnYLSR#`%xy*W}F|B+7QEJ_4}{#+3y`Z3J>g4kc+F@aY{KH$(i zalzZJkp~HY1pszcpk1&dd)C#2K`eanyR!6HNZ?9~tC>tg&jXpF#vS$zSDjoUs7ay6 z_Y{+n&2ZXl@PW-sFU!AV)vx86i3(@5_6m3v(c#9d_3|pHo|f7$O`wiv!pIiY0!FNn z$@m|$uBcC%5(hLHwIvG&x@YeK6~IPB)yCqP5+AAkP^E#jqRy}Ho%NOoLmFcP; z(2SN^sTp`zc9Z-8w&X^)cqv>leGc%9{^8ktG}UqS9N=rQUu|`C17K6lKgAy!)i(-W zUOqdhwogw1@k&`r>{NQLPqxZ89{}8L^1DkJEdc!$m{6}{`T6+%KI#XX+T@{9s@{L@ zytuf}Pk{D>Ye!C&)yc3`y8vL-Gw&I&=jl66!#W<9x@FkPGSy#0&ui&EQ&E9jpi-9r ziOt|1$JaFl9NN1r=~aI#N1$%Ay&9tDIxM?FJ%IS;&t35acFUXI%R)WyiGZ{uXV~TH zc%xfS_PZV&=0n3L;*dEpFQrT~k?4CWMaPfjVLb0Pjf8k(TtqFaBvU6_35(5Zv}YAX ztsiVu`kV4R*|E-+XN{P9_CdnFaJ~?G%QSWSo5yxsQv-DiFst?_ZtMP}mtZLE>1Q*Pqsjmn+Vc{~c~Ycuhld#?NOb5#Wudim*Wnww>J4@=Je7@Ji_ z;#xiLs>avIjqE%VIC^u~SJ8`cG!@We=az8iBUR zG1cVOQ=b_rL)xg}gTTz{@~oIMknqD4Xw!|et~~67^KWNr`02gTtM`3gJ~91Mt>nVD zWLMZmeVUQHc$+j{Hv*u#S^FYElc%IBJWF-^a@KfnnbC~VrTU*CA@0bZ9x|$;0O0K8 zx_A$)rP&Hl%6|F!btvE>!wfJ%0h#%hFAtJ7_D-kqKWZ>L#rI{D0JF^H2Ug$zlJ@_~ z^tw}-u6Onk-24D9%%@iNZUBbPE)&J`_d%N-P?wp%dh~zn&a;Ml?F<{g+*`Leo}pK3 zY4Y70NeaCogia^8o@b z+n4J;-BR*qC_)YjmtH-oC@PYq4{7aa2irP-Q*C*fwfR2vi5%=BcYGeh*p@4Kdz-6r zTq5FT9JW2wM5VT7nB5@{!yz3p(_Qbs91W&zF)7bx*?5L}+pM-5QLz1B;xQpqG<&Il zNuyZ@_xlv1Cjplj+WBzE+4D8bm=`t*&cF?zpQ4{VAlV_?_;m5Cm=d@ndG!J!)u zvKT5rk8rO48;g=bWN456^S!@A)tfWQsT!A87aj|kEI^AvD+mf z#IcHB3T1jl1hBW99(z@kmB(citXkxm+);_Wn!yO2&hpGBPIIrnLo3c-swp#l)t6&P zY>{foIsFQH0vm937ruVFM#y_~lmj*p=(agYyVjX!P^qsr1Wge}>|8imjGn$)cQEr- zWv9+wB`jUk0T=4r?<_}UidAS>Dp$?JajJ9XgVmDbFW4BKi2d%MMvr%dL2}U&W_bjv zAR)0TMs@S-Z46#ytAh%UQt;T8y(wsZqtV zH_P}AF4twv!*m#p1J%9L;~c%s1Z;xmd+Yf6?LGSn5&4W2)lwCjD)cHjE2OK=`4TQ~ zCO&vcCW_3yU@@9F!HX^}68Ly>g3_9{pF_FA%h(}P%auR{Y_w5T-IQ24>>mxrR(Z{+7sFRF73}k2Ha)) zDcX!J&of<=?j%xax+6g!D}%zC5MgcCcX2&AjVe{DSMP)5vM0V4_9oHJc7w9bcI1uN zKa!zRQ3mScl^Pae9))r-*Ua}K+e7N7=gc-|y75 zk6AE_C9OS4f|pq;_TLFJ+_56kdmz;}?hqdGvmv$M+H>b)%JZEAKE4b0mWCTbT{AC! zz4=?y$((*5aRsb1mUa2%sl(@jlD!zvexL%fMMc=edo;x9 z*yVvIX__`L`oJ1$Yl=Qi2Wq#ecXn@q9-@MZO8WtsFzVJ74V4GT5mnQiGim#P4>X+= zX8!`cmf8y+@nmNDNn_ByNnd5Ibr^>s`O*i?10{{Bj))6wafTSGop$_2=KKlRi z;Gvwxvrh8A-O2yzdj35UX4EJIO5^agH-YWLD?(Lcd)aSba!c7XfoH_ZqEm5&ciCdO zSrBuba_A~XVoJ;HrEku0_w%s`YW_ytyJavTHG7|9d)XvoAycGH zp`cIrp<)MO$qfX3?|Cj69dRZljy5{57vq3Sl>3GSTkcQtJfC}Jm&xr`tO>HW{AKf4 zK$|_ei;0QG>2rX^pB-;2nZXzw`|4So2&4MT%%p@}nSfF|a5TN4e*jCrOUCu=JCrD7 zrS!c_qHrlT6{2PtS4qo1#J1m*ZNt4rHpxC<&o5Aie>hWba_J?iJ5)7hQ|^jZ;tqIb z^~>dl!J{u>Q1*OvA6Qxu1u4a#2Oab3|0s|zc?5DqIp@%KEotVk?7a0}$ia9-EpBL)C1Z;X&bFzsP*+y>SNyO0WZ? z{7Yu7gPQ&yRbL$zh1Tsobcd4CsGxw9%7D^vP$@xRNP&?7$srCMLx&Q=k(3-1>5c*E zkd|&nx*MeX+nn#d&wcMa{v#pdFnh1Hezgj0(md(Py2sILp`F^CGCx3q99&kW!cR)t z2bx)5IRXo7ixd^aT|%Oz-e?cCYggI32X_V$eAqyweL;-S4re~v&*B0)TT{og`WZuW%HlP>x2T?}Wk+s_2=n;LW(Fb6j3S_ceR46kubz(iOm z$Kv5YlK13NYlJW{677w?F2uerjHvdGU#zvD!@avk1Tg*x@Kj(yF?GiZ9PFecefk{b zzueGjtwJxY$jhL!)d37c2143t*va(nmHD%RZP(=qG%=-sHJ*2UPgQ-yrqnn{JGxFu zHM6|J*)1a>>RZ{TIKR)uC7IY&N?vI@)qHcrE-o9ckN@44#Ku-QCeH42vFBl!YIY~p zbNku9{qW7f1Dhit3wv&cJSSk#qz9Rg^_N?A3qcG!18oU|k=wh4#-*FKKLP~xU&LSkF}6Y;sAUZu21`b(AjHZ`N%Y(szuNxX+1|#) z4X2L1CXgA4Lvr2ngrK=yHkt@TyC!j?leCC6DEwkMneC%hFVUUy3}lZ>q^k?1dhT;$ z1-Kn>sBGZT+9vCcLAPn^dB}!5ptCz)DaNI-_w93${3=+{M~y4CoCd+ zWrH}rZ`<(7sHk7hdLnc{4iT>nM?Nl@iXK~ePE^5V7=mMt4(?hQvfxKE+9y@X-&shVYm9KeeB}mlw)zQ_%i}aVW7G zOpHh>X?!g@v`jYFNG78&iTaGvt)=)77{) z*08cEy3d9Q;19|{2yvBfWxAP<9#aYqy^HiTJ_gXME1D2ki&F8{F z;$~I!UZhVr&=5(vKEh^#n*ju4fFS(Bh4)`}>QU!Vu$D=Pk$kuFLE0<;y$p=4T!3i# z*ZU`LYg~|$(yCdS5`dZ9NZ4HZx|W9h@lJ@*=JMZ5K|HZ<#qE5n(gEzCd;8;W0-*SH z2;UWq`Y!_-mq;dXU0lquUvXY-_Fes&qP?DHXds4cBz1wXfe_E*ZP*o?9KWzlttWM~ zZD|O!?a*A}L@hd@a_VgnF1IVsrIG65i0KnHs1rrbvLdz%?;fU%H^T}^tu&pFC!;U) zh5AK)=eEKibJBSfTT}_ZJ_-rAPXh1qnFL+<9HE-Ky$^BKy1bWwfkWg+65y6#UdUH` zSRE<>FX^euQS`d7omBLLx5=NSvTn#Y)=y;oY3x$Jt-wZ(9mOg4)-eE8ee;Ps$3tJ| z87bcWB3vDXdPV86nFSn5v-G0eEz|t9vg%CLKgTwZQ9r9!w@OB(17ib=mnu(`g|c3(5V|6zs*Ya?B!YNvhp=Rt0v!yaY7u{Kq7gD$mws&F{oa0?`dp2_1l%bJL`}xSnksP zitHbww+C&18Lly|GvzKZRgyFQQZ_w#7Nm17@t}16*_{Q?FHm=H$ceg*rm!DEGLE;4 zli6Zv27?|)evcPl+@fRX^mJX^p=!lPUzp(p#^C%lu#!5Sm9NyJG@nXwkl!5^fozah z<&LhfvufQ(()mLz@u*0@mtUXS6=qfYUu=Y)w;uHL>kr`mGfK!tKDqe2(b)m(Ny5nt zp;{r7^c?7RqU9bTqcPd=IddS+?JU&;o;InGv3LQb3%rYwoBYYrK5QTaL9+4@507H&ar2n54=Y%a*m{F<9So^0 zfNiSHH$d35=gyqx%sCrm7G#=%*5hR6`rKz>b{1YoU+=oZwmnr7LdGBffwV2`c_2ko zUXQh!cPXte3 z`6Orm-$QBuc&HPwcl9P7(?p1I_JQ=N;g0(N+i+XxUx$G>|km zKz0H0W^++fcvc=lU`Z#FWAIT|+KyA5d(=wKXToI^C%Q&EJB1XoK66YUqTBe1s6&;z zZF~{`viC8(DoDB#CmO32>*4`-)A0@S7NvSn5jn{sKiNQkwZK__<`*PwnU=u8eZ(GJ zIuWT7TBc}qL_H!m0I_OqyX!8TLzOVfy)(exzEEOt7~$|FvxL&dSaqcBIn{2laQY{~ z@gLlo!Wj+WQ#N-!GwsFN^sS)uNlvaLehPvYjn) z(;Ul_3s1PCQKTYi(S$1nAMiR0FxIJx|A^bbBj3MWQ|J5ymENsv+GS;cjuXx&rTry> zpnI4gEJdZXqx@X-;V*~;3%iOf&brP|8;!T^Ph4!pse*2+BUOlDA1ES7s4gP5n(^T@ zRd;7+4bfk%Ur?Qa9Dt&dvI6179twA%Z0`MyX@BjU2s+#fVMQDk@Ra8KfT(>A>^1e~WcC7+ywWJI_DGHkToIN*%UiFa}?xXY}XN{Yqp z$xT#=f%9RV)o+HAewv;$uKU8v*iMe6TeYRBWTP#D*_?L*byGJ_m*PFG-e_oi&T4`e z6TXk{=K6R11yzzU;>FD_MSnrBIkKBE8+^P+#Oa)@VVCS=U8kYi;ixE{`A?rn+t|R> zl@u7dOCRxFPCbtw-?^z{9~g|iZVj!`0{7eT_LTMgQPIPH&m42&>nyNO=E10SiyCTO zv&!>W;C-21AHR4W{{MQj6>>npdxX5Z>g*?nfQvp*9(U8OhJ4m-5H)!{h$N2h5KZRT z56G`^LDNr96?U#qf2HrZ{ab4DK~e6Ydh(0%?=OfnnJI%)f$p-h=Wg{FLqGfDOL z;pCkm&ag?1xxTx;i651wcPv{NO#Gx_Q0_oTM?KcEHNb&;N0%et3OD}jV|;C%wB`uI z0ktN=OGSvE>P^L;dkW0dQCWgQvPISvBtw%4)JifB7sx#9Ro$M_uj-g#a};J8*R_t}vh5>jFh8WR1*p4;ijdDkU^-7HVe)@LjY=I#Fmgh1{%xK|Qs9b`3sX z-LpYF*~7k*JKEfh<`F8k@{dHQ*ie-X#w%Xve=*LvLA)T4CbqS`-681 zW6%6A!ZI#jHyjJZk{Z&&$08cJ7YAbmcf}?C9eAm6O#t^CFrIPr=zN>r-;j3KVv^zM zb{npSr?8)cFUewgK&nDE#hC|T5MSj-#c4N4=-g^)qh>yJwv~|n+;8(0vFo*GzU0T= zUcNQbO!vg^n25cl?~OK;6R7?)lgX3~d&o`O`l63eFAiDm2#okrqw>6XBkSTZ+mfy% zgsvnb!6tHgLSjX{&X2kReEha#+^Hb>)-SuOZ9olugz{6oN@YEZ>s2sA-1aFX zrOn%kfuTUt1_x=-5CDFCEoMgekC;BzYp663FP=i3<6cI4Iyu9fB_7gl$VQD)UL-Sk zB5q;3oom~A1t4p@^R-iLT=MDT@6x$2=^YHgEm!F~ch}sxsnrfmi&A7nM`9+9p4;1R z{+T?@E|=t4Ggk!e&nmCe$J@Vu1T>u2G_-&p*8UwxbQ)T3K&kED&wy+KZ2Be!JnUqJ z^-Wtl+VE}7u@RJ?n-v;B+3mL9BZ>ph+vzPOkCZ%OG;&{}t396fbh|tp+XJZB%>o?2 z;I{m5T!DH|xACTayqP5WJ`GogMXsZtI!#L*WM&qRC-EdyDYwrsj_@b4%2YA5-or@=A|LMs z%MVF-#szH*6SDm_Y5yx_#rA6oGW4ofxJam=SzDpeK&PwhL3H~1cv-%n#UGaxm$tZF zE39R@(iLm8$FOnrfgyL82aIE7-yK2nhUr?5LJQTDN1H;_*-Gl8ZTTSjK?1pI@x5*~ z?Q@Intn>0L)zR*Kf-3}eLbPf*hxiQUP7=l>xUSVcg-Jm*mQRa~{m{UXIeV|tFIZeB zS+@tDx#uKxG>>4|veEQN=yL05QB&o3KR@6mv3=>!Wye~^&qAAcd=hy`U?{qTLowM~ z_-?0EgX0%whyAm@AUP(F>uPh zwN8g~fAl1&DQUFU9!+&u*L~>lWRc9}vZ_boUDFJh>46Z;Xg(``oV{8l7`mYUHSa|C zKJ!Xm;aY7)84(J(L1qS7s?S(x!e}-H*M@eYWGM76D@dZAKV_4HpxfH0sj)A_vFdNc z`B@4!2oC))$H}!WKp0YcvTVqbe!k}S$0!ItY3nWaH`h1>ww-M60W-p(^St=fTnVQ`q?aZZBeHf+o$CrCmM(IFS_Cs&tre<0X31Cvl@r zIzQgI_x~lU$2&9aH%L#V&w1rW*<2IcH{RI$4!ifsTpNJ^EMubv92=k)rvqgSaHZ`Q zPkAq=QcE{w3Fe}sX>QKX&BjHrfdl|P0EDX8D+6B$Xx;Iu&EpC4v@O)@S4v7A2hQMJ zOMtjtuo(_)UfgCns&n7xzL{RZiJZLwhFy1z`uI`V|6Kz4*=q5UeEZxajO^|LIIO*{ zVk>Fpg8OQh>biJ{;;hxA$$Q?yjCgEtF1X{(SfHw z+?hQm@x!TU4GFDEIQTCgW_lBaVmlWvGSgQxu@mKz^7W1Plc|Z%A0E~mSsRI;u3RLy zy}YVBlaHQH&WPoGHeI9iH>Mulm{jmNpQztm9jsHqZuQJ5Z2c;=xtE?tPF<^d`#S-$ z8&igKub*Wtb$nE=w^WduE7PD*npPqdVB~`CtahHfBj4azs>n_Hw4XA6bl}h{r?j65 zJMq_dNx_dVR+LoV9yLm1Uq`5_V#*Y^HaGL5lU{xciJhah>cC6sD&(w;HSdG+J@O#= zWrousfYsAUi~`UXwut_7CEedi^(w8_=3@&T`vf~0tdr?$Rm0`9e`OE$MhUv@4Sf3e zyd>RL92-L>gD=yZ~ROy`*z0JKlLGdtOYxJ+aI?UQ)RPLp6mR1LRt^I zL*x8Cp0*s>CtwK$rZF7o?i5LK3U$aAR^QSM(0s9>hf5M7qU8m-bg?f z_dt(^595^D{fvHQ`I60)>^IJ4PEKG-9~qq2Oa)LFGD4g@9dIisz%iBB<#T!`Go3KY z!tU6BH*WEuUG^4jo(p=@YvMppVC6($dhAc5IQra&mR$eI9SP=W zq$bXpHR@nr$CMQ**ZlEnD#P)8693xLYxO)oSjyn=k;p;W(L8>yy8_zn%g%doggZ#O zz!f|kLlF`LfNh2R)f$>5*`b2tPi({~YlUxF|I%ummYQu+pw0g)EhdJx=*EHp*c58P zhKtAEr|~{F=Z+KDeZf|)kal(-7Qn~a)t@duPpt>-sM}V>*bS#bQE4~R24uro(wCMu ziC8nIy{`7xSE%IF)OoN>9Kf|j^=G_b7tro@&5rG_o?(!F@NX9U`88-$!7f9Ro39j~ zIi&WCWNu5AI z5kDEul5&1ufB)gdjnU-naN~QLC=V#`nxN;67cguF)DzaOq0XUXcy5lf(755#O+S3| z2@nDJH3vT#GW#E$d`5O_fMXDU)f#q1bsVxg=5slA5+HpN(3^K>eDV2YFeID6Q|kz# zP2-8chtR1IvNacA5`C{8*>UWUTI3A&X11;j^KuylQJ(o@Vtr$qm4#o);_=gjvozRPAS0=Bc!$IoQ|C>~yQU=+)dSG)WI> zv3+g3P~3sgm)-JD59(yncLH(YG`;2hc2js>+)37t6Sd8k=eW-c$*J@A3#J9wl$X?a zsb0SiA{6JYe)aZv_&)GArtsmg(Y zl}UY))wk1nHhz`@p0#t?#4lBjLr6z|Lcg;qO^Gb04Cb4lrw8bc-#Hhs3{`i^`NHyU zdw#TZ7s_wz;N2i%mIp-ew_M_E2eo%XMLD2^DOMo8|W z2S+ydDiqc9$v@XHz&BNJTvCCV`D6yABls)2E%PhsO#1!p=k`vpJyd~;IF`Oa6km2d z^{H>fI3N$y)~a)QnaUqgTek;BL@OZVjs;A-j(0~@-|~6RCJ`MwRj&wj+VB0rB~t4t zd46X$dV{FS$1&W7EPDA=j+mS0j; z4CRIkx*?j|2Oe%H8C-N3e~9_u{hA@Yyt$!=`DH#iUoxdeRz zVF1oF>e%q+c!n8Y+%@u8;{xXp?DTzbvMk#0@p#6E9ULxz{f-qHwjd%UgI7{LDZyVw zZGY?T{G<7{9So|*x@qz~D~`Xb9Pq%^!F|(agTTPU->~Hx9@NTBNLbJNlcUOph_vg| zwDvH;`VTjC{CvCShROwS6b_tX8KAmv>%H#i6uxbms&U=Z@j28vi8Vfr1>0lE3Eegd zDtDIzeeT>`S~vXCO%o8*mlP8-T=#D)ezu->vJV6uhiR_viH0-sSt7v|TSX>)+C zKDjz>FwS8G|FmqJnfa{o4Kch`Idk)qZ;;}P-4N;ggLCZQ>=*OYPQXTuyNchug#Z7s zJMfad;QAai_u_aL!7@oewE|v~h9L}CzkJ30FXbI}4Lw|pR}H_2(IBIFnN(SX!n_{+oK68u2Ub@e5CaUCZ*=0^~V z^SZ4a^V?*8&%|{sG@?`D*V`hYW^<+ys_t6{qZEzrHSC5i=VTjD?dpP1$oQ+DTAppU zH*nZ93$U-r9@~&z=18zF>4tTtZrT;BQ-az3%=QU_G4B#r7Z104>F*8U4MWDo0@v>G zrU2N%>-OcJXKu!#u$?1vf&Wg8%(fF3_eCYo^0@>iqY<<*Z<4?Plmc@NAH=Fp~yU5b)UDV^wa{ z+pP?J)G@nNr#00#I8zXR`)8Hy*G=88s=nK~i*f&a;;M7Y<_R*nUrh3ht{`Xa+w(Y+ z@O07uOPf*>?DX3=4BI(;{;`cMR(;6ahtR-HbQJtff3BcIq|H;NrDiaO*51FuT)aCw zA(cM9xaA_qf^c_baJAh;T)lG`naMPpleQ+35>MX&QSIcGV1*rsg~%JpeVkm_S9DF0 zoWh3*N*0TQ{6!~!x>?;|vqCz>9pT`L1dw$-$ z4-6my9q6D?3SL9`?z$V!Vp0#Fjey*i&tu21gu zea@Uzgohlj4nH={z7ttuoc>3CUYED5e&0*>n&ebY^9p3gj3MgP*2)aTAr3hE?(>O1 zUJLv~)Vf}cv%4VAD!yA90#f5rC<<7KFFhSwF)kJwq`?yBn`PgnzQxPM41nqkCe^=v zmO=Eg()XD=gBwK+(;YjCN=mtzk38)=JH4c&%h=fejXb$YJsEccSp-*lg&#v&h~g2d zfE$(C2f~bjfm=8F6}HHdhK2^5-(X|NENBM64F-WOv-RG&Flw6z7;#!35Dt~p)P&vK z3Dbi%Py-+B{dh2+08z>4jyuqvY#hcI{jLXJad~+uq7Kq!g@OBiq}RMm?_UvR^?;XD z`;eM+-IWg&pk*Ry|>&RaV>2mmmE z<_5@~OC~+&V5n;kFxYDl{BI8+b`z99R3XgbWN=w|eKd1s+kD6J?iX(Oy6iiZk7M*z z13wvTw};nUrOb_Bzj^J$<2QR;22)E;vM`#QLfnXnh7Gd!e;|LU+E|uKN|3)7AuTX5 z<7*DKwWvg~8{DlyW^toE5sF(o6X`wpxPnk;m_lrcEVlV*+-d*-Dq5#7U(U=>a*&49 znWDqhtcT7Y)Z59mNte0ZsRs~33kb6 z&pwtWzUg>LXENYkRv@N#pZjeY6U%v>Wzyt0#Kzx9pLMJ(fGDT!fbwf;RIX^8g!n`B zK#;V>S20w1UdduBVNE8+Wp)OZ5?}p!<(vC{EqAoTrKw*W=7N(uYBG#slv1UZuz2A0 zWTxG%TrKv3=W!Nz+>Ia=sQ8c{<&*!1vQw;OhGs~dcvlFz`kXj00|PoGs8>QMKI6^LW3u!++0!h;6Ne^v@u%W*Ai z5Js^&v5ECeiF}M9SlnwZdaW(1M?oe5DNhPm40=Z{_b9Y()b zrD?uYC~0bLs&;`C?`*$-UzkL~Mvc4qrFCTllc&Gmx!+`PDTR2u9m z^ixi!E~JpIASb>-Ck>o2yGwzVGRU^E=S@APjig=OQc{o+bOt;WfY;*;G>!gGQX824 z1ux6I(j(VovM3zzex5s?M+RNne1=}9D*iC!B6mxYQ1P~ge1!SD$! zp>;d?Ws`S=?4V4{n0|q)2$KPtR(WkCjp+4w;mhwk&WQL+otRBD$;%7FRMuRr6SAD_ zo%6uPVanf6-+!)_b5=2l#g* z4jjZ|M<>^K2U8zlX_NCExoM~+eb5DeMyX5W8)D8LE<_&=P}lY^>34ndJc1=b>I~)S zCj2nP3sNt9*@$(#Dja&bm19ffqrG3FKkedTf4mhCSGB6>Gey)+`Vo~O&n*mrZh>B- z!a6&O)h0QAfvUuR*y!W3tbi~?G@|=`Zq?i#cM6DQJW1H%A-Uule;lf(y!&OC|>77Hy zz1l7K6q7dG+cK+XHR#+Oq)my)94uylBq)2dCq^zdFO~`?`1aTqTU>LoQTX_aGXWwr z14ni)tFP+yT>W2#4*pi=b`Y4}E>prwM5P!-8p6r6f9iLra zQ7NBkCX-`$5Sh;MxR00L&?#}+#VRC3`qLBEP&k*bh^`*t1s@`W`#Wmp1&bMZXN^QU zv2O-zRS~xJZ9@dH?_;R}!ck0h>hfe0UcjMbN#`-a*{a3U^+k=){$%jO8PiNY9CPwq zFz0616tHf3y=iBsMgJK+Hp~uXty1f9p!2^zqZQmoIG2^qCtK2$;w{Lhsx5v*+4a3S zj}z6|H317a2C7&SY1^%6VC9nH5bs0NZPz@C(9K3MrUmhb3Q-|axqZ~70Ym|lj03@| z(ba0hG3D1?XY#46C*BM-HUhd9g^=}$^c+-&iTlwVrpNJ6+4FU>6JQfy~Ss+M6iGGIxTMne7 zC|S9xjZJqov%(fFG>}1YGQ=j+2GP{-k8sIg)dqR1ndKowgGb*bK2(#wVlE9RAgrN) zqqm0F355O1J*rxLHr}bn+w0uX%O-7nF=#e*r03I*fBM{|*#0q2SOSRt4esMh&hH$( zaOAdp*fF%^sH+} zk=!?#&uyA+jQ-+a{DRYGx6$^joBemlUUQ(>| zvygQo(1Y60@O5{5$`as{@n9ehLc^0jFgwl|?1K1U;D{tR?@`vkoHKcJhPQPgKMNw| z)MsLy_BYWxGmR}u=yHcg8$3sJSQruEpVZcER{g5ZLe8$A#6cM*_)RAgi8k#&cua|? zTsD+kBt!`OWA{R8*NanG84W^O-o>EQgunc4Zr+Y!A8>s=IWs9cwt#FS{`3I-1Mu^I zLi!0*=uN*!2)73*KiS+&gJ138yB4aJ)H0a=kvzWZ+=u^=s#b*L*NWm8uc0q!bO#fSi(_p+6bh5bF>pqd)oHN@?`=a=w33fr%z+bC5npEA9Bo&s#PZMg(X zepXgQg`C5b(^Y6tOl@rTG+RYXrri;G;^RJ|{Pp4$cV2d%;33oZ38cGM%ztG?n9#k0 z2~u%W5mNY}kILwYr!rGeza*VE8>JCR=O1FtOmSu<=q5Oy+O3;QraipJinysd|2|GV zfK^8H>KeqeRiVyZw#`$${wUsPd~M702KfGq`j4yy6DdH5;=0ZFL@nFU05}F{FsM@$ zy5A|)*vkS|42o9>=w^uoc{kjJnxz}UuhbNPmRv{&)hUM(Tv z7?;D8gg-bWqN1*(`-%7=f%EXw8`vTjRUo84H=c0Z`A)-wwml#uOSH-B_ph_aw1zh| z<1u|pjM|#HJ1h7Us*8M^cP)JM6W=cgu21#0*paZGAF|$5j?~crwPQxSJU8hq@GOVh zy8X}9Upx>(IK`MQ`{CwnK^7y;QzPhrC>#3sOFF~8cBEH7epw;s2yZF005@lOf)k&> zIzNBXd_AlBdf-^XDjkjs_u#y>a1-V6fdHlRbf5Re^P&%}*kNp((CsACmMG@2v(Z&A z;h$|FS!4Nr&aK)~jP06?iLFmM+m4c^ZHgSFZ{)tvBP?83CiVH-+r*|L&)@Q$sFY_C zwZ)iB!3vek538m|`Hru4aDFxYHA$^EA~D6bbKHe|I5y!S+@o6b8rukoB^*2JR~Pdv z=aDJ1zlWZ1FwbuHfNbY2jwCf9rbDXB9LBMi->hO|y2sOr|KvWm+f9B57F%*O_8XBS zhX4K{L37XdYFUksprO)l!^ubY`+i``lapr=C7eRK2xS}3Te+Zf_U=M~(9WM88y_+` zitY|%>cxpjMOtC&emLGUN@Setxf6aad@Q+Zzqz3cw<+EdVCLIuNE&o{-U^^jAcMRg zM?cYI)RrOaZ%qT)xZJOwNtayn^nT^;QoNJu@!F=T0cnDNEPq}b#l7fgMRXGN=W@ee;SZ~Of|N-xoy3|&m|#s~FU;2zHUD8{63 zurJ=#IPZ@5rVL3a5zhdds(?Cf#PyAdK_n{ssiFrbwN~^iYCch1c`;Zs5%`e!ju80db#cG zBOVl&3q%X4PmfP_D$hn;gEYQ%MWBAp^3~FPPj-$|@WoGBBEodY@HXc5PQUXJ(MU1Aq( z3$x(fl=A$hfsweMSh^b8FlzK{6e_j%P%aI6Cygi(=|2F&cHZY8*hw%QdGR%NtEE&b zz5XxV$J)Dn%`uZ>D#ZJ3FTgJ&>hoC+ks*eQ!2dALW-_$i0(+J%*WeDVuqJ^&`6u5} z`k14F(S`{(G2!hU$IVJ8fjaYZQomwV*+`@0(2-0asYj#^K9gVZtzW?*Ly00ascsXk z`;kVHp4{=b1dDpwPSA;g-}1Wr(+tPU1t7VNrUOg(s8AVJl+hUB(Mss-Dh4GtCkUy7 z#JbOZJ0viW6@Q_th}3UY3q!*Xzh$0TJpKX)f1WZqQ(i6e;1g(8OGO|rtgr1hveKk`$;jJy9t@CmJacXce(dVQ8~$ZeL|cK*|f%?4`N7OGjl}kw1@ZBQyiGB^WW* zvuX;vNxS9@441ma-P=nZQUmlEzpDrvPgg!U%sqKR-kv3P1`ib-2{uhl|0jtKQOl&Fs;D)_ocEPw9Y!UKP}YbjepZ%l2n_`9mzop%f8hha})q zzZ94e&jsUn5k@snW)ORZfBX>e=1YATesO4U3+Igt`f#R_0D?y~x&=Iib*^B@{r5qe z=RJut3nWv{u!UTu|9vkG-YY=jz-{xb4)Le73d=e$zW!H*Na(sqx@e47%MN>FdmT;> z{V)d_|0gV#b{yZC{}uMWTP9p_YNrE_)x=-x&#dV*z76NN0H-)so9v4-&I8Zc&@JT+ zn)IukZWm4%3d+pqyA9a`(r^%r`C3EUXR})Wqq!*a1G#?lM<2Chp4e9(e#H3BO00?o zKMN&sCOw~kw&{M)6#yiWI5g2$8WH3z>F&#Wooub0LUwjwh|$ceuMp0ZNGle8()ZvI zn(4_&C1BfxbxKlH@cGN6HoG1SXF{GcYjTeF)v$y_$tC&z9ewu%Mz4-hk3akfeV3U4 zpOi?0W1nWW>F>dsq|t0D%zsFBP)$^dWUj7Sdp7pAq zbf_o^dvR6GY-CUN-#~JI6!j+LTI*0P4>&dzHqBz5^enMD{puUf1UiVOJ_QkcVNQfdv|emX?;)bDzgwv_dsG)6jDEyBG(5M=KSX zx)mCf+#sxVuK}5yi>Ih_NYXaUh@&3bCjlJX&uFXL@T+s;4735~0*DxJEAQ>}?USUE z1h;+2`l{3_Yzc1c8#;FMdWIWPt6wl$@(<$vf5N|CT$bZD>K)DgEmyBOrWg5NPV=>Y zv|$i2s@FF6e)RdP!y2K2Bt=DmS9j@}h*Wa53|7;9bV76tj~gCbdaFk17?czkHg>9Z z;2njYRZ`+(wG2k6{H~gutfgn)nS`^sv`Snd&yfb*9Y$<$zjp4n2Q*R=t9;xEgUxG5 z*<#fWYwPH}sU+id+{krf`m^xP%tpOc8ek0VlGbFb670{USQS;9PDY^aKHbqB4^r$Z zIhIaSq*cD)-f37fLCN-CuUajC=yARno10J)ew)F3HNga`!cecFYNdn$Nqk zU$R@p6Fs@5g)_h9v*V8&0fYJI++wMtD3?oEe-mh#L;Y|%OCkZ&>AI}`t6b{M0g6q9 z-I~sj>O$h#vuFEPILUR?g&QLNXI2bCBIp0a_v#v05Qvf;0U`Gx7ahKp34zaPxVw-u zIpkrJ;E}AcP@OqZQdGUZWNn63#X6ft!QG&kJegd!6N{!o(+1?_K2tVl=k_<)>tpQQswX+}JMASa^3!+Br0=udmqCKKyh_c>683Wj^|S^zQ;` zw}qBwzSLnI#I{dkQRW7Ytvds;(=EO;+}r}z;RkXH2r(Ah#x&vMhUNzMkr?NOj=~>) zwvDp_;GH>fGTXzh7x(TdQ-N%2!mqWH#jqq3N`ZkNlCiOozX!Pb6Z=H3M%MNAf4JpKbg^{pX(&03^N4=XeO|Bkv5t4l!tyGuc z`;z3O94>2QAV2bc($}xMQ5e} zY_HGEVMar}X)pHnfyW+4*vIl(RenNG+}07tx&-Xl#jIZp5_VQTlSGv7hNvbpMkO$)D> zAFrCM`Ft(T**iik`8!N!=xTlo5;v6_{>-iI#;d&~CL3ydyH}Q5G`Tld7cWY1=8jyN zEVSG0lWR&3%YE_f&G4+CZ$%MhNQ-{#Q+Wm+NRPjYa6np21Rd$_K}DbbeO4XSHeSK^ z9y^&ZnFwyq5zO}}-srUvXTOdk#0&H7s)rF}A8u0P)+8p& zJ5hf4o>*v3bVy>P^%eS26`!~ABdq$x@hIJyZFNs8ssv<(l&;`-&5#;C8aU=+CiQ`` z<~hB!_%)1rMAo)EVIt-Q@hQ~K>y@p@1$t$$SPFRl0CW7E)3QQd$GhnnI*fP3OfZgE zb`Y52D015ljLcdc09^Z9*Nk(mRK|wck+_|%FSS~`gHl4d1Y!E`R(Of^E24GT5l)}} zC+SdM5M0berGiOc7YLVxjb%B2+^|K9S)>q_dqqb;v`KjETTmpUVi zzYy0vU5zS}s)@v~sG$zyB3UTsFx2*%EW5OzB)@=%>Ouf-h~BRlS*td?T?mAN4K zX_BMQAQqTVTegm2{NI_v==`E1PHwJ9AZ9Wcq4%(qCHF4j2VsU1567{6yrJSo&g=DC zD~ecBiTu}_t*Ypm++rp?vBJq|qS>-1@0W1~t;h(5we!+GDRrf)1%+56vi3v4=r{iCr%22t@TS;k0K+##{O=b9mViB=e3TG3)#?W1y1=8`epou;pxh(*`Au@E6&1b$CkxWKNAgb1;RwJ$dFEkVlwRR2CJSSYWNgHCb;cF+O88lHsSHLI1 zluzU+LLfeg$t}7W;)yJi$`zQANScfanc}U6QlZ+h(R$v?WyN;C=8u>z#A@k30%<`= zt{7Z+OChqiz=e{xQ~?Vb#!@6dE>GRFLcRugb8<6Vpm)t{6%2KB;i(1L5eG-VKmFO?(5G)T}|Au>2THr2Z zc1NbVz^w_RpHNzqphb9qu!*>%&Pl!u`87yk#lNU9h2-vYs8gj1BEshEs|vMP<;go}uuAG8_z@s=#_+5aNB}^( z!VSo^b8nF*rUK`h*{y2k_C1JgtFwG|?%%2WZj@FFS(9HC9U?C4c2IVg=Ksaxb!q;e zi;)KcVjO&)<(fJPu2FP^Tt00|AdxZjB|d5#$IU|BcQY^$dX|bDSoA_Oi^F1xZbQZ` z%)ekfya%4n>JN`5_~Mi0>^45eU~sWIPXx}U=zXV_T`MO>Gh2VMbEgjyx$WA}gq_=X zrW#^j{h4kPtgT{xvI)ZMfM@|3Q5qF7?=xF#x(Q62->RJVz|nJm zV7mG{%`wiL48z}Ds^qezT%Hq@lgE9!e5yc0auU!Kpv0q+VEX8}l+-5yhu2%^jox|z zf1b~BP7tP`Y&k^6Hd6~84}zfH#(+d!#4HSho#ftyEi$-UhZjOdxHCAuw`n6cpcspq z0>cLxV5OKfQGI)HL5V+)$}Wf@zR`Bf+6}B!ZI}B7w}oZ;>5yHuX()5TGUN2$6obj)8N`l z9$WoZKzZUTKRPe`CISRVG=LlVBo+43?4mh9Mskm(uzS7FxwTHGKw}*Tec{?ckL<}a zG61Sx^OBJOwmafc9Q^lQVT9Ztv7lGZVUHc z+zKyny!EPszPj@8y6kw_A&zAvWk+z|*4+-KQ=v4q9ye@-|B9H?l#^4t><<2W^F}D~ zz7X6K;#rGoYZQ9_CDMIC7y*n762T$iUx=WoID+GFn_pJYciPIn^!L;2Dh`dNV9v+C zj$a=BaNhoL>&H~buZJIIR)%7-tCbf!X&&6Y*DLx-(V$$PKk(g$9n_9z^vpBJc<28- zcwSRNT>k!_$K>cdWEVsr=)O~ia&Zd6pLYs(;}(-LE%+|fCVf^!R`AIBKcL$;6=L?g zKcP)2kYvRd@_5W+wUkios@bjbx3LXM_B5{u7kHk%7eC-v`usiO{iIWdsZ(m8 zuCv#WY!z%AM)0?y!K;~^+ycc!26gS$m9LFl*mvt<90~H4&~lg(!9(+$KRn+9;#I<@ zGO_v@4;?;NjvS--n$%zhs#ur^6;Wx+r-&B_jjgeL4DZF>{ig=B=3`<8S~z#rJs%EK z=GSvw`agKRzWf$eAre_y4kO5UWnbT6Rg8aUux>W?MR#0z5NR@z(1|e1Klt~O3 z8B$FPL8SDe|CmbJ8H8yw8ED;-j$U+U^XEwTMbo|@e0F*DwliA-(_yZ*&44dsRuU31 zTlD%sLK*p8p3Wvv+RPx#KYLNEIi1zrBD$B}tYRe4O*#q*i^zGNkQctOkMiNAjIkUO zYfwMD)wj=UZLMuq!KWrM7Qyv&Oh|GicaX?wYha>T8c7#selYNs32tBdalsWcAg-Z& z^3&?CE2R;|{l=JTcd;mN^OY7TD2q}NVQk*r%hteG2kE-Y1a0mHmC7Q9-q|V1VcjBy zxsCAL?6>8HW&TaM32(FwR38==xI_Byw%2Lr1-aBjfX%6ghlkDeFS%0qUk$Rop;g_q z5{GP`Pw=k)ZIIpAez*Ph%uK$9HJNT-k--vkwUkLqRhNP_(>}}Fdq_@H%kVo~?n(XN z)ybruWz#g@WroJhkx;)ofRH?yx{M7ysu$`+x`{ z4(8H-A4uyj5Z^qbKmj?gk}tIJXhY{96&~2vM|ONOjYVhAwR~T_k@=!@dpit|I@i{k zK4+4*NsI1-I^D0X9UMEpT+kjmEFVeSF)M+-Pbo4&<8> z!(Q1AsHGo#CN1b866gQX_10lgc3s=}1dR?#Dy?*flsGgfoin6#HwY-r5YpWO(jW{e z4H5%LOG}Q@9nu|sbHDF%f5-Fvj^nrgyr%Yb&0c$->s;qrtD|UbmI-Y~5X4nbAs59W zG2XTwhIbfHum7+@+a5W{BGu8rbRv(4r32*FmW9lV?6LY4gf|=?(U(?O$_w6~$gTrX}NHflQLC2J1k$xVY{*;YZ_?JTy)A=b_P*8fbfl!6xyHCi%vY=** zA4}>k*+(JsJ6;Pv0)2!AP6B(}aCAk#5q8j;-Kit)BSiDfhX&I%&RT~q?gm5*u=W^k z!q~0kU0D9q+CZzZl_w$)qzl?kVEB)Ce~sx@CFvggLy56mR?NWE;+6_iPCdNQh)6>)C8IApy zY^J*CUhPutGVIZlXjo~=eJ*B#goueOlUMMcMQ0DhQ^&5GkZ~|qLxB-;I9!kH1q@)5 zk*-lTHRd3sQ~~&`Lu&42uu5;6xW{1mHQR26o1=CPX?dNO$7=PpW9hu$x>Q2b^O7R|^dkZ5k#z!=u|sGp3?MxouWF?6oYZkb(|~RJr)6-gC+V){l!bC_w?s|qDx1(@$t*$ z+0fNdYx^_vz+t}B${d}s^?@ndY{$XGkPffJ+5vG+KX5;8-4T0^FSKSD7onG%aZ%Ca zuldp0g|$MtMEv0%E6^6xCOCA5sgQbRy2=0f=DHkH)w{zqNO{Tg&YT(<#?lUmaS>dd}@@e04Es4x>IA&;S8{`oP5w2^kh`e|PkCdfG0B z(H{?Rh1_F#2Q3{G_T*%(N#wo)^^7$6=LbI$$+D4|S`?Y0kmk%m%UJ8snO22PfgQ_# zqXGHH>}ytb2c?3kyqp)PAc6Rty0C*Al5`WyO}`oe8K~E9dX=KQ$?%3YDcOC}6A56I zn(X~*BLk%sLNsp+CtBf=whId8xqrrF&T;qSn7m@!u$ZZXxz$i>w zh-Oyg8|C%`!%q?$zxhZyEY} z!V?`+`;Y^7ao1CKn{FVlVBC5UnLhzsZ&f6`+mZE`ia@c`&%!_)ow!h;IiYE!FL)Mn z*lTvE_~(MARA4XiLa^cM$zGCgXtM0Of5{=|98?pR@s3x7n2f_;$>(xnwi!m*Pe0WX zePy~zsq^cY$X#5QNYX3LIUGAlItI@l;%lTDzI*|>O>UQZkLFG>ss&9cELkVC=LIE~ z;UGQQrG(-EpJTovP{zo^^u`J#ctW}F;o`+(tWHu%9kNR*7DzENd#;~6S;Vm$8rb;B zEU>iD$xs4#EY*p1GjKG7^9uRBEKxHW4)nJ*?R(AyoO-^RN^m%|Le*{z$+eTFR-Xz? zUL!m~R2R$AE0W5k0BG3{wLnjORaM39!C6nfd~9Rj{5&aF@Iv;$ld#X(+1#Z|&DZ$t z1Fk_~MwlbvAqB1ic+$L_3z0+GsfF^*eMc)Vx+`{i=aBm@W#!}vrF9w3)~W!{Efve8 ziA#mHOxaWorYNkeIHAdeHq9a4574RQ4Nm8oC5?VO`LPx-?z5`3=Fud%hzd(&E&E|o zGIr=XUtPF|JQ85&VYx42ljR`Qfrd;4oM`_{@e4tN)%#++{DOTOehgOGGUln>Cspe7 z5~9zgFqj9*F~VW^fN2|WU3Z@Qa^^jt%=R}X;I@3T`1gM8!V-Y;<>~$xK$gDM7?Cmh z|1QKdOuhwaG+7!wt=!|5-`uL%P(5uej`5Y1=kNDs`8+bL;1f*36rX1~pY;jQYkV?6 z;`aoWLIblqVue%(L%Tgp>@;%(OY1IlaD6819fFApJHBAE!rL_jmQ)qusrT~Mw%E&* zwsJ?0JfZcEZ5fi~Gbqm265E046{l>bb;!I$5m!W_v;2vtNfJ-`DVPn?SklhG@u)nQ z*s+!^HCHF~Q8#uVrv^cmGqm4HCrV zrmEl=9;`K#Soe`V7F0s2I{X~Ir?^|I(EiLc+RO5VI?ac8fP^|qdnxHp0h|0wNOsP} zoC+=*nt)zj{wad|PuaY%MHW|=wZ~W@7GGj7+2X~xU441UW#;Q&M0n>>`K(_xd4C7< zn`%RTB;!w)0k}VzaBorz!i$TTesj>Ke1b>QA-AtXif|uRH#HIhbiZ}PkbDq$9NQZ5VJ8JAvG~eH zJ2wU(daRe3X9r=|qE-j`v+I5#7|(!_%Dpc0dsm8RfckyBMV&x*IoRDK;>ClA$iV+< z0m^n*;N3ZLT^+89U>vOZTXmk4=UU2sOm z13#KRS?Nz;kT{OYXg@H=qy=rcivk8K)Suw$9jhGHFiNR@!eb*D4b%&tCU<3xbB-*+ zE?z-tPtv2_BTC_t1fN}qW_NLaS*!f+69K%>_E*A}O_u$>`htmc&cYx?Z7j6a@!r5H zAhkM4IbZd}5IHKZ#gs?jx}`&#g$h*r-K5!|MuC6V%Lc(?##3Z&-@QdOe7BL@$8{B_ z!aYv`VwK(ID#mM%=rNuuI2K<8RvZd5?H@;)!|Iv1c)Lk5ErLqQe^}+W5f^gpKBcd4 zUkY?wEl&<1R{742->K*+&J&-13^oX~Bg>);T~2m}iH*Edz_3Sr$`o&koVVHyg8YSU zfV>Yq2l$k6UEm&vp@T$&A*>#*Fl5hDB>-3eqnuZ`Bx?8wB75$)~~^R`heF-YbuH(ZyLdu12-S20ofO|>*>#*ZI`>b z!=cr1-ybn$7*MW(ojjor`Fgv=9kebUN~Kc1KxVQU=xw^#w`xQCD0NyMafO^reMV~! z&#hsP?LAA$H^;5u(Sggsu`jl-2@v?FdYJIOB3AHEyZWE>mRZh#T9fL5m)`J0=d5Ey zr_gmssa=aLW=e-FH2n5SbS1K@16^HRjI{kC`q;8`ETXMxl9oxDow2_DmEb-PvOdfvWxY z-+CopRk-_oJYb3E88ZbmKu3Ec01KTa>Xd+AcJ(eR-|@@(RQ^4;>2L)zRXDl0)Q;`^(>u^}y_^RFY(X!L9rKvFT3LaSM#kfj=C}ocjMIT!*zdYc5{KcbYynz~z zdA9%J?x{)Yyq$R$RsEdo*)I|L*`Kq|SJNK)=O!WJN+p>LHcYVYgeYSo=rEah<`HVY zgx$~OZ^Vdm3kx-=?f~gA#-v1y@tRolpW&o4o^%|PK>$W9~oVDd-VV>PGSpv2K#W(Wo#$@ zQeRVVrD%h2NVRB$qqdqSPFg3}OLltoOek-Y%?ZO;9ckSZPNS0qHjoZ^uc8a%H${ka zp+4d3eukG7d_oXh-L`^{<1IP2M%|IG)Bz~iEhk8qM;c27I48B<)UJsoFw%!ZWh!Bd z`}9>L$W$eK$$0T1Cc0T6%z0~Rw65my{Zs@(K)+ylw-*UsMjEj&ZPoVMwXip-iFX$T z(hM}1K5>e&%ZZALDw(p|djE~20}ga_{TkdID~HrBQ;{6xzc^f3QiJd1=3r21_NJb( zA=PZq^v#|BN;-#Mmpi9Q;-*)UxVA_6RA4o6az5`Ta zq#^$^CL6S=0m_L3U4ZKLb|*5x-jz7*dGed($2xCg?ZxlOew}^JjCMT!gVBPsKa~q& zC5|0AZevGp+?D5(;d&GADJUEZp^)t8)NyXI^dzjPzPV`}8*Rk~K}h(Fl!2wxe#2a< zjAC+A7kcI9el6J(5}+j=t3t-pXj2Td@Kyj^J zO)bBf*IPO)HNZ|B-xt~Q_F7~vMipSz;o;<2tsotY=G7>kd<1ttR=38Y4+sOn7I%dw^3igok|Y$ zd)GfYEzayGGvD0+ZkCsu6B?mCp=PDOn`S=L8N9eFjqITQGZAP2zYbG46jp8Tz?L`; zwnLn%SDzZ7r6d+-bjH^)>rDe;cN%#qQ{MnMvvGkU?wiV zbj!R`(N2dv!#(TI-rX)qHD?=ajEf*UVOW(=S305C@*$<_-MY!#Y4 z)=k>tCGo4@uunh9t3@HnvH3PNsVGM?!e4!s1SKjpVQjMr(|u7TAV*F2eSt5_N8ogE zlr^nSI;q&nxwqKrzIsm#W4!nPEwyI7VV(Bm?pbl~C-sq;pkdYZLy&X zLBke3q7d=IwqQj7Fke zfCSZQMP-1jh6Oc3Fi!+cp0LMkuCD!eR&|W$?1j#3%XbEB6L2LZSGG zE^6t7`@Bd~EX6sj`~**abA5CMsPLpN1$n0_S9j!DX66S!VjrNb`Rl+k`yy@;nJovX zy~nsaj`duPV4AmpS;2*O14kHXb+ed7(J1s$X0&O8jDL+NAJfKBGn)zSsX_x&2iJT9 z^{>QSO-i4VB^Z@CsM;3&{+k$_uXgc3jp?W_(7^Hr7kB*fZMCv%K(ab-kA@vZ%wzO3 z=EL2{{8PAlQGiQ)h5X-mxVz)mima$3i+2DLv^JUAWH?>FK$YVF4#vYiB*G7LW=R)% zAhUYT%T>dr{-C6s(x3+6_jdocIp@JaezQ5^-j1a2U@teI?iSf$+vBLjJKy@xj&09x z3Fpeey)AsQ;g#(XriAyFdx54x`{ElUyzGgA^Ly;@#$JOs1D;iYjS`*EWMh9=J44go* zq|d~DVngtS0h-b8WM5@Arnal zC~Q_)Mkqw$C3C*igq2!&(~Ox$Vg6#qUvCCHSC2$e9EVaN`Aq37agIs1!2xfkn+k#- zW0pi!wEWUz+;f;ulL}as}g(UnV~VaVdj4 z*?H^P(Z~Ln+QilflRtFH;U>G6fFH)6bYtsX&zJZFt7!19i$Yc~`bMKF9gNmgd!YHr zfwe#}(BM7DYE=ckauIz!*J{o~!!Mn9FXfjpIxsOW(`#Y)pjL`KK9xRJ#D{TMDl#!d zj4kw2Lq+S1!u_)(GX-MZMvpygt3Zzw$I?;xe#8oGPEsjmHz$_oBs^YK@F`^UQ4e@# z6Kj@UL650#jd7hb>U6O06W4SJxAuXgTH8r7ZUVyPgAMM^SD`QCz-QhxQjdN_^H^}8 z>A{fqK!bSWd71yM25)*k;kPOQNZmzDf0@h(JfJhYEkaTJQbMVj$2@m zD)QPhCA=jp*`!6x(*laKryQQTH6M3%NY-#&nnnuzWm(4#w!JNSVwJh}D|q@4BZ4M9 zRj^kR3hZn@V88=m;y*@J)@v`|ZhY6=ke9u4!F?p$8ENSEB~_}vcd89KmPGBb?2a0z zS<&{Tvdwzj(Li2XqRD*g0mh=Q zxT8^d!TxJLMJhGnqh6Sl>HmyKZLuq+e-W;#>Qq0uizdgYOq)jEy2OQ6(;Bwg>#|9Z zDpxMiYldH*i)~GRvcK^`y7QZji`F*q!h`|3I$nu9?I&wWG>BCAno{!5H;Zxuv2~xa z&wW_+a>T<-@DxSrdny@i4M654Ipd4lb@S!9A8i#}YHY$&Z*arjQO4k83~wX{ln{Hv z+Ifj`-xh9>dO|La2E*UU#2C{tIV&6%${WXl#fEmQCnQAhdVt<`aY#^UOglYLVCP1G zPsf_5-D~hBs&u!K_&P=_Q7oSoNv*7sI6_g=`xf6&U7CuCmE_TnXLHc%u~rj1z5MsU zNp+UHhbZOp67T!mV{ENEWzYob^fsjT7w5?%%1OqbmK?K1K`bxjhxR)IscYosj)H@s zl3!EAJnlP_+*SZ@@YOWma+iTTwTpnZ9_LG6$ymQAx_oNS)yxX$$KtNRy^C21iV2GV z?hv#noVR3=j>y6B^imRU}`qz!@+sd7pz}@l6PP*Bwmn7;+S$uQBAD1?OvyO z(P={6dHkcMio0kBsf$cw;kk@BzT3GDWH6qsa)G}CaqbVom_DE)v1+{s?dug6BtfnK zc4tN+a>8C?vGjzfo%=hwAV?fPqhM1Zlir05qK>@Q%Myc`bF2T5B4mVA=!}m}%oi9{ z6}0bS1x<$9 z4y>KJc1TZqe5hA8wE-%_I0-jDT9-twg7!@W=Yo4lyf+lgiL`RvX*J&R;%kqBaZdPN zSMnv@Z9T2nX-{UPoV0NSrem90%DsWq0M*aa@+-gncIv+Hb8v7VrFGlR-r4K)lfxA~ z4wiPHh)HSjh!^oG*`WVL%dYEfbYxw}o;*$a>rFmuhQ3=4t~;luJ6$d8$DkR}eAx0q zig;oVt?$8ia?DiU(IB?Pp0-$RQ^7}uw(f_~)*c66MmJqCP;ZdDWpwqu`@hI}K3iW` zH=UYZIsdEygQ*D&ggE{Su;`W6s15yK@7P%V)%Q01%k2$?Y2TmE22_fs;b;iW_YVi{ zB)h@>+e=ly`T5T_oayf+}&Q$$iPfsL5zv20PkKox{GoP!`*e zx>iMWk*Q;2U<{7(eJi>(!`Rwss%%1zms)L2jj8BknCT}4H#A&u!}lFQTOUW>fMRSd z5zu#-(oHZEN(8nL#|sTj?z?vMzW&vNXPq#`Uf5Z{XE7M+3zmtB!umJ3l%ekkyik`gHncw!&sW! zan%6n$3#0m4H44=TY%s?KH(8sBp4KUm8YgZqXjRn&}aAI%o6L0t@SR!m2r>5)|Hr* zu4@U;{R2GPL9*_0l$!Ptz2-)E*AF0f5@0m4RbJxd}Kl=br)*yGl6Fa;)(rVm~|fq{aVE^Sv^ z(n$@$6=FNdSeVXGCbmQ*tIFSgXT#VlC)!2F)X8LQqHP<|9|NnIW!&` z4=+k@8DiqbtmgzM7)tk~TpJe;Mo+2WIm_=$&75A3+A>eOd)x!p$|%dPsrBj5+{bep?%voQ8hfy0s5X<=N^|5H6QVHn_0QCPjoqR{yO~BkAe$hdZhgC zNbl+tja@vpE&qLX)+|wGRAr741K9{r&VDuT`djWS!w?;DsvGW?&UW2fV*@0Y8~cqbTi5!wOU~45rNNrEQW@P<(D9E#I+5}= zFeYgYpD5&B1|vimnG3QbQ5*b9CX(1L2~bP5n`duIV0n@rlIYHx<|rv>SOuwG8bCE% zVliMM(#Ge`L$P|qdtI)j~AzCVaKcIf!Ap)m*HN*)#*f~EER1yi9seR{9Sj=fN~UrReV zu2a9y$SPq~IENIq);>Ij1Rg}??nnB@^FiLu+tWCij)qr&^YpyfMPWUCZKKf%31w-Gh@4J5|fEbn8r7<9g94} z?d(g>D@Wsv9Viad{;-8juR16l!EmupniO{dq|TQ>GcQZRJ%z|%6S!aK=-g09{X}>l z4n18-7H&`scspr+h$yy3@Xv%t0uLblG~zkEu2%jTzal~y&ZI%6wJLdC_lPs@;R%d^ zOUD02*KxBS=b!!Ols>v`_K#Wq*gdBNOA0?O)R`-^Nx`1np%?l?=iByFT_%T=O8MGJ zV`a7a^tXr&N9kxGcF{>)T6c$~_)X!*Sw`038P~0|hHI>_fXVNChRQL)*A@Yv`rg<%!w1<1% zOI%Oc13tsX2dX-e+MkB~@f8yhv~_o2_Dd=%P73?cw=679z>rBxmOk zv|!B`qLmsq7Akh-nlR>^#pwB*h%9#oQ!udfp+zQf5^NB3_l^lT@#{@L_sKP$+EP5i zZ_1DBfiMvukC6_7b)v{@VN8|ucEI^%xCl`p=jLl-yj1Z-4{kYtEV+EM;#GT`c9|e{ zj)pPAA|%MfYD7OJjuhKFajmIL5vO>j=u@ATL+(Y27ri8H5m2j0Oj&Bei&1Kn|2l*E z!}^JCR$Tx2JQM=1H9-<=Xj`8j_ASJ~ohdsN`0f6gx3&Z2?)3vY4g^brU;*o(_M8^`LsDw2PS`O= z6=~Ln4^xSQoAIhWJv9s`_hXP(M`_m^5vZQ5oTXvT0HMe+!B~ULIe>Z83F}9~XlAI1 zO85$S#qX5ynH9-v0deUg;RiCO-eUHf7Jx_PA-eu!I6><`9D5b&j@p<%dGkN*S0ufi zlK6c?`WDz{p2A$|N8W6Sp|q!7Qr!gwpX+frumnzE5$!A$LdCmga%?`&;A~$%kO;wq zaZArwQQ2S$PoI~!nT=d}lD2c!HJ5lXjtz7zk|(PA=-v0r3zsw5Q@@{m?kDzw~<3^c4A19dwBRw|T>~5AwO`|PgRpOtC>Y5pm1MH=c@M`R9 zxPtT`bURU|^Bn{R&*ygL$$3=*!AjSuq1%G!$J6IH@LVh+Az1PpEe%$+FBMetzN%y+ zt0?Ue?@ZP3&r|T>yC&kF|*)|ekOBQd7?4IhZ0%lw3{WN`ETF`}BJv%Jd zWE$TE=mJt2g%yZTe}IbzZ$4uuR_3?KDUB??^nHC4WL6%6kBohKtPUV?$$?Bqo+Q-q zO0^lid4#0}mmey>%!E_l7JZc_Gq^G(lqj0&b+B zkXsX7<|>|8v`9L&@VqE9Zs_a{KB@YHV(ToVxkFZy-&IDeqTVxI`hYWw&y09R>v@{C z&vY~TlJKy&3AzTjh-SYAAc|_g9a5Q>i;eXjy#hslGdlKBQ@~!e02bB83j6+^?w#fE zlWl0UOBYwb^2vy9YiUA?K2p*yRN4`~H34K!t9d-XnegW6DCXq#(=$nAyA)Q{Lz$$+ zxuD}E3M*i5>qW|yzeXP{yIKN+uOyQErQO2zH7zqY9NUbDG)VOb3lnTAWl|#CBQfU; zbwpV_rtxBk1ceUQlrLGjUnOQW@93%Fip=w>73_3)UF&N zPajBQ1%(JQc|-V%%Ej{|8E(JSMQopwb7lWE8_GBsISCM*xe2m*$m4e{bM!*Zhc)BO zGyUpMu)XI#oiE$W1*ReE|BO!)|Gbp~&{|!McwLZy_ct+!9@X26Lry{QwV@&P>gNBo z2THH@FgLn87wFN{XwTqFA0dk3$Il)x{PH-(Yj^9bn0@j<{oDx4QHY!izv4*twLYr& zy9=b>Rel6Urk|7_j z-DcpQo5G5g9e9<@DMe+KoNT6LsoZ?kCp-kt%n_{8q)xT5FG)^82m@d=d7ZT!Si04M;gg6 z@#jQ2OG3*hpV{X#<*2XE`~nEBRR~G9=()19tah#~eXFteFok?DPUi$Pdv1e-cyGww zI3@0I6NqoS{&_Uh&iQG+{pu2rM0ikNB2rSE4Kk?Vqat-KDxcBKOgy2uBP`d@h{sf~ z!z|~9Y9p8}bhzog3MWuZTve&i&O~0mqK1s`o|Q)vNs7j&RwjWvk+TFpwDVs00i_fo==>O)oc0YF3#ckPE$zlK^x;nDrtMcbbU_fzD1IST`xDO{?+k` z;=#s#y{Qw<_ZxW(--en3m~q7I(l_zTT{texmPIi@8x(Wn7QWOdY5F+EwXHGyRI~ZR zaUptj{cYz{)t;`j-^?*y;s5sK<&Oh0x&bWVm>#@)^^;u*+tE;qljWQ~dI z_wQaDy1}0tv~s-^iFgI46LzUZYA(kw4CQ5j+TB!akoOEB5p9{s!#YXrg7&#LBgWz|fuQectQib(&* zVj=VWviS45pcSHE$5Qbw9*D(JIP^_@rwVwbibXLQr!61M#LnScP|SYtn%=_>OHz@fh1N=sFk#}ihi}dL2eYd#=B>!4BAxL9$lhxY}e|K z_|n0hH3y{oEH!PGfqwiAI}i#$1ClfrgWR5IkcFqq3H0S3NzWM38Zbo{f=woAZIbHS zEMcB13{&+3Ui!6jS+@bG`^XOBtREoz5;J>hM0ej}tH1PJOrlL$*>BATZ<6fC&@(INNi5lSEXQNfiHD*PSVXZ{Er=BS!4aUaZJ@COKJ98dPq>w z#hAWDg*KY}9@V$jgfWUvMcuOK^VDZk835kj&Nj--nPY!P`8Sfef&xxvbtnwryV1mo zgM^jvhktt`d_$siw2M7E%k)7<=Bjh~B5!yvq3qxXsnu=!`QWVHRX!mhA?Ayh5Em>Y zIG7FRWYc4EqGwtp*9cbx!^PNERgCs(!c@|9=CdiTli&0GHuAP&RdRJp6sQ(h6t3iN zFMd2HTpCceQGpOojbA}*L-V^oB8|#ocZDY~6qO>>vy)t64if*4QgBDy=%VY*(igf9 zke&MBtI;>&7u~ZLBL50oZC^!Y7uAMWebr|B@710F&8>CAPy4$!=`ui=El{7(%=cu; z2lr1G7tt@Brb$;}wWMM{b_tKuAx#omhWmT@U^uvCGScJlMRWi8ipt{>Vq8S`FbK{Ulj!Skgv(79(w~&Lmd>yoSW`7{ai_o} zt0q%p{YsY(sk z=iOz>D0;}rSzAFqc4N;qA{EJ}i)*tU_>Uudll9Pz_V+SK)Fq29+H$qY0aUL2+Zpb= zUNyYSLJg~=#7MO}guJs0&WY(&r~Wv4FMLsPinJ}3dFG%nY0|JZrjk3yj^CkYgm(;pd`DJU{KdK^n!y+ky6XfnJg#liu>SD@Iwu*m~ave60n0|y$%K7Gw_KsDw;$5wJ<7Mf332qca4n?T${q_$T8(g z2{5vYi0+Q!Y2^vjDshmCJqcuT9_KHT(NurVh^#PWikVrC?|EdtwCTKn3Gdu<$OGD# z*IKwDbKIjRWB=<4eAqE622#UKsz=@^U*QjtTHI+As_O_I2m#|KJ*@~Ga&S_e>h+U!rG$W197^aFmeZ^(9X;T?sq~~CW`Tox zJ!tA!#+(Un`ekrd_fGFJCe+HLKRG`_kRkZ?D*EKGyw9n#0G5yakz7>k+AmwCu)c*2W|>Mk0$FHACx*s ztH1sy3YC_~>D`u{GQcldB1-f~PMpV75T9ol{A?T1j!_JIO|+>}7h-xMuPriCnT0~G z1)m0c`NCZ#UhPO~mC@sKSE^Y8tbTyg`_E(h%rPz}hdD2z^lR{K zpal51T~{D0Mccv{qMcdZRB%i}rk*g(%q+Ri53icRXl*SVFw(pit2H}_Ku#e(HZKv$ zr}U1LtRf@KzU2#$C1+y!G7v{%t_kIbNJLN)>Ss-%w^PKc@Sxj|^Y-@9ONXLTuWZeD z)yz`ELbn~d{4BFQ^Mhs_tDWC+E{pHoWa1J5(=S6G;_}3M`l!I>R53?IZZ^1D;i#^e z+H5oUo6W(VdDA#*$I!8S(b>60<4Nd?LvKU!(D9NP`_T)VCj++2?*}Q!hbMdqV)2+cr zzpL96aKbx?(#bVOHFm%-n^Z-F7D{t&ME@h-IrA06bR7iL6i>?Dp}X#5BoUKB?VSAQ&wCY-l=_75#coan4|8?VW(Uy zUI6MpnZ=UK+vk#QKNy9faT4>qvpc#la7gX3zZu$JQv08iz`y6pb2({5uD}R-OZAbV zbsZkpo5b@H_p#-I97_KKBJ)5rk|^Ms`F80~5?~|P)i?U+%irzoEuz<#DIfeE`*Rt3 zbhtpj-z;2e=^j9iLN9zDW*aN{YrST3M7a+czB$_cyQ(x>Prbx*KjfCXl6b4taXThq z6xMP3W7u=oo;JAettYe5?M48=w`Cg7x}xsT*!Tu(@7Lp{3yD(|-;?5kQYjX@&Am-0 zc50%d1!3sJvy8Zz`wO1JhOhro7Twl-kX!hdAs&cOU=}>Gkkk?tqFl;pzZHb8N2HmL zKKekZo33OTczA z*4?|Jdi;Y|#Z`Kn-SD%QpR!~WG+;3y;Lf@$HGGGLm?6d#BI`iSbw3_Tyy9*y&y=E0 z6BGD5UPF$Y?srSk&f$}~Hc0`8=O8PThZ6~X`-JUub9uDAsLOA11<6?7^ju;RAwDiU zo}T6B2pTy57j8Wb>?79!aqCw(tPz~`Yj5%d11iHfmPFNxB8vFHt4EE~qYR~CML!0gz_A%A|BB&!YIC^@& z0@C9reg2ZBKW%^+`#WiSnC8a9YwBODH;{-u$$0Dvg;`EY7QCQ{T{l|?Y2L3`b%j+w z3Tl=YMYa))DJqCzS022er#`a+sXs79CgwuuNXc{(#G+KTYJC@T$_?fjr>IkPsy2LL zh#zc>LIu()%>GQ<)nhV+_^2TIZprtEw}R&`A|9_`Iyk&fH(_q3wj_F20x_6d z@NMYd8B_o?*Wur(c4eR5d$$=~r6<_JgI7PD+P|2h zpGfE1D@?XCmSm$tdM&nDj;(23O}xI9YFr$(P>6#h?wXF-|Hg*-MdOM+2xDly2nZlY z5G`I*f4ESEo?z&&#k=*s)yBV62rv32qYn??#C?`@=KbzDtMu?oERJEw>a*Sg z@!oFkor<1MGqTHg9oH*ShpjB)q@w|=eb%U1Mpvr0X9+we8HZ=pEsxEh)JwBR;`cd3 z{Wqpi6{Y|L693s)bd<_UII#%pLL64$^E^DNjT*XZ}N=R@E6(7ayX)uKp z2O*hG?KSz?5Wykr5*m&!We6B8ivw}hc~{;8q*HMXUx&CNYnr6_xZ{TSgJk1U{cHTj zi1Oz&q06w$sE}k8HX>dHAq_vAFi=!D8}T*MjgBFimNkiDZXT8ZK#R}p)s?I^uZ$(h zwF4P%{Kb8#Zrr2m>IM#Eny7Z zsWG$pvuNgFyE%wV$>2nSicaKvBm6s@Ex4cJVr!kLzwG;R zrSo<%&9&=X1&Tovq-n3KGG^NYpiuBKn4Jc`A4FTpNF{lhKlrUAh z<_-L7En4it3t#WXxZ5gQdUM8la&E36AH~FE8R+^B-hQ7C#OWIMCHoXfdVz1WF8I%; z@dNirp{H{Yu4qjnejl=|UF1j>ZZSk1+}&~VeOV;4B-;ljq(Gw8q*i#gjFg>`3!@yP zY#m{~6?@liT+DcDKcTZ-+mxdq5s^8%V@5E1)c|%Oa-i`q1JAAleK8dR+!3ZvLNQ3@ zqc3jSpc=yA5ocSmyvS7HmeDTahEs?Qd|9abcIw3oI-Ww6CNaiCd=tAnj|DHqg#7lL z_Z{?@+xRl51_O9$8<$SmX^YV@&4r8_ub+H{gjBqvRlIPa4N$3xppLuhlyGg&pKRT) zP?V|-<;ZcR%|4qwUNQ#Y^)XMUJ9hKN55DM5w#cDp?}ZD zM_0cIFGlIt2D?CIu}q+pxv_Yki^Ce*uis_Wet3G&y0dzDD|{g7bES+@G9FK#Z$4{Y zIVgCR?-JeLom}y+E+-9)_`fQha#F`*jV}E;eDIst9Leer*0zf}p(}uSFZLGZ2x6FR z!e^Grp+S^u1gdUpl%&GZKs^oLgIXLGsNPEXk>HpU%(@)^6n7YjxN6ENLA>66LoHuV z_B;=ZFB_&b@C}pH##b73>nlRdzTDPy|3WQu74Z|9G}ffTDA`F8;c$j;VqXBCIykP= znU}>zx=IXO(;&NnHha~bEU*=Y2$Z(*@=>fRMPsL$``w5IG39R`{7ENL47zyHQ zZ1uU>1nr*(mzT=>OjIW_l=>Cqm?S33q@nWAVi5BQ0;34;JQ9%P{e6I;!L?#4(ECoA z;3urHiidI|mPt!9&o`Z+FKak+)D^5rvVSR6F(3%jampN%_dbYXuFYem$JWAV1_ibT z{6N)&TdP9LQ^uB=3TtoRjEFvk^KV{&m)Wwf6G!8bkxhCV&eTHSy<_~(p3vg%1b}jn z9)6q-HX$H$-~yBH2lQ)+?C@gRbY$06k&Y3awR#oU!3b$cR4eI?6;T&e`#Zn^*#WR( z7pj12kt}pw=E}I1jK+9iRvPos>ld6UJ zF@6fnO)r;{clHEYhj#SL4vUG2QS5s$)%q|TH+cI|DF3yZ(fA9t-?f|*bF$c-NYqkm z*uz6XOfrT+utUB6;F<8`qjI(cwe&4F3zAZir6dWGVxaid_4)fp!{e}BoC)sJ#nX1L z8_c(~xM)no^qv0ptxP1<+WOES&cm`@q!z$xbh?IHput0Q|2c6pudS70c*GWfI4X&= z54Z%VmV11)wnmr+(9n5KPP)2#fcsR>4@06ZmQkHamoXC8{I~iK)jCdmUPgUrr`-Mh%>PEM-Frt#=B?}8C(k3T(e63xJ(MT) z$~79YIx6l3{v-ZVj z`#VqD3E|;wG;8c;UacEX#^;pMMK6EHS~FMDyxQ6b)(1dYNmA3%5gh+JitLY6PA?G> zH{YBK+^+An0v0tNn%|Ca&;^I(e4{$JU;1*WX8i5p{(7ytGnaDqn@Ek2byXT2@zp%f zl^*Nmx+0sG1fG&35uI1x$>G<4 z=BEdL*J3ai-*f*wn#Z7-G^1+VsD0+xoV{fdf+ zc9a5{I=`4(+kP=OfU=WyzjxxaqlIW1$x+Lj>p)VO><8KGuS7;>i7RXIBv9U0f111>f(lLmkU#n}^ z%jAahkRy)GYgLiD)k&#iRVa@geVa>29QOw)Oli{YjpOeAKut+mZ| z1rWs|3jw&9S&Ey8?do%)z<5{k^pAZCuI*ipKaxrvx2-jOM^x`rrL*}z!Bd_XZ&1f> zfLdG1Y!7w5i0G|=Qi&Zffrk|h|xJM3st)}as@R<>kx)8JqXM!b|5bN>u@ z4&_ZIpp3tJQ@K67%3)!haRAd;7F2*1yTqsZvO<;$UfQI%L7dFB?zp-3N`t2QnOknk zgHjw%@VQ5E-$QLMaW$c(DTb`ps^BTK!IKLy0M!e1vEjVH6%JN=^q!X@Z#`b=iZm@E zt53)vC#P8?ot?vbXQdqCz)5({NcAS+ioHrfkwnYFQoKf?qM;4hs(6XH0}+nOzv)m1 z#O*Amz=xTuK5zPMdfW^gp=T>ARO}I1js!h$!Z^}1yGdXlN7A@jEbj@ZR#4}f#A!Qw zuO*wE&b(rkZDCX`@`wdLD8(<{!FF=qGVxMs{+PCmUKdVwEP&ZFG+ssianlPN6~RlL zW^0I2JG}Gf_ILI$X=AVKzh{ur)pD#HY)4*k^8OCE6a^hf3|qMk(xRo(#2kc!irXpo z42iNhTOZcHCOn%40dg1YR`*f>pWhSqY0vOdmNQTjxh^+G>Lll!^)}7em->Fvr#+f(VFq3Pmg*y3_b_{de_I3x zH#!*eiSf$?l@F_{Id?dz>M7j!WnZYNd`GXqYU%HQ|2MIm}n-Dsl|n>~G}Wv+vJ zto8sj-|aH4>Jr)LH_|kt(?_lAhIE~%U3%&>4STCMu68jdX2DOrB!?GU-i&)97F&<` zY=rDEJppg5v4*U3$MsRwjSXknM^Bu+d;SkqZyD8gx4eG`hvHD&Tii7TiWiDQk>FZf zQlJ!yyR^8wTZ?;ehhW8BN^o~~p4{g?zyCVVUMyhc6(svRd(So3d?x>N7jq2yAb#)u zII~kBYqhgrjSNpEyvEDWRx|iqa~5n=pM0vSevmIcVD`UlJ=;oNV;Y48j(J@PFMoUR z7Q8w9>$b+nDU-jwmg(!x@iCCI`wVYGjb_7?aaSAN z&9HOQCHt~R(Ri`)w(&6*7iyRFLMZ4{6F%m(0CY%3XT{U?XR|<+m871sRkl z_3j#QHKH8alfoXYO_n)h*V}lCd0`4|(bOOhZA+*;mhn~i;zFGq2a@}`u1pfQeEJ>KU}mor7bwaF}$ASFTG z(tS-kKCf2|Cy>O(jOr8DniD|dg2*;{2-;kd0{OwT`!TlJqoU+xK#1~FRHa->B`d`+ zDgHZ7jiq&a`*=-YkrTfPYx=2>f!-(K=n`b#jRFO?S%ynQeKX9qIYye?v$#h=F2_oR zV~`{Rql9XhDx_zI|2oK2&_xd5d%f|A`-)7gp?tr&AX2$|#wO>!>{HdN^E&qk)Hq2! zGCNQrgh5jsKD45G-{&GFZj)`=5|PrLIv*jYn)LI|2M_DYOYY+tr^6`V?1_z1+eb7{ zOBA?zyp3SK!Ma*r1`zrwuDE0%8nGmJL`sDQEV@b*tP+!dG#Pl~4>uX~y$-8K)(JHg zOkGMsQQT1@hL_%*o@Aw}E^c2fz%LC4{npL>mxt2hq77)q@77JUX4<8Ioa^HnM5KSR zy>G?*UttyPsI(K$|C`X0VvQfUM%FjTO?Uvr%|D`@IaR5lp^{*iCt^<(p&V@S@im}4 zjcU;vgjLAgv?dS-B;qyUBmvjh9#5xA5>Rh7C9CR~=)s?R=Kmz3=@jwkhS|R{3%4=O zZ7Na@I}opfN`>;BdK)iY>HB)Q6vB)v?+AZSU%WYl{q0hO=M8!2x0f^TX#aEZKln@S zbM#&O$CW8njqc zzB5~bo;Ns;JKvv(+C3jw$-8);ubMqi=fg*P`*6icjBjVltvRy%XV)!>V8J<2nc>){ z!Y!t+*H+#d0;XoZivn=?&tGXbr%KXEo|5$d;!tTcrC{U)32^xM`X zG1VQmqU|Sw3djhwq`=LVOY&1^($U>Kc-X@a*>|VjiE_8N(;FkWe^@Iqes^35BtI{e)X|oWfIC3yel6mQ^zl9TU+MB}d|GWU(-U;?n&OUIv z+4@^!hcz>~35D}SK|jjQUZW+1^G$CqtSj1b&IMgGfyo1Rdmf9>Hzm*8i8!kpu4`x- zr_vrcl?z3|e6l(#9sVCZgO00-qhPbpRr6-#Yj!|cM8ieI2Z;6rNEAuUD_>xl*A!j} zwbJQ~h;*sedIv;WVACOZ)ORV9W1~t*Lrv0(l(iUm4aa5>r4*hM;mnrWOVM(a!@$Y= zL-l&#k|8!c<1@_wTS|$c#nAJx?E#BLoeG+m+h#VHVvP5XS@Vad_8Byu80+Vxy0LVq zHa)4q>%+n94<(w!+$o1sUm6n6W`XnZIFm!Qkm9iVPJ0HO%*ugmn_k>^RfAFViIw9S z@t=cn0_q2~ncGwGI-*3{^J;$9VZt%?_@@vRWY@5bhjHSA1>7r(!Bg>sPekkwXRFXkCbh^%lgoGGVUbuD9MH{ z3&&BfxpywTJjFYm-FcqTyex$}9f3=&xsLo{)<{`sFR#7G59cFi*E!wlQS%&wei?fZ z8@NrunvlrO)y)3CO9boxTq1_N<*14wJH-T`fxz%u?>%Urvui_mtax%B~6X2_Y9l}FpFff6a7x83J~ z4?4?BGOs-ZeQpp{mKUV?&*NYjw3(HsKJ=!0{1?Q>BqdH`A1CVXpY01jQ%(Oq_+T-z z!)!EuVWb9(3at4@Ao&^XXuRfE4<_2wT=${d&?m3T>ePD9$}>|WJFQf)K@e*yl5k3S zoOd0Mf6Scih+ib%VO!=Tc%$7l>3$?-mQkYMK(y`|Y49~O`>?vP5#8iosCw6Xw=B<7 z?&3rwjRY$R&p2*ZsJlqvP@T7eKYe6S*e`;^OBwc!W~emJMDLtv=B5~jYBkjL_o~SX zu>DJ;A$|7A`g-}{2SAZm& z;PJTS<<;o{Ty?;q5%Rb5b$s_YORzZX$wU3+zGCMtJ<&H11uinOg{L13%W6GXb7q8m ztU{6qvKE2H&S0}c^wDJlS;qNaeaP_H_wKkJvRW5!{R-hIwfkEfR+lW|CH}@fpfg-i z5#4qAlbtK@sR<&GeSR>4fh9s6dV60l-n;gIOZ%z;YEwyVB67&qwJ6@We}dqPxmG-r z-na*e|IrOFI+`|p-k|e2vf}E8V=!C9PHpO34?jL>>KBOJ4_2<@!d~Pbx9ze5jok*P zPS4q**5AH-C0SLb!HO@;gu_=fjN34LoK5#{Ho8!Ko`Y4T^3}v=u7!=RGlt<#M_<8F zK`=hkyL&-5Hy3BlZ3MN~MW}vH9!Mu%FIK0E*`A15Ul&l^CR9ZU>?n}D9zs0No}-OJ z^C^~?RQ@$Z64Cun0MIQC4o1O34IEMps#k+cbHqJ1J&TY&M~p{A{VL5_b9|gpIZ~Z3 z&`~oq9MMAmgi>Nv_5=!MK-p3T>ZM6N%RsPKaBmkkj+>=_|VmQ_YVa|&G=EHs%pqcXerM!6sMsEfL7^72utd!gBa=Y;1==%TL4-B zm{RuNDst7PHNR8`Y)s@G7bbcVM%J`d={07iTQ>`MdI~;GXCQ<}uSD)g64TS~k~M|K zkTGW$*IXYtr;0xx5YJgL@@5zW6bEYmIMuvr)Qe(kp3kEQ7aWIBJqCPm6K)j7e$=zv zn&bV)vgjp))^WZ=;IX}gv&uDcR(!%R!lAhugyS=UG~54kEE=E#O697+otRfzM{Cx^ zJ}#C%DxcXdRnI_1Aq1EszS{m&qU@7PaE0kJPbi5koDToRXtK~5*p$ot#oo$1vm5QsAy2NMj1 z{{@uUTXga@xO)C)x~-DsSlM( zniIx%qNB<1Nbw6Ev~V$hm+*ce#-CR9;TaQ*LDihlB8HM)UDYMa;&zC!E7jr!%d4 z%%^v4(T5TTdZ7NLy1auQ2cFGt>BK2X-quD-r^^{7ujfMDUer^Ytm*UHd`o12 z3cbH8fS1de^iOu283DHG)<+^}ktX={AN?Hpk$*3i?I6q>`EWTmB$sXjqAWOXUee)r`1om4S!w4q4^pQy@3649KG;gW36IXA0B&> z9i+<_QXea{9CGU&;iZaVh_qSjdRXXc?9NFa&Ep=E6AXh^M=z~-U-3R4*B3u?>Sm*) z<5`%qZI{k%p%zZe`yv`ZalDc;&u903&E1;oMAF&x-r>omMEwv!Ehsd*7OB#AF#imG zhIgi~-1$0g9NoY#`)3eicj~OW0$Jr15<01JAT}aexlKf|mV+rcKk()LS9ag;7bk=3 zA82bV(cXea*USAqH-0bIYj#Y2{~{x%qVxZM@}q4%IUF>}_$gF*MgSbE9R8Q!$GZG3 zBb@~Xk`=;r!8dMOYPlx%y-r)BEp4gEPOUi21#W;tZONqd1cevDX#o(<)8)YGBzzw%=44C5aHn7l5lB^%lD1h> zAy|+Js1(7U`qmxJF|MJFVo)`Q8Vh|b?usjui#8x`B_ zTZ{*ulZk%EU)(j8=$w<$o_KGra&-j)5%f#UXW#%?con6Xb1?hPIx`o&%98r*SvK_B zpN(O8fRO5drlhC5tD1iYFnSJP2_-nU&_z%{`OHA|NiBhS#p%c2ZxI@jU0y4yV=~An z7gld)yx*a)C9~-2ruJiD@H6^*dPQ(f8q+7}&62mU;){)Pid1}}*>F}(@0%kmj@~^k zwr%6UWC!;ei3`tE6XVqXMAzkQ80rt!@R{>C6-@%_KFUpW1kguINMzYX4;dcNNkceE4Fk5 z^jp|(1eUh}EwpaVhN4Tu`dxqjuYVi_9UfVa+wD1<5 z`Q6o<%6r+?lkdjCFt@$J+w$+eC~Xs#Vk+CNpKB+b%JG$+;2}p@i7Lb_qk6OFLey(N zd~Ox;@UF^nQOs=(FIv#|Wtv0CsU{pPyOtvS2sLEIGI;x!L31|3Jib;EV(b0Tul4uu zmIKFpo-CK$Opsu0dlznpeYntt77}ji>(x1O$Ny*v_fCobBPEng|0HB${KN$QJyA3q z{T^%i?2!AgA+OnrN9`UWYpH84P^p4#>8sVtcmeCq+9&SF?U%4zS;BG z8a!DR4@0)y#&=-*`++d0Afk!4DX<4$_vrKcOSV4M!fn9&K0zFc5i^o0@OHZ-kC~B< zG*h#su5wx&@15N@*R>q_Xfg=(B*Je=i%hPIf<-vd2@ZKdK_)a;|Caauj-}80d@IlE zgF<%%JZf}shUKNcDu!sEY&tTzEzokNjsVHfc75HzuXLNDDu3P}An%PZOP9CnY->T1+V*j@>nurw4ed4X;}U z|I?1AsNQExbo*+zR3VuGpOYY|%!6G%F2b3>Ck$zNQxePK4l`RDk-6fPlMOrKd4ybx=4`mW|1lpkuT+A2CMkg$tLygjlBGH$U=Frjmez_}&czqfR}P zxB~wHhKR(HwoJTX++$NyZJLeTXtM^6^-cc}_5}0b-9_fnSgz=gZ#P_dI0Dvh5zrVH z3D6Xo5F+K_AK#Iy-`($#>6dTg_~kSMuZ}>sivO}h7B^TFN>VWY1Z2s(=2m;X@9IE? zX}oNx_Zdid18|D5d~;LOX1Yj9?n+)=CX68fimu;+vku@5rL^d9l5z9jFY5=O3xj*g zXRI=$z`GTt6_@v6dv%;vfs=k+bzD-e2#`*bl~DUL620_;n};Ux4|XjwaJ^2vuiJ)?gkJzqMw)bR$=Q=jkmz^B_#*Ce50EpI8Z-so? zf<0=>AN2)~H|BhRIbv#th3?F!Q{LQiYM`e zCG19VL}utSNtR;wkrcRS-mGOamw>gf8Z&fIh@ayj<|ofj@jxMq@nYMi;@QPK^tEa4 z^G^=0r>PFh{u8HWZhhfdLE0h@_@t50#tSm=AV&6zQl%l)JFO~ z-ye};z2Jzy1Td{9jy+-Awudg^Qg-V<_runW9Yn%RoNkIw{yu8kxqfos+KAVNgcw(19-gJsp$XS?tAcOXJ#L}j##yysr@S^r|;&CQy(GqPdf*(ATFO5bP=wt z3*Ru;5YwP>%(XiKN&~8OD&O<(w_C}g*p+U_41!H7Ju@$^d|#TkfFcJh$%yl1^pD!v zZ8$Beb{h+-KCg|=4#OQE{CjTOZoIHge3rOq!+@9wvT8vux3HI29cLG+@OS8*8+imZ zicF|3NAI&H5ZhV&s;4 zEobkXX-!^6({oLS?onery-SYh;i+xj3 zUeM8~Q%);t{Zn{(m5f39)(e;I+cER>a3$KLXT*Zg_ocQMB6$TO0RZ}WdHEXF@yrLW zREpx|(V7v92QD-Wp+{yjC4+Quh_ogEoOU}H&$-uTaTVMO=KR1azM5WQ5m*KH;#Q1$ zIJi{vad?4b(ueUvOEKIK4{vZWY%D}+>EyjehyAUavvmpo6z3_z%@2sT=u(i0cYylL z;>CC+M;?r+6nj3^T{d;z_VEjeG}4}>GDHTj<|6Q-DU&jO2vr2mYfj9xs7X;WVq7}C z{ev4`Eno@IpTS|_5miigab*#P4gd)sEyFWG&ZKE(c*}#h1T`SI6w_%;j>K@AF5~1n zh;&%o>)mr5m>^d(VxC-MvL~_*=0sdavSf2F$wI5?CB+&4!ql0z_{R(tZF!IrPz1dx zfzn_EC!^?G&|9|SAkly50@b@yp8=V=;!1p^tF=eZ!dj2n;ctU*i_+|8VG4Auka;Id zk}ML_qi3L&g99DqVrHWX5s|;wr;;JY=6SnUlxtNUAdpDBG$iMa(>Q$4^HgHt4U8LO zvIM$cSKUwoB;l~-^A+24MToJZ)+lgG-znZqr9b9+?C?LN6{;6vt1>A32G&Bby?ozE z$(<>CRQ2lhI4H%ubRKS=#_j^= zZ+!O+$9mw+V;{VBvmJ&m+X~n!1#v4qu2I}ZDV}+z9zH&~l+lR#!3Fy6Au;~<`(CY* zH^{&!7-nZrw~bXU{viM$t@cCBm+CKJDEGWz6tf5jId?_E&J?9Nlu@-~1|DPF*54PGwCSJQDI>pE zk!@R$JlR}J9ShIH3yj>D7xbaYJ0m^H^qkPsNxjQxJ)*o;`TVqt0Fc=ZG~{3Ac0ofWDn3=U^{8{P1?(AO4>( zbv&zDn~GHfiH_`bwXtG2F**~xd!kqM*_KhEZ>3<8g`E>b41;xTL&$6dG?uMH;E z4fYczh0mkUE;Q|j^-|sfiV!}OFe+1wLh6K6&Q}oc7L{D-21$`jinu_3w|RTb*c#9x z**d>{O#xHvoKvUO@HJp^|AnzYPlLADS5?)(oa&UU`9a{4uXJWyCTMt+bCy#+lrmF9 z0edZbc$5n0v@PR}jNlI&!VJHrC>N807!x)BxtZ*x?Ok1FNVuvYWXUw7YFB=$Z?Yad z*t}3S!brYh$nuhN7EaIkz%q7W>G!Ju9!;pcQSZV_Y@_#f0z}{sE?gflm)^jj3i)v1 zt>6E;xw2KtHtSWSaLey|!JE`pjNqD*0}&8I`0MPRQ{a?AqgH7yoXp`DQnOmhe=g!M z2`o{mudX(wFa9)o} z_aWM?aJ}I6cUW#SX*@~QJNSEAP#eDEZk+|}oLmsC)4nJD!tZ$gOdNvCo_idOe$c0- zoG#1nI#mmze*f}v*k)H%0CMSnI{Ec*x%G$4GKH+0yGI6($l-?{x!PwIHDr|Pb%q2+ zayT+YH&N$q6^%oqm_9A+Dk+J@3{>*NA|g>v*9|FP+$4Qg0&U2InQejsC96rr`@NFNG{Jjv!ys+u)bJ^po&p3jS_bu@&nAN z!RU(s?6xT)eS6g7By;TC#CeSrpJ~w=Gudfm5W(VMkd~S%Svl9Uzt0-dV`_Smu6Zt^ zrEu)e3;ove7n|FxVJXug+IsQzW8>BTU{7Be;7yX$B{Pzl3Of<t{E^|Y?m~jS|#xkcpDISqTg8`t1^JiJM8 z{dnqLK2hBSRfeDIuke{fe7q3!MXI_0VE5VWEgXQKM})lVu;Q=ci?cCf0ie?>2QKop zy?En9i@N`_o?uBd7;UZpT^R{BJ&6=$N@Zv1C9Z=#(ijC-4^PGPw{S-UL7O|07~#1= zU2S>5=QyBZ%ZXxm{Qr3YU?EL;EluNV{~)xNq7j z1wjIGOyh{h3Z{L=0|6H5Y`^Ph&$&d`R|AZm@#4E$Y~*o2e6ybzHQ#Nrw9Qcr^&@x; zALGzoC7I=7f_yjlsiUiHZeBsMfYQG@!uqW41s~;THrB8LOv)W^>zM~h4L=ec@W(Jc zs8K#D+*VKRDS7o2K3fu)UHBono?rvh5BnmOb=%#ds{_d3Pv&Bb$X(sPxaeW* z$=TK6M^(jzm@@h%>%xgzEjbfh6^mNr@`%FSbVr@#ISR%7zGm3$TmP*mZyo#$vzZwUgL~Y&(Uk zBlye@n+t3HwD|$#&V7Ynj7ypfqi=`O#AW+Pm-_T2zM<%}L$8E7US}shQwl^+Kw`y9 z$r&pbN1b>=Tz~E>!Y`Pdd=;L)t@5@gnbL`0qqSQFURIF31SE>r+=#3)mwSjD1kt`f zdEvHSj%4Q$*@t@@PVZ1VTr6LX0g#VIewIFe@#<)ttA{`06UX$WSX4SbT*Ym*t+VE( zf)CWbFraXo^6n*2=Gka`FE9P{?%yZsxpEMx)9C+}N(r2|3_Q>s`7?twCKpTx4JEF+ zzBSE(B3VgElA~^0^2hTVw51wR|B*xIR81GSEHPbejroBA{PuU0cS4g16Y&5R*p3f5 z2J)TBcI%dwmc~nu!SnY*|ceYak2(1+RIQ7X;? z!hl1I_J>FrT%8{V+)<;vWJ^RoW=E`uj>pI;ueGh9cF6N8`a&uY=_dCj{JYa+RaQg? z?^&^2qejo~uPXbmatgc98AV)L{uY<85wJQH9;q+(3#kqv)y?0>Ay@K$ON3hS&lkfV zoWeEFdt`)IR@Swm#KX`dS5MxG*M@sz3A9BUl^CDv?jp*rhl6yIxh&xqk%Qk(3^-op zlUCovl{`!(@F#hClH`7SqjpZWemHh%WF;)KM_K@T%U5FiZB~7o1>Sgw!smiu2-d;z zHida>LNHU`)V-w_WFYs$429uetW_JonK=E z?$T*4rh2IWcET#A8=-o`%`N8U{mO7VwqjSV-lW=(^OtrXBD9ex7vG1PMZ4lhA<$Ah z4mlP7@u9ofzNo;QVt!Q>9bml2M?h_hNH1m5^!H0YL`dEkeoop9zw!QvH0%Em38%ICl#|7EnYq9?6)g%zYI`w$ND3R65566@wj1ds|3IIwkK7^f;wKuSN zkMrN404q|JAWo(kD*4Icz7%4ovm_QCM~b5&)vL3w^SQB{E{-~S8@}9g0Xj{F2X{xV zY`-KX|GTuS&jD5c{XIE3KCU4Ns6kgH4BhSU`MH%X8s^y4UO=l6_lk~*@#!Ee#f6Dy zFGvRic52eJ+v}@=Vvu^6fP6UZNB@b+J_R&6T6159(fY2-x=t~1tp6lr5ZdYSb;nV# zjD8{v^0Oq3{fY5ag)0#{+F=gw(+A%j-Q2mFr9;GwzLWPQ!l!N`6_lEz`TXOR%8ZSC zC9l4$oDB->zEe1Fy3#2p>@tYQZs&TVrUx}PdArQwZ<6YmCfz*r8#&XUj?b~R29b_Q ziY|WweRy~{{RC(|ka>u`SppNTZAex{ z?^+qNO|dK~wpx2;s$~#EJMUZhkG>c8+f%TY=a#ZVZ0hxPZ{P#Z3csAbQ<$`}M#Csj zxRviGCxKF8uaeB*=9}2WkL^~!-@m9=O;%H@!Ls?GHTs_4jUis;;`*1!y3U}F4kMt` z#fO*~zWulCpc|H*nUlYi0qrbCy^>w>4;s|+*%e3${QmfApU988VKxefyACvF2N%Q> zqNW&Z{T_mkyMUfR@WF{}S7nio#%3Ru`tpH`P31H)K>9Ai$hcV$w&6qJzr}8s#C}?O zoy?D?Om5QjW$?MPWIW^LfD|i55-RL1j{8VaC^!(`{)VfLZ=r9R+9*Qmb}o1xpGl0Z zzejL@dDN;TVA5Qi-Lt|RsVYt?D`V#@uXk(9f@v;<@vI5`RKY2NzwM*Z3cQ)R=_9k9 zYJi!Wp{J?5_s8QSf@9<&HpdpAtD+MwXR-K2%N%cCYU5C&?graNtKvoj_!+b80n2+) z3qfnKk0^VM+9B&29?q^)nXQFKZt2I)43jR&pbHb${0kZ}<8_#N6jYKe9ewvF(V|XR zT%yhtMjqRcKiSncgJ!A5`bm0{6nudk=)!FqiI!IP=!?{`XXpPc4^BI`HYGl`7xZ79;2aJrZci4Sg9%mm3Hb#&f$X(poG z2$M-J28W6gxCwO45STlu5zxnfvNE{Ry|X7ceuGYDTAJ6vMXfX3qYG&Y3kqar@HcXg zIpnpMlV@h*`d#J?MQ$TTASy&jJV+9uPmotpe|*Pi)0p=r2gW?eGlZI77%2c8=(TWE z?FpIuoH7zl}QcH=p7Wm>nUNGO-p3!D@$(MjGW@(uy63gXxs=qF()S>fLhkp2oc3h%#*2)P0%eU9Lm zeT~3Am;0rmC0Ebs^&{(zsQ>1vT`Vi+b7UL_Z&-lw9r>NC7WQ`w`=5k6?ht1ViWK6x zY$Y*`>6-zbn2Wt;bEK&PLv$Uxn53PSia^WD8~&;S8yqa9v5C7I-cFPDm&wUEXEV2i zG5DD&9~HD5zj-jUuj($HJ^DUGwl6i0PSw3)4mq-aW3YDkE)H3w(9qnM^;Oy^YZgjE zF8z4jHJJ?snB*R7XG%Hl5Z6z1bh@|)cRA>2=NWPZd%1nNQwuIHRw>u=Q~3`6`t)7n zzc~c!WGq^T{&zywWHi73msqrhsgr&NpYV}Buaf9^KFSr+aNzbd4UPt-)1$!%CQDzT zRx}SeXxUW7|J*r;f)^`Bk+YanS$W_<{`l^31Azr(1uJ)7#%w;afak6u7YnV}!M7TS zluImYu0z3A<1m^koFF2MH}nXFg=4+m6(R}m5aKw8w1_}b?B@?LgGDu}AS#OC5Fapa zmo+boiqs}A4_VcRHBP2SSDqvt0gC|boHhg(QG-V4QdWaYe0#2Bvg}&1m zRtuao+ze@7+nJUQhaP+A@6ov2uWOT?rNlQ#Al<#2UFq9o-F zph*RB8P|KV=(*Bk0n1#xHc zj_R0uJ$P0AxS~v(&t~GdxZk1s8V$9-kDQS7Pk8zMv9V3BsOa9*A&H&^2&&BH<4WbU z$o~r=PIAhN>PFH4)_@STv^e9AT3_|TiRE)tnDY1Tyg7Y+>)!=R3sHSSyy&<;X--#b z5&<0k_w}u)Coj?jpB+5B;As>_=EP5`I9cphb6;f%xLdxYoH7YeC)PP0=5VRSW zHk(o;6(Fghe_b9zmA$rSW@d^>-w=K`P+>LcNCqrVP7-{~SL4*T!wcXEk!`K2PB zq3w6)-GN27Xx!NB2Rh(dWlC;C*VctPXCnPk9ce39l%5`MN*{B-t+$eon3!=#ldmXx znGw)2>fUvUqn{B}{6JdFx6gkd^fiWNu;*mSmwg;o%rlsO;lBFG+!>z?-1H|MPTD*7 ztE=(XwgHUQSz$$ZE?2sCi7UlD{iOAQ1J@Vl*2lK&&gbE3uEFG`g3sRI|WbjJSj+M{h~RrgB?A?miNb>*BQGH2SVZu@8< zYlj~1S(<$QxrD~zBC-Nf%Kcx~tO-=si-*$5S#l$O1cAp7s~XfEJf>o*GtIn276-rE ztr6b~m~ffq@qT$JfAvb04I^|9G6@6}0lY{gKMcVKF2Bx_CdY|ADScvekSY!zcSx}R z+3?sTX7YWHOo`hw)>{qgJGF%b_>3URk#5|Q_1lg-aPw9@2s~uXSNb$L%f`l5s3koq zKgdX{1EtV{#Xj5CxZo!a4ke&kgPl~NrkSh8Xn17^dfh{yCB5kP!tUxzAz&ujy>3c+ z69z!Sl z0-hwxpYxcZbJ@hi7*Q|1F0TQX&%Kgg9i@lFR^=M>H?m_;5HQ9&sWROixHuX5XfVuU zNNXq00)ntj5+D_JIB_xrhx`j^uCYY*{ICCUAI(ag*W}h*I~9~4=y@)5zFF!c+BkEo zA$Cxhft7XE*w8Rya%UEg@X!YO>bunHfP@MFl1i9vrtxgae^F?d&_!nl!s=HP1l;0jJ8=PiC_ON0W+ zv693zE}Oeh#`P)*nVWWoh2l{I-Jc1xdFD|@{`^rY&yOFdi$aVG>>@W;V)H@cjM^&V zd8HFQr>P5%ZI5CXi^44YGKhcc9vdpL|B$pWzkytWVD~Jsn-LBrh$EMCnuK<~s|&OrXvJgMPXMKL(e2g`Ycc za9%s1Jm20-fqCTf+xFz6ZX|66Z%+|wRmse+%LzQczA#G%bP#;xSez|#GYcq>ivkgt zJM)C3yhcWVccCGhZ#7S7_6?%u%{WzuBKsm}S{^VrPQgPdZolW^;>=Z3LWK7+7vI9- zHv~z_PMu2>Z1p;q7DL~wZPlhq|$FPN+=IFm5z_b>!8% z*NTSOl!#atviE-owYJv$QRGp2l3HR^w$OMMLm(#ML{fMI6|2Csju%{dt&9JzoIge{ zu{@vlV>%e1bU*1P@`dsd(}dSItj2|SX<+WPs1}N(A6!v6I}lEs1~w}&9A#OSm3+ul zL3{F{v9q(&F;M#Mn%xT||HyZzOuXc%+6x*_a~9j{fR9~#^6{MvwKw735v=g*f{$G7 z4&CT9@fNbvx=nl#R3;nqziLyZs#J!oHHShbT#IXr$7d~kifq~d(#FyzwUNkH2h?Vh zVF%WG5Axvr8y2OflCtVBPs{()2aSwe2A(tk|F@I5xRPIo=y#%G6Rq*u#4xzL5Vm_Q zcPop8%eXsN7>=YgNz3|>e-sx2k6(ie7E+n=lG7#TwUJ7Uh29pv-`doFVPmOkFoZ*L zzX@R7waXxMQPNl>woO=X8dz9hD+~{dn0L_YAan}RN=KE~h;M^`U8gfw@nOoDhaFUC zFV-T|)ua&~Ax-;AA~Bdj4x=sR7dPMOcB$Cdk!=`;(dk_xLA9WE8s`ZdXUdH8S^^ce z1I@PjOD1d>i^J}5b>T|$mNUZ1pX-Qs?w8GUbalHN1?!GO>8m4)o4-x)$oBl^l$ZrB z?TVq85IhLtI*CRN*hc7nc`lqC?Wi4<26wYLatRve5k60OY9}hT4b<1`}`X=LGh#q zp>i!Y?fUhS!Uwa2@~K5AD$352m?3gGm^&@v-B(c+!5L(pX2u1Y+Iit2V1&@&&AEWP z-`9IN(vW(C(`3z}CS!QTEQ3tC>)H!E6O*L{A5~|<4FJGza@}yNquXN6UV#a>H~pZ< z1cOt#Il0xQk>zXBvKP%<_8H&WA7j6XP}~r!q`Hu8(&;OD>ZocKq0_&Heh8g=<=e^_ zN}B{4-w6vvHF>E8zD8K3537xAFOxjpO7S}vfy5@~|G!Y{4&uQ5pUBIg{^N9>AmqhG zTly|yPc^99f}pCzna_Y}MjK&lF-Ijefem_irvP^;&)g z-LZh8MU9ZW&e4KIBZhHKgvDmM8bJmWYX+q+fkrOszNx%-ax(z%>sDqiy*Pj#X-KdZ zONG?s5r3kya%Y6fJ{QHIdADt**ys4;w?Ma8vGuP~;*PCPfn6rA_$eblrk3#7F7^6f zyLYOPbitVA#bap2`oEDm4u>cIiRf;1<6CsRS);SrQdl2>DNkPSP3b7YB z)9v+BIoo`l*^e_@im~I=p6a&0L!&G;3Q~0j;eA)K`T-r6>4J@Xl_vwkwg&sr^7cJ~ zleYDYAlYzK<8a~|IV~+MUL+MYlOIt+z!c^Yx2-pi6bwx-{re$`ii)w^v4dhRKgHBP z{@HdW!cO3Ob}Dl+eM*t`(i(m8i%cX1O9*|UD)=P;Z{FYgR#jK0iNQ>Umaz0W3W7Vv zXb?@O?!}q)|Izi8QB}5Gx0`m;5|UEV4Fb}kA|Z`*3rKf&h#(zXxrbzcXz{g z^StN%&NIdthkwEb?v2;F)>?DUH5ZG?DD$1$h%W2Bn3685kjl_(fwBS=@)+^`VG7T) zmVU@+{2+M4N9V8f*?_}FO7++BS;V*@vz2DEcmPvD_I-%9-*kHGAP;Ae$zsYnOH(}P z-t@niw94CmA=E1Rop2Fr=%#J!;P*_I>yw;}i>I$*JkMC$Smqb`+#om_|wvG?9pk6LU`8dTUHY~8Q z`L@yolK%)x#4wWJ-jT(Bm;~XiAVYkCi6{t7HfW<*N!I@B>b|IM|57KE!RP(%>edI z7Dmmy1u(fsH{a8QIKAx!%3k|HC_IMP+~@hXpreSGmWl6Bv! zMeG<>-i7wHR_3nZq~9W5=9S?LQJ5C5M^c!!jE#BG(u|_6EMna|vH^0Dvl_de9?qRf z0iJUH(9wj|6URIimp0ZWpH2{#_!#2X78?`u9p=jw!%+*&k@RERM2QsMs>w|LE1O{lLqh}rGy2tNq&&)O(yHr{vdO#9%lUDxX%R5b z5BZ>W4XN$c;`pZd$DA#|jS8Uix;&NetVweyM1Y}VrK^I%=vu=Dt!4emHNmt-Yp^(C zi)3ovoYPD*yU;k-a4%eRKWF~`?+|BMIUB9%$s?!o`s;4PwjCx~6Cm9)wgz7-I0zY${6`%qPA~evp6%iae%kwRZpWyz*Zyz;r=+!X2eYg3$Wl0W;O( z?3`AmRbrY9wkFjfHWeCvHcZ0aA8^P-^IL?k{RRj5-w-Z{sL)+|RfN*a=TFzy2KseyZx7DjBvB?%e~TU zxxA{Ge=y7us^U$6nmu^K3$bvX1)4jf34H^F8_qr_VBf<fzOs6*rnWeA`qb7d zw%c9>5C~M8&-%U}=Enwvwd6zm=TheL)o3D^D4* z3hyQqWjg}|FUS{c`I?W|Jxsy%x%Ev{%?hC^cS*SE}WakA=Gwrh2*29!RFa( z$>{#bhX(_f2xTL=tJ6$YBq}V8SvhD@IdF>5BA$$G}o7b=}QE_SQZ%dYt|^RCD`w^p^q*2_3WLp602$Co+XKXzuG6% z>d;cIq}FtuK|Q@^SJ&`7FY(%ZX4<%OI`DzgA`JwvB&KdfR5Ppumwo9(WheP4O#Xy`5r+bp?EE~g>7+?UC5QX(ypzDvO%{l3eLbwpHRIr5y&!$t*n#9q1A zbU`!>B9EDnf-&Xvg`)+h7wbdZq=nN!LI6jSFUUUu`_!ZTI;d zNyj?bJcr{=*Wzbdtl1@OQOZM`jx;0~65q@ok#TE3HZsR|*+DgNRgO+ij-`G1#(gU# z+{NYtOBlwSW-O<1w)yz6N8NPg<;te(0f2Dn#Q(!eRfz|ajL@TfVR7+Val=vDTc-sW zP+VeSd$Cr-i4TT5NLJ{P!}DRCbUi@mf&Ar_4@bvO%z!24)zPBHxuWy`snI7H{#Bs! zYChpps4qpoq;f=nBX!z)3EO&bkU6Zkp;-<1qn4W5 zENIiDHoXr{OAW?@@6ne}xY^5Yjex)b%!2a(o#*unxXx(o%}J$|5M%-ue_II{hWZb|Go zBj4U}?~?3b0q(8Zq>j!FCF=gy$b{$tMD+35K5zPC{M$G2b$+-}Vh(U&zB;;eh4j7U zB2)eO8cW8B$8q2B{ng&F&J`Z^1o#^Y{QR8O7piG)lN%|TN|RiO!~;C97Kt4#by}|@ z4UD-|Z{%GDBKCyZw^X*Oh9ml91upAR_#O^DX4=C=zN_}UH3=EfoGQqhrDcqF@X6V=SI+=Sgpk1irlxkMlH%OQ99&8KOD%)k5$<5-6F*I-kk(Gx~LN z_!WCmM!(#KX{I%FM!#ER=yYt%D60ka)Xxw_2m?VfnNV2;5#d*4sJ~P!%(bU-V`*>+frbLX(p|)p0kA z-C}I}Lhm+J|MYSd-=MST3>46MD}8FM4(glxB9H6~B_N`H?I9L^O1-nxUs$A3vj#_c z1JZsvi7`E$vrvd zzC%SR%&Z1&XQI@86cY|oWsjf&d~XyZ9)i7OT*Vj)Ji9ntEXej#F0UR3a?H@&alf$> z?wVebV3Gl>5C%I~p_T(37yLM9;QLp)j0bH*O|+puB5#o}p%kXX0X8|?Q3auK*M=d~ zW6#`))NXv&y_9k!Bi?++g5iwJf^F8(RgCyn>8sGISlg_Qq0Ovb}Z7D^ieVz`4z zPe_N{+t^HKKEE8Wrm>W^FRZO*;JBKg~tgdL&QvDnH|R1@TXDzqQlQA6K~tuuKM}pFXhM+{Xv7pu-OgQq@jC9r#ulpv~6X-#y*Bij7G3)h!hDu*Vem{xB z+K7Y|2u_o=Um~u9hV_`8_H;g#O3|kQvEV;+ccEyF)Ay&gT6%CfK;KXl3pR*GjLp1@ znXcd3+B#{zZo(*W-(<+y@;oco073Y(Zf{-OS5b7Je`B?SYFZu-jjPme4vd6?AMdZH z$2|XAn8g0ONTJzmBiEm-KdRrCbkT81qk_EZFFZ>W<-%80NwY6nRG(Xd0#G3TVN9d>7B!bRY@VN@Ni{+@Kj^Gd(zWPC*|TGvGhs61@sa?oh4014EktD^3P9n8bz*g3ye=oq|1%&HLa zKEb}`Zfy08z9c3BD<`Qvr%h^9^p}bmKIDP-A|;}?;qdS3wiRnqPsAHdhMEdc%Ha4lYA-GVamBgw`-;O`N|et z1V_pHiP@txE_>|q+mE8{@% zOG5$XaA{0TOm>QNiqZ(Pt!3`Epi-(@Pt)&m!yo}+eth$@RQh?XEbb#?qR%4N^kgdcleH(f-TL!eji^;p1z!MSmc9<_LZhATxw`+GVm4K zq=iPJxm-h@ZF*&RUb%hru<_6Kg5p}*bsxktgGOE0Qm}Hi*EHI|=Uzm$?za;(RpE4M zd9;&gk8@d&N{-T=Wtb6sZsM6&!+lvh{Jr;F_c#csy>S%XUsMX1Z4cJshB^r2@nNJ? zb{*-OS$8Ak&{B=KiQm}Tgd*y1Tr)tfDsIC4FQ%pz3f4@c5V2HLRDiuqtiY@oxE4^h z1C=NM7UmzbUrmss?M7Qzc?6=*lO5)CvnaMzn}5Jg(JVa4rqcVM?X8=j(FrroD;WD$ zjFZeVu|I~1NY2uCXu}X5KA3yzL;4xT;o`16&}82G4hq^lGK9w&(21C-&}ZzGeJzo8 zYg+o&;3DrIe2x>uCaRn^IQBy^$~fs+oV1Uk`0yv0H3^ix6DLeS5C6+tcXXBpzLynC*6?(-t8HCvzHLo$a_ z(SA(GF94$roVt)7sYIjC5#aIMd>gyzDabNtt0x5?C9>HFNOep{ujoE4xUHzBPA+kk zzAyILWn;|K^z+K>*j`^E0-*-9(-E0i(}sHlDHl{}7u6WMiM1NZk9a8DpM1nuxrSH} zq9PjC%mb&AV@Q5%E+?N8aa&(Wsk&O^+60(xDVD&k^SR{oGim&D4tTgsAR_JuwLVx8 zY&$N*=H5R{ayY^ewd#Un&K(AnjFD%09X!Sy=f1zkv`EcZ$GHBXRbd5O#0zxef}+7} z(C8};QKM83uBEe>8mX(_e*tGm?fbcDSdjMPp33^1SxK_5H_S>H-w~89C&{;_`Ld|? z{;0v``SCi(vRz3<>z7mG`de=I8`h)Rb#z8X#+Ax(nRcS36T~F9qq>{%olu#apG20m>6QOa zK%w^_e&+hC&isr5b=9RV@W}e56&%A4+7LmXmv{L1OAyLAD@I+-CLyj8XwPIK{uM4# zg51m`6^LK7tH@{VFJlGZyJ(4Mhj|T}07*V<&5S+o=^uc;-=9}-Eonm%*d!&B8<#FY-5Me6?a$@*;7NVs-9~} zRP05~KIW>;C3OiBzLL3jQS;uc@8lsX*!{KYD(VDI>osVmU>2qOX#240tYgm@a!v|M zoh1A9InXqqaHDU-a9W?c^mQ6%=SLU4p8&1gB`Es!qyGA7Ej#PjMbh0zlp~&GW5!TFQTfN#10&J4Lqkd5NR#O+`KNdK5yjQ29r#=o zCLv5lp`|9>uL{0e5W70R4?9eRAtpS^Ja|{IV*4-+jW^SeI!JWUPnRmJ7TLU0NG`le zZ%TyM7#B>^e_bu3pUO*)LZH~^y=1PNQXS5JKF-!-kec1v@+X9j-5Z3+=@Q^gHTi_cq=X3^;jyg>Pfj%AgV90-<@owMBlO3NcRiidr2e$iNnZdiul zo%c9buWyfK^GqJv1o3XQ#VA8%RXzGzORM3&byHDY{R82r7Qy=8o5eRay$liPNile< zefWRuQT0>AAizLN&Xppq3F*jk^hU0E;JPt32Z`O!U}@0Yu` z1+RG+nVGlllE_}2ytE4-pmQ5JzAkDp<3rNc&}cubSq{^AzSQZCR?!X&AaSKta_0wr zj?HGY%G%TYad(c;qY1Hqt9?1JxM#Wv-Rq3T%U1}n(T3&-Ugk~2f@(3lxn<5XAtI_>p1UHfp>fBKX30n{D#mf@jFdobo- z3dy8zbNN;@$@U6?MF2k23IdcliZwa?@JzAfWG?TT5qVs=Nv@l^TZ;`_q4E(`UnP#m z1o_jbUbTnnR3`>Pm?c$YK~YLpp^)nEi}VcLAzIbh$!4$=&2Uc^!>!gy=^z#DB>ZCx zLcPgzx>mVztR=+-$_&F+A0>^4qHE3kqHb#bIyFY9A#n+ySv(E1h-3@9V(Uz!_h>YZ zcVC#Y)trconO184;nWHAE($>A#58573+MQs@yOC;TJ3pe>LJD#%FcfdT_$`Ogkx061MVXLgGJbl_a35D$}R{IC4AUi zD9s<99wsy-MYA_0b=qb3q5TVEd|O!GSLx4N@LL2c4dH;yG@5-@>{+O zoOfjZ{jGWk12AclZ}nxi8$Na##=$nZqP||;rL&*%Dspm&3LZG|Q^q&3f+Ulci5?gH zqxLqR2u9)yclO$xtzd`O4#p{S?SA|~1f+TZOMs6akf)Q{A!z8cN$jQB3~eGQa9d<7H6QCbu0L!w z`w2m6UaYu%4XV12z84um0y`Q=Az2QClWEiSHOa;1GY5l3Hu3ioc6$>X}G8nY! zqs!5qF4lUf`O^e58JgTZ75}K z*OvTOGx~voUi>8M(pIk6F|o0yx5Hi}?W>r;ADcbksaMw1_t@jujr;lGyv*a?k(l2Z z6Ode#cs=gh?Ea1YzCDzz3Pdb0LG8U?+<<<6eOz+~1=A#XGn6!9y_A|S7%|}PxB$#l z-vB|#>r)cd=!EZoGm#_st33c?JyMLM)#{6bR zd!6L8G`R;pNPJ>Bs}_sLK`x{boJvlUmCzXl$r1GGo!xV^CP`qA^!r8^ zM1ajdz(fN13RfViYnNgZ7LyJVScTEk_k(cDoc)4<;p^$F`AL+_?_89vKS*0r^tuiE zA?tTB9y~Jah^J0jO$ngK1b3>UaI^av@3V}ki`gRp3Y1vL#Q0h|fopOvKHu||SW{*O zj_VG&JGGHj8V3_l<+I_VW_#-@=Sb~+B4o@Wt>-7ri8J_Hu;s7Ejr((>vBngCm=e4* zs?rBvba}o=f_jvPf_(e<1G`< z-&kGE6{vK9i^qb^N=J9|b(anGcX3A2n`}w?Lk6{#HgPd)=W%K!&~8 zx=<$Zf%)(qiv=r;QGNJkJYMf(G%rJ4mjpEu91)EA?sc)&0vVN_86acr{G<`GMGBVg z4n7HyFL?V_?E+cnlqG2JH*^uVr@cDwBBm@wD%UGC%fqzDd@_trAn*V@X2 zqbjemJ32oldW;Dti+bc-;2y3!^cj#sNq!nXm#0lrh|2N5@*NN?-WJBW?&*W==RvGP z-%8y2?Pm-W`Z-%7SbH3^xiSbMta-%T#ONsJMv2ce-!cFCbkdTp5m)S?Ae;qxwl+O- zTdVsT%z5P_{sd>nEPfdG2Ikpl-k@&PrT4RSQeM3tuQefR=eSY-EV{s$&nHXKCup<6 z;GNgsvmZ7t(P1RX+bv0$xyk>#)Mb`09GuOQ?;t!)@t2C2x7Q!U&_d=}P@zxkc!#$@6YJb!{z}rOPBI zIR+nu-i|r!^>qGHqOQ*xr6z}TLtU3|*YH|?vv{5cLp*Y)Tb?d&9+#gz9?oK0I$9q3 zTXZcg(XBks6Hkr2u8eMiTW(N*3_NkeTs`Y&0akNz+ivt^d8noI{-cX^|E2dE_$B(!PmhpCp&^^2rfcnxZv7;i zE&|9oG(&rT(jD*|eR=6W9}-2y#WGywb*GDdS$Fi6Kzq((ukXN1EmUt?Py>%FEvH8i zKuehQ-Bz6tUzLUuW)Q@)iy?JDiBF#X#>6f;%?b{;z_bBTZr^)>W1yF-H}T>xMm*@- z$G6P)$Pq;!%LF@OmerI54eH<4o9;|g6AjS$*xpHFr|Wo5gQ$fK<_s9G*pykKmGXj$ z(GOtBQj{w(*3&`)71&|gs7yu@JTh|O&57iS^*SpBJN#^vv-E5St-0-g$QVMvl`-dx zTC-Br7}IavDEUzg!Wks~0^@J0i$K`(@$uaXw8dxpSvSiJRmCOksi*#7hw0D04MNnG zX4Re)G=PoS&rM+14g@GyHiB!)4f5wAbKN@eQ5A#9FmByhdy`K%C+djbEYEQ9bY;j$ zoTG7RHoq z7hI*ha7uG6InziUjQX_4uPD3ZQ|I+xur|=|$-onw_nUtrj>susnbmz?Y@t?EK-Uag z*!~s7b%U%Q3V+RkGjJ;0Z8AjOR}Ob?gbCl(G@Orv`%}uJ&|yv9{I2RXA`P>iVS4bp zaJ15s&+io+Z#>|LJUX)}M+y*+|B~XuF!nv|VvT?)e`=eY1IBiF2lR*Q-wQ`itfm~~ zh$r%g{v&n};ih~7P zF9khBp3(2|Ti)frvgR%LuM%93>YhP)p^OL?fVVkMm@`U zDrq{$;%e1MTqsHyRY+rwIuFB!^t3MHCCZ%FiI#r@P`k|I!%M*nfH@jHM&?V61OUna zFPSB9S-hG{^+1gOkK9SQn5 z01D-6CtZ{BJ6p4R!GsN8zrn);5SCJtaq4w`s$sLHgpwag)c<7>Tpm-gF{G*7CyuW_ zK;J&&b;1<@Q-KoMae$9S%W~>BnPNi37$g@>)w70txHP>CxcRPjLA9zs62@Gr@zy>C z!FtsA;@9 z&WR!;*$zIl#atB9iUF(2AaBRt#euWvQC>MVnHCdwd+#9EO8f9s4W2^}ZJ-5U!;t!S+_T-S2)oMRe#l9lNHpy(K4K!>NZX-gfdLqNzIsjWJJpDrbDw! z$Y1G0f#j1MSJ`ha0MEE^4HE^EjD-`$CHvm9o(ybfYguqFic?C<5(gu<=UgI`swBFf zV%BRD;xXV@hv4zsY&%=?21W|*$OJS;OB;9G%~R#)8(fGpfRbcvH+`2=7Cz_~w^$d% z1Q2G68l7w7a3Nuim?Q!)kDfeAQo%UGq(L+L;lA32q>%l~!nBB_4;+8J*jE#|RuYz# zR~h$geR(G=NlO@!|EQG34dWrj^atZZZsf*Sbb>sG>gsw0h0B9Bm41FCzAsn^|BCD& zX-x<<@Q`Xa`@Thei(IN5$Yok=xUVk(HJQsbCf&Qf2R2tiE{&4QMS=;r#|1lXi&4sW z11UczZZ!-bBYwqXIdrx%<-1nXRK&q&yw>Ebq`i*~)@5b+NT0FX?bB*&5i=dIp{AhN zA(-7QJKKG;T-$f#;N1%UuK$k(bJnVD({;Krr1UhL0 zJP(bMY!Iuhmczzn_$;EcSiAMfwk7*jVq%&u z&ybxb6GP%?ipdlb7EVdUo|SslJ$ZEsXIr)o(f3Bem6Mb~?&=y8KPLFrC|pJ-n4QAD zEoxQqpC74TQRk=j)^1YJT4F=y96Hyyb>)xuciCEyp`VV{l{|*95H>ntf`Ne+c05&W zZOd<*Dnt)vQFJksKH980fZM(btl%n$0&}k?1;?h11<+!Ls9bBmE)^7G!OD^q zAUjdb_~nS|)J=I@P^q-Mb=_h4+h&=R({m%~bE2ZZf2sb7!ke{V8YKs-hC{BGqL%UC zz4Mm9hYuede7dg==UfQkdiNe-`jfU&%=w|xF@`5dJlA6`@* z6~ltTfV0BYtkHUTKXd!T!$TI~+5PgfXXEqZ@$!l1`T6;j;8k@^6I!g6Bf(4f0qrmU z`M`U~LjfzQV#~ENe@X|(u2sn6!%!G8PdUtwRN&*Ahtypi`+qW5C{X=c+}r}m zdvyPjRY*vu56FH07IJfbks=0VGuUz+V&*W~wA*nIN~1ryu=cgfQ|}qfs>WjG6c*F! zF{l{+oR3>*{fR-{+;GN-C9KC6AEEYTEZX0PvnL*LZ=_cY%1d?xdxA-YhBF7{PnJU~ zR6!|RC$R9SlpIkfNny+L2|$<9jP?BdTtp;1m`OQO@&^%j)A@(*Q9rLRhmTA7n1U8k z>>Y>;*)f{c0GkUPvYg+Id!Z&7Y8tyl})eV%ppQMtgG`j>PQ4*-|L!KSVU**R(&hCCs5PYLk91i51{7>^)_r}D2ga`}?cWS`f z1t8~#NH=tcYxzZ^j5HH)?KID@H2tDj#f^*liqgHjvI*JPW?$V{fD|4DrYj^?eG>++ z4{QDV=wy%uYf7Uyb#at!Qr2LiZ6q8k8WS+YVR%j}E*^gCz+Z5XX$V(oyC~Uv)5RkX zlpGJ9I5>>ktHr)+)Mzs5?NjglcPzEr&dNy8592#`2&ktL7*^-*)F#V*pQELbB+irh z1808O=yIW+C0+bom;ik2nz<$6vGmEu*OPzNDTgsM>kTF+R45Io?=|rK74Kmjy7nn0 z;hyIVVD+TPqS2Cukij-#lkh9*cbNCa1(S0i`#w))_zU$)?xzI$@GW^9?m^G&g3G@? z+8RY~06fTGXw#Po5_E2_Q8mp0{SG|Hlcwl%2<+K~b9O5q#N!onLp^#`FCuflof{ny zJ}~CSfb_HOO;Lf@m)6bfQ>o^#eXo=j4yrEe;;1dD*W${rV;v!mlOTts>ISYWnp5(p z4-!h7)VoIw$6f6hLLorE7yUvVzBH5{?^{PR#mdUdeP4P+pz8y9V|bqYgm^uV#Wwqe zdp)cZX*;clepq`!b9_CVj+a6wCzXIUlS7G!#Qj91@!~H_XD>}^$WJ5;3e-=;+}0qs z>myNof9F;dZEqkI0^ia5v|m)S6h!)b(+#;^x#lHCr+NIecTfSWQe3(ge0bOvdO?qO zC90M%yl&cScQS%OpaAr@l8;LloOc-y9?i?u7W3K6CtzO?kQh_k!zF~KU)sn5SHPa} zV7>;U#JQ6Jz^ZBNvVcoq$z?lz(NcdnMc`MDHV%XeoE)f^@!1l?Xn90J$X-uyT~OWUYen2lABOMrI9QTKmqehbI_5)AZyLU3*|e zFnf*7YM3;9di9h-cRJ&*UJv~WL2{B+kmy*r6c>AIMDfQpb*#_2W8p`cekHf}*~qQz zr}gySlkme+dUj}bdmZ%Hn2aK))ILds);d~R(i379k5XL}V23|!UiJjlT%ktPHwbYl z4Yeazw7Y#VE^8S_0G(IqKTw_vh?~2{PH(tZ1c}j;tLiS&Sy4Ywt{{n&!m!)Xk(18s zu!zD%a)G{FRTS#h`N{3FNc#XPO)R;hiT(Y_X^Cz7bcN z?;Fht8vb-vCsZ#k2)AV#@Sq?gM2@jZ#*|dl9a0AU10gLn{U*a-pINWqF3$nNgmmdnDa&2U5YA9yX@YZK6mvBTJF6ZQ+pZT%*Njp&N;x`l5MmGu(5@`8L%G z7~!LbumCXcR!FupQ#U6bD4k+OCozKze^*Ri*k~fIs|iPoXUXC9cd9hJ>0u7dl&&wL z!B1^2D!A;eKO|OdyUJKm0T2%uvH(~R!c7(swa3K75#?jZ`2qi=b;WPC(xb-=ppW!F z-H}b|u64Jh?5vU>I~78~ADHf~VjSkInEUNfmp>Er1(07O%1U8a%j2AGbCe#x>)7BG{(5lmFH$nGu&meb7q>HLpCT^+guU~{s2GaJ^GkUM z)TJdZgJ#ypP1lycIWYup$h2?T@GPAdU*s`B@U6vYSjImbD3!S4`nQvN0vZCUrw4$` zIevaR2Es$zN9dtlsAKtYaaqsP(-R9$`z$JU1Pk3wYNg(>1KVV&W`2RYq{yf$?89L2UwU_z96By(eRTQ{cvE*75OXJB#*0E?9`bCC#(GHuyFwN zI=vW|U2j8S=?ML>#J$_i;&s~(pxH-($x)ugFXXAprD>IV?RprW^{6P`s)dys5kSjY z!Eg&Axr`?+`RR9utq$=WCw1(4wuHY(CZIlWc{=--3sL{3exm&Wn!JN_8cS9)28@^z zAJ5hXeRw;kP2FQ`J;mAkNuT+RR;iN6izAg1&ZYrBQ=E=lwI zJ``F$^LqssVyKmOllXaTS{l!I26|TiD1HP6O}5?gz7d@j*On6|lF*^?9{bbb9wx!% z1#_mPz&svKS*f|%`HtFVi0QA7%8|y1pyoVhug;lpKbNZf)%&@gsp&KEJJ(qyuL@dp z@={1$GJXb!SduS=$h)cA`1qFoPt{x&sCjx?TD$Lwz-=`;5{@LB@JE8o1YD(l`uj9m2U zhHWkKC(ynzkJ++HxOn=I8l-g&7KBT}%*O1G~)lGlGEOCraPe<6lABaTz1 zK@PV!VI`t*T{&Tb)hs&B2kIX?sS`t;xu7VCe?z@ZS9S~6G(}aO2Q%_pb&n7@RvEq5 zoJv@}u!fp&v8p~bnU;kbUIA};+=!+s5{$a#`WNgLqE4u}wJd#FZvup6!%6(GJ0d{Y zw63jvPd|R_z?NMp>n3Rr)_M4Tu+&6!e|4C6cWqYE^oI0qB;dpsuTghz`~Ca(GtD0N z8_!OFwQX$U29+}a29$I6et~n7Ix4K(*NJX2h3?)xOzJ#N!Y9=OY>~~Bn$ca{XmjtLFoJWJT{Q$bw zs}rcX4MOgE!~}g`#1X0Y3)|M)$xhUsMbmb&Pa2p1l^5A604o9HPfQd)<2wVc6j=R+ zhPp1bpAs7y!7SLDL9pbRy1F39rxJeQ2&wF-QjGZ{TifWy!EZkkUG2CBnWB|?-~+$X zmh@Dc>Z*U*Q^PGy}?lX%URw(Q(qR~XzSH&;=c<;PZo`LbWyVA^o9qihGVY$KEJFt zgzGmHl}DR+W0=X_;fai+Vlr#+u8w5flTzPNfvESC1ND>9V<%--?8|Zyq>5v9l2e6` zJmG7p^=qTqiv=^Ta}>N44ETcc-K%1Vs)B?#Pdr?hEa=EF>j~A7jlx-U=U*hR2-E~> zjESPjVJjWJ4Og`WNtgqQ0vfy0?A9c%o9V1ZE_zo11-u6{MTIm)WfWjb1B5Lf6?pxS z-r7SaB@laEU3LM5xY6q!RsJYX-ytSaW;OFK2hG|2;kzFw-cemrve>UInme7}By zKy6Mt@z#OBOI82yBJ`=J_)YdOJilPt5;?@+wJyU!;W&k^)8cEz5L zm(%*o%^uGC8p}a;!vc7K^xy@k^?JVc`X_BG$_j82kb2&EGVu=MnOTTeYtF27-NSL zx5X?bi6tWMDz6?RtD1Sp@!?B{+pu)WOw8wqI<4a+@WQv6FV=HjZo9q=FDNk##S7lg z4zD?RZaY~&-EObH)CA}x{J&ok^39M_^Lv8Ssi`UJn-e`i@d0SN_1N)b&(uq{Q`B>k zY$a)4iu%|J*3!0*2Bv+RjmApk#{1*VKrB3y_F7Kqn8 zq6jhdoim71iAS;{gu=5Tz;@04?j@+tr#L*YRfyi5m6p?*IG#j!n*g2VZB=kN5hap% zo%eidabF`vNT=dQDQjXi9>h|m`lOIf zqF8d5Gbu@|uS~i+Sy(SpBFB)Ph2KnlyYI9`sy3weGkaHUWmvYogGzFom~$=NN=cz9 z9gAb%J4k3B{=5N#3LbPhYmCi5FtI+WJeW1Wj~wQY>#X!2QbU4y`+2S9Pf=rOEcbcE zga+mEi)L70&FN9uOmiHh*#4WDEc#+7Zx2{^%rS9eLFD*x^ox>6tH_6rnD?=zF58%T zuZa0r0S3nLb@5c9fnk1rPX*{u$WSGX=~GC!3rL-4gq$UZ32uvWU<%$_Sw|twB5NDO z+?@yv)sSNer{k51&i26D{n*tnZf!B?m>H@nII_)C9hf@ARGr*Gz+28nf@ zr3G;Q0lx>}NGdwYn!bCy&Yu9*hXV#Crd2>?Y#JCqO|*-WEZq!zmKyIDo_t`nB;Xn0 z*+R+$z1pb!k(}T z;1$6py^~WJx$tiEv}a;j^CGiVH^TYo<^@`Xv>XFY@T2$rUzwwFr}tmz$vkbvoZ|XD z`o>*ptF{l#r)Uo=NJ4RUVI=@(@-SufIMu;I; z)j8dKRW*^yG`x0^QoK+RbqlU{25sLi7_HuyrNOf_K+c(lq-$%kt~MRwG2QxlE-sQR6PjNq! z*ylF~%ICc8U6bnsfHPkCm*+}dUiRBB^~~{%KVaK8zU26s0&?G+H;E3EA+u=;%;p7> z@GC~~^l*0Ts_mvy=pz=Sp%0<;_elMnbDU@stnx;K9DsOPNJ5p%$ICYqlBdYZ8^7Aduk{MILbzOi$5Q1 zT+uwL341vvRsmhCu5O6Q(u)FD$4HcCdomt=%ZbbC{W-{rO4I9PxX5mG_Kv5T3Zb8h zR_3PSXm3Q~uZTFfsLzN~i79%LS{g6l4-;A)9)bQ?&$muLr1y)KP6~BW+NgkRhYNR} zKtG}M%UHzy-kzy>C(jjF@@G={n0uW@_1)l2+3GF5PG%S1l zm=mbvMb$%h?UDIeRf)RSn6~!CzL8b`nZLYv0R4bR`9(eKd< zE^M!Pb+2C{FFNS_h!F)i3J87W+>wMu77IcFGV8i}?htalJlEJgRuICqi0)CUPs;Bj|n;yf8B6ii4MY=3jB0XrYobV#nVa7-1lh*D66Tgp#X zaKD5w8;Wym^gVTG>F&v@BRY z`t7x|R%-vr(vvZHCvaSh#S8%*j*Tf4>F0yLZ47hbFs7T~%>nugK9&jbJCFVMTrNk- zxVkc4q~YB%2Osyfh-Byw4__4OfdZExGPq=ra5uo%LgoZVn~WYg<5 z(y~zlBO!FO7{*^5Wab1+E|(d{bW0JlD>0~&8Ojc&6EQ&hO0iS}bi+)u+fsPEJxzDK z?tw2iYIJxWq3h&Iy2%ie#W$n*^B{{@w+L#9dt-0WJB7I?<4%_X45VqjSx zP~_oy-Q{=%MMvYllwdijp1i>92D$tF{BjrY#b2w|+)A3dj*f5m91ozlDw;lcO*^8s z$IbUAFT^^aIk#R6U;j^SbxEuM0n))g%9w8{3iJQf0{llML*N49)|LmA($$rV?|fCM zV8TLVZU6+#pNOCrdOC|pYV!0%163Z`h}sqIKi*ofNLKpzbvevSuV}@Wew(Xq01Zh3 z*8ME`Ov6e$(^HO$6xQ;<=H_Z75mtoMdfjX8Tq%`R`@BQ>?@6mnm*!4ygeAhpvErhl z%Y!edhIs5J)nW@6=dq3xx84({{%yenSIv5_G};8#WX8;1m1oT}lk?9a#gT0){E}aE zyqYZErWXaZCW)0M7%BnJQeK{1beR35+--<1F{iDPk!j&x0i(!VB~awrw3M~S0+|uZ zlrL;C@&UB)h{al!ZaA9g(B0~JN}oE4xndDKFkRn_mLCi5;#EH7HL}5EM7DR5IbT7* z+)62hAPus@z}nZMDc8$c_IYi8DU0n+TP|_7!M}J)mB~-qfB%Q8HxGpJ-T(i`o~=Tb z?1_{p9+t_!;kgTDIu|{^ro_+mY^FHT%&iVfCfAq(g z7}tGYuj}=CJ|E9%u&~VQjIk3-5gFqmwdr8=78lMSO05Y`vCwnP(n$*Tr z2DtZSvtOC24ju3&5R*Z>VGKk2a`-?z8`rP_odwt(MlXT+SmBU9_Qcr#E#zNzj zz8f~4l*yB`mCdLJ4Aj=FZUU17^|yhkRRj42^qzq%3xb;u8T!Rw9icK@1`=vn&dx~I zynxngW{n$9vU93wmSOJ4u_fy!HPi6y98!wfwsgBwYq6s0X%*0X1-+25+BCG89IEGh zigy4Vhr4sx=4OIzt}9R|S5Iy{?7X>&wXA6h3$|xRg@;5%s!e@{O?X^`lwrX{S{~W3 z#7KBQ2)9hzLG80WfkDyzBM)6GESLjrHCzuuL_r}2bUA@R3e2xHE;evSe9)#}dlvZb z!@7^dmmY`{_Xyv=VYRp~>9Ml>AG2XMd$79)Ki&7c*{!f5MMyIISfu+By(Ib4l6;5KW#T*lju zdwfFC#;dm>c$%ipVP2ASxp{JwOT%lS&|~gN%C~!yL(6Ze_U48)GJ-{Hee%QM3M9g2zG#z=E1B`-YL`d4K)?~NX9ew@l79N45aAn z=6QEsLr^^F9RCZ!{470Pk9k80p>^KpN{~2_p~YhvE_2!P-yR5f%B3Jp4?^FZs+(Z+ z@LFGGQ%_Rvdv(+eq6VjE9hJ!_x-5w+A(Zx*LEgArDbxt53w0Q!Kl~#10mHWS(OoD>`FaAKNy+=}cFms?~U>xe1 zxS8Pd!}?l19&NjdQq7}NFhya?zM7OLbn~&yQu0zv;q`ag2O zFF8i-K!P0q9%7xyTP@Z@o4xv1SV!k1>1V5I#%iPYxP{+4q92;RXkD**_6%oxolsfYWRzXJt7~8GrxR)4Q+O?wIVqi53H2V6;Jt`OXR8)Et+O z9&Y5*@9khp@hfj^Y`i6f(Up2uJEODnBde#8`lUHn?VZWA*+JgtW~`Yot>%)V_ujda zJdQE7I@)e|8&DW~$(LHILZ7sP4a-0cgIIg3W{1d`XG8;uPgwNXCjOr9wioEUfst27 zRKHe_#Gk^F*Xk>`7S8>JC;4#VA*4{Ecq#VFuNegobCPw$OKtGqwcY3iTCfQIU9am-Lxw36o|GdkXX2#ushzsUJw z+mj-0s!@M3y$|yKsg*+5iLL(*eZP?WYy6l$ zMB`0ET!eK^khvyBxine%?gD8|Szhd8{9PNt9d!=V?ua`oxnWIb3fE7dI??W@i4>mlZG$*P=o zaD-T=v1dMqwn)N4kA{*e_ZnnVGcr^_b`z-6K$g1dX*z!nLK3ypOrcNGCrR(nD^D{5 zj?utJ?Mv+ayNfPOeH-zl;%!1y+S8jugsuP-Lu0WSD_M5)YQ*b0%}n6s)4Rd&UCkQo zo1ag3%YU0n3H=D@s7bHZ{^>6mLmYZP@6;D8XR>xkiMZ%^AqIQ%zDJrL(f=V_4*wt8 z=eg+<@|Ex3XVWDRK?CX}hkncAVe_vfzNbtrDsi=g!7U(FG8r1imEvhfthg@2f0ShVh9*>Kc02ojToK z>7ELcWN|T%s7LSEt0GW~EBs8*#IBV=O=JBB2pc`5Ghj8Q7cyL)-CK!G0@J2gH5|(HF`X2C&tnD4b zo5t2I!3dGb^w>03X9}WDom>C%&(zSj<&S9CP4qqU=y00xEsKPn>Ll9aY)ict@N^4W zjgTI3R8LDd$Ddr$JpbR% z`eOq)mhoMFcgQF0aU|q$&dd6vkR9%w(mWe#>#jptL+C0&*oj|i!~Ilwz0tF$1YeLk zE8;ryL;f0iPvWS3aNQcn-^276wkmYw)98wfNw=># z5l0*j;6JL(#>spf;fUP!bG4*wvjdDUg_?n9njc5eVBTA}i(^}jJ`MNk-+b@)g-Y3* zu8f35Ps2!yONQ)s^S(F_5Nl#ZdS3@5KYOw*WL73=lWL?(=|Y`N8IpY6Igbif8wxb9ykDMwgb85MoNA?iu97yYe&7jL|A8sWy(uVJS&8bu9G-f z>dVUDFvH&R*Q6Zk_*uF<84r-B>FU2M7Bit}xd}(`7;hX*QPi8>s_b2mKoX>*eV*Q$ ze|K@SHReuoi9=73mn9?}Eqz_RqO1nA*-rg&)HhRAL(6_bCvl?sQ3$uciF}>9MM4tQ z0+CVVhp0W0j}fZtxsN!9VHG-ip*m=h;8v(G>@=LGC$lw)E`4CwgXYLc zkCvIq%Zi|&YksHWLg&Pfs#p6ShS+&6>RB)0_hH@4Qe|-&SRlS|gO`TM>{8J+SSt^{ zhbDegF9WixsXDfzQuPjh*-=R)?|E-;Z@f?s!)ANBqN)Cmva1fVO+O#Bta=_!D|M&}|`3 z>U&1*G=8I%>lqZoYiYX9uJQ)JLM5L#kH0LqjW|i3t3BgQ&T8U&vhhCwoCy zAYxkPO-O;wX-&<&+s~l$akhV1YcrDc7Im1nQwc>iUlsflxCP0Mf0bkTc98qlubP^g z$KA3*+d#V0880RAX3f<*NN>QgS2~o($mJ3ud?;n+^SgsVEd}zIcgc(SQIY&044-&% zlyA4WXxc$yj=z_4lcqrGYp%MP@H|Zr4;wE5MIx4i{>I31Zt23!`l+rG#_a!E?_*zO zxb*V;0iBgKhX~xn9CJDNyNSd|SLd*Gre)B4%m0K_Ox%rxYGGvPJ~iv8N=u!3?=CTA zQtpf1H{Ci|-j9(dF*^CXk7A3GbH9JBRDDWas{iTPFMVjI*}Ie5ZG>kkDj#*V%55@B zDdEFzhvPA>118vupU0bb4ylZzs@UU;A$V%RFFH~ z!bNjln1I;q837~UI5RSFBQx>-IwHBHlcdg~gopOBf5&!Nwlxt=&@HdaX8fliC=Q zPS?>7@%+TX#R^n!{tPDed_^)RPj+=0s%B#z>F@PF+k`72)i~EXZ^ROFh381 z(tc#XL{a!7ZJRF0I9q4?&&{oRbYDIYS^8b?;%_<;8PI!Pz{~jwEB(h{dRzx7Ql*r> zap1$PMn~-2mT!>z$=1kIma^6f*+<@#D3H>fS@1(qr?Qk(-Hbe_Py-`>+;7a?dEgo` z*6bQ&J=Iyko#?dwQ>EjkP*#O5@~gd;6RoX$w82eB>d-~?kvQ6#BOU2 zU;J{Y<5qD^yTkvgibmyhY`q#70>D5iXJ*THq=y!rYvxS1ZK&i~X-)NmxqE!W0}ovo zjmd9_j`hITKnnTuUBypt?sBLz@`@f2M!kb8?qB=@vZq%y=`)@~RuyM~ObqK^rItan zXw{Y9A4bqFE?oab!P$PbaVEJ#M27Kwz8x1vW1;{zZqq=u+G3FEt&i|848WU!(bga1 z8B*NB#a)INpcXB6T^^X4k#Sr3;LcJDq$X3oOy1-TEV5q0Zjh`0dL0?ruHIBh*}7Kw zNV}31UQ+X)g!;2OlhA?u%pG&rzpnL1?qz7HGOwE`|4E7Rt>PIa<_2Fyt#I`ZG<;>L zS06w8O!e^dPfjW`Fj5=(^k$}*ocQG~Z5+beZ18JseypK|o+K-4HBqRxGO+n{j4*z{KubFw?AB6(8T|QvZ&3Y7{~w8W<~k&isN& zRZSFr9|ta*B(X9{bT!(vbH8o1t)8i@ zKQIzOm6eou{S{Pmeh)qT7~5g>8KVJ1B-qRAgzJCk<~pJ;_Y|$8U0rpPP5^(Hos1&u zlIm|xaTyj77}52PETe}7J4Jbi-gxQcYrxHqv`P=8u+U0!S4Cx1Bq<96KaN@Wx)A8bDZ}nWCRa&tW(hIoNhQ zi3E~!a6I0^m#wkFMxXghzU`MDjVfrQ-p*ZYeE$JhcUrl&+xes?rNal}vodPm?~ebD z&}fa{?CkWFxbHQg;o@M;(SRW~mazAY%TSlMuk_c>Q2rZ2ul<(*qfFhN@z zCuoO=-|5i`!7s$r9_gXTe{L18u^PVCzZ1M;qQomM(@-7m(RLteql22y3$_5;SBr@w z83*&#h~J!Qw%Zbg-2@6k_FNb(9ehvmo`F)G&{l7YN}BSD)6&gUtoEZ;Q9H+~Vg3qP z>{dc;oqMLc3iYoKTU8Kf#n5a0Ocm-(t~Yw4sShV%o*MiFqDd-vh?SGHM~ueMh0hpb zc*m|-%>+6zsl*JsDZjMDk?vI#@%fsk2et**k4YQlH>h$9I&s(!&hZPP2%v9OR>aP1<7#OxO_e<>wRClg zXfFEsv_17&!XxJyz|aE+>nyE*x)sGW?i4ew_~!3Jh6N1G!C3M*zXf3U5l~LaIx{k1V3Yq z@8R4KeV)dz8X^&QH96L9EB3wpkjUNsgM2Hlt-4L+sr*l-Y3i;YQQ{$wp|cYa%5b@t z3tm01eA6qyp_ejdL~AyXRr&|c zW_Qhw&}v>%gYY{d_Fam*VxM#aM!d^vpJyPe(zdu*q>GdE=Hn~Z^fm9qYLyeFr4ff9 zD*UOhrxQM+N>2#bA{Rz}vPBtjjmwkH@)Jb&es12j$%yrst0%~x!L!`qM{%FVmhg26 z1huoL3I52%r0L+Li$Y)SoaQGGUeu%Hf5eJZ*-cJ1K29Kox|ovP**t{9I@M3!g&~69 ze`rvXA0d>rjaoDqC3(s?>n68kO=SUuI1jIvUG-}GLMQ%cEMW7xnhdc%Q~!L!qa>%f zw=bn7oi{(8s#B9Ceq&x?n=;KxOY5V!-^h6)cfXlmgp1Onl<#4UVJYc{g`ABzc8!Vf zt#BmX7lU~Eiy9vC4g-&Ov9mQowMpC84)f+DJ;=HTIXb@sZ`2QZx%pKdi($x69n6K` zZ5-;-tbL96NzC>NrQ6Jq?nRMO-npM_m>9sgTB6xFU*FA4m|=l<2>}UhnikBt<1%^x z6;2L(X!-sL@~xQz>*RmeUbjEdf7juiFNCl+hd_~Y{ERz2x8qC{G7Ap)-%Lo7E)UA) z7F#b=zY8VCO$`SgNM2y$>gL-V1K56g9lT#J!ZXuemK*=`8QEb+L-9S-ZZa4`qkJq! z%6I+5{=`fYCO#%d>LThMX~&yVcgM*nVh@j{>1k@C!^zciYADYOUn5aDb448wC)yJr z^mp84uX?*SsFK%3Y;Q_jVv8?k!Qp??H8PxyOL3)f1HOIx4;+2Y@Zic@*nXw;BOQ?$ z!b#fK5_ubVb-~W1)zMX=568)z#SmKemCWGdzi)gVLf*gvgLy%E)&qUjv=y>AoQ8gxts1DZcwv5qU))n$^ zWAep9{QFsx|hsJ6*83P@Y8_P zp9F2801t$cik9(aT74u=N?Q*|z46)3EN3%(`NSmu7e7l9oJcw7y?L3cqWN%&?O1>Z z+ut-@5!s=(Dw4!okDn;I9yTI=+U=kgcFugVUGoJ*ZsZVUmv?#(KaLmI$N)4OBA{7^6_dl z3{pcZRUAY!9$f3-BwH2>d4;ARmXNzz`8aw~l=HC34jWnt7|+o$EN)Vx`csh?T%Y`o zS?6;!D^?UU?*%}DLPP#_P3isj-ytEYAHuwZTK0y%zjeQhhZe{lahM0h;+x2mK+~At ziCo!cm>Eu%=1a)MUz*Ez1qW;oWWRoTG7c#Ze_%26ft++-J^N$Nh3INZd3m^3^1`xD z`}^=KcvVU&tl$arbh&-;G7rXUnReN`c1tY0LgQaN8)tfkB-yJ6mjXD02C_$2H}v>c*7dtGwGY0M_xsvC-Pl*@4&Xx7^!W z#q-*bLs{zV`*H(UF>o`&mcRaBzH))`CbX}qlp`82W!O^Wt7-EMTV*@q~fUyAs z-@v&)sq=1YgOKr~ICwONDXcgze}@3{vB>iOkC9#biWkHai}9VJK_J8Fwkqm zp=k8zdy+@s5b znWKZ{3;OV`L~{G5NqCSn>Jr2%SrX^?`5TPDEjobu_Bltp;lC$z?;}R;w>>q0{n1hW zq|>)_>L+*>nA8T>t{bh)HchLZd6m_B(v)@WM_J)m&|X3%JEoGWENUB(g7z{QZzPz^ zrik0Z3jP*UqqF`n?NZf|lJ6ghpiKTiUcx;*IFV4G&gI@>$su=()xde$9TudjoTy^& zh#%4i*{C#b?R&dyC@Pg;Tbuvsi>#*~SAX|c}aR{H1BL_0lu zGU_fk-|QoG9(~84@%(u;xm_vWpAtI0+V%tvNf0FIbyTpifS>$?L@ZMe_Msu%pR*bE zp^JV7@8y>MRJA6|DP?{%p&mrY5@dW=Yaq*-ct%uTf~P@w)?FcibxlNV8Fg8jO&_j4 zlD==OY=MM@U_hiI6Ph&H+=tFx^KJP?y1Y-pyKGEkdlqwBA4Y zj~2i(Nuc3c+o8MxA#&C8?&iM4h?L%G{1n^hH*$4!@TS*>_7tA5lvNM@MjB)Q+T_%` zSt?kHsXV!Xr(ycXG~_X0r2Y79W-?Y|clzVde>O-p>fE;eBmf{2>fe zv_542x6oiofyQfXcx+_0kh#eQYeT;|NcbK@IjwJz z+td?D=6a{7^wVn11gVRcEdj{mEA78nB;x#3J!jJ^b;!qDM#*Y3M!Jlx-YpjRN}f2; z+xG2eQhn#>WMyY*)(8oax>ySjSsZh>$!a5>#2Y61#1NRedv3rfvpg{5K5kJU4bkXi z#mt(fx!tFj=y^RSr}6+I8p#1dmWIgRrP%4bw9@ksL{`pwCCo|j#KF=aU!s7?;5nd8 z;k4lZk}I%X6TM39F_IxUY^F!Y3ejrZ!ra0KkO?VJcz&*ONoDX&jXo8Z=~3c?3V+0k zn>Jm#^eZq>hz54mX5x!`=pq@#w*XV%UV&}ww@~E5ikT$Ea^}Ei2H#ls zw$?qGKrVO#iXLL->5kJ$9|mk4mIJR9Mp#HQZ-mMF@Z_e*FdD5IanabK}H09nep0bg+Y|3E=IH0Q!M9dhC zUC)EwMm(oBHh&td@iHL`a2S=!Ft*IZwfC#mbDl2W>-ow~np>e9Oxjz4_mWW9SYb*$ z*wcpP18457Hu!k|CkJaI&q;T#TY`}}J;Y&qw5%FCPH?4GR0k_7tE$t7!!*xz)hzt{ z=hjfEL`sJVX<7*?-`zLzU&FjR16XG#Ag-7PP9F{muEqbnPoBIPaK(-}FznpAuX)}+ zAb=H6*IceqpSa6?qSmjAAe3l$`Js01$n{fqC@Mh8Q)E+b^>CuVg5u8!FW zDI@zZwy5#GD`~WZlm}csLHwe;Fa~Z#QL(B*@Sxb$>)?-oJLbQ+RV)OXXi!H23#O?&n3%devoj|5>Ha<@MNMT0prMb@EPxwckMDhdi)==xq{Su zsd8ZJL7*VgA>Ba^uEc z$cXYag~+a~GbzEQy%+1#uB>z&x0J^ton7LN-`*aa&3tri_Q)wHA%sL{+5t0m|0y)v zNxAV(y>6YwZVYjO7rUJd^9NFO^~B{t4vOz#iM-%1?caE%|CQ4)A;EI+OT^QZA0@yl z{|<1(`|1O10w;biel_#9&fmgI-lW^u^|#(GCOhR0PCLs`vA1jtV0)qP;VOcrXtAx- zb~c}~5lJ9FH+EarD#Uo0-4&|&$}0jv;=j$ddMUm#LENC~lxN2tn22>Onhn*UsJoA( z4v)nQhS9Li3Zd;TOAu^}M+C9Y+8X_Y49t9s2g_{Z<&+O#={k%yh z$0uov@9#$cMpWj(&PmFRMH)%It+bxd=1tH@hgn@q8YMT}IOvIPeMkQuEQ%k~%6e8K58POO#YSL86(493(T;g8JZUZHF`pSkaijP*0Y zL2`uACFk2MHt)m9%64RM-nuk{@uOw{km>VJ1}RdGJM!H~a>05C&NHJSwRi(- zRqHSfauu7d{-^F}Z{>?NZ(f$$Y6G&(=Vzx8Yyk{`M-hQmH9a?{-X6AIo{u%U^8w(}1@Yl;U&l?X*tzk=InM5bgQtO* z21R>H9oz}for1LgHajGQYEkqP= zN=IR+oN2>Uyt?pO1J_D{48d|m0xBTnHp;D+NL;CJ_heqOHe?uiln~y@wQbTBoJ%O- z?&3;kbkFBo(N$v#*A@(Q zsE_zDrUmLBu3_XvNxMd{bv-XH4XCq+gZu*WDOyDltwP)6_8no2Q0|{5AR-L#HB-ml zDpsjE!zNq5YivE0)?Lj-oFs%(4WIS8om+ai7aKCl-lK*8APuc@yCYyk7*8r+Qd073 z0I+f4?`Lql*T9FWyX?qF#n%Sz851E$`_G_SqDx`Cm2S zvC85YU75~`P&KbjMf%bm{E3Y(Zbmw{ZeA9LNx-#)10^;rLPCa@IHkD75MJ4D7WVrF zs(h~gvh|=@nFuqrImI*_U;^;%2shj+NY1bQnURccc^$a8KiT<~a`snk>~^Fe$J5uQ zJ12Nzy5$;ugvDz$w3q!gL>u4!3emstrGp(wZ%x^TZiv|-?R8!@&&fF5PE20;!DZczsKiEb@v6wJ#`vkbm@HQ+iv065t(#`TgJhv+qqyUyXY1*7=Rm7r zlgCCo&Y?Et_qX2*^nS_C37vi^zfd3SdJ4P3JM zqbs`nOWeD-Q=|59duvI;=447CSAHsjGJ#Hl%+W|lF}pG zs5Vij4*y`#a5i+A*1s}9ir0m+to5Rp7Rvr-ds@h?|5HS>SUmK{DtaypeOYI?h5r?4Cz9hw4p(RqN9=#$5R4&P-subSKPiLYKyQvgXNNKwCN4pHNlyn9vn9sH31l z@%o&*_YfXGHhb-XFRas@qYl=({5<%9hSswP9aAIUSkHi$sMC3j|28C~U)U#LYV$KQ zmw?f4#$6099P@5C?p~uLObdE|Qb=2B2X0k^tm74hC?gI#1;?N~?Fjvi!TA;QwDL1f zZHxSw(5kT_((9o_Vx%#@Yywe-J@?3G`WF?#2o_HwvG30K$0-%aBN&8>;8gWp+PuKjdi^`d3yF_qcdcTF+Y&@lAk3l=sSr(oF?ko;UdGcOK)+FxpZPyXjuQdWwT-=P!jyM(?Cznu%pRH#_K2+eBwa zT?&~uZ2rs;a5u?;t!wKWE)=US@U#v`C@yIHzTBX3>dwP=;)XvI7C%L>eY+i_@D^l4+z@Ko&Pz_ST_z4T?|75LKyp>#y)TBF=zy{ zMN^$Z0y^$5`BK>Rb^YoP3fI0bZn^xtU`$`y#}4Eo-Hac{HIpdCSRz_$X_uAkiwz*$ zl=jr!%Jy5`^^f*#tu3?meJAkO)qr<~5_DY8X(hN{GI{ z7s!@v%kEqEBCga8FEl?Jo?>m^bitdjpw}ogt0eRZT=@#r5n~sfMoQtRv`tJhy3FkZ#;N+FFv)wO{G!V`B*DzLHoQWLOn_) z011=$e5c5dvg>pd5n>~x{b(_FziBG2c>bjL!#jmWtX*uWn?w&U`i$S@lP$8RjC0m} ztr_M^bzwQ@oyid?X#ICn$4G!|mmzrS!Fl z3_>E;0fe#fgStr~VM?OG!9m{|x`b`_pRN=edgzCD#)usUr0IL5&?H{k1Wzi*#(+}4 zGRgKs227`|%BH*_yeo1d(p8Zr<8vSNvM|C=vPakD+=SjD$?Y7#4}ksbjp=yygI6{- zHZJF=(py3MayFSQ-Xr^l@LtA5*iR0*AI5 z8XC5P+x{qV{Q(>n=;AE57JHRV{@qV&3!4b;~;EVD=W@ey}9K8Zd_n4 zXOTZ&)x;UeUzgp_>{oO4XZI(C;G*b^1JC!50GK~=(0|i4u1dKOfFP#ahT)Pp&^}-& z&COh%&lHehbPI8bU#YgpHXOavezF$818;(4N49@_-$y(1Z{`{Pu_ytM%0D!xE&K6G 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%0DZ2f`O>o6n7s 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

(rp2dQle84`(wi`MRi}UAa6iI663zs(zv~| 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

ZJK{63{ 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

}# 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 z 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Ȥ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¬@ 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 ZIrq|C?!JcPUM}!wWN2cLcholIe*iln;9CFy diff --git a/src/bonsai/docs/reference/images/bonsai_interface.png b/src/bonsai/docs/reference/images/bonsai_interface.png deleted file mode 100644 index def9977f4bd190d29f533f2847b4ac4e1e5c64a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946257 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

kq1oMo#v7CfhWZB)7KV(a4$ZCDU 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°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 z T2znEkRE(m*c1TwKwpX+KNOz6v`&t& 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%0Aih-^L$lrMUtJE(TsGTd3 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ȸ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
Bxvd zW;!n4E?v3;BbYU0iW1pt<6tDZGAa<6BV4LicC_SoxC-Pv>92Tngwa>C;zDPz2^ZIo zANL(pJ7#FB+alXvUn!rAbw$7YePPzNe2c5_|3X!sMr7052<)qO6|*w#+4bh4C9xb; zi_)d6tYMdtcYsvqqg+0XZKZH@oalW3{(SNwN-jUajLDI8f{~2?wk|;4i~WR0XWu3& z@{hBKdm+|^12WndrC9ZqAwnQS8&Em3rKDCyW#;50WYv9pP^o=}_sd-KW4ShViy_+6(9DN+BjsMGT67#<~7}}KEIDO@f)^0U9_DP*c4}nA%bjg{t4In=5!a2 zj6bGyVe1PRdOiwv8Von!(yQ^--gfY5OVtRGdVm2s30HaP%VcgMsa45BK-Q5J|s_72tSR2GY5KphYCY^)T@9 z7Fj6CbMlgJozFJ)0MfWlI{w_Wys$|%>7aX#Z0C)jyXuDs3=(kb4>FMAoRsc z_LNVI%BG_W$G&O{q~{RlO4|Lha5aFN8EG?-RjX%BHyDKE6OY2%pkd)I@RUiA-24w4 zGDW}ErJ(3+mN|exz|Jl^<$}S#pJ?;&)16DQG5EzEXG0P+%*1m=K30xV^WUwGVL82 zKO%ChbJ&5U@r@#do*1R#F)oU|L$iV3fkba9z2-qq_uZ|YHx+)|4fDR@7br0NPCy)l zf5XVZQ<@VQvoRih-*)_XKIfnQhYOWo%a!Mct|+&dkW+I~VwVTIX6!0GJV#vpd~o`^ z1SF6g6bFl&+7fD)gcy0Qdlein+N`TkHYaI&f)gM96T6#Y=4_p{W-8}a+0jNdV~-L?BS%kY)g z>(M{+w|@&E&oUgIs9IS;%~Tyx;uC83@{^*VmPmm0;=(coYQ?F(DdI9G}WE z#|wzy^wSf=ezI{y7B&3iM+pDa91$`>D8ezusx%Y9FW3q}5T3)wdAYDgfxiNsCtc8SJpk$|s=VcuJqHk{K`mKFGVadrZimMv|#}5smj*NMm ziRM2ZHAXI$u=?;IwmfN{Pe2Jx*^Jmv0EvC&4`A_8=0rQOmx}Me z<7p5+*hq@X!p^;a3?%faoUF`)AYQ)yYQA)7-NWX+RXM~7kYiP_vxfgriiA47t@%yq zOX{>}1Mk`hXTj#u4L@kyw3iym%YGe)cgBcDu|t%_)5jItW*0VeCaMsr=gKlHLZ{)V1Rc&`*9iKAjM4 zzdrw^%f}u=crGT)4Wu6elBBq}xZu%2!8!<4wKm&XGU^MX&azXCj6DwkGu(riX_Y zQ=XgF!bOl!8zMSzI2L&bBI_s+$WULj^XP!-Tv&dgrz|h(!^mwj;)vhH*RU$l8L-pI zCEK(W(IBG37FT?(=e<-!ty(s{(=1SC%yS7p)bHa5W8HNoLv7Zo79L7f-LZA z3RornvFemmDHKqF@i|p@$RnPg&sW^0cDEoD@*3}B>ptnj#xb=3G0b&sO!kaZZcBb# zilAP3cFd#wGF#&7*&WH&9JkN<>@mBJ!;*xf43HbDx88YMw6b3Ueh;!4=U^p01YMC4 z3fZ!fY=i95lk*H(fN;sGx0#~Z&txBHp%_I&q8sORGG-BD-MSKSYYeC$Fg@D0_IYtfo z-q^3YalgR4_Dy0fZO~HF=lbjd2H~W=_iL$vmP}|9CSCIy@vD4cB|7FiZw~i#hs|%A z^mIKNRvPGxeQmJf3ei@4P-@wqT0GaJ6ad{~IX-jUyjF(O)>l2X6pwc}V4euuqp22( zKs|e+=9aBy$(@*MN)u66daHzSO;UkU^cat6wk{L2YN)Z~o7)E(({hb^v#;6^j!~&I zsx{#ZHf6srTuvX3&ay+Bah@M|(Ps5jlQ>4Bfu^1t$jPIjp{e8#owCLL#9N^*8IO~mC$dx3OMY-!xdFsX|bCt z=VRUk-oJ+JRaEs9I-_UTgAZ=j3DI>=3MNsy$&$h!vwW1gcMYm4vW*qpljHlkE8=$kRfbl}Fr;uV&G{ z-uHqrFAOAK$}{#^_fqYRPjF%>431%D9|Pe|z&RJa3!xSHAYvD1-e3xLfIO@megom# z>Xout8eD1wkl(8(D`Z7YrKWuO3{q2bt9g1=RB_OaLC$BODDZ^#7V4u>ChB%@EeoD1 zR^Zszb$i)(ZbpyomCF3xMOQS45skdYr6|OvIi~PjnEZEBWA*$`wX`M!r%O{yI*Q^6 zRmEDy@OHLD42oA1S`VKa#uRE_kUgj;DhO1RvI5UJ3mIs`mk4`8cN($(TQ$Bzzc%$$ z+(BGXr*{1=4KVqgDlx58OCff_17N!f9Jd_Ct*n-!`1YY_3C4jpI!kd9gz2P%LH`Eb zbkWr0HhFO+MniY&_-m@7<`1x_)vUSN4T2}TM5E+MrqzxqK|nI3==!@j-~@zuxqu+Mp|7IAr6BAu^lhlK(w=} zb#v0cUlNHXQ7rwNvdu|3*SUz+yiQKn!!A++1|#7_{f*KlK zp_2%I=9+K?F{&%tUe6*}mz4u`E;le}1CnHcmjECj07lJz?LY==2GPL#iJYir;C2Il z39f*#LxRjhE8z-k)BUxST}E@sp2-1<7rfiT_M2UzWE|&Pkvhri=~UR8^6g&C3tUm$ zFHz~f?-vZ}5g+y@t3QFFCo6pOYyKm6YH{()ULdX9csWEzDo8COhQFGf^g zH*eRcSVY{Q!VBj4BlMM;lW}FU!R`j?J2ijNlgm5!k@7^0zHl6gZ#H^E+2FW|A<09d za6gPB86ydYM2Z!UOa%q8E1P`DB|YTvM`7OzZR^uw;4#C(&wI`JQZSs&9=e4e!VndW zJFmN#_m%~9`A}RXbud#!>FC~-fnx?wqfvF<(@it(##!Bptb(g=>yEe{q&CiKT{DA* z!ir7G+C1y=f$lmarsrMJm;qOZJ8JIjP~aO5HRIh4Bl_=58t_5i`5Y9vV{M|Zh5L=| z14bppv%Vr=Xd-Qz+pnWn+S8@tIzK%YVOiZXn06#MVp~=)P+(ew5gZ4^mZ1_zUF%;2 z6H@{5W|wUr>!Qj6{PW?g(;WG1FMII;fH{rB`t(31sV@VQpcu&?lrM~iCri7sZY)h&wG*|=L6K8naa0- zqEoTPpu4vh3mIM5*k}vMMc&4!)!ownQy~(Wo%s0sOP(wr{J3B|cnCcFdA2Hfb^Rj^ zW&=ZYXn*>?u`*`z-N@QRA(?UDo_)*qqmM|X-$KRJ!~G)zxn@qx-CH}>MAu=RZMgQrVl}C1!dXd1@%cs|g1=tmhV8m3YlwjE7)98y4?3pt-okN~vd7kUeg zo7z+<6O?p+0teRJX|XXy(@RtM49}~*db^JA-x?b^tS-7?55)xEYj-Q4n3Kw`Mhyr)sH#(aGDPJMm-Fr*jd1{VjXGG9h| zE_yeZtH`{4jjeO7QRU{w`3J9XN%FQFti&jlth0^g)p6z?vt_x=drV85UX6(ltiFWc z+n!E|AK?Cn!nqN1vWv4uj4zxFnH`O=R5S6pG$6*mjDRg?+0pAFV8TLl!%d7<(wFqm zyH6a6$QT|Ox%l`uCML#vBT4zFi{XI?xK#~Brh!V-f{R~i4*h@b++!4UUE+Muz)KRA z7iE|mCt`b<>D_Dd9KuH2jqMU+TW$nJUs-G3UGj()qAlLPI=awAl_z?HD;Zd~SC7e3 zRwRqCtuRHA3an-n?mS;WKO;d<9wlRZ6V)TQpBEg|%aa{zKunKs}a=y@koiFbEsKctMs{ zw>A%878+D<|NQe*bK?jc^+{2Lo0BR^BKBXH8-g#f&b2u6Gp4X6u@<^vT(`wD5;Go2 zmqv~I0Fb~-k4Qt1H>#KLs(w9J+m-Kazj>2>car3%by&rCuYGIiBp$c1u~+rPpm{~M zeBW+6T7?1Eg$k*z(J%GQ!R_{m@8h1qc^U+QskSrSrY7%iv{0Y_N&k)h_8-giD~;%QkirDRJA9Jo&v`_*!NB!q7yTmh-S$sDvYhQH!!HujHX&i>S9M)GIl*nam6q-tFC$!i zec;V~p)tDhBWCM(@!I_#5ahgBw0o3EQx%%#b=1z9v(SPj+O;dLPN@%=HVR5po;KLl zvk|LNmPg4yvo}a5omW>41^MJhZWAp36 zPYGr}Gs1DA_#l{KqY%v@j%zNG)~weZN7}qi>vw4NncGSEkgsD3evh$E5gTZ}9+( zt)##M)QWdo4frRv>KV-j^-2(-d& ztVxRJ_4eRJqRL;9%b*Gm-T^@^ADdJAW#gY+Ym*3DW1d*9Os1_AeIfz&Dmx|t2;I6x znOxqONaU<%g*V%DWyCqRY~r9Vq=GP@;q+DNWNDcpQ!MV6MFx9oG5`ImV)ukoiC^ck zWyS+FkoL}H>pWLQSGst&2KcU+G;^$*3FX)Y%v6~gQ=p;KOMcCiRIjh`=S3`3oh9n$ zgiUQDPdOl*z=V|DhhvTsodr+0OnBajCEhiSSj05u;$(x{OZvdK{qMekAD$JJIeH8S z9lQ7}(I`psI{Lwl#qS-z;?2%UUx*BeMtA34*Hp+fOh2~7HXFtAIybIjwH*2%%GVq9 zT((_G-T@G?UO*wV$oxPD5DfskQhWSvWitUX0Q9(rH{jXn>1l9|As0Ddto*)uvEZT% zfR+GGLKuQot7wWj<^}9_|NDA{i$7)XeZAv&FO@ZgY3i_6Vt+8@JnQ>@Gm6}c)EX$}aqkwIE zmwfW2H1%JZ`!{HJVoLhSe0X{3#I=dHB<0o>-++9!8BltFP_QtUthF`Z1+}&JqG;OmWFk1oY(#+1sBWvh%yCq>cHG zFf<%bNU2Rkux{zbjh*i$R7@uR+~M8J#`{uSj-J@~Js9Na%TEk?TpQY48+f> z#xwHY{`73d36E4%u7<~WY&472HH*Ff!(FRDJqAeSK0=CWN~S|arMfs2RL~wp%eOl8 zEmAC#9YWOy!G%G2&j;l4fi%B>*eK!3Ur@jV?4txv`$9y72%#MUUDf;whz_bvXLZgg zndVqmwap}btsWgz$Dfn3aaBIe5&Yl~!9vxqrP#mmrY>Zxx<5r?nAXnBEs(^4V#vU! zCd64VfPuCE4jNVXkP2!phXewH(vpdrU+(c@_&)SWVdND|q~uUT-ip&7Ir{}JsAFEe zR1JaoA^TARqxZ>KFMg(v?)=!Ak#5T|cCOp?SH|q4y_L%;AEo#p?D(jJxz$q~_P&(? zk;AJek9zh?`j52q=Ff8N3jL&^&FZEm`^C`y5U5%6OR8Iz+6!(bN>G~8L4IurN3{-|FrWc79>$@Kp8EQb&79sOk5&*(cv~DU zwIWe>+B|8n6)ExncGIyk<1qiXa8hyMQm0G3;yqAI!juj56SMUBC znItj&{=Iv3tQ8pl4WQ%}&9oC}7JgI)lF%vA(k#W^1BH#riY=veSY0v@ozLmW-@#Z$ zGP!tXhbe%lHP!96ccyyJy2{QL#mM<(-F~#1kDWo4I1#jiLOI*6lQg;o1d-q9Hh8DF z7%#J@pokq7W2n?(p_75--lWdN4_dV>&nDqAyeuL5es3l4sf}~H<10i%)5L`BIG|Lk~m3d$WTMlaHsn z$=2x=*b2+}k_BS?)W#aSW@hvRN}FsSsdFP@@8>OK47IN_zAPxs(s#FdEST4)wS1?W z_@rAhfnNO1r)+w@fd?2!wza;ab*R>D&t%cFkuN`ltr zfsEC7n6?5)h3GxW;P^d~x>{uXhUJ#^^3$0RAaYUG)bOiJdeJTRVt6*Gn|xb*bB@c$+Y4zTfAsl}x7V{LgJ;5UJaJ3HLH7R(EJNl#_V88-pZ}A6- z%ZGKEarK*Dfcg| zh~Aby|0lzjlSga_eJz$*N{hf%-|a}(HA0{&TnEgimWO=ONhZwTT3^n%5sALH3JEFr z1gtmC&(FJ4p3iw=^->n(WM%D@g#k{tj9=UxH>< zpGAHky0>yvsp|Xsu1MiZFrXft^aL2%xXX~u3e`i5ja=SWkMFFlsnWdTspo4y$Q%Ea zxAZHa9IKe@0j^4{y39_t*(i;OvT2C&tA;&i!K_y<-F>>V%oeSc8I+FY)2W3S>Y!ht zzkAQ)5E2BUiPTev@1o7TCFTRFD&TZN&2`D4O4a5jBl*Tur794k>&vvAgaMhP)Sy1O zjm+K!htpNc-+ho`y=~a1H8|2<`15nba@Tg|wDGF@#k>QR33oyO^poyd(*2}@a{EIM z>SxaPeoDb-*x_om_XtXZM#t zSw6L$dVu8!#-5Pqz1XB@vb#FhB5wrV5}d9Rr@Z?ilSUO0z_xDeF!Ew-EKKZ1>-sKN zDA6yj{Nw3MdL*rYBW27{_*Pd4c)M`DSM$x@x})^0#E#>2lD=-a$eB1q+2-iS3_cyG zQ^uccZ`{h&rHe%mXv2Jhe8Is`*Eto^AGYO6MEAcgSi-E=fGie80HQJ)a3N^i_Cf4u z4nWI2101zX$SeaS71H};fHiIu7!*}~*yL=L>;w2yz(yS_psk1VKd40W^1U-sU+q!l zM~AGI043*o(I@9lK+8H6LkRTEYfZbAp}S4q3kypT&4+C?%MTad0TVgFe_~cv>1#-q zq#wBp@Dv^)c{l)sp}VsaE#UDokOA0aNniaWbVcg32_KILkLN}Mew(oF0XZBlJL15ch{Y~LL1Ij3BKGa(|p=mE9}7Q4Kg zC!tVRjfYmKA)>ZTAzy|vlR*oXP|K7_ZZSq7K3ZIRW@hKELUPk)x_Tt2K z1jM`Yu;XuLQgV|yr8aw%)p@Z)%0bRD^|K52J_zcwSyg8{J>`skwO2{8hpYt4>P*zt zl2NQt4`=R0hw%M@6JvAxgtiNVs%IVK&)C_g4H{T+dQ=bkP~9IvI+Y9iXg(C;@xOHz z05(lHuD&Tp{$zjZS>L54ljZGsLKxv^$l6Ohv`<@j9DOWr6|8o0^mSR_y2?OET5Z?W z-`t07PMgT{JV!0^TisWWR;aj_^yX`{5cA~Si2PaJa>D7sP{U4-KTGwyAb7?Nwj)^! zODlspstav_ir5ks`_MJnS&x6uVe!g*Wz>`rRU(jzii%*HXM8RmRa3r?ea6|BnY`IJ zLrLL!=-A13Pct1^YXHW-I!|~Ux)%=Qorx+Zvf{;e!kdrF=?avQUX@n8;~n}|qv#9t zZT*{W28M=Iq7UNP1p4~=i9qd8p^u)k`LYeTP5)yT2V8v1Ssl(0gbDw#h(+>{{4Nhn z0&G1!8@vP&XJU7U7BwG{n(0SCQXQ_$;7@w}fgXt)buhg(0xB>h7u0Y0mL6%(RoBu& zhW=j-zmp23F!4r3+8iG4MjvT`e*9avGy|Y@5MOqe+!9N0kWb#?>iqe?M?Xe-*q_Cx znT4IEkVIK@@S#b zVYK;nb*#9vzjH6rZ~9<;^0u_W@2=ycGPpWboe*hEYKG}*a<%+DnHoA`UTgkeY zJUmtPt^q%y+{@l_{SKbiC*T&rCLC$#NYo9(BuZ#i3Uby0l=wip8ncm(2N+*SKw~z@uX24HYR?L-c@yfN_e178xiRy3WTNqrDU*T*(#j_=VTcXH8BczG z;(nb9ayw?emFq|t6EzX0|9cyVp}laeNGy$)P%h9@V4kjzcs_T{jtx2AV4Rl!qulG# z8K3i_<37(ZK|*VH0l!WFnw5AFEzd8~AJCNhBxpQx@E9Sqov^=pb-c?k)}D~0Xg(2; zA20pi<|uJ!lQ_x=BaUBEYV#DN3R|?nX&5c2{5tymMB-N~%Vi#%NIF^|w?*T*-Bp}M z?&F6%OS<{UB0G8bW#@35>^+dAGUo28{phVZY*8_GkLZc6t=7NM-ZzCe=l4BLEi$480ABV`bIL$!-SpW%>3d@7_1pti z&PSGOF?ByH3mGsg%ebihvXY(FqFG{U10ssPLoFJJFWn0)eO^NLWD_= zTsD4ew*DGQbGcdL@FiWH=ma;);V+;7yaJK3R6%!}7wW|&WYlupWdPkP#Uk+8*m z5L`<;%F|Rl@|)k|9Ls1I(^$$de1_v>E4b|B zw3rx^OZJE<oyBW;A>HXa<&-> zv&rxJ94RJu55N(P5_EpV?7uFh0p7LLv^4abZy&M# zcXg}HN0;R@tu*%2l9osjk`ToW`S9@;*YFR0fD1hM9UT!|Z|><@;oN80#6#9{;(RbR zpA6TnR5`x2fJoYId$bU@N(dQA5x^1bDDsC~4KbCJqsOS9DdP-JDwRXG^b%gZdey36 zNvf#mFXS))072ypurBv_fbc!=@HI~2RN2O*u=vW7AkuzUvWOF||FtV=@3`|A6^pIlwaQ$o~*lM8eXb_GJwNy~UVP1=JebZOGGG|cXS zj9YA!ruMsc`kPb!u?~v^VyR)J)w)^Z3WOvB(UzGQ@pY9bPth*lf{DxO!Usle6>CKu z`)fu8Z6`ni?GG8zG2Y-2_AR)Q13_vW}cbP*^&J%q}36Y7@{mM=?dEs1k; z=>N{YZugLb57gzXo(9|xZMp%a20#tUxMggp0Y=*+r5H1E6?<&AX;a>aaMFC4!^uX% z)LZT!z?Tb{?D&}E+}w%=b+b406|~quM-c0VBR_Svp0~5&)YG?npv_X}g9Xf_au{gN zRZ&_k=;Lx9?4+4<7^Wj)XISEL8|-TH*F{^iVoMUpUt=MOvB<(aUi_frm6l{Ua#X5x z3-Eed9`6tPMzY0^kvz1!YhZ4An@8yX#Kmu6;b_(}VHF8uar;3_?|-I)%oR~DBIo7|0Z@FcSN$o#SNk7gG@v^5JXnmXuSe<*vFW{00*|l*gXAL#o~I3& z17lSrjSV~3)TwTAdu3tyK^S1x(Hl3qq9P4&Q6#Lc0G?U>=0-JWT@>kjJBko#K?Tfg z3_w>5*gE4z{SVxcfH(l=goH7zRz2QSq30kl705%)qXLn8WODN7K!fzX1SOuCG99<9 zppTKPOx7CiPFjyGz1hS?@b@WP5Eagn7dN)S4_}OUKAy`L%&JMmi(%{*sQV(|?UHSwCJ?q@29a;p6dOBoX6?yVeNdAn7yGBbznq zTO$Z-u8ip-p#y}4Xww!?`%XF2f!ZHC2;r_hC^l=zWp4B3qr=7fnx%g$ClQgSoIE2H z?_E86!gom%wMr($qb-by3UY9uOf+ZLP<|d9sFSX(9L)^>E2!I4tDS*Lr()KjGKJF> zJN-^;I4CnN)SiW`U!5Zf`b@iY4e%kfdGH?Gd({~1F*~xH2iP){sDQWfbXoIu%znE+ zMJa6-pN0LxLcvxWRkyIrdqQcFq;G)(9j39S9pq2`J3W^9@A+-t#n@v(%GHIuR1N^; zJJ{Fg>>P~%6GM~TV|8tYp(Pp(*@`Y%32yW|Xz?#rzMfHF7Il)Auqn5b^hU(`$A%K3 zHT)KUoW*_FqZIiU`EPPPL`rQuz>OYl_O~)n6jkW^?e>ZWIZaFT7c>?1u@kkI(q57m zaR#i1EV`gCkY)W~u&iOo*$RAzUpj~Rb95Bt&7lEeGa}A!0PXXO)vr(cJ9ViLwxy4{V`x~?i+Ue`U>z~0BqHf>!Mf4 zulw;s4CT|qab6^SCx8!200vXJK=%L)WhG6m&6R+<3W+~N+LeLHD)2f%=C=XE4HMsO zmPH`i4f(B4u3HY>$;Zw9?{PR*Ee6r(|IlP8r((02u-DFI#j|dgP24xSJBekdmn zA3Gvf5Pw2sB3pNh>{tOx35O+gOJI&mjS223I3TQ>G#<>V|F1T%L*JFxS%?_&Q9YB3 zBLyWR78vfeD$pSE>!?D#48hnS{!q)YD#?k_#4AP|au{e^U0CfE6$I`Q#EpjIk011z z?%P>hCK1(dLOU8P_Dw|y7$M3}5T zo8jwZ)2shAE@k zIG|mJXZghhs&M8!viAkPBh}GC@Z9X8($D(lNvGPxy+4+E#WeF7O=0{V#o+^?9*)Lb z>nC`6jr*=K;kvpL7*8%;EHoO&dOtk%jt}=xCi3+Z$653 zAYIhZ6gmxi{Vq0!OvXNK_z?{uG%41-O`FZk(lTE}>l@F%bxLZ5QoifB>QXoJEj&wR zyJbhSdG~LU0QyCQ0z$vCq)R?kSbyO@qCht}F`Ax?y6wJsYJSf?eO?>p$N;(bZB4u# z(CM|)?Z1CuqkKVFShafU=2%-LftNtyqe=Xze)NVny63??i)Axb8jyRnon{}J0qY0v z(@)E>($@&-pMX#E_+Ng4g_9G0Bq2jDa!mlR{>=RS=}aF^(vHt2wXg$*# zjThO8`**wH1p);b;Qt49AC(lJ3fe1YcD--5zxugP9E!!*R=fQAPbSQSK}kvL)jh5R zY)x>qGALI@JutuNURc6;W9%Vjw`56ATeic*A-YD{F_6Ea=yY%^d8pb1stn|FQk0Py zXF97>Y6>;84o})G=|>>VUZ$2E{am1!mLlm@{ByYp)%vT3|A&rdKY-NiNwVam|0jxP1K z4bhiXSA!VHmm(6ccp@x}Gkfho`kc4ZjKF24i#2m?w8*GrRb(v_4F_Go; z_af|QgC5KfQdZ-=mu>ND3KVIYnqLBHP`(S!hveb)Y&40g{2-oXs*C#)K+OsYR{sp! zY^owV4H_p)ykqp&fvSEC5PtD&vjD!-nE0UbFkT>yOb2WPU2JH!-M2@t!?QZo`_b{LueMAWqR|&ZSn( zTU%}LkRQ!87O3G0_fxN|f{;-wX2%FDiSmqft4LODhzhZ9;lC+f!zL#MV@eWQFRKsw z#Ns5xgs?1-PmwzjK4_FIJPP(^C2`FxSSZvjIQ>U&1d5o0wp(W;^&SAe${${S-dY7v z-Ce*Y>v081d$lD~i+PQWHTUx0Wk9>&{bGE{zawUqot!sJ))N0KWWz%R!-Ydh%UW{; zpNJ5<5v;^Z`y`G<@iKoL+=RTaqDIybfZ z=~+mpfYtCMzYtoY+*r_LI^|UmY6ybW=9q`N!@E`M3%JNQJx(G9Jy3iPoqTo1)+oa&_PR^ zFHc6%=igE|0Lowe1yP~p4ma_HX&V9uC+yD%8p@yvcWF)*&L0O!#)^;WLr!m}*&Yk0 zH6ipg;a6Q^Y-HjE?W>1%)KL*2hJ;XFw3`&BPrr(E>@-aLC5jXB&S}Xe8w~Z*`fk{ARtKd z{+sd6^<-l}J?a)&7XLq;Fwsh|R1~^-Wn$>efrYw-p1i#NlR*@>`9!N!(Nf-$3zQhS9YCt<^}&J}<!JQef^ZUh(*VM zm{OU=Z3mXz)0o-~gS_9k8Mm(&(7U73gJ~nyJtm?pr>&HMiNEca&>4D;d}y>Q=(|-r z#!3e)2>LuB`<2*UI@@}tBoFmI4^M@c>wz0Kh5oL=Y`4uW~i{-V#A-;!Kyl$u;+CU2@&;{ZF}Z7D(Hw?8Uu0DpMx=E@84|m&>F2m zO!n~{OY#eKs@Ec+B^zo}v>1{Uh4b^(gYiZ_e7i7>5blNbrpl_?{KYg@oDyH^K5_UK zR)ri`4}fi@hXZ?7l^euPEVM+e6iv0h9<-m15ga?#69`rmlj?gXIVxXcu;|$^LJSJY zc=ASq1l^{v613MZ#Lf-Rmg?Gt4N{`qKDDa4>1zmk{`udRT3KMelAwIY zmTuo=v!~>~=r-Gq@BH$=^W~}pSxY@BX@ZsJagGy|hKdBcdH#`6`ZO=6X9Q`yroCDK zQX7fq9cW@FCwD4;lls3}0CMswwzJx&`f}sQH|^RqM(f{!=+**`gO>Q)=;!y_L0>@M z`ps~nSWYq*L3+yRG8P@raRg#C|MA(f;JCphSQok(-|GKVnG_dbNxXK46>H$Secp0n#;}3Nz@tpT;i0`rPnkrh<4ji4RmI>RgonMS3LpU{nTIO+ zyMT7CtpQ*@2K&=vBp#_*8DeZc*|wf|MVMdAI-~Rur_VTP@6*ME2Q4rW33@n>^;f^; zu#tAXf7jeur+iDpXu={^VwN_YQf~Ataf2UhP&Um0fN&BTS#C42HfHHBaHq`o{(V<^ zDF!&WLf`hypb|D-o!Y(NCCmfS2#Ov8I#1zg`Gc*X_fwqLe?XNz^%q0e)=!|qJ%AD>IWx4Q-P+p9K^OG$bK8@$2;h~nET9k_|fz1 zRXmy5RQ~y{^1d!J)u81$?%Rp51yTkK20H)Ghri zY>NDrHgmKFrTOKYm+(FZ4ASA`$k5HV!Hq|SVlP(jKss{7)e~o* z;AVn5;&9Iw>;n<|mb#eD1$j80>K}%}nDr8@WfkD1b}dct!FpI5v$QyHbct2cVW&$? zbWG)8Q4cAWw-_io2rbMykDd1k9CJ^*75Em?R>9_yPP2Cdse6=-?Bcc@AfnXzK72T1 ztl`g5Vc~zt4xCAMdu;a{5NK#}HXLJL$xWNoR@{D5zQT;^LY)oLZio;D z86sdHACuHJAq`@&(VaLY%Z-}#cghtCV94(xv4MA!pB-e8?V@{u{u@LOBJ)G?)Mp-N zG^(GiCEIuDqg#G3x?IyJU@GL;>8xc7c}{3OGzA(`$Z-rul?`*bA3tGq zaE(H!&F5F&DT}d2$p)}KIU7a3-+*gXr$_zgY)8K#Rb|Q zLp?kd#)g+2Jj9)}zx%r`8dus-n`#h@ZKekY3!ep|W|Aa-v?bsp7^`YBD?G5#oCCMX zGP|8~DH+DeJsd1;#QE4IhuFnR>hNHglfDsx=mPhp;jD)I>&s<{g`WM_DLNci#r&;J z-$6KxZ4^7A1kvFVz^AB`h4xsY<*&>$hdANi)Nixi9IW)H(d)kvEB_uG|Nl|-)=^Qm z-y1L8p>&HlbR#izNX<~v-3 zx?IeD?q}b7f3E9lP6cbA!AwZ8Gj%II51vCQFff?iY?vhR3&Itt6eP=JoS=dOhrFOn zZrofDL|cnL;YgN3@=vabCnD@a-+ktg>z5$93XiU5moMBw@%PG+5ZT3~MEPrArgvvU zPZ}}z^0QZsn11hY%;qR5+@q6_W=Ts;(aavw^+F&5v`%2HMB!??nyeZCVo%2eO(v97 znkYE5DTL%^eY_BdC6X2=EYCF?RgMObEPZQ41~m=Z$VU4@NY&^NvPD|EjRNi)p~NbkjpLm2<6Ejw7J%(_%B$FqqZ)@_QX_~_ZXroRXuA}ZDKK7V(AwiUo5T2aCWzG$R5`3liuL$WQ2}01?wiI+$XDj5 zZU#~uG1QW%d>!gUrx!q@l&MGWj43aTDF_i0NJ3c$R3-1RRxD{alB(LuFy>zgzuO?x zi#@$X*mk1cb7;cgR2Z4d2?a1piiT_*jZv#tDq*^i8hUI6?lLm!Syz?`J(hls2cCoN zEF5J+&ZnyBA?xpeHxxzl-;?1V9yY;m%vhp=#aU11`BzuF)rmzI4lHa7W3Fe2c&ZwY zPwGN}Eo%-bFYe3oIhLYPmVkp)1LZK`GxAPv+B z=fBoRiHa{O1%^&ZRWuj06&~ZyF3mKD%#A+rbCOI_Xp)wG^XB*bL1QxawaC8YSJm9h zvJJo6MXn1^n1#pzgVE9?T!tmJ_5EEe$T=QAKXp6AglF#AyhAEo+x% z&lFNRq{~5$5@{;LgOjEDt+qUMaN~hzA8evCqilNB-HEz$u8}au<}PTMkw$*zUxLOT zHK-$t)wEXU|HN@YfCy$f@sUoEdO{ViOrQ**!8?b&!j~=y>)>P?R-6O1SP|%p?o-FR1Z?3hOWB_~bb~{*0E+&K$$n z2AsS6Y&2W<`!ZnZ60NdW8x=f!wRSEH<}H^a$CfM;2d1HLW@+ewIU87Vr8~?EdqfSJ_LGE|S&$s- z!CPfHqbv}2@(qBNZMKhReIR(%bp!qk)XKuda5wB#n&t!S!dm0FqfdAMq-VJgy^+&tqL|cl^)@=Crld$ioTl;V=$M||(u4AaP zTgqCltdmFG%SSRBzJ@&M0QFM?d=H`_vA*d zlfG71cQjguyK$#NJHR2a&Cs?1%+5LR_)4HB$xecMeT^dL7DVBPJ8FzE4zPS* zni1Pv=@aEWz4kA-Md=PQ$Ij4Y5Y@+hFr9tp9%Hi#CPJ=HmR#Eio0mQC0S8PV^Z~F@ zz(kI~!0u}p>Nyfo03h}`+X0u^)?l@_pwKPiUYQwUxJ|WX zRO8(3=kF9{xSw9fVisg}R<7@aY9#Ijhg=S^c|z;kjzaZ@h0H?ILRh5mD4o+>YQSIGpqd~hNLTfh`J z*6qE#jjw6*ax*+%k6G43-(=70%mwJzni6e1rQa!^T(>+*Y@lfdjXL*Bloi9KTaw?k zf~vl6(#SE1;>RN;Yu#V%TfRA^cDZMGZf5d$)BTXiU+gbRCN+>Yf6p48%rl#$AO=Dk za2esk@ir>b9#`=lpreF^gXY6D%_g0cjQEMEOaoLo1&axj(WnEG_rC=El~y_DzbUpv zG($pEZw#pmEzLt^f^Zq#0d-g6s}V2t3+-p4g69vPoAcF z`qDS+V5JOC6v7ab%a{8P*;~vmN^1eL?xIc458h2afMPkyKo|h%Pce$;x6*shJe2Lo z$!KH~fn-pTVchNj$a<+ff`T+)JXq;^QXO#U{BIFBV*cP!-cO8t6IPRv)e(~$BRv)j zY|u6C-K-oMRwa)~{`5$E%qBu~8okJv3bjI+aHYJZO6NwS1dASi zD#Y#P$Ei7c*87|WU<3gf$Rk9BmzVBFSn51d!(}h~CFt~Cv6-E71?0k>+}EI=w&7sW zW@J;ZiO4r1ZGKW_Rc=J5pR>qGQ2jZ52WY`CvHRtSl2e(0>tN5hNy8#ATWCfOTPZ2T z9Nu^Wo-z|2&4Vb#oE7!qIy{qmW`R&&Fins?`nxza9mo$9&s0U_iKrX@priwR<)|dWj>E{o1v-NRRnzz;I3H z5FAu8gSbl}R!dwD_*gZ$X~e2~u8JokTW;bmM*>?Hv&Sk!^DvuKy1h2c8LF4ECxJx{ z8k1~XO@)cGoH&_8>ynu0!|yrNhygL1yK6!8jG^qDD)AGkI^5 z+n~H83w8G39r1Y@r3{H(VEaXdFP?Vy?XMQnVaQYgQnkkXb*%tl zoKifUY^%utFakzK7EF3le65N8zs<5#TsgJy=<-r(kt-><5h(G#@#&3ZT)}%bTo18@@!W{(1Mm_VrHz1I6NJUVrUp#d zGbY@#!kgS@+wl5Fj)b=w+2d6`{TP=P53?Kq%VUjj5{-bC1$R8RU9Rbhu|xEasBm*t zy>)jT>-TFW*udZUvYv0mOg;hE`iOfbtuwqXO(FOCuh5=fS@k(#A)K7G;Uwci*8M0n zyq_)F&*bm5Xkd9ogCp7NTnLGk-ag*#{O+5Z=|_NmQ^V0}Isnk|q)QyM2cplIa&vX* z^xrH9e5qW$%jZ#tU4RzAs!72*4QjUm7$Hr`Ho^-^m3rjfPXxI(+GB1dhpZA9H(%^J z<3j947Da%3ta#H5vfzyj%$p%=_X}26;IfLvKIHCta=9*}%+hj6FE2kWrBGo|H(p4= zfx6T0SI5Zc7^ZZA99KkxLB3ogjS29~QUzw1%uz{3Nx(}3b53hz!xtoXElmVkhAJZ^ z0)hPHZfl~88q_tw-+4UKQX+Kt3~>xKrKT0Rep05Mm6k>4lHS)&tc3-HDWY-4qz>4s zJ-r)@T$H|IXH0|s)>B99>d$JZVe~K|-4TAC=3H9*eYp48D=YaE#_NxY+#dV-+?+YK z-<^#3TyLhk1F>Ceac=(4kRZ`NO+)UkFGE%5jT3Sufl^~X&Tz2Uh@X2iUBY#Igck}V zbe+!{AIHCKM<16sB>>1IA_j>_WW?dsmPi-1pSe45#v?TeSJ&e~KTA+v@zeb7xHLQX z(MDNOQ8C}~PNegypLY#-EM7?4TVl-#{f|q+L1kc4QmjCC`%S{v6`gBZ`YdXJdBYIK3wZmD09yMF14I;{Q450yK$;dbhn14O-$76oy6?5sN^ZM+A49uukuA20VvWyg|@KEtm zN@Eagg&QBWg$M~#U;ua>6YP)V-n+?LLyNXAg$E@oX38ADpQ9)ARR>8-xyKil)4U%ItpmKNzgHv;_$e;1}6@M1j=3KU2c>N+GrUhKd_cd77aU6 zY*S2K4qa~enwd-2Yt>;i4L0fA#GqX~SB89p+lZFtF4NisY+*DFa3Q7!1{BR@Kj^I5 z{++C2oofeQV9L~3F^oezh_VkLZ3!dfvoc+EIgX=f_Z-fPIhF_)9ng8s-NmXAb&XyH z>iie>{G~%hEk;#*u9p*3WL+?js1&b@XtbNp~`pGqoDY}c)Z_@*k7x2 zukHT&bEc1Ezw1AC=cT|CS@C~v_V;FP9oX$&A%gCd03^tA>G>yhY(NGRy#M722^(USCB0t`c1_Ig{+T8mC`{RT9@eB4@BNJ*s!h?Jir0#b$ z&{2?ThUK>_0sqp$uCIL$es<6T3+nK7a7K1^Zx}u$V0`U;FdyPv-O;p7SwF9BK7_P` z2RLunyBYI)awPWg?QJLNldEp**MILXFU$DD1HM`DeSZ6Y&MP5+@5xbd^~~4)zwew% zr6s)&r~s>Zj?bSzzgoJo(WQ1~vQILg-0a|Y0FloGuU7p`k$qep0J~AI z#4rFjZ2i?FjMD0ineqg~NuBBx{>jn(!IA$Rx77pys=IWVFc==&;2>yXzEhFax{ z20KjZ6r!bK*?YP-=QoVX=LXMkYp1@>h<|AbT*2Vzzk9iIyw{(qc7gvsRBeS%m)ojN ztMA|q?%a`Q?c|P?Z(&S2Ph(BZ@6{eZB2(UokIGPH)El*Kf1v}u2?ew)kd#9pwCm$} zr+QP=gAB(zM@-gF7PK?On6e}aK0@zEjvy3&2=+?0UDyxpyd*#4f~v0?qpa1+ja3RB z>wetm(oE#^%aEAwIZGlG1x;F+UB@yEm{)&mcKanL{G{a2xy>fpZadGz53W zc*UMjWT_FK4@Q8uS$hWb~1k2=ykJ)DQ?{7rQZ}Ok`sJ(+7L7I#! zDl%_|4CY(dlF(Ll4pcduf#2UuPOLp#bihlKEda)Kv3a$58)+>qhzD}y!` zl*ia`V4odNupQ;FDi)M(-jEnw^B(#-Fewu4lWu0ASs0r)^5Qv>ZVN*q10O8RD?`Nr zpK7~;ol{4Od!KXI{oSuf&X5X#BN_uZBHizMZ))3r4qT6@eKbC_swMg?=;_cZ%E%Jt zR3?{fv!-5^pgQn6aJb_mDDL}{*j}O6leyZmvlz)xf=h7%pmDHG;qZjK(J-!@sm?W# z-jwp8Q>OO#7{S~$d>_(Iqfzc#pL;i2b1RKNjZQW__+m*PRu@xb&#IZr+cWY@cZh%I zi|fivC+L+XwIZiS5oV_+1qK27H*s9kQEM&w(|Xpw;oD*EC{dBiy;F+CfmwGiNrY`z zsUNw0R9MtDzkIbkIK3qYQ;i0ft`8(}tVS!(!_z*^(bZS(Th)Lfj1kGzur_@PrI918R4bX&Z3Jh0L{Y2_XXm zkU5ONVcECfAH)AI2SEb}W9%@de7IlvOAmNJ0Gi3G#ktOK?GklMD=W0zt3KA6w?}3` zbODm03%alm!UEu+s<$2ZfK$M``riZOVNp@Iz#8c+auZl${?XW0<#9k3G|E)_0|y?T zSp&ut~MNWCYU*k~?qwI)#leuAb7>s$TuS11o zeOYJJdanc|fO0S2=brJdJB_J;1@K3|Pf>VYm+L;JS)PQZ9M(=Utr0-9c@5sb7yatR zLcs6)Qo6NzRyYoCk(bj}xGT^@(wnX%0h|_=#Vo5Z52#QFgZAe%M3t^T9_%yzajR#E ze|*52N^{;B+0RAS=6+KkYca|ne_VK2He*-Rlhsi2n{{1gUCtG=>87WJFY3sMU1NYe zxH8~1i8D*rb9Rr4p&VIgfWy%2qO@mV)L<}uez%6?aDf_%U?Cc3%=Cc}U8li0_lv8xe4|F^rlOJ+>Q zK#(>huSXZc51Ba8{;Yydzyw^hrO;>rk*C1Q#}OyxCUz$Q%?kQq6l&5!%TR^7_gPW? zW}DgPjkE&%92KEOi*}0;i^|`W5o?UnNuy88pN{aQ=o2~=gF?OH=@Rp$zFOT2_u@CH`hSh!R2 znVO99=JV!IYw;y;papAm*haOTzikifzCf;vAAyP&A1aqjBu@N47Jxm$i9Layl({7* z072E|Q&cIC+xzWvytoRho55<6;mwEV5R8Ur@c ztfR+%Nv)Gjjl2~I(FCTkfESg)8c*Q5hPfm!uE%7KM0(vzACo(>;7+URyo^W*ZS;A& zDKL2lIPkqyZ((;rJ7PW|_V1vSN3N7QK#2`Y?TIqtf1xhfI2G6uJ&@R>g6x|Pb+o%i zEc4dPYu&&>WTyqeE_mo&foS)hDegCx+dE*+XGWk1U9yN$LrA6nO=mYF3Fa_qlLeHaw+voknnDcVC0q`PI zAxlWml0|5_=A&~LQIwPTP@}S7r?O!BMv|%p?XO0Kq4*=*Cax{u=H-C}a^fm&88eXj zrqI@Uo;=>!tyjR9$eer`R^iYbgj|FyreA7i7ydJq%R4EWk40C=qJl;YmuZPF@m&UE zn2ssk)8rpnI8;hqpd{|GQ?$7z;09TJVCwZU)3wmsf>8Zy|L`(scAMkR@_~!;iFVtM zczFz&g`x`_SM21mL zM5MA9i)Pv_|DMO1*5d%}-r9n$yH+F;=QF};VxDk40W0KPN5g$ed^1!?#!(xRGP1W! z@Txze;07b!_-Eo%+ys*@n-D&0c1wgSnSe1Y@z$#<53x5slY1HO5gB0C3UU?^ZY z@&qX&L5gdUw?WVs3w|tQM0EAta5ZD@I8s_WxP6L*;s6_5zyie2+8!9RpadhOwnzTk z;>S6c?btw#x7_}2d-sk##^;~R1!;^Tb(T+T3FMNx1>G(oLzOInei+FxV@v%(MGhAU z{Q=oe;a84_{|@u3RdWAtDY!2n?UoZ?$&?fI`37Yi(n5TxH(*1U^i(!IFJUn-5XZ1E zKV#}fqq^AF5e&>!Tq?dKClA$fU~)Y=6nJBLZJH0i9eMylY|IkHh_Z)evfG857hc7m zwQA-i-(355rnlJBE);(bO#>{pm&56`#Y$C#(9FK}eK_HZe!32avvMxlPKG67gf}d) zRoBs{ekkR<+?0U9H~3C0OY$C?C#7Uz27Nt&mA(RO~C^YNCp9^kbEd*X9n4Z$=qR^2YBpM z@6kq%Mo#nDP0umQ{bStMkaPjWDTd3G3zmw7imV>lfI*p17?A~68C3Q$emu`;anhL*KJ!@4B(q{+TwF;l^euPhUas?Z=SGn zH?|@VSgOx;UNm+GL;*4pWOCiV3m>7#a1I9lQm52NvmWFl*m+**wmO*f zEX{#}6ks(v%n-=;!#|Taynwg%%*@@U6=U2s({U|AD84U)gK@xN3w^d z`ebY|+^Aor;x;UVuI=VavgHguHF%?ihSiJCg0lq?{2XCK5#m$!LHXoosjO-F{gCs~ z@TP~GKLOJbggoC}cQW}1h_6*vaa2y8Z*bD1`?ZaBKi8u&8K>tr`Jv05u{qpVzs|_~ zg7j)r>}S>b4v)o=D)seUg{1PC(@~Hh=)S2GD}#4SlV_{exh}Ti@{2>0sfmGCZOd%W zofEdbesG*?r%3u#IB1UW1$goSz=$cl#(vE_)9F<<3ITKNM8J)5&LFa3QjjL3b6tx0 znt|J!B>BXX{1u-hX#0B2PZXK_Evv08vGO(}1K-x@ne>s@OGLqqKW~_#Xu2tmpAUIP zm~`DozflZ>Jbqar;e^T48R5QAkG}J)F7u*_Ws|m512*30Yo~H+>L~PVL0?qEH;|T< zDLe|uJl{=F#q;Q6!}B;RH00jjwQRUTVH9I;=OKyslEzyrzfa;k)M|v#^sx_rkT?xC}-CzfMj`H-(6;j-63ZWjpx06kNd*W;{)uK8AdN5 zdSfVuu(Ito{1KdB&>$7`afE85WmNjT)HKG_e5&wfXX5zHV}?Q|e5)9SHkrSHFDbt7 zS)s*n0yr=_()7cmgj@?;ihzkHQdx+Uo~-(st(a{BQmdgCRp-45f;7THgLJY6 zk^)DQW7C03A1VyeRv}kgY-)f2%I^38(?PQl62Ik0?pc?kz%PW`c|GMaH)ITQg5~d=>H017kmE)q%D?`PG57>9h_lXM#NFu%nAjK{j}(9Ctkd7DrhUW`o(9?VNXcBA&D3@hcp}T8Dh0R+BY%p zW$`?WzH41fRaevDPa@*beSRi=@UO(fi4_iv2x(tsB*IwG$^kzd^(Z-!%zYg%3wgp!@EX}#Ns<1+kOod8IxF00PO&>7Q?o%wUXK@Sp0 zMc>`ugAT{fCio+)A5@QzyXW0s$~t&#AApVX$H3_^&Ak(BDIKrkDvTq*o zad(!iSr-Vs1U9gZaI5<%(2pDXXYZ)|jdXD&Q9bctq?h{mC%Uf58kzd{=@Ih+gbYC< zrN`fV0ba1Fh*z~_%Ed0M1}D2*$J2%vB+2k{NTwZxNhIeGO#?~5dR6=}xp~^~Z_O}k z?u+=#z@-i#`*ra1FBlg^BMvBX&s3~qdpvOEdf<)PPk24S`K9@z zO0V+Qa@fE$x+_DSVm@&kRgIlK^^5Fbwj349V|kkM0`bBY=umPvzi8m?Q?&B%+L|S( z)*lC|^?p=_jSsR7aEETXY1Lsb?iv`*{C@qglpw*gv&LMqONV8pk@H+q_Hka0RIy|2<{%>c{VE;-#x?&^djN z^uA&f-5ayX=3p->6J*69SBSfBXr`v7d=4Au{s8NjHNYD!sYUs7QBe`O z!lwjQ(*Mef-j?!U&_)0NT>ywMAi&-U9D`rof;0ES6CXxu4ffe0i>LEJpV1=s%H1{P zs8lEPIPF$dQ`psigoy9ndizCP2t3xSZP8klX5099-Y1yC?pLr2Gp^;iAAOkISAON; zW6r6v8`)UxF%3FnS$ds$%#!3Gn-Ppb<2?agO@q4UunP~qlG)Tl9<|{6vkEb3J_DLr zOHu?I`rB8$Sk6VFpq*_kLONpTLj!)F3XB=y+8iq2^-3WMj_@!{o3Ud_?9E81g9ex2fw)c<=N?v8d5g zG6gsKaV-FnEHZG@6TIUl8fPxb3(@YA3I{)ODABP8`TsVE<0Q)tMa&;w8>Q!M&UxI_*M-b+e@=GL`p>q6QrU6?hKRM?} z<)Bb}QeME0Z$RV#4K35RLzoq1<+cl$4eQLFG*uX*MQ8mK#1mApU>1d8S4>(YLW>gB zON=AF%D&_WiB9tFrG`^|qg$y%#YO_KFVCiLtv~gJ8E;TjQ z0W`(FQW(kO5n_IYx>H)FM6v|EG6IiZFfsHR2#3U3v!|33s`BXY88^J<(eEt_W5GN3 z*`Fv%2AwOb>CzV4d=Y@)CQ;h=FvfmIVU98k9gc_1jnHV)W+~Y z4B1Ol#oQLMRV6vU%j**zieg}e6#3f~PDTXR?^Y)-PkT)S5>B3NgTyDF@%9)1Pm&$s zo>uH9@Rn%PO%li%qLrLw)tLT8>@iL+#pO)wG{dGzPc^(M;${#F8IARpsfy4;$1`4=xPvy z$htGFpOfU(KWD-8wU{h3;lO*Fmx0k$ZB{vl`iw{BF#9X*7?lOrAK zK#=``ZG<__YHuC}Qpsw%Yx!D{rUHA`Q4qZVk$jod2Tm=pQ=*SW`_cc~PzQa<1K21O z>E#wrIob$h&gM6!M_h7z7hvw!%u7B6#O3 zv_)7E^68n7Nh^0~ezRBfimtU~%m+OsXKG2xH@kGNhcGf!`}l-`bPdP+pRbtA%b%LN z{yLDOM{MmGl%iahqmCFzQKfpyQ?Xlq0;yT3pO%RctB|Cc@8do&u$u*behR7#KN4Zh z$^uzWMN)+cVbr{0ibSl(vllXNDpqn{ikT&^uVu2#9`Y~=>Gk&1KHV4xeJAMN=9qf~ zI-dBG0xdGqQ9((XPu3K4MSCsTbg=WOJSo-rXW(tByrh{jt_p`_{Fd17g$3_VIBK$y zo^y<4iHFL*b>>BuqiUw1EcfS3kb$&m{>CZ}&9U*oBH8!11iTyaPFnkTpW$d860hSU z(ZJ3UI zfx5d+_h}=prt9e+Bb~ZEOl?gP->7`ku*^oauFY^xhSR)Ff>8@AYo+Dd2mEN)XraLM z?695VomA#V)ZY11?c;V{-pqI`R5nQitV5FDTja^)=y+Y!e2N?P-{E9$_3QJTPFJf3 zZo=Pj6{;cAV2`Q4jP>bdCWnJQuI#}CDT67knvBt2oRp5n0+^px92GVXUob>c;$g0^ zd2txVVk>LftKm}1qhc`7SLsJBROoj|I&U`Wsc~NO>1Py&z^Qu|lc;71jOW{D zdw$~YWsJ?adsIdHH^xuJU`6YdpVLJoWsR$!&`-w|BYZQktta85q3vc{tj(JRtxpFp z6X0c#Mf`oJ=i7-*517CGrIVl*gl%uNLs0VK3-Ms=T& zSo~U2+KXiUwb`h#i3soxnY~J+%xp=6-5;H`^H-6DdDW9GjqLg!%KM+4X4<~H&M!R= z`L8mbOb$r@cLvdx+2PUrywNN(k!{xsOZp?#n9L!KmJjm=4vsrdEPkDvEc#YXhXu`5 zvDA@xpTQTgfsqmF1xW&_&_*InAe}Jput-b5hC>(Y)MtYH;%OB0dvZ9JNL_`q1cQ>; zCs$fT$3-Q*0`DvBPzkzK**t>R{E-M?TwlGUf@Ku484CF6EI|>o>^S>6Re5UJ9Vsdd ze@+;+Y1ZF^!Mi#2ETbjvfURLWv7o^f$uD9wZ4REsyMr9R8#^4joR% zr69nVHL#R9jg>kR*^CFBvU`qgtK#(ZaQ8t zM(wUylMgcd<)ki5Fm~t~0$YD?qW`AwzBN_5Yq&MzG#U8gMv4=nlnmH_j zhaoI(gjPcbC*aJhDh@e!@;`n($3xyoTNfkoi>42}(`eI*(y$mEaS2ooqekA1&W-(y^N*O8)c8Zf$&_;p!TUd^X_WnP;tZh|zG zP1<9_mXUUnygbrCaW=VgT{d=*48VP#A9N&=?JK@$p90&NhSG!%*^mG~*Zx22FZSdU z>Q(MvH521A^}9*0wJD^jTu|QnPPj`bx8A}0aCHOh4kMk?Y_H9#0yl~~4sbj^SDQj@ zcyH1UcXa(cnqg%KT>-{9u;9GcGjuHW3l-keqQz>I#ev%Pi5Xt%#FfY1w+>;vy?iyU zKg5v8Te^t{?&Pi@a@!3+`s;BbKO>jL)q(Qhg#N#W%~LEQbo?5s)e@%zh2_YKVlhV! zG_e)3GnI14D5q7lpFQ{GB^?Dl0y1N3rTw(!Z< zCqgYeLp&#Z=@A4RUVM1i&%AY1+B_g0tToHcfs3SS0qq>L}^Awpclbrs{!Z+W<6fVrGHqIMXHRk0cQRYox7ioqfE*Z{Bq8M zgIOc3V&PTOy<4grIUF8UN&EC0L>`L$2d2I(k5Kp@25v~(O|6>8>4VG36)53rN`d`FBSLiuDYf;LR zg2*GOCr$X_UkBuf3#pG>5gGuS{g<2@gmND2*hivM+CQJbD5*AE9cB~0%x_z6i`e*C>uQ$D9 z3>g^0WD^>mNeqXgr>Vr()-dlncQmEb%f>0z$|B0R(m&-3I(+{#Xs<;=I=^iRrFl5m znl%Fv=9ITK>yzX;$Cu3noA;{LhSaxW*~Q2Z)`qACpO`XW#X*^0mVJ=8 zejs}1YU|tLeVAHY0(01;`N4f(qutt~c=n9>RkaiSw}CyX1)YHjdFn7vcCvATucfR> zQ0mG{cY`Cf-z71mb=@ zI-v!GKO8dxwZ0uWP0w6gnSB+%pJ6wUp4(*V8YMxOY2M`Qv2-T9_n{R1&Y;KRNcZKZ?&zNt^bKn?)9jK&EPpz>|jQ5q}T5DVhGiN387CltVrW)i6p9G0En= zems%2xAI}-th?cG8RN8>rd;gBsV%JgQP^*>(gU_gjxhai+CO&OV_Ox~{E1rQ*K*4m zEZfe*ad92vsFE2Uin3Ey?ck53OUUR0{BXxiFDyrAQD9vO5 z+p{!oVOQ$e%)!>K{F@m{C!zu{>SbOZ!%m?RgHGA4K5?2osLUDb&z6NtU6 z#42}qv-XuB4(OjS0mbo|MFsT5!TFs@3lj4lUtRvn0}0TKl`9VsWWZ)6}YJ**boAuq4^+aoB&Xs*N`{qiOI=%XR9hcv9-LZ#gBJ73=p%+JX7E zObAFQ>sXM0EiGc+KwQQVeK(@ z*$eKaW&FaotXetCN2m3l1_V}8HQ~=-7l>B5%6gF0WZn;6pj7z>b`fvIQ;lhSHfTNM8{uL z&BA+(uj+mpyLR)$)aQKF-hGF7ywH$%dlqK8m}nM?4+od_1p^bYa(Qr<>-r@J)^ld^ z5Y)b!5v9U}c1N+D5Hj>XPFa~|%I+MH(V<|n2A#ShI%{uK1mjT92}tt+h{Z?>iR^a}F9)GWZs-M~nR=jU{v zRc-uGKTYuop(^EG1{als0gI|^9LnO<7}h7ErtIm4ijxTq<{*?q7EbAX#we@6EUk|_ z5dxdVU*bVUbA%8cKI-nlF!ESe?tEB`^|23DYM8;2(gr3DghdNtY^LpKE7r$|n{J{} z7SS?^GkEDets3Odvw!}DGc;+jxh`l^%z7fgLT512J4J$~4y8f0b#k62&EbaD=HTr! z#&S5f$oVE!%zIqZXgliPoQJccfn&Nq`c^LAb1AkmBaT}eD|ppHHCyJ(fRRN*=DZCH zUg}k8*7{wn;c-t|?z+;a5}Uu}=eDNTt!$FX-6vvAq+t_LDXfS$(w@2^{1qyRr|mS) zZ0I+Au+o+)_4f*MVU*I#k^F4p0*qt99%G~K6A8XE8f&@63z|D<;I9TUj7(BwM z{PyKf5B@PSegrUO0IClG1eoZ>PC<*_uiR~k4BFNI(-|SXlYv!hu4&wMwp%AP(!(C0 z*Owf+johA?zB_Ep$jIn^+jVP-T)=vc3ALPl6aNRLadFK*(2_qejtxxuzj}K-%}0Qw zcY!)z0sJ-T35(KfR{@{=oJ#gT{u5hc+3rAxY6ajsNJQcve3@qK`W2m6Vxmdv&8;Z+ zJ41uO>iGAN{>ZGk3ALX$@Efe^B>CY z-fz0t=msks6X3PVPzI+Voo)iE+sAywF$E=9tMgK2(^`Jo-v~9CgwQSmc8g6;7;y~5 z`cgnLnZ<1@$281L1#}~D`U$qYpKQe19}x~$`}VOAKNR8{hxQFrR}s=yTSJ57($z1Y z*i~bhJ4&<0#kyjx?l~4K&n}+bo9QK1|{x0z|=ZK6z4m35z@t_B1 zV?+h>9`;x~sbA-dEw8*xm1aTWtWmTl)|`#MdMFd4H;l4aT6eFVph5dg_gNmjP`sT< z>v&`|SZZWbAb9gE`cq^AirDNN{&B~~_RqskD@PeH8ZDk$HP3fCqMNi0>%dw_1OY z-+EhG4r~3`6qRRbcB;BrL~)aFG~?}~5`h$l-gAc5>nnUi^V`-~I9WT3I$pBnF?Dze z*ghxQI(RjF7H4^`&8uV@ZQk$T-pI|DE1?m0nhbG=K>CagXB<=jg`M^9=7#LdJ`VW> zx7Bc)igA)>10Rz*cCE{P`&vHl5{6?I%T?^i{?q{ZzBOZ{# z4#;gU|G@7BxT4gFFI>^*dK{iO1b01t71K+BA8K%SeRjEL=M(z!;SvVdb{qk>=BGz) zr0G`!W}j{^?X4H;v4HP4ob7YIH(y~oNDQ~}`U!VxhAa2rv`+BnM-7?+s)Zul$8)CK z0O_~eDhAx@x%2N|I>CplVWW;f3F>hRCvpxb-O9P9NkefxQaCz}i8S%ln-K zxTL(S<(wFva6uU8m;P|O2{%^%B6PcqnF#WPwj8zg|2JqB?B_tYmNPzz7}O?}_ff6U zg)KYA@L(5butFaVU8}!MV#5{Iez6pZ!QPhs^EJ8CERp^##iaYI_!K{Ha@^S`n(l|| zd9D63@@9QVbs2MV$VtWsNj`6H#@?uGWfQ=EM_D#V2v6&}Siw#sxHIR|# zjoZWPpdI^)aSA*=2Ff*B;x$?}?3d8S_t+Wp2m3*41hLfaQ5Fjy{IdvF8`SNGa)`S6 z{e|3PbfK91liYrME~PartjX^O!YWDL^qGW4P|nM25`k*0OAaYXm2}IP6ert4XU;rJ z!{*PLHQvcOa>Vd}QLA-EAfa4U8Zu#^c|5THewT!m_RXF_`Nz_g=9ovea3=ID(=W(L z`06>vV5}{|R*iF*9>muKal9-dqjJQD=R*r&mtcHsiEhsZXn9N+!^dpgr1@eBORm1F zt01A69LKKqMRHYTYd7xcNmGPDmBR?c5vp^^)HaKBcXk49S?<6{hOzrB=T@$2)>`%z z8IAq@foTt9$4as{MzuoZCSjFUs;D(qCLMZ~>qjJ9te34%{6{cv8ZFL+;BL3a_wJl| zbG9I7Ebc7sMz86|bAwWDo&*er$I^p4A2SWj+EsgQP*{`9Grrpr~C1oHjxdl8(EJrO3iUde42w^bXKv1c9ZA2#9%O)6G&ja{opclxKBFVOY!dJf+|hHs6UN0EVtn5b05&D z%n$U&n}GfJN4@PD1ZY3H-#@s24&=O-Q+2HYa4W_GaG}Bb7)tWU)j{qhu+s$mn)Vyf zrga=KT7mnz(PE=BeDg;48h--UT^2BV)?T{CmyndS2jcZVS)p&?)m^k4tvx6e!EW*q z7EH&?6)FG%L2%+wohMk60m`2^Wwbfb^yj-&HP`=Mi1EXgTKKx2%O6sCyosmvZWMIN zEs&tSV)JH2XM96%2Uf3EB`cH|5IKFqlwBrjbmbUzzikk}VVFPk+y@IkP~7=v6rjeh z$MH5#+^0oI^RJJ6tCkRw$ri&l(#omru(acAC<}O`yjr5BZSs%@X4|%$8aV?OlSyer z9trQvqVrRjO`GOIo`Klbl2(Dso%O)$jLPi4?iLIm3ONf^i)yyk9BnRAEK|e-zCCq% zjVYt`b*{~ueD2X+;54xH1=fi>mkAO$87-~t4wh@O)06g-=gUv?FDC;lY(s3(EGqTd zw6YN2mW+<|5>7pTZNSN-)ATOfFxSs9l#?{A)Ufd>u9a|C2vQ(XB9>C}C<h8i=a_@+nn1UbdzUTI|@;>bj*V3gW=Ffv+tKb$Z;q=uL6HY3cvO9L; zrlf$er`sp3u*x7S2&Qn5@YHBBKNgDF5HSAgaA{sFKQ7ZfkIc`|H5lHAqH22XfoG7F)BI8)|z#4YEzEHTEFKHdqA)u)c z;x#KUO5SjCA7w4L--|n+4qej{m6=MoEABpJ>^~le`decz6$^EYn7{UrkH}_a`gQ>& zVawonTh$sSjY8D6L(5J7ZSmBOGFq4c4@Jq`i}^v}O(S5(mw4&d*|(#=-}bc0pSNox zgG&XH*v&qHU1w-){CLZW4|1bl^3#M68H8Z`OP*|U+4}_-6aKrZfVW765AZk#s3Sbc z4s76O;~f8Ps6Ye#rB*MvQ~CYvrceimJpA^pzuqoZ5Bmvw=|c(<$XMUD-8#TqefZLD z(2>Z60MjrKD&uRB4DV|iop%m@VtT(2y6RQ@v@wu0<@)JfOGBd_(EjuZkpYSP5TKh> z3H{4J&t8Ar_a<738iY2%bG$)83XdC`wZ_j^Ot<~`e7@eE>TT058!7ONXmULWG|>bj z+LXZoxCo6+~Kv&?fAbrF{*Gdr)XkQI;_Lz7N^#x1>vA! z12rrRy#pbtEcWR3$cX11cc??d7mw1g&holCB5Dyu=-@9dJXXS?@cNubUx^M)qP{-H zuw_7LsTdHhCBqvoF_4CCCz^8o&^{_sg^=~rV8o*PK5@U%rlGu^G_CZpxLpy6RPmy5 zmaNsB8Kxak_*!Mf-gMoEWZCxJ;2wWGf24WKHN{?(8S@mt8CD7=Aw&@;bnjBw4tHt? zjUW1AqjX~sK6L15Y&?l8#S85!H>C@f<>qFE2G7-MHgz@9S2E@Fdbjo<=qDmq7V@wa zf)U^A3M(U=21AUh0KTDhVxB4u7~mEpOOUdP1RYkBO0aA>?tL>Hd)(couEKSk!EV`2 z*`Ql#Rb_j2X0;d%LRtq)v7uDX17w4gK73E!_?kLWb{C4V)@tIu4Usy7zE3b^gXXS3 z2>|0IEk%24^fB1N=c8i@4I9(xHiwUIro{}(USV{YE0^8au-CM@e3f-K=qqt!Wwtya zx@cWMDIoZwx}qAj8g-JFKp?bNVDF$ucM+I|PRsTdn`Sgen-O38EOw2as2_ytP!t#r zykFkDJP;FEdoU%^Fe?qnGQCC`p={%=Ns_^LEGnBGF6W>|=6yXgNg(`Ys)v<{*<8}1 z1uL}6Bbhz5$DU2?X@-s5#R+;9S%>wT*K8EbWGqumuqtY#z+4e;?IHDNUHJ@EE#~4X zz&LZz6vxQOsKmKE1{8A=5)vck97>G%WI_oF`A7S%Z6u&7yWCc93yF@#3X6qI32lGA^4srGpQ$(nX_i!O zxsUG*HSxJ@7iK)TU-CNSgsajCy^KfiXa~7AT-GxqS}NAFl~2GRV{g_Ov|6qqbI$_* zjU}h%A%$nz<+|x&g=!s{I*2gE)NZ_kned5gtY$%X;*MfsGkc>Vh4*(d2t{ z9^Nrpshz%txez}CLV)T>bs7=ulX(3s?#A? z8nWuhDM#QJQ0eE;fe`l7KZ^qo@#pAt&QIS1%ZBf{(O+V9iIsnOb1NT{tq0DSsOvc| zzQVM+$+b$dM-wHn(x@u-wG{NLVh+pFeJW^fD~Y?xAL496()dacP;q|jn1$0$$LQcl zQT`bjd4W*N=w2T+}`(4E{xdDdUpgW52=G3Zs6#Fb@ z@yS!kY--ij)l>TOG%34Ss0p|7u3|L z(8#+Ur%^Mz7sU#cZCLD2`!8VfC!w1>6s-ZO7OJ)mb3M&;Ltz<5U6FCSZl?>XqhL%M z^Wb-C`(qzj2dhM@NRdJhg*6_Fwe^L^Kd6O{`FA^KWMirO-)>?w3_*>BiC}17(EmE4 z8gi0_NV|LnZVhEN@7xy{q1f98GpIgjSJAN!Cgoq(m^i{_kn=L z`&|Lc|E@`Oy>NKCs;wVg^>1=Z4q`a}u-0}lL=TuofQ+Y^8Y_a3E=qV5#^*gw9iO|i z`qMF45Cd#KF3$~&+g5-uC}L^Wnv0c>F9d^xiy~U;&w7HMgkU->5QBttSbD$tM8SHg zl?>#`JcP)naAg7!x`)Ty$u&Oe6SynOOob5&m}ERl%nK&5t553?)~bnfQ*kDMz~5UTFd18ji>brK{2C>w5?5WtL%+N7^z*FEmEq2~?SB%?y@l z39dT%AV)x)*gI`+Ir_c=Yv; z&pm4IoH9D8y8L_vyK?7EPg);^D_gJx4RO%>9Gs}R9;7##o8DU%{(a2Jy00lIFw{66 zK}~;z&{lwUls=j8W}IV?tBU0&LISPqse8+}Zc*-?MiCn3PU*^c>b2g@#LtCv$@le} zTgHqKX1Rt}1@6jR$vpnH?6a;2a~q83tQT*TDMN??M;j+TyiNG{z@L9Tw-<_%`REvG zjXNjPonOBn<>;bxqQ>nWC!_8iB(oiT;>0{rFGh(at%AJ+yYQ8kl%y{{VvR-01}un1{Ok%?$bk z_Xdc5Y74=4of5a0ixy0)t3+7qNAhn94Q|jcFNi!KJPc6 zz;72&nFYgBm4HN9I2U3um^6lNn@kIz>;Yd1&#QjDKm$T}UdJI&WgNWm_JY9eb!1>mD)r-+iO@qEWvrIP&fQ z9pTTZmHh3c4>QpD896!OYS&sLB6uD@^w$YKR6RK2=2=jJged^F-(lL22H5W@gzYYV zIX=)8Ia|jm5sLii!y3pu_jSd8IMc<=VQaXqG{AoHdD#B%h5OC79N<)_v6`-Zj`~Y? ztylkrKO6e#nHJY19UI*fCG6tMv`I@&?4LyByCb_O6y>UUwtacTSS@q}7^-qDBmIa> z4=pkmC;fDD#j4kN0zEP7dl$2WV(5R55Pl8YcMI1iD|FIp%wxK<(DCM0$FGFDO(kvc z3&C;$=cdOM5!OJB-{b$>LgpL9=h!y{C2Jjmn4%)S;3JZ@Fb z$8V4!uqB1+DO2e_GRGoa93b1(n}s>- zEw4KcXviienCFTpl(Np|EB7M2>bfu&O2P*~r2NN&Cqz*P^kq}gqO16}4{c}&zQ4l! z^d8zoHFR{uO8J5xR#9Y$;!&&c@9!QgnTvCd=IEoP^j%!0V%RK8CVsbkKB@z-93eS* zHvkeo!!>$tJ0*4C#)97+@L3GVy8H$FD-MtQnO9MSF8!>MlNWHDcg#vA>7V5y%&k6W zdp?L3&E|+FKNPklB^(fDe{$D-$<-EFVOz?6$=kYm^$tO+4OT-sY*O#DPV{IR>zJEI z(P8P0k&@2Ii6Qk4;geppO2&MPeQiux* zeb_}I>Qw!`Bkk{_%(k#5#QqY%yU)#a*8L_HQt$@#Cnd3GJDPB||fd?C26(SK#RaWLMFw!pRRjdi~ddv%~(?NgR>IC)F~@v1^8P73t+SDsPBA z0Dg2Bs(1ScE~XPa^uzp9R9yNCL^5f2w}q2%8@jm>#>B(`Ckr2#Q+tuBXzkRz;;|uK zxq$kSkE5de7t$qJ2f0s7R7D%7Amn~PZQQjE_KCpoNW(XJqYj!-+g zE%#m*mwFgx+*UB0Grn2v5%WJ{M@&}+MnwUa9;LSBkB4 z&7nLFt)1$|$(34DR|#?Htf}G6HTpn15;|YTsPw26na!nkOXUHNXd*()5urqtwDr7x zrmkIWhyx++p6GNo&0WHrU(;}eh`EoL%uwEx$X}0l8N2Z>4 zs%zxlF>o8eByK$`1c zV{}x8rFGXVQL{?3oEb6p3g)fpYUD+HxJfikp-b-M@hKSgi;+(Ftl_LvELI_6l1y7U zYpo4tUNo@0T_gS&LQIj|SvrQhzE*qosY}mC=c`(rLPd8AinG_bsqQpQn}ix%82yPE zFIO91_SPGfLDG$`yemnjU8p-1C^6_6peAb1dbaE1ZE!mIW%`P7J1rmj8la9M|A~gc|WA()W!|kQw^u5!Ez1Hdd6I;RQy^DqTis>aZS(mfz(}!%e`$^jW!Zkp139Hh- zc>ioFlf58STkMXB;PPnp(I+?T^%%#3^t6MkO%TDcBb@n?Qnw5u{Yf|1dyiK7S&WFC zG`+#LgoOj@+>5Oo@24IdPYdf9+(%Z$Q;HwIBj)KqEgJ1Hmc%^yLcJB&Oo_>ckO##? z;dEv_L}q-6E|I%v995=UR!6q|HK|mShRcJqE?Q0$TOWXJv@sS*P+;XbElOKst(^5& z`Z|)YZg!M>_CO>|vXvw$J_h+yZHfiwr%^4mCR(;{Fn`K-Tlx~*;`sq#wGU%j^4o3W za{ojiY*-zCm9SH$xs*#MS!^F5CGPMZJOkeyl1RQN~DGNKBKs z6J91t8s3SRaH+D?WqHQe~~)UtsmEYD9Y>yCvFJtUE1%H3kFf-2Zv99FM6p;=R!C(_C~Uu<=!<);Ykf_xNvZn$ z3JaM&LR-`HH3-J$!EBEKUS3zXUe^o8H#JfZ~L#nkTWA4=Q zn-4g~S)vrW!K2*Nyf^BD9Y^$=>2jrl)d5co$qmNXZRFz*NGwLJ`LCmc%yqFkedA6z z%N>UHB|>)Mgb8ziOhckBj+H}M#DFcJfl5=OWct0$6SBx|@wkF@0_T*y4Q_XNnisv! zbuw5+Ub*f}mW86yZmyQx7T;pF{H_k_)1hL*W#_}zbr}{O3d5BgT}Q*_mtolA1L0eW zA6~yF-(<01u$N6d&a(FIiHL%EOzoW2I>k6VM+;%e4Ou7ZeEJrn#q;|Fn#5gHXT2V9 z^N5}`Qs$777R{o*?w_at@y{N3{eMj4%1Kyzi6dbP#L5moZSPHL3y} ze+yOe;pwyGp;@4SswtXayJuob?O+V~PapCL5=>f*_bPSJ6cM4zuwrlc1Lb$>`ZG~= zXg3Rm)&vW&DIvx3a#oJUSMlt_kjImLWB`sQN0UQ8TDtB8xvq zYg|-4Hpu7e=b$veA^A{f;>dRxeUdMof<_4OFN~L4MR^MqZY4h&b7Tz zTRVVM4Cut>mVqoov;Nb5Uq8(t2{W9wkM1s|kKe1own^YTY-x41!iCd(LkBYrYf1^Nxlh9qUDtR0%HIhi^e`e z1>^LXGKoxD4t!5u*B@#r&hwA4t@HUD1){VF#8;y}rq2};U}xP9Q-r`)Gly&#mQ`{e z9eb^tq_wKGE0LqL%7eLX{#nxFRS)`;vcjhk~R0ur+D%- z<6j{?Sv=vY`{$rthHOd)@vJUyREP2G3=anf2OdFu2>SNlN9>j?EP$r-h^Z*JZy9czPDoN;A(5TuMcoMSA0L&HN-@Tz8|32P;c_*t4aUN`-76mmwv~gK?mlKmaW;bPC!_1 zZiM_y4|2Qx&gHduzOxg<(qz85Q@meW6yFMR_lk6wNz6>`E42Q~DCS9UXxLjfhV<&- zoZunlHU=k~oZCDOdnBz`%J1j$g>XEdP22|e90NhWn<>n?ME~>`woH}u04bqF$zR){ zgdHsDge+yfvFhu0zImEK64m9?pP&N9nrflH#;m!tk%{6c@Fnz44wphFQpe1N?R6Z} z5gGM*wj>_MN(|9`oXe2nQ|*^<3`ooDRGiDj4R-cUq}h9_;`x1cDQ$b#Y!(@BdegGc zw29A^D&Ku^n4=h_Cdg%c_*SQCR*Wm4GPqE}i(hMj;#6|~sDq;2 zB`d!d%_Pjv{eu~Er-ngUtk`R8${ogV`xb0w`dW1j&5x?Rd{y6b#~|p7r9(Oi2v66% zXvC@RGAgMW9u3{?Zjh02uBOK}Uq1UmjdTqClJlw$?WcEh)qmhUwPL3ty??5m5|(Nu zv6ERNI%3}sf8S-WfhqPs!?-6#jQy6Q%f{s@7_Bl42|2D}1~`MUeCR#uV5MB`ijAkC zTc4PgOn0+Lr|3s9p)*k4XcE7WZidqHXT7(6tcHE+_G!~)K-z&2#yses)*VDrNbhK| zf_~$k@lz4`AuBdn){DG3Q8H&#IL~3_WMk@<0uu?L`g=fuAZF^OrYRHwR2_flS5-UG zU*?(Cq^~b5ZYAYm`4tWVQW6Jk@*u5CIA{51qbZbeJq|f(&8!1SNkE*t*<+jttabGo>;Iw4Q<4c z)z+xW{<jbxPC=E@jzZ^bC{E1Oo1vHU(r>&YB;3 zE6HC!zZ9C2pAsjpb!2*+;jAppgoF{S%+?Ok$)1msZ&9L!)ya$>Q%SrCtcX}8Hh;}z z--gIohn7BBFwlmJVQ5RAqp-$7yt*bp8_sbTa+JctOv-oW2;@#J#h`D_IMLu{{jS0g zckMBidac=gd!75pp;;nUbU(#G#JSYTjL7UW#W4+ zPcrt%9#`jIt8KEnH*^=f|46xwfbpJHd73F#rZe?_u}ID&bXxpo&&+@H9$g6LA+yQ{ zdlK#|dluHc?((0-k&*j9+Xas2m*i2^2)J+lzNUr?H5MHDnGk&6XO5h-B}}l8Q;aFS z;vO)FDf2b)S71xBei91)e{W2(wF@P%p(K}Pcf<|5kX?zRPbeDC0|UI8G~>IhzI>Od z&(ZuAL}9!2iA|U|cN4K((Vr3Xk+GJJyE&HF?1!uzyxS!x7Za>_84kdWwsiq zd3(0pqv|rGzY`G?Kk}U-JewOCs4O(@l*wJWNrZaQ2S@F{S+^NtclR6!)f~Hqy0=MQx|EF&d4wrNmehv$LGB&3-;xpcDTd& zy8F%7q3o3k5|XS9F6UT!&WlFPY}w;%4h<=prt!;tN#%^K+35JS*0IVTQ{KPIjuwmS z@i*@C)On-F*J$1gj=NOX+pY)@cHaLi(QxVh1b+#rx6!GSq%l!+6=cB=>bT?YL zLVVFM<1iXa=x0lr+($*!o!-yfTS8dHgn~U3I%VD6$0G1yS4@_s3Lz(@3^iq{j-)q9 z!%lTai*~bLxa9cm;)(N-tdf>n-uqBkW#nP*1XpBTEIPwZw+jas?D zCXTd4=>0g<0=p)=gLib3kaTs~S@o~CZwu={>2vh2y$G*^BXtFY6d*U8Qb<33RPBno z_a~t^DQ9s#dUF%^INH`En^kG-5OB@3P`oWe%DicACNUwF%#dKbAM6&X04m7$uKTm}Ux^A|sNm^8)~2$?jB*2@7T8`2tWL(9Mt3ea_Tp8XRAD!(dpEFn|X=T%|w! zj8PN}1{RIwp+%t7nfw4;p_1hCR+m0A{kLs~7!&-UQKmpm1{A`D1s%PIsR*UlNDt6* zGeU_BdX`+j0Et|1ILre@so>hrBAh2m@-d_49F#ciwd|*}WRyiHoWWvQ;wXo!BXKJj z4$NELwkDE6D#30Dq|ZDIWN7~Ko)xF9U2eD@QjEPpN+2U*9dL(We9D6qPF?PIsSPWuaeS=t_*7QeyoM=Koasa#h}rH^>!jZhFUA#}V;U z*VL=d0g*5XJD->_3ixrRPLjBij5c?fn}f6>FeJ zbWKV(YF0lpO56qA_wboz*y@G&PZkUAR+U24VkT;)AWzgy@R8 z->vR%=uV3n`YW~U6(-TGBrR);9bXLBB(zni2CW}}q8?b`dWqsxe^Ft??|`cf;5<0M zrg3z1&Vf^78VO{$f@Jnmr{esk9g)QgSKo3%DLM@5t^wgbn)jG_kx%vIHqjQLu;Kjd3xK& zmY1by{g#~`;TXxQ?#MI7Gs?Z?us6+&m^H-N3}NL6p9zU=7YXj>Bu+$jSLBI4O0+E} z_!4jMDCvyz$9$S(HgU(q8>)i!?3gK8=&AW9Xf;_GQ0B^%#@yDs(J;T1{uQMylPaf7 z5_iVe#hH*CG9T=c1OyZbLbtS!#&l5It70?Ls9|N-KvG?SXSBdE*pqxeVWt<&aBfqq#?nRmNcG2(u1`!fuQ{P414GtF) zgkHJdd*OC5@)fO_kn(n~Um^a%yn@7Ie6yVgavIsU4Ub=5^+-nb8Xp29w?A9?>D|Ci z9-K)w^R>%>!c6zJ_0sU)`nhO(@RF04cfK8hPhG%t-Kr&BHW!=RHsv zz%2g{eC`hNeZaII5dj{WRyoTE-jg{Ma0GX6c3X><`~-YP=MQEZo!@}j4WGbaJCa}A zo#zM;mBC4ua6VgE+dUt-*QxTn`_kT~T1?+M8&Juza&ZNMHKB%{0V&i6cDf*06wv&> z-{;Z(e=tYhZ`8y1=X4ElfjHm78P~b%bj^Cslc1XVg;j6IHv2UMl(b%u)+6 zT}$l8d3Se&JY;%{sMV57h2h%8`cTv(?7s>xbB@AKi0nA~S@+dHP9S{|N!R2yY%#xF z^WTGy)yrRm7nc92jtL|X7odA-Rc(Y)c)I7Riz;Tt3+!Gxg$Ts%@%m0PpM6$ zXo8|grrr>hsoSSTNl`yy)tkl2P3A4S{EdUVW!7 z@h0wuU$;KE4A#fZCt7w>$ej#Ug z9&7wpRwrDoH*SH88sN8Nq>#gtbmW^5z3^h3`U%(WOkx^O;NBDh1Kvmk`G%`!fIUW; zk7R_(nfs2IZ|pD^OkCB_sL1>_!DdseCp$?U`}p#EjPv>S?1tT0@~;o>i>? z=W51cn*~W}TgVn)_>sbzY#i#0V#^&zfOemc>y2Z{Cr;4!DSBO`ACSF#2?Glnkum%L@W6zMv+%wEW(#0z zed}j#BUOBNhC5ZJ7YU~L0OkR&K%}V5R(lL+sFAYI5((<=S)Sn}$g`h?(@=>iyV`Glus6s4BlDph2`8 zTo}n(0ijrD_*EZ^d~GQ?qq#r6iR(ipR!OYP{t0p!?*pnay?Z->+I)2PtMO!6c5ck2EQL!D`T4Hp&6?++**wChQ9d+&E@Kat zJ8>8fwm4X|$@>H!w<3<@d@TAj286lrC28?sof^amwiXoXMav6@NbFt65ej(a8sXUn z-3H05!*af3gd4AunmK?N;W#C&a4 zcJ6HSQS)4+m|splv|}wfb&afbIJ?sB@kqQ!{j@`2LK!tZ6PT4nUw?pRkc`%MpV_NU zxpD-JJnpEe&|wb}Z;8$N`SVRjPU45Wt^L6g0%YKa;jI47A?|s z8GzCe_|rfNFHL`_r0*$oa!me_#nA-bbh+04Av*|7NA$1~GDJv8-Lw%mqfr`oI+fO~ zm~k=DE>bvMtFlSQf1JyK@tiL~vP%i9+ttR{0}LT}D`K)+w>Qz>;UE}e)U1bUJYin0 zwY&viEKdk@d^>_LR{_<;(Nl6@VBim2!vd$@>Nrn+xZG0o3DJ4GdD*fvT?T7#+yqg9 zerl;gjFzqOKHw(j0WmkVc1scP!HhYto4#y84v-=-a9*vb{>jT2uchIhlepdrq7sQhw z1-Ik0_T#~AkwI@4=ugXJNg#!mbd04YV!5PJ;Rs~nJRIo2JEI8aW}$w?^i(A=4QtR2 zLRijL@@z-$J@NRER5m@*f-cJEE+(+_*#7AuKyEiGLfC1< z*G4Cm*J(5d)lEm^^zA*MI~uUzAHfTOT)DVUALZ7E`K+>v$+f~1w%9)2ah{gJNV-gJpLaCzSG=QV7p#X_WG7%12uMT#{s`1N{;pjP&|yhy<1n! zB0=E8DlF1yy7c1=C?fzrT>pj_keLiRkm0mJpN9*dNYI{}eRoI3e0Qp(zk^VsZ%l{` z*8_VV$E0^Ab6S-f!Jfm}=b&q^UkP~w*Z#t1oIvJ53Q#wA9viSi7r4J%odJ1l_ZxQi z$Z*?SM8;eUh5T{1>#h8wibyYXpqYV3U%hQUd=K|tgg=MNl7W{lHhjJXLV%9ok#aR! z81N_`Ap8nq_C5-|1nE`&fNl)eq+Jd_+$zFDJ*vE8*pcFYpHKx%$9QE1HLolm-X*AuZoh^InG<6qf+?DqJDhmr!#Uw0FSjh_WM z+db7kZLg*B;^S7S8N7-i0`3&~c{;MW5GG5rsIR|7p82E!c^;R^&Wx)8v1p;Kw!V#y z1LUu1+aX$J&HF}Cfl=QeBqo#@%_;=h+H;RgMlq&!FC>9Nktzpe0u=53N3C4T4=iTS_OaS^au zBTHV3=O_LV)5U}xgicHu*yDWB9Ug_;n=prl1=rcz*yhe1la>~U0QrTd!d3w8w2j~< zjW3-Hr@Vs#(ukIo>yDj}QK3jQbnjcb%c(3ssxj`+)9PR9Tqyw-$)#`ar*@nHB^P`m z&^S5W?si}bg~1Pd5ZNQam)5P`dW;8`PJj}mIiYJh#23zK1SCa3r86A<{tjMml-JjP zgUd%&S6AVxV4!7U<>2_rq+R2aq3qBJ&&vZ|4NSHSV!nb{3(JY6=*fkVFb!swz#Qm}O-G@pNHob}5s8=5y%$hxp-G{z3hsru zd6T&mPDnO+6w~TV7Leq&K8YXy1T$m>Cjl_UtM!gCN)5vLXBku(PPrqQK96+|Qh5dL zFu;sPnCxK2+;GPYb*Lh)&SxZ7&!QuJN@nXhk%k~=rU3$LhcH(fc(ivWqbJLw)p#IX zK`_P}7=9-g8x$c7#Q9l{KSr-&%3#1CFv#<%iNQh&n^Gg;vFW;ToaGEf~25@sMCcBZQ^Imw1J~hIBSCP#Lvt( zsIXYTGEEt*&5g;)WVduMx>lJiY)g9@btkaO_8j+IOE+FG+4RyH9Qqh&hPFG@(v-Wd zx)sIT`b$eKQz^sJg6WY9&95r(t<%TeXI-(ItB*32mvKVVsi2?&`xS4`4jFi$H|n)ngLw1X8$dI zXo-eUIfnubF4#l{fPzKBZQBXrX1k^|`#^037|f7DRW!C2kuYVzOD8l=c!Qqe?DGPdAP^N{1*$JoV2#}xMpMW&7AzfV6Ff3EN>JueC*GGzUG)Y zWz(@yxBJ&!SNR7uhFq>iLoPyJZ0_-rIL*i_e>R52NL*p*j+61&byY!W-xKzh&|N$C znQn?WV(VJ=i6_!ZJG4n}OK~(I=f&uqjz4ak3rYl=L~u@bx0%M{do~3_)?}S+?NdS` zHo8C}SbRuu_fN~3?Pp})oJ5H4o2hT5lhlw1%B&1GJ727@p5^_SUlZT;ubx#b{@BQl z3_Tc}zCw{37iJ)mWWa*WMRU|DawwH@*?W|JnKeXGxgs9g@P)7kic!wWND^=y6{Q$H zL+j9fL)cXQZAA{%(av;)Zhi?NA%V-SoUYK#TgiE?k%3VqO$I$C;XA0;r6K0*K{BM8G>Nr*r;Vk>>|w`nVf3wk!EgTsbwr= zk$>BgF&0>*uvp+*In>NUBHkdMZ6zrev!!yE)j3*^Kh?acY9~mb(-s9G&DGeV*hER& z9^BOKPP=9m>O1%rV*HLLsK1_V$z<%7Xwpo(UptN8^*M0NpRco%WQcoTs0uvE4-Z+m z?0$!Vyq~0`q===@fF2GPNw}SkN*WL%!`nho!hingS@N`pL!Ok+=_!zr+gMqHVo6R> zaW#;{_Mb8?nHFRLf_26!C>Q}03h0=aa29pI`^=isUD}~CaQTB^72xCiujmKA5csYv zhrB6;SMWeg*<)k_Qyxp9VRn^&K3rLEbWpJPz=<0R{fwOWu;- z{}X$^U$jL#qhu%Vi1#8em`5q?T^pwAX2LM;l@sSe=~CSNek3U#!!H z80=>c!2{a@HQ>E=hB`F$7vs{&icNFLwisfyEGKCI5_Mk$Fya=}w9|Lj zp~iluhe@_OkSaoMdW6hiXH!+;wyK0&+MI*wK@;&VzAV8^6nRBc68m+tOhq2{_OCo! zguSy3LiKS@$)BgMdsA~{&t-F>y|lm{q-|Ga2#}*4Pp&g3bUq{hZh$oUk?6Q@>7DD_LYB1qRc`t2hVHbUcPqVf>g+kz}0eocM_qYldB}!-zp`5NIV{>SzHy z{_g;3tvpiG;Z?As0`c^eFkv!4};wX<~I9~v^h-5M0WnUmst){tv@ltpqOri=sQ zu(-KpFVzeJW0s(Y93B++#QoeY#W*r7rKv>>`tZWs?8DtTY3Nf;TTQ#!O$HH}wE0^N z$Nq-lgO;d|KK$=iZxv}{{7f{-6NrPyg3d}iXZ2$^`0zDG*{&TwTgLnn^dN#xs>C&W)I6J}H#8CYf&l+$0(1sb ziVAm3>GrzD2qRNVY26;cF2%*6@f(#^S}K!Oj3^2TD~qUpm(!r>eSevaD|tM zu#v;Am$AZ@j90E=LV3;yeo8&gYorGQ&PS`%QoN&V=3$U$25dZgHL83c2~P#a2)56z zQT^lOB4u%uRlh)m%^K55Mtxt8+qjF&92R+c2M;5pW03!F_#p`#E$1UmOGUnz>>|0( zusyv}My_a~OP_}HzaB>%7ibs6G?FX2+c{gN!CVD4q1t^`$p|2s3)Tqq$6OsRF~8qI zO*9E3CO@4`;dV*JzLgQ%Pai72f~LM=(+MI=|Xo9^f3#F7D%UQFd`}e~v6_ zL_uvs!S)I(^F}_oAV4bwoBk!G^8}>s_+7e^(vOU4isq=Fl(gtudG4WyhSm~_Jo-B8 znL6vqL7(jwj|R*R?v=dH@6w$w1kKVN&&&5)c3!vG9hNu_e;n8ST=L*CbpqSa-u}zj zkjUGFSfXi`brAEbyj*lrnVGRymf5`o5gAKOaEm&pF~?-@Haky3fw(Q99(-94S&awsX)ZU2)fb%OmNIjfCM!!={+)!Tuym|vu1A6fj?j|j{@ zmhnjy8h!MpEvzmWqh~E^Q1t3vzf~(#{c>)^D3kBK;m8|tDAVG}uru`T)n=VN^YSre ziLFBL56pCnt>=UrsEO+7Ct3OsA3bML^v?-Me~T|N1QU$JBuQagI7fYGq{>6-7X11$ zgb8wJXIY#(OgCv?c||IHoK2LjRADNU&mgFJFlRB2zg=CS1V;e*_ybQl6a;!{cq$w` zEJ&L_zTZUP`foNo&4(3)MF8IebkbF@wct0)?GdcPaZ};c<6Sez71z+xLJcECw+eOK z99p(}IJX1uCu_#>Ij>4zzP&o(`Fw88lKxL80l@TflYV^Asi*Qf(h|OWIA(sp_FRHP zlBwWcLpVGgS4261ludWQ13wq)?U8D2F1+;e$A1E8`G{>DiuaPoPv?)fCqfVGa0xaD zOH4{4(rI?Xidg*vKI-xpL91_n0&|CbYR@o{M90$ybY%aZ`cl~azkc7?!N?xgMcs;7 zBO7u_W;7U97bR^wO88x~>1?-vAK_gcdHemtj!#!%zHVp#!_x4ltF_ry`B0PjnPxK* z%g?pT$Ngr1YN{~mdr3NRPo4P4fWboK`infiZ29E#STvWd`@GQ4HD8e zy<*91yrCKOW|Qg=UZ{WTYZ1#Vt$HDmYPC~J?M2rW12(CzHNw|hJ{Z)*zcGJ60gg*<{0)%ZYCseywuA9f-W8J>tN!6&( z2^L%r%-uOmo$koqbUPgR(H?J@97o=UlTfxg`hMtH2khru{tWEb`6tUCdw`|QMoDK^ zO5r?6%(&-35*f`y`OvV%`A76Nv~ujMYN~4Ot?EjS`2@L;_Z+M^a9~D|l1B&fp)iW& z)x_&JqS^jSKWjgUswW-5;HQ68_FjCH+DzOfhubz}ZemkT6G65;>S2nbrMEaBn`PhW zhY>HSR&g%W@FQm_VxCAciz#N0cZn$xhBYK}Qbe{Hg=})D6h9T^B^BP>q@%z=KoABg z_h@(jR_inx;EWwa36%zuWvF`5sNrt3j2tb!e-@;xJ?EMkBCsqx_KNq@To_l|j$aA1 zAhgl=<=$kMCh2Yv*9zoKyD+Hs_P+%kkT;UA7a7jdo8e_k^K$FLs_!pz(NnW;h+{1vjbKAWcWhR9h?NM;z1*kJu z6ePpja)<#kzMWUw(HB9^GRgq}us#ogTgU2DiIz;;Y&Dm`5AWwrI2&nv<*)QBD2;qi zU!&ozlY_-4@YmTLG+VtEAIXx41t;XxFcTb@P82$Sv;XIh9n*d@Y+G~XJQJLV3&%^} zn_ra&Z+Uf7LILe!*4SUnQ^*M#_f+oKx_pcZkJK^E`KY!6qR*o75 z3MIc%50o;%QE6J@0k_7_$CM0^{r~~&fIOV0{03P~?A2>ZsKbHz%EkW^2& zkD6y42gu>C;fN3wZz8D23;b!`|K_%so{qz{Dy7Z5vD4Yin|oGvmdB>@s(`h(nL}Z! z!XF(gd=t$qSq;kM(xQy}Gk=#ADOu;mu-9wVGHrAE35~`MH||qc*3VUK#2ojA2noycy#uPCa4Wr0FAW)3}HoRVtm(|4ooBeE^;>%4O}M}6=;`Q+ej!^A%s*6xt_T}+*F|?v-Hq6=2vr&T`7e%z zZ->O|$;9|M-{bsjiB8Ft6iGZFhx@fuj&A-QI9^mQFzIY5nzUi3XJs1lVbnFWDTlRI70*>#dskeA5QmEZ?z0lhJ=X^e zO7RxzuFt-js(zf1vPw(zO0d{W0$@&MCPF{v+U+$S8$J4)$SudQWzGR?O^VQhHDYDQ4%d(rC@n1dPb6D`{3Ho`k}8D0{4a9=Ax|(0as- z;_rWAWsfXRgf3q?(9TlCRVmXWB_DV11@G|4jq0UvS3GNSroV657A{uQ!u5^Q#(Tw? z?*3#9jn#HqpYmqdbQeGdP;Pgk=ZmghRNbJ9=ur4}O3(|^qGmFPh16Wd%Cq-%`ks5y z^-lYp6pOwm?sO7o#8aioW5M54zeUy;79I|4MmAK{V11jG@~HaM`P*iFGgslG)HUdD z-aj(mnkW%9QAEmt4T9u_JYPCbU^2@RuH_ZQc7$LFnyTBm@)eqsrUfm=ma9s<<;eFI zJBc%A&7euC7^lDOp1Mn$_LfVFD*;X&`Jx-qE|Nn^NgO2Ab_>J{e zOB&GH-F>y)-75F$p1^j9;df>N&`9s$HJ_Cd9=D13NZXg&`OAqCtG5n3M8 zkA}`~wRuIJ1d< z{)1ac?&4a5I8vOIU0xDj?K>=pK*lW`@tueFu_Ai$V%MhLzI09iK$EdOn;+b{S0M?ijI=*HF?NRp*h1 zqI2%@2z)tQ8WG`p^+qycY{GAp$VE1(N{}6G^MFMRCo#;IPL57q7C!mfs-5L3BXz>< zEx|+7WK%hRFT`JOWf3$A&>_^O-Wbh)1ukKsRCmV|20z53KkPSQ$~*j8ssGffVcgk2 zNOd$bMGpPJGd~%*H8g`x;3T9?#)<1FA%F*rbu`tQh4BeFK>x>z^?Iul-Y%(II?EC& zEE*CQgApqIh!oac(oD{;D9>kz!SQ#DVoHMhk3~jYcx9ZdwtFL`)I+#%mL)@-_@a{ibM?r~4K3srfR1ce?yfqnJ|*jt9ITaI+?U$>Gi5R6GKDKddn%bXx45l`uXWrWng*j%R@S2D#8t zko>YGgZv3qC=8JZS4@OrxR87+qkVdwz1UTJoKD`CzZOOvu2ewwXD{Jp4E=TzMGAv3 zhkI9})DN}-g6dey%W0(8(CKUFW^pT1ZLzWEG4OlW7i@WV{WII?IP z^jIv8`PgN`CBVDkI`p^rz@x`75&l8b>6I{tY0Sr+W8#ydK*pkda%$TDnQT)|KRia= z6F4$G7p<|!RNq!_x;Yz;&$=3}GwSo2s=|bdzO5xkQjPDPjp^BCi`9NKI^GK~D?u~4 z8LlMP=_8Ln^)~$49`famU*&zbB;aKer{`63_@^}+&+i9MJc>krG9xxX5oM3XB&ZMyHJx3WsK>%kz+zr~i7_%bi&6(c61dGaV*k|Dp(PmQBO zJq^=T$NE>U`jYCVPlYng6H#hp1IXz#mtZY@z!W+{D`70_T)z7k0gukLH8*bzxLpW9h>?Jo+IM9`15R$!y19;8 zA*Hmo)!e*b82jQTaJ`><1LOWt?1Yi`Fc}M4EAFI9E>3C>#e;)<+l2W8Q|Wd# zR)x=nhvum~IrG#?B-tK+n@joWI_|Y%a_IKuorQVi%vlNH1A%?2y2uwrBgGRlO z>0|vVJC-sgO=T<@%R6)uHfco)Tz!z ze;x2Ab6~qb3vd#G+F0h*p~eH4Arm3)_j+>>!cz2l4(xYB$Cq$z4&U{ld_yw! zQefUG^#h<}hmOG$^KQ+CbPHB%VbJqGQj#?5Ne? zrl=g`%o*P|HGPXayU0+O+9dp9vfF1N$Wf$Y&GKy1fU^8ayiW2i%xFK(_Q7XL&!ltF zjD+STcuI+D!GlK&>d=t>CRVq8bM1zDrNK|?XU*l!uwm1syq+{WnT#2Dh^^pjxp-*6(nZEA@7)ZoiJ`sk^fR|Gp7Yc+rCoTw3Qu*oIR@Kr)c5I8}YS6o$xN3 z?*Bz;KB5a%Dz06N|E5Y=<>f}N3+?&5yY+7~lyoPfPQWlay zPu;{M<}|{w@o1&+>~g{s4YXdg79O+bo#KVMwiAMcFR0^3eDZL3re*3idQB;d_q{~_ zXlY3zlXY0Q_S_~^1*%tG_a?EOD}UNqFMiu(Fn#a)!XDhoB|aQ);>r6sb*Q4Jr&Nb? z-nhcjJuNp3EGif& z!bT-m_Uas)ww+xmd8H%ms+TzBS9&hNCSi%m_ER~6+1+-t1?ky(Q%feSjpotg7VX94 z*T^)saIRM5ln1Ee4v;}J$iy=6Nu7aG865UBfgu`h_J+)nQlhS%kyCNQ*4L(3y}`r| zF{ZMg?zA`NV^j?dW{-2j$uU$P6DBAeSsU3?KRrws6*b(spfSpyC~3R2i)q5ebM3&= z5kJQ)1Jm zB1IgB5!bp$D9&NS^?tK+FTDqfK@0Xv|Ct2) zp6LM(<%b|j_#hWG5TyLy`R6kk2zyp(M?kXpfsi-L8}szaLaN-QG0LGn613>)SGxFV z`DqRbCNbnbe4agD%MijiAtIC8Y*+-Yg^B1apS@X0EF`q>Qed>D#2@qWk@(8UujkRW z$(4R7QqR}}HX25o4lX?|%Pk&>C&jSSnZpj$2T4<0bn9372Gu%NAmJp_x0;3ON?n&p z?Bl}q>av-=-zOaE#~tdg)6MdCck85S&;RV@=;$-PU9jtxc=;!lv2YwWLFssF^7mB| z%UdqA7<*IK+K;c2AG_PL=PjK=j1Sg#3}~sW7Sc+t(`qSX|pVJ#?t4aJ|Pj=aB7(Y%eX-QvZsyFYdi*WFsr#py&aWlc};lj>HkgHNr< z>dXsVcUTxc#Jz4<7BA}bxhv+?dibf^jzqsXE+V%>*wez96I08%aMM zx1PkuV>M=tiDkBkWp#P6OiFVLk`gMS&gZJpz zZ-wS$^>D50;wP(kpm}c$uu;R6SOIVv%F__=rx2*TdEkMYQ%kxCI{sfX-}D&N6xad5 zD19y#05e?SA~^7ybzXEkalg32l zf)ff&_$E{}S2ecP_}+_>%hu-+NQU(7wTxpn0-xbd?`fMu5CosK_kM7wh`0uXIrP2( zK{RuO2K_2bpS7B+^&k&K$s1nbxxO4c)*Q^wm7oy$UBJwAeg?xz`mkoYYbZY2)bwP6 zLg3HeFHu_RgoQEJTsuFjQr|^c#0jLgtQOB?oPN{ha5AIWJZpDYiw*K#E8R~JU6+WEzDvhY>IX3AT2j${Z}b$quPRXq{uGBIf78Md874IaDE zl^)qD$}BXrA>I=o-K{PvoQ&JT*Be2j!sw>F+C-KXmw*~$6L)7M2iB9s^-Hx0@# zkYV~(+wH>k*~9taNd8*WZ?iH*RUc*ELWQdfaAx(I&wo|Zc7t9-QrLl;;CZ|?zU-YO z{igG6FUBgA(xCTc?S|QG3jcCrTX^?N+&9RkH2AsG?<+D&C{I%g!9ol#Uh1_3z2V7* z97*eW0TbIGfkZGMw0tUJEJO%^7L;G86vbQ@mn*Tv^Wi=|gLb{_Hd%f|#{?`KpV@lc zn7ovrki7lx1jG4JsZ-4L7FVcBUZ-}E=}2xV!TU5B@^dn45tbvbenfTZ4%rjKBZ~;# z2n&#ukuoX}u!>=|XeIY!j)T6sbFm{K?cB>tJzNlgoEy3)z7h>vCBd|XA?7f$^O9n~ z#939$Sfh5GC>YjmsLN@8+j<->BK;0~FtNr{^T%Qd&>Oc#D{8$ri7lW2(RUzxt`5ix!PRWURThTVTx>>CTnB90O^iyZrn4|l}tm= z+hNy>?vmNDy7KtJ$MhI%Xevs0`Hx9VEI3wLh_gVg;xYpt2{o+WUYYI=CZ+GArE4{= zY~mg)Hdx0^^Ou&mxZyWdI%Fa%6limmX#zJFhJ1_?9!6FlSU%j)Ai=&=QAVmSWu{8) zd;N9F2koc;W5k874-<+eRa%{|0el7yF!3_4D@F96H{eEp_Aq+U5KVguwhu@wnMhN$ z#!ny4-l!YqvHL}@I&zyod_jiTsVAoS@tSKe$X3ruS$~!tj~Cm_ddu zVz@-GaHn0GU`vmObRDPf6r-EF>Bql-_pH)z){PuU=zYBxo&C?vzogpb%OvcC2@l>!o1Z7G^5!Bw@eF@Ulsj##ad&+&w zxv8nCTnca3yyOTv$| z(Fr@D0Sj+w&^9**Q=LzDUVCPSgW(Hxi|bdc?@X5o``?M8WovV+t#$;@Ra+7~jK(nn zPOFQvLrpG#`e2Hxge=Wf*jA$vza_7)z zze~o&G!6emwyn}D<7Ajgk(;7HWD+j227pC0YW;sKah)<~pPN}+Zpun>fo0G>xG<%Z zRsj6y-5eDGyFi$dEI0>GcHH7B&$X5$dGI~x&ObIBObd(o*>F|CJYh{iAhbeLtBF3X ziT+k7$;tB#mGUqTe5j6Z;l$Ys9z94PNu}x}5)#zJLcfzB%WXa<#YQ4p@FHf1F!{F} zead)sxdG3o;t^eq7*Fz;tsOKWwmn<&(ice_c#88h>?GqWOuEF=6eR{cn7XRHeaN?| ze#j;t&79YBbEz=_i4D2VgxlT$+t+@FDnJ2?HWl`$?v5nvBtD+mRqIl0$R{K25 zIin-(kxVL5<_Q;3mG{~!w;=3lHyO(Xk_VYAQb_{oKHwBzWt>{Q*lw746ctYV@S8?V zoCZ8Vv6pL_@PS^Zhj>71tJS|_|KsmIxI2AJYsTa|EvzfPe}CZ~y3?tzR5{=wfyXXj z!gvCQcqfoe5}4(S`q$q4a}+@y+|nrf_{S2!z~-pA?Yeoc#Y;f^?kE<~D{;rCngLCQ z9T7cr{&#zh5IgW9L0Rn@wEED%ch^C&UHn+N7E2fPA_MdUfH4bMk!SG20>pe$9;23zAl3nKiOlK+ ze(^OK9><;MzKh5n_p1ibsg~51O0;_=Gj0OFQa7Mbm#7yZ>!T~spIeK*Jj^trMF-?I^W2} zh>|C4GZj40q3bl*hPh%yx{Tx@vS8iRwRhGjd=>86lidnd0aB-Goq-U0ZTaW;(^LF^ z)uY1Eop-Ver4EP5>~DP0QTeiku0NUtlLYn#Uk=RRTI~j9k)ho`2&`b&$>VB>wo#HS9WAl83xCSR&0$2 z*eP-k@@9;M#Hhd{h7H9@&yfiS7`4;>Vq>ctDX_%mspBGu6~AIbS+d_OwB6Ez z%n*>ab#D4!%nq1t5h$BoKm$3V@;{;i!f7@?V8Oc{FVD~cNW*d{E*nY%b%)~BwB4P4 za|SfD);Yrh^*3+cxFiHTmpv>Rt5@6( zVw+4nMj{xzA#rTj{!pkHWn}kiKn3eXWVI?(A9t8k$+0>bpg%joPB*lEOsFsnABLQsQmr zop0Z_Vx2Mue-M)HgPdRWa)|{of?fgq`xZ2l7IDnkfBdJ#qD!pZB90Z0O<@?QRf07Xh`ry?oE}3wrA_2_$6(&qSz*v?d{?jz9f6 zWqMYE=ey4Iways{#MDZiz5PnCY*TIN>1Zbfp99V0#a9=@1)Edt!S8IR99sc z43z;>Qk2;Vbf1La-p@R5L76rScD6l_KnVXAG6M|lx-KeKuDC@nHxe-=j7zjpI-?tu zv#fYJm&gLw_iZkG$&ZV9 zoF<3@JN&)0bgg=YYNMPTisYvyh;qKd7RCzbr%jxybY;N?``}s%pLEILa_~r@YNo+b zdzUu@^3)k!n`8=RCvVco{VN8Ltim<8>b)a{ZKr}uSQa#1#mkH{U|XeQhEE$)jPA_M z!i4i5bWBWW8drKJT(O37Y`mtw!|)-wF0*gBR-kw*1mCCie|cC>$rnwhlslZ@Pm46h zFx1W9Hr1n~BXEk~8IUtkuD}~TAKyQzoZ49*FrY2^_MC6QW$cf>?#^8M!sB)glAIoH zMy*BG3_mbp#_Uq#Oi#8cb&DUxmGQWf2alB#{6|H=PuJjN8RYjZ2|GGAcK zhV)iLlx8}{<&QESR@QSU#sE^LPKr$3Gcl~)l{%OXy>TU%Gl?8)=i`46-4+a56{=%% zJAL#GYF0X;nLw*%}-G2cM8BT_f%gbDXwv3?qUIc@AFOXM07spa2;4)cAt z;mVywqv!vbK}7kD$|u-w<%Hr(H8*UmPD4IRFPOVBiw)>zr>Rt?T?Sxvi~CNb?a&1d z-=*$)1<2rIyQe5YXU_U1$oKp4;XHS8+vMH5r+;0a{V1Nc=_v3p>Ri19ulOUBW>{Y0 z>OP9$Bys&+q6=*LkAN+I$GI=3Q)wMWl!6f0&*c3A@P@qKtkq@vJm%VBql0R z0)zt|bur$NQt=vv*e{^0^ubTcQqFMespdk_uMWIMKd6^YtACqC4FKlv-r)#2EaHu@ zd>#JX{{PVYNDotvhog_o-ua))e`|~IF2imce|epX9P?Y_Y6*o+29Y`hHMS?$bFyKK z4`XvFB1LD6Uxjy@>@}PcyN*n9v$1J0K#DnnCB2{~3Ue{!PyR|iy*G7dg$C26l8h+Q zeMz4|X5pk&*p4%nivJlG-AnX3J(yim<%J=SV{-qMzy;%GP+n7Ln8@U2wEY4Ybpj(* zei)IsZJ6GE#xa`TD%uMvh29XkDskx<(k&s(u6rK;dHpbZQ2VeR`t^OX=|eAU+o4~h zCx`Qn=nK{AJWXsAhIS>%P8L=a6%HgqlrI_}3*EKd#D$c;T(CbT8L2qrk-90#znY|t zg4VB$3*`}QgHs*W_Z}p&z#)7C_oHJV6GR-_wUy*ge^19~oFbudLH9G{{6)FeTc7YO z{_7WGnmq^3b@U0`qh1BZ_Xk<1S~&RO*IE{lj07Gyw;Y-ZT> zD0qC2+X?>PlbMS5C9UZq5O<-196)J0Z4M*{u3Q6&GRg(NtFsdWJmcN}%mo6*+|tLp z8MfAgE;mDiCfGexEZEVDw&NEKux&Ds{bRBqD1KHIyN2SbM6X;B0dh*tk^=%o7zdN4 zGoZ8r#!3rF-s%PKdWK6OFi{-+{_406ASIcy=}ut(?Yz-Y4LD&DSb(b{x_vfnq;UV}Z&5vyt#2leOM> zVmB?pR_2eG-y~`sUnAQTEJRp|xJsp=%MrOuTzgl&+~!}1Lng3e(0SPdA|4zj=Qe84 z;eD5N8zFGzFsIKaFq_Gh+rD@@IaV0DgTW?OslgNQx3KcYH$$DCbz8bPx5*SVUTb=v z0e%;8bDHn1*yRjpM^0aT2hlJ>6T$!D+)Ja=ohw->p4dM)4mV)p-s`)!WcwtVx~pDB zHCC z4o&Dhg3W1;Fy||8+Syc}q36Ce-o&DupKIC;TwPvep3X}fVxkXzK;On64PF&K*b|LQ zg}=P77ACTO=n}*ck`yC}kT%Wbp_1?189im8@7S`T=)KR+$)=O2>W64|6Az$>2>?Ml zpm^s5w2EnFL!*L>E|;L4w=wDdxpd?C%myhyeg(b&g2HlF-$lnaJ(Yd4$Rsc7Cm!o1 z%0r$zpd8_Yi-wnp{rNFiWuAQssCL52(-n+#e!9!6Vfd(k`605Wcx4(J{|cwOICqE1 z+_04MT~gwruv7Ww6QC;9HN@@bYmY36GTqv`>-Csslbtrk4-~#~!39F%&fI5P*|-ykAFq09cAGp8J8+M1{SR@$sk!(q)Fv{9K38Xdb5bPH z4O$|~!~{@`Q7Q#6TVfc@DwxkaOyx1e=Q%}dM+NtyUh4Hr?zE^#MITUtKXJtm(NU3( zAO?s9z^OzFbw`O=H&_{}xFADM9$*6~H6{wn0?7+R%UPL76q6gs(t_+4E+$f2L&6#T zs8MQRRKcSHA3>*&pKI3#l1m^qycu4(A^OiV9Dw&IiYy2>`D`K~3eZybX0b!puyF|Y zyZ;vUcs65!+fcIZ>ecH2e_w`S#!Tt+n`bvO@BI#d>JiB{PGKSTusNZ+x;&rJ zM2HB6CYp@Aq?aiNhpOzj?qW@iS36&cQ8DPnU5o7#%eXIMg25&H?)&FoPhL#l=N!7P zHiD_bD6G^IAiBD?UFn|WrbR!VPp#<|_6nm_?U-`#Wux?fXEM@DDoQq-It>52XH@V` z1l4AQa0zENoE>I)%O0?K%!HKMCj9I{?;>6mC8O_x7EJ?OYfwF(ML2Iv$(z1BamX5!IpHWsydpK{zCG5+I&=zY9O zH+`lv+W+Z)I0F-V?ho2bS4X*Wz1H7swR&UwS=E@RROobti=X7g53-POdrtBU6sX`_ zU%beJu0}`h?8~F;&V=Ld!zPKwIRACK`~B?dJ?ges+CK3YQq ztJ)gn6+aO1AfAvP_9N?c%CJ+}z(%Q8;h{M{`&`PzEq4@~yy$DJo(8D|2d6swJe@Ld zeHNvhxludQ9kJp3fdPl3&-u)2YyhSwa1EjLU|9V=y$!3ek+>v88>F(a^g-M5r`iz1 zxqz!m(~0#_#3ML{C?Klo7G%z5I(;Vx?bR9q9E7RT!g~M8m(iWIZet?!aeo;Hr}O2} zCA)do5qYD4N)&F`ZXPQZhFThqyg2yD2!Q)D-*;e#yz=kv92JPhJ#($n!%SpLb@u&A zp!F*nAsw#GZy`VNowm)pNk}?dN5$1~?bD%x0B2Hbi(dlYGyba=K84NS`={72IB(Qx z8ROMhcqPE$f$_=Ds}>G3n%AT(^sCg1bQ=LeJY0F?CEM%yJ$&uiVKDYV4x)ZG1tIyS z`zjM}CeUBibu{c7w<{IN#<0>~y?vZP<^}0Q1_TbY1Sc=TfaWJ!#)2J72bm~58o+@z zS=*-fvaSFooFuI)LgmsrP|5>qUA_1^wZ_ZiLKxC$S~?mCgV7bWHD?g-i~TWMsdLFa zRR})Wdq;5S`J2lyAih(oP{O zb?6J*1Q&n#?`5>ZC~loAz8Q_h9r$eDb#;+2cw1HRn7+Mg&9e4>HGNMR9v!%O`uMzx zAG^xo!^=)L`*Z@4iTfHc=GHNJL9jm0}%TFgf}O{4j4mS$6g z8rSI0sCQ1aSL-e&y#U{yWUpJ=`bN|5;xFYVWO=^>`0I!;p9%UVdtI znq~g#w<+&I}q|G|ch>g30f6_&p(_GAMZfas>b zi`!dO1UU2n?(4})={$A9v3n1BSUgsIyx1^Kw13HUXDrGmX)~?k8A(7>- z^x=Rlq$EAAVi!TG9=oC(;o*#0pxHG@lxlP2SY@@)rPY)*{@+KR zSgid@&-LnLJMiB~*F*MvW#-pmu=d0fUPRMMKN@wnUlX?PR8qc;{-AsF59yPH-nGP? zq_o#>ONpHbH$p!#y{@kpW|uyegd)LHFUgI_Hn_&2v@A$Me8sD#;NaSK6n(H86T&V! z^St)6%4?yR0HFcwSo=6xv>9hQ?Xu~1LttLP7hfZ$$g~iR`xXEluGhlHaR=9P#=C15 zcl-l#V)f-H-~vKKU@{E2q;DMI-{x&%C+O=e(JLz(^-)aH7edKn`zVfqvu}UbbSMsd z*rRexI_pIWv4T*i^Q^t8LqLlzI@hFR_28YyyBH|Rw*v!W4~>smgWhz9UMgDTZYBlr!_cho^ooZs1Wg+65ijV2r1A1IAzerWl2I#!CK}5yAdW znsL->K8(v+@N2O)2S6l%>Y>9+u|!*GPcvo^FWLTu6Ws&RXDE)@)#^JYi_0HEf7&ep zkP7GyKuOS0P(-W3$FIt<;vC;0igO4Olq~d9A@WTvhJUp?)5&maEp=(Z5f%r6oKu1a zPk>+`rwNV!Id!n0-6)GDaZ#W*n@Fi^=8lWxS}J+_6Fy>Xq-e&xrugXJmqKXvS+4AH zs_T_nZXJoLto(8G_4F6?$x2TYNZx##t=)Fb#nEqteSY}egG-H!7La)UL;J9?DRuj?^?WQOa^0_2@G)uHC- zH;nd}oAKD5pfY_`UDS31JB8)v>)`ZNZS*;|5&1={ngx4%lE&BQmUDh-yLnuTS-Ek! zZ8bbe#l#AlH!NDr@**A1!ww5|I;#F0Fjvj);!ah{M=3(Gm88cSGva}pOdUEh0HEcp#Bb!PykaqpoYdA2l;6CVrcgIxNy(iP zh6mjEF0IRQR2xb9SjqaS)?c>&_hAb=NoWBLq_A4qv^3}$PxkYQe1raH&g-I02-#L} z3&+S4b?DV#VkLoD1n_ZfR;qq=XUD=I&9|i~;Kr?$(hL;BN&A%|$~0EMO;i3m2ZIFW ziI=M^5}3>rq9`T-T!x%+MIQA??YU-T9B&zP-K7A1oa3>|%7dpD%81K&GijQi*eSie z*=_w(9k7eC*N0P@>^zD{$=!&m9|oU z>ixW(Z>O}CCv5KOLj&NpU2gW;$~^9lJctorv7y-)4NiH{-6^pGllDU%)fDJ|>4!Z$ z^mm_4-&4gmzBmZx87dbXH%?>v*a?TsGMZEp=qFT;Cc>^FgULfm?MZ)Q_1@;guNgHt zl7mkFK^n3!Q$p3~Fu`))aWp9(u!54TErO{jrioOcInLi^z*tPN#PUhy=mmW4=>SoT zxwPLqGAf9;L{sgffYv#Jj0dl+6f&yi@*fq`{{Dy?B}gp%ZHET~VL8L*+`xlia`>{M zsLo6F{jQYLXi7LcTh&819D*altn{Y+86E$B%-z1Af`TU(tw7tTjQPKUA1Sb;0getxoh;!>9bMB(I8S$%xFvy>aLCRY^`| zR!KLzcbh52IL^~DV(fxMt`~20b;o$JX;N&w$C_Eoi8h4e(0xXaod$atmfecOG&?@s zjBqKwaWI{@ER3|C+W5k>QfI&@)+laMLN6lNY`H{^?%-l?S4vsw|AC^FgzK5U?t9o# z&*l>qA^V|PF0MLmm@lmkzO*D=@6XX>CY#(23&mhvM*9dr$l2J8@LO6*ykj);((d`E{A{Y>^2 z|Is9QaCJH?vhRghH65*J$tXptWE3`FyBk-od;ghL-yI0l5b0;6;`(MjKlWa&C z0V%H{4abnctgUt>(zY#3KgZBDoT{(d;jV3XnqTm>@1JE&spehN*75G?UxM%<4~XHx z>U;tb?<1l17FmB&1$6RRJaS2NJh}q61>E~7Ze+8v+tl(o!3Mk-X`V}5a{f^G^MYM9 zu*fKz#y{IHWzr5GGo`OGn-X$@ciS(+LCoF1s<{BRS#yTB!Qv(>bSU& z!i!fArYST=?k&bDu9eT@=;2K#1W@61T|ox!z1mkSz~dPf33Tw+YYXl)&@6cHgn<6) zTj^dUcTMVv+9OfC=UXgtl4SUPTkaISr(D}Eg=_m%xX*Rpu#pGBBumpApNss6)>o~Q zDw^DGF8Ew{s9ZRz1l{{9tRSS2Ql?pQf^Fl*W<_rLcvK_UW2b|Mq{^b*Z=#CHkRDLn z-S;8s=Uju*Am)bn`*uRV|KwUDiR*>3bU-=uR@;#Ad=Hm+ue^PPulpO&;OWeG1wX7> z;V{{oRi~}7-r*xK0~$_p16=G`sS1PkWp0WSQIZN(64z5=p5^yzL)rwB;r%aBr0f&cv-JnGYO|0%8b|u<7*HN%$ znh+jU|E}!3_?Ec-zx|XO*KNh>wlaJJ z{+J3Kf;0OBDPohq{6(;TN}N5i;l1U&5IC&5NpUW{{c1O1#*370&>3N9qpzF2!kr@R zeCeQI#s!)AT%XMYN`N8+1Zt`aiPD=9pal)lBFF@ZC!Da;YtpSBBjt=3_D;Q-q3f2) z6Gs)0aFtd2@VEY6VnbG)ZiY-Wi8H!47rhcaYW`PRJ{Mh#IA|#MpSLSlDRt%pCVdgW z!V@vucJ~}@b-vcNqlNU;6|im}zPzyd57z4ef^@?J;eZeR$lFSL0$#skYXb>i=V|Wu zmK=}q+rsW`vw3S8j!qD!zuN{y5K)lt6a%+H!&rO6P(O>vhW>~~NVEB?MM$xushEKd zsF3=civ%;NCFjejlr$Z+!n;EOcBCl2Q`h23kC*Cp-Q!SLQ|%L{VPdf3GA{}ubd^dxDtY!Bdwbv; zriQB1Vw*vX-Hi5hd9p1nA7_hV|P@;hq1At|9*v_XG)=sl}`AiHb@`wIjh1q1>TBFfYk z?BXnqh=Zks!0H5;=ulky(-MY_JDuw9|0lSLqi_A|uhom;&hRTXkI@h9+~>wrcz>8_ zYVV*Km)8#wE_@kG<%GDYEmsntENxzC*w&}1w1PwgdgGKlB^oM4SEJYTDTP3~$+HNR zH1i9!Omytk@JpZWu|5};=VPl(f9#di7Ox|c_%cO{V)&)V>Lwp$=fLL_&M26FVo68f z8oEtw`X3L&OvcWxaGP5E!Rj%aTAe60Jv9b{@%stk9@eo|ry@Hr=yqMv!P;sV4}+*d zSC7)!f1JVR)iJb_A8((%v!CU8Q)8_!hVSC~&mw1Mt~kZeZplfDZr092!|~k79v&@J z1Z`;D$XQ1JlDUw|5dXNgB_k4tuQ=T~2HXS-oE$-ezUGjAL%K>UbGf|Z{CxRl_URgrZ7f(!Y4DMJz3LqkBWvVAjxbv226 z*@#iN7e!s4j;5IrJS7r%oEK#^SVj69zwf-*VYCT;yJ32NzKp^p&xv>Wv|ql`@_=}*bG*-;zGe5Ep<@kqCq2j{r)JsY z;2A7QOjCs?7BrL0_QQPEH^r7#AHpVX9p`jcJzVLBk0AdaPgemHb+q;A76g_Kk#3Og zP`W{yC6(@y?(PtfZjkQoUIgiqZkCV+Y5e~9-uq@4W{?@j_1t^ziC>I&MPkOu#(k&W zG-WYbocsE%jJ|8bfNAu}ln@wxs+H!h+R@#UmiB2e_@+>{w8Z-Vq|Ghh><%ssFWNRu zCCL^L-E&;5QK2t9`H5PQNiuh*>MHgT(II+ppU+-yKbvqa%rO(Y-eH1FbDS$8onY2I z%KM88!L#a$Fq#@WIRuYA;>$+6G;$qRz>6L@Z}*+zi#q*_;Wx)^6jIRhFjtr3b91i| z;R|{)UH01gU$#b&WoCWoCjDpY(_hHnz$mtyUgf{% z?Jd6dlx@e4nAkgG+T^bbce81O9Lu&BYjQnP(euVx?aOi%D@j%<>0f`!eHWEWpTL`+ zX24Vq(=32r_$i1n>1(sA>uWiww-3U0{H8`J6B0|~_8c&n6gOAHRz{j4xGq)kr3tR+ zXb#?LXMo-=Bt2u6qSI4eG{UHYG56=lkG?*Csmf#U!9GCg2FFaHudr>3S(@W)0tsMu5aoU(JQkNwZBln z{2(#-6Ml4CjI$T~y^WM+6Na~pQ-5CO+nY#h_o>(i#si0>=9bPq zKv)shD5S<%MUY*wNrAV5iupUhaF*BkK7&fS(UQZMEC&>h5RCvB6%2qv`1mA9 zip){mTl*S<9S`@8EXNJ?lZi2_r;~w7*85%42`(^)G=q71@EE$-U$6JYgNX4hOvc3Q zCq3rgfW*hftU2XRR68)=nv0_{Mh3xWP2%;NAi_+Sk=Y-p@dP{&8Y|{u!eS8WsE2V< z3qI%hXW2cS?7oqWhg$&GOZT!$UYejn`k)EK9ssICu8$Uw|8uebH^CaDZvQaaSG>A> zc4kgK*z2_(FjB1BVOVcV+5+Vfy6^r=&~aX1xCK>yL|(eK;SB?&oXwl7o%lK?#F|eZ z$m9K(3W;YRu49GL%Y18YIZz{V|Nc5E48w9>6-m$|HvuXhukd#y7uOzzlj8da{(=oc z&5-N@K(`L|vx*3Vc!|qZ(nPx5@ehBqQgt-Ash&FL2&LU3m9NN%vJvJC0~#}0u-mBI zmkzg7007*)HAL`_4Y1rOe7=d^u;;FgC2>lQe44k5t6WVtm8%-FxSwodNs40qLO}X^ z1w44{WWY8DG3`&wqRk&+0%L~yOHv547V$B|gH{u4PL!%XEFB(w zY;=Q2NU%g54)7~No1SL<%;V14&?NuRj-|Ft`XNGT_VUjb!4)$+NT zhK9lrf1VNSc!orPnz%Am#4hu_7Wmx<$#O^33=)3}0=|PsZaG2ry^;^zVZE&ZlyoAO z7t>iFi9>dB@PcB;OQ2^PTFO4|<$lTC_~>?x_{VZ7avDgNg zAKyKV(#9^HA?e>(guO8Ae*vaWLDa^#SqMn>*Xs+l&9Ey*`C^;<3D%&F#8V@)_~?}; z5_#01$!m+FYfp>jWnDzQfajz%=1(|%TnAS)Sk#36#MckIZ!>^I-7^M{!Jv@T98YH( zMxB5OD~tBrr=kzzfu7MfCho_paQ6KZjHUoK+-B?-)#IM?_(AZHIbiUGa6+t83_(i4 zIu31w4@r#O{(N#qcko4^2iN)H?NSHr#s%7(mOd6Z`t+Hj@ z@KwI(!4(1W2_h_pZCK&Gj5Maqeaa>Ej@)z}yblm7_`qh>ZE(bOW}?CmENq%L4(F+zkHc)?qd0 z@wv;>V28@nU zpEu^wm{wthSd6Cp{8+GJ<#Qt|{K}>(f|I2br(MmDtg**e4i6`~jQ^_R#v0%{Zds9- zcmL4QYy9y7m95u?VP1Y;w3DyqRO|WyRr(7{JM8#^p!>Ei$w${W&Wdj;v*9PwnOWFZ z!(c6HX_Mb0R_zvTe-ql!#Hx2Sj-N3E=Pw1UvxrjZ`$z>G_!MQN*bR3T&%CK&u0Wu* z52LQNB>}kRQ=nPnPXS(rCjo%{4FzekSC#lV%Cl0ZfpTG{WiQn5L{cM6rU_B9;w#^# zBHT>ecd~^DD`d2SJDZXT#AWfenInt`9yuBQ3Nmt#Ny`7Q0EMsPZR6)jRp~)aqrcvj zkg4+ur6@!03_{Wbw{qLy5=*|sPYf1LFntmfU@svfq=S0pT$}&Ygj~<^O~U+Vgls%) zqbU37zatH5#a0+nQU8Mjnn#GJH%ZtjU-XUdUO|cND&H*4%hJd&t9K&j77N_r`RZ91 zS!Jmmajo$#Vxpr@ZDKDO$C(hMCK)l~ev}>nLW8OQQk{6Bb8%{p*AQ=Kt{_Yk5+LEK zBrlJWjKG1&fK?faSpVw}$FC6>3te#)GBR9KK^aH35WjNC-?DUljyZJCRfn+*s|>W_ z0GW>`L${dp8=M$YHISS3f`l+pyw@Smx>%5#Z>p@c?ReaQ-E%zxHUk4?nYPQ7mD##L zaHGNLV^_&a2zLI61j{@rHTD@{n%~2$ommuEt{qIPf|$@nQatTy{zRjP7Bkw6I(E z|42~1S^4+!)L{boO^<%}(`zdL@O#^GdZ*nY5@q<*oU=I_MYs88J*@A^ZT&GD+vpJQ zZk^*PxGFz~-L0Dsj?4o-%MQabinxD?%l;eMHM?AK_wEFcA>gcg>b}Ck_pjQyRRmGY z9Y-U-=GYLi6g`iRde2CfLr27w)XSxBKV4>7)MdM8 zBdM#7%$@z4r2pKFPm3=J7O6|E+mQupOAz~iVk+@ zxu_;2*59MGd+L}aCI}w&1_vw(_Y`{p%K72*t*vVZkxf7A83kgQ6qJ4FLbFX&M!})j z%*H_ZL)U>KYnkt)1qztX{Aat?``oc`1Tekwrz|W^Z--hWR-m%6$g$s4GtY)X9zN=4YK6x!X4i)WNWdcg3We$L5;>1kZx2Tsre&1Rp9^aoG zlenE-%K4tZT+t%}Ha!~jfAj=98@^a2qNeeFJIHAaHHDR25O*vH8YA&0{bew?itLrD zW3#>W589EL^8)QK<{v%Lk}b?1L#z6pKmT1QdT&j>s=TFI@o;O3qHv!L3;O0dKc-`n z2J6(+`~5-`XYi5b$+s;EMCIwl2v?*@w@up8d*`1Al!c@_DB6Jc?VnlMVj3l!AuL*K zU)b}kGukvd_XPQc7KEBdo0cjPp$FrtJT;*#y6u*yLGdgq;FaHz+%x`U(#S_Ir%F=e z9Y7+sx7ITOMH$m%a}GeCk9=fU8AN^(fRq&Rka zVCiQ_T`QWOGaj^x|m* z(W+t;UxdSSLQWsFZCn7UfUVyyB;TL{skVY*dBIZkL?~}ug7ewhreEnPOSW#vhMDHB zA25}2H~)j6FQG8(3S{)53J7X2;=!P>9>U7lWTjCnd|Q`~O=*z}Y@t8D zKDl3x@xHk2z{C6lBJNPV>Fxge(7g=+0xb#VUUtLjfDA{_jhEX09)q_fY+#~}?C@if z4SVM8*+Kc1+mPx4Yn?Noo*S9ku8I8GopP|W<6%I70KkqkmsXfJU{Qh?ECswhvVj(2 z(XBu8iSM_48E^cZpa9aWjwm@riHUL~Oi_43UvtHbwdvwtWAaOc zlzUS^kFUJui^Md^aBZTv;=}Yos(Y)&q_`Zz<3R*SAXm5BuLp@kuK7uq!JyDk;Wyjf zH&V?(%Wilzt!jivf--eDuvEA5DX#PWK+TP7U4UPjXo;Kl%w93j#N1Q&@&fz=cYK>X zykc*h?6s+nLZ4yD?4IgXn>ZF6o(};E`q4UC-S2V>oClu=xXo~sq&x(l216*7tGHpW zj_c`Mh2)8={(i-O#&DKGNV%bLoWB5-9N<8S5ZH78lVHRL4WgXf_#j(0HcL}|UXM*S zTUtki9ddTX=0Al-SxBg$ZNAMPO)}_a`NQRk{X-H-xCX=wmNS7$)sCtmbwQ*XiQazu z^!Y&M-f8a#v`M2R@h2cH)KgVzGOVlE4D%W}Sj+QAo$jM7%^Nd0&s<&SG4}sl?I`a5 z0z|j4IPV>*f9mT1JaiMFH+%dixaFk(+aLGnUGfH1qxVkWzIw#dzm@)C^!$jy_|Tl^ za1$`lrHeE}|0~`OUPsWYl*EzfY#c4pxUfJY^^y$U3Zv}&#s#BrBnS?s7JT`6`O*zg z7BU=J;0gq*Nu){t4SS1)d+QAlR&v2X;7b=VqzC$Z5^0H2a>w0S9F6(ZCh=u0MGNq9<@&HE%M)(38_34F<=j+CgEh5T@0WCDm?fe z!}#GY?oeHLZXv{qLT{kEud{ zCLZ^^ANOLlwgFsRA7_R3)ggdoTjTTa#e0u4rxz-6(>m-D*JS(Y=42H>7mJ74GG>VTr$ZR4j-v$OMeYI4zd{~K&Jq{ zI0R{O0l)3-$8MF(nQYRM% zaU^@*$`_z?Qi|Ko9$Dva7#vE_=K-5veekBbok?(=cPLlb|2AQ$kUnP^G|O)18>$g& z3R|^p^l47KQf(mMnEV8|&fT*^A!$7Lf+FJzjqK~SuuOv36bpf3b@|=wg+0=3-sg!J z?6+{^R*t~H>NjV>7R)q}sx7*QB|9*s0z=J?Wt4&D=r|V*w#Z9ZAJsMNp}fVEYzIY# zSE=b^A^}?3mf!)X`)dyrUK_t*SQ~$}s}M$sx8)7s1&r$x=PlB=hi2q-(>xb1pw;%| z=q>ZEHJw~L?3QGELbgEUjj>Xhni!e%&1)YLm1{}x#5%5ep}`8@zx7N(eP=`(D-t1ETOL(fDgSmHvLTF1YDc| z+}4XVFyN+ITT}D;UQo6mR`{g}-8z;qmM*gP{Oe=_qII1)eAd`1l(rPCL9LeE_-n>fbD08bUKk8@|wRJou>9Xh& zox0@nD|Ev50ZjmQNVE7hC9`6koiog)F*RZ=@ZZP;=a>nZc9MvW0zIC$j&K+;LD7&D zJ;cVp#Fx5*7bJUKYsy!Ko*tNO=wnj;-SE#@+$;ZX_?pfWz@ysUGuKYWc%$58+WUnJ z*gj`4O8#Eo?7#63kwQn0VO?ucgDCX(*^Ks?KmhfxAo$7WD3&m8!e5`*BiU{aAvH@^*c-1gWJ0(Uywn?qDr^yzO zK8n@oqJM$pz5eVJ|Gr0d+Pq%h6>rArx3k|kznH-<_J@{d0S0 z#Qtnk>g=5zc=ij~!lom*a5R*ZKsDb0ZAM#@%q}%d{G9XSJu3^#tE|6B{FJl@NkmA? z$)>}4GCzXO|K@bM#U&O9P59)L9adGHWJeWFMHfzyp$3S-A>bGV*e|~hBqJfUsUE0l z!ZHVH7Ud45@eu)jC2!673sHVl_xfY%amp_L7~|t#2wtChYGcTpIdLcuWU%)GCrw?5 z#(avuvuWsSK;t$mJ=%-gfFD*3C%n5G>%ygd?hY%f%Z|Ldp*{wF|4I9m% zA&v^Dm3)aaKzo+>jE$%i`IIi>6(_<`IIK)bJ(k9X2BK%2%;K3$cB(az#W9=eRj&%~ zMa4BAQjAs-BpfMqnA4`G6mz<>3fZqFU3nGXT)EBao?lgq;yG{EfKsEz?C$`sl+mVl zs>NZ~vna4kr&GFsyr+ip>hc1j&0%f6v^QdFo&FcP)V>AYN{!ZTy3370L6mNjmju5N z^{K$r3%?(bP(NlQh;Cl4pSnv0R>{>;h{p`yzyz*5k7Oxl1I)hM)?P#0>yF$GvGR?< zs7wCM2*!NO{OqGLFtdfh8BgCeDB#-%giXWpAJEIx%*=se#SDkDjozMx7jcKLU%w7R zFHJ@10KZAV$mpB?7owN#HwQ;xZSA|$u14P{&*<1#6AKFz`4r~f`|BgXwc_}R{6)T} z>c|9e?b_ephheAk6a|1Wz}XQH6r5ULkE4=~?Wtp~&;^#%DJ=cKad**&2%dHXd5gqF zv9_W3`1q*Z(j~}H2U3Rk;Y3JKCN!YGg}$M;l$)yrPktPu%t3gQME!bdHEtu;V|PgI z2YICAuS)y!qGZSG=4{IEp-!@Df3@{i$6Ik4hvwd(clWX}$ToC1U#n zEeC!)ixoW|8mOqLsfYSDKczL__K!0%6~s~KyC}qQuVvo(CSUV|H7$-o2y7f;<@&9& zduMGf{>1SlPnxdKWy^*3SsL1 z%H6PLD$GM8wG(1goN%dQlwruy?+3N`Z6aU--zM_?nxXY60#pBJ4$XVCk+s;P_tU0Z zA3D6#cTj+nlKTo-g0J<{Lb$~QGBr%~H@VBe^$)GDYYen{zF6jv(oj)Rxu3K`&%*p} z!&?46KS25ZUSC~pU_EbOodNVwz}vg+iN5$J18S%cZQ8Xah%a{FA|jYDFE}cHBD!AS zKuk@kwp2v{->wzf8jHEHg7zuN*Sd##4H0y=P zRRyP*Ci4*_xEBy9%_eVPMyf_xJPz`CKPioeC$|yD@5eO{gNSsU5o3~{$Fnjm^ko-d zD>n-a${8X9)fsnP(=2#)NnvGChROc2j9wr(9#bfkx>f*x#6W(PPEQIe=?vr)j*ADn zRnGnHu@GK;r={_pOum)1eoOr!aC)lr#k-n8~TB0N{$_0?SN*Tlsm=S}<8o ze8Dw3F7A`3Cvi|v(7#y(n_(>ApITBD3H+0v{$OEZ=Bv=>R##&IB()*H85uy`?6yA5 z!R6RfigL=ooB*`HFW)H{0+x8^_0z!geLmL+Nn<`eho)lE`FZER2xyJS2*r%o+x>Bm zw<3e3VB{DdOVVdgQ|ZbGLz;Q>3MDFkc&{-ACW;CshNL6c0xtL(uQ z8+@@hZd1zu1zB7*sVvwlbk>Yi?CLFCo6FC1@su1Jb%Lnw@Wa_}#ZdzU2H?1jXZk7VYjT;}Rq&=DHG@bwK&)PtW^fD!a3d(~IZyi4qBaK+GD$F8H`fxxJ& z7u!q2w zGyupIfT<%Oiv_qC1HOA77F>ah0aSKCEI??8z(MmOQwao84I~nesRl5MNiB|ee)a{D z*5b4lWrEBS2E*f58Q?Sp_v#(Me7yDvKkgA0K*`MUuQR2o$wyb2TN3GK?DKpez3__d zCCZ2eU-3eZ)}1{IMl5uHMjeVF{ludV*-er}CA;^ws-F#qiEnm7q-ZE7;7_|F8>U~J zVU`}S%Bxkw5iQ#hM(u1Fj!(>(Yih{5Q8jHH4it4d+lWmPdOJdf{llYhv9b(xiTYab zk=xpL+AKrV*x;l~JVO~K7;grrW7l=k^-Wkvxh7<4LBrsR711xhCLC^lGEdID`_N)N zAuJMfC;MJ{<&tG&7zC4^pW8o~z~ge|Le%136ckYrak-5cy{ivS<#Mz`^Dp+YCP%(I{OoZiwYVXJ@-FwNNV!$yHg!cRvKd;fc{HNiRPc{aiQiMll zI5Vd8I>rkP-dR#C!m#c~U<1CTNS?-Bie9Z>+YC^YeK+6o-L77A2gxwfx2365rzrc~ zVTreuct@^nb{TIqi#y!8$L+;06AhT|PnpH}t0)-x%|j33fvl^S_7%%%{OWJ9L+|(D z?&>k4gXyAwwp4(D)`sBv9VRK{rP!ESSU`p$Bqr_y+TSwI@eH7PdGSx5k|gkOBqt*q z+~22%*#HRI+U;K|Zx#W{c8KjVAvw8}mKH&i-74A)SLZ`kjsk5EpjBxCbX5RY0jTZ) zL-n)Bf6vP_`2hZnay9Vc$l!BUop$$Bq(X9XOOjAf1{?z-NLRGh5j_QR!EI>!O0c@7 zu({Uw#yLci&x_5*IrfSgcmzdLCKImu)%k2AuYx>>@~B+z#e}N#`<=Y_S_9H>x9mX@RZ|em zI}J(ZcQZKdyVD@jg%Ha{!cmZeolu-}8guA(h0nQtF6u3*9^=>%a!P)4DlzcnZu^!y zcbU3-aP;kID{?I}M0h-j6p}Ms)L(z_+xb)SdBN7RMyh)gA&JLoUba$c;-V|g#4CLV zwvg#3x7t_@A~Xv$_iUAhuKH|gB9|g|aHxOIPG>-xo_O;6`tBH9o`MXtP{S6?iYfIvfs6C^uW74fhg_$2r2)k>2 zt=2NaUy~z8<``OF_2BAUK1d0!yde(Be11_hg}m`wdC1}iq@VzoLfuO!AY1n$g$9_o zVLZCA!tE$1DQ#UZ7_vQ(_chsKU|<*-8Rc#r0Zxfgz}cA>@cvhppdS3IT5)7ys*X}n z;C^%hh>5vdahOm}hnp<_IxAF%AB+@Lh}~RYrC$z7r!%Zw(;bVsdp_mxYMid2%2r&W zQKfdx!(haiOC}XIsqzW%Nh3|_-GxpxAW}3+80g)T)?FzDE7%FaS}Tt4Jw$LurwK?+74YQ`n&OR!U7BO9i-IRPwXi} zlgn8HG$}D1rW?PtVL#3Aj4P+}2_pWI!ze3j>|oKa1P+7R4_K^Jyqej21-XfcRRcCownZ~;Lo#UPUnT(K9HR{8fxIUi* z&Kwedx1%HVuCOjmY9&7FZ231i%m@%VYl$7TvfQ1g>ShRX)sZKhN;-*4rMgozhAn{c z9lyC@-&FDwecZ$np2~T->(r{^-PZqUKyYO7fcJ&%T!(-k{p36^?N2v}S3u)vho2Lt zM{0FW@ZG&EU)mnp^CMiF9IAeIJyBz4Wl^Ig)os>v3AYuKq=C!tmBnZt1$us{y)ZMS z_;^GkAI~ircBx#p2-DBcn98}TjpY_BPL_7SJH&<$(sMd_{q9`0w$hC}DQGX$GJOsD zRi-*Yg53vG-whz%_Mz>&kJ=dR@rLM{&5&*`$dyBp34qO*h9h}P75XZ-ZIBG}9xR1-g9x?gp!97LmQjR=2ZjNB4tY6|)l z6+33=@G(ZvL>SXOMy$4|FVC!Rp_VJ<4m>{W=woFiSHkV_dPUN)YXu{RUy>GW+X9` z+fzC4EKc!qBqh~>D=JpC%Y~_1KN%`iX?lCfQ#m1N5Qlx`tyk%_=8fqN9)3MoFHrd- z-{x4CrQ?=!csDxOMSYf9z*|uh%NtYmBn+Y5SP*XdUM1K=1=HYB)W#mfa+t8St-D^zOWWN-T^0nfZhXbh+JUoxVSe=W>k~-0Y-pbL<7``N?{RZh#2a)jg9JNgDa#sdNtPdMervD8t}bjf`vQb>UwrWz zVi5^|#i8I8!-E4{J{+0LiL6YPF=^P`QZ%&)Lf|W<828sN-XkQwpqSvuDIp|3s)VzpW&)@SNZHdy5fnDyi0oKZj40$%R`LCNQ$ef za^O~{rh%80m1Xcwk0UK}W>2;7Q|_a*b}K@cZ^1<2C4>y<{IsK}C{l=oGCT8tGBK-yvp^(}w}gQbqW!yL%%1W)}nG zlS1E`HPM~}H(33j-Q$B`+-@_{({Vgm)tzq3kyulA&vSXUj1BACs=QF|tw^6y7F?(B z>T6t+1I9lSj><9Imgh*muHbRJv99KvGAMY3x7eno7T6&zvzMPpVk8ur4R8#;6~*(~ zVknOD!D1@mJARpdU(9#pt+{a1F!_=oSv4P96Xsh~g$qJqg{8yh7`caG;|Q1&a|^QF zC!rEkl5cG+e2`#T!Q*=McVy!*??~4zPNc~6M(a8#Rdh!a^n@e6?CVxHNKyBK%R_qR z)Rbf(=pn7;T1-&n-S@iK%TBE3KvSlED}AFqb&4u>T)P{autJm2<_&Weyr2qtAGwnY zk(}Ax65oD>qZKLF`3b{ml9^X@|K4Jb`~6MV$;pXKRvry-o9b!+epV}(^=cydzu_qJ z$4UM187Jhucnbn)s}Z&@vH;GcWENrWAP+yxg@jjY2%lkxb^2b!fJCLup2jovMgEAH z=(D?uf{evn^gys-<}bPPw{ghTE_;=xtsBZN-ysxvR(UEVrKU}ysC9i1s ziZ-f6@MUukMHCiCcvJrnSyD@Uxs4L4vJC;c9jgzjFo=4Z$nW}z@e?0)_dyj-BuLXAM;dFXHK{hWZVZ$!41=l#&D>eAW3nN zoVd@Vk7=2LnW{p!*88npD||9Aa((ZnfTsiK4h_WdRrtx12)52GinmEx%ek4Fe5Ku% zW(%%;UoIYTDgratn%T~2pZ`kBp5Aw7Ej9rxAyIMX0XA=RK_qH58&~qrUG9^oVP$0o zzJ+-DlvV+{xAUI*mzO^$5)^3VBTEk&pN}Mi`QP6(vk$4U zlCR*!UpQQ~=Ua}AktA*y4%|@#<{m?s^S<{Qt*s06%t{B1;JnZ+pvlA={B4S0p#! z+b~Sq+@Z<*XgPI6AayRcp~*iv2XD_msz;+GXb_2v>Q28&m@Eiq`$ff+KcYiI1`hTt z@gucDp>=fP&^1azdc^u%rRrNcx6XozV*crUB*ZcO?hWOn){U?|czy$iO%j?eNn*j( zZ5b5O!P`gHgsZFuRh7||f>z0H?CYP1%T2Y8L^WM>u!@yhOB9HH*R?2cG(e@9+bKmt zthV1QV>y18P;YdeU*=y`rcEsW69rbQt!1R)UHZFs?3z7iNfDbBfv6ut$_C*O{qqH% z?(*PxoEWKEK49a?UtIf@udJ2CGc!&Z@;}BZJ_jn`aNp&0XRs((BRJKJLN6~PI|H}G zmF~n!#aPRPUK3O_rCX80-u;ch+@(4ivpj##D^|v}B||TF?2~Z-r}D~sJCw() zFT0%!;;&=O>}FkI8hg7+zAUb7O&GdB>+R&^q%`OT;IKK;m?NaiVi~!>8k79>^D!C<~_gb1^G|!5SdhWndqUDBd+X*qiR2IFZocPTIj3D_5#bwWWLXE zSNn`q9+w`$6G(;b?n!Rb^p?p;h5&=gAF`?%8ZNG`9@c^

~M<8p;`2#+=>Aj3|v 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 q`pm01?GZ^LAy)m8W7Y#=SNwE3~d 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%0A)h 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

jC76<_eykE7s*vuPM%B$&znZ*#(7- z3`Kp7$DqybM4A{ZapWYrdLG1Pp0s|>KQQ2#BTY_^|7p1L|JNtEz|ld`lqK0q16^cr z+g0#V+x7*@Q$z2Cn|OKR8`;Gwdt1bjzf1N-QA6pbO=YfOQbsl=?>|VmXPl5 zlt#Kco{hiv|DG@M;S2|ZvG%^#nrqH$BJ&2J>xM|_PM>`c-mpgY?h&7k4M_|zU?)af zjiZa2PUOAijB)GZ9GCXkQ41C-smvz_ zW+bx{!*&&$+NS(d`ciQ>K4?+4-_ zHqWg#w)%50N|8!q<)rIVR-K_iBbm3(sui}xyOI6b%+vQP-mFRjt2ltU2`a1;4^-VUVL zQhJW9NwNe~U-0?%TN_0`(lJPYv0hgjOV&Ch>^HfBkz?aW_XNfym%$?G!Q!{&8fpW( zP75&-WqeVsf}>L_+)VB<8H>h1x43<(be%FwI#o8K`oLan$vyz_*O2d0Z|l8o&3ycT z-5Ztd9VK296lGA*p-9}nkStgDp;&Xo$=@qJIAS<)+%HHxcfwGa!@A0bPz~GZxvfmV z4?am9(}I%2%gO~kt^x||LEN)FCY3rr zJk@FBXfb@h>ed})e#|sbkSkT&gjzV|$uy$<&tmnwwcQ^6pEz<951P|Ks5u;1>$zrf zWI8M+KOmROSW&FoVyniZZ4{%zNG>Uj03w+iOP0amMv&Wb?)T6wutN0I720K|QY7>i zymP%=N*t+*w@qjt1ZIv>F0ho2YGrn$lb1*m`4-k>ql#>;)w?@RHS}#wln!+7U$fgd z!=txbPG9$Cjb^>;nw@V5qAfvswHD9R0_-Tg4p9A~=tSbEh)&3xk!WH8NY?;o8&x91T_|eb3DnG*&8TUO^I!%^)G0n2OACp1PRli*1-peaG9gR z(!<#@uj@BxhAlKFB+ehKraw)Pl}i|n?}pk>X=^DtT?D`Gxjo4F6%9;;XZF7$ecT>l z>uu)fF3wWM=YBaF(1?V;MLl15J(AgFWo2_TK@n|LSJYA6%)_Kl=E-&D(M*3m2=%nH4!Cd-TvkN^ zmw{VEl5Mbf#W9;Z!T-Df@(e|BVSnjj!@nb+hMzadf$4%P2VoGd!YO{$Fx6PaIQv+} z2e)4O{LG-WBHUK|`mOTIDHf;eK^jy=#j1k2To?WKbD4fr-ZNx|HSLi>QCZ=WnWv}_$kd*umWikP6Ite94q=*AIF(2F?OWa8f78O>t zQn##Jjr{%;K|f5bcm%>o7%-8cM#(IpZqXMIA{gKWW)bY&g(s$G?TI50FPrR+ah;%M zNkMnsko;uFp=#rt7p8zI%}wB#Ik_~dyCA=CCZ}?OreoE?7ZMm*XohydTVtLqG*>xa z76wmJThdr_9pD$a?)MAFnu(bDWe1%;E;K~jF9XH^F}@M{h``gw_#B()Y91t)SOr}P zwBCb_z=sKwlWNjdKb+?Zt2TWq!5@yFj}+P*paA;aM1!m3+o#8Gx~h&B7vAcC!p7^JS3(dDay)zwgWYr_X0%WCM zss#jKjpUtnrzx&b0}iWC174j6^`L9m=#O}^=LPyvPdj8R!6Ym@G}^k458k++pmk9Bn?>9{cxIu!|hnI4uq z0~Eo^!n`pBf^GX+u{L*~peDV)TMjB)$VL&L{7_iGOno$mq_Sai@!1Ppc$S_t-=;|Y z(5hIkUGy`-l22HkGFkLMOyF-?OxoxqxSyVz;oD(-KR<+*(VmYQcB=MrpQ9m{mef4A z4_QGxlRVAf`8jcO>*dHelS8ArR1%0~CM3=b&h>PVm*sC<3@mRR9a2Odlu1+(0Co1* zq_2&l9QJ6BEgkUib&AIfpph$BR$6Iov}PI87>-WxxuG0Xgp*PuWraWqB;kXpwAV{w8Y&K3;*@vxK^WZN$7Su?Vq<^fjiV>tFoZ#`W%yJ&XQ zGz$po`ReEapXIhzq-HNlF5AnQk`}(_3EiA>YlCR!_gHuXMe=1)8`XKEYqD*Vd=>36 zdSU}y=1ip+8E?@{w8#{+-=HRvsnPZkJ;R^^77sHFqtzYl8G#4MP%rd@^7NB2hXl;XC-&+qOXY+Pw6 z0KH!CFS`j;9Vsrg`&2lRJ`Gy zd3VJQfm_KEPpE=9tShuE-SMZH)P21}#fk5Hh9&ti96bjg318LbJH6(m`GEvVsszZa zq@VxF9$pRs*r2j0+6g@C!i!o+nCI`^bG7lt>%{k_dohltmhr&y z{N;Yk!ao1oW;ynqH_ik`2ni%e&u^gFEk8~w0VV;2aYr(bA``#}W1CG(CWpW!`ia}& zbiJsZOXYn!mER2kW;fM7;A-I8qlXa?Phc}+A6c+jnKaXsmqNPKi6e^aks{Gr%OW2@ zgBo%rl1i3kj9pvzSufVEQZ3Wb)ib2Y9EwveoZ$A&hLwSKagN|aHyF2aD^$$Ygzl6@ zaXff({?SEajdNxIuc!5c`-3?rqWlhj;|YuNOYb;4zi|7`{jb{Ek?2DmPX|=t`xY#S zm=jSXt}d?mJTtzjLkT{%|SSeKyfJf@UWH#Xw+3N9`6xh^vX z@*hSUdm^vz0dUE8Bd_qc=*XWpF2cRfi|EZ^)$2pmzt(pkO6^L%92*uE##j0VM_Bq) zb-sG)2h>P=zYB0*^95*Ps7S>ov8S-;A$F^n+0T#mi%yq4uCSGI^}v9?hBm+~J8i!O^@e-$FVw^_ zui2i=50?3sNiS%EvPQ(LEyvS*y(u%f+Wv?2zn>Yg4W;Kmr4^X7Ua8x*AvHbt?9R@i z?V04jy^QT5afMryX})}+5iOREY)>P)L&e4;P=A&lj#VsX?0e@8ivW zshcg?J6CYUZro=m_o(qYt6}{SKyBaq;?$&|oPbW0LG(2Sd6hqH^qOVu+55M8kmQuj z7RySpnr>m*V8Y#u0w~eO#Vqo0fFvW#b_oB>1#bT?3G95bbW$}_;t_SuxRaYJY->;G}O`|tOv2*!ZH;m z`BA(=6&|K0YPPPXxqP6YFQKOvH*4C{D66%$^X`5!RC4AyaN2EfeHiG-q($@6X^?TD zU(#99O3$gml{r8LSW!iiL1Pvh;sezzPP)C!2_PZtouzRAU#XP8u%N7RXn>1}vIOGCHe|?H@p39-+`~|k_a{xQoi~2a^z?Lj zWu@?i7iIjPUOeONRrhru({Zxi4+OB@h&*qZUgyhQr9kpOK!O6+|B~0gJC)OFVDIv6 zl>-nVg5lb`{ruRs_V^Y#)$G@&Jy>r3X+coc405X691Nl}uI|4-Z_r@~wH5twU za!(Yi-+5%gw9T659tn$K3ry$d=ef`4PnY9n%RFz5$@5jld)M>Edov{(J*G9_jv;dn z;M+iqWYI49jR|Jr=}7>jK!Ai;*U=FZncv;U3-J-~?1f2;tOED*K<|CHWFYUl4;I8U z*F8`_`_(25Vs+kKqEY0g0Q*t&cn%O?(YXOz`<) zzS=MQs?8wi7!K90tXAdA;}c;1Q3eiuRNLjl{}%%k2_bD8U`KYj|`>78*(g_Q(ojT2v9y7 z7(aalmnFEh%%x&r0@Bf2C}Xk))mXViU0!e_gm?u^y%f8_g7+Wnc}cWSaZ{Su_#wI& z&L>_a1w|96)wc#ug1r2SL`^|oZ0Vq}${Gox)e}d|TNwRF%!APBilAt|rNhc6K{fZW z>2WHIM2Wb9O3jEvzcFKs>$@Q-DFGYuvrFey=jdHJ}HFc>TpJF{-od8v^R@pt;0-$?x{oRj%F0ddX+=eMBvl zn>;J_9$*q;C{^n4Z__kC$~Tig*L_e|Go|X$kVq-IcDS-atE3l4aOsxhRZNhenqjn% zzvPWSK-M*aG~CF&&GD;vDPT^&Rapjacaxdm9|F7W_pk7o$)wDu%F14 z!T09H$Cd2n*5E#s>P2M05|n}(9u6a|e%ij%#|n0Q>ZM2MR7@4RAC0)_{OkSnM0Yul z%Z>#n-L+5DZ@P}w=N=-5CuNGxL5g8yK0FBF#Yj+4ym3{_c&~ z14Jx^ii(Q<{oL4oU12ZeEcLeU6U>sN{5_aRo0^$vVQY&N0Kfu*k?~qssy7Z>b2}`d zss4@1hi_le*@GDaxs?t9BHng)bspV*%Nh<1X@hvLvL2b$gdNXgQ6_2x+e;G}Y+UZ6 zF&zY#lCw(wPYY&p&pfFEkIcRZv5k=6<)ufh@>-A?9PW*Hx_nKztGYz&-?o(R{_-$G zY5U{x_6CC+@reBpP#6%9%F}%s=9&`63b(O-qS_WCKM^5UI=B=pIh1T&E|Wf54&}6b z@IC@4hTpx(Mp0#bY(WppsI^NNd%*i$Q@eBq`CXAw3jTt)z2Gg3LKUPGH;xZ8`MN>w z3=_x906X@$Nt&gKvZE5Os#di2a^6h2TIKveA&P18%fh&4d&e%seqL$jc{U{@T`6Fc zQ}(-o(r{)RS=0YxS)-^v&6gULFRLztvU}AZnB>E=Ql4kvze zWN_&l>r^P4uSZL&!1is_BsCo|4X&W(CT*WhFtxa8Wi@qt+D-rl(p;KGt{4-cQL%NF z5`&j6*|ukkrs3G(`T?b1r9&2MZa#d<_#I%zxLqSYUj2B?j{eG@m)9>47;(mICE^Z8 zk&{-X)?#FNlnSKrtNO4KnAopZU@EtOm){R2of4b_ML~hN#M5==YoE*{fil6@R=meY zPtZX&e4sv{Fl){AfOCXsr2X2c=Da4=>G%XtwhGyfO;q(*p}tw%=LRLJb~Y!vC0Kao z#L85~gGy-o&Dt2Z9$sKF-S~g}jL)PD;=_LSW9&+~jHVP__>~E_ zNaF%kIsoY^FG%_}hl&9{3^28h;`!@JOAQ^_J5OIuPA>qY7R1>`C>a0<0LJ0dRj~*x ze_-6av47?p_Vw4r5aZM7>kI4Wwrku3Q2g+Y#~bNpJ5lA0X$3%ZwsuF;eV)$yGerEe z-e%?Gq?+I9tzWDGOTU%Kqn_W>7TM*R_bJ6NU~S6U(a3(l76Cvv^xua8*p)gRHUz+* z!vv^Ruc08hUymoPKF6PosgmRYp2y6tw7&$AtZ_k3+T}~ zfJ!q#>QvqL4%<)|{dX(^h-+Mw+&Xl!U4@*y)7daEEw+4cAZ=y-NDou( z;T(MBfl2jJog>4kXa}J*gE8J3em91WeVE|ROS^Z>{K_J=Q2>}2|*TpXYV2{sid3L zIytg`eGq{#81KFoB<`1**5nw385jDLN5sE&&TcwRyfrgI$?3j(=P(NCu)u-7Hi-}Y zJAbceOV}$r5rp{V;{<9r1W1ntCs7U#QU`31Z`7nBC?H2EBuSZiz^93HK2y_y#>1fM zN}@F%P7CB!J>xf5xWF5z(NmOu=&E%%n77WY{SZKN)ND&|wD3VS9)v_}vXd%@} zB~T$I=M+pK)i#BGO)+|VXqg8B+yZ85R zxDY73yuk2cXR-ppYMqA~A`i{);A*N)zeOK|U;al z^GTUbRb}&BBzWb$%fU`A+w)g6;XeSa?$7pMqR)wQ_EyKsVMohp5@IyES_68F0VG}OQ`|DA83uvg?G8g+c}wJxgRy=UCs4QQXh>s zb1Lkql=-Tbgy7wM&StQ5?P9|T)Yeo%-;mfT5q+M0!%3aM1GE3#yDvqcrZ zcmXnlQva=+AG50vTGiiNI*uX$A;!_pL?K;Ew}@>e9g5%4IB+x~IFD?hI12K^#*IKY zpQz`_xI&vV3=*1`NG@a!p8pz%4rQ1q*GH}Wy|~$XkH;z|n}Z4Jl7v3fijU$0Z@0oeJ{JK?C)CD>Klu`u_LArB2TVq z8BeNDBD|ejslaOXP-&NUOItbxCKqkC&y?#+dREqMMdR9%`qQtbrm!u(f7tOi^@5R+v8i%+ zU;shneozHny!z+Qp7qz~b!avo9%=qe0JByLFyI#JteSo9IU@2L0B#g69$sU8Hh`5a zETpb9Y8!gn`GMp%yMmENMn{FVYnvPu38ZcPuO?-FJsgw`)Q$ij4QA=6xApEJ%8?36 zRfHn>Z9D+%R7vt|dW>CBUkSf8k@|+0|oVWj7$A zHnRxR!`-B}e5RJmTXB#hge=NE9-wB<*|OYgQo;r_K21f#-g%sF8e7(h-96dw`%0Fb z4Gihd4&B!_?ov6UVxuu4PqTH+I^wrOhi$X)s@IlS&&ZziH7o+>+K)e+Vti5_kH}g5 z@#p0M4_h;HD)kaXLlbUQM;9@5d01ag*RzROZk1(q)$?BaJ6_GF;X5%bdIYZ`-YdcH zw)K+rAEc*Uq(f!cm5?R;y*BK}!@$9zAv>ngt;m@k+~df6ZU2C_z=*5(KqD}} zT`;Oa)}HG!5`X{Jj{<)?c)jFX=6V`C+IiR3O=`d@5t$^Rb}V)SG^#zctDJHlF4JRA z%O}jZioRPeSw|t5+wvssxa(zY@_Xh76uuf~8sN$C0etPdMC*5ORUI$QUY_r2c}AE4C6_TPW^zsCzge?!K+J(8y^YzD8MatUvO%3WE<1EU{6NUN@` z#q52O22M*T2=QmE|DGgMk_`#V4$O!oAZNlB1-|-Rg)Z)*BhymZ`iWx3gpx_}uD!!v zr&U#y5H}Sh$IsQTo@{~Ay)b#cuOlv20sQ$Wz451iF~i`eD*vpCgGv@ro?`gn3*<>+ z(V-;R9WGF>ose&XLQ`jMLBcxZs)o??ag8L$j|j10ujJ^Em0KIFkYE1h|7gR*MInrR zyfzz0G2Jzs@%%8Ci$YnWR{RQbTmFD%q-Jdatk9=L@_9bbc?j01h1io z^+Ix11OAr2eTs|!UcjeXU<%EJ1j0A@5V<^AC&f-V9UQ zto63#96~hVLY9{?M3kGxn#U(PD#zkFO!fcZX92L!rglCVTm7-_k|v>1(TU^@TbuBZ z>2fx_k&q`kc7JLvNFZB4Y)eW@^TI_=x41i4RtwM_I z9g?j(8WpP)MfY?gzSjCa)EXf;+Z} z#OxKklB8XzL`qH=K$EWS@mc z>kkZ_;6lho^qk`rJ1nzYtA8!sqJZfM^`gDQ75`YI_%kJB`9QFE^=XHz-#9}&_OH+~ zs;Fb7WZBZ@=J%}QSkwu$NA$^Fcb}))*yEoFK4ePlYO`xhrI)_h0A8V_)j+pypBE%2 zo>0(UnR}B~J%=aF!x%AD5!+n3Y)DKrxshX<^ObzRLqA4f;9T8N}{+GBGm?o%_}@Iq!{;yljxYeA(DA(bOu`E_)+z0#}9rI2<_aoMs4m zVk%7oD#gh7IF%e`WMt&iw8%3S6&2N8`*>Fu(5?qf0kaNBaxEvmryZ}t^Oc6sIRF{$ zO-Bd#+i9bgx0etK3JL(O2pBdpA`cjEoKK@FX8^M%6Xb6)`ue@&$pZV52spT~ixRh& zetMG-Bzq`m5dyQ`Cj}!=v|!Y4+>%|J27%=8Lu!CN4^>TE>7ftFv(CA@ew0D`()gk0 zD50=#bp&_-UA5y}uGdu$O*R{xkYcTB$VRV}?osg)BdltH!>wwwYNr-4AC}2Bp;&JP z{#;v?<3-rMJ*|BJqmm!6BKZ`GaCTmuE({));;vVA*~Gwx5dMp&P#YA#uNb7ATn2Gh zIX-oa2e?cPu z5~|L*J28YI@w`;Ly^CQt7q-u80rR`*WTp^}_sZGAqnUqg{GQ8<**Q46?s|HXH3v4HK9v4 zr#3cmD;aXm_DfRaiCm!c^YQ~H>+@D_@e73A!5(!=6X{GQs<37q@+s1`vJ{UxVM+Ew z)a$SW)KXIQ3nY%yiZ~Nfzzk29rO0LWOr!~{V-Xf;*;9aONrVheiNINqkmqW`+=i&bpQUn9|lwbWOVxn6q ze$fB~X(Ygtb6U&f{s?T(-q?TS2rc8^H`oCM0np*0T+HGj!E3)3pM7d{0SSV9m;+$c zUha;bG`GK8Zqy?IL02Q&@BM4Sk%hP+hl+XlfA?Hcd%#A z334Pf838!-YqQV}bo)p;rldD1F~@)dv$XWa+|{+oNnc9~xLiQuh7VW8Mgl}MH2Yiz zY+J&&2)RBI_iT{NjU5Tqv1&$)THEK%+daw|C3a2d#@vaf*`iG6u;?@r$W@Jhs`i!~ zPs~wuV?$`Bu1Kp1RT)QGiBzIlECu_Dqd{uhFImUR9%o~}n}A#EbV>V`svc){2;c-7 zQAf?8@z;0N&!Sl#_(o4JyCxL_)8`QMj|DD*!xjy0*-4v7Sbd-pkBdQNFQSLUJUWm% zz1=hrUvluLA6FHpNQyePg=z)j*^)I$G0-`blQ*O*@XDFOquVpswCyiahyyCtl@wB*|Vk|5V!f5JoHlB3xY`1#o&*Uvv>sfT@&Rwa>?^n|$B z=+%v4!X@+Q3_n~m`NLmOQj+(NBz@i5$kHpYch+8YnsJ^1eY|3UZ1I%tE-us@wDsom z`u3mfewF^Q{^rBj1=|wkTy=QSSyv|sMDt0ew`)V!V0T< zGu^?h2_XM$h(DZcmb{CJ&P{QSTd@1R;AXUZ;OY6iKJU-N<>oQ9N7gu+no7|AxC-P2 z*4n=K8~wWrwUzAZcsmh#Ox&y(jtHS$+OU{7!KWXivGv}Q(k25PTAHZ$N=~5Y@p_B6J3RgV0&f>41 zJAf2X^@j;)1$Mn+hvjU$yfem-wQi3&qdr=degsSDlC7Du6mHSr|KW$sI?T03iYU4o zX{*j&{L6|$n_vEOum+E2f;sv_jo1^p!D>UK$2J*;x1vWDAmIW%3WPf}Q2d)8%6Ks> z(}6czVKc|h4ui(Hic9_vss?Foi*1y<_U_}0cOzPn7-rvoCP~lp@Zk#;AqOLixES`= zY;H5+L?BzJCo6K8Qv`n}{Ln+zf6kUFa|2LNp7cYV?t6&1t5 z&i=*brtjTB4hEFqIPHQR-|=HpR!4E|ozX?p!Z<{OU?U8a88g&En{V{e)w|Mu6*DE} z__UNG#ieULI9*xHG?O@zOiCd^v1XU7p(!qP3pk-4rgV_%Xh8&-=RT3MK9Q#MDuT)6 ziDL<2v^N${H6rdk`|YhlZd;f0CiN?So+ z-Bl~*!nDl%d<1TsG-N4{K5U8E^Yq?az>g@8k$?OQFPA{t%I3$}-!}n^zTYsb=1RH> z3_d_ib=wMQ#Dss_TuWZjPHGAKx4Z5H80p$&!S>6mh%2-da+ocZ`8I?N_NPnCXKXdX z;)RQLCxi0i*H8-6T#rjEB2oO>*umOmt{_SOLr3CJ%R0mf8%7P&eV@#gdxm=0#GP0y zXhvXf&F~4I8QC3<;r4*<_&EDkojkvl2IeDU#ahHmgOVuvU6Vb0vB_3z=p%o_^nE8e z0v)pp@kixfd~&9vv!nLSKj(T3ePuuo0uEPAF&NX6X8e~rcqL3)x8-qJ9XbVk#=8s1 z@%x{P5#&A=xUOW3+BszF_v&L0_ZmhUYidy^j+z$G(k;_C4|5OAK2$ER-U=C59m-|Y zS&d($emCyB^?h50E3NKTpK0N;;iQt|=81p7ohLMCU3yoB9ttRC~hFt~ZffoU93rTU_>4#p%E?)2VRaxtZW(d^KN_ zMI>plW})x(`h_Ulj}b#rt}3#=RW2=qpy{ zVV&yn@COFDrA8AEd}1iU*_I~pdUVNYLPkeIZ|TRr^Z1@lRagk_{dO&9(-9vCJQ5Zlbq{YbUf0mC)To*hK%Rh7P5N50 z6BJ`HY6$=-06^_D7dwiXF)U$39x*+}vfIMG(QXS1AbY2SFr-I9BBRj+Ot4)#u=sgG z>~Z*cJ|qWM9tt^MuPC@rh)E&TM4sy_ZnDs-KMw0301eTWRSs3x_ zza>VA3Tcwtb?XbfDS&N8_lj2#`YKLw*50HwSIkps6I-7)LJcc>L#`^|va77F%ntg# z@g6fmJl2*8u^f?GUnwDxCBL{70VA#>tBBvbDP*D+L}j+QYgn2@^UxF+KNr`CzJbv5 z;b&C{<9ogf(nxXWEItBU^gmvt;8h7V9BjkCHgpD2gMrHo{LrP_puo7?PA@p-_9K-T##8%-O2y+B{vVz9Gq73127 zS0mAr2K^D2xUu*6Kq*Qq((zMZLDIq`6tLe1Ai(%=ZUUpW^@=6h)C3x`Jy#^}A>=6m z3!O;Tlxrq%rg+1UgV&lST_G|uGJ4o`d#q#%^)UhZS9Ag53u{#&h^!n ztRM{9#dsYvB_+Wg+#jZZ2@IW7x7Svz1jh?CSyUPDbh)=sES!6`&iilL)>b$2ymxXY zf06*}T@*0a-9i4fi`XzARMIHn{Q$)81uf48XZ2y^GcNIr7cLB(h(puot7=+WYV&>1 ze934}64K;z_8%V=vG`q}qcVvsPKKZ?hdLGUb^oqKu?C@&f4o{j$al%}#rw<@pCxO; zOALtc*h&;xks2w?96k)8({689&74(PORsyOKZwv^z{9<)qOGf4&b}^-{A?S>1JZb% zsu1`s5GNMcmiuuxe8rXd()j1CdWN6#&GhIX1ZDgCo<);)zVOS;wGP)WAA_;0E%eZ4 zSKODYg3x6e8d?a%!wg%+D^CS-TP;1_UHOvf)j$^C3XuHUHcsx*ZKzTaI=#ISC5gFF zw}d7x1%dW5-n@^#8Fu@BXoB`%o`2wxyaBJs?U&c)P4)L*@Nl2K2$+BAi_;FA5j$q& z8`8yNhebCIW|d7<+G<*1PSmPm?{zNQvZ|WH4n~`dH1x2GH9Lw+OTLtO_93@-{Ove|v zyrO$@Jq>y+bM(nX5Cf%MXV$3Q6BF2}meaI}F?Bx;@>Cr?PIh$UK#BT(^G`>kZc?9MDvzh=cz%>?Vjyfv)MQCpeM;^dSTs2bQL0;!Q22L~WSUp4jFj-6ENWmrH9xVxkj3uE7?E`2lFt?5ic|`W+Y%5P%xjptXO{l-@vi zwN-<6b&wK7*;#G;cjznsM>@8DGI1Cm5^+pw^?&eVC z^^zyKDi|FEerzs1G)%d+wc2`hM2c-h*c;9RWr9SX9nCRv`UFE*W+t(C?$hNCkO|w7 zBQ|pm`GM0-l7?9oP;Ci~)v>A3Iwwld5FSl9P#T3zXPp%jtD<0o9_IUUyo~wknvopX z*8uYI`E$|d7QDdogg)1NBZ>j|`&Sj@)s38;CskfMkm z!&E7%=~q^xFRvB6B~mO7puQc0oVfM1y+*3{3Qn4(=J<PLiluBL>(bJycpqD`NQ(I3FnKA?XUY?=RilxY5kCWF8d(CCOL z4Q;xGD}L4gtTTxXTqB;;?Tt1TzrT5c5ktQkfmKZaMKyhK9P4xzLU{^3 zvduBMn=fa-G?4G*ZmzC?t7oB=n@UCv``Y)=@F6=c@6byJzbUg}2_M#X1`)QW4P;lQ z&FC?3^t+Y`=#Bn~R*d-Xb=EUU^XIoOGv>=b?};R_dKXkekqz+szHd5rh_V+!Tar1%Ymp0&0@i*B+0IAd^2ssFikD#G0vg>6;<}qIY-T2@Hr*%(UEhE9T3}Zu5W$ zQN?UR^RE0`jalQjl|iP#Nf^MvHJb|6jJ23~d;|`Y^oI_u#f8iwR#4Y3QD@{z@iL+O zAhjL}EaY!V)(hMxbA&y%jx?B9KvtRaJK^uNKfYmZjM61~h3Y`wXeLZAJu)>2-Q(m0 zHw}TJ$>W?7P_J9vPtGE%ZZu{Ce-ll zgaYGF2C3xTliW;xg_{LOl1$hF+aOWlyc4V8acs$GBuIDuK z?=sWa=&ALi-ygFw)ZMTzrMKDE^hc*w#saXS%*JNG_{75NBhRs73Ak9Q_jpQG8yd#J ztz^#IM*_aGnt1BZG^uJs?nsEL+}nL=0L3brRR0D4HiTPrxdCvcA3`l4TQ$?|-kOL* zPJ^WkbIr_jyS21%y4hMN$HdAf=_8!zq`+e6f-~9?c`kT#!Oym3>&$ZMpcKP?KSP?Sqy{jj9($IfB+3sQM!5@lw6SA~2E_Eo5@XaL=zM&yO(x{pL+5;m)K!J!Y z0Y_r19Qkyfz)g^e?e!dO(Z@!?@Z6yv|!x^!o zJqw;->Ki8ogW|mS^k|X8b^n;*B->Ol)jDuT`(1E_o6)jiA!;feE;c~uMn2VUI+owP zKdQmfRFJxG)=~YS0Foq;!W9aKya810RyiOauE~-RRy^=-hfN7fFG4avCj1kp0yg8j zKyvbUxp-yTYQ^Zn9m;$vn~Pwi>D%Pyy9+!5Qi4?{@n3PqJG=EjP_4*4IFi2vov7A} zuyFa4IPD+6*>|U!0bJt&Cs&PeC5UA*D;P0R*FtG0b7#Cy6u@ssA&hOctr#;T4@&{# zHci2ud~|#%{z`fhMvHz2sXSPy_I6RFPHuMKO{KWbIM@1Y@4|?Tmvd4ObN-XEv0JtZ z#_(;Gk-kv}kkX1=VbgQ-^*X5JrgAHVsy>%h?~=|rN&GI_^F*spLO1;bli@w+M~XIn ziF$pH|DR8X1HaDbzn?IcX_&Ty#W~h*TVaK}*&K*N-CBJoTAQl?ibiQ^Q{^&q@-@}Q z!Q_P67+aK3c;Y)VUKMyUOTUjy zu0N8N@%sfw3fATmLx>QARQ@2Z6n#B?plg|$$H*6WUps1xOaarZA<f*@#ZuiQ@2F?)h~q#kU$X^`sPcP833xtJkaUf(jB%=j&Np5dY-Fm9P7_ZIfw}iLG7h3XMU_3XC2&> zUwrKqd7fk^_Mg3I}Q`jqar`+rY4)ow|x zR~lrz2m2faxIq#%a7)du`TBagSWDr^IeB!k2x&3=0AwKi$ABX-alcryg}I*eG(R{| z#VJ|98rb@?%<*7D$|nRd4aXwzNU-mjl;GS1$|4Z_x9|6++%W!cN>Wg`{KOJ>ft95& z`7(Yf`0t1+@mIAWzIp-b=#$UMG-l-h>M{e<-E|%v&!q(*qo7y){1kP&F#$@be4mQ7tciq@c%?=;yox?-4q_ zZh3~NpqhZ({{FmPAe%F`N3Y=o>2-yeFp`$VB z_FjTgbyKGIHw?7GLarYl{lB3nh}L7X){M}wbBZdb(3R{>sALrRo}wP7&p(Vqp0R)5X>&`D5AKACvc)Ji zAosuJxgXprP|5C63pBQp^yD0+*SLGekIP#m ze7Uc>UYEguf4eW6WNS`fI>SRwhLh~XIJg-zX@`N;_Zk-45b&PevSGqe6+1(ibEPh- z?5erKQkl5)b1%~nE|DSy+KT2c9L<>cd@)H|CS|KbMf0G&Q z|JxZu0~`v$x+qHr8;ft}R@}E>O`mA^hFjOe=8m7_?g>sVAF#bN*DIQ}6`DPra0Pmq zy%<2m=H^u7zAa*=zvNuU3b^by7F*K`5s~+Rb13|*9_OztJ8X1`;?D#T;rgy6>vp*) z%RT+&kidA}_J;s38#=!x#?QWZFfIKZKNrd#j5J#voM;nO=MR1yF-L-7GB7?+Zn+7u zw!C7??RNo5b%FU|+Q&Deagc5!6@}Iv_eyp@$tH+S&YnDW&r{ySbHj`J^W`iIX_R~$ z)DFd$i>_p*Tzt`yOX#d+a_P>Q{ZXf0mZx22o%W>xKJk45=p5*3b|r=YY8ESi#+d2s zdz5B_6VVf?A{*hWb<@ZrV@Tq3e9BybyKB85LK%)w_UtwQ^c&p9CUeae>$1EhQ z@^H(`TSSc(-8zAM8f>a!TwME8)b)TbT*E4iI?l}}vM$CX1;rv%jyfS!Tody=K)inN%B~%&@$Xkvt`H7-+j^Qo^C;>3 z-lRj$4DXjqlvq2Vc3ZB4m1bY(%Sr+xHy+Q)Zi($qMS?I12XJsqaLGA#v}xv$Q<7KB z*xh}N%o<}5xj<5GtpSC*>3;6KrAQW)yAy)csUWmD&9r7R1OB-Q1h$gN!95~jFI==! zqE{|zK$2&dvkF(akRS}n{D51l#@BeY2A3^j^SM@t5M>}yGg(cFGZ)?UIBil+ae}Lt zj2QTF9Y&ETbEm6iFVXh*quloP-0$0G@VYtxE7zI?`rJE6X3b-Z`2OFzV}0+V!ua1* zmI=F#aZ3+(;h~CxFk)3D)HGSKEO-C;i6ah!ELCcl&-EsqD28o-$0*VNv2LwRGtieM=5g| zcs=oK#eQ`aKG^aU7F+F~MiqW>Zx!jbc~7DvZAc-IP z)|n_38b7_BTa;WiUAYWo8zF!!_ZQ2;!5QR4rd3_)>4-F@#w-j5d>U{vx?C1E#w{Ao+eXxe9_9 z6Yf^9if_c*>Eg5BB@wvdJ%qBN@=2L<+AlGf>hm=Ko>Q8~mY|SN#9v$fr^()@QE7sO z;)+Y1DcbV|>Y=3WXYuEoQ0PCFN;JBkhPgergoXHJ#Xmww=Lb3;^Ui?RbGZ1$j;`J^ zjQAmw&hVl^qSLNihO}8v{y)=LRgIb?>OH=vG)B-o4hRumdSofI85J5;0j=R%`H8wk zv-gG=(Bt)~78g5&Vh|0diKFHKATz}xhaQQ{S1>x2aPMl-dDZbwnz(<1m&~tov#V>1 zm&W6VF`QUH{(D_4ZJj@Ex~iI~z;2NoAr3oS8n`h=eG1Us{et|_l5(^y7Rb#Ps?Nv! zzPLgXKbsIwp0Q5&YrIbVKCLs%{UHlIP?txViRjQ^8M^8GQlHrW9N*GO;x#JdXK0Le zNpRbYV+XPz+f4VyO(TxU@gN|&K#A^a?s}3|9-inG9Ft>_CO%gdgLj#%(kvTEB)@?FtEGMrF_EAV;(e}BvPI) zdteOA0u^34(oYj3hu=<87LwK?l*MmFlpbG?+Vo;Ui@s~m0<<>+Z8wEww>D!a?~y}^ zk0}x5szIV5_M!oQkQLxy{A1_II(0BVO5kBu{K|>@pBI4qw@yedQ6#!(2M8pOdoR!R z{*lZ3w93#N|U~IVkvQW(~Tca=T zF;V|{O(kry3C1ipfM4U9?MwYR8O@1%{ww4TjT{3}E+wIlKCLh}{r{Ny>Zm9iCtL)S zkPbmgVx=XdbEUhL?vMtTZV>72SW;3H7Laaf>1OHf?vDH7cYpU>4}Y-W;dpR%-kE2f zXcu5731$z^g0VT8@66GDaTd#U$QK<()4H($O^VSG5irC-%M$`$Q-uCC#SytwVOo%6_<*2bjBP!|^o>oQunu^ZqzH zf_kRsPB|4;fh%<3gw^rZ2+hIc{NnKg${RNIqV%5ACfH%qro{1rMPpGBx*9$qhF&{1 zVjS;+UIf)~Za`i|AZi-wyafN4Cpm)e1*;y)pHnv<;$Ep&U#YmlR6f++1q^PGM3$q4 z8F&Y)nqjOaP-o>AEN`4@@+{oL!pk z@)8KqY!e0Dz3LfkVKNAMJg99U^kF@lWSQ^m%RZgDZKf@PlKaTr24)s!R;J^-rSRv@ zyn$ffEe+@5mFv#$S=^$iCnkJxdPJjL>fxP3Nk#oheKL7;dg*UY{;d|zoRc}F`v zG&YA`RCf9o0~%FS6Y4oN4e&0nbX4;A3%Ib|_OV4|vKWz)4Wf<~hH_vya@|1;bOxJHV63}?6yB!O2kfGq99r)HQ^}2M>n155?I4_N)z6i3~Zp~SvK;EVieYM-$}y*JABl z@XRn1sJu_{A~V_I&-a&u(xQHk9jXgZ(J+k0nJSR+mrM`nc))@vOQo2Z!p5Bu8m|Eo zg{NC8(vp_2*xuO0S1{Qjswk@b9}IpF(~w0m^Jq$DdlMvlWsf<@n;#|*g~hYJ>LFa9 zJ6be0KYzVHaLYULD(Q&5vULtV%Gr6!U+f`gV*}$*e_i;Id6j?gZ({``rJ`z5&5oef z0y5<@jJ`k4?_O=t7IA6c-7TZnEO=%8g4>a~4NmTIHDB%FdkxKUFdH~~N3Mj_5~xAn zVV>tCiHw9JWHKrf4~-Og+6YhQaDEc6ae{f-Qnb7-JGS_i*kJ8-b^E5#DT9MNzE}5k z>GEn)hIcihcFU9wX7@|EVT>Q8oS`crAjL0LWI;ae0lu#-p%>|^fD{{2e+dU9cx2s8 zoz?A)e~vk0RWHbJgTMAaKazlV*?is9I!{hG8O_AMr3#pW&%+k0R8U8Bw!A0ro%JoC z+;OMarR{5Lpn6zEbF(lf95WCoPF?1N&a8h$N+U`;+(XtOI7AwftLN&_LxUm4+_!_a zCHb}gdboN&vu{Si*Ih9#4{iWlqe;;cJ9*8^2Z@>#^aEp-6a(d()Wj-`C&4TuZXO;v zEj}x}K4!idM5(+VW!;TO48R4SSFZT(y3x+f-{nx@qLKxF1X*M%&TL8U6qv68`;C<~ zCIZaozPB#?;bz212DTT+Bv3r3ms_uWs3^`fvY2mn9Ipr25zY~2vNzgfE>7<}A^J5A zCn0j7HW|lNHC)3WR?_5AcQ13yI^XetH?4-~(IV$43o5;vG4jj^u>pF4lP&KsNLjVdHW&}9m53DRP><6vOdIEa1KsoJ$Y9Xc(F?@y_mPZ^!DSKP{GBUWPuO1Lsvgg?7G2f7pr4IgTx zQ`oXDg-iX4aapVhUst`Fjf{hW4vZj`d#m%hlLN5Ou#L zetYv(P76^i6r=$u>Q8KF3*!ZR0~&|!-+2$$WGS$PkoevIrHOV&)BRHbE_1YimbT=*m4Vk8dG5M+Kkyx8EfPx817z6+LvR|8bE?^_Pn3lD@(pAobFPV@y9`EGUq`CelEq7_T! z_}I6?7*wbEkNFT^ux%~yCW_?#KC$l6tdpwmcZ_OOvFB>`$bLY%fbE=2^h`WiRUx;` zmuiV^W{{S=V3CiC_JPEPWF_+muaJm0xckFO} zz`uS??J~&!hur2WN`#%)?r~>8Y_&OmA)~VP;{4$H_em$o`ZTp&r%?R88X2~ww5b+e z2gT5gQvHF+1}}bKsD|PRAWE==W?q|?;rNS|{}niF6aylvPma5RknKGfQZ@{`jDS|$ ze#OdXnZ&;No{Oxz_0;Zn^G(G5&ikY@hKqivr7-p*kS?1HOqsTo{u_Rc_#Y zfUuQRcGwu|zRC?W$}4Oi#mXwk4wjz^feCT0GB?4Ns&W|3Xvrt-$J#boGsN3Ta&(T0 z+CW5A(mThHan5vIitZ*cUeAoK3zDixsgMmk*p}hzZ;l8Uh|vQjpSWu#=@S_fgwt%wjI~3ecw6rIkAw*dBNi`nLZgi>aBr+&gubC z*0Sfq*V!JQibsoFdVj4ibgVUUd7mwWP!0uJJi>3m9)H))A?YivqJ0_;?rEo^F&$_R z1xj1bK{Ea<19ICJ@aP0QJ@~d0zo#zXU?&AX&s5WT^@*hWI3Fitt6unwtAR~%EV{4#wYyAS_2Ho znfa^xFg$}o!HPlfHKbk8>*i&gVNT+E^~5~ zOm3kCMszGAveHdsT^Z$N4(+?NjB1!1l`^KHKiu zs-!Tpx#W9&o)uz9{cC@7fqZ`cA}zYQ?qqN;Kl4j-1R3qkE}ekE=jQhkCQUMh3xr&a zlctR;)7>NNS4#gi3e(=P*}jEKDeff|tPD(HQa5R6T6v~YW< z#+dk`8j}iHjiaLRvK6J)PNQRo7fS;M41?@_8#f#-R=;?m!MmEsA{uv#-V|&-bu20b z=g58qmO0jV;5~kX0wa8*T4`&tTcEk?*2&h^%iq$0sf8rW8;E(Oce1nmW9)EHk=+@- z{7iH5Q8%gJ406B4TCZ~lpvLqdlQ10OBnkH$bQQC>uE7^o=iOUXw*pH61Crok)5A-GCOWlKB^%K6?An zTo#g2yphYDK#2Uuq;riH3l3C&xNzp)wZU;Z9JkhtS_hackyFk!Xc5UivE&|MFNL!< ze~|65f4s0iZ94Rh?v8$Qcw5J*fNhh-sc?Py_^?<}UEKu)hl-GOdtEjxnz_5zxso@# zpVB_D-&4}l*TDCMj~!Wno5ksQsc!~0_$~${bG7(*>wCJ?`b|wx^{I%{QGOz3KMk^- zI43!M1^_Fvf@npa_cN3>YV`~`xcx{Jw##2&d9e~IRri;jKHBxecHuEVQUDfCbV=1TGmmx=Z)Oi1@Tr`-et5!EPm zJ~}pId?9XB&MZw&72S-uI6Mgk2!~{ilam_wPtU;*9WSnoASseU`GpipaHha<^RTvdRMclH zL;vL6qaV(1%xSt4xFqt~f|{c_ekQcDf2Rq^{>XSvh5&xpqER)pvy0l^wycEXl%p-( zl*~3>UuZB8T!x`>DbN_u$Mm%XZq6HeJIC(tsAeHiB8!9=ZD}T5$022#k${RQWyIq8 zpAG+|DPiABt0{*qw)whYKQ1H}t{_|)5220N_OXQpjef0uqab}EBX4J(aS;ulqK`D1 zt5q)NZPpK*goG`*ba$yAEI=B=!;gb)>DCP2j2zG{bIhcb?99e@tC}8WI-6ugQ)Z>{=nK)2W`8exuLeaC1nq1y4 zN$0ypED@X|z$1o$3b_RktPdI7PZ*R}SGyD+hODMM)vM>_!9S0qr_aH6?cg<~$1^3* z!$#kGxbMKzX>fnG=Gp)VvWDDV*aGGi4}MSXNq-<@K7e0EGVm686afAdI^{i$AH3Ks zmkw|Lb?zV>g|RPWDD7-Vg7(?$>D^SQ02OvtO_`Uq19tng?87T3 zZu>2Hua8o?ot4Bl;uv*wkNEYqjzzg*_95NP>}?t&Yrsw9?vL1#WzmHg?U)|1mWtKLdvY4!{ zqWDMxhLs3z@qx38A2x`lwk`gfi-T}W)YH@(kPsbU;btUPKGMW5w%&KX2gL<&{)n$k z0>)xg>OG!j(TCXlImk?4nD(@8yBm`=+^ElmGlGM@M{jDpojV?7se5i72bAszPBdO`LEZypjzjdyqP| zy0GM7jc_ZglqsxW@*3t0NVpOSp?$lXrckg6W9R1f$qv`dRoMipdDSz+WM45I)KN!l zJ}Ru1ykpdDf6eJS(?6G*!>I>46QyRQ)_~Mqzl4{+I^is6nC}dQ=iai z3)rrJXru6%S5GEC-NdR={PMw(z|BxB)NuX#N)TG$ZZwC_s+wmT2fAujDjcK209?7d zt8Hy&g(t7GCMsBRQ+C;2>|>;ca#yeeoVENvrZ2sNGy3-rsUx!DSKKLN;$r$TiZ?cI zg%=+mF6%rmS^n7@O-&JBdo{yh8H&M)iG(DPFO)I`x2viwp-*lNck2cZZzrsrV}b#B z20<9rho-tGoI#WwB+YOs{srq>pMJH&aJ8*2T*$FC=84Br#vBfk0mR)uLy(&Y>$K(| zk6|+p^wWE~^%%Capta9Pj5W}XX47+Xv&NETpYeUyM-ByixHAexOIqk>%=SN*_iE8E z!8Ty#fi4W@8H4KMZm~Hn(s_?*Dl0>>l{-3BOs3y5GRKivMZ7D-xC{_7+!|viF{zp; zibv1!+&Pcm168F4d@F@Ru{2~cwzIx2!LOf)g8Ub z*76HmVMQ1^btM?&h(P9EMK*qwoARQOr)>npHBJ>4@&QMZN`|aGMgjVgiaxn7q0bC( zhFXml76mME?*!xHxp zdc@#l)AwQ1YgcD+W$|Iww{K;I`f=6w4%@0~W}CeDX<{BEJLfF;Z`z0{`O%*~>rY7x zC0b%u=W(RvP&n zg0u_8_~V!W3W3$MRhnfJ=u8~c)V4zzRxsVWxTnjeG)`eW+NAKo+EQUS~Z@{8~x0L&R#<)%qn!MAvZ09gY zE#OV01C0ECImc=04H2TyaP{@3iNoq{|%zD1&NLNQma zmU>!^S~(Sjuex|@eO6!WT3g?3Nr7{wZJKY0ZnyYnD=oQ68x-e*4Hl!;5m4708nFCC zLN+~tM#~LS-E&3&VX|#*FnImiMfjnhm;o!ZMaC61-oo3Dpeqba0Q{am!xq0Eb-5nV zH7g2{=Wf46auvZsjE)@O$`thO7(L-wkMrr8GnmVpv4}@3FyRp5l8p1;46O9(0g#2B z^;49GhnXGpaHXs-b0}*e#C&fdy|ObU&q zPnKB?;8b+G=oxk2t6UM3rkV-$tm4H~Km$@x8BwT)!&hsQRiCn3jF##T>I%ctks02K zhP?Fl9e7pb!cXqCD24jfcDBh0dVjN5iENjvxMAlyBd!v#=??tI0#VGJJa6E2$IO2N ze3N6-c=#UdN%u0!EDSw{gyvhACt%*i2Li?Km7epZY zmQ^yzT+Ydg{1sU1v(5MSqmZt!F$pU?fknM_7I8QxJ{A4Yt6&2%&)2xw0{pzgSR{9i z&EKk4b97#e;d6-bERRPg#Fdw`cXf3g2}VbQABfx8QnIqly}a(EU(%0qzQqs&W|m7K z`7x44r0m9!Z5uDBPxlU1ZCFX0A#&y?Yp6s|l}E|s*K2BP?S zD2=DQSWm*Wl_}mphrq!-Oz6Zr?qqN)`mb7TKNzM}i>hGDw@ufnB0DwugcRbej&jxq z|LjxKCP0Hz;haNHtEk!wI3QatIV0vEzp|TK?rm%P>OE{(Q|EihGO@q^uT4@jb!0eC z+?PjlDrj9hL~iTEH*JPS6p`XH`<9Ek!^XWY4oE$q-_K``d*K^{4#|X@(uF%CMXn+7 zDV&Ji4y;W_N@JD!`}WGF?D?rLvyF(?9QamvX))R}cjwqRwzejXXcfjXXAP468bfId zEb+P_L!Vd_)HoGLXP_7Ej!Bz+yZk(v&!Gi+Q1HRt#ZDX zK;X^d&14OmLj3x=nYz0A3!jL8BdS4A&B@Py4e~i%xXFNeb5xt0y*edOsQ?3%;(qpx z96vLpyB)Yl)ZopW3g&ECV42+eD?9~;-+p|aX0G6~Q0SE_v1Vzr_-^DiRdUNW>9I<> zt6f(Y!9m`?UCOi{h$q=W0e>cKb236)=4rG;AidmBA9Q@?qCX+;OmpzJD9Xun#f@YU zizsbSI)Z|>$%Y8ex25Fzo46E=RtztbzZ?3IpcSr_9W4k}P4H&~1taYF3)N!MvyiC| zitdoiD%GIz1Kp7ug9}e_$HJMbm* zh8_9ipt3uWw-2MOB!Fz)g+Jd6#G2XAB8bFU&20UO6&s7m=K061EMa zt|IHD$6v9|VlzM--EF!%S))}Jwe#zJu=@}9FuRfv5B|9Op-r# z98#!S*l^e0EVRiznohk~)#z?`bo{HVyt?KP6M%N?B5Lm1nofHr*1cm!gw?|$$PPkhwNLs+Pb}<0HI)0L`}mT#6pFI4(1JW+Hx-om_rsX? z$_iiMN98YH+25UDu33hVqx6KN~SgNLTBu3~AA_2B^L-L9;zx&PvVI_a$JmJGpJZxx6jla3s8{ z!MKLyrua8{^F@7`1baQmN7TAx!nrpLUzetEPQ{(#)N{rZ5zq<7r~+*g0EII1S9mFY z-Yl89R?Cf5!p)lx4`qI{D^$>7krfCFuqx^ZdVahK^Z^_zclrP6vSi}Y-LqsEqzd%; zq$vd5zN`%a@AAU2<%9W#Jj&4eMepb0S=cpfu;2Asf-TiXwm zU6N3#%4{3p)mmO%yEx|QzR>@10g#_T$N(o;XhDXiv|FZTVoFcVjx>$g{TQroQ3CJ& zJifqE$$~)?Y8mHs z3Q5mce+n!%#M)hiDVxbHC+(@~_Nyt-x-lB0hvuC@a(*O9ngAw34rn=&2ZnfbHT{A^ zW6^MVrwWNqbBuF+d$pUB^xVXrCyr_|V!|_1)oEG_hFke=sQONE zyRMI$OSW-<+Zk*veqdJy=7{mcgWRM$-_rns_x? z9HmwrGXuHRHU!an*x*hqX10`a>D2ED}^kVl5g3hG$q7}0R);7_~>OjLT1;~YOs2qRPwZ3 zO?u38P(VUlXeb&jEiHfo-0hiz+nvc^%*@I~9~IXSEVM2TR#Lx3>x^-pTqD-ar6E6H zs%vDH>*=+{`3yY+L@+{Fen9_z{>+ltIF(j%=vkTKs3Su9pL!3>)7}YTls^iiCcKfB zG+egTMD3ix+-)kTU)Omx2N64uUqjDHBCCRj-GbuB*{YljqX1Iyh!vMb6_k0GKOTRK z;N@Ezo%!hKa3XPFA<5o<4zldsYa>&O2f)e0VJv51uU%`Du0T4Ows7*=B}Kku{k(A{vaSx1jw)T$xV&D6_E`?M{Ap?#3ZhcK5X2S5aK3-+gcR(09P+W@+h%rM zvjo&SZTkOP4a~oKJQ?|+2d)s{iUJSLAR}E=l|dgT&3|clu?}P30q?iV zi1Yo&dF(OH&dd8uL*{TK;z?mP2lm8S@^nbnPCVH;aG`Xo`)vDLxDOe~5WKu$b3`P2 z{%li)-3e)1u8r>5xkvb1`Zpu;{Rs)mVUw3a6KI^#n$2vX9<(bh2SKW;qG0MMycK#$ z9;dEXy#$5m=H*D}o%w%ybwDbvE7{GH2+sn0+LS@=j29w)2U~gSy{en+q`TJr@Y45s zso#}}AFOkC>+jlNNK1e_6tG+#HhVIce{`iTk-)i1DX6+_K*=f-4Y3omcB8yoo2o1z`xn?{_C& zDXCXK8+Q6uSI0myz@6oLol@#^Dj+XUL3TWASL5dPNYM=Eo8*oMQE`d_yUrO=r)_e2 z)h#K&t=Jf_U!1zQq|12oEfg{W24HSQ;Y7sVMg`W&oV3jt<|FUVz8a-G!G;*`fJF%O#%4pZ37|` zg%!KIKPtojl|ya--ow-KC<;M04gB3d0Gqcn*h-#}Pax=K2V(I8Oj#)$KZEVHCi5+l zbK|PQZD%_mUbF|nTDp!c@w&9kq_6TaR}=#y7A^7I;}U%t@W)vXJJi*`^sPW0>*fL} zq@d%&UqY&>NzSo=PNBzc;Bv4<6Mmr}5ms0ujqL#9=Qw@?vXu9(5;4i`0VrYU_}9ys z^86-+;6P&>)7a_29zg^q1DI+i!;1QatEOr?SQNc79gwe4RJJT_pU}W~;q{1rbeE-B zJT?OhEaepy-}CXwR7|hYfv?d5y)v0zzD(#_A9F@vCiuG!R0yfH9N=KPp*F;gJH(NTR~cFN97RV4Gd^(zAWKn#P79i!w{l;_|BB@%1*223 z*^-WBepgQIux{zRI1#fFi2h4AtI2PHgXzd{c#A!d+gg9F7gP91rO23?5kTdTZ8XYBPd3W8+?3CB+;v4E$m7Q|SZa<{| zjh@n)S>CzTV9O9b{%J+sDcs>B-WnB!rE=AO$&EQh&lbXVJp{2v!A)KbnZU^C+s0s;HDsd++XK&oR2XEH$ia#3>g#2w)xf4z?S%6q4Z z`+)FepF3ZUlAKe-6m1f2>?<?#+ZK(};V^u!($yy1E$2%X%5GM#E;%`X|R0o>M zuy}{CsB1lzAAY>W;*CPvz+2VwCi8~+0!(MnX*rHRhu(8Gggk&3_)@c`S+c=Ba;6ul z@rEPa5Wg?x@3XL$6<$+E>%@$m&p=!G*y=o|Vg=*K-G9zpqVY_GjIQ4x^}DvUs%=o? zWB4KY4v=Qp)LB6njTUu%K-kSL!$1X&-JQRDApy-pdK|1UHLnXxtf5yRYycAjE(7V$ zo3ooHXi>fSGq@#4(XSDc%%17id*}lTm6(CfmTSV8a}%9n7_dk^7qm#wwDbiuDkL=1 zImz^4iW4e!n!HvG7y_wZ)BvcUCADDs_8QU+)t3Lq?d#nB9^m`5mMdeRQi&fv=LO>L zh8l2Kue;yM;PGc*0dNlH9gr+;Hvxr$RYUX2;Y*UqXrrbTq9;I1z^ zl)NRe2$jjZ7C#Az?Veu0PS}Z30piVJv9t^t&D<3Np-?#A>z z3yeW8i)3UgByzGn-^_Z{w_i>4{@C_nAymcx>rdH(GWW~3H@D%kmJ1R*9m;3ZN8y3; z2RMEf6c$=?lHB=%AJ{upLjjLkRmQ|9&ep0Hq-^Ich&5D_C98X2p6aNyY4q7}c`*PH zbo_0p4>|&>-MRjq(inu5Lgg0%QyeahFnCSTvN+en*+I)uD zI5;~#nQURV(2dUhr4m7mv|n>uu_M^V4)(jQPO|9Zch#RUed{C6pA-kLjyHj|zeZ*( zp}dHld3NKW{ga)~K2b``?=MSN_Ek`?i{tKb>j@KERs}Ut8fssm;7?^QAgG?Tm%bDL zhABuXsmPf{%YglO&2E3!`!0Z6bX6N-#|hVQ(w;w-V;nJch3L`J_U(8=$S#ptlD~KH z0Cs$(Igi&evY~*>MyoR|0@+7BYXaoh&94QP-9JT|dR16{Sw?#3?dG69zW*)!vK@yC zP*`7dX}7Fy{EBi}1^;9SpmdJUyStWH~yMIiD9vhpZ-4X2fZ- z*IQB!_35ow@%*AyCu|S5b2+5y+(twQ&tlI?l4^Z$9?L6KM=j*z_hFQit)+J@}~2Y z#+Crv5CCy;l_{F2w&b*0b9~O22aojc$AUQsN=#n$LGX>N?upk75SkaB`;s%nbR(OtLF(#c!N4T6a#N zp}VWV2))@P5Qa->BPBlZgLEt-F9q7vJ;9BCV`lujKb09jRqvxDS0+Jycnn8!7w`q( zei9&4`mMl{sQyqXEa9YTN9jJw0a|cw^*2>ui9R#@&)=xr+?WE(AqdbkGMB0sCyuj8 zE+z2A8J}u^U4HA{SWO;BBr?X z!J*1X15%K(+m{ZrKRTH0qtFoiLlF2$2 zzDFLYBTrv+ubUY5b-e1UW+z>4mz&j)%!YhkWQAnq zAU4ZW_xnOY&#RDKlbRHI#f!|`AVP()l+;us03FgU>56{X&H|MBx=k*T#^t<%Sbi4( zrEN178F*#{fg)&frs$&ZD!u1cRV8bEe#oqtULGViUm>tT5kCM(N1fncBoEq#{qG6@ zJ()C#xImBEGu-|rPyh-o;`upF`e`yla5WJvtdly(4&yw943s*|4xHG8=M4)d5&x7i zt5R8_FdTYcy-Z+AM4HW;w>#}D%o?_z#W^hiY-6`={>s-H>qAs?Z3R&-)9A? zA-zZPBC{4d$S9(63Vo}tQ$nTEe5Axoi!O?8AhSiXPEYYA!}05x#g=>5{U z^vApzi!VavW)Trw56Bx$n!t}Rd+x{lg3|G!Ap-EEwS>}8_4dv^{x+Vqyhsyxtx`Af zL3-+{QQCUIYyGML!}R!dkP%srH@oAEd|VzK!rq&2M4|o80GAC)N`Ch+-5%Q239|ojCXOmMpV~%mhAcbuUB=oU^OO^LTcH&Y6)Q~d{&MWIa z=D#-(-fU7Oi})b@Rj>M}?Uk!e)`>;mG84W%yZY;HwjhIAEyl#FM1%WJlkmx_>-h%Y zekcGeAI08a1t4mk?Qh+|L4~EpAH$RvL9{eL4E6A6RM2>ab|ebhAkKp+>?) zu6wxd5m%8asPcWr4i6;D9T)@qTsvt>BUYCT+Gsa^S?~BWX#0H9tlmYZ^>GOCMbffH zFa6wp&J5d+86{j>4}V_mLL%S4XyoGa@L?qD@K&()($Q)n!^ED0x&z9=KA$TP(u`IA zT`hf&e**@dqeQ2+vgYa{>KZh??WPLF>w3kgdA;l!^eG)IlY*mx?>|hZpa$Zvzt}M> z?(boAr0pYvy-%)F0ghU*UAIivg@*TRzaP-rzeICry<+ej_Zf4(9~BpRgF@9?;| z#(&dYn!)palC_pR@aA?GK*y<5QP~`2_oL+w4{JDHOKrdOZQ0rUH)upKGBn*n!)~6s zN8n0|Gy|aJA}Vs%lCWWoBSfo6zHw=|S0%Fqh~d?wF3Yo&J#*Ok32vD@?Gn5;5RJ1L|v}>lD(`c|H0o(2mz(3$ungN+yDK%5InenU&4wNGCz9Xi7c%+T& zK?u8L3gkM`Rd&8AFw__{q6E#e5niBDz}slycKm%v`8JCB?z8`A%dG;R9~EPvucvU- zOg^zgr4@`1(UAiDO6X>R^R;_*p5m?sjucvkcJQ6s0Y-JTMoj)|5@MV+?Yq7~u*wX{ zs`mAZ_(TSPJn`+GkFOra!2=!wF8TmL=dK;w_wQ8)G7!pCs7#;U05lPlDWHiU*bdP| ztq9rqs*uHh!h4=w#}ZijNbNy3_AuRoQ&JMcxl=l!X#O>3#XW5weqdSuI3$J2@HT1H za6m6tu;PRFtwOcNp$TW!N*H%g5>~$+uM8fvgnvLi!^$~LwY*K!3}cqWPGeBy==k1D zo!c4#RUvmhc#Wx|@$`WQGXJeKmPt;|>v)^4dqF=%ydyuL&GcDORx4s`#JpX4{Y2#5 zgj3JXJQw4s86qnPpsHOq!&o$c$4)Ab&-q5(L9nsYkt^cQJ^?+c7W(fNb)LpP*tv_# zjHvz#{*`b@Jn5_7+{6?2;D`sGKC5J@{hGZ~#^rT0P6dHa@V@@yr$bc=v**E3fN8r& zv;KzkEVGM%qy1hq;^1Iv-<rNe0YXkq+O+;GE?%BF3Gl{e? z#Aq?Xb1W8#u9)8gDQ^JEb=vrnN|HaKI6EbSBiF4_OJtzhmaO}ANPB*)T#8%6SFMn# zW`pcHo45cXPyeGIXQg4@phqT0+;S&3I3xNpTjyMBEs z-{A{MDLdOn2R76ERJbdaoV4^^0!V&@8MB?NOM{zBosbBL$(+hL@iH+OL}aPFyiPP%i)M2pB|W9J znx)`YyJ{Uc|IkGMd#x3j%85M3gu1s~^n9-0^wHFAjTiSfIqwttyX z$IVrjr_M-ZtWr*8Rj_z5hu*^y;<{nw`g&%g)|47nL5Ux4M*X3kjSXYNO~p?04;so|Hl&w4}1BLjoP&orF{Y zC)*OQW+n3yhKZ@CF=m@XX}rOt2F!1$RBSd#dkLRw2cjn*Gmj%J7gFlP*fmIeP(HL9 z8X0{B01X>^`_oGxrwRZ&99B0J9O`oG%$ur_48LSVPIQWqBVd}?_pqg1QM_ULa=wF{ zQz46ILz6Dkzs(R)WSQ;?CbmNPlThhO7F>UuzkRT8cXsIhj}P=-NXp$I=<_{RWTbgz z&7lz;rp-G^icP+4LN|TVA?pgYd0<}V;1dot5s-2jBYCb~Ln5d@gG?!}s;Y2up#ff+ zB(KsYe}QIAz_2B`PxQF zq5D>819Y=<4~eARo(mef+Qwkog{aWB7?2`+-ti2}t|b(&n;jskc@E6${WaH`9Bzm^ zcN{VHG3X4xuQuScj02f7+L3bo2BlYkc57_pUk3pj#gSz_4n^P|G-ohv)AS(nL#gBf z>q7sHLRIP$>cxUrN^^tc(V|nL9)0Hi_D=2JGYFM8N{m2)W_QYkaqq6bsH)K?$Ku}Ufa|Kyas6I~gAoYF*|_l?LMd}do&r-;L+DngH! zJURZO6HVx-x~TE)R*=to4r;D`f-ntgXPN)+mZIzKO*9nlpU9J%LM(tZ(gOh+*=znf zhDaC9)ryShFY1nSnGfiRvSwR>l8D4_NLS%4=kJn|{}-9$y6AnWc?f@2?Vlcb6#I3ugC@>&5^6RQy#dZdOmc!#&wKa=~U`qI$R^-o2b>o1joIA=!nw37txOD4(6wK6Tn3$9Roq?7utkrn9*3>jF!P>k8Q`;MooAJh;l`%|qJ; ztzI7i_Q79uuuf9oZaocaT%WP1lU_@iV$g?DocMDc^(o;kK^(k2*^Z7`OiHu;-1iyp zyp?R`%nE$pFFALO{ran3VLsb8IA%odn2Kavoz+dqxC4#K+zF7QIv?N$U{j9I5qr7`gfz)*g5XX2NQo!!Z|L*Fa_Ke1b=58R~~Sl$I;`Kem1Ik?a5x}x4$+Z3}_ zR5XP!%uE$@Y&o*TtDbCRSOX%t#y{Pc0-6P(Mi$~SqIg^~ZM1(e*MP-|PaydAA-K}# zVo01xZu0;k1zjWsLh!a?LmWi-f8m>OAHw({%3`9=v(&&ZN<){!RL zlg|OdA2uu5(0{1c{DA)=4(bGwaA2#(Q6D%jeVFYh-H&XL{CH*9(y0%9R+CdR(!k1P zq*uaOK4)sxHPvoD6y*Evi$u@58owr11lMlK*Z-^UtQMA5f)vPc^L-$@lh7Acbfs4H$^1 z(<@wSc%wYwy+-_S#oqrXW~_A9e424E-gIl_<^5lDuJOZ$|FaR`} z^b&%_Y`)>EeJX~I>jukEk|QSA8l@NI@vAXcBYm|(E>)ZBCxpCN!A5~?DA<-=aMG|Mw2fX zeIk*>Wuc8_PqL=v$l9lG^H?eK{b`~lhB>E1URVX49W6kBLl{lbzu%~oi3^}a^`QR4 zyx^djUQ&PQzTd{83#gsO44&B8i*nRk1~!n?p7hzESb6!Rj9FHG`^*a;Ifl@jt&cVA zy<{IR`@5hxD{nUk`dcCKU-&Qn#|21u?zircdg!$&;C1M^xO%+WU3zy1oI_fUNn2V0 zs&-mh+TAMnfkr7ySm>TSpH$(R6!;e4(|P(7zg$&S#W8IMwuGKY`JPGLEunyyfRrQi zW^bTOi6trx9#;b&QI?Lek@yALue1Lnzh*w>cP!0?l)1wpAQ%R6%$3;OCnZ{K-g?G?G?N02h{Y-#^x)29-9XO+ z#J|!i>Zo6-FihnNEB0~UQq|{@D@Y%=>BejmuhBVdzJJDqPtN2-`2u_*Gq#B<;7NQ1 zi|jJ35M{RrAmEiC9pft3jRz#o7WIt;)ZbjHzUh^{Zqeq;-JM^mrV98#f|s5Uq`%tJ z3pjVtR#%QVn{3heaVg}g7L}Ei`O&_8Jc@n{fp5pK60k)r$0dQ-jfioA=0m+0s>GgS ziAn=RY)y(n&D2&U+nvZ)kToiaFdToj2-J4im)2@|`Sw59-yXA?cp_s#4Shbo^ zTDLQLdQJUKmo^l$5kx`9Qxq@0#UN~RC5&Ls7pUT7ly~TDthp91v|)aH?k{fVp0E6ox)P>7s-8=_|KKb?{vGk_ zSae1YPd5U#9ysyVx8?!k(#coq)Z@ob#vrrUUGk3Cf`R5r$|ZGIB7P*dKf*?lQs2pM6$CjZ(aoVD4MzC_wODqc41Tdvr&(dHy`C27&$rF^s%q^p5OtJ=NG%X z`BKc+%cwiNQO8bMd-1RLygYNIu@NOcDSvz}V7^R1#@P1>u!F=4WG^tW5pbtH5|wq_ zJ&Rc5ab3bPxvL)vHSfOMCY6q&P9**G^H*X4r8Mzc`nL=M%7CdQ;esa>m|bo4o348| zyefu3U+nlw1?oBZ4xdm|<*~}BAK%GdgvP+sI(@%9rpwW`(4OnGvyJXrHO#Wgz+$kV zY4P&H3wDc@UC&-paf6a=;4bw@tE}A7eP!R-9<|3B|3q2|-ZC`}!1b=SW=VI;f{gZd zxr}UWBk9AgIt}h5Ha0hl)PL#t1aD^fW-i{8EE;=wK>Lze$Kdepr@$8Bn=Kl34UJ1% zQha@{V+o&wO`oVz-}_x=W@fTpcZzQILZz&Yi~ZU0-E$;^7IEs>%5Su>IvZZkGa7R{JMmASnEPgy8moY@I*)jj7pvN~M&Yc&0CX#< zk|2g_?~E>rDmWzflKm%^wo=B|Q$if{|HIQ)M@8L5Yf}Q!-Q6nE-Hk|zfFRx7-5}iv zNH<6eC`fmUba!`yG(&u6-h1!2mdigB8Jzi@v-f`X6H%x5XYZZn(tvdfF7~k@#pXav zpk=zH&4nSsL!vLP^mtpi1-D{%ENAcq?6yqSP)SJAGQ&!#B%0slTt_%F+%V%599G~M zDptH$z3cBS*fP9FIXYWL?6w#Yeg)Ig_XS6AYnO9jjh`Vh#>=KxBP0ccG8h&ykf~87 z0|AC}i=nc5F-yB7Jw$#{*Dp3ai{}y~(ket0#OqP|4>X*UlPwq5i(B4a9{2mjl-;mn zU3HYcOLn_3$RF&v&fv)>*?9P1y!<9%$J&6@SY!(()m{LGVD_w1zw>zyaRa8G+>xw+ zbf>S*e+)z;x;vX6(O}$K7-$g$6&QPj=pAgUzjvlInlk@Girq9b;!B0x9T3t>99gJ- z?}fB?c-+q=D5d$>fi-m{X_hQMwd~zrZg)P_FEV`g=TEYc5jBGQ>5`diAu)PO>%i(G zZ}9tIp6`acn0@g!qT?H6kpQys}U16Ss+Mv~5~o+OR0I#3(0 zX2?U8F;8xa(@y2V}R!(eSWg9Eu?J&rB=_Y91TcOV*8k*wdO<}-+meTq$FR4zL72X-7D zK;R76-zj=t5x`DDB&WE&JqNID4`2V`ec=y~nagEUEyrUdfD9*_XhzO+N&vob(l zhSE4eLArqEh3&ih0dYqo@OCXPF9&iQAf;|zeLVS6TMmwq3(CZ~GW5jsCsdFX;y{-GN4rLi@36pnq7M@eJ!rL5G}ZRg+wX&6VYSw)Q= z-_W8-#?dWHp>v<;i$gP;O%`~f7Tg|AtS4VpyaFMA!Hm_zKg+Y9-y8}kRqp^qM2FxBeIgDW#MgW!3b2j{%*CZ@kMt`PI zkn4#M4H{Nk{V7I3WGQVZ%2(39I?fvxpT9eSZCPz@QYv^amf0MfUQ`D$VhbmJBU$sN zu-Ymp%dZGbV?!(XH24F57P%YQA~p?E{jA95p{7M|Q})zXYWXT+BeiSqmEP^q?%wI? zsuQ+z4X2LZsV+%OUqQ+$0$K+f}Cbw;E}t1t+cTBI|T)b#)XV znSUUs?W52*GUuxUb(=+{*^8YF`+xH7m-2IU!_(y&p5U}WXE68lyjXPHKSI(%)N? zW4hk{not5%wR-=r3M|UDt?xXa1gu<>Gqt)o79b8>k#L_r5q?DKSXmL_P%5HzySYlk zf1iX1H+C#U>AhZqhJkK-_asv=a#gNT@@;VctIZ&`>mX?`RUL8QEXPdrato|@3_wgeccL`^f!(hX%WYa$M5KFkROrl z=k4`^f;+%wu=Qf3YRk|73&9c%q|TR;&ig6wCtyiRXVUayvAX}ZhECL8w%BlY|1U&D09_ugKt}5)$XSD6}EJ=1pvNjucvp1m` zmLLilB#aLYp@m2o4qm;a2Gzv}q$~qXw4UcSK4{YJuIt;;#eiQFs{SpUK4f7QOTuA) zf?m)6(bZ;g$K3zgJS{afSBHg@oxKw(33t5MQG_0Cr7QvIg7J5Zh5rddeJ(Oq5!S*) zAE*ggbi`&|Mb0CX&noPFqfY&9pqs}C@5F6zD!wQ3xu1|Fy$=D0RrH@Ph;Y8Yv5)Ytn#oBre<)^eQ)g}$ltk?k{^WgMvn1+k zLjjhKy^dsH8jBJ@ipXcuOpiH3SaBt+`atj9B~yPn{DKOJ=}9#t6q_f@Qnw)X1I6;q zOQU=~hRWVxui$l};oDVVdwV1y)0B4tWZhOHg=Fn~e;=k_gevhGqc%_HmA2^6i)IRT za8oFW7FfMDQ=LpLRW2l1+`%XK34-%gRiu`IVG}BTkinweZP1+9Il28f2g#BL`uP zUi@Ol?YGnGCaDbDg`|dlG2N4rppHK1sTJTtQ!_^{XeZpP$)SDPGB0_)bPa4I-uUa4 zVLx}$2%(>KcYNNC!Ty06{;Xx}PdR{H^JF8f!uFQb*&{mpiJGML^&u*yif+3i1GCXS zT&?1WwIZWc&UTV#vIfDQU2md2N}7~m@^nFsigjmauQaOY4{9+HoV#fP&Mf$DHhtiL ze$LEUJX=sg2v8xzCPcW)8##@lNGXb{9JW|tK$8$NJn!QG4djEtg%+2GRY2n#)XP|W zV9q$9^Rk=$54y-ht`5z7WCOFs5AH19O}4%xhhP3Q7J!eeI5{yD@Ts`mZJC!e)R8X4 z^4NeC`%i@uiyWP$b*2qjzb6Q*R8hp8FO9|6^*_dMB+6RKap-m+8S>Bqd(8g?KjKDoTJTwNw4ahosI;VV& zM3l=_=~DTbOV`beAwpkm$Sedh*JH88khuQR% zoGxNAqR29ABVca8qR3#)CuZp9;Qcc5wq?{GTLSfbru=aWgUau=0q}D$oqJ+ zf3v>+&N3vLtIM+U7qrBeqHsI<1rF9+aN*aoL!)S`EkuqC(RR^*-TSgJHuwz9n3r6H zc}G60$n*@62>A?S3i#bTH*4P}8!@}+5|pH-)n#(X`s}%?9H-|$9w<$r2mAF*#F+N6 zM3a@zNlB|aqF|^nY{j}K-f25${>k3jx-BI~-NV2IB`YU2*WVyue*W{y)4uZl>FMsk z#jZQO#oQi@g)L;+{S;;oO9nf8SJj^DLpUF_*t>3kw&QT*X42->19Tjv!4l{apHP-|>Za#LvwJrLiRp#Yy0tFns`*`kVY` z6-F#lNLiU|Q(ek$T^gVF!S4q=Z%XRqb&lyUYe)%)TS4+m<(rA~Bp9-OOBp&Z8;?ge zKIa{@s+NB!tB{o&5R80ZbgF_E0v(SI%B!3}m!vam>gSgYwXy+)Mi4q8fr$!`kDel| zXDjm#1t=kN{hFUYLupCMAkBEMDHbab^oIvm_mYPt(^epY%?a2$J?#ROCYaxVpLSYS zmhawu12BTxzXug*VE2M_MUa!T8%Wmu&k6luJHSx`!&vDp$7i=g0gzPAjuw=cm*vm*g`MrGGg&^xzeaEJPXk8Ie>^ z;n&d;w;?Lb!A_GXcJZ<{pf!o^#jkLzN-7i`7x{iRcdtYDmZ}Jx0X-FNe8E|t++wDm zUgqe-V|xH0ytKp*VV^u58S}3`g^~8ps+HuDl;osx5)%30)3JQ&y$Xx~^bIfg zC3-b;gx0Enr>@ZrpCj{y9hj05lrp>A*BL&=Q;*6^ff>{&RK<5*4pRvI7&6@eAi*Au5MD$w-;><5kWIX4cp=Q_=Bs# z%RB;v28HCB8+;r8b^dmC(PFC6YabpOrTqKh6QLOEzcHnKzQ-(9Av;pcBN=s#SJBr2 zFq1qDkBQCES(NKD8TE}ipm4)YAqV^#*qx%7L&V{&(z72ktNp2BbY5uA@<9$-RDAzDi2F(KX1U@ zuCap#PGja71K53FfSZikf{O&HX{3UPl5$sG{~l-c>AIeh_^QN`l`nZAH4m3j9=WbBn3@pu`p8U+r%sg(E-J$mK%A${4{{I;LyYBA= zBqb#u4%?rs7mDe9W3U3D6Vb!U=_3W`3QNk~v!rZ7U8yEl8Bb&KEe5Y@LD~ce#@yL!3f7Hp!t{lK0> zvb#Iedm}>k)KOYx%+**H@bv)>z;p0}dH7@VE=;Q95tp0Ztc${A2M79wCdlS9#4{v8 zY%;{^T|>f-EGq&Kg}PV|7XIv6vHhlQ`+J@86Te~@m61OGe|UF^qeg=B6>;vSgZ}R* z#L1)^Vg$B(n{TZrO&*DDB*hnz#D9Tik%PZFO{lw@*5cqP!egbCz5m9~D=733R|=c; z@$YkABO|MU%{b#yn`>hIs#nna#+LG{U=^w5ACosate@=61D7k!!osA=)&T7N!e~z$W-ufyx4`)^q4O!GL0j!UPXv2GwdHAhF9f55?}5@Sg0yl9E7bR{Ra z^AX`Dn^QjWyX|>iIhtMKzTJN|{=ky*$}`I6>N(4*O%Km!_j!p4*@cYpSotOh+*?MU z2>?fJwQg0B#*>ke@fXzAH!UNhK(DGeeqeKR^YZEn_|(_iuPQ;X2CGxk)4SNvfVy8( zM+ZPYGP1G&T_`Lp{Jly{LSp3ML1ZCtT2Wb}a(3D<{8CErhEMuDtr|n=AMCw$AK4ztwOb;WB($ky4~EC_WL3YiE&W zN{x@fDff^G(zG;>*Tka5YNNWQ<&u}Jzl5xAK7IP_n1vJ3^V0>TKzIwuSuMFdH=wB8 z#EUbm)e% z6I3TFt4Pp&``tdCa`N!>4GhRBT;%00Dq5xhh|dyMm}OIQ_$7^@$0+O=7YJV-y-7Fr z?(SfB?IOxA5m&R%1vG$G&&w}4oqh-WOPH+dt9RiRu9g~rhgNAgKXQG{NO9Y*v?xf7 zN&a2Y0V&UlBu$5c5rWql;ruOmM^pDMJeoHyBC50=pov9VZ&fRjUnS4%y}g{!-s^XC z8*6LMT}N8V)-PDU?~!2RyQ9NpWUTjLS}K{nTU&N_dwY)yC)7*Jxou$T?iTCD-E2Xl zt{PE5v}_Zr|7K7f1Y3bS<_p|jvd?eo`Se_p4{7CC($p$MhWi+yE5Z^_$Dl-kmBwkU z;v`)pO&1$oWd7UJX?*GU5tFzzM`OSGO>sv4ZZ-gJm!htjDLG|zImT7TY^L(Xz6_+w zqRLQ6c-hT{FDFN_({RHN%vzStyyk;LAwmVhRIcWyE;&i*25@i zg6Gce!A<6{Iz9!?i-yMM&!1rvBJ_v1t12tOU#@*^p1%jr$Ll`%I!Nagqd$etGw?Q> zG<`|U!z{W_Sf$^d9eb=j3(Ss{O4TIP)w6xCKes(>vvLXwMs4z;p`o2Y0gPr#5`dBM ze-Ikogf@|l&c(-r$?pA7;4GeuQ%m>B?ak6Y9uD?LvVKxBRLUD~A*Q8+Wa4@xX}hK3 z8-=8~S$1uO(xJeBe;-3O6e8MiTfUuBx+=T3LYa8PVGM^euNnWm zcjS2dxUXxF1tEYp4yIlKcmr6y>{isT7`eE7<1`;Rvf>{`8smQG=;t`L-3$WFU^R1} zvcft>?9XaGNl#zw?(%robmRUe(sd;2B1;2p0$|g73yVJ6JLbx~Ocnh?oCs%jS49oC z_ei=Hg-_WZ&H8|OW!Spe2}Xg%{oJmP3gxE2hZ27u^2f9;w2|U5sxqG`HMw`K=hed( z!?N;=A63KoRjYLNy?b#k6f44Qs|J>ho%dexI+bC0dDu4P!YYk}g(U8~87hY9`)r;& za@F(0%PPL3n=>(oU=ixpn$3oir_4p`C#a+OFn6?mSfNPxYUCT=Md_=ua&9FdP9;39 z{=wdPoS%k)VB5^%Vre{KZAQUM1neILPt|`FB0Mk zo;6F}>fJ=>Wx53$dvMe;Q!>({)xOwnULL@lI3ScPsE?xo>*9m3FK%pNjG~HOP0Nzx znXyrO6s!AGm#;3i!>6Qy(uLDBJaFPD2ecl@VG0a2rY_F^&h%$pb!L|hBv%wI%0g*5 z5H4U33rS{5VkgbHL!9H*ABy`(%=WO}V7HAMXv|1^OJU(kv)j?jaB`z*%P!}qf|h9^ zD4!`;%{ZEnlk-6S+$@%Qw!$GF>uCugGcs*xA6i&P`1$2cH0qK>h3N~Nk zfbk=Q&F)Rzb(quv6FzT%F{!F9wK|8*`rS%`lE?4(Z|j5%#y6+q#!+`O8&cKS3U9!W zApld!JglOX)u*Pz49~_R0Hc*0k;DhXb3oJ-YfJ(lrAVLrKAN)nKqK^A(|;z}?Ldz@ zv_!3=<#B1MrtvbQxgE) zh+zUnD=WeqcPuOE^1pt+=gBZP@jzRw8?S9mYO}WM*w#kn0*?tEqHJ2KQ0q4QpY3h> zN`H?eixlH!ut-;kdr-qz77$P}!TiH(YGa7gvpWK9O)ji(#~ckGYB(E*%}}_kHP!M-n+c@=pNQb~l$|7uymQ4JR7> z>J6r|vtV+M??JA$YK4+hS=oOM8%xfH7y^AS*di{zEy*IspCr;ra5u`%MZoVmQZ<_I z1siKR{RVzl;2H(pdjO;e1KeOvb9BZH{l|%JoF@rgqR<=doz^=9A=y{?xaqv&a^ra! zy}TLmJ^c*Q?4uWMkB>OwCLE+%1T-hc1T>*6pT>?;liqk9$oCmXJ>lTMeg=~{gr4Qw zvIIv)TSiC}0JWMtId_MpE>jw!C_?=D$I#W3=^GAJE2kV~n12kd*sc85>_@hx;ij7M z!H~F|jr?HLB}PT_#jKY|_Rg?IYC>F-KZ-B<{2$MDFACEb=QmL{#SfNtf-Y%t{8G(E*|gnjsnWl4)>z z+c@mm5UxjkCFpY{bY9sz%Bg?gcD=Es*Yd*>DxzIHcX(XvXr24Hl85co`luGA`h!*3 zxI(}GlP_~Y>xs4_nM&z5hh>2@h3vde?CP|k%Ei`??v2eq5ykL&`C28v&CC*Kqc&l34t;T0DPSH>lr^p@Y=_6G39V#Rk%QM~;m8c7%H7=fDxRhui|Nl$nl zVq2uU?LinyYlZgUh@@4tBn6pc4@~adaxJx9ub_3a#hBHC3l9lV+=2NfC!a~yJ(HH- zr7k^{7IbrA0F0hGbp3btkbNo%YS*XohbB*9#5ms8e>LX`g4!~MH=0<)NLZ&VxCENsx(% zLaH0d%tx~}L5E#0dLK^tyeAtS9qY8w6G1*IwNe9bz!R3pA0{d=@Na{;w>C{y5Jrmt z6hv22MR&W+Y#6qG;iOS(6}ejQ7H-)?HI)4#&s-}N*0+?)b5pQvvGtB8-dib3?GKNp zLbseYPtD(GU09BA0N$;T*cOj_i4jwyC!lQW8v6Hd7+-#*aZgDc`xBNJ-bA72@!5)^bBZ&lxsQ*PSpXB2+A!IJn&O0wIyD=OFcalQTN(4U=y1MGCnK|2N< z<&U*_(;B_aXBWw&vC)wKF*=vrV^<7_?od||lQ3pe*f-h0-{p}N-noLB=>$K&^BPJF zG8APWT2oW~QR846uRtw1`tIqRM{FV~{9W!hwS(H%$RC13ZTUe15+*^zgVK$)osA`k zeMB1itCRY}1fATQJp>9DSOpwTjKLQlCb@#Kbh$s@P{}Pl85F=5?|K3xuJUkyj@l7c zhz0TyMTQ=FSCN&@9s)mAmXyU>7(Hb1icj+WUj*|m-X#1_D@GL&U?aF2X(y%*-Hz%$ z#Y(cXzVhLZ4YFN~bBU9e3N$1V`6P9wA~o7`nN^WU?(}NZglX9={PEHM!#+er1?K7 z+?(`LV@xaN=8GQ$Da5bhoU5Pl0Q2t+*;^Og-6dRQHUWXZT^ls^ZFdZe$^bhaNNm;` z(IbcHhjw3R_6{&Ze3*hTW@H(Bc1m3D$Y9<|G7_MO&mF*MigBaPDT{=7Ivp4yiAhST zT(8~M6Jtg`B;>^Hr4}zUmA$vur@YIiD1+ZrOF5a)Y!*-EsLMN%%h*R^H^dXgJ0|VN z&ek^f+Tn>!%xic5+Sc|Y8|xf7jaVa34=7}j#`mEz#3aOK8(VS=%2`HcX6clz*Cg{c z$=KMK zY#UIBGLY(>E*UOiN03#!l7r-tiJJOybzLU11Gl2QbY=znlB{pLTX$+Ghyw915Iw-SF~(u@Df9Yvf}$3z9dNo8j5+g8sa!)K-u@cO)_~0=fLe#mCcDfS#{?ur(7G#67_U*))hCJ9 z0I15D7H38Ioe8DR2vYpoOopSFdOh?@kta1y0CFco>dPs%TR zJ=LNq86^=4U*%c74*5kPA!-C@T6)9g2Gvy+rMdHMX!C84u6RqC1+-aJj*A6VblqNr1MX0B}wz8~*M0fx1{PVoBO8X{o9-t{DM;>w0x#Os>p~JHrK!SVoRo9Pg&vb5SkN_kkRLy zQg7NE5q2}}jQGUYUcH7%YopHgx%WitMxe?Vc6xevk?r$O=)&3g!T z_VJcHQ)JGw4}HEHna8eq*2${Xz6!t$1ch+&KF@ZMbO|=@uxCyRd46EEefq^&?jrDc zj4d5?B^hX}U2ap>fx*4W-gJ7B>;JD2BGXV)7yjuTKT;+39(3JOPRK$YoL1=!fa@?Z zb3~>%`7tGCli3PaV$E~dqDX3M7vk6CpKv=~ps6tbCKAPWm*i4ms+48^$Eq80Ss3RV zJ>)NkP5()8Ez*HVQ-tFJ_xw$BTG{u+`3XK&a!cY`g~xBC&L0cO&jx$a8;f$X@EWf z-X_uH@UE)6A1iM;y!>vlf?N9K=S=tzy9k&YCYf1A*ju2Q>d{v;I>mDaOn_A&a$Hi z@qI$hM_#X>3FL^JkFp|g7}4*^%*^L-P7|A7w%I42e7&`(^iaR=Q5W-il|@QL-AP!u zN8)E$%($q?(8AxhHtrEEwZKERYH$R%H2UH)G-G)>J+!wQSZRo-`bV`09hd=-r% z8uq-#`Nq^lBsoS79=CbU4gA#aj7=QA8ac*XIi*drnV48uXm{E$Bjn*G5Ic^=YW3J> zU~Gn95}qH3%(o4bJ9zh_1p5^$=Eu7rz~x`1QdtO$T1P&8#ocq1nY}{qs{8J?1Mwq~ zP7hy=y%&Bk1KfZ0+U$x2*4Rxhl>%Mx8G*&rN}65Ok@Q?L5hh(?wDuw^a$uzZLA^0! z{=5G!61upsmc#$hE)yh>|93uK5NeovcrR>@cKVaIl=jRwhYbx_LMbpLwlSEO*!2*j z?F)iLB-&3^Hy_e?FufB4AjjsP3DOjH#t_^q0vEhmS)$Z2zal^U*JBm>ntUwr`S~dD z3)2=UGT*?8!Ar3pGS*F5x`Czz5C!acDJ`**JLINy2r5D#8=llQ^6~^bGr2Sh41EH8 zXTz=?m!IRe#&T4&EDDP@yVD`xx6~NM1oq6FPnW4Kr$ST!kkbA+mTKnbmX2#(O!O*x ze06aZUnL0aiZ3rO9RRd-I9tgsC^!g69smdzbYoiry$-|RKq=$-M(mvETVS<${y#vgzO5q{u^Z5wfM;T;?{{1N*U;4>iVD;jtqhvu*$VMc@)yZOD!y$MxM@ZFMT zlZwri0c5`^)|R)5T@E5#X}~Jy&R2Go*}v^bcC59?%CD?AsW2&%aDBMr%NpYUU;lC> z`VZste;qXWS`(mD7%uW;@48M69|W=ZJ6&(f;7RYJq$G8VjZ<+RaXPd~Y*{k5s&-Vl z%)sxPApS5U0z{IgXL3Bb-}ZRYFo7pM=6RVh+U*#WOo8X4l7*9NeY_VxehjHHS2|qS zWrY%Q>E7XGed)|oe9`P~zY3myvu1V1rF!U&mCRyG%*K^E@)~(i)*1*T0Qtd4+Q!A40_Hr>8Yd`qv`y=z<`+|TV zs=dE%U+v=m_u=?>%Lu((1~C3(8D$IfyGlgc{rjLWd-a=XEQa?P(rX4`#CD_~Z}0c? z-%m^Za>1SH7q=nH|9X2+U{N$|P$lQ*Bf4tF<;!o=+t%kk_q8FvP=|p>ZkL|LL@qzfYHdAw8{j zq@#*lz=TrnJ~M_Ev+}De*$B1%fc@f$EO9jFYks?=jEeeYCd&NR!z=lvw6@Mv*MwhB zFaI_AXf$Bqqr3o)Ud2jT8$c5`G&01-B{XzT4%mA=i7qBAIzhwEF*c|_%@QA zYz>6c9;>ipbqYeO#g4#y5F4hCMk+$rrF)(S(QVYGXm-&~H-gO}NbKx3OBB?z-d<^u z$Fxx!4_y_!OdA45?@)&=y25GvO8+yGMvstq3UbM2Mkz5Y)G_WPqiM$7y}8h~@*<@Z z-pC{Y7(=vqkVgo)r|>$R*r4I9@@?3^)lk8+8SJWKMnpo?)cb5$p-GoAoG@&He2feU z4%sKeX8)LhIh(X-t1ewbcHF~_cPXBwrJgHZouiH zl?CiBE_&#B0X4|}o$u}XLQey!ZBqF!5(uSwm5 zSlma4*uag#XSr!7hVl$;N@(W&x5$70*W@;LTnPEBw%`0bI710fF9Kxmva*e)lX!x$ zqmYVgWh?~1Mw=@9K}u0~f;3|A=d8wb$mY-AB#OWF$Fca2wK&q)F*2NW=AxtG>gvC2 z1!HcK^V?(S@)wp*a(W&|FIs4QG3rhzM=!?k(95&){AhDI^chi_3fP+Y1DTM|twp{N z9x+dR00Ig0H`WuJ01|vXE zECd~|XW#7S+kVPdbkpcT63;N%+&xL$8JIgpJ5jLWL_siL-iLR-pYL7W)GViv+GoLh zffkb`=4tTbfQMwM)i>(Br|;r6AVZ#wVHwlX!Z5SE{YCMO{bJ|o`akNYC6No@)hYFq{5n`GG;$U^`kci0NuJ2My zD;8X5zU{9*)&on0`ExqJi)oTEaU-IOjfa3(Q}DrY?K5I;r0*0kPPm}R7Ulq=2$Z21 zAN#+hBk;Q>PXBoxUw>^M7f|8n#uqP(9Wu{=k9}h$l`oDSo1q_e7-vhl=~8LN;)fP< zYa;DsQ~51$SaQ|nQk3uYuRN@)fJsB1z=_Ypo3f+Bo)#H-dKnl1Iu0Q*HOJUo{gc^Qk-I@c#OUKe8oWJu@R$&|zA z8m5-QuNAblLl?`RGY7)RVczO?a#3!>?BRrtckb^Yyd7`PXuP+TD8D@=YJ6U9aSV!& z$F80~symGd>A-|jqaC!$H1r%cFTpl=;~H#MP>v-9W*WywEJal|_w^5Cp>V8N!G^(X zUJe|@3X@A`+1k8S&KG^Py1ufyv#%~M4bVu~ez19)W-o~)+t`QNJYTOiZ_X8WJMHgq z$n$FO-ONuyYTyRq8BmN4oY94VM~RWba2MCmv8ac_7}r}@EN`*|qR*>0lSFGaJQ-~i z(kdD&v*l$AbtN-O406WrbYK$I@CK_VW+`2x$*vwR_{h}ooHpR*yf7HJOQ?{;PZT5f zxvsT|Uj5gFO8wsrfon(v9u7o}#>ciV(_H9-Rx+*hH8%7&D(c+$#wT=MQx`&@?x1ZK z&<250><$KdouOTXJr4Kr#tn~BRc0TEzuezuL+ zR~+f=(N&qfszc$!43dgY$1~(z6b&`YpW%Lp6AFwcnKwjQJ{tL>BaSA~S#?(ejNyf} zeo}*#K~!1!7Ge!mZi{A~=G%D6zkt|q^-&oA=`IG6NUE@Cus5_OaxGYmImaFuIBkq= z4riw>YH~k9o=xJJ+$NzfuyP8h30r_F$Y*VB&CL4tykJ&ubE7v34GrVOieG#UHxxG1 z(olO*P@rA_rs+`m)!Nn+b^Mpdwg{vmPEICV)#fN!;1O-s_3g2 zz5e~-G6kIne^FR{?k5Gk{K=#d{3eIx)z#G|&A8dH;v;aHnZ)sta==xFY>e_5*O@Ts zlr2;P^!Oq3pzszD`A(v}d>BvL$Et?)+Qj0NZ-j6%xTO-Lu+X`BfMZm~S{zkw0 zYnM5f(lGDpENoOyC-I97ZBlLrFiy@pDsaE!$~M|rO?I#4-Y7ePn?JJ1a<3^{hM$q9 zLuoxX_?f>G{nl1C9R#MGl?DxnwMtFq6U~@Yfe8V=VINH;@DXo|2NH;&~_J)Y%;bKIBmY z&bm99Fhg+1jgHUgax47W0B7(zoqSY{+WQM8yO8LYp})pqvG9J|N`=@m5|1!Npg1t* zc#d6Fxf*8q3mxID-rVhL+n*2Q+@*!-T-DK_ND9p^I_Q*?A(kO(25TkfYZv}HaN?lE zkz&Dx|IFoT4yjl|j@TfIMk_LnA6|0bL=6l8Q&cruz3b3@@*=r38v=+gi7d;92^oh2 zzx0NUum1_Tt~&M+qy^Wt>0Jee2|%7+(W~GUVmM{_`Bxp@|B{3A{Q8|GajG-n+8Y1sev=Ye zKly5Gm^8X56g)m~%7umVEf-4W1-@YaH^8Rn(Xpujd zmkw<*V&80hX}|d$?Omx}H18u;n>D#)CuepDYpZ{)0$^8#NvX--!l(&AOwjDCQ=FR? zn5~MAlIUtB&(nKIEKv_nNhi!8M?DC24(fDWCMQ(ENvV^P@>oJu!312eI@^M>gSH47 zZQ3dA(Qdm}!L^Yz?vw6NF}(%wx(T$3Icf+pJkY&U(5J$3oUEX4V}zM$00F~#t* zyV;)TysRBnl=eAtE9BAGk10(5;#Um;eDVEfeI`}y@*p^2$-BxU)mYldGJ~51srj#@ zwQrc0vNo4GKs2Q9qQIIf_z^BRSz9^|4qgw+%l{|J2IRE7_I7`b!TBgqVu+$+lsC}P zRCRQ}w{QflYYfbJMZr@sg>6@7NIjnfS4e?^`;5nj!gzg|C5VQBVI(*byTZDW3QX?` zPF7rXWd{ku3z*%@@&7f+>a);U@0TowKO4dNQ6U?>7wYXFpk7zP9`6Dh>ew6fQ_6RQhy( zSfyGud*iK&nFVDS0i|vyrr%idb}a=XPzttOFIWo-w1H7)d}~kmF6qA~FhH&c^eDjn zmV_L_M|Yl*Y>FL9edYD|CwzQCeB)=*fXN5E5Ugr_NL5&G{Uh{<<8nh_+{i@$7N#Mj4h@=#6eu*O=5&s_- zAT;jl?l-9k0zd>$I39%=<4iDjD5HF1jU&qrK=5@&L}CHK@c))j^rGKrMN^Hz8tQ67 z9B;JQeQ3(kA~bZRT;=rb#ms_ri{l0N$;fiv`iY3voQ;Jr%6}t* zr)+|P&E<}tHefVaK#uP0xv%}A^^dYLKBdrK5wDc=AMmc%r2mR1I|+B(WW-83x`Y#I zj{ob{qey@Ax3ysn9rf_N)%0um!NE*ncf0-^xs%3v!B{+L@kw;G;+$%MA<`Ox)8Wt` zYH$w@hogvw3d5+_UWk)!>9HGboORXXCC(QMVc%wE+*(@qoi<@iKXmT9Q@pYoyf!5g z;QUh>m(x=YS$f*n{bW~#ZxK_zf+WRUQaMfJX_VSox*QQqpAdZT5xstvpm@o;wmCC}OWU1U6ffUXVa90(ckJ#C*jQCx9{(z>DAKHJqBAdT&Zep(X9 z;am3$MR zPreDNn>Q{|C^dNa(;1RY*F6_Sa~GmbWD2p2G)7GOLuU3idko8UUnGP6Z<8-;yeVUD zEmr(Xwp?6S>1)5~T$eXt+Cn0dZBjm0OuG$RL=#+!0+x2-IOtA9{;HT8+_$WZ>{p1N6e1H@60G8a_ALLMmNAKJ% zo!v8*^`Nubd(_()R}NpYr=SC_UpFh55=SQ_rArXBik!o2qBS-&PpEqN#F$cYwf7hE zTDAwL*H+NPCoVb#uz!(*4m@UboAK^0mq;5f#;~rKTs3!WI@4Ut<@4qvORa-l z4=1#KAy~ol;YaVx`p+)S|PV=f(lb5l^=`x-4 z$9&mpW^cNM{8t0<$g*{u#>D?>Ht4!c`bZd+;1FOD?GZ7>jYL~^Uovzk;3!~Gv1St+ zu!S2dAN{gPqtO0MH%JnJH!O{MQ%iXLccrY{Zu#m_MMz_M*si*Hep-FnS41qab*k0% zg#RY9>Bhai{S=eabiA?HcXRoSXYClJ1|wyqN#R-2cW-B=(LCt~rQS+^^ZL4XVZ+x* zy~zRNX|YKzo!N>72x`5k;v^dyZLE7F2wFOcFrS z093}BFuKd{um%G}v)?BzKbGQ&Lgq(3*1jMCweoIP2x`mI{UI>6e6g6r=NJf8(2k5K zWqWMATv%A}SPvn*9Z>e`YV(C4ceAZ%c)~pu#EJZUyjcaIE-jDOihtaXqBpDlqLqjLz}4Vzee^k>X=70TiKDx_`)IkD5Xk7E zB6c7p_Vx8eUAQ0wGLOsa>lG)mUL)+m>f5DV5m|F{Mp{~0G7+CtQr<*wyPLLxf`X%! zR=}?H*e^^WA|Zh?-172RcEwqj2f^4Nesm zJdQL4p;*9&A`@^49~c<8_1M|jnQL@rgolTR%D&EtqAs>di?cWO#tY6p0T1}jCtH@% z_ZyIWeSKf}srDHNu3l_DtUg2h_5b+*z%U32(`mC0eZ}WO5xn&t2c^Y)PFsHhkK3V2 z%rQyKb6^vI8%hm**Bd;}jY7;)q-bFG{}*v=qN(1;lcr8nsC>P~v{VobKQF^)Gff(5 zxU})Fe&tIL74o0m3n>*TjcVdXHN7^om?WQu}LL+JFxcj{*H5l;wR{4B_DfCgM- z+1H7rIQg#d<2k?DU}vKh6@qQP%bnJXA@``%u;3K`t;dht$Ox>xP( zQ6pE#BrInTe@mdgcl=+$+*|_$0xb)yd+L>zFiw5CZ#m{T15Mb{*qpRAzb|0jKm z|F@H-&%x#cJc%`H-71pn>Ucyh^T2yU8+UfneCqVC=VfSEn8q=TrcMyN0Y_SXvpu2U ziFa`JGQ`4WVC8uI2j;KkKREgAz5V!aH?f%Nq7Gy)ksR(O=mi!QEiEiGmqS(XR?VyW zf|XS8)D-(CC(yQ3Gl}fi=EQo&zJ+Zfo;&TmpjP^Byg*<4Gg!CjiHy8)WZ!+YQ@^m; z2Tz($9J^Jr`>$sC0zrpD>hJ5?vFC9S4qMBScE|X5=K?%4UM69^tP7;-aLl|FS>;kp7%<8F_WAAiv(sy) zNC~3QLVh=Av=DF=z$(z;aPMw4sDSlXktH{K|4A^B z%`doep#K0|LeMYbNJGOEI)gDJs`h{O6S+tmb@;a>$D-dhMA&{SEg&dJNLG-~^!?*2 zEiJ9Ry*&f)O@@YsK+-Sd=JfwD^_4+YcHi3ws7Oe6gLH?|edzA)lI|9eln{_sQd(NN zL%KtxySt?O-N)zmpLu8aAftnvbMC$NTGzT_8)TtFUu{6Zv(~?fRv$14=zRu?oi`Sh=Y!?=7Mwfr5l(_)`qXVD^pgvD#(p6A2GbpNI^)LzQ;{rfQR#^U^E>oL>f!Z--vG>M(8Q?VkdB z9>vDS#p4RE8? z^$zx)sjIJ_wcwY~wTu|o?T8Xaar!%iT*ktyp_Q>TQOzT@O^$q}{~G50Zzl~bYF4!({EadHuy4Tmqv zcfLHo+t{+uTr?QHdd2?in{8*r;$xDiGS=@>tD~Fi*IU%iat2KzE6-gI58Hn-eED7* zP!J!_z%GB3!<{N!R;o(Ld`v8+VVexWecjsDUukZqqFNH7{hzH3@s2 zOgtL9e-sfUOKM<+5c9d8bhG%Oe+202Qdt=@R5zRejtaAWV;5KJDN5xmBe+kY zPkIpPJq&Hs>Dj0dX;X2AfKL)Ip@|#Zy#7-l*qtTz3AoUJV2QY43u)?js6*@Zi7^ZT z0l~k&zG}S^C^KwR@bTf(EH~Kv^^(*Ktf`@X9YDqphsrOE1;F!Pov1=X|5Av7viW-v z{c-CZvx|$%>1mkh{qXX=yx>KlqHzi}82o_;0MZ2KKbHf)+lkD-m-7yQ#0Y)bJ4qi| z!P)OT<9|)e+tuK*&Fy>32@WndxU!AR%*;f5K(*HsH9uq0712FP}Ld`WP|b+z3zDP7sR@312ctDU?*~PWbfQS1ZY%1e+u}yc=-6? z>Cba$Dbf`t78n0TfVu$vwL%*AFaK-Qr-10_*MQOF?hcyT*UwHs!xDFQ)WqTr(c9w> zKt1w#rc(H)=qht`8~5|sub`L72fffVW~iE!NWeP*>V;KUNcWmlP_9Bt@8<*Pl~6xg zrGQ2$0!$(-j!X$sZ}wxb{&NRWc^2#_mk{Nq@6q4>3BlPa1qW#Ckmy)^n=_7dJhJs% z)eM}grviCWu*aJ@6dQ}%7aRk32c=;P{77IlFqFN48U)<@jb-az2Ko&fwpbK{TnMm$ z+%Ero6OsyH?Ynw#LlG?lxHc=YX(uE$$pXEBx*O?rcMnk^3E|?D&AUj0a5cGQSgZ)| z3@JL&%rLU^SCRBtq~CQz8MmopOJZq1f6b&DyNe}J^K~a+;pZh|elPqMtu2j;9vQ**?|JpI-DLb1tIYJvP~#PC#y$Fq;=tDh$ViVBw5K4Zd^Lr416^6qa{*!37n8fItwJnn4&_bICrPci-b^< z%z_lN#*s{eMWph56OUpr`sEk!W4?`B@%Q%rVXUpG&MM5C(J8H8P{)*?P*TV4bt+m+ zph7<~?HE=Mi)I{*crKl&5HaP}q9)-NnaNPMu8@}8vM5$rj{iX2E5*84MQO?H3S z0<9**IBdVMzKk#u1~VK&q>63YtN{wH%KEtb@w+@Ir`e{)|LhE zn870=+9-eAE3XG9?fSY`NP+!ZZca`RRL6O`KtxK~>!uH`UC`VDYr&!-AUZ?t47)RY zqp{yeVz`V*iKy)De!SFj-vq*L*Dk@(0F&p0wf*URfiWJ^f*?vKS)z;+Xk~5ZCH^Vn zOk-<=6IcYndCa_9*ai_3t3aUhCSLmYE+S$Re#;ocE<-iM-t~-%V|F`Vf^Yo4TI;`pO!9| zxF0#be;p191U1Pd#e(qLq)Zyik+fCa zflEB-3&02OCg1YSYYq+$kFRt94=C*`VERW1P(vfX#5AWLgtPD1WNFl{m0E&djzF7J zo5+%frwFn0t|9InU?YT0@fbDbx|P$H;ovgDoRXNZenC!z(#gt9V><6XDKj%g(J@;& zm5!!A4N~dq-`q+Ji-V?E9{6sq?ZuipbSDpgc&@bJIFHw$h%05z0RrR1&yY?;Wr%!;1OB7xi*w zh(|7Fgx%Tr^HEFso78w4MYP$K2`dY;q{0BYBi|3B`aBdeweOA+WLI7QUjxk(HY}w1 zN>itbdjFEiyLlPPu6GxX_Y|iZ+4SWvYj${h8ZP)<)|M~6&5x?gb z4$F}h?$wI9v^lj-CPMth;;Qu(bieFQ@()(#Mlez!71o#Ro`IK?4HD{P{YEZE(xI zPmutIbZwv$x3}tb?gdvXs^B%5WDLnBwDGLyC0RdydT1L3aB=5+tHX^G3l1wH=(MeD zY}OSYHxxlJ!59^|($ib>ENmqtB#3E=0rem9%9RQ2It2{?FV zc<<4TWC%p=H-a<&&%R4QV7RXB;qdKYTXQLBVbLy$!P^Hl#RCtI)A^1vvq5vc(Oqk+ zAaGHEroM}UDI6?nA9cYmkq5S8g=GI@+DM0>U3XW`gDCWIlVuRW16&4yQEv zOy3WD!QbWUwWq|$n32W)-h8+x6E;iIl;JKdvev7#pd^+Y1nzEP9Aols}_&;I!@=6 zt`GH5TE03Z_(0%8I956^EF!Kh#Yqjm-nSJ*?ORIXH}Q*z>88l(zTl`3eP)ZTkOyw} z)V}dnK3NJ=hYxUXQUkx^ttckRbV`T>=i|}RR@kU}%?>#C7L~dl8y@Ybv4nk<_qrMX zi&5#Z&#w{f$Qg%Co+SAuzQlcr(f!#Uw{+k^71{ePo^soQ37e@0bRXu#Jeu^3NzwjP zU=+FrhKR$fou9m(9sOT?P zqOj0PGel3++JQ@#+wYzmdR^S)2;EXb{Upy=9=qGVmzSfet3$7?I`D`qCH%I$2PoN0 zjSViC*YsMv69Mv-3FgyfXCm;YC#GH?LYJ49=RX_bKt@HKSXvqh$D~2%JgGfy`r`x( zMqgG=&aSpw&8G|-A_icZ2H*x0 zw;c_k&?Ze-_Fo@ISiyZdCgNhAnvVMTk1l1C=N2 z#T|+=mu&s-wGCMy%3Yw^gAjM{S)NqH_)j{a`yA?xJS?WHZ5$n&OV4U z`i;Fg;v0~Cn5su$MSxxMd~hSVKKW#2ZEtYq_o7^XeG#+wRnUA_+3{Mf?P4Sp2H{`k7ZrTjCD3&-_RREFO^a{9q*Jedk;JHJXIP*%8_R8=q1#vE~*`>xXCr- zhR;>g=DdnnH_1>?xc%}u`+K6_(FLt8UAHHVguzUS0^S}rOo3bb7)x{(Js zo;z1E>#GYN*Zs}F+HBC(DS_p|e_pmNGs1K8NypQG1|vLzT4B*;R6r}K`{r!>*t7Mz zHO49hcryShZuB}(63Pi?#@w|Q7e|6l7vNpM)wMzd&|qwrTZubazkdB1CVS}a>WUUh z4&LFJT6u5}f_4tj=|EutU{ys$g{RL1C*UqYJsiZ95duH@95sA0WA6vR^v>Si8UVU0 zK9*Ni#e*RXRBAgrJ75~w!3y=q8X6htF}Lsb>*?uPgWq@Ml?Qet;AfK~1bX^>93NK( zUarrsx47E+J=*T{0jm&MtjwTAMlh2GjE}Rk_;tNk4^%N?KTUgIgPZ#7>8+65Z3gXdvDWp~+!F`Ge;n#r_UfZ?o|8NL?{DsXZU`~KM<4O( z3GziI?9o*}h9j1W3Xq>G8P(KF3!NKf$%D;1ZXCp5`4MyH1X7N^NrqG8Gv|LJE$vjX zz|L>3K2Gn_*&K<>PUzMUPS8WgpSd{lCWEByYrl}r^9WU?;5}( zWY!pm!=z+At)^&ozq0ur5do5~wt7e-ArveJm-#l4h%5fy%Gu0YTy9T~X^V`NM>8^1~ zOm4JkVZZbx<=P*w=Lo7$>1{!Tp3uT9tKX$`D#QKaHazOOBa4B9v(wCDe`ckQKQ$Fk zAV@E+^9eRoc~QRv_W&9br!>{?ow-Ay-jI2LpY0Xa929FY`{Xl4R0F0?qOMr*zfyXX zy8>%XD0XCk4-Yo_AmX#{`BoLhdM!zt3U4rMm;-c25zqmR0@OgHVqCsr`Up`|Q%W%0 z5WZ`zp}*H<>Tpx$-h745nGl!PwT$~z`hjoNmfjCFZ=1!$M_t`iIdf)o?XcVC<266- z9qqEm&FJQ~h}S&)=CNk0ub0n&Y!4#aGFRJ;{NozSV<7078E3B6t_+JvyION-Bd%C3 znW7yEuk;s|x_xPuB=7BM#pFR%O86NQiHiFHzdq>;c4c0#`zF9m4;)+2TL~(sH!g`~Twt z#P0p_mE-;x?xcp5m%aXD@5>S6?`EIqwY2_?JG$l%z5>mQ2m`V=CAnBt+{=u`8wgd{ zG7d;0soP%aOqwkjVMcA{+F%RZMAF+$m2HDP_!EIBeQlGXTO--k5@T`UtD6YY=hSQ= z4}FL~3^}ETD?wUW@!z^)iGXN<*LXwg5m$ia!Z1wSeJ6vBuAsoED9KzXeYmK0r|m0ihXf zamv9kTY(~04PIPXIG`sQxjRkPFTZ{01UcP@uXwTAjq+TqES<NvMpI~Ey5ptWQZc-uWrDfxcT0t|OKrKNV=cj4Ix zZP7;@IAj^|^ru{t*8N3578TzcQ+2#f3RqkVldXYdMt**Nzu-1PXcOG960u;JuT)S` zTV!cwQy|JVrk~aH^9rkC^G77o(mE5@;W(@FrQT6ly_a>U?{r>yj@-%tIfm2U32knT zFCn%p2?OgvL`np;lCA;q!w#yEv*vnaNA_=@7uQ2LivQkXCrQl^}!`yV?5Tk>SJv$&ZM|~Uj_UCYq30)y81NfHy*&7EltSZ zPn-N7H%_=L`afI-2Hh1l340bH3-P1fyzWuH_yi{aK#Pi0XtDNW&NZVQqd>CW;vj4; zuihMKn)swx&$5k~Js>9GB< z=P{H)ROCyl!_zA(2yHDSx4#mn7PItLQ-yVe1*is@RifnTs7~4|bStZ2QyQ;vHRvI+ zIG+Da)gx&JtP;1H)^~5YTvjT2-`m;(rCk`MLrcgy_oV$)5BlQYVPXSPriX_YP8S2% zuKES!@eTXF;>x>?E0^2F9WOBi%)`sEZ5uHtyQvHSq+rm|yJTTk|J6Qk2IZX($)dEF zE*#j%GW3?QalNa{vcu!y3bo(k^l&i2)t2r){VVur>!^x`WxP9;l5PfeNLq}5Dsbv6 zO#K3|T(O<3iq*TgBkHrQQck& zWGiDUuIe@G2aAOK5#;{-$wa+U?7tIU-a-qiA|8L{ARL_47Exrh&RLG343;e8v3nLi z+tJ+k1yjoEiD2u{*wobEwEhB6ILPOxBy``&0zP$3s-{;G!$VV%FC>q>eeDSmfKNd5 z_hBRJ)0DaY>ab09Q_~Bra0gOZk9`alT$ae}Fq56Qow^DFjU>m))h=(T5LcTB@TE}~ za>{@yhcf!bTH*IhthQ?S8Y=?b5N~dZ!;_a%8Vkk?a$nNjUvg9Lg`}-BXu}*GJi$in z8G5i$iP)>V?lM#GMw?5D(+zqz#w?WpI4v0MuU7_cOpY;LurXdt9v)!c*ClW}GpWf6 z>j*|?H}+aD5OHBBBQ|7AeTvFnI8>Z=%ckw9J)9v|Dk=SUKBcB&=3@5#8K0}r0G|Q7 zd6;7NpDy~zCKY(eKNd=Cagy6M9rd|zqGxMc@?omS(c&IXh;|h|g>&HBr^SQyepp;d zlDRUlQp1VdCwPCxA0wLev8c$2=g1q921pE(>BXboN=J{D^OtcWDA`?Av^RPT&o-Jw zRNo%ZO0(v&d(g$CdT83duEvtdHMxC7L7~_3lRUdE1Oic(Vmn^qPbzgIk$p31zM4|_ z12Lj#tb!&|^MrPY7t3OQ(8lhBM3u%M*Ap${;ryjQ3Vnt56~d z$~WZcGK0;T3RCWGlbTd@uk2Jq(hpUj%m?kY~R2?HD_vG)5kUcZkN zu5i4-Q~=Ld&q#E~qA>?p(*qg*mfY6z=(_Ehl&jXx)E?26E^h;%`cNEIZsdjqb8qcM+Z?T$O45ULn-(B)b5OCtHUg*Z|lCge-i!t#eJ54qy>PbgVRqz1<(!#q}*q$J2>V zowSey$Mi+IUMDhc8b=xd_sB)XzMBV1MQLf2}6Ac1Tm)%#W?G35!q5SO(2oaj|dY@db;1txpO4PTl8F#2~i5SsW)6JJuJxX zO;OR58R;a(;6*H&9S&khy=eHq`J_==_#ay}cj`xlE99RXeh;X=!5&Fn-AUg=Uv?_g zSSm}Yol_o|EjAwe=O|%OjYO2u)Ky=YR9rjI;Yx}JL5h28@3s)cLShZyuFCZfR&^uv zN_Db=6aYd&Qiwzmf@nC8w#{}`*}hg1c9X)C&RtPd-z9FIFR;bJ@C8mAp%&k9T_chs zAF)L+d$xF>|}N1a!nk54Y? zbD^$)%2QC6oUvp8fEmxb9c6%!gZ(kUP$%sT%)`>32K=-Jx*ZBnb$i)R0zax2D4h1S z`ht1NZJtFL%g|?EUAkR+4rL7WL$gF?&xo8|!^7g{7wb?77Y|IZFT>i_f3b|;BS*kl zohMzBo7A#oy=QIa?HQ^z*iqr(ES~?#a;C+fCPjJvm0H|f&o_63Z3@_B8U#_-?ggdQ zbhJW*Uba;t%_D9NyJsL=@ppjj^DyqR0eu+pp|RS- z=Vi``Y4Iixg_q6cZbxeDjSI##T8up|zga)4{Qb1wW6JbTTefleN6Ad|pIH4?7(OJJ z&ydPquzR?)&l7G>=Dx1}-btXww*`GW94#sw*;G6vKm9p-ix*-%&O|b1ebry%K9hk( z7NihS^`M!ueGGUJJqb;-yeU`{{kaH=`9z8-5cdHp*uTqJH-8i`hNkSArDJaJKYbT! zx39MM`dIvuTEb|}O8i4<(jo-~8O4drFL&VaBu}>!D^(O;RP1`tzlI|-?OQc%Ken)_ z=4O0!z4@xLX)briAp{IAi?(rfmOQCGG2ybN=e4#40`msAYeFLLQi02A$bM%h*seXB zubgo?Zt-wkE7L9dfX~6r3g{%9r7q!{VZYyc9;SKaCDlj7B)(>79)HMDEV<>#)DA6wwU9e%T*N%(amq8M=wy ze94eCH!o>RPK+?vSmps}%1IZX(S8(9lU2gl^v=Ldz6KqUE=AMw81m=7 zcAn#vT$kKiyP;fV=Q0GjYT@2VV%QqNk-V@kv@jlm9V{>KUct#HQ&@+a9WE@2F{-Op zOyupS-1K|BPet6 zY$cuimUIsY-}65ee5+^g_l-F&lv{tJ8~PJ1jxd7;LB`%c)WR5V64wbyIhK}-z6c9m zLFB_RVA!Y^b=$ZA>gS~(<7L~hr30IQyR`p@ri5|C0 zSu%o>asrc!!UBrTAq|^Gw)LkU5!K4k|IL?wC>xtO|5*WOQ0bgM9nzw%s1Iy9@IV=z zM2tYAeyBUpJ%uRxF?ZivZ%yNc2o5kYbnnUYnkEuaHa$p}h~QvHHD%j0&$g*3u?M`; zXiUpsP1yw9BO{u$H&k_%Gbj~Ae{wX8hZ8;l%q;JtL{;Gl$GUDv*fFrlXCmAUR zS%+&M`*)mTl;cJ0M|zgd)@ezEb_eh0rBzj34#P4uge4_k&ez&OnU26RIZh^Tro~cm zF$_;r{3hz?F!a5X^h%x#{PJ!oAepy3yyJ5}dJ`*EQk&<|b;W<5YJP7Wz>4hjHrY%U zW3edUt{&w8M_qHbrHyd<^eah<#mXPFDB^E3v+8xOB?;a48~ow<@RZxVR);p^v(=B= zA!atK!`JmUCjG~J@Do3+E#%R{w1B?RiTyx=x7UhGHf!3XuL{Dg@}0WIo>I@1RH+xL`OF>wb#qyp98_nbKk^s4-;mBXSa5ZZsT z{X+QxbJ9@bE|XeovcRy8Z$)!dinvuX-{fBi*^4U%S0D7pFKn^;z7=<>MrYz2`$OSJ z8-xY>Pngf#t0TL8V*>eDND%Er;i6rFqAT*FRwwwQTFLUDfFt@*5oo|Z$FECd+3-r3 zeOKJYBF@yCAkwG`P!W56p&<#udjU~^tUS;A+g4d!0I3wE=Qu_g{9ch08)}CF)=9!Z zr!D=Cis7#x41^UR#Qip0GpCOJld>odh*-}BvczDi7xzC$p-!-ki+RYR4o5NVc>4z9 z{)goQ1}a#-2|2>pIuwB1gSp{iwDFg)?O}N#z8+4*Jlxz;rmC2S#KbmBy@#~CuMJQd zUVBA+8n-dAv}f{YT2)&=#0GSXS$#V*D^qL7l;Yl(Qg!)Kb-C}4tj*T;P__!rhCUBf z-XW2SDDPi1s;D3Z8-#JJuHfirvx-J>GFDv%13{^ZIwKA)ckioDMKax7$elkLg8OyE z!a^gu*N6>ukLWcFW+88|$_iZcO0xj4!W)AVllL_~TP4adTKABxxQO0#nZZcld0aFSdHPHQ=`|312x6oS`!#W8(p|MrOL7CHKWgIWLimCxP$EA4lP07T;I z(s8vY#y+sfOj_h|T23lF2UcKoBd z%49e8UtH|X5nldIOcKV~)~`tiqb&Gw9vL^^ywa>PO@2{LT1N5z0TE2udNAUmhdOEN?_7jRxe~()6ZyavoS@e%hgNi4 zU$|!mdec>2{8%pF`8PSJA*^!0;5a?D7XJuF3!*pGjKG=ANxzQ11B?7OXmuO!nSv}N za+@MKkB5}MR^su^g&CrW?9sZ%R@?D0$2Mc%IXPJ^dn0K@t{9`iBN44n@xd?#4vBuL zorN9R?|x~+U2Kp#0QYOs(Ro1%q;32oIBPLxfB&Ks=h;b8h55XMnYgLH6iG)DvJ6&i<9{;;`M=@=5muPk>A2 zF2kL(#bCO8PEr}GPej;3AP-F)&%C9c;WLydp>-nrL0ERVFe3m?GD zjE{@(w)77`A_wvEN*>G6F6bit4E7u%!K%>%Sgint>>GWNI>_?XE9;dMt_ab;egSHV z7#wyQb!>0*y?(nUZXHplG^NrGVO>uyrvc>XR`9nhmIO%RskF!@6a6+tJG3n;^a(Lv zzscTTR{7{1br&6IFmU3Zi#SfRk*$u^Vw*}Ai%efMMPvaqTT>5BdMwGD$ac|1oA8}`*L$c%@fC^_e>l;R^ua8t+Qv;$|zzS7`69DIL z;v$qtW4Zs$6z>p#c7!_qEz6Hn{uowdfZ+h^-gRz50!K6jos4bi-U{=v!?39q9t@Cgh7 zMMdC*YYo*-`C%wTZ&D?4d8e1Y5v^w;q8W%897EwW>?C&lmf9bGP{D?Iap0$h0pr~r z2N(5?RVfcoih?eO7ge+*LHtSb?kn*(V|UlrSbf!b$sWYI&+Yi;_dYBZQQ9XxaPqo^ zB58iZBhB%uPJE0eHe>&0U1zTjG)2G1$A1C-2=K(An4jvoB<9YW z;w+hxlH$1*PIJAh=nq!Mn)Y{dYV_Sux=E7<3-D_PY-$(aky=!8LHe*G>2*-i`|2$FYq7%NgXX6rBIA^PHc`CDlLGh zgrfOyN2?y@FT|1|$Z(YjQ^X2S(6gA0LFqjp6$<>_+qz$X!jzTOB(>eC`d*^F?^Gh6 zWmY!g5nhya>kdR2z)o=5P*YaKg*kHxf4IMhMu0(j21GrO7THg1ovh#~3pS=*eCrUj zQ=szw_()bf62=j%(<3MVu{!^2YKOV#`Gks1eNoX&MAX}O3XjIVgBAV&&E>$2urFjM zPR`;HXW|{gBb4E}bBGx7npQ_v`B_Zzowb~umJ(rcS zu+&B53$LTZLl13;2)*K6rbpQMxKuT#nZO|jdwUY!b7j}gm7Q2hy=KRNo0}VJF1v>? zEv-kcN8jobpVJ!njBPe<*7haCySMZW(EwL&eSu-n!P>>9U!q{sooAEdn0_3KUDRS$ z9u`|g8Eo9u5_8z2pnL9{n><^=^FjfI&Fk<*tM2l2d|Xr>_tDx&gD_;}Th!w^RR8K$q)8up~l1f>pcFC{7@kw z)N_A#f4}L_CC&dn=7|mHSl0VuDWU9isI;h;)c*sVt}aCc1(>t}6&ITF0u{vps=p>6 zO+_^2Fhq#bC$5Q+-i}2Gt%D?j~X-4c1ybCqb`_I=bh% zn@9ejC^3^Z>Adq1D#eYwvl2kpz5{BN6bn6*7Lp*T>`Vm~E3`ny2 zRbWaO+Hz!AAj0r(){fYIN)9LETr-)Wi*fgG=Lg3IvkK+uJ*?H?!7aVGNH+ ziI3_y4{d)el)DP!X?AxHORv9%iU^N8DQW2x*DG_2zpPq*GhW~E_Er7;Wn$cf{@|2T z;~7y*crn+G{|{U~^DJH7?q*p)q)*d}UFhNuI!2DOR;aM^DQ0}e*dTxo&q3b0jUI|_ zt>&yYkKEDb3<1F-oKU4tiI!Y#+;sp*ANg1f%PCKZ+!=AHiWgd67I}P!L_{27qbKk= zc83PvgTnn8mdix#p{M--PaQiTWrX`727b2~&;)dC0(Et0HgQYInIRfHsEvOCF)Wo* zG8$;Fz#al9$pFa)D!?dIi;$xh0~AguZ+ctkiATw~ZyrcGOG`@uBkk7@L^ArHlhPWc>y`plMP_Z z0OvrE#R}wPQtaP0042BiW-ArY-(C}Oe*_dj@C^{0K*{5PwmS+1K!(g3re8U ztN-Hy_;7(T2!10retzWkXktF740DXrPUH#jjetf2Jo2U>hYXtG3`pVNM+>{SZ~!C; ztQbjXhYiJ*lLQ3iCp>quK6zfRegYz|%!dO@K&h*6hGPLwG$G{vjgFa1AIl9@+eY$z zoT2V!aay;~G-gNMnA>7ReRpAz3^2K z1Epr`F$?HuY&W|hbQ(^Ab{6P`Xj_eCgvn3(Ry}pu2{L!~A%2a75Fza(>?>6&T8}5V zwYL=pf_ykv6V_d^McF1rIG1`U9e2+-;CPxv9}qT@sVNYAn*$};w*R!GWE7X$_eEoL&eoQZ77Y?~KTH4DXMvW|7;@=QkB> z*Ou!hZ;7KDB*rt{kI`5Ms99pD8#e4z9aFXpMUSwbjG(ECO~5}Al)v5U+GRne1kbu1 zpN`e8-HYdqNBc%6>Ey61?FzcK^Gl*YUj6k|5R$(~cx+V;mdjrf$x6<%oHHy7ndnTA zf|5$8x|yv5FCtu_W#;EcGJ0lGz&2QEPbkI;_3Pi{Z-i?sbNI?&(vV}Cr6jDJ@SOQ$ z&4<#)*atOKh;lGAJW)(A6Ik-rWBn{DDt6ylutumtE0samsOcmz`?)BPC`eBR#O-Rx<$L9_L4Hd*}pfm%zB{Tt8> zK@Wg~154X=Hw)khEI%wRcVGEJf3J;LNvQk^$k6ivc?|pl9jtnn*Ov#gogiPG3aaW{ z0y)4?QAJ8>Dg)OEbS@C-QjEhEFXY>|`qxKJ4Xlke4?E^CS57k)t38?tEc}9mTBE_c z?K{?>|CS zXZb}FcD95N7b+zn=(LE+c+RIC&!OBN!iikkY^6R-aplRQ=}2YtoJ9zihKGMaDzCl| zpVJnRGuIYAHxI;AGIZ-GKk+!XHhJ&)2DNjV&jaig$qaU~mt2RlTjxV<9EJI&?9iwkmjGU?h!$YePn2oC~0x)*Flp zB;Om~0;m~{PQ^yuaA0=A0C~BG`Nu>u6Q80YX2)k(qN6&P;)O+xbS5#0!eKDtwy0t2 zsU4FQQ$1C4ee4^9>)fx6@#16__mE4A=%Hbd&^!@E{!@5GfeS2XC>>ODfKNg~9YFyN z1coXs0GFVqCNakUejREqaDS8e#M62Vq;~Sm$)*5>0&)Vd7{6H;dNc)!fj&S-+-ci2 zS(=>e&II|9?5wQqfV6qt!_^8vW2)pqruXsY+SRqSJ!RhkZ4)SlfzJmCU^U(VXB(J= zA!H~~8tgr{gB(#9pIWsTp*lvOTYyG(89v=k19i9&NT>t?$G<>phz1lm$k3zq`Xkqp zXHeaecO=jZf(8n(wkyPTfdu*n=qoF}H@ng&>ReuTSr-0(+C5&-=EQlM?=P_ZTX9!D z*OD=+#u14?BMFa7Vn3 z&9=MU^}pSyW1C*Tt+Hs>l`r6BChF+kA#C^khFk3jeW4|8sDbwvYSCIA{W>rw4O2k$^tyve5^e{TTK2^-s6$7BQd6xSlXU9-frTdm!E4>U_i7tnRGY44AYADN#vGVd`TPf(xG zK7tWq#>p9oJIvU@2e_K~IN>it5xWAkMPKuQlpWM&{?SMVu%Yd$v6%)sknjH!@l~*T z1B-C!*z*u1+-uUOb^k8Wy{GfcN6g+BQkwXF*0*o5g~aHw5Kr}JEuAiy0M^inHeb75 z*{qBe+i&(YBO_Y>txJR6LG{h`dd%5QP7H{4B+|^mI2*e1m7CBz$=G%Eo?UNpT!me} zovQN$gW~o5w$Lb;jF)dlJb?6~A#xnhFyr;rw z>}RdvXLh71;**p;%XYb}h2^O`2whMtb7g=W|LSOk`;O%o)Ai5tdJiOt^vd&1^K2N`+ZCrPH!S z-|Te8l6Co+0jFYxCHI}HB8!V3OqMdsq`KSQpT9z*UKzlpMN(keEp-d8AVGp-{E8lS z8Cev8bLYfGFv9$$b6uoo%xty^4=j}u`Ez!?H8R?!FJ`Zb3Tt;R5#SGBCenE;x^~vk zPxo{@V83a?{M!01@>jv_>YShkwPw3$=u)rGO4GBnxJZa*kfz=VZLqN7{?8T+`vm57 z1AC$vOT}!;iC5xQOv=5W`+(ZP`CJ{XwgEUyGKRPlKuveKg(tErL3bq~H(sEzKRP;+ z6uN6i|2Y+GjIb>twe`~dV~D%w!WACD|3!K(r=Jl>GCh8#b(M2P z$mD*ftV8!}KpXG6J13^OfB><&KBB_}z5ghxd&XO|bH}BVc6*?26qn842mOJ@CyVC7 zyS(wcv=a`oCl#&{GNaMhdFi_SJTWu%8uLfJh4$`%z*4Js(-mY06sy#V-7qA)0`H1m z42Ez8rvI7`M{@P@`AYyqJMug{=Va&|ZIV1-S0wm&8nfOj^vGtv)ZDPU4fSIpU4DAJ zayp!Q3v#W&F`;e6fdQyCdStiJ{5z;X4iMle6J@fBi;=*n>L0}CakR3TYzWo8fkEOs zEh6Ci|E#VK2FwRAT;yDj$M^*UL*frtP0QT?@E{vxhf3DKs!?)EGVTqa4ogT4<8=ZP zYp7hNuM)Wj4|GM!%*oFHY&x;aX{Id!a0&KrdR20M{)WDpLOeX-U=V)id_+i09AcFc z*1HZ;9QlFe!y^ia(}r4PoDRKvy#Z+csrIBE{P&mOGXT@!eYfHL^V{3o;1fkMv}%6Q zYZ^2Jcvum_4soB!HHzh{I!10KnXDq~4Mv(^NkTF8&~tR8{s8ufGhXL9`D+c|$T1PL z_R12eq1lonll@g@|Icg*gXYR7UN9`k8g(==eie4QSjSuee3I5FFQ(lHF(#|fo4*gH zYuw1qNn9$*(8*1F9wEN?hz2XJ@*N&A&F8iA4aK=Vws(;mybC;hQF#z6qGUxo0?QHy z{0&S5wb&HozWjUo`$f}Pj}Kr|%3=P!UaRX*B7TC)RM6KZwEhhEb5HXXwaCITlXMgV z(_b1=5%9UsxMDG}>1W#TM=J0_l9fdT-1+P*ZsBuZg=}of{b$ zkr7}|a+lO8T*DcF;0>I8uB<>B!pE&-o%@-?GR#k=Re=g|{FCF)# z-|VE$|E^9;OG~&xujd$OoWBDkyP)7DXwwk_VW0uq27Wi@L&L*aO-+PQ0|k%`4D`|1 z_gfB+)L@f3K0Y1*(k}HHU3X*Mya5P!0<}K-^5zw=f2nud$DyXC2J<>p+X@Y=?*i_M z;DnsC9Q&fiy;%jSm+N?;8_W-fHilvqS`cfbUdJ9h1abg&BW8GQ;or|@KH!5e)UomL zXT45e1~;L$QqAYTWw||$h``Sw8~mGcT>i=7%3}U%cGM3CIuZe&2he=6ad1?v*J2^S z2U>*Omvi~YK5JKe@<319~MPM8RoB{Uls=#&DA!j8eJOEZfQ9`igP|t&EHTx`2R`u73Z1PV&PmBC?{nfE zgA{5m`tfISAww8);cSM0?o+CrSHuDPIX|_!R(1m<%4>{BS$ojxpDE?D9^jE2^M%OK zPdLB+2xFuT{VafGepGL!CoBjmw_8=Y09yevk{DBS$8e| zH#};1w+U0c1%>qQl*@D9r*`UxzXXBYezl>Ix9;q};(A@rq%@YV2nD6jzkg4lNR%-) zH{Wdc*WHK7xbfcPc25fMc!~-9AQ+Rz@oDsFoff9u!1#JRv(!$klXWVr-+H*hv=^-1 zphezXXdS&4=$NDmCV*p@b9qj}TAkm19Z(uE>(zhstsWfw)yWZp2;Ll627y>8~ z;IDvucyKic(}iq%;o;+p08Q}UzX0+Q2i}Gt>5;_$-U&q0iPO>3D5SMtUvt~ehZ^JI z5feYp!>X#P0;%asBpYF#c&rMpCsPC*d3@A%!j?po&$b)Cfw zGrxDgdq4XLNX^2Viv@5D0i&^{p;L+uIvsUs9>FSEX?9(Za{f^`8VeOUP-<7{KWT@3M0M$wtYs?*knZ*O#qvf zy%m~j5u`M{7`#fX*jL@QnBxNXg>8x_>u^nme%eSD39(!tFmL4X*$!Hgr&6e4lCgT) z#!g!L!jdc)yY4@14#AxDKwjjTXOP^@i}2XRqBAgaS4AON$c5#9g+bVCUg^tTV65NI z6NioA1!)9jZ^08Tqpmp@vZTnu(pu{wdMVK3vIqzv9E+GF3WCIx-lLKkYv|ieLl>fH z*d@^QJId4ksB?mEE_SP(H6iA+{^*LS4E-88SO^RPqlor)cY7RSJ5@Nsj z0cS*0EB4b5&o(RZbr^N`>;X$hs#?Vkj6?1fG`c^3t~uIT6!zQmVQvigQF<%nY~4EA z*iSg!O?BmtNj)w9({B2C>EBesTha56NmQ909H00 zQYI9y8^?<+Sp2ETaA8&ULPvG`uB)^!hNA^n&q17&BQRHsOhgnD!mBY*@b+n!3b~>M zt;mCVIzx6W5-#XD6EeTiPo@M+%kEHjk0lagS$zzw`8c?p!beuiLbLy#DqY2DZnIJz zhS~i=O+3`4IR@w$|IWqx#}vKHk@xWM7=8{}ZGMLV)_M9xS4&cV8;wpHv)g6wNTR(d zgpKsR0?MhkOYB7&#(!jWAzr+}vs#j-Om0+vCNPzUEq@g1@cCPVp7%DFCII4GX;T;# z7kJT-^FdIr=?<$Qw29cgLZcKr7#j6o<8<>w?m8^;a{OcVPPac@>QAD{CX<7zSt|=Y z$Az!OhHYQr5I1?z=dv>C}_5(pMkOR=xKhDSw$gBz zKIp#04X)Jk21Xwe z`lA9L_sV=W)vX#O_Rv7Gzt3q)hb?VT2uJX!H66?519`DWpLHo>DpUtL$ob=&nwXeE z8b{XkB&K!yN7aez&_>m~sR}|v8B$qNdH-HaFmBSrFr@-C-x9h{cK3N-nKHRvWF0t6 zEMosg$wN(&?-HOzdy96=^YE;ubcJjLmy!HMee%0(+YDj1J>qQP_k_psu^VHDO8{l- zo;Y#(F)~>eVj2N_j=_yeoUT%MW_D@$p^WIk!9#p`_l~~jE-n1mvC396U(vNcaW|^B)_24(Gw{D5@KWb!;&hZA_o-&0FB>XF6n zQy&mtE3&lU<~KykgxpOZG#*#N!w`XSsz6VeK;|@g`GZ4Ok@w07yFdLW)u%0(C=Z)` z-y1=2h;1pT1__)e4ZyW$N=6sb)o}PIIy8oFz5zg|x!{E3W6$A86x`(&xa>7&Dj&=lh0r@K#^I+UbYbf>(ti24Mbk~vq&zn`N|-t>Rg{y)g1Gc#I2)-{ zo~Z@|+?c4UFT5k}4}xM-zEGi$SR z{}dhr#9clTYc44H$~r9WNN-O85G zo7%&;t*)iscXA!-QXGl%y?eY(BcZcJuqBp;29|^Mi?ZFPVPm)q{0Z{!KgWnZh~wGM z*hRftJhQ;d-YVEvY?v%%upw%z!SL^o|1`q(f$l|5tr?^Hp4s4*?C|ze!#UuG1Sr!b zB{bOGm}>*tt=99nJbQIqoEdNI$-wnL|Do4GFo~&t)UV`Oy{kNK5TwCD;X_a}ruti= z$#?u~JC3rYWykJ#K8T7d+!j&9im1Gpcu4!y3*WX~h=)0p2;VF@reiF(z##p&lkaOV z#ebRoaYycFe`Na3)|Q4I6FGT!dq^)v!FRS*wRDSJw(fXV6KA2}oorclY^5!Q%2ddH ziz@403C8HIkq(Y0?e?bR+Esz@dOM6gw9u9=B-fDVnL}Q-1~xT%Pzq#Qi_$S3gRxY4 z7Vqd)@>8r5Yr6j=4BtP*{fAq&DZ2>?d@DVvsaV3a{D7(|?@blovBii>7M4S^eCkom zMbDpxgu{6yJvH|;;phb{{@Ln#%_?sWya2-7P~8S=XJ;=Yy)PIt>8Ag^PWQ!kr)8?v z#Vs2D^sgFMzxe2M{!KEZ@ zjr(Pl_y>AlhIeYX_eU1zgFmmFUp}6W$%XdtXzpp`jpuS^K!x5w;{U9S*3x>ooQu7E zJ=o-4hT&q}=N`;Q(mVi?qS&xO$5c|1xU}WiXpqFj7wHjx(C~1G%JY4jC!mI_S75Yw ztsx)BMEv*b_EWLS&)J-a4$kR%{wP~YO#FZC+)pP~VJ$7wCHEiM{njLeFcY#cwi0CC zRx#HccxV}#Zc~!%z0rB}eTg%iw824Us!kEA`J^c!mXAf&e+kS56!ov;TFZb`}r0lFgFGBFXZ*dqVC_Gag50U>OreSD<^Mg zuXt2@cn*yJa@tTuRY>j8=}udp99=Atwf?4w>Ngw4B4PV1e0wn^{O%`iR6m2?-vU}w zTiY+T4O_G22EZ0Tk?BM0-=9MJ2l=NGS+S#Yi?=a+f||~ zJ@=$vd71aLfBiMeuJ|O%_?gpA=P`ri$9UN>3}lp}SXEfOz2a37-jN5IgX%i!$ww5= z4h%4Re#jjfWejsS13uwGWn+~*IERzw=%CRhca*(`YwXPzI$Eq?wiKs)fo<)Ov%u>`Y*{aM}fPu8jlFV z>t>0bB}2aJ+)nL2lNYRxypVvDWjdKXaMq4?K_0xT_6V4_HIC%6(W9PvQh^2D09dQ= z3JH-shy1>}dZrQr;sv8Ms)5g`x1)!#MezlzpK%RP5FIQNOt?{9w|b80>Kn;FO`M;~ zZKG^TKxgg~iM>&+`7&dMmD{g*A+Z{qO|+8M*&ea|m1=WAIBCVXcwn_pZ0DF8vGJz zZpaT~cZfcm$7&8JtaL;hH58m zNxvDm=I>gl*I^C3xCQSfO#=p>os<6&CHU1)vs+04!&I^BF+O`$$6YM`)QnnQ6-`)! zO$MuJxAMNWft;+1Ol(kQJv>2>yoQ6O5iK^i{@7Ib#nuZ5tEmT4kfuy;n4cPP{PDdHNOC}ClqzFISNbyL)@q~= zgH4?4lKKoPII_h58m^7-7?|KoUT{OL+_@ea|2gSj@^*M!6`mcK(#Us{w=&3%gPOVV z(-75>*-;3WjJUl$>*xxbRA^3LW$QhS&ssQ>5}2~QggoGl%%P%E+b!S7>=$;xC;*4d zDTv;7&_+T^H_U{(e+zt*OPcd!|NM%$DxWP;2F~ALT#EewdBdLk81y}Xx#@{Zi$4_+ z2REpEe&DR~@sq?5sA3YT>J&6=BQC4f(=Jg8G5!cqkQjry+RRjzGQwj?h|x#v#JNxg26uKBgA6r1!_;v0A>tv?;hf#gE?FZ*}9 zBHytfJ?$lOd4y=OuX*|VR=&H9#Hi(ulXa=PqlTGMDRLQb(}mC_Dz0Co^Pl+Ant$Z! z#zzJ>YhGn#<Y+Gyx@TFvp#3HoA0Rl6=vLel)t46| z>g~yr(|zwfbxizGS+}V*;sdR>VMGn8U@v#m2`LKj;p4SP_%fSXU0V-06)mbAW$pw8 z$@1ex5C$X@&Kc_K4v`VJ(o3Fz%;y8tVTwQWCwCQpfWLyfl{cnXHB+f-cJ~%UT=+D+ z@Xt?{7u5M*rAG6+TYIAtVLYc_aKnt~dIL=qPGE66@4cf?E`4cJE#>4o+_`sOP{`bP zlBb)?CI1xU@=37a1Wl=-x*X=h`8ulyo-5qLc(c0~694v6tkN;=4dOBdfC=cZhh-Pb z!*eRB1_QUIIm7A&*LPNVfyMOzV=(-X<)$pP?EWc=il|N*7Bap9Y;EX)}#x++Q;A0c!yTnoIY9V zh0Vzn9?QJL->WQ~CUL)7m*YjV*DV%$1N`F>(ZC5CxjE(W-wRgBZaW^GxwVnL})bgUDpf63;Ty1y(# zM#3i6t~UH5imC~QT89B?th%P997{bXI4KwacyU2CjT7Ja%XOlBIat38nYj}c2I$AL zcjSWj;B(UKj|DrZzpETY?BCkDWeUl}R%yj^!skMF!Eysk0~l&%OGgyUHQ|VkiEciI z#7iQ@@_EayL27-a8J$P&cY#NRwnuD!HClAU6Z{f2YCnG3H|5;c;#rVJOWU1k&Hna1^gfKl4Ghop!)h))dcsY+ z9r{$Pb2Dii8Cj3W(VwzAR18D!gWfUEzz3#ldugbE3liE8Za}t7k(!Tga7$O3huiD7>IX4S{@NBxzBr>|tk1qkPe=Z|4sV=rXs;lz>e} z!?rcEQdB-XWcRIo(>V=2YJ&sqZpY?PcKPQ0U=}O0QV@u@kksXexAcV6!Sf3A`eJA8;`@;g< zAxBdsB_!fpS%Ni1;I)<&ruZMl$IlyFH_T&9?Yz+83kPw1QTtiQ;+}NWsQPVqM`o(7 z%5iRK!d{NVUN8mI>IehU<1Ti`qdMw+Ua(`W^i4$K$6vmm_KILa3n!7J?fSX|;Rq5^ zwT)kVEuLW6oHtnyzWSQ7q0iZB91a7zRs`@?{w7^6Ok~e&QdN!_fpSY0B`T)!by@wx z1F$-0QVKF9dju1rouO=3eiS%<1Tx56Tz?$-Q^6E}2+zh<=hqju_|G@2B)F~D zdcJ4k&*@%y1J|qNNEJIcbgW`_-hR#b6zYb-3(dr~Xj432TB~vdu`S?Gt*NPTI zY+S@h8qNv)Q}P8ms#OY1p)lpw^U?&3FLbJSC8Ae#X>V$S)n{fSlbJ&3QeJMkiaeTg z<8%K-i20dp_gF#4<0_lgAFPGVolTL(b0m$o1dT9CZx|Q1DUZF!uU>IH=4|Oy&9D|U zmSP|XuBgl$sS92jro-K^;rV{YuHGE>!7AfIogtZSCR4WL8CKB`Gth65DWO!yM9O*~ z*XGIn#MBW$_U4y3_9nsDQk*u3PxIa8a?Lg6b;8wE`>w1v;ZoT$Xk^dG-Z{ahv(k< z-{N8XoaY}@CnF+>;`tM8n4$l_^R|bH)%tH>;f_Gy6Z{!&2ICm+JT{y8S*c!7mVn9a zyjv9-<&nWXzxfKRCtpm=>{J4BQ)ghZkT11r%;%u0&eyp!?P5bbs;}qgDMZENSG1_8?(0a zQhS`o+xFNmzrLgrV*tSj7%%WZ9!>Ax9%LS)rU0|*rXow#n0Rvw*SZGIChCJk$=P*p znjX3?D`k-ZGHsXVKysk4X8887@rV{B_=RDb3_5Xb*h?+$vxu^OO)Bqu%p`HFc{z-& zw`#dfno+B)Atu+qq?i5uu}uQ(-|M!uhKz0CUi8hzog#NTI^pp2Fn}sul^|WH{93$I zh-j38?_1U$^&k>GFiC$VhmG{P?$>WEu;PWkR{MELVPvgMj8o2ZiaMHG$*g z1_v-ral`nnUArNqSy5y9?%ypZteem2O%|rg2ew3rHWlnPW=Xj8w>RKPOvNSG%3w1n zd6wSVQUQPk#fa}CiXt+D=9Yb4TxF}z5^0}7o5EYwwMOOR;%c}U5lE2btK0=-Wm{tZ z?{D~q+U`oIsVNWd0Z-2_roMyK!_!vh1muVg~{p-C*#+S`x7*B4Yya3y#d0!4;`XFmw; z%6q!%ONK@5%j!+pZWlyd(-98Uq=JC$n=jh&M-t};ZPptzl->QKx9k{F%Iv`98~g{t z1m{1$NU$IWlt+LLEMY$(GjH-cq!yFBpEYHe$qXTxGAUFg zCW+QfA2W56h-Z~>&$qk@%l%`D6fC|I;3*}tfK~b?FhmpcK}h;lvhv^eL^X-EX%+kS z-&yc#+}VcD@?5^H;fEwBg!q2~bJ|TT*Ki_)7pN2A_y(g@GiaaNjCE7%S$@e))fMB1 zo9cdW|D24yk@N51J(7~W!~S;`82~**b&BC*XE2YjQ(ju3Eua_2Z3&d0$iBGU^(;eW zCNcRVj~r_INM-s?D1_8A83V;SmLyV8bUF5s)D*VKd*f|qn&j_ceXcsBMAU<}i``LH zf#Yp>K_)U7N<3W^?ipe#cUq|y>XPUl-=*o_<`qbylqfn8Q;6M(B-|yq0tv&2 zy)1X$bwbh^r4$2%uvAJ8vG@uDlb06N|$8exORLVl6|YC1g831neWdJ(##!Di}$k!4-;< znXZZn7Oek6SwBnFq_6veTyAdj0&??L4`p%NjvtXP+`)taCCVu3&b&~Mcp`nQO~+o& zJmE=+Y@L21c3aM41+je2L&Vh8HY6dt#C=x%-{2VV)l$3L$2 z8t?1Dz@oodLZ)F?#*B>P9&`rYTLP-~8SV}w*VRWYjxx*Vzp+X8TPko=r*cc|R{THE z8b~qcH>}|J-F{x|ep~bsPZ}xWu_;r~qdOAyj$dT^mmJb`Q^d6^?s>&WkEF3%Q`wSBYvo8!ktLtDW9hoSehl z@5XgvEA|n*8$gHS6Bmy~NKn{54o}{G`0xSH(1u)HWh;SJP~%HTE8xV9=G+s%ZTn3D zGFsw%B>Z`=T*}Vk`NCYjG?|ti*mXdBdU^Gg z1K{|?a<;ZeOln*pxICtsP5M8Y!*8Jn`S(@)zZu8Qd?oiPFCFKs^0jU^Uakk(57(G1 zrR-$1H|(1_{Y6kt!SCgKwA{>XzGq%dhEP197+?30o`5)}tvL`AaS9{~&odJK>5701 zBhxR3FAU*i5BPU~!GAZQr6Zx8CO?9PJa=PNnkEk9sDZ7%x2tAIj|iWS1a(h#BBeC`*j*{Ff3PRE)t`nOXch8ESj?QsgV&5y4wcd0p zCb<^J#oyJeVcHJN7amfeN>3XvNkax!?(uq0wN@%1zo#pbH9U>H)hs@J`qal+*%qYc ze=`LRgXdQ4GoiBnM|gOfBkBCtK;#01j{pokMPws^yg-1e?2P9qh|z=}-vYJ}4N!!I zX>yN1Y%c@U7sE-Wkvj@8brxF$@H2rlzC#CpW zgFEOf#NBt|zFjLyNzJ#y)--`BWzhFUyU|`ezvVq&f&x8GgZxw-Ta=CDpf(@|adEof zy-8u)Tj|QW4^TEPTNP4f$F=J+aDDYn^duaG4C|4s-6fJOI!Tz*H#{b}AS)Y~A`?`A zy+)tC{BsKtgg))B33jmBB?^q}-TJgkd}#}EA>YX2hqRnb={Yk=c`x}yu8m3RTPX)5+U>;PU6n(OhJC6NsOL7W1;; z=uRVv6S=Trk_$UpE;;oDBtVyC_UW8+>#hlCh8Srn0{>I2ipGn3*yJl4+vfAIM+zYX zctGfX(_PPBITd5JL*G2EqQ(7N8zB8kNb>5W$yg}~tOSAkIg2DUIuc&InM2Wzh>1h% zw;Ejd9Ao#6Uv@O;F_PU%+hLerY$X?q;ias34Nt@ATip3QTQ!vD>h`sr59%cvGE%^| zk4UfXVwL=(gop=u+kQFAxCH0<$QZZ=1d8~>H7AJNDZuVT#Oo1)e5RHb5FLqd@JA#X zH2FVB0Qm%JG!_YYW73_iL0 z{)C<;9;G?^fz$*KXONWTbKOe|KufV;kTbFcB!9d6`@PXmIwA}j z9ZhX)FcGX&p#7S;c@_gYFaf?7FJ6Ejt00uw57J5zTWyt! z-Th1I>58&>2N)(J0e5XvT@f?455*#fON!5j%Sb6-pfaewfv2?MIga7&cwWjS@cy;gHoOY0gbf{O8BA_Vwf~`4_jxlLF zTuKbbYaKCFfjkGz&;xcS$9bnDxxO$rwiaBNfkm<}iZ1gxG;mn`H!@oWvYx}C1K|P2 z4O z2N4sdY~!f}VMu@xCOggc(}SPPJdu;?GciDY1x5v7)!P263%Giz21dN~e(L!C==cP|7=F@zK?ojoXOOSf2J&J- z0xE+a2%aFXZ2wJx&=MjNEZ6RTH&)lw1cAKTt!U%FW_7fHnUBcmFaeA^gj}GTthY$w zk{yWACA+~bfDE5IovHMDj7YIS$jv}`Iexf5MyQX2z{l>hMY+~R`L-<({2BBIoBPHO zBA{JRkT@eiP@6r^N1qkAfx#c)m2ip(rUQI#X^=B}4|3%wAc&MoS2wqRk-K1fW(1Np z5INI5;A8_^j8jA%qkTA~m1gfpNFtY8+;9-@5QKXG{bU!JeTFq2q7g+!fFL+e+5(P! zkG-$K`^JJGes#nzCCl*U{@w`MBl)k$XFzyR=|k$uS}8ozHXTDRiFpQY;1+Qt1Wm-} z$3-UGQAji8#XLhz6|JS4*~ho>O%L_nd~WTKM(Qu_ky}A4?T+^4pZ4)kmYd_CHH=6{ zjzAFvs0avpbVIpr#ll8K=JJAh>mk@{e|&U}M*BHa=!YZeDNXG*Mgb?XR9CHdh##h$ zj+Etwqj!_dq4{-{v}F_^hdPyibE|jqNBeb8T+DRiPzuA$&EQBIMN8;S$mNY-grmH;lSC75pJPLS?W&JuJFwD&b z-Pd?N6=OfD1*&7LCEf|?Uv&_Pr?vA%=kW(aAmVxE7tN;0sl!96m1g&23^!`Or3L%= zn@#NhYSB72KUEUIh1nz#W)-+2`?H*g;n#2}>~I~i&6bRdQA%Sz7l1X`=?EVk6|;S- zKn=Jgtf}Y3Ac!_R#8zOBCB*LGjWK%r7?Ym6zT+|s=dK9{xbDYCNZ`LPrlO%4s0FJY zAS-_an4a-%Pm~BjG(;58tmFbRKO(zR;^EIYW6t;%pmionX}{vAzRJ13C;}s1wbhw~ zIzb@N3`pKhNroQZA_~af9t`MQ5V=dd1H4b421Q0j+Vpr->xS57=)&QlOiH=Q`HhXF zU?7-0<_7)39bxgs5@>sY&6sbeI-7~DEvPp@(U16_*8cu{h6Lc9N4*ht-JdnsT?igF z@ckp6`2QJ3NGk&~pS|5g3}4*>QU8iM$QVN8bdm@0u~(CMgBLeWMN2<$y;w} z%!hw4m<^qeRViq7yGl|{#qhy^!HcVyq!c4;8)(2}_g840WeH%@4`m=;=WcY!} z*0`sF4pW`yBXFGo1g9-w2OV9Ey{*345vN45C)1}}7Dc`dBB`GSbufjji^kl*!ggJD zN&t{Gk{Go8485`&?dhAjz9s|<|9?q~vV$`c9STbDG5>Wxq=ZFA!;+p!gt+d^+1nGb z-l>dR#y9wXTmVDH=xDiR+DuppYox2OvVd*u^Pv?bw!m!7ZruQbS;6JZ=4c5AsBbzF z(`F%Sn$fPy=)Rm9h(NhP3U_8 z%?US)JS1Hxe{M7;GUXT5x96N*S<1wb6~csYXU~TCU#0vBkFg?;P&c#qoc$R*Lnd%c zxpkeWF}N&DkV1c(z@{rcUUnUhyR8hpQqh_zrkTMTKaI+#!|iRDPt76>GiAcwsweND zZOXN&wT2zV%{vN~c+o3;51hehG63>Cd%N|&dYucmTxzIaJZe-+t5a}tnUoTkzLZnz zF)Q@|HvdVanh&xh$RT&W+?#nM>9IG>jv(@Z81jc8(9Hq{{}v(+2yo`}kD)No-JF12 zzt$!&<=vl4J`jOCv}+JGOv1eboEylG);i;#`2Kov9qxaP0hBJLZf=i3Mj@gQOJhcE z1_mnMsw;yzrlK~6kBf%~Xk4-b@-|tjAv&X!ABj3CO-~DOTxA@8| zc?DW`Jm5_Kh}8Y;+SoT9#XdGy#4fY->k*pjWbV&L!dpmDwU($xq8Ik)bRj#MRIhz> zgz>?`=cRic5s>9cv+=sUZ<#D*EJk{aAw_PwIOx0F|9QcKSHg{S+ogH3w1FO|7 ztXD0Gc1lXgho0) z>d~_`yZSk1oD#p9mTVkg9I-4!-1W1v>!+g4xfMvXPKjtT5(rk7Z|s;!q^A`P6x%tB zU5*ZbIA28C{d(-P)voQ~kI(MF)9VTJ-zR6oPqq+A%Lu0hN<^Te#PvD~59h3`1JZBux#J#=Fq`jRVJo)^@7YoFffl?mMAdR59P{dwrJUqX6K<;XP za51Tj_)vj>H}Np6So=>NUK8->y`UfP2gx8U69U{B{Q}pg;dA|8=Ijgt*5x>jM(i3f zXdO?Dx$zcDoq{=Vf0+x_u;Ns`Yw&QQ^1+5zA%7n)iVhR(j)@;ybIwnt zyRJw*PUoK_Yp|(9E0DK8Ju1dcQZ@hqkq|O69BHbc34Cd$@90ZRp2U-dhe1p)CbmR2 zsri5)@8lbg&$EF1Xq%Dt%~ZH&1BRUar{ZWRatUFGR{)v^$rR4(6J-hF5-BYTBJS2~ zL!R*cxe7$gs6hq(XJWu)0~Fy1R>JE)qQ`WAM0(d9k`p|i%8Lu~FCu+-!s#&i_(h{T zR}zT#=HeRI?0Pq-_d^@MNT zexiep>SLTn(!>MhH@iO-Kqt%@VZEhzRmkh_jl?-s3MrLE!NGgRWrDdw=JM`21UCX?l58HKuhIgCUb!E4xp>S<8q*Dz@0c;!wb`H&dzg9@zMfG5dWs<{Y|paN0?q6G8u@&*7{5D~T7 z-`9uAq|^gsPQb0Ti>wzIheQ#vz68OQP>>`w0DKM*=L8rq{BU^=R8bpe+rwluH1a^2 zD003#Mmevb07ddqEWwC$R!2uX@IDY6eRK>A zL~D(U)3WJbM4wDJ#P<08ZG5L2IqU-c zNI&Q>y;&$4&_7D7uN<8&0rdd{Q$&5@QDKf9XmkEsaI%can`P!f34)0`*~pxb3VV$jz2nzg=04ch2k=g2E88%Sg<|v zlcR9DdDI3eefJ)!O!t*AX~jGKY60h6BZ3~)qmg$k$nW5m^j7jn|ghzT=MIH}!84#^zp%=%}T(5i=i?igJ6t+&k zyrPzBiD1;a;>)Nj_untlizU@B0CRC-FyL=;j-LZt^xiD0OgDc)&Se1afE7e+G^?c^ zI=#i(SG=V>%YdRzqvva)oL$}z3etcgHJ0AHb8kuvF{$MJdp$na@Wqr&w1X$T@Q-4< zD`OK|*5I$R7OMEc?Ku{ur2H)!Phn|Ut(o0t#BzH4)gS${JI8PFAs~1;3s~y|#{Hy6 z$y|{a{JN%eF0_(Az~=qTn(>gJq`XaPQ?rg)Xd)@zR*^k z7_GtKStxHRzUOI!pejGdQz4m7EiFNphT^&V{N$d1NE1FO)0v=URa1A{N6xbgPc(|9 z9tn8XpyYT-Ve)3upP(R6kH=^;v+~oni{wXR>3gbxUtXon4Wv+$jYNF05RG<0_;sxLJiSbYl?Xs9?80AKh4cG2k00uU8AqM2Z-0K! zY!}>hgM{;gmycw?7v_DMeey7R1k+FWl|BN0H_1zX{Vbz9wp{OvyZaBK=Yp!yn*np8 zxtKJc^~@7{s|Zm*mKNJ*buB^VgpJKY`8sZTki6Y$!l(m;JPZV6q<|mKhbj$?6g6<5 z{W!c$?HiX05E*^|jxFN_FX)CNUl#Vn2u@bTc}d+McfXw)VI(hpw-n z4Y7oBayl4k)c)60%3z{I-XD_kObJsYkv8gNRFb^&!*6WFJj8kh$|aw za!qKchDuIhslhiFjcEMbWXYZB&5A7-jPVPP7hvlo%Z*!gIe$`Iw#{H+`wS{hfSvW6 z6~UcWuUxCoz+3(c0|}^y`cYmIlQh1Hi9GC|rbi#eK3Pc}<&nfCM}8*;FChai%+nJ8 z<$^R>o%X3Aop20TFYBuWXHO*NJOL^mn+py>@on&>7?Q&kJdRO4)YX-9iv+7^@EglY zJ+D@mbag*Ts?#fc(d-$y5CDqvuf9(>0bhqy@~IYsnOcc~pi2Uq4Z<70q4B2-M|KWmH_A(5HS5-evDcwIFUHvpTk&Xl|=7zgB zZTw-IW?w4y8EyE?`(|WnswoqmJA7|0{#3G^6JW=6E@)| zkpp5+wNowA3dvPZh~MA>mPh;(qa~p3ad~F1+365^H}mFAeW&LQYL0qYi5>jr(8^q- zo@$@q-&%;gxT67!67mm@*~5$ z)p7OL$}($3eC6F5c=%DVkVDuqh=&va{+1!Imeio~HUEJ5s+{_T!G216L$BI{=b@x_ zTs;>%F?MH)?LwUp)pvPaLb-i$30w9IV&>B@&p?QDfUq#+XNUDoNvq3)jYXa{ufn*> zm8+YFA61pG_|(ioik4nV=grS6%I1z(><}oJm%PSYt)0FC$c@M;Um!9faz+8ZV)-Z*EZ_Nm*hq;_6DHzvb!(DqOI_ zZ7>S{t%-r_i{t2;xsFK1?mAkrjGj)iB=^0$Ljb5fJ;+90r*d_Tjpj}^n31yiTnxbQ zjkl8*A3g<*e=Cvykq_O#Irq1ndhAS=)-01*I1wqg(A9q?J8yoFoYAofhf#d_J{b05 zP=2z$5=Gy~O(E^Thdwgb!NXo@$(~^HN06%7%S_&#a}zG9b$&JtH(9;@m(I(oTqM!l z(F`#?R38j`dQW^K#4(+eP(F{AAlgqJR;_ZO_v@HJDM|Nl z3zo8YM-&|L=l$?)gFaX*d;)C>vUEAoVG#x5hJa49Eq{Y+X@UEOB#(l6K$i?-_;43K zhn6Q*HYI&~k1G~!wwFb`9OLxI03W7EmP3`YtF_e7t7|>y26RXDnRU2YTD|k1>>`=$ zBh3>3+Y;UwPhy(UEIWVMy;XoDYjiQVVg8g9;_|U4%TAP(M`ubYNdr5$e?4YN@kv_5 zqmqeD3U}eyY9=Q6JTD5dy$br9R^-;d{&BygT$qZ(u$4&0NGDl?FtSYs*O6B$e5r?2 ztW73+#wq3PgrG#$g$V~XC7u_y&GdwUlli^w?}W1?@XT2P@5C_@l!YqE@9L?o3XAf- z0MCgAXo>+cH#fJi%OG{yr?f8Ml#<7RE#bNqyF^I-bigE?1;mR_uIguCIxuJN$m}JX z)a}kshl*{=RFcf)?uL5Tj;N3{%Ml$iV_$BT^I2HEv&VjT%CE;Hn(=K`J1{q`>k*WT zPuMY!rwbWf?zM;5@4qGPaCf4DWS$plV1rxYco+gzS7rp-*Qa6)sdFrzYk*h6)2B_$ zTxKgEV(4lRT~EbByya_P_`1TP@7!*(KB#^n%G~z!{V*C(i1QFx9i!H(_aaus(&oKn z23H-j{}=RP<4^u>xf#!fS(7hYJ<%6Ys!m9g5%!%|{|#WKOIc~ktjquX^&*9xCkTY1 z4iV>Fe;c90Onok@eM_|-#6_TGK+!)I5w{hB=3=Bi<3@ezDONKUHxr;Bk0uQPPPukD zPFK;JX(`G$v(Z}#z)F@WM5;hU(?I6lmBu|YS~ng~uRzP6_iJ7t?#$GN1|Z#ja8>Oc$oBYlyTn0+l|NCp&2#msro+c*Ol|pu+8$ znX4vz?)r3`EVyFdGMa1&+c2TOK&StCGvD7p&>`xSM_I>&R-Sj-yRv;A9=K!6{_wd= zZlS>;eC-P%nwmu1D`iFx@a59Uo8{J0)X=64jT=azw$!d)6p?&tY;Q9hh;n-N&pGM8k5sm$c*(y)Gv(RwOk5$c1 z3gL-*Kj?}j5A-M<$IwuqsJJDDzKxwT>-h+~>ZJx5QYkGh4}nxq(V%pB*`)uHLXv z3yDljtmu(xC$A*sid{4g^mTBMg^qlHr#9ew?7SD{(bObnb}fGg*CE~)%AGck;UgKK z1L}04JLEdrCQKD9gzO+W=r&o3E)-h>iHJ@b#imz^ZQ$ym!GS6TN@%AxWPkgk3qP? zm!KglGC4)K;9R<|F^XLEM+OCY)oPLNT%iR5jY3#8m<*@~^$Al&P~` z2iXubAqBlhA9w3Q*47=$Ph}e^CtSu_Id5}v9Qi=fw4}*wk6ptRzA4Z>0Koqz9SS$uLdE=$E;JYm}QFW*~K)*S6 zsji~)Vvvk<`AZ2lXxEn9`^)QXs877jhaY#i3C@FAlen3czw;xexZ~v829ktqtm5Aj69DG^E3pz{|`-P z0Tt!X4A2N=4gkrI&ZMgc*(ySqWUOF}@97J~+*l};%E3F(lK?vC${-|xSc%e7S0 znc=a0nFzb7xJ1X^zl>6vcX8?A?p%9bpPx4MRgfhf?N3ura?CPRq02dmi&CQyM;E z7dM19VdXQiC7X;q;<+EiUs+uLe9Q`^NLh9fAFhUprAcn&!xeo5(Y|Q=Pp>VNej$5P z*0cdBSP|iA1S+I|1cVy~Vt=lD#DBp*y}n|}^%neA&CLg+NoVCAP)?N-NS<)7C0Mw7 zV(+<=di!7(mNb=Y&|`pf7$8Bau^FWvQhmPGWRovv5-brF6@||pcQS0v3yRdq)oQsxFTR8FU224utB@Vxgy=|1wyt+kT$mX=g3ul!$i&yrE$Lsj(u|}v zNrL%OZApoS zbc(YoMkOz!gU`t8-nRyc<^=VON`>u2?d#L^i#8yu`L~w=Exs1+u<6VL0oo0o$ky*Q zqc{DvW7WlE*xv&JPxp`9E~hCQaXYRoFrT$mu5aH15qdZA~niC0=9DzLl#LGQ{_SNSkAQGo!_q4X;6g*gqmE!yf;W8g!~!rcNSvi)Ektm~|6=q0 z<}jDX&i)XFPl(BPc{!j9X=9Zv7pXtu8JCo)WK^-;c0`15sC{tzo2&8lTu|mE>-Yp2 zhgu2GVc|VngQog)Bl62;d_4+e1WTnzj_KCdVWV#G#j;|fbLU0cN~zldVRf46z~(XS z-4tV60`QR|X7P5G7s6bp>`8I!BTsiGE6Dxwolv;0=LSw9TkeRle6Osfy#0;b%13D*-tCcFx%=6IAHlqt@&rG~e%$jN(0{M13-Ag%AAWYD$hICt-x(wcp-L+@jk| z+CN2c{H8l{Bb~8M73;mo+BnEg_r7vuP;;dcO?39H#2F1w3BJlFBFJ) zzv$sZQdJ2Y1WFgaI`O&rV-AdfMoxFb6kVz;Eg7#Vx2kR?xA#4v@Gob>h8_QIkgzHT zambDm3%D=`7hw?0@B6oh6do69a=S`;Ig{&Semc$sxDA+J8 zN#N0K#hH~WWU4!p_=XT|xL-aspC(<(9((j6t$zeW{N-xwwgf$XkI89_j}D>bOO0}x zh0q<&LwK|+lt3ZJ;+?$;Qd>Dl;+}`m&V1dHOJ(HlC3k++MAgVrHIK-!m@KNCjwOn< z|7AbpT98d$dB@w$8YmW|NhKj>O8^`+B^-C7llnf&LusCCl5#MPN)+kt$Jqy=3Oj}f zU?Gjcjl-M|tco;gnnpAc>EwF8jYtC%D>nTT6j#H?yTQyt>2P;5nnIr{kbFF#42Bmcz{ zohEIAaERilWx*D&=E8uzAT!~o=CA^h_IFQX1r;W?#%{QOK7lRf$WryffXHuSbAub; z4W_-urWTVxa5Yxmj=85LGKi0rvvxyx6?;)qx!LJ(JU0JU-z0?QZsCPnjOcC)S2%^-}qhspZ63G4fQ#vzfsis6{n|WhQj3&A8-;qE%(1z;}GTl|u3^)g;=d zO_KOH*Oh0k7Z2$QwH4|CcwG789&6Bp)`FE?1I+T>jgjej`i{e*u$47T2$EBfc%{hh z^0ESzZA~W{e;wK-&HXe7*E{vY+Xo66afV*xj!9UQ+tWx>58u27hSBtY>8hY4ApGei z=6O|?nH8;ER1(OKw_ecDs7oGecJ!^La&XBWs?bFqr7ObfzIHezchqcuRW!=^x6$4QS7!Gl)@1v z4~a|dVCZKYbY(SjC7P;+(SLlsZr=+7vO>r9kfMsU5&Eb({9f1w*NE9e?#=QaD#qE> ztQH|Wh~gO|UD+x@Xo2V@8IAV{TesLXb~a(z^`(|wBjj~Uw_P>~*T$dt)u}N2@xy11 zIgy%}()~%X2fh!-??IWOvcL36ec$$ve<%+Lrf7VctS@5xj7bhd+*tp&B%LZR*3g2y z*Nn@DNF=Y;jVWZCR}Te)QdTo1#$Er4p{%nFj3#P)JC;Fm5v^EjS1_6n%*PQkhP8Rq z93RdFzwP<*U~c*+J&OSY6Ua+|^cZ9ZeZ%SE=9Z8!8FMHRGXLlIU_nqyWm`?q_Q98Q zIs55Gi-T`^EsHr7_RVh0gy$Qi)GiYJqd)Y)&5R(V*;Qc<+fWe@=sb-cKPC6Jim?3^ zr=k(jlHrb4pDUCcchf*p+!BBB)=JMy@Z6D<+DB`?ErADqi}2f_di&$`H=%bL6n{%Z zSMSJw&1}59S4xmR^1RgcxHd@atl4j&MqG+6VwZ-hlSE+3Rr76O;DnNbfB?nkHjsix z^WV`!np93~X&lSEU(f?-YiVJpPGEw5R~E%vDVIRfYvJocJN?OdWq7daZ3mjIofA&3 zHW0jk@oFK4bDyUdT4h;`8bAr4z2EH^omBi)<%%X6Y8&?~#M&rULqD$=B zDWUx_L&&fZ#4nvC8P(W{ONkYDS##d&uhK8J%`-jI*8WsVe(sWf^IB7Xf~QBM!~SlN zbmaI%zgoOgTay-Ot@W%LFM$vnati{=o6m6*Rjil& zNF=z_Zjy|WD#(owCr`hf22mZfR*$@U@sk^XQnT$Ka7?9h(>jT#PgUE`44x>sKI4s! zF-9Vxdy`?$EGyf^ziqy}^9S0atH4%e&d*ezdVkgmCd($ro;HS-;F%xp9gDiH$Yrc< z{bV7XR4(zA`@GZaMH;QgmbV#sM-ks60R4T8SmwISK}Bt(nYflvRj@HuUAMY8VA0Uy zRxb`pg#BDm_tzq#0+?W!5*&XSCY*GxxFbdX++j1Z#;oT|n&N{rXJ;K4Gu# z$$dq%zbDhD^Cnh&bbBIB>gCYU&9Ry}yzesd&j)<(=TMLT=DwZKe;P*GX0se_fhm3@ zu}ScpCj_D(?m)NL37(k06fUyr)1ca#($)M71yHUrtD-h6Qm*Bh8jJpQ_r~*C2REP@ ziw*`lOL#;wWQKdebZ)PFYwF)_@JTAJm>Z>}@KMlLnjzXnE3=hA#CV%EE22BMII0Hh zE=Wn;W6@;-!VIe?5qwkrhqgAry}jdqNm~sA>F;V-a=~@9)bWV(YAFX_?9JxRYcKa% z6vW-eOe$ia#gHY1`IVw^qTej^K;A?c&0kC(B#!4Xpg(=|(i|EGLb|>w#@)xUqC=2o zo}wlFbsQXM;2~gxN}bUXBBY=$>g63lz{RH?LR_wY2N( zalf&HrdR6w{@pM7p&}}?^@*U-H|<3?$P2<7Di3ZEM4ezT%LA9(~N!+=Ul>n-F_uw@SXHrL1z*Z0z5$VeR@|y!L zd!1@tYa>OZ09l~b5nTk{jmU2 z$@zz0IlB*TnKm;Q{2Iyzvj9Rb^SUjof6*oYytHGnbRi?fMJK!ag>Xe$N!d;}rcxkp zlP+@*SS*2nP%*Cyq>X4m2@YB@8jBf8Gu@eAXlw8E7S?HjDA~`LPno;Kox1-1=(L?K zc$CqS8}TeylRx+VWq4>P56zG@_>AK|NRlK;B1#R@{?~(db)xvM2d_41bSMk)O^Pmw zWjftIAndH*q%VWkDyJN6*1XQ|*+R?wNqit>q7ZC}jGnh?=5CG{Eq+>PRfU$&p|=7p zXTj9Z#=;Fz`OD9hm_%m{`*~rj=+#|yFFyI;pTc;E1i#QPg;Fb?{t*4X+03Q;cKzlZ z8&r#xqq115^Ve^?ucr+Vh*t5D;T&>Km+{w?QItbbQVw)UI>Gnf>f_dC|kHJj|$1c5hz6kPItcJ&FjyCu|BL@w&XiFpNd;HX==BjEvWd zU;Ey3FPC*stNYBrfI|G{_o%t4DI{If@{8U-m(1UZkL<=Dzpq459L}}f&0WT~UB;Kj zYm-@Au9CLJ90Why2>BgbUe4ZKEG0h=+I|7FLKqL{aM>svGZc6=XwvJ`dP1eHeDqTW zZ>8#fy9(@%ky>n#fMe{u{e|Y$r5TVl!e#a;S)>?{Sj3B4DO@Kcam1G~7eRkpP@lCK zF5D>asT>wR5cV0h<@7BlM)K@^c(CmnB7AonsXtkdQ3S*TgT24tcH3z$c<#Ej?W3bX zlY7E|^Ig5OI{=-@%E^%d?+#)LlutmB27ZYZEFmo1Tv8v)_8qPeL1wRZGC+S&mehpJ zRu0lFTG5Gt0HY$@(b>03U}%RPM$3^grTLzbwEvJrRpZZh@}&ziJrc0#^vHs%ZP{lz zDJKhbI$$`Dzz0L@&q2MgaHqMIryNR}j3X%b`0_FL0%-X^XX~l<`KW`tsPGy+%o*T1 z%YhJ)9oo$L6`V`%Y<_%Y>5md^sPFDy7BAl`EN7vZ)fch7wp{V87AX3}5kn#xCHi|3 z83HClNv+}EwH@%VU|g+YVUYj9jzqttC6bLBwKUEQO;WBf!BneV$`T2ValtYUX zKokZf2i7H9^Q@mxNu!O14C0aS78C!OeVKf~pQU|VcF>EoBDC!@I{(ZTnd!Ij&v z_GBDmW)5+ApjHW@fro=P0I!w$>%OXJIQ_mG{EcT)SYkJrN3976kAthOizJdZfnqw?9MD}yEtaD?>u#o=8)Q+War-?Rl0z8; z2)ZsX@CL?W;5p`fJEV<)*0Vd;fal@iG1K5e6B2fKP(SC~4eAZc{ZZtnL!?#OmFCa~?y@i#EO4{-CSTw6fgzQpfJ;`w6ELeb~lSm4}=uN$~puph&N~ylp=qUoXziXv?d(*OLE$PSI|=T5rm8a z|AMO+UJEK}j0Pj@FAklsuFe_y=E^4hYGw_LAhZB*ZKC`A z`|I`%lOBkig+Pw?GveyC)#olV@H_-eTyHEOCm2v8p`vtY@q9eef}XV_tJT6!BWq8SL1qy!C^PibB>z@FoXfmhH>BumI+`K(ngqCS~5~z zxHPVyiryY}=^7eF0F^R$1ple%;p$%ye-DzokKp_%;DPA_C^tml68w|)Tsp(*b|C*2 zBZ*op4&dMrOs;wEyQbj7?00{}Y795;1ok@PfY4(pBzKXeH_VstMpt{IgPl zmr=Xn?b3Q>Js}1hn^vb3UauDthOcX@`hf(je22}m+ zO8}%|9vDaoguOs20H@O?keUP%#1$HezFv|(kd}h?9q>get5L><t^5LhMl!|y+Ob!(IHM`tXU_<){%%)vuZ+0PFL0Em zaVw>Ep1=LTDjUpHRBEp~!%1R|F%_i=MotWmuh)R)UXKKb)hc%Ym$Gk8osxl*l1arz z4BS*fQ~|#l_;VO4l!?4d(1#GrnSO_)Bq9-E@?z;VzR!>g)?w*>Ky`H@^X^u zn*+;-Egc1Pr>JBCltS?24)E^`ZPF1Sh7=q=WIkYl%;SAYC+*ChNz5tcw%5_+KYkLH zEtya#QH5@H4Y&k8@644(37d2!71LEA2?-1T$iWIGWQUc#@)_&uLVs?=fy2ix8v^O# zF4$?FiDq9mf2~hca}+rUo>kyU%di4&d9I`~{&Y=^wHd}7FQq^6)M^tPLaXeUpt8%- zoIpQ3`C{xwiRRLFCjcLE?T*3a2_HUv2#*5kXZolR_9JtTT)ffo`di8-;Zvaxjs=`uN<5%1VPln;dWWozZU`4 zIeD*sr7R#pdwUlF$Prk>AVSkI;ONo|I1NN^cE5mfi1GgZ;DH*@9Xo-#`*6l0c?JFk zz^YvES)yuvoHGm$0qGkJzCW>=d!bF-)zx)*J>8ZBj~s-*W$>|hA1o${>^CAU0k79# zT~!cHlOY%M6!S+kiB01k-^)wG^HmHo=Df1@uoUFbTZ!$)Gd`00E*sVPLsrslqnt9O z0ItJ{V1d`qiMS#1sVj#c?JW?(OgG==Xt;aPQ9|7!Oc7$S=s%^q5ldI!C_3wYi>*hNLYVUc@6 zTD7~L%_v@tbRJq*;xws?eiKpqmGuj^?H$XfFfV-_|{8d{1XSI}YhOZ?Cjl zwrSAik3YkWna9#Xq#usgzD`lkI-*gZ>}TN)>7l)v4P7jhd~WBplG>+^kIj?ZktX&@ zzBr!GzU?_mVx(-9P=J-qmqt%VwQvU;tKHc(e1Y!h=XDnsO~L*;2-dwJ5(Njk4R&FUirJtP}P4_>|*&tjn`P%C>ud!$wyGa6X}xK;gFCd*CMb?XqA7_C?^40pU-8=>j*g zo&%>Z2W}=$6o^MK0}fqK!2t4{JgARBnnA&iF#O-<;NVy;$u#Z^#}oIR+{^{x2kR$KL?U)i*0(e^0_gnVlz|JtXYkDL+fxd;LV~Y929w|4f`=Z6N>57#fTa!u zHpG3d00H+ABqT?MXHC{djuk+XE7obt#yHn9{2yP3Y znl}vCs{;lHxQ__fA|Agw!U8o{mGkJFz1s=1ldYO0By1kBBYsIh{oF_ua;-#l;W@I_ z;BNzgY^oudP_+2d&B|xlg^{)vujxDpVnsk?XpUU>GpT!@W5vEPeF`=UTW4qE7k`EZ zEO{Xzp2Ac~kNNoc3N3brhK4fcXp@xxsY<6L=f_Rx7WWFQTu6p8xlf!iugI7*MPf*0 z5F*&wbVxMHzzw9ZT@HOxIUFmzQ9Xuqu95Fu5zEStE&W*E&-}L?lANHqutINa4Dq2v ztK4~6-mdAeAEObfkl~@RZ@uhHB8mzCw^2gLO=a&vz!4={c2S2xQ8gd#yGqK{T=|6< zW5ml4h2=k#>WR{0bBh;e5AR5D(^P6>WH!li1HT2LxvT2})NqUe%Rgh82ln=by4<6g+B0kM6!FFePAkJRQ3DWtqN0MedL*Pe(GB)03;0*U ziHFG`tmE*2rDVk`G#TqQ7$M>&BYz^5k&|e~V-2B|N-sl)7>iK4)56^NY#rV3&&w83A-~!TAJ% zk`R3dQ4A{=sf>1$qt*$LPFy4??l1R)rLJuEajP$?Nipw?Z(315B8ropl8`yI1c}bH zcp+%>tbMe47i`qKm<+ANX%O97Z41^zCCb#1B8ZQVhdbFyqBE~&S6q6L&<=EfPs92clIo7kN&kz(WhjSP;6VoqtB7-0GH;G@pIy$pklsE zlc+VJ!kc_En6`nNA}h!XLn?uS4l7r@@S6f%?63NN*dB)%WDxfj^ZVc8_>_Y!OLWSf ztQY1uXY5U_)5#e|BQYQQ;$1#P*IGSmi2>oA+ocTdJ_Huuv)!E4oBTxFJF@Bp8ER~3 zl7nLY4+cRC`orxK^X_FdYQu@hH#{qXTDOn!K0wj!DdZlCr6kBee`w8QLO%5L!KCcH&kG2kO?0-}>|I@APzCo}V!AZHd zD>V0XxKzRs_xG>nU)}84IyiKJ5~6h%sHxy~Lr|k7hoj*Y0rVXF4gsJ2Nuyg^Tf6Sn zO|NDKY(pl7+=olV0z)IcV38r4TihYSYC)lL*}Zre{VKLV6@ zLnfgVD>5-LF<(%jxB}c8Fh_N-9eFi~00P$pzZ=*)qulxd#2yXGT3LO=*nIrsq!YPdZ!ZOWB=hzNTKI$$w2QeANwsd(JU_C_%H zQ%4O3B4mJ?<}RB2^AsyfB)D~eSOKH6>mTHRjmnfZaM(6CHwQQ<{AzRQTP{pzHxY91 z3o~Lzy?PFi;VH_*US)~o%Dz&TT9#|01py5lgTT1SjcuWgpvSZ_)@nFEjvkr3*GaXb zrOi1|lhhJrmkqvsW_m9dh(lCDTVfDG?6SS;;sQ$eD19E-(Qb9wHw7pV?n7AfM>E%T zPek#+tYFivgo?T>lu^m-*Nr~c*SPYKX6U&bma{;#Zxw=ES+bq53}lJf^eL$pUcsk0 zS876Zdu*kQ*S7IU*ox0T)(BY_H@P^B72NJNc;IF{8sBOw{OC;WJ;htg7GBS-n$3`9 zkR{!xiFa)P^wuBh7bLK-us}rJmoFZ}Z5Uw?Yw_gCUx7(GopE#OfnElCw)`9N8!5Yv z&GZ>ibhe0t%fs<|-i9`1h3ILd^l`OO8Nb{zA^LhD@vn<3^hy4ue&rE;kdqi)YNVkB zng(gHI3}MsWlD#hpdp7o(e0)whZhmAo5dw`c!6;b_-gIDuCtuxF86)f;-hI^!Qi(% zmJ;x6TxJGektQT1tuA+j589i;IhhmBB@)5c2th~103oa(eHAb~dz~5-F(o+0=zlLm1*G9lCBwe5U|t*|9wjFKv*W1QRlB;zqFr7P`9;= z_f%Ws<(&La3*g%VXTNQpT>knf9!c|X*$2NlA2y8!;lkw=N4sA}SK;A2pv4Ain!{f& zo=19Q)osV$^2N`oqIZA={0e~HSH=`*BG-h#9o+C-3}udCk=%5-OB{v{LrRh`x_?St zDB0(tayhw3=E=s@Dk>cENHcGz;0=?|T~Szgn?9@xZ+_4G4;9any%s3#!Cfa7jJq5! zIV_x=oul3|Y&+-IFGI5HYi24;YbXww!R2YH_@a?--uius3g2o~kX6Q`jSv&XBvA@*lJQ zxV-vAx<8}ap|lhXl)*_nrI`MSVbC2$rN2x6GTF7z82FW(0tS1!hcQ)AP#S#`@ilqq zKu`x=#4j~|;m3bm9;FTfxKu4hQ#|cdVK`fz-<}Z_A_lUuD#{zXTujK$kq8FzU`?$+ z7LBP}AcokqkIVLVWC-XweiI8zDimPUpZ1Q$*TU=bTp786InKuKXHfGC)@l8EE0{L0 zykOB+EhN~YYP*F(UEY}3eUA)P>o~n4oa$0G$P$-`56!tQTYyR-nI`Ef z=9`2C`O#71cy=c=;(Jvg`Rp$3cZwMYr&>LQ;`-(3G@RjUYtt!dE=-HZt+?g(XpD-A z*Z;bph(egFkGymtI-KqH*C<|>)kx>YeA5S+E>Zz80H9#$JD>Bn{`O z>IbNWb-#W*{M(21OmzyeOC`AJTSb(a)}OrTi@WNP9u#NzG$Fkjtb}Kc6J<_wkV?wr zdDaXQkw(d98c@*9hWo+c5N6lgOE-v){rYXzY8|VzB8$-av)apX%0Md>k7ifz3Y?ae6ZFYe^zgR5Tzi4NMA-z&#m}B|#1(OwHNH+hq^t4C8;~BtWRqhmutiHrtN?M}@lZ>K5 zefHN*Byt*^MZ@}B=4Z%{U3Z$PNh%xMla9>a3Mr^WlaAN34RI3hn|Ac=tV-K(c2;4` zM;8C$iPgjui|NR5O&QrF*cmJ6+38u2p@RS&h5B3RF=9n`G2%Y^3u7hP8Ek)PnPrrp zgyiEBD4DUAHWN_?Yc~D!{fOqQGBFMG2|y+qfT%jlkd>1wzoUxgeSuB)JH5PrlX%`` zzAQqT%dOD+vpNp3EdAEE4@htSa=2sp;Ujiu_walr|NE9B)rcZL4IFM}A$*(d9)=-2 zmt5hMpQTS55DdT7Ecg+Vsx($&0qHG5mo*91Bq2cD%I+0snM*N~jzO{f1PD*uQWEj+ zoRV^r%GZO2P}F*!C6~yCDWGua6B*)^K%>k!b_UH?@;C-pM&~EBH8A&^Zbdid^vFa8 zN8P9+a}*gfzE}C)h|=dhjBqEoihS0>Y`foSqn>)m3%>VDNJ!wgdAI6K+}1kf9WN2Q z9uW7CgLU$9QNp!QG&ncd2Uwf4F&@HI3kXT-xvC!VFA-=Y@Y46Jj`%{1^NGYNRr1ydC+oJcD$+v_OpF_9vY}X)0{%f2 zZ79`41XY)HAdN)=ukWF*zHWBY75?nNH-VL!Q7Vjh377BQ6?F@mi(eKGbY9)-ALuzO zRi2&vxa$ud0aXS-ZBtFr#V?S7qxLs3?NnzwEHsT7CZV@T&a6%5eEA${On?Fi!r0sf$) z*;|@kJbLvfIsOItmC!8qykEsTL@{dS_DHjDmqyRGnsJrwWa6hU{XUf1E7d#^S=ZHZ zfmQ)$r-MSD09VmV?I%#jDdhw~QWX$(v?uUF*{mA&&W++N3f46jnZGnr;TavT1xJWO zi>Wb0Psd(ps!{w}hIR&ck0yb^5s3NA2iMXTJpqj)pDuxC2z#{9C+(;`EZ6c3&01Mi zs=%+&G`FYw7y30{_?Git(+@YxGTjV}r55^Qyf8@8F8vr;bh&Ym)3S37kSqgqzkl&>fGEuWq~f4{6xKCAZ+PiZLX@=KA@FZP z8&=z~MzpQQ{guSOEIQ-69}5p2)+V8%$+*C)7m1xzUEm&3&rT`vEFyenqaZyhZ8K2Z zcgs&-l|8wXRrx0?{_ur-$p!w6e0+%ReE<3r`AvmTbLq?g-wzGJIWM3H z2Xd0q@ZZ?ydRX3U@xE=idYL=#FZ+wvJ8KT=Cs3wPEp5=a6QIZ zqQRsZd3v$5(3EkC^BXL05^KJ!7m>@jTMk5Go$rHi)Uqo|Fq-f+i zTMgvqCR$PTVhA(qk=8G4ei&R(2>mgejt-n(tchS%=z09%1$Wy4Bmn_hVC8*#B4+BX zE5BJ6$iLMNYw}q3mYcxs2~T@0Lhhd161<0e4S^l~Xf*uN;pQJ~~>Bn)>cDtX2OwQMhDedWFAFhfwhSV+%p)#ctS|?4&#e{~|B-j?o0&4=1j`mdbLM5u zi6z79yn%nRB5QPVWWl|TCs@yNTQ_A2g)Q|T&ff2JzQFUwG!6i`LeOSg`?@CN(Ayt9Jwp3D_^Z6kB30t%$>bV1koFbVQq%y94 zF}jUftpma3u`6p21Kl0B>?S6Qs{P zFH_Mng(0xOjSj(}#(K0#b-Dq~2pxTeIwM4>Go^ZFQ!6J%5kmOD036KtDr7TWpGYC# zDqrkWASV2LPvo-dobj;>XqMqMxIl_IY~@T;9bJkDW|glF^`R-Vx`PB8OK z77NzQOJV*%rNhX5-@+)70BrT4?Qg1%C zu*KCvFB6hlYSZ((M}K;sRHNo*{>y6sWO#lxgNvv{{8|p-m*oOniRLwyPtGYwv3YvI zuo|5%#S;sdglgX7zpcdcIsQX13XvwrDByn?H(iA8n*3wpWSaR|{%pE=Vd zH^rX-IUMjfA}0N9zd%Gb4%ykCN8|kPPb?WU98;2DFQ@~&M0DKQPiBm%ZTJpW##d1c zm;CT6IGxnf6Bi7~EDpu+u(7E@^f}Z5;9z z%VWmN!UX>9!=Fz;vgY9?0cLIWB1aMPYJz3Ay2(m8*TQ^&&eJB2GHXBirp^z2VyRa- z;Ja$y$zXm(S*N>2Hu)+E)3DtTtB->8)SbW-dfh~FoPeqWIxv9zWkZ|DwxXnD8p zRf_sYi^A+fRO&-lm~a>#yw8@JR6D~y(yk3!5#3waU?9G1wB8!Fn*CJp=rtqjxChOD z@w}$QFQ2_;QY!uX#zD(U@pR6X>__LjY2cwj870K4^c$Pt#s;c5?cxB|60-=Pt00X` zAY2K9K|s$$TPzshbU}#=x3W`yu#>N!(c|DvbQdW`&-VnJ2XMzSZxFJX{y3w@TUsRX z%&i*)+k*lc2<_SM#u{~NHIG^;=w6WV5>}7SDKfkNywS2%V`C)Wa}Y5j)OxNU2{ZhS zXi&G?i_eX^!Tsl-vhL-&6Nc0e1?Vg-zAP{{uJsRZy6sU-OQxa&k+akoSKpmCzuE06 zV`{FN?O)dJ&u0;z;kRBJ= zU=V_(b|uluk_nn_seOTlQm=C zi2{zuh-Z$IQ3|3b+It$%ry%K2Z35)pS?Nii>d>?2GKr0b1IG+YnK6~&U?}k1GhDNO z5UK?U7XY3zSnKVWP#HC`q;DICx|D8aQoT~YiGPqJH+%Q|>m4i3y2UOusw)DgCK*pyPG zZM=+;%IcSsL`q|t`!`nXm?-m7mz%j*O3X}j90&}wQs7hB9{sza9g;WX;VdQ6m(2L+ zQxWzMnjph~1qn`!Sj7CBw5LP7#PO}zjqQhJycy!UL9ceWF|hIyzCPEeH2d*I=`xp5 zEg>jui`Lru-)WdGiH{6lC>-q2NI5Ecgji~d;Q)_APK*~Wf?e69nfH?{B#~|nPk?fZ zqwI}%l|aPn>gqqu`?b;*&}BL9rHf2CL4`ty$u5Uo_6L@%H|TKe5xgKDNfkYgXz4u4 zN6}f<;I8vDV*fDn8Gvp<s&tk4w!~D)n4yj=sD~;7&SL9kowFy1vrWdMh)V_(8-)bBUDm(=w$!U zriP?b<_c1Z%Sy+^(93Cv%UPx)GeUF2>3!u05#A2b9j3mv^;LS*j?KqS3LBl_JD*uo zX_;HtH_+ajovs^+KAx>~_GxG--Kj0xen=}n`dU`@63jgo1Ma53lp4dc@I>Ik~m6eX8S z9V^X9%i^K>n!Q9=OMRE)P~1f7j_xhXZS=}b6AemwR%PhN<7Fz(3O+}qVl;VzE1+~f z?jeTuo>aTvu|o`nT4KhKN?Px6WrGPg5wCRTYha+alINuNQ`cGKnBLkmm zI5$UJQQj|AMb%&A?>xAB>!GUlK0=(>UpTOU93wIDjVA8d(Z;(AD<@07#Jh62@0B~= zLnzftC~3%2p0I&}%D&Z7f%K_ofwoi|FxL?e9{X{dGU?Z#@jq>7tFnF7_FEnuOHV-|G8J7qi6TNy3u0e6{oH_Nct#X#>{R9qr=q zU$oGmW)OG!`8A6}QJeg#&@&4s!|A;%bHFVF(_;;&*JNG!(pZti-s{FDSJo2MwN$D; zunU+bJX!+<-a9FL0f&_kXu%{=$@GXh2YjcL}>TmB!d<;cGzd?jSBlraNzc%F%yQ)WtN0ZjhRe^t!Ul1278VS zv1*>1elb`{^Y7#B-Ef$7@_W)A-=nKcXN<$X|GXfmhHQ9>jen=eO2U}n(RjyE(7fuk z&L<+J8?SCqW_IeIE+FNZ&8YgiT%}xR3SVBFl0A8B9L5nJ@v%X=FZvuy16ug94Di@p zM^XmYg@yZOaoukmaHv}R*-t;bFj4{4aplgr+;Gba*Ac!Np2l2T4VQ|SGElkC=s#=A z>l5t=?+K7=h}_hZd$eZ)IQCPD2^P;<*{Ca$=(VudVh;Nsb|m-J>9Lvm>>UeIW9l&; zus3^s;#h2B`tiGNpb8)#4qvSxw=-Q6#MZD^N>{WCnIo>^S#~YBgqWtPistb-IqDSkA0@YcgJFQ$D);RlNS*lXoYceaFvmW3Oi` z79PG9G|-HUJu{mVP@PbfO9_`QzRCCYbKDFPj(-+xK-U-&5^wob%4t%8pQwYZ!A$o% zp%7nIED9Hj^p~mBtttW(j5m-Jv~Dx(!8+kxM@4h9u$kCif+A?OuQSFxKFi+Y#cLlj zBpA1_QJ4wFa>Zn|a6=T5&vT#34&>$_Ba3%ZGl-q2x1SPhGV;4Gx1qQRl->GPIPSbs z&P6k4!(<;U%y*X)S?t>=A=s{%0fvd&gesdE>hCy0_Gqh_V!Tt!89#9bD5k>9@DXE^ zYsP)`W&W1%8D{WcGk7g+GpB3DtijwUKPH(aj=1W#FDLx!uAkdxKYE}3SJ%Z$^&+S7Ep5y`p?}D?{Unu?SeX%H^aVp|?_cGX{=0}9MXHUlI-Hw{x6 zTlOD+&oNT?z2zqExV1B1U_3z{nU}ccP}LK#2a;o&uUCYb8$*iS(YerAssj3HY6A#S zY#)&%bjzClqSd<@c^ZoxLl$NaF~iWUmm?Po+v3fMHgu{$b(!p13BY@DXZ)-qDuHP? zEb*+&3L@!Ns@Ub<&aH}6`o0=EY++@EA~C zqyGZbT=8{EgrQE%>UHNQRYpfJSF~VMN{v&*?y|K{62JzwX=W)klAlRtZj>%Fr({uP zeXThp;drI!Wocj8I>&jc^>>@}eu>1Kh0A;Iqzj>MU1yP;37mVepC#=Tm0*O?LTHa+ zo#dv?A+FH!B57UcSCvo13BvW-iLe-8Jm#XCn*=b*m0Zf$KOuj(nWEXBX8lowA{Cgr zM!uPeK<3U?37P&C>5l*lG(dR%Dy}9ZetwwiygfCT3A!gQ6+)CI; zN=#B``Y6h*EUX=7o%}l%#bad8(B0Db-lf-8<>k-C;v-7OeAukelWS>{(?IUx9{2NN zez&4JA)Cr5!=vLO`0hl^$z4miq?7x*(yZG%oX&PB%84$<+X=9X;v@gfa$dg{iy;_5 zmin6cLpy0a<=U%=yP|qN><|xP-cv(JrW=d>P1D2q4hzy5(V^n(y{@8l*Sw^x;{F2j zx>Vm~T^3m80QJQq=By=+}_EBxqgm#JxpZP zQ_Gg_JqBMrKDjvK!R}>g-vh6#aRlQtQ{hKKOAfzKiTBZq$Tmz2+xsnRIC(zL+BrS! zrRlcmqY`0bQ$*^?vY%cy*I%uXAqna(7*!4Ov^AKY=OLk&(zS121eMfI^v>#6P%Ejf zg>KPz)In-ULlI(#Fv8~y#2xI8GD#rKl{wCNWW9b>BweRFl;$GjD5kS}8d#7y;tP%l z*w#~jX1k9eYNMaMM9V7+>$kBptx%tC_z3c2f=FZqQ=gH%KbH#l-4(iRL)`9-;`!ua zrPa5Z4hJvXfnIwRlQBe@LtP0woha1(+9yfb@IlWL2-Zqwbd1C|*P*B9gt{9E5|3g#NPW_16tH#nN|dIXt9)$j$c*k3DaDoQP1vjJzdOss z|3^ zkDzEp`g3d7x@syMdX37x{Me&E-~sOl{LlvxW`_>&*(^4LZtp02FF`p4%R=%TLb7Cs&~FOQPmRn4_GNB!YmaU*zL2OH+!lsDVuKdRm9k{~B7P;iz{apA5VlpMZJ@W5 zG|%sE_4`k?xwmR}`|jC&W~&{^%0be0Wh6octS)fY1^|aIK!PE>TG=Z2@o@*>0dA*J zMpC(h7m7H7U&kF)qbGVE4jAcOPq80)(%O~2|14wzEnKMnWH94E=}s%JmMPwI-qE?% zAxwbL;JnB2($lEcnFfqePOlp%Z|fuM%HeLtO7S-^+h4r6A4cKu)%ow&ZjayJG=zH) zrMJeW$>}37`eJNEnT4C|wevsnUU(445##Rl%aw#j${FEzGZPKhb|pUVppjB1>C>90 zJ;<_J{>B7f^!Z?$TgKd`d_su^N!POI?hbfvUni`1CuzD;y5){b?WB(;^U)^00zRL4 z|IMnNl-P&h<{J&U1B8M|8PD{Rq0{5i_&5UVomu1N2_B8Hn76uRpa}1U(Qq=pu1d#c z6h5k7^qeAif9PLv1R3dWi6SmoJx)-v6Yb?+YT11R4G>$y(8G76G+7@M)5Z$T8my=5YJ6&Rf_oWYT+YYn$`sD9O{Q#aRCd(kYX_@=6?VkdpW!WIB zT|wpHrpoIEk81r0N)oUUcsHh{Zb^Nzmo{8KUI z7<6qutD3@6Hd(mUQg-=#HGDo#?Akfz3lHpd+)_UzI6wT#nTQ+lVuG=nC>`Bkn}LGF zW@7F#GF*XF9g`f_nuedd(0N5E9A?naA`X>b8ug*w`?^MX9}g0mDRF8GZb&wlIUERo z_K8F~5d{^+_0Gvdsc4V10V5jaljX1R_%InWnOp8gi8V{o`%Qs=1ziGGUrQ~N;}%en z%7mF<_l)B}hQOrg^TxUp51u0#WV0n<(Nn}8z`8hokK@MGnHr&*zXz4f4<`}P)&vXg zPL$$PA81~9M}xjEq4vj4E%G9{&&jkfb#^>AaaCM3C9EyD@lC*9J0&U=9hh>$UpBWb zBh`vX7cUo2S5Q_+t!(kPH)gI1mL?`Wv$NDdEP=clL4xu_o+An*zoTUMK!t>9i_*QK zKKDpb_(9m6K!|JbAt;HlS40O;u%h=eA@@*J$=Zg7XcpCfwg5%^C!K+y&*AQaj)0j|F2iC||bk_}8|Gav3_t2_)|X zI@4SON%V3~Kdme=1Bz))IK1gRuO~8&oIJhGC%$$#YMNGbnrp~1`DIU5^?JQp3})+4 z=Y3x>BoQP|B2OpJkPG6*PZO0Ua`!Iv+ZH45Av*RD3wvfF?RHxN60xA$>4rtvir2K$ zwml&EYADI#?u2Dtoys21<-mELTlhNM?)1V7ugJJ_0#KbhdwIuqvyQ;? zV&vthPe+7L=jFmb4cndI{RkB7(ZT{7g4+EGWQu3=Ytk_&?uzemxn&|S1<0$#fyIK7 z?%k0-W3T`=FqH2LfC`EoR(^eX17MsTp}=IbDo=kwoa6V0DiCPg`Vk!`58Hs#OF=p} zW~&9T2L%6dvhK)S@dqDJhL98%7Me>~^jUfQR!zG&(CkzUKV5!S=&8>bl6OOwl5D+U zcirs$h=A8qi4;|9(@gY`47$&9LWeaKGn!q=cRL{JV@XT1_TQe#u{zT8lm&D31x%m8hGky<+RvD5M9=S&y?Ljt^2U8ilS;& zRH@!1DwVX^tZI)U|LC}ias8b)CAe#ImTeyZL}NLiBt)P2${%Y$eDHeze~C~3rE#J2u{85m1|pI8?Uv?A%l-9lMDcsp$3 z)2XAa3jlRWI|zKOU~{RG0#iM3><@p!UJ+m9ot~cl$0r14W0d<^0C1)zCUgS9mVZP$ zh;qvMy}6r5jE$ z`_Kzv{#XsAi0lWVU$>P$T$BtS94`(*`(SMWkS*|OfCc0W=sq(!FPw|ab@uamWvJG?9F z1!>+h)GPA0CW%HC-rsr$XTRO|n4K+kQePM44#UT??Hhj@$=_)HtyB|5JzERi& zyGB)&3AMP-H7p?N$)!pdgbUWnS~@<6SUePu!ewMAqP@7#<2vfuah34YECPeCS4^O6 zeiiW9$aJDdrogXGuVBrOhL&C=X~&vPl@#TdUV6U@AiARNE0}>Gz5yIDJbUB-G23yu zE1&jQr~mmzg(7?aKnRL^7l(mEv;>Tu zBtYtOPPkXzKYbw%Zlp+JFytn;M(*%C?rR=ExDM`5yT1eCWTi6l$`AABrE#W)VYJrkR6eJEAE@Fo)=7Ud|`+Rld_ zVP}ZN9kg=QD9cs6=O_@glTUG&sj^Dw{=^LqQhovnYHhBfNL1_-4MXx^5pTij~Y%dZj7CcfCy;0$!2N|wZ}^6}d}{NO;9;%igVNyU>oJeLeaj#aR0 zP#PXrIoX`9%h{1BZfJRdX1G@R1(bJ*DaM|+=i=d=6Euw73__RrtM`3fR)f4`EOLdG zqY_wgn6LRrVsN<;=pruOG>p)K&LdMW81pQSTzN|Jy9f{R2!`IQ(>TaOBY1(jedbFg zAn0BqUFCL^0>Tp55dNKP%61Q1v2X4CNi`JRFI^Xn$ov`8_^Os>vRs`4T5)Y8QuSjI zq?l9GWDqL#i~AjVS)DYSLUu$6BBLXk zLA?JeNtCEVy@#9KsIV*FGEMY$hX`+-mxVYj7Kg8a}CR)T6()rn#-WJ)gMCztTui@KN?nUv#vcO8-M}L8!>vlNhMbl z9}iSdt-E0>UizB-X0o4($A4pRZ=A61k;>juHl*hrZ0E)yx#;(+AI$02$*kyuI??Ar`l z9`W<}4OcEQG6q(3zEFNF?m_fIx*g1kQ)omXe+~{=jkgzFw^?W{Mq#^)!JYN)aPuSt zbXc97KX36?%B-f&?CxsJDI?zI*qz_~cqbz+Aw+@$`~hQV+-;uZF%~}i#UYlRCIjml zWwtx4v6U*}m=iXUqGh>*y6E2N1>*IS9Td1?@Hej_Ke0K^;=TH~ASI413SaenkY)`l zGfIG4dw_wsl+RSSHlxD3QDC=+MaQl-m7sT3(6@4bo;ub-7}hl*_`%E%RSLV*U~bwj zNg&U)I8)|{I9O5a%O!BEGy$A!UTV)UUuQxHAc2Bk@;}Qi3OJX0@uLJli<&*w+;(Ok z0w-g-g+DGzonPD1f(J^zmJVG`I$JqtASh`1K|~5;+lD3zx%ID~{q*V6vR7ir{a9~C z`K9?r82pz0_%=6~rY4ZoNCufXW;;x3v=~r%wSP%g5frLVP>a*{m+m7y>Cec>kbg@; z_Q*v9;RT)qT&OZRY2&_=&@+F&_Yt3{DtlC3sczD-(SG?!3QMU$xp{WpW>2(t0;!zP z-qDP_X9bbsLq4-4ZCMa5r+oY;k=O@BHTS6bZye*WvVy4j6cNN7yOsH$G+@J>}%x&LBLn%Rh46 zgJHZZY|d#I9yKNY!@jab6#CX_iihrMJ|*I-u2;mq>rGKPOy<*_c?MbW2}QEUrYFSM zjCo`!M%|?y~?NjO+vHqS?Yp%DrF?kr6- z--!O!&FuVueVT8U=4i~(6CJ!7r37Wk}1x;(v7Q}h*}qg zgS%!jd&78Vk2{~anXngxd1RW_{UmDN|3J5FhS0=+x}Y#g~ddNBQp;$`jT@hAV#jP2}rdUhI{`O2)HlO!T)e}ePN9m`MfxJn5ZooWe zXt0buc$P0fb{~&ji;O?S5pB`25;3w#JaU@%+r$lzr{((De&lj^p^y}M<9ZjbXp_G; zNqzm|NuxEcsAB6)$t_+MSIAl@>wa&)zPQJwWCpW_%=&G3`W z)EVBubU7Zm8>KBAMuqTDml>4D7C`^q<{Vg!DE{X}p& zmEDYj)Cm=i%TK&{w%ShhChz78-cV>vZu^Ezp4W-MY&Elebk!7eFhQoa-#yTYtEK!b zQaKNP6n}h_J2F^wfTX!~Zbi0EZ3$&rDuc38FVcyCFXXK}2R2spm38!LXL;9yr-pyD zFa~AvyDI!?oYV={?%71t-e$s#*2|(%qvDp>#j=W3jHpU}@A=-Da?Vm-Q6ouX1tYeJ zaTkaA-yqDUxB%vrRlu$m6=&Sru=ArM*SknWd3D!=?x13!}DB2apUNMBg-Um%kbL#yxAzN_4l>5B^nM+R;fmmG;BObo9qb zH-Lxc4h#F}k0}7-AMFwaPh9s&rsaNomA?90x!Q0M!^`*eSs-CD4QlcxzZ|MNa$Z(to|=Hd|7G)9N+Hlx3?G>u#vux`^IyjtP^Qc znWhv42KEEACn-wH)DyI`Zyi0HfoFxEU~(kfcyo_ifPKwkRY{#^f5$UKgv*Rs_*44o z{i4XdOPULb^x>joxo`&TtmDsJ=dKW4G}1@QPr43}hQ!T_mT&Nt!{%$+;Pr_9_EMpKDnjxX1LzcJ(w_9f7&RYbIE zB!k2hzq0V24oTQvE%6{R`$(#;Py6uLNIt(#*N}d#oimVaM4R({;VP>MbjK>%Akm=x z8G}D&*7I#)a^FBw11T`|=7gkIT|aJ##}~Xbt8om$hJL!R0EAy&{!Uj6ri>`65cI{$)-IR^0>6TRF{t<;=(0_ig0Vr_Dj@&r6T z`75`;*S4Q6n?cbA-F27A$+f+cyz%GMju5fCu0a(X;vckZ`#$bnV(4Wct_dMkTQ0FL zUGKA8IMGRY>m6L*8&-s-2m8WR0>6fpxdAq8yeK#)cP(=pDZJ_Ma zq^DA{MpX#IR9*fiT*gniD)|dDK}c;|W^=^OrlcAD{g2gkz--W(v$|P_Wv&O<9Prhn z{^nWSBR^^OM0J2obiSGXu!Mr&eNGw@x{=ZT!r-nDGQQZ!=I_i?Wogd8 z%w|_VpUu19mYaD0&{IRhqjUc?ocJf1W`t2(^c5IVbdQ?O_}CMGxmUG|S+Q-8r^bBn zZMoZlUHX=c$4E;?4mQVxV!>~AFZskC%!b#Rjh#FHdcz2h9Pu8n9>y13;AxmlQGe12 zZPZU4?xmW-pqlc73hBN%+CKZXJ$ExIz}hI%sio7auW=DpHW*ay;XZo)XmqtT%=>by z?;J6MoSm8y8u>xRuS(joNZJRfJ(6cI!y*d7Tw;Tu(VjiDIkh3l9ob7Q!4>06-BU#T#e%+)i@Jf zb)QnA6nul$iIoWUSArzzb9g4)Hgn#y$OU$Ohej?sMYV#?Kj3;PA`3(!y>y&Bemt

(; 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

BERv;{Mt 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 z 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⋘dE2y&skg?x4PIO~* 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 y^-<`LK}+HJ-AwqM+fA!KD2Aqm-=WRtz# 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
j5D7wugoWh9Goe|si^v~pHH=6j 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�cSTu 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

bC7iuB?%uYO@dx`vxy=*3tpwQ+8T?Nv2< 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�pR}7ZOFe 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 q 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

Hw55mLCp!2uspxMMIaCQx~;W$Uf=RQ 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�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

iCeLa3h;lU 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 z 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

bUT!nyV7^}cb?@Whql;8t@d?4s$6_(d4n=hv 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

~!o9dy+iK56U8b}Ya`+Ld z?;vi0BxNL>P6{)vOjtx>I9q0epuxAww9O;E^E=p#;@X9F>89z$#wyLoiRi(cLF3jY zqvqy2|9^VZ987Da?0%3)`wqooPrmuG#K>Qx%q72lHqS_xF!oi;u@Qe!5%uR#s;xQ+Zf`6Tv$boGcV-hJ#tne$CE{0=?*E=GE#7~R_V=h1QV2-!k*0gdECnj4 z^T`T-=T)V{F&`B>XX54}dAfY=*f+(kFv%l_Ttwp5z??m)a;!=j42!w$v1QA9n2+Ab z+(rx$v=L;Gh5p)|t|`=*bcW)H-VnaeWh>v*Gu~X2slt+u7ntr3>e{399=`Sc7Ui~+ znwH5J4_JN`7fO!kqfy++HFHeBHt+x~ub*G;}2N7Nkee@rT(P8p#rDD7UR5sSJ` zJ&hc1(UiX}-|@#`8q8x!kj&lHz795~nD2an3g5yV&yRI@BH0 zM5R`qEkdymd>bQ7@00PEZFB}h4x43q)>En)B~cA%P9+NU3Rmsb-O9g2ngSQ;KaS{` z9tyUUVdbhfI_Vu}BF^Z8d|#(gCbF1{Ep{fjW8PQ(im}m&=sAXD)PA01;NE0xDPIG# zh?xQ!amuhy?;iTCaRhA&N#1uouMBh)e<|pk>KmEiUT$pECp`f}G8^P8?!BQ!LZCCM@DFUAZM~_9sh4 zC{#6lA2;F;VKzKpdHm{kzB##^DvF>&!+uRgF9H9g&=_W(_u;-)g|TLAv}Q`rR$ zVWap2T12n^f&(^PA0+65Bj3}%UdIvAfc%%E6O1D}L#n%oK2()4JQ?{3xxdK%jiDdK zx5s=$Y^YE<3So64V4UY6Y@%m0@2`1%2q=J2cKjg_xgvv-$$fU-1VFYf7&Q@5`Mohj z(J?sF!e3?7+K+)hKh%e$u_&ZY7Vh%#qP?_}GEMILZh@eO{U|OhSA;z1{l3&awa?Rg z8M&p=Omtf1Xt>Jm7{hA6!x2=L#LWV=vKil!q{&CA*uLX-s7|ug#yxTUz~>%TJH^*x zi$2WR)UZiq_GVPTSeD`^Qq&=uNw29pb9kU?MRd4L&7~8{(EHkX^WTidU5~ zS>TnM=p3NV@Si%^MpPDWGwN3x{%vYaWgIus z95>nr{=V(cDlC*4F-}p}p9|8ul~_ZjK3^g--BXP|G4~+PYWTg1UM1L$#TkA(iH5d1 zQTlpzNX5*_1zns$YWnS5mF>H%VNgJCQlbySU^q^(atCJD)^g%!TLXrJuQQ`EkY}Z~)PWgls1I+6aHD0ho0HmVx3@Q6i?kS#9P0}{=Ys;NCT(|)R)4ma_GZD{tlPQ=R1BVBF!wPocfG~X-*(Fxwym=~KceFTPsewU zIifXIbu-1(_LmJWK-ZAoZ?*Mpsu}{qe(*}nSMANi-`;r1u5A8PL&v|bhPs!Xp zkLKLh^bGhSsY5U^q@qbQJ5{9rJF^RE{&!}pyF)?10KN)4aqJ$RuM+k;-M29+JIZS1 z-14{cJ0ET)L@M^sP^^sGdA|Y)0*|qtU%E%daFz-Ka!Qz(`!EVC8_nv-OxT)Vdo@zAj@qqxlmgg4pgBWRBm!nIqJ{RLE=s>IxnFr6JEHYhMsluHcVS7^>n%~=0t ziU29w0t3I_=PTlb5?bYpS^~#%Kb)o=PJ0#h6tY8|xfP)<;H&+3F>@#anacn2y@u6= zPdqj$M2f!oWh%pS*A38LiK;5x?tULuYp^CmX>#vs1RHi71YA$}zDl-%S#vtPu&N{{ zRN_PPnR4C*#%M^6i0sB6CeFp9j|&eekv$n<$9xOZ41+O%pgwO|rJw)Xpht0OA#BNA zSuTCz(CzGrZ97t$%4n&A@hIAzJ>0c@z$^K;;+)*q&3A@iqw&Z6cQn`O zJicWD%#-l7^N66d6{%~&_pM~36YMC&5Yn0zy|3@9IJZXQZ_f8x12K&=@E500{hLPB zE9J+Khb-(^rx&s)9R%RE;Ctuzd`?(fv(5edvO#KdG8EY%EbP||I?=T18xL5p;)!x! z)oEcbgU9Bzj0h*bNYG>VP7EOimg<~+aAR(&n&xv$>3Kw28C~)Bz{lcv9rbsJ3Hc|m zd3Y@y^6v3CY)t*&!Tm5zz+43Qvd-o)GWB7*+i4kTJ=~+hTDas-Ri2JFr!qLwoHjRBhQ~S&JNxE- z+UC|)|4mX~Vwnq$ht|U!T6QfCT_PhDGW8~9apwvpZ*p$~ni)0IS_P+@d(eRixNbNx zQj@Ps30)4#sT)~~QJ);fuMC+t8F{QTY6W7TFwsE>uUGFgVRs;i>4nbvv!9`Lwf};b zBXwTu)-zO0Kh?(dxN-~rabgc=J-yrlf*6iBTOX-1C8|Qij0i zSNG8J6OyJ$0aLIpihKhWGqHoVVmxq9V9%ylru@dh5(#=Yn>`lvB{GIYYb8tBs`K-g z$b0ADzZykwCwm*&!YEXjVa7W>+zL!{)yYG#K74vU^P5!J?^Bo5vm>~+23D4q5yg#M z*(Bokoxi(<+VT&45mbg~pmHn2(HPOnJG%Wz2F~k&tIrB}cs{IMh zd-bI8wG?wt7MCOPSOpE z51~g~68XL@0CskLoa*UKJO$HZhU%134XTfslXv;Bz355zj}CJ99}u$s9KsMv42e+X zX;SiWHN+&ic~ek(Dg2r|e7OJx!fUvxg~cMDn&EIGDM zt2SLgSmeOSM{-pLuVlEI$Kbag$up()Xm*@@X6Q!?oXM`&Zk=30ubsJtS9hKk}~sG9g+8>nz zjmj@gm8pXvw5jpgm)Bq5v=9T6TxvQ-*)?F~zf9QNH+z9@PnVbIIB>8fMj94|Lx{NN zGDbu=guUI)WN$4r)Dvd#0x1$*vi*cbueZ=iM*?D*aXooYTq)4|`6Ligd%No@ARGz3 z6_KnVeAlMR!0LSm`2(Z<>i55A!AWkk0Vj1Ba7=IKgNX7?zW$ph1L<19hjzxuc=b)b zu~=%8L|P0x!>k{aem2V(I0jsUMCk983s)~8%sp&rJ}!UlT4BPUaT9gr8**Y%=~@B6 z+-o&7yExEau-jR=m;yY_C7#!2n4G*%3-F+goG#IYT$0=pPDtziG$0u_0iPbUjKTEX z^?(JfZi~Ftd;&b*H@s*YH$EvB-UP;pKeo`HT< z4|ej>EPf7Nd@Z-h;(PRR$fu4i1<>&z(UfXC;-(5i^X{Tojcr z7AFgbp%w?u>rkL>TBQA=cG#^1C9n$Dy_1r_ckc5HoP@KZk#efPO?9;_y7c}ykQBg&M;P@Q;se5)ZxJZoLR{VQQzN3X%LL5 zvHodpnKHTmgX3w4Plp%PWbbrwua)?xQLNw#HIM0v*DDtayt%+p0$c%m6!e3BbcYd1E?4`GPBC05`0P)73P9#X zOUuXlp_{H}Kkts;IgPmjP$8R~4k37>1JMIQm`FQR)3rQ`=b7ieNZ*p~)cT!Xyx!*- zPsW%Xi|{j5YZZp{XfUUvDq5rbiw!h+-J?yFr3Cc^!kmN6=RTA&9dwDQD zmg27i)hB-AHtyuKHwnt{x`J~lkrDED3i(2H^wI_K_x>NRkeA(+h?Q@2TSEPd{)AQ= zFzki#@skX{l`rsLxbFQ7Au4r}7PJHtnh#@Q4w3rwyjk$O=hB;eQEPV7wlhxpxdmSY zVoVBbt-qkm@AT=C^t7y%BtpJs;!UY*l&L)d`#DO%00gfS)F0murFg4p zd{+Pc^m=i^i;W{;j6%k;hh^xKc|G+SDsAQphwHFHmaYwMDkiwwZBL#pPDf2>`KK>d zcH@MpZ@yJ@eDkQwj9L)x&8B`!8c8EJ5sfAnB+S)W>o67y1A_T%#Rz!NeeHd>NqYHe z-b93LS-Z1$ApXjh%Rb}mu zGLH#*L|C8=y>?@gK~O7OTuP9_ST%045T&c|sh!^?gz~Ix?iXmQM<))6*~hzbKDF3q z))+123|uYZ{fgm9Wlg#=Art0T@^98aSh3~4J(^anv3vOUiXtd3ju4*aX8pkjGlX_R zDP~2AL2JRzXXNSBOT{Q%O5F@rG|#bG&YpU>BW{;S=&e}&$^l|T29+V{3@GT-!pwRcqQ(a3Ezk)xi&fWhExT%Q z*y-u%cg*-|5YtpjyZ|P!+3j$yYTO6d@$~fdk3PUZa;_}=?CTSHf5`$Xu`9FG2+Wa^ z^KL@pg2b=#KIOaMWO+StZkW=n+-`LhJzWTfubm)F{tCc^Fa5Se=F??9*&$U>fEnc8 zwhGctuo37DCkyo)XyTf6gAvaC71tWEU?nAdg@PKT_QGxq0{xV9n?$}hyen=rw0NA_ z>m&_JWThIyF6rWou<@BeLBlopF+#ZfInn4Sy@mk_?;j8yRB>oO} zg?jm9yhdGs2}?Gyth^#PUpBs)&nY0kx#Bg|OJlkGIWUpclujcpf_Cf-ceV$)=(|CdI2YNFpZ^>71I>bz5ISs%SKr<4TX@4a$<3F3{4-LN^9kFViy zV5GIQspJ;l;ZZFY%N9MJb#m zF?o+uPpcWk>^AW>NCX$RgM>&9EPV;+k5^xIE`x0~iuJDUmaFsgGxvuXRjZeZPG$ z*I>p^&+ZJ~ZACmeY>st&H!!2}X4F*ZH=~yBtX4)c{r4*Yn|d34?_-V-T5v4%dGH3A z;6pGLWt#TeKY0&4b6V(7!Xrk^BtoWA=2(ct7TWa=}`+M3s_}{7d;u)Qv31gJ8Q5|OEZe-K@bcovVlFeBlM+@;p zC-XPs$RonQ_LEc4qe{+wME)9<=02-6Wzd8GxL;|5?aPnV3M3Dc3t(jtD z7B#49p0|O1%4Aii&t7q|5G@S!vh_2O50~_c^jhlS% zAF^XQ*q-GWSC$@BQ?_+qL`OtK@Kaq2Pe+q}nzeS*5Jjbe2Ry$m5C2_{TQF$q0ySkr zM+sHrB`X`ZuCI|1z;8s{)nV4%w6H0xYTy=~=Ap?a$j6~N?tiFWS29nt;&rq}>*v(# z=i)!9V5|3q_dC5dX)_FLyW;;sTlV36#=hxh6;nS2Z{%ISfm7+*jI=^xZ-wQyrnN9k zM$Ey$pd%K~y5Ki=VxLvTCeRUAUkrIp%+|RbUgWZI`m)7UkpGbKHQkbMU3pun5XBBZ z{x^PhOO?w%%`zpdfax}8yd#bv&C?lGT1RA_u4e)ZPD_z$LNfANAo*juEsddsppT}z(y%azv=cGCk#(@ri0a_%aE<%;UFzoq zAtAZsQvOXnCal)L{6R!JkLY@u&v$Y#ON54c#-c{fH}ow7M*+6vlWxZt#~ zmMsyL5QEOf916}h{Q~tS4o)KMeF%N=m@y#&gpfVphWz4Y=j`cWJ{YViKN6cMDaEV` z-4h?O)VZ@es&6)KW?C@tox9WD8sv787zA>Xy6u{0kl$+R3A$3siOMB5l+iXdc^LoU z6G8XLqm`Hao$6qNsqp81jhG%=3k$pt`ua#kAMjylUadpj%J%nO;4Pc1V+c(@fsUvH zEY@E@k0-wqgPt#)6_=5ar{ZJ!S6o>ETP(Dl-myL^+3!30jH!Qe(UkCu3Pn>7Wswl? z97OgGxX@YKY?}%tj#i0jX?ZA#{w{xn8c;1IWXsAIJZzVO(MC2@Ci<$XQRp;{Bq<&7 z!o_Um#b~?HB)-as<+-be(CIC?vjyz1XvorN+ATKIqF|HAXNIo4$56- zhU?S(u{0n_A8P9{AzOSr+X@M;0*XA@bV*~BvFsBYjEuAISJI7WQYrf6iqnNI2qnR$ z-&Rjw=B?hc!;)T^kR;NmK^Vmm%}HJ^2SwsXTIIIMVm zZfzY2f(c$Y0&q>0eoGG^a-OvaCnzR{SY@ngF)lY^aKpsB!+kkiSE^mEt6efuwkV_v zYtc|yN+Dan=*w7cvLiz@Djr8ePyaDMinr(6x9c}yNNL{J*d+nSARI70R0c~c(aXd( zD5`MlYxIL(6RPqSi$mw&Z93Awn-2lQD{t)A8+aJdk*V0HkR)K-%?UgvL?V7=HWgFI zZjU8w{bd)Yu2B;q%EmsNX-pab%!z#JBww<|kMjrQs4i%0$8B9)vnlQ<;@yZD# zOC%e+`itajz{M{tGDYRZ+urH4yzG$es~E z%G&`*&Uo-OR*yy>Z+yV(bEJ1?!UGE$jI!@ayrV2qiFF2ZX*O zo)rTy&oKV)XuKKlaRM7}puDN0 zk)U8%C<5&ya$z)+_pTR&8+0ZmgLOntNJO*&2pbDGHa+ZrKCIp21C}^+K>e>Y-%i3N zC}(kzUy=?$z|6z`z7;??fn2D&yStOEWQFaC2cRojy}$X`wT5k+&&=5MNXYvYArLL8 z1tupW&5S*L$vudLiPJPyh0A%PZN>Y>RODY&Zk_WMTOdVVhJZy*N8bWTs$O&3;N|lT zjl}L53g+amF1zJb_zlDXCv<(z7Cb8WZ|~IfL$6&k6{-T?RyiP}CrFwXKIg_Uv`}8> zkcLwC^-9;7ucVA0ToQjQjx*adc-7JMDg=|U)!DY}ORgf1LSxb$eAO}5Jxt8E80*sP znW^zRbNNA7NMQN$NP~TyP*-=F$PZ8dM5%)3PGAKBgx-DE4DI@%tHb#gj~h0c!ouj7 z7%KUxusp+(RqYc&xYsDtLczj(_r~MkphCCp$&2|~Ca0R!-|UF~aLxVu9{Ghorg4+O zmqMPG>Dj;IULiMN0t&Re`761v_1uTMrPZU;tmFBM<+_pK)DFL^P9J6t@D5^_!yp{- z!$~SdZBMi02u1IsNLa%*YnJ}wZS<9@=ilx}I=(^* zJ?uySBBXxEjR+0h2tm&$wXKQzNT~6%HJ^-xWDCGkpy;|u2yX{XA}yeAH9=0asZ%5D zmNWfDI5>WYK88QXL-8{=YXKBg@X+D0+cA&M-md4HXYzSBLEgnm{HjBDhxWrOfzH#y zL+^RIdF$^rc5Q9g1n@8b8;(BVH1z}qZir92o<**_$*ACCWD48rlI3X6gdC=C4SkN^ zLPu`@O$Xeof`A0D>Y&3H!+=Ka20Ai!Awbogbwialja&&%Snj_NB91`-tM+nQ)#dKo z{Nu-urSper#f!&nYGs=5a6_dEwp73%r*`>l2cqQeCTY|sjyP;kzJfx$!*F*booi%t zlml>=IMdDi{W~9S)jofk{B@(UTiXHBM2fE5T)D}b$MLTgK!UG_-L6=tS}(_jj2MVy3o>jAmZ*N zrZk;i9vz-YH3WQlLd$cl=JE7_S_wF49knWHD0 zsN5$vsH}EdsC_UcVvHoZsVZA-7H1hOxAp^grR0Ba-kLr9O7u^ljW834u@a8u;*>6I zmU7xgFRqU)y0t~iMDLB)F8`svT&&3{IM(e-thH$I>lORgy^yl6l zUm~qq^=z}Cpk%$;+9k2*8B)D5nx32wt3(Lo^XWa~(xk7f@BDy^uln5|8kduETa2c? zjqiS(L$Qd2$;;#(o6esJjc*>$h;99fd%9SKdKdIZDd)ps3h55iT39g$$VCNto|;WqC1uc&(U z{2dsMumch3F#qwDPM`l3J9U62%Wda4n7ObR&!J0KN>rlvIw&i-1@xtHFihqGu))up zMvo}|AnL#sP7|;bKxMZ90;^Qhva^pPU7xoC9x=dRF{Z>Bl(Gs9LIALEfTm#(y+eZT z3}~uSE?D@#R#r&EAo0W7x51*faA5Ep3KR#xmw?B(XAZD8<8CdUk8*3l)DM_W_E~!% z2N_(vP@1e&lc0H^L&p_gBBd;B#v78LC>Fd2H2BgG0R-J#7^Fw}5R#nxk zYE`(croz^mTGCpxRa+cjjw@$gSxQ6!S6&(&_mK{xi|XtG#(#?LOXHEno40R5WXk02 zD#hJ7W72ufR#eiH3z!BoW^z4ib~Pvxh}?4#sW2mr|I|VdCACZD<5P7ydrxN^Z_Ny5NaY6}4*RJEb0%Lj&LhYcLGbUymMOGc_VRg01o5LECax_7ydm!T_N}e>f?P+mdli#J{!d4N(Ixr7 ze-{RfSNJd_F$h3mAaBvPUmoB}M|}Z)_+7>H<5m8m?fHI5?l}nZn6mz!mYz<92&<{J z{e9jLTp)q~y7w>;Wd+c*z+{?K;@1;q*A7DqC#M9E&7oW+lIOz_%~k-NA^$<~2qS^` zZ@cR;RY^s~UD3_w^)YlsLSqn4J0IAf-;H(`v(^5|7^08yfBynD&gRq2+G(sJVxUz9 zIHxtgb9trGM)=&EINh8W0C*U*oPcJ7K_T9N?X?44d}Dxd{MV0SxbC)4^qvM#P}lCp zJfO)Ych%2VUFRSnkYWY&@9*b?YV{K zf597&1RZqWx4^@>klxIFObX~38G)wuK=;=As>j+k;L=hi$en>Z)j1%tr2+>QP-oCP zstemE(Is_RQf?Edn6vmJ_5w`uA~Wi}ZZAS4vqSBx+Dc+91ghk1;uw>p{EOh# z9G!f`v*7p|JZw+SIyMSrFGtoFClQ$0U18(fR$xKXZjR+tGR@% zL)hx?3wBb<8h=%+eE6fe!y3FOl<|#hFyuWYnL9X7PQ3OLf&Z~|v zYYr3kO_NtD>5lV6&649{Lfm3iZEr{I28j~4+aSlue(=-j!|K$IbIZuo6!yfvACIW$`1v`f1ft0O9t|{^ zjABy*NIaV^$4hTP;nI0}0qU)FFLE$Nzk0d@7?2|Kf&9mfy~pWotZdcie|}yFJ@vgz z9Fp>YB@Uz7)=nZ(j2fw^p0aQA{En}ZAN!SwaHl&VrpTk9)?la}{B4(WwKmv7`S%UV z!rYGdWY)9zOEuB_#DI?cQgI>GzYPe*1@Ln^4R_OztNZE6cl2?4h z2(IKJ1hwNC-cmjhgtY-K^TCxsuHQ9L9W6)aBti2Qs_S2&RQKi1Q`81*VPQBOreyq5 zo`bKfFQrddQ|MW;-y6Q=t7b2cn5)Rq={LSH5kqAv z4;k7~EsI3Rhc=lK=|Pl~a`3eMm7P6eA(&so1%wgaY7}ah79KF?Y$XsYoG2S6 zMobRKirnN2$wthd*Um4?4Q8GU=U;g7#nv;e@>ow#FRScQN-Yaj<@gE~UC3<3DLAVV z%O|$F45vZAlJXs}CIBz#ce^}i`pT7;I3}r0TrxXqi_;cDiuqq~PCIY^!UIP%H12~5 zKWbSdz}-Cs)ZgbIav=@iJ)uMNAhITx{q5VI&}gvV4wPL^lf0;f4@)|RUZK@~$2O1S z&v&AFdU_B`OUr>;>E(!wBm5|7d;$XgfPX^J@nBFB{4T!fzwrY>nV_gRZ6&6Y-vo$W z3t!(Xz!eP#?P)hMy_7ash(npnj9jxvTf)!I8;i-GJkBpmzbO!g5r$zIg_x3ieYCJ> zTdSAI7Xt_kU@W3U1Z7rBOA8wB=x!V9x5c`<^(~u`H&u??sccTx&bT4#a|fJFI=~U0 z;n^tZQyIBtjdKrSsJ-|MxEwyQOUesTq{sLC2deo#@dL8xjA4VgNnCfJizuLDQ@L2h-e5ESmfY zErNv%h)3j!nnzX=<_i3JsaNdxqP=lo$u)2?s@D(cQwLxle8HZ{qUI&h!dJNA6Lw4q z9HGo`XSXosO#joen^UOI3_TYvFS%9qTczkTS9^*0LWSc?^!1DM^`+1c(=z)0++x;I z)A*Q6NoA4_7#J4$Ju&-NE;VsY5Wq?~M4WK=X@gHg+>)=Ro(^-6O#OY9=8K%>^+!Ai7^Hag)D;M8n&tSKDr+3?&h@vKj;3+ic?Ppt*Et<+)!tv{-;A` zkv?>m1A;mV0o#kCy|BeDxU(}}KM<7(z`GN+JT0DosYL-_xykK?#O~%jm}>tFLKV^- z0v?uqAO8+OV-KNmI{%l0KoydwUUmjj9ya*U0dZIJX7h_2EeK`>@ys%^vP48gFaoDh z#Z~}$YugHGvdaWvH76@Ay`Yo^L49#|&@?4rd#JCk&&**N=7f$kLjyxWCm}f*56U6B z80EbK`Ld=!QwAxb+t4gN3(*H65X-yTFlEd0(Cu^`OO>qPbbYk=s_zF0ul*VDYC_Y< z-ZA3dF3orLUtYR;Bs*GKmXbtbgO^LZLQ(58+0|1NK3t>7Z&8!st^q~Bs;sWM==y!f zWHF{fjet|ZYkg~nQKCCg$&K_>m~BhS{nt}a$9Tr2EZ0x=Y1SS2Ljo-l4vNRmBDFd- zS=y2I*a};GF)kXW%Rm1@4FkoTabbD;cvoTx85JLHOHD)17~{3l{}{uv*r@4!GyaO! zL)jy!j8Djl=3>2$+A`7|h))V=tHzG;fj`7S z0x>A0WlFO~DUkLh;+k|K?$ zs)&IVh$9U{`z#usv8rBWLFqiesw%B>MjBUiI2fW9l&wje7 z<7l&uT*1Vn9&ROGJn-MEGPDjX~#+b7WuSOD+N>#H))j3$;x`{ zB97_rr2im}3EEMU+;#(^5JGk4WcQ9eBBlt7u0=gPTi*2pBT-MM$*U(`PB#3gk&%&i zl_x9B@4+a;@=B{)6g1!iWIs|5a{|G~W6dvB(Bp*izkm`b5*+}gGe98=h9Pg)gE7)F zGq->g1`W(3W0+B$HDKjQD{zmwB=+6WL_3MH^ZOI)yF?x5u{Pyh$b zIDy?gCHLvbLagKz0tlZ#t;^G8bp}!gn^EV;Y`G4<%Z}2G*Z21^S66QSS2_X7AoNdz zE!FF=vdNMs(=%s)rMf)`eCRe0hqYWurIA9FKeo%ia2yb$T`f$2m8MSFyhE8Yy^q@i zp9y4Ools}6<_oM!b@igccwvF*J{(y zD98X_Vz`dnQ4WL$K?n`7PAKg=DG^(ldej6%p7b-#^kn9*PNY6o&krU>W0!i)zGz#N znUZ4o0|x_(YxkUF$P};U7xNDJ?CV&kBrh#It^Co(PNZ~qp_CjfO&JYsL^noh<=jLP ziQi1@UgfnxS6j7+Y|}t*!4@hvoo&kxZ_{L%%0SXV&_?j>uG2J_Pftq|o99kRNp10a z;3?Dm#xmzYe}B^N#j?V3Xks06C>b+z%M8_ zQHs+#R_r`?d{)miGs&c>d`kX6AFE7wq-g*cnthOwUdD(2WKnOQW(RZxi zgzZSn>b2yu6J2S_aBg8b3EpMA0X4{!J>P9r+^PHh+O{f&ka`JI7xudhCaUm*KG#}fvPg)ph=c;{YoQ=0>F&?l4H&zL6T2lf9| zB>ymhvaH_R+Ui|U&femb{=D@}1fSOm8*tl(p@NUG+q_6L@7AWgM`N)CVyNzZVEDgq zC7zQlhfLD)V$;%i$eS(d;J(y5p$)%E`7J}BG2jGrwT%r3bOB~MbPjbrcs!$zUywJ~ ze(nplge5WXElkY&JwQF6I5RxqW`Nqe$Fp|h*Cj~RXh)LwA%j4;+9N=XzqZ(F6_0TbIG3q!XZ>M=d zwT!w9WdY)QHF4v3Z}mppd*Z%R^~1top)nc}8H{6YiO_#7byerT=5dCC@rZP0dJ-I( zv|39t)1Sx72V$mOYi#T)vLXtY!~KU1md!T~I3+D!$)jFsPPHvvfNB8 z+2}^b)tQof8WT1IMm}0(l84ic+Y^R*U-l1M$qtWj#VWZl#*lyHr_V>HrP{x42H^Pu zCHb%u`Ey0E7z_!+ZVkokK!B$bjBr_!D3@o2{n9u|K81R#VX<$CjD#xreH(&nFkgY4 zw8ZkL&Tz5cyWnm`$NIGSkd0peXB6lka0m!^@A&~o zRA1l9?wL+=Ft+{OO~_|&Eop*kZ~}tcck2^7xANij(Bbj%tD^-E2b-;ROLLZ`F{q1T zzbN&;);Q^a*ZSRZ2Ugx1(*O4Yd_3&*8CYH3eUrg>Bl1Q7e~-_-@x-F!$!=BV^a8vb z(8UKMat|A6lH~ugj2r&xKh~=<>{9-&&47q5QuF(Kty1_FU9v$AB#&nl+a2I72>zYm zMw3=U|L&ld!Xb&`(Sk#263w({<#%KF3Gs`V__dbM;?GoaT%|Uq9_4uMz;ETBPk6R2 z4&?Lni0g_ehk|DJ-8gBOa1ErjA3SDX8g?IKyE!N6Rp^WM48n-oP{qFueTSsylER2T zPsE7E!S5KU#Oz`mNS!ov1|oRhvEu6L>YLqD*tGPpeJ(l;zmz3EWY+uhsM!Ib7W_ z=iSv@uV_Ug!&TZgC*FU@+6cb6dPRpAWUpuUg_V^5pSPl&xt_?Rh;PS{c3As&k381l zOz(f!Va((qgE6Gwevji)CnSV*Mm5FaX*YlAVUyMmEE;eH33Qh2Zs@>nSpqsAYFVLH60mK*){{7|SSLSm;hor;(Fg3&6l$Y$SBOgO^B{+y1NK+>_o z`J6qR^M6LW^$^CeDJH>_wlCZ}d4nWYKfpeBde8R#J8>Oz67f=iSNiFF#cxA~WYt7+ z{v77eY|KP4!k~9Ix>n=$?KRz>MaE{jnd%l-0{f8lQizDj=|#DvfKFRqt^RiNzKv4xtI-T%P| zZk+DLyBIQ9AdP;?NqY7ltcy-og3z-~k@HKt`Grm`+09%tr_`t=zbfaoZ40$)VoXLc ztfQCi_`W?4SRNX*Yg!6y5<_8PGTmw(8;n6mB@^xV-i|CTpN zKUePZP+2xDAb2DOFZ{#;rK;RjuKtsBPr2v9EKhL?-}%G(Z?oTWsL?xc zou?kX732tN#uN5ZesDD68YzN9Lu#e#ke+wsGSp7c{$`HB2}$;LDs8f*Lr_^po08H~Bz*KXQgzl=>9RL06yq|v$bzkj|8#)Kt$nE~5& zfXOUUSLG@#h^0{487sEVjGn)++bJz4x3G`57mnyvD8$!Eo<#`EkXkaT`^~Qj+U9=C zIph08)=408EB^eI;b+(zcXojX3ycq};=# zjJw?Y7FHjkJqR1@G#D4tnytZ>Puv$`MEZsnE>k(RPsFI0{oC801nCujl2|rh@E0;# zM^f0fP(ljvVf1{)gV=%lnog4JH5@#yWbyIXjc@!1c4tTQb%^neMDH9|^;7 zPg80*>C+Q%D;1I^qYCBfy6t>sfW=_(jfHy6vZK|=Tc>a6VfH6!$iBFj$U$nDvJG9~ zYRDCg3Tv%*tqZ=cwf2MZj4af+o%Yy2L3VY z^@+cZ)ni+}?27NKdUVm9crf-m6!EpBABv1NjRew5T&;47e~kN0^cRqLcArw;}$Yj8GEZBF$=I4)85TF9z-L z@h9EU{$E>n)#+u}5$QS$(xq7!O45MKDnX)HqnQMkS+Q4e=pBDQj)u~oVmaLixCnwe zRxTl-5uk;G5Nek=&j^C&1nO_A+R=9%1dxhYS!-KoV3fL7flgw zI|l;y34JzQ_AmA(^@4XEE$6et`rZdb+9|1bMgey`p;uZ;y_66=L@EIklGdoVkb;8& z#uq1_rd^qSvpD@Ls<$i-GjO1h2TMzEDr_{A)w(prd(m{l%ZwBI z%ZbLrPm|eq1tF&NbXWZ6fMs;mp*^xhMAf`c3tZva!~bNd?F80Wu~2(i4^GH!{mb{F zxj!-u7+iVaTiOmoehO^PP%5E)YP_)OJZ@$EqNs0>RkA4IcdYRrly#WX5;0j^e zIW$loJs$qDVm(2T!V`%VcTVVjtQ=n^qgA!2}WE8dXjjOjPt>1ZGNN44$ZjDtO zzeo0+l1rR9ex6_Usp(L2Z_*+aI`?BCj{G|D-hPUicS067I@*7))1L~)ex35I8SGmz z9y7D;TMaSO6Pge)Mp)te!Vkpd(}!Qrk+?Mq+cke$@&8f9c=w*MFr7Ifu&q`j&gyG)r{a_2dl2LG3=WaaGO&NaSqw$9O@{4+!cX{ z+2pfOwZh(g>9q0`U)NyN(S2W@lt##qprlr<)#CL;93w+E&Cbq?&pC(uQh$|hRwV&B zw)ymr$nSzB>ugY=kw0v^#Od3swf&hev?)|rN}z?kk^EyD7t%cVlJIKv@T=RJ$18Gk zPdQq?#^s0V7Yi86EpSbOVXLt6P`$w8f%!Vc6CDB7^cB`K=WfB@%K5Qm4jha2W zwPatSy22K_G%EDf&^=L1)w;QJG|MmiF1;;_thsw(ov+pX|FQLzK~;9)+DM}yEl78F zH%NCQC?#Fe-J*1N3P^WKBi$g~UDDkR-`ejv=ij$y{2?>q?B`kQ&MPW0q)1`GRN*U^ zT$b_|Q`10jRRDrYOY_U60BV~`K^e_1zD#G@Prn3bx&X?3{1Fii6+|(UmzzX`QD1>m zybk*}exUw~IGA-`@4<=Tg2n%&GUoK7I`fyRW(;&1>Ewq5LDl^5rQafJaIYBkO}*?8 zWnvrnx#g-VTP=uzS0nyFCy&2uKV(Sxb1>#FwMvc9O3Be&pIjG9E{neLsZ%*Qov^4s zDQq4X0`#g!385J?yS&-jo&7Y+{B(K3Pt!~&W;><{>IM0~1Jy^mWd^wVsb3-?H$w_< zcGd1WK>f4A^ZtI{ly%y#y*2R`ShuCE({8wF=|(T%Wiahk>l2%nY8N*zvj`m$<5Z5njbSnb0h zs9#rQ=0Njv+F%kPg^i^+qV+%eSGs7s+LF#AL%rhChZYcvNE(@!C-vWhANlIp!yocy zJqHUJ18m{UCpB4up=1Oz9CZ3FKwWry0k_~Q93iYv;dDctI8g0n-15W4s07Bgtp&k* z^&}AyARifv_FWB0WmH|i*Q$k76&LoGhqEvC4s)?eIjbK;M-q~tk;cBsqPKIx=~0jV zN0=>O6p1{nt`afg9TmgI^E6Eh#b()eS9`igW|SlujkT9`X>+MdER%Ro_aVs`34;`+ zVle&MIT7bw%HU6`%=dhD2|;Mzfjx2cJj8!yvEDYPm<}vG`l=aVWBBVMH)+fld0^-h zpvxzPwAz)Vm4rt!&TQ#0h4{?Y?icWeC4W4|DcRgN9yHY)J&5X2t7vs0VIOk}e$=*x zzvRlH%`{{epWu7KI$8Q7VaN}%% zbe0$s*T5~`?Y!Ke^aXMOkSfa-aJXrrAQ*CY3Q7vr<1gC_@xET&_^2KF4C`J_I5)oo zyu*B<5>4y@5e7iX?Mt`#`FT&T+Iw| zH=#_Imf?lJd|fz!e10fTB(Sk`A^}bM+m<=vO|d2dygha{u)4FTm!5gWbO1Jo92H*K z)YLTa9>dlA%4&kgC^AB3xZC?Zzha!GEzp% zxGMZu3g;hEpl=~_pwN>nZ!dKHb@D)c%?p`a2!s;Mom2aZsKgUe`=`z{epvU z&7u(ZduPPJCVmuPYVmfPT%1gf4I0j7!iGiHNRhsO8x?wr2YX56F1I!N)fGw-@~0G=*WG2L%mn6u(h&wGutt3gKLD&@`yhLvqptmpFA=a|3FHa|GWgnY`aYP|t z5ePs8sNG+T@PpYs^*d-t&r&D$jq_h@^B5GmYC~dvRW?+upnjA7BdRHHzek(Nr$5j4 z2jP*CKz3)D9DnptrM4mgTo6y>MZ5T)`p1T48{+==q)14*xVI*mro;K^ zuB<_qiXnS?37%OZSI#19{nnyYpB|AB5xsEQj&m&OVwsv=!LdsHFfEoB;H*1v^rukf zXx#j(ZUWFi!>VE9eL+zYFvySJz>dT?P)+O8fjQU0CUWV$gb-6jjNXvF&!s*51WaME z$FJey;z8h)3Eo~Q1GD4RzD8^aY@C`}u4)nEh)4)iuw0>!x@JB4cv@v z>ZQkkX?EH@KJQ|^BSMC{XVlSL8IIvUI{_IfQ%FS1>GzXphgcRZSXGSM)Vn_%)i+aL zIPncbq=tbV7xphqwsT+{8s*UF#X*?hlpq{|;qOKgIxYT?A*!6>J*E9aqi_G{(BS~^tl30y}jZbt% zFBmPWh7>BWVG$A1rkvWRqYcExT%mo6+r(H8@;5E&PYtJ#1L(`R_cA%SgXK2mJ^%$; zyXX8j{(}dHH^t&oD1}@h?}x6kQ;Rz>_(69n1jRTxfUd>)91DPGeeeJ7(3Vy>J}q#@ z7GaqwW*);^5y+ud>ycI_!8E`C6=Ef!`(PY>ANPmW0E1xQ&-s<7f`~x6=7dpf-eKR# z8vb~ich)j97~#RjZLQCbhkjgc(6vJRVtdIH!An3S%! zK0jBl%@Zm1Ncck+72tgNCw(DsGA4NAvdJUSpojBiil1fQ5kJIAMYuI60PF;A*xvnb z`wp|bS5!O*%qIYTOW@`4!V8$>0bgC1bhb5ls>zmDfY`VAxoPuDG^G9tDccd?TxY+O zt88fi9Nrx+C(mB_v2+zocre1d=bx zUlqb(b#5dWRhldhK0ib|lbsIoeN#ne0{e~3R{p&5FWaEvGu>w4!@$x4_XXlXh30$@LN#jWb9MA?Def9boGp+&< z5CE`h96L}%8$0k1owx^ny;onw-LB%cUWt?i5!z<8br@4gNQNwC?wS_@)c*X{_hz9v z%C0ZyJ4w6TEk!Q_))CsOKGJ1wWX9Bhf-&uI(x=C-NIlB$1ro&SFOPvNqlB@B>FFgD zRM>2yjB%NQAPX@zn2yoI0SrQ_p%Vw#&ecqq$C9Ks zOwN-q1KBH<$0YytD>hzIV040iQ`SoU>QDXlaN>A?tFo}pjIIg1)hL4R&Fg4}uD1tG91F?MrH zzN+OEdN^bUMH@h4;|AIb^fl0aNFLr;B{GDRWxy+^k6CZY87FenNvJ@#&5?f!5r&Cq zFgiR@K-{;RkvYydq+=2W3=jZ!kwI7ggOWM2Jj$;Wx*r7y$?m?9hi=qR;)wm3%dH68 zN$F!K77ScSf@9&!4+htP>X(y_w%pmOYjIc|9&+cL3I{||Xt26jr@6i4Lx76eP4-_2 zCYEc9&XOQ|2HXW*nNzD7E+A%Uz=r21C^0vA-al&xg(REdSYWozhJXzbE@xb5onmc z*7{gOpe|Q!o+hT2O=*L1v!F#^{8|Ltg(PNZc~pQxk$B5SR>&;I!RJ-AvCHtl?pntW;HbN5U}^cfu!+PLPz`})jNstb zc{xEzd@RIm_uqv(xG>|+gtN}>SJRqzK-s(HSo|L1I0V+(0DtYWrG<%sk($GC#PX>h z-8}+_q*&frIQzh(tZ&6sE_8pW#Kn^xuJB6s_4hB@o92PV^kdzK$bW{20!Ap&B?TVuS5?c_=z76*#PJdU9Zkk9N_Fo7iD(g2Rn^l~#Yftmw%vel11d{Pjo6 z^m?BF=H|+1PWyPK+Qc7ix9;u7zX~^elat(gDJMn^Ep+fUfC0qAA^y@1Wi(qc`_m8M zErHggeLbUPofY;{RTcf%jX-&1`|Ns*}Gw!f*k zi60)mWL*0Z^fY3`;ZU)Djr*z;n9;Q?ubU-WyH^U6ZrdqlfI~A`pv3+2c7uls5gLHQpZ$3v_YM#LMLq9Ex!tY@-2u!2 zl$|clx4Jqm5SDJd!5y(D$T{HKa!BEcl*v=A?J3y*kjHQj$U>yBttYFhsrj-PK9@Pf zXV;6iKmu7w;0*RZJR^Vyr2PC@%E|W8TT(U;0|0mdLg#G7^Q5Y>5}+3WU}hQ*PLnP{ z@CYe3+KzjZIko!;&#JLqU^GXy=<48`x-=O-&8HV9-Bs3cYw~y)(Uvwk zq;lc%bgg70QagDB6-ClM&ewO8;fg5UzZI+CyU8SbV;dM)MPZibzr!#Z0ROelWX0O< zKaLIQ?I>CeRnj}k{7tpbM~V7pDLkHW>zhA3$)L(b)ICRJq}aBUSe!4YTG(L-_Ju{M z(&rP|PuKbpy`P>ycDgw0Bc5Dd9tJ$ZI_s0@Z_DB--UN<-Q3pU4(gm}q1Hqfg4n;M2 zMhU7IxUW981*9y9A`Y3Zs3NlIzMnX7O85$7S^ z)P!bJv^i+&Gto>hKcM$GE^4$Za~Gei(WQmcdy~*wvfU)PsVuyT1VGhUBw)yigw))Z zf5MUJu@6={UPmV&WI+IWzs*L^Ar>^`Qjt)0psew^NLytQ6kJ}@fX!U-K8zp~2+dA~ zIR#Pw)7gzA&Fm_$mj)rw$;s&y0_#HnKAg9&@-5CG&W?Y8)7&G#J(0gaJaWM+1lFF! zFSmV{*VpF|EH(==F!sE>x;ld(ryX}j&LHm>;;_WaJGvPp{79OUlS99ve^sUmy$;b9 zsWR$wJ0GBS2WwUcTGs7yTq-0R5x}v5RRsP0!vn9!CC$;%5frF`&mlZ8fET_Pmm)p` z_Rf@vkN*CI1<$FPJsia!u$w=3T^w+jOM!|5f%I zg_g2NC$wm2(zuy@&f2AmC^8GjVe?P{{`jD8;5d`Wdhk6>Gez7APgvZ=<-*hD4t&3< zgZ4Y1k8BDuN=L^Bz~dO)Q!6kB+E{L`-nd?Gy7PO15t^VPPejI zC=eeRL!=A{$nI;mSfUk#e8coj6lTp2T8bZcmgZT}zW1tKj&87EhWovh8W} zc|LWI{bls^!7irIxE+ z>^yyM>HYGsx&tA3wa@=HyX(YhZMUju=>|k zz%7Lk3bui7tU=*C+q`9!;eb3>*K*X;FKOO8av2_$T}V|tUl(DKTCdX_-wZX!{>m-~ z_RBOqsL13ezgp1N$&zp(=WzMR{jQ?7cpPF4u#ymE{yN~3jKzwM4&mKXHO#%80&Jlj|NIJo#p7e!09T)g(AQ_`~|WC?+m#I>`ZB zFAcFm%jgz<5=~-a-IezYM?_Z;>c!gGCUAKZdR&76P?n{MUm19G0&de+w207(00AC^ zO1uK}_he-nb*L7;hw(-ldGWU&R}~vDIRA}eUQ6&c{?nVRox5e#B)OxEkax!xL+o&u zuJVrRowm!<{7Jvo#wbFA1ddpnbNRyCeW4}i<_T};-uY?`Ow^5k}X~dY2(hz z*o^E`-h(cq^DZ7p)D+-T6Pcg>td9f|m~?e@!Fv_-0#_UBbwFSg#24$KWmQae0Fa7+A)N0(z#E)f zU=rs$6j6NNe9#2$`bHCzpr9b|#7$v0D+H?~@Na90et-ucIqNL+ayLruPXe%&x2Nm* zvIqONRKQlT9dJKJ!RdUDhi3>z%>ak+{nz$fqstLql<+eT#Qtz^e?L1Xhur=Z6~!TX zaa*(j?p&SjLu=hRf6*RZI{DMmLyr`#;^@Ty^GY9mBcrGHtrNkZLcyTrCQo^Ye(^u^ z`U>u=R}}bHXR0>A9TsB!wNE?SWupq9-rj4kCI>_8?fbrZ6%azfB3j^X04C@10=^m`Qprj_|0OCAS zkxfAsZswjP`Eo{fwU&XsLrmkDdy`aC8DiM3D43Xp3qN!RGgu%iH=Aw zMP)BcsF)Sw_6EmzmsVnLmTcYL5FP&vGCB0xo%vkUIo3eoT0a+xShU@JUmIzFOW)mY z+8cWbBQFh548k0Y&>k6m8yg#;nF+Fasgs6ZzlKBXyn)5|>~o7U&6Iz|lccRJGlbWY z#H_y!XtY;Naj_UL-#+u&5cEOd+ki)xxY-vqxw10i2ZP`SUgbvtO~j6=DJ)QJK%lUz zfLacg9AoqINbLao$^%Tcxowud`1oW13Jz{xqjQ1QWXrh2EF8{nW|HaU245XV#PEL6BtE}m^r7H} zQp~%dCuo$Xa%8wUzB1lVF~s&4j}+cFm#VZMAvJ2NuoQvJU>LT8_i*F*^&8PyGz&z6 zq@gWGoi>5NtnwUWr?*^xqAU`@*9PevM8b`UJh`9uw?=@W2u5@~idG&}@E_XqPq+V^)cjiYj5ppG?WkhyW~I!3epVMmJO+RnDgc`^*CaQwmfO&THsr>3nOCB z`EB0xtBhQsoI7kT5Eu8J^aAq@^3p629|Z122Sd|?6DW%$tC{4pNo93t4KN`;lFbz{ z+(@lmEN8jI;zjaht#W75)WTbV2e^ZNR3Tsy4;2`)R5UoMl(&706Tw>y#)`#QG z?hwpcndiX-dTOv!hZM*GZ#xRo>6%A9K^_yP0DGiJ(^BEPo_e|<6 zm7vKV_w`5|zHz;k5+pp7vi!g!I&CPZT;?3I)AUo&F+a8DhzI}r zL>rZs62e?g8X8|+ZSyMU7U~5?a;&T)8%s-!!kOu51tmE!lRC7Q0V=_V2{kBnoJafY zUw?d6f}doiVg8uhDiF4pyqnlciJ~qp{a?JA|D8bVj!NN3YrHI`9Az=&xl>f=+Y}w-a&A-LGlXD4hFL|NPMbqd$N9p5X5yF9r6-iBWET?Pp?Y% z+RNvu79qI~##Y>07x`%JudYw_xZwuY#u{m)B24M^+5hz3o06AqAPmVaOr+2oeYyAD zt3mzPmgalc#%%W#2mSQ)1X?`~FQ9t>NPp^d3HdAaR=Jr7tzO>|d>&w3v@Zl}vRMod zyWae{nK+RD*}7DNJ2yRDYlvPxm@YqAs>`nV0y;>AFvGMDNZY=nfEqDA zx&(TL-S`9P^5&O0eEoueQa&g+JilX7iA_h6+>b{x$rIzlx#Di#pM7oK*)kZK5℞ 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 diff --git a/src/bonsai/docs/reference/images/gear_tabs.png b/src/bonsai/docs/reference/images/gear_tabs.png deleted file mode 100644 index 1287c8953c0f1e3f94f6f9cde92281e8059cee8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140972 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⁣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

MyER;o<&tqW8#)&W)jg0$ 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 - shows main application menus to open and save IFCs, import IFCs, as well as tabs to save and load customised panel layouts. -2. :doc:`Outliner Panel ` - shows a list of all geometric objects loaded into your 3D view. Objects can be organised into collections for any purpose. -3. :doc:`3D Viewport Panel ` - shows a 3D view of your geometric objects. -4. :doc:`Properties Panel ` - shows properties about your project, non-geometric objects, and selected objects from the 3D view. -5. :doc:`Status Bar ` - shows useful hotkeys when a tool is active, statistics, and version information. - -Panels, such as the :doc:`/reference/outliner`, :doc:`/reference/3d_viewport`, and :doc:`/reference/properties` can be customised. You can click the top left icon of any panel to change the type of panel. - -.. image:: images/interface-panel.png - -You can split, merge, or create new panels by clicking :kbd:`RMB` in-between panels. - -.. image:: images/interface-split-merge.png - -You can save panel layouts, or switch to another customised panel layout by clicking the tabs in the :doc:`/reference/topbar`. Bonsai's default layout is stored in the **BIM** tab. - -.. tip:: - - Depending on your screen size, you may need to use the mouse wheel to scroll through the workspaces or, if you press the mouse wheel, you can drag the workspaces to see them all. - -.. image:: images/interface-tabs.png - -The :doc:`Topbar ` and :doc:`/reference/status_bar` cannot be customised. - -.. seealso:: - - Bonsai's interface is a customised version of the default Blender - interface. Read more about `Blender Workspaces - `__. - -As an example on how to customize the interface. Go to the **BIM** Workspace and right click :kbd:`RMB` in-between the outliner panel and the bottom of the window. - -.. image:: images/bonsai_customization1.png - -Select **horizontal split** to create a new panel and dragge it upwards to the desired size. Next select the new panel and change it to **Properties**. -You can do this by clicking the top left icon of the panel and selecting **Properties**. - - -.. image:: images/bonsai_customization2.png - -Then select scene and click the start icon (bookmark). Now you have a customized layout for Bonsai BIM. - -.. image:: images/bonsai_interface2.png - -You can further customize the layout of your BIM workspace to suit better your workflow. - -By clicking the gear icon in the top right corner of the TABs panel - -.. image:: images/gear_tabs.png - :width: 350 px - -A Popup window will appear with a list of the available TABs. If you click in any "eye" icon, the corresponding TAB will be toggled between hidden and visible. - -At the top right of the pop up window, you can also see the option to reset the UI customization, to download a json file with a customization or to store the current customization in a json file. - - -The next thing you can do is to select a TAB and configure what panels you want to be visible in that tab or optionally transfer a panel to the BOOKMARK TAB. - -In the example below we have selected the gear icon in the Quality and Coordination TAB and then selected the "star" icon for "Quality control" and the "eye" icon for "Collaboration". - -As you can see the "Quality control" panel is now visible in BOOKMARK TAB and the "Collaboration" panel is now hidden. - -Additionally we have also "bookmarked" the "Project info" panel from the "Project Overview" TAB - -.. image:: images/bookmarks.png - - -.. note:: - - Keep in mid that the reset icon will reset all the UI customizations, so after cliking it. All TABS and panels are visible and the BOOKMARK TAB is empty. \ No newline at end of file From 53115e0654ec5cc1ed89fc924e9a9ab4110066e0 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Wed, 17 Dec 2025 12:22:58 +0100 Subject: [PATCH 399/657] Improve command handling in drawing tool to skip None values --- src/bonsai/bonsai/bim/module/drawing/decoration.py | 3 ++- src/bonsai/bonsai/tool/drawing.py | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index a022af28d0..fc3b9ecbf6 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -2093,5 +2093,6 @@ class DecorationsHandler: if not DecoratorData.is_loaded: DecoratorData.load(self) - for obj, decorator in DecoratorData.data["object_decorators"]: + object_decorators = DecoratorData.data.get("object_decorators", []) + for obj, decorator in object_decorators: decorator.decorate(context, obj) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 0f063b8473..f0455a4ba1 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -2123,7 +2123,15 @@ class Drawing(bonsai.core.tool.Drawing): value = ifcopenshell.util.selector.get_element_value(product, variable[2:-2]) value = '"' + str(value).replace('"', '\\"') + '"' command = command.replace(variable, value) - text = text.replace(original_command, ifcopenshell.util.selector.format(command[2:-2])) + # Defensive: skip if command[2:-2] is None or 'None' + command_content = command[2:-2] + if command_content is None or str(command_content).strip().lower() == 'none': + text = text.replace(original_command, "") + else: + try: + text = text.replace(original_command, ifcopenshell.util.selector.format(command_content)) + except Exception: + text = text.replace(original_command, "") for variable in re.findall("{{.*?}}", text): value = ifcopenshell.util.selector.get_element_value(product, variable[2:-2]) if isinstance(value, (list, tuple)): From 2264fbeb441710cb86d91b16aff4ae8b84274735 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 19 Dec 2025 09:07:26 +0100 Subject: [PATCH 400/657] put settings at the end. black --- src/bonsai/bonsai/bim/__init__.py | 4 +- src/bonsai/bonsai/bim/helper.py | 47 +++++++------- .../bonsai/bim/module/project/operator.py | 19 +++--- src/bonsai/bonsai/bim/operator.py | 63 ++++++++++--------- src/bonsai/bonsai/bim/prop.py | 2 +- src/bonsai/bonsai/bim/ui.py | 29 +++++---- 6 files changed, 92 insertions(+), 72 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 6a3802c44f..29be20faf4 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -240,8 +240,6 @@ def on_register(scene): is_registering = False - - # Classes that need to be registered after modules (due to cross-module dependencies) late_classes = ( ui.DefaultParameters, # Register before BIM_ADDON_preferences @@ -285,7 +283,7 @@ def register(): bpy.types.Curve.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) bpy.types.Camera.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) bpy.types.PointLight.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) - + if hasattr(bpy.types, "UI_MT_button_context_menu"): bpy.types.UI_MT_button_context_menu.append(ui.draw_custom_context_menu) bpy.types.STATUSBAR_HT_header.append(ui.draw_statusbar) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index 6ba13dbb4d..3b3dd502e4 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -539,7 +539,9 @@ def draw_filter( if preferences.chain_filter_with_set_operations: show_mode_toggle = j > 0 else: - show_mode_toggle = preferences.default_filter_with_set_operations_for_globalid_and_class and j > 0 # PR 7315 mode + show_mode_toggle = ( + preferences.default_filter_with_set_operations_for_globalid_and_class and j > 0 + ) # PR 7315 mode if show_mode_toggle: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( @@ -758,7 +760,9 @@ def draw_filter( if preferences.chain_filter_with_set_operations: show_mode_toggle = j > 0 else: - show_mode_toggle = preferences.default_filter_with_set_operations_for_globalid_and_class and j > 0 # PR 7315 mode + show_mode_toggle = ( + preferences.default_filter_with_set_operations_for_globalid_and_class and j > 0 + ) # PR 7315 mode if show_mode_toggle: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( @@ -785,19 +789,22 @@ def draw_filter( op.index = j op.module = module + # ============================================================================ # UI Panel Visibility Helpers # ============================================================================ + def get_tab_names(): from bonsai.bim.prop import get_tab + enum_items = get_tab(None, None) # Exclude None separators and the BLENDER tab (not part of BIM tab system) return [item[0] for item in enum_items if item is not None and item[0] != "BLENDER"] def get_panel_tab_name(panel_class): - if hasattr(panel_class, 'bim_tab_name'): + if hasattr(panel_class, "bim_tab_name"): return panel_class.bim_tab_name return "PROJECT" # Default fallback @@ -805,10 +812,10 @@ def get_panel_tab_name(panel_class): def should_show_panel(panel_id, panel_tab_name, context): if tool.Blender.is_tab(context, "BOOKMARK"): return is_panel_bookmarked(panel_id) and get_panel_visibility(panel_id, "BOOKMARK") - + if tool.Blender.is_tab(context, panel_tab_name): return get_tab_visibility(panel_tab_name) and get_panel_visibility(panel_id, panel_tab_name) - + return False @@ -851,11 +858,11 @@ def get_panel_config(panel_id, create_if_missing=False): bim_props = tool.Blender.get_bim_props() except (AttributeError, AssertionError): return None - + for prop in bim_props.panel_properties: if prop.name == panel_id: return prop - + if create_if_missing: try: prop = bim_props.panel_properties.add() @@ -866,15 +873,13 @@ def get_panel_config(panel_id, create_if_missing=False): return prop except AttributeError: pass - - return None + return None def get_all_tab_panels(force_refresh=False): panels = {tab_name: [] for tab_name in get_tab_names() if tab_name != "BOOKMARK"} panels["BOOKMARK"] = [] - bim_props = tool.Blender.get_bim_props() for prop in bim_props.panel_properties: @@ -884,25 +889,25 @@ def get_all_tab_panels(force_refresh=False): if tab_name and tab_name != "BOOKMARK": bl_label = getattr(panel_class, "bl_label", prop.name) panels[tab_name].append({"bl_idname": prop.name, "bl_label": bl_label}) - + if prop.is_bookmarked: panel_class = getattr(bpy.types, prop.name, None) if panel_class: bl_label = getattr(panel_class, "bl_label", prop.name) panels["BOOKMARK"].append({"bl_idname": prop.name, "bl_label": bl_label}) - + if not panels["BOOKMARK"]: panels["BOOKMARK"] = [{}] - + return panels def initialize_tab_visibilities(): bim_props = tool.Blender.get_bim_props() - + if len(bim_props.tab_visibilities) > 0: return - + for tab_name in get_tab_names(): tab_vis = bim_props.tab_visibilities.add() tab_vis.name = tab_name @@ -910,20 +915,20 @@ def initialize_tab_visibilities(): def initialize_panel_properties(): - + bim_props = tool.Blender.get_bim_props() - + if len(bim_props.panel_properties) > 0: return - + for attr_name in dir(bpy.types): if attr_name.startswith("BIM_PT_tab_"): panel_class = getattr(bpy.types, attr_name) - if not hasattr(panel_class, 'bl_idname'): + if not hasattr(panel_class, "bl_idname"): continue - + panel_id = panel_class.bl_idname - + prop = bim_props.panel_properties.add() prop.name = panel_id prop.is_visible_in_tab = True diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 607a1625c4..94d7279daa 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -1056,9 +1056,11 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): return tooltip def execute(self, context): - if (tool.Blender.get_addon_preferences().save_metadata_blend_file - and self.should_start_fresh_session - and not self.is_advanced): + if ( + tool.Blender.get_addon_preferences().save_metadata_blend_file + and self.should_start_fresh_session + and not self.is_advanced + ): filepath = self.get_filepath() metadata_path = Path(str(filepath) + ".metadata.blend") if metadata_path.exists() and metadata_path.is_file(): @@ -1067,7 +1069,7 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): return {"FINISHED"} except Exception as e: self.report({"WARNING"}, f"Failed to load metadata file, using regular load: {e}") - + @persistent def load_handler(*args): bpy.app.handlers.load_post.remove(load_handler) @@ -1757,12 +1759,15 @@ class ExportIFC(bpy.types.Operator, ExportHelper): if bim_props.ifc_file != output_file and extension not in ("ifczip", "ifcjson"): tool.Ifc.set_path(output_file) bim_props.is_dirty = False - + if tool.Blender.get_addon_preferences().save_metadata_blend_file: try: bpy.ops.bim.save_blend_metadata_file() blendmetadata_path = output_file + ".metadata.blend" - self.report({"INFO"}, f'IFC Project "{os.path.basename(output_file)}" And Metadata File Saved to: {os.path.basename(blendmetadata_path)}') + self.report( + {"INFO"}, + f'IFC Project "{os.path.basename(output_file)}" And Metadata File Saved to: {os.path.basename(blendmetadata_path)}', + ) except Exception as e: self.report({"ERROR"}, f"Failed to save blend metadata file: {e}") else: @@ -1773,7 +1778,7 @@ class ExportIFC(bpy.types.Operator, ExportHelper): {"INFO"}, f'IFC Project "{os.path.basename(output_file)}" {"" if not save_blend_file else "And Current Blend File Are"} Saved', ) - + bonsai.bim.handler.refresh_ui_data() @classmethod diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 7eb1ff16fd..d3e4a307ee 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -33,7 +33,15 @@ import bonsai.bim import bonsai.tool as tool import bonsai.bim.handler from enum import Enum -from bonsai.bim.helper import get_all_tab_panels, get_tab_visibility, set_tab_visibility, get_tab_names, get_panel_config, initialize_panel_properties, initialize_tab_visibilities +from bonsai.bim.helper import ( + get_all_tab_panels, + get_tab_visibility, + set_tab_visibility, + get_tab_names, + get_panel_config, + initialize_panel_properties, + initialize_tab_visibilities, +) from bpy_extras.io_utils import ImportHelper from bonsai.bim import import_ifc from bonsai.bim.prop import StrProperty @@ -236,6 +244,7 @@ class SelectIfcFile(bpy.types.Operator, IFCFileSelector, ImportHelper): return res return ImportHelper.invoke(self, context, event) + class SaveBlendMetadataFile(bpy.types.Operator): bl_idname = "bim.save_blend_metadata_file" bl_label = "Save Blend Metadata File" @@ -254,7 +263,7 @@ class SaveBlendMetadataFile(bpy.types.Operator): blendmetadata_path = ifc_file + ".metadata.blend" # Save a temporary copy of the current blend file - temp_path = bpy.path.abspath('//__temp_blendmetadata.blend') + temp_path = bpy.path.abspath("//__temp_blendmetadata.blend") bpy.ops.wm.save_as_mainfile(filepath=temp_path, copy=True) cleanup_script = f""" @@ -323,18 +332,17 @@ bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') """ import tempfile - with tempfile.NamedTemporaryFile('w', suffix='.py', delete=False) as script_file: + + with tempfile.NamedTemporaryFile("w", suffix=".py", delete=False) as script_file: script_file.write(cleanup_script) script_path = script_file.name blender_exe = bpy.app.binary_path import subprocess - result = subprocess.run([ - blender_exe, - temp_path, - '--background', - '--python', script_path - ], capture_output=True, text=True) + + result = subprocess.run( + [blender_exe, temp_path, "--background", "--python", script_path], capture_output=True, text=True + ) # Print the output from the background process (includes debug info) if result.stdout: @@ -352,6 +360,7 @@ bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') return {"FINISHED"} + class LoadBlendMetadataAndIFC(bpy.types.Operator): bl_idname = "bim.load_blend_metadata_and_ifc" bl_label = "Load Blend Metadata and IFC" @@ -363,7 +372,7 @@ class LoadBlendMetadataAndIFC(bpy.types.Operator): if not ifc_file: props = tool.Blender.get_bim_props() ifc_file = getattr(props, "ifc_file", None) - + if not ifc_file: self.report({"WARNING"}, "No IFC file path set.") return {"CANCELLED"} @@ -379,6 +388,7 @@ class LoadBlendMetadataAndIFC(bpy.types.Operator): self.report({"INFO"}, f"Loaded metadata and IFC: {metadata_path}, {ifc_file}") return {"FINISHED"} + # TODO: Unused operator. # Is there a need for this or 'DIR_PATH' propety subtype does almost the same, # but also has alt+click? @@ -1781,9 +1791,11 @@ class BIM_OT_toggle_panel_visibility(bpy.types.Operator): def execute(self, context): panel_name = self.action.replace("TOGGLE_VISIBILITY_", "") - active_tab = getattr(context.scene, "active_tab_name", None) or getattr(tool.Blender.get_bim_props(), "tab", None) + active_tab = getattr(context.scene, "active_tab_name", None) or getattr( + tool.Blender.get_bim_props(), "tab", None + ) is_bookmark_tab = active_tab == "BOOKMARK" - + panel_config = get_panel_config(panel_name, create_if_missing=True) if panel_config: if is_bookmark_tab: @@ -1792,16 +1804,16 @@ class BIM_OT_toggle_panel_visibility(bpy.types.Operator): else: panel_config.is_visible_in_tab = not panel_config.is_visible_in_tab new_value = panel_config.is_visible_in_tab - + for item in context.scene.tab_panels: if item.name == panel_name: item["visible"] = new_value break - + for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() - + tab_context = "Bookmarks" if is_bookmark_tab else "Tab" self.report({"INFO"}, f"Toggled visibility for {panel_name} in {tab_context}.") return {"FINISHED"} @@ -1819,19 +1831,19 @@ class BIM_OT_bookmark_panel(bpy.types.Operator): def execute(self, context): panel_name = self.action.replace("BOOKMARK_", "") panel_config = get_panel_config(panel_name, create_if_missing=True) - + if panel_config: panel_config.is_bookmarked = not panel_config.is_bookmarked - + for item in context.scene.tab_panels: if item.name == panel_name: item["bookmarked"] = panel_config.is_bookmarked break - + for area in bpy.context.window.screen.areas: if area.type == "PROPERTIES": area.tag_redraw() - + self.report({"INFO"}, f"Toggled bookmark for {panel_name}.") return {"FINISHED"} @@ -1846,20 +1858,20 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): tab_name: bpy.props.StringProperty() def invoke(self, context, event): - + context.scene.active_tab_name = self.tab_name context.scene.tab_panels.clear() - + initialize_tab_visibilities() initialize_panel_properties() all_panels = get_all_tab_panels(force_refresh=True) - + for panel_data in all_panels.get(self.tab_name, []): panel_name = panel_data.get("bl_idname", "") panel_label = panel_data.get("bl_label", "") if not panel_name or not panel_label: continue - + item = context.scene.tab_panels.add() item.name = panel_name item["bl_label"] = panel_label @@ -1894,8 +1906,6 @@ class BIM_OT_manage_tab_panels(bpy.types.Operator): panel_config.is_visible_in_tab = item["visible"] panel_config.is_bookmarked = item["bookmarked"] - - self.report({"INFO"}, f"Panels for {self.tab_name} managed successfully.") return {"FINISHED"} @@ -1955,9 +1965,6 @@ class BIM_OT_toggle_tab_visibility(bpy.types.Operator): return {"FINISHED"} - - - class BIM_OT_reset_ui_layout(bpy.types.Operator): """Reset UI Layout to Default""" diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index f0d3f8e5c0..f9c7f57782 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -633,7 +633,7 @@ class BIMProperties(PropertyGroup): ], name="Time Unit", default="HOUR", - ) + ) tab_visibilities: CollectionProperty(type=BIMTabVisibility, name="Tab Visibilities") panel_properties: CollectionProperty(type=BIMPanelProperties, name="Panel Properties") diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 47d51e5484..6c2baaa0fb 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -702,16 +702,6 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description="Show mass and time units section in the new project wizard panel", default=False, ) - save_metadata_blend_file: BoolProperty( - name="Save non ifc data to .metadata.blend File", - description="Save session data (window layout, settings) to a .metadata.blend file alongside the IFC file. This file is automatically loaded when opening the project.", - default=False, - ) - user_ui_customization: BoolProperty( - name="User UI Customization", - description="Enable user interface customization features (hide/show tabs and panels, bookmark panels) and save the session settings as part of the .metadata.blend file", - default=False, - ) chain_filter_with_set_operations: BoolProperty( name="NEW filter mode: Enable chained filters with set operations", @@ -724,6 +714,17 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): default=False, ) + save_metadata_blend_file: BoolProperty( + name="Save non ifc data to .metadata.blend File", + description="Save session data (window layout, settings) to a .metadata.blend file alongside the IFC file. This file is automatically loaded when opening the project.", + default=False, + ) + user_ui_customization: BoolProperty( + name="User UI Customization", + description="Enable user interface customization features (hide/show tabs and panels, bookmark panels) and save the session settings as part of the .metadata.blend file", + default=False, + ) + if TYPE_CHECKING: svg2pdf_command: str svg2dxf_command: str @@ -1007,7 +1008,11 @@ class BIM_PT_tabs(Panel): self.draw_tab_entry(row_left, "PACKAGE", "FM", True, aprops.tab == "FM") if get_tab_visibility("QUALITY"): self.draw_tab_entry(row_left, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") - if addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization and get_tab_visibility("BOOKMARK"): + if ( + addon_prefs.save_metadata_blend_file + and addon_prefs.user_ui_customization + and get_tab_visibility("BOOKMARK") + ): self.draw_tab_entry(row_left, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") row_left.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") @@ -1018,7 +1023,7 @@ class BIM_PT_tabs(Panel): if not (addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization): row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) - + for tab in get_tab_names(): # Draw a little underscore below the active tab icon. if get_tab_visibility(tab): From 2c3281917a11f429bf219483cc8eef1163c50108 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 17:34:09 +0500 Subject: [PATCH 401/657] black . --- .../bonsai/bim/module/drawing/operator.py | 23 +- src/bonsai/bonsai/bim/module/drawing/ui.py | 2 +- .../bonsai/bim/module/search/operator.py | 220 +++++++++--------- src/bonsai/bonsai/tool/drawing.py | 2 +- src/bonsai/bonsai/tool/search.py | 77 +++--- 5 files changed, 165 insertions(+), 159 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 6d495849fe..e874983074 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -302,10 +302,9 @@ class CreateDrawing(bpy.types.Operator): # Force Blender to process all pending operations for area in context.screen.areas: area.tag_redraw() - + # Process events to let Blender finish internal cleanup - bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1) - + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) self.camera = context.scene.camera assert (camera_element := tool.Ifc.get_entity(self.camera)) @@ -3713,16 +3712,16 @@ class EditElementFilter(bpy.types.Operator, tool.Ifc.Operator): assert element pset = tool.Pset.get_element_pset(element, "EPset_Drawing") assert pset - + if self.filter_mode == "INCLUDE": filter_groups = props.include_filter_groups elif self.filter_mode == "EXCLUDE": filter_groups = props.exclude_filter_groups else: return - + query = tool.Search.export_filter_query(filter_groups) or None - + if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and query: filter_structure = [] for filter_group in filter_groups: @@ -3738,20 +3737,16 @@ class EditElementFilter(bpy.types.Operator, tool.Ifc.Operator): } group_data.append(filter_data) filter_structure.append(group_data) - - value = json.dumps({ - "type": "BBIM_Search", - "query": query, - "filter_structure": filter_structure - }) + + value = json.dumps({"type": "BBIM_Search", "query": query, "filter_structure": filter_structure}) else: value = query - + if self.filter_mode == "INCLUDE": ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Include": value}) elif self.filter_mode == "EXCLUDE": ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Exclude": value}) - + props.filter_mode = "NONE" bpy.ops.bim.activate_drawing(drawing=element.id(), should_view_from_camera=False) diff --git a/src/bonsai/bonsai/bim/module/drawing/ui.py b/src/bonsai/bonsai/bim/module/drawing/ui.py index e854f9ed32..1a25b387dd 100644 --- a/src/bonsai/bonsai/bim/module/drawing/ui.py +++ b/src/bonsai/bonsai/bim/module/drawing/ui.py @@ -484,7 +484,7 @@ class BIM_PT_sheets(Panel): for annotation in ifc_file.by_type("IfcAnnotation"): if annotation.ObjectType != "DRAWING": continue - + Annotation_Name = annotation.Name.replace(",", "") # Remove commas if Annotation_Name == drawingname: drawingid = annotation.id() diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 58c773af17..2c7a506e78 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -54,18 +54,18 @@ def draw_text_editor_header(self, context): def update_filter_search_value(self: "FilterValueSuggestions", context: bpy.types.Context) -> None: filter_groups = tool.Search.get_filter_groups(self.module) ifc_filter = filter_groups[self.group_index].filters[self.filter_index] - + value = self.search_value - + if " < " in value: value = value.split(" < ")[-1] - + if ifc_filter.type == "entity": if " (superclass)" in value: value = value.replace(" (superclass)", "") if " > " in value: value = value.split(" > ")[-1] - + elif ifc_filter.type == "instance": if ": " in value: value = value.split(": ")[-1] @@ -73,23 +73,23 @@ def update_filter_search_value(self: "FilterValueSuggestions", context: bpy.type hierarchy_class = value.split(" (") element_class = hierarchy_class[-1].rstrip(")") element_name = hierarchy_class[0] if len(hierarchy_class) > 1 else None - + ifc_file = tool.Ifc.get() if ifc_file: for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) if element.is_a() == element_class: - if element_name is None or (hasattr(element, 'Name') and element.Name == element_name): + if element_name is None or (hasattr(element, "Name") and element.Name == element_name): value = element.GlobalId break except: continue - + elif ifc_filter.type == "parent": if " (" in value: value = value.split(" (")[0] - + if ifc_filter.type == "property": if self.suggestion_type == "pset": ifc_filter.pset = value @@ -104,7 +104,7 @@ def update_filter_search_value(self: "FilterValueSuggestions", context: bpy.type ifc_filter.value = value else: ifc_filter.value = value - + if self.first_launch: self.first_launch = False else: @@ -122,7 +122,7 @@ class FilterValueSuggestions(Operator): module: StringProperty(default="search") filter_type: StringProperty() suggestion_type: StringProperty(default="value") - + first_launch: BoolProperty(default=True, options={"SKIP_SAVE"}) search_value: StringProperty( name="Search", @@ -158,10 +158,10 @@ class FilterValueSuggestions(Operator): def draw(self, context): layout = self.layout - + filter_groups = tool.Search.get_filter_groups(self.module) ifc_filter = filter_groups[self.group_index].filters[self.filter_index] - + label_map = { "entity": "Select Class", "type": "Select Type", @@ -172,7 +172,7 @@ class FilterValueSuggestions(Operator): "parent": "Select Parent", "instance": "Select GlobalId", } - + if ifc_filter.type == "attribute": if self.suggestion_type == "attribute_value": label = f"Select Value for {ifc_filter.name}" @@ -187,7 +187,7 @@ class FilterValueSuggestions(Operator): label = "Select Property Set" else: label = label_map.get(ifc_filter.type, "Select Value") - + row = layout.row() row.label(text=label) row = layout.row() @@ -202,7 +202,7 @@ class FilterValueSuggestions(Operator): def get_suggestions(self, ifc_file, ifc_filter): suggestions = set() - + if ifc_filter.type == "entity": suggestions = self.get_entity_suggestions(ifc_file) elif ifc_filter.type == "type": @@ -231,58 +231,58 @@ class FilterValueSuggestions(Operator): suggestions = self.get_property_names(ifc_file, ifc_filter.pset) else: suggestions = self.get_property_values(ifc_file, ifc_filter.pset, ifc_filter.name) - + return suggestions def build_hierarchy_path(self, element): path = [] current = element - + while current: - if hasattr(current, 'Name') and current.Name: + if hasattr(current, "Name") and current.Name: path.insert(0, current.Name) - + parent = None - - if hasattr(current, 'Decomposes') and current.Decomposes: + + if hasattr(current, "Decomposes") and current.Decomposes: for rel in current.Decomposes: - if hasattr(rel, 'RelatingObject'): + if hasattr(rel, "RelatingObject"): parent = rel.RelatingObject break - - if not parent and hasattr(current, 'ContainedInStructure') and current.ContainedInStructure: + + if not parent and hasattr(current, "ContainedInStructure") and current.ContainedInStructure: for rel in current.ContainedInStructure: - if hasattr(rel, 'RelatingStructure'): + if hasattr(rel, "RelatingStructure"): parent = rel.RelatingStructure break - + current = parent - + return path def get_entity_suggestions(self, ifc_file): all_classes = set() schema = tool.Ifc.schema() - + for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) class_name = element.is_a() - + try: entity = schema.declaration_by_name(class_name).as_entity() current = entity - + chain_names = [class_name] while current.supertype(): supertype = current.supertype() chain_names.insert(0, supertype.name()) current = supertype - + if len(chain_names) > 1: all_classes.add(" > ".join(chain_names)) for i in range(len(chain_names) - 1): - superclass_chain = " > ".join(chain_names[:i+1]) + superclass_chain = " > ".join(chain_names[: i + 1]) all_classes.add(f"{superclass_chain} (superclass)") else: all_classes.add(class_name) @@ -290,7 +290,7 @@ class FilterValueSuggestions(Operator): all_classes.add(class_name) except: continue - + return all_classes def get_type_suggestions(self, ifc_file): @@ -346,60 +346,60 @@ class FilterValueSuggestions(Operator): try: element = ifc_file.by_id(element_id) has_children = False - - if hasattr(element, 'IsDecomposedBy') and element.IsDecomposedBy: + + if hasattr(element, "IsDecomposedBy") and element.IsDecomposedBy: has_children = True - elif hasattr(element, 'ContainsElements') and element.ContainsElements: + elif hasattr(element, "ContainsElements") and element.ContainsElements: has_children = True - elif hasattr(element, 'HasOpenings') and element.HasOpenings: + elif hasattr(element, "HasOpenings") and element.HasOpenings: has_children = True - + if has_children: hierarchy_path = self.build_hierarchy_path(element) element_class = element.is_a() - + if len(hierarchy_path) > 0: hierarchy_str = " < ".join(hierarchy_path) suggestions.add(f"{hierarchy_str} ({element_class})") else: - element_name = element.Name if hasattr(element, 'Name') and element.Name else element_class + element_name = element.Name if hasattr(element, "Name") and element.Name else element_class suggestions.add(f"{element_name} ({element_class})") except: continue - + return suggestions def get_instance_suggestions(self, ifc_file): suggestions = set() element_data = [] - + for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) - if hasattr(element, 'GlobalId') and element.GlobalId: + if hasattr(element, "GlobalId") and element.GlobalId: hierarchy_path = self.build_hierarchy_path(element) element_class = element.is_a() - + if len(hierarchy_path) > 0: hierarchy_str = " < ".join(hierarchy_path) display_str = f"{hierarchy_str} ({element_class})" else: display_str = f"({element_class})" - + element_data.append((display_str, element.GlobalId)) except: continue - + display_counts = {} for display_str, global_id in element_data: display_counts[display_str] = display_counts.get(display_str, 0) + 1 - + for display_str, global_id in element_data: if display_counts[display_str] > 1: suggestions.add(f"{display_str}: {global_id}") else: suggestions.add(display_str) - + return suggestions def get_property_sets(self, ifc_file): @@ -407,8 +407,8 @@ class FilterValueSuggestions(Operator): for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) - for definition in getattr(element, 'IsDefinedBy', []): - if definition.is_a('IfcRelDefinesByProperties'): + for definition in getattr(element, "IsDefinedBy", []): + if definition.is_a("IfcRelDefinesByProperties"): pset = definition.RelatingPropertyDefinition if pset.is_a("IfcPropertySet") and pset.Name: psets.add(pset.Name) @@ -421,8 +421,8 @@ class FilterValueSuggestions(Operator): for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) - for definition in getattr(element, 'IsDefinedBy', []): - if definition.is_a('IfcRelDefinesByProperties'): + for definition in getattr(element, "IsDefinedBy", []): + if definition.is_a("IfcRelDefinesByProperties"): pset = definition.RelatingPropertyDefinition if pset.is_a("IfcPropertySet") and pset.Name == pset_name: if pset.HasProperties: @@ -438,8 +438,8 @@ class FilterValueSuggestions(Operator): for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) - for definition in getattr(element, 'IsDefinedBy', []): - if definition.is_a('IfcRelDefinesByProperties'): + for definition in getattr(element, "IsDefinedBy", []): + if definition.is_a("IfcRelDefinesByProperties"): pset = definition.RelatingPropertyDefinition if pset.is_a("IfcPropertySet") and pset.Name == pset_name: if pset.HasProperties: @@ -449,9 +449,13 @@ class FilterValueSuggestions(Operator): try: value = prop.NominalValue.wrappedValue if value is not None and value != "": - if not hasattr(value, 'is_a') and not isinstance(value, (tuple, list)): + if not hasattr(value, "is_a") and not isinstance( + value, (tuple, list) + ): str_value = str(value) - if not str_value.startswith("#") and not str_value.startswith("("): + if not str_value.startswith("#") and not str_value.startswith( + "(" + ): property_values.add(str_value) except: continue @@ -462,7 +466,7 @@ class FilterValueSuggestions(Operator): def get_attribute_names(self, ifc_file): attribute_names = set() schema = tool.Ifc.schema() - + ifc_classes = set() for element_id in IfcStore.id_map.keys(): try: @@ -470,7 +474,7 @@ class FilterValueSuggestions(Operator): ifc_classes.add(element.is_a()) except: continue - + for ifc_class in ifc_classes: try: entity = schema.declaration_by_name(ifc_class).as_entity() @@ -479,30 +483,30 @@ class FilterValueSuggestions(Operator): attribute_names.add(attr.name()) except: continue - + return attribute_names def get_attribute_values(self, ifc_file, attribute_name): attribute_values = set() - + for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) - + if element.is_a("IfcRelationship") or element.is_a("IfcTypeObject"): continue - + if hasattr(element, attribute_name): value = getattr(element, attribute_name, None) - + if value is not None and value != "": - if not hasattr(value, 'is_a') and not isinstance(value, (tuple, list)): + if not hasattr(value, "is_a") and not isinstance(value, (tuple, list)): str_value = str(value) if not str_value.startswith("#") and not str_value.startswith("("): attribute_values.add(str_value) except: continue - + return attribute_values @@ -580,14 +584,14 @@ class ToggleFilterInclusion(Operator): filter_groups = tool.Search.get_filter_groups(self.module) filter_group = filter_groups[self.group_index] ifc_filter = filter_group.filters[self.filter_index] - + if ifc_filter.filter_mode == "ADD": ifc_filter.filter_mode = "SUBTRACT" elif ifc_filter.filter_mode == "SUBTRACT": ifc_filter.filter_mode = "FILTER" else: ifc_filter.filter_mode = "ADD" - + return {"FINISHED"} @@ -615,40 +619,40 @@ class ApplyFilterFromText(Operator, tool.Ifc.Operator): bl_label = "Apply Filter Configuration" bl_description = "Apply the JSON filter configuration from the current text block" bl_options = {"REGISTER", "UNDO"} - + @classmethod def poll(cls, context): - if context.area and context.area.type == 'TEXT_EDITOR': + if context.area and context.area.type == "TEXT_EDITOR": space = context.space_data if space.text and space.text.name.startswith("FilterQuery_"): return True return False - + def execute(self, context): space = context.space_data text = space.text - + if not text or not text.name.startswith("FilterQuery_"): self.report({"ERROR"}, "No valid filter configuration text block") - return {'CANCELLED'} - + return {"CANCELLED"} + module = text.name.replace("FilterQuery_", "") - + try: json_data = json.loads(text.as_string()) filter_structure = json_data.get("filter_structure", []) filter_groups = tool.Search.get_filter_groups(module) tool.Search.import_filter_structure(filter_structure, filter_groups) self.report({"INFO"}, "Filter configuration applied successfully") - + if len(context.window_manager.windows) > 1: bpy.ops.wm.window_close() - + except Exception as e: self.report({"ERROR"}, f"Invalid JSON: {str(e)}") - return {'CANCELLED'} - - return {'FINISHED'} + return {"CANCELLED"} + + return {"FINISHED"} class EditFilterQuery(Operator, tool.Ifc.Operator): @@ -662,7 +666,7 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): def _execute(self, context): module = getattr(self, "module", "search") - + if not tool.Blender.get_addon_preferences().chain_filter_with_set_operations: if self.query == self.old_query: return @@ -674,7 +678,7 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): return def draw(self, context): - + if not tool.Blender.get_addon_preferences().chain_filter_with_set_operations: row = self.layout.row() row.prop(self, "query", text="") @@ -698,39 +702,37 @@ class EditFilterQuery(Operator, tool.Ifc.Operator): } group_data.append(filter_data) filter_structure.append(group_data) - + query = tool.Search.export_filter_query(filter_groups) - json_data = { - "type": "BBIM_Search", - "query": query, - "filter_structure": filter_structure - } - + json_data = {"type": "BBIM_Search", "query": query, "filter_structure": filter_structure} + text_block_name = f"FilterQuery_{module}" text = bpy.data.texts.get(text_block_name) if not text: text = bpy.data.texts.new(text_block_name) - + text.clear() text.write(json.dumps(json_data, indent=2)) - + bpy.ops.wm.window_new() new_window = context.window_manager.windows[-1] - + new_area = new_window.screen.areas[0] - new_area.type = 'TEXT_EDITOR' - + new_area.type = "TEXT_EDITOR" + text_space = None for space in new_area.spaces: - if space.type == 'TEXT_EDITOR': + if space.type == "TEXT_EDITOR": text_space = space break - + if text_space: text_space.text = text - - self.report({"INFO"}, "Compact text editor opened. Edit JSON and click 'Apply Filter Configuration' in header") - return {'FINISHED'} + + self.report( + {"INFO"}, "Compact text editor opened. Edit JSON and click 'Apply Filter Configuration' in header" + ) + return {"FINISHED"} else: self.query = tool.Search.export_filter_query(filter_groups) @@ -761,9 +763,12 @@ class Search(Operator): assert_never(self.property_group) preferences = tool.Blender.get_addon_preferences() - + # Migrate old ! prefix filters to new filter_mode system when preferences are enabled - if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: + if ( + preferences.chain_filter_with_set_operations + or preferences.default_filter_with_set_operations_for_globalid_and_class + ): for filter_group in props.filter_groups: for ifc_filter in filter_group.filters: if ifc_filter.type not in ["entity", "instance"]: @@ -771,7 +776,7 @@ class Search(Operator): if ifc_filter.value.startswith("!"): ifc_filter.value = ifc_filter.value[1:] ifc_filter.filter_mode = "SUBTRACT" - + results = tool.Search.execute_filter_groups(props.filter_groups) else: results = ifcopenshell.util.selector.filter_elements( @@ -843,7 +848,7 @@ class SaveSearch(Operator, tool.Ifc.Operator): try: query = tool.Search.export_filter_query(filter_groups) results = tool.Search.execute_filter_groups(filter_groups) - + filter_structure = [] for filter_group in filter_groups: group_data = [] @@ -863,11 +868,7 @@ class SaveSearch(Operator, tool.Ifc.Operator): self.report({"ERROR"}, "Error occurred trying save search.") return - description = json.dumps({ - "type": "BBIM_Search", - "query": query, - "filter_structure": filter_structure - }) + description = json.dumps({"type": "BBIM_Search", "query": query, "filter_structure": filter_structure}) ifc_file = tool.Ifc.get() group = next( ( @@ -908,7 +909,7 @@ class LoadSearch(Operator, tool.Ifc.Operator): filter_groups = tool.Search.get_filter_groups(self.module) props = tool.Search.get_search_props() group = tool.Ifc.get().by_id(int(props.saved_searches)) - + group_data = tool.Search.get_group_data(group) if group_data and "filter_structure" in group_data: tool.Search.import_filter_structure(group_data["filter_structure"], filter_groups) @@ -939,7 +940,7 @@ class RemoveSearch(Operator, tool.Ifc.Operator): if not group_id: self.report({"ERROR"}, "No search selected for removal") return - + group = tool.Ifc.get().by_id(int(group_id)) group_name = group.Name or "Unnamed" ifcopenshell.api.group.remove_group(tool.Ifc.get(), group=group) @@ -955,6 +956,7 @@ class RemoveSearch(Operator, tool.Ifc.Operator): def invoke(self, context, event): tool.Search.patch_search_ifcgroups() from bonsai.bim.module.search.data import SearchData + if not SearchData.is_loaded: SearchData.load() return context.window_manager.invoke_props_dialog(self) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index f0455a4ba1..b687134afc 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -2125,7 +2125,7 @@ class Drawing(bonsai.core.tool.Drawing): command = command.replace(variable, value) # Defensive: skip if command[2:-2] is None or 'None' command_content = command[2:-2] - if command_content is None or str(command_content).strip().lower() == 'none': + if command_content is None or str(command_content).strip().lower() == "none": text = text.replace(original_command, "") else: try: diff --git a/src/bonsai/bonsai/tool/search.py b/src/bonsai/bonsai/tool/search.py index 36536f5a1a..a0e2e17456 100644 --- a/src/bonsai/bonsai/tool/search.py +++ b/src/bonsai/bonsai/tool/search.py @@ -51,17 +51,17 @@ class Search(bonsai.core.tool.Search): cls, filter_structure: list, filter_groups: bpy.types.bpy_prop_collection_idprop[BIMFilterGroup] ) -> None: filter_groups.clear() - + for group_data in filter_structure: if not isinstance(group_data, list): continue - + filter_group = filter_groups.add() - + for filter_data in group_data: if not isinstance(filter_data, dict): continue - + ifc_filter = filter_group.filters.add() ifc_filter.type = filter_data.get("type", "") ifc_filter.name = filter_data.get("name", "") @@ -112,11 +112,11 @@ class Search(bonsai.core.tool.Search): for ifc_filter in filter_group.filters: if not ifc_filter.value: continue - + query_part = cls._export_single_filter(ifc_filter) if query_part: filter_group_query.append(query_part) - + if filter_group_query: query.append(", ".join(filter_group_query)) return " + ".join(query) @@ -124,24 +124,30 @@ class Search(bonsai.core.tool.Search): @classmethod def _export_single_filter(cls, ifc_filter: BIMFacet) -> str: preferences = tool.Blender.get_addon_preferences() - + if ifc_filter.type == "instance": if "bpy.data.texts" in ifc_filter.value: data_name = ifc_filter.value.split("bpy.data.texts")[1][2:-2] value = bpy.data.texts[data_name].as_string() else: value = ifc_filter.value - - if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: + + if ( + preferences.chain_filter_with_set_operations + or preferences.default_filter_with_set_operations_for_globalid_and_class + ): value = value.lstrip("!") if ifc_filter.filter_mode == "SUBTRACT": value = f"!{value}" return value - + elif ifc_filter.type == "entity": value = ifc_filter.value - - if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: + + if ( + preferences.chain_filter_with_set_operations + or preferences.default_filter_with_set_operations_for_globalid_and_class + ): value = value.lstrip("!") if ifc_filter.filter_mode == "SUBTRACT": value = f"!{value}" @@ -192,25 +198,28 @@ class Search(bonsai.core.tool.Search): Groups are combined with union (same as original " + " behavior). """ preferences = tool.Blender.get_addon_preferences() - + all_group_results = [] - + for group_idx, filter_group in enumerate(filter_groups): group_results = set() - + for filter_index, ifc_filter in enumerate(filter_group.filters): if not ifc_filter.value: continue - + query = cls._export_single_filter(ifc_filter) if not query: continue - + if filter_index == 0: mode = "ADD" else: if ifc_filter.type in ["entity", "instance"]: - if preferences.chain_filter_with_set_operations or preferences.default_filter_with_set_operations_for_globalid_and_class: + if ( + preferences.chain_filter_with_set_operations + or preferences.default_filter_with_set_operations_for_globalid_and_class + ): mode = ifc_filter.filter_mode else: mode = "FILTER" if group_results else "ADD" @@ -219,11 +228,11 @@ class Search(bonsai.core.tool.Search): mode = ifc_filter.filter_mode else: mode = "FILTER" if group_results else "ADD" - + if mode == "ADD": results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) group_results.update(results) - + elif mode == "SUBTRACT": if group_results: query_without_prefix = query[1:] if query.startswith("!") else query @@ -234,7 +243,7 @@ class Search(bonsai.core.tool.Search): else: results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) group_results.update(results) - + elif mode == "FILTER": if group_results: results = ifcopenshell.util.selector.filter_elements( @@ -244,14 +253,14 @@ class Search(bonsai.core.tool.Search): else: results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) group_results.update(results) - + if group_results: all_group_results.append(group_results) - + final_results = set() for group_results in all_group_results: final_results.update(group_results) - + return final_results @classmethod @@ -259,24 +268,24 @@ class Search(bonsai.core.tool.Search): cls, data: dict, ifc_file: ifcopenshell.file ) -> set[ifcopenshell.entity_instance]: """Execute filter groups from JSON data with filter_structure - + This is used by drawing include/exclude to properly handle ADD/SUBTRACT/FILTER modes without needing to instantiate Blender property groups. """ filter_structure = data.get("filter_structure", []) - + all_group_results = [] for group_data in filter_structure: group_results = set() - + for filter_data in group_data: filter_mode = filter_data.get("filter_mode", "ADD") filter_type = filter_data.get("type", "") value = filter_data.get("value", "") - + if not filter_type or not value: continue - + query_part = None if filter_type == "entity": query_part = value @@ -318,10 +327,10 @@ class Search(bonsai.core.tool.Search): query_part = f"query:{keys}{comparison}{wrapped_value}" elif filter_type == "instance": query_part = value - + if not query_part: continue - + if filter_mode == "FILTER" and group_results: results = ifcopenshell.util.selector.filter_elements(ifc_file, query_part, elements=group_results) group_results = results @@ -331,14 +340,14 @@ class Search(bonsai.core.tool.Search): else: # ADD results = ifcopenshell.util.selector.filter_elements(ifc_file, query_part) group_results.update(results) - + if group_results: all_group_results.append(group_results) - + final_results = set() for group_results in all_group_results: final_results.update(group_results) - + return final_results @classmethod From fda3bd319f6990d7a6d54e99f5165dc028387765 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 11:42:46 +0500 Subject: [PATCH 402/657] Use black formatter action for pretty summaries --- .github/workflows/ci-black-formatting.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-black-formatting.yaml b/.github/workflows/ci-black-formatting.yaml index 37c9081538..92f8dd9d1e 100644 --- a/.github/workflows/ci-black-formatting.yaml +++ b/.github/workflows/ci-black-formatting.yaml @@ -40,8 +40,7 @@ jobs: - name: Black formatter id: black - run: | - black --diff --check . + uses: psf/black@stable continue-on-error: true - name: Ruff check @@ -60,7 +59,7 @@ jobs: echo "::error::Syntax errors check failed, see 'syntax-errors' step for the details." && ERROR=1 fi if [ "${{ steps.black.outcome }}" != "success" ]; then - echo "::error::Black formatting check failed, see 'black' step for the details." && ERROR=1 + echo "::error::Black formatting check failed, see Summary or 'black' step for the details." && ERROR=1 fi if [ "${{ steps.ruff.outcome }}" != "success" ]; then echo "::error::Ruff check failed, see 'ruff' step for the details." && ERROR=1 From d8b8fb628b2e5a928f4ab127c560fd42d43884f1 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 15:28:20 +0500 Subject: [PATCH 403/657] ci - github summary for ruff --- .github/workflows/ci-black-formatting.yaml | 33 ++++++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-black-formatting.yaml b/.github/workflows/ci-black-formatting.yaml index 92f8dd9d1e..4002b0e02e 100644 --- a/.github/workflows/ci-black-formatting.yaml +++ b/.github/workflows/ci-black-formatting.yaml @@ -46,9 +46,36 @@ jobs: - name: Ruff check id: ruff run: | + # Ensure execution continues, since we need to cache the output. + set +e + ERROR=0 - poe ruff-main || ERROR=1 - poe ruff-old || ERROR=1 + # Keep colored output inside action logs, strip it from color codes for summary. + uv tool install ansi2txt + # `ruff` disables color output in CI by default. + export FORCE_COLOR="1" + + run_check() { + local out + out="$("$@" 2>&1)" + local exit_code=$? + + if [ "$exit_code" -ne 0 ]; then + ERROR=1 + fi + + # Rerun just for GitHub annotations. + "$@" --output-format=github || true + + echo "$out" + echo "\`\`\`python" >> $GITHUB_STEP_SUMMARY + echo "$out" | ansi2txt >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + } + + run_check poe ruff-main + run_check poe ruff-old + exit $ERROR continue-on-error: true @@ -62,6 +89,6 @@ jobs: echo "::error::Black formatting check failed, see Summary or 'black' step for the details." && ERROR=1 fi if [ "${{ steps.ruff.outcome }}" != "success" ]; then - echo "::error::Ruff check failed, see 'ruff' step for the details." && ERROR=1 + echo "::error::Ruff check failed, see Summary or 'ruff' step for the details." && ERROR=1 fi exit $ERROR From a40e211f25d0bf6636857ee540173fbfd858d6ca Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 17:31:21 +0500 Subject: [PATCH 404/657] ci - add black formatter annotations --- .../workflows/black_to_github_annotations.py | 41 +++++++++++++++++++ .github/workflows/ci-black-formatting.yaml | 9 ++++ 2 files changed, 50 insertions(+) create mode 100644 .github/workflows/black_to_github_annotations.py diff --git a/.github/workflows/black_to_github_annotations.py b/.github/workflows/black_to_github_annotations.py new file mode 100644 index 0000000000..074eedf6b7 --- /dev/null +++ b/.github/workflows/black_to_github_annotations.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +import json +import os +import sys +from typing import TypedDict + +import github_action_utils as gha_utils + + +class Entry(TypedDict): + location: Location + + +class Location(TypedDict): + path: str + lines: Lines + + +class Lines(TypedDict): + begin: int + end: int + + +json_data: list[Entry] = json.load(sys.stdin) + +if os.getenv("RUNNER_DEBUG"): + print("Debug: Black formatting JSON data:") + print(json.dumps(json_data, indent=2)) + +for change in json_data: + location = change["location"] + path = location["path"] + lines = location["lines"] + gha_utils.error( + f"Black formatting issue in {path}", + title="Black Format Issue", + file=path, + line=lines["begin"], + end_line=lines["end"], + ) diff --git a/.github/workflows/ci-black-formatting.yaml b/.github/workflows/ci-black-formatting.yaml index 4002b0e02e..c5581a2a70 100644 --- a/.github/workflows/ci-black-formatting.yaml +++ b/.github/workflows/ci-black-formatting.yaml @@ -43,6 +43,15 @@ jobs: uses: psf/black@stable continue-on-error: true + # Same check as above, but just for creating github annotations. + - name: Black formatter annotations + id: black-annotations + run: | + uv tool install black-codeclimate + pip install github_action_utils + black --diff --check . | black-codeclimate | python .github/workflows/black_to_github_annotations.py + continue-on-error: true + - name: Ruff check id: ruff run: | From cc63e7918643f790987b2dfe40b0701e109c5d00 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 17:38:56 +0500 Subject: [PATCH 405/657] simple_spf - bump #7363 --- src/ifcopenshell-python/ifcopenshell/simple_spf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/simple_spf b/src/ifcopenshell-python/ifcopenshell/simple_spf index 2849a31788..30317826f8 160000 --- a/src/ifcopenshell-python/ifcopenshell/simple_spf +++ b/src/ifcopenshell-python/ifcopenshell/simple_spf @@ -1 +1 @@ -Subproject commit 2849a31788c4f82edca7d1b1046d0606fdf8b9be +Subproject commit 30317826f8f743860ecff9e183699296593e42cb From abb19e08704fa8fe118b766a6a1fb1edac8e4fc8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Dec 2025 13:52:08 +0000 Subject: [PATCH 406/657] Bump actions/checkout from 5 to 6 Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build_osx.yml | 4 ++-- .github/workflows/build_pyodide.yml | 4 ++-- .github/workflows/build_rocky.yml | 4 ++-- .github/workflows/build_rocky_arm.yml | 4 ++-- .github/workflows/build_win.yml | 4 ++-- .github/workflows/ci-bcf-pypi.yml | 2 +- .github/workflows/ci-black-formatting.yaml | 2 +- .github/workflows/ci-bonsai-choco.yml | 2 +- .github/workflows/ci-bonsai-daily.yml | 4 ++-- .github/workflows/ci-bonsai.yml | 2 +- .github/workflows/ci-bsdd-pypi.yaml | 2 +- .github/workflows/ci-ifc4d-pypi.yaml | 2 +- .github/workflows/ci-ifc5d-pypi.yaml | 2 +- .github/workflows/ci-ifccityjson-pypi.yaml | 2 +- .github/workflows/ci-ifcclash-pypi.yaml | 2 +- .github/workflows/ci-ifcconvert.yml | 2 +- .github/workflows/ci-ifccsv-pypi.yaml | 2 +- .github/workflows/ci-ifcdiff-pypi.yaml | 2 +- .github/workflows/ci-ifcfm-pypi.yaml | 2 +- .github/workflows/ci-ifcopenshell-conda-daily.yml | 4 ++-- .github/workflows/ci-ifcopenshell-docker.yml | 4 ++-- .github/workflows/ci-ifcopenshell-python-pypi.yml | 2 +- .github/workflows/ci-ifcopenshell-python.yml | 2 +- .github/workflows/ci-ifcpatch-pypi.yaml | 2 +- .github/workflows/ci-ifcsverchok-daily.yml | 2 +- .github/workflows/ci-ifcsverchok.yml | 2 +- .github/workflows/ci-ifctester-org.yml | 4 ++-- .github/workflows/ci-ifctester-pypi.yml | 2 +- .github/workflows/ci.yml | 2 +- .github/workflows/docs-deployment-unstable.yml | 2 +- .github/workflows/docs-deployment.yml | 2 +- .github/workflows/publish-pyodide-demo-app.yml | 2 +- .github/workflows/release.yml | 2 +- 33 files changed, 42 insertions(+), 42 deletions(-) diff --git a/.github/workflows/build_osx.yml b/.github/workflows/build_osx.yml index 6732a29761..9d2316d7ae 100644 --- a/.github/workflows/build_osx.yml +++ b/.github/workflows/build_osx.yml @@ -21,12 +21,12 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: submodules: recursive - name: Checkout Build Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: repository: IfcOpenShell/build-outputs path: ./build diff --git a/.github/workflows/build_pyodide.yml b/.github/workflows/build_pyodide.yml index 1119893c8d..f7b7ad66d1 100644 --- a/.github/workflows/build_pyodide.yml +++ b/.github/workflows/build_pyodide.yml @@ -9,13 +9,13 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: submodules: recursive path: IfcOpenShell - name: Checkout Build Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: repository: IfcOpenShell/build-outputs path: ifcopenshell_build diff --git a/.github/workflows/build_rocky.yml b/.github/workflows/build_rocky.yml index 292e386a8b..fed6fea962 100644 --- a/.github/workflows/build_rocky.yml +++ b/.github/workflows/build_rocky.yml @@ -29,12 +29,12 @@ jobs: aws --version - name: Checkout Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: submodules: recursive - name: Checkout Build Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: repository: IfcOpenShell/build-outputs path: ./build diff --git a/.github/workflows/build_rocky_arm.yml b/.github/workflows/build_rocky_arm.yml index a149af42c8..3d07f349f8 100644 --- a/.github/workflows/build_rocky_arm.yml +++ b/.github/workflows/build_rocky_arm.yml @@ -29,12 +29,12 @@ jobs: aws --version - name: Checkout Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: submodules: recursive - name: Checkout Build Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: repository: IfcOpenShell/build-outputs path: ./build diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index 508f4278bd..6ef112da61 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -12,12 +12,12 @@ jobs: arch: ['x64'] steps: - name: Checkout Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: submodules: recursive - name: Checkout Build Repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: repository: IfcOpenShell/build-outputs path: _deps-vs2022-x64-installed diff --git a/.github/workflows/ci-bcf-pypi.yml b/.github/workflows/ci-bcf-pypi.yml index 91be42e97d..349b071740 100644 --- a/.github/workflows/ci-bcf-pypi.yml +++ b/.github/workflows/ci-bcf-pypi.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 # https://github.com/actions/checkout + - uses: actions/checkout@v6 # https://github.com/actions/checkout - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-black-formatting.yaml b/.github/workflows/ci-black-formatting.yaml index c5581a2a70..283acd56bc 100644 --- a/.github/workflows/ci-black-formatting.yaml +++ b/.github/workflows/ci-black-formatting.yaml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Action - checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Action - install python uses: actions/setup-python@v6 diff --git a/.github/workflows/ci-bonsai-choco.yml b/.github/workflows/ci-bonsai-choco.yml index 5240304b85..c4204f7d02 100644 --- a/.github/workflows/ci-bonsai-choco.yml +++ b/.github/workflows/ci-bonsai-choco.yml @@ -34,7 +34,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-tags: true fetch-depth: 0 diff --git a/.github/workflows/ci-bonsai-daily.yml b/.github/workflows/ci-bonsai-daily.yml index 49e59f9474..4185574b2d 100644 --- a/.github/workflows/ci-bonsai-daily.yml +++ b/.github/workflows/ci-bonsai-daily.yml @@ -54,7 +54,7 @@ jobs: short_name: macosm1, } steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified @@ -93,7 +93,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout bonsai_unstable_repo repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: repository: IfcOpenShell/bonsai_unstable_repo token: ${{ secrets.IFCOPENBOT_TOKEN }} diff --git a/.github/workflows/ci-bonsai.yml b/.github/workflows/ci-bonsai.yml index 7f90d1ad25..4c8364a958 100644 --- a/.github/workflows/ci-bonsai.yml +++ b/.github/workflows/ci-bonsai.yml @@ -43,7 +43,7 @@ jobs: short_name: macosm1, } steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-bsdd-pypi.yaml b/.github/workflows/ci-bsdd-pypi.yaml index b563d1fa74..e7c326a59a 100644 --- a/.github/workflows/ci-bsdd-pypi.yaml +++ b/.github/workflows/ci-bsdd-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifc4d-pypi.yaml b/.github/workflows/ci-ifc4d-pypi.yaml index 161ea22651..c08b26d9c0 100644 --- a/.github/workflows/ci-ifc4d-pypi.yaml +++ b/.github/workflows/ci-ifc4d-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifc5d-pypi.yaml b/.github/workflows/ci-ifc5d-pypi.yaml index 48b36f8b8f..635f60c985 100644 --- a/.github/workflows/ci-ifc5d-pypi.yaml +++ b/.github/workflows/ci-ifc5d-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifccityjson-pypi.yaml b/.github/workflows/ci-ifccityjson-pypi.yaml index 5bf5a8bda8..f16a57cffd 100644 --- a/.github/workflows/ci-ifccityjson-pypi.yaml +++ b/.github/workflows/ci-ifccityjson-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcclash-pypi.yaml b/.github/workflows/ci-ifcclash-pypi.yaml index 9075b2138d..bbde274804 100644 --- a/.github/workflows/ci-ifcclash-pypi.yaml +++ b/.github/workflows/ci-ifcclash-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcconvert.yml b/.github/workflows/ci-ifcconvert.yml index 181f5a0d77..d4cd7fc55a 100644 --- a/.github/workflows/ci-ifcconvert.yml +++ b/.github/workflows/ci-ifcconvert.yml @@ -37,7 +37,7 @@ jobs: short_name: macosm164 } steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifccsv-pypi.yaml b/.github/workflows/ci-ifccsv-pypi.yaml index 8dab393cc3..04d7a76937 100644 --- a/.github/workflows/ci-ifccsv-pypi.yaml +++ b/.github/workflows/ci-ifccsv-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcdiff-pypi.yaml b/.github/workflows/ci-ifcdiff-pypi.yaml index 4abb170932..eba7ad237f 100644 --- a/.github/workflows/ci-ifcdiff-pypi.yaml +++ b/.github/workflows/ci-ifcdiff-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcfm-pypi.yaml b/.github/workflows/ci-ifcfm-pypi.yaml index 5de093bfb2..c658bbf3ef 100644 --- a/.github/workflows/ci-ifcfm-pypi.yaml +++ b/.github/workflows/ci-ifcfm-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcopenshell-conda-daily.yml b/.github/workflows/ci-ifcopenshell-conda-daily.yml index 07916435d8..2cd41686e9 100644 --- a/.github/workflows/ci-ifcopenshell-conda-daily.yml +++ b/.github/workflows/ci-ifcopenshell-conda-daily.yml @@ -21,7 +21,7 @@ jobs: date: ${{ steps.date.outputs.date }} verdate: ${{ steps.verdate.outputs.verdate }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Set env run: echo ok go @@ -76,7 +76,7 @@ jobs: echo "ARTIFACTS_DIR=/home/runner/work/artifacts" >> $GITHUB_ENV fi - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index d6663ff198..2a555b5aec 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-22.04 needs: activate steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive @@ -86,7 +86,7 @@ jobs: name: Docker Build, Tag, Push steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: lfs: true diff --git a/.github/workflows/ci-ifcopenshell-python-pypi.yml b/.github/workflows/ci-ifcopenshell-python-pypi.yml index 10ad9b6e61..526aa09b64 100644 --- a/.github/workflows/ci-ifcopenshell-python-pypi.yml +++ b/.github/workflows/ci-ifcopenshell-python-pypi.yml @@ -47,7 +47,7 @@ jobs: short_name: macosm164 } steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 # https://github.com/actions/setup-python diff --git a/.github/workflows/ci-ifcopenshell-python.yml b/.github/workflows/ci-ifcopenshell-python.yml index bd8182d63e..5d34335ada 100644 --- a/.github/workflows/ci-ifcopenshell-python.yml +++ b/.github/workflows/ci-ifcopenshell-python.yml @@ -38,7 +38,7 @@ jobs: short_name: macosm164 } steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 # https://github.com/actions/setup-python diff --git a/.github/workflows/ci-ifcpatch-pypi.yaml b/.github/workflows/ci-ifcpatch-pypi.yaml index 5c5d8fc583..79692933ce 100644 --- a/.github/workflows/ci-ifcpatch-pypi.yaml +++ b/.github/workflows/ci-ifcpatch-pypi.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci-ifcsverchok-daily.yml b/.github/workflows/ci-ifcsverchok-daily.yml index c117ec57a4..ac3edc546b 100644 --- a/.github/workflows/ci-ifcsverchok-daily.yml +++ b/.github/workflows/ci-ifcsverchok-daily.yml @@ -25,7 +25,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-ifcsverchok.yml b/.github/workflows/ci-ifcsverchok.yml index 1ff610989f..f3c8aba0a2 100644 --- a/.github/workflows/ci-ifcsverchok.yml +++ b/.github/workflows/ci-ifcsverchok.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified diff --git a/.github/workflows/ci-ifctester-org.yml b/.github/workflows/ci-ifctester-org.yml index 99e97ef8f9..7ec6cbdc46 100644 --- a/.github/workflows/ci-ifctester-org.yml +++ b/.github/workflows/ci-ifctester-org.yml @@ -10,9 +10,9 @@ jobs: publish_website: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Checkout ifctester_org_static_html - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: repository: IfcOpenShell/ifctester_org_static_html token: ${{ secrets.IFCOPENBOT_TOKEN }} diff --git a/.github/workflows/ci-ifctester-pypi.yml b/.github/workflows/ci-ifctester-pypi.yml index d8acf9615e..b024d7685d 100644 --- a/.github/workflows/ci-ifctester-pypi.yml +++ b/.github/workflows/ci-ifctester-pypi.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python with: python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9d307ab96c..d2392ecb2e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,7 @@ jobs: CLICOLOR_FORCE: "1" CMAKE_COLOR_DIAGNOSTICS: "ON" steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive diff --git a/.github/workflows/docs-deployment-unstable.yml b/.github/workflows/docs-deployment-unstable.yml index 7f191838eb..55e2fd5518 100644 --- a/.github/workflows/docs-deployment-unstable.yml +++ b/.github/workflows/docs-deployment-unstable.yml @@ -11,7 +11,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 diff --git a/.github/workflows/docs-deployment.yml b/.github/workflows/docs-deployment.yml index 4a65e161d9..3ff50b575e 100644 --- a/.github/workflows/docs-deployment.yml +++ b/.github/workflows/docs-deployment.yml @@ -9,7 +9,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 diff --git a/.github/workflows/publish-pyodide-demo-app.yml b/.github/workflows/publish-pyodide-demo-app.yml index 91bab31cb5..4aebe4266e 100644 --- a/.github/workflows/publish-pyodide-demo-app.yml +++ b/.github/workflows/publish-pyodide-demo-app.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout (recursive) - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: submodules: recursive fetch-depth: 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b5cbb4f28c..4880ed8177 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: submodules: recursive - name: Install C++ dependencies From 22c972d88a590f934d8bbd865dac2eebf4c5d20d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 22:48:44 +0000 Subject: [PATCH 407/657] Bump actions/upload-artifact from 5 to 6 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build_osx.yml | 2 +- .github/workflows/build_pyodide.yml | 2 +- .github/workflows/build_rocky.yml | 2 +- .github/workflows/build_rocky_arm.yml | 2 +- .github/workflows/ci-ifcopenshell-docker.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_osx.yml b/.github/workflows/build_osx.yml index 9d2316d7ae..f53d91b98d 100644 --- a/.github/workflows/build_osx.yml +++ b/.github/workflows/build_osx.yml @@ -81,7 +81,7 @@ jobs: - name: Upload Build Logs if: always() - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: build-logs-osx-${{ matrix.arch }} path: | diff --git a/.github/workflows/build_pyodide.yml b/.github/workflows/build_pyodide.yml index f7b7ad66d1..b5692b18f4 100644 --- a/.github/workflows/build_pyodide.yml +++ b/.github/workflows/build_pyodide.yml @@ -42,7 +42,7 @@ jobs: - name: Upload Build Logs if: always() - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: build-logs-pyodide path: | diff --git a/.github/workflows/build_rocky.yml b/.github/workflows/build_rocky.yml index fed6fea962..6a21a9dfc3 100644 --- a/.github/workflows/build_rocky.yml +++ b/.github/workflows/build_rocky.yml @@ -61,7 +61,7 @@ jobs: - name: Upload Build Logs if: always() - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: build-logs-rocky path: | diff --git a/.github/workflows/build_rocky_arm.yml b/.github/workflows/build_rocky_arm.yml index 3d07f349f8..c595c63676 100644 --- a/.github/workflows/build_rocky_arm.yml +++ b/.github/workflows/build_rocky_arm.yml @@ -61,7 +61,7 @@ jobs: - name: Upload Build Logs if: always() - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: build-logs-rocky-arm64 path: | diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index 2a555b5aec..de880baf8e 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -73,7 +73,7 @@ jobs: make package working-directory: build - name: Upload - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: # Artifact name name: ifcos-artifacts From eba44053108ed1f650c0badcef81c00617380878 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 22:48:34 +0000 Subject: [PATCH 408/657] Bump actions/download-artifact from 6.0.0 to 7.0.0 Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci-ifcopenshell-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index de880baf8e..d5691ecfce 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -91,7 +91,7 @@ jobs: lfs: true - name: Download - uses: actions/download-artifact@v6.0.0 + uses: actions/download-artifact@v7.0.0 with: # Artifact name name: ifcos-artifacts From 85aeb6e1cc9282e456c0259f8f4a827decfe2ed4 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 19 Dec 2025 13:51:01 +0100 Subject: [PATCH 409/657] PR7500 squashed commit --- src/bonsai/bonsai/bim/data/assets/default.css | 2 + .../bonsai/bim/module/drawing/__init__.py | 18 +- src/bonsai/bonsai/bim/module/drawing/data.py | 820 ++++++++- .../bonsai/bim/module/drawing/operator.py | 1553 ++++++++++++++++- src/bonsai/bonsai/bim/module/drawing/prop.py | 167 +- .../bonsai/bim/module/drawing/svgwriter.py | 200 ++- src/bonsai/bonsai/bim/module/drawing/ui.py | 250 ++- .../bonsai/bim/module/drawing/workspace.py | 3 + src/bonsai/bonsai/bim/prop.py | 19 +- .../ifcopenshell/util/selector.py | 141 +- 10 files changed, 3030 insertions(+), 143 deletions(-) diff --git a/src/bonsai/bonsai/bim/data/assets/default.css b/src/bonsai/bonsai/bim/data/assets/default.css index 1070bc8e91..68307f4c3f 100644 --- a/src/bonsai/bonsai/bim/data/assets/default.css +++ b/src/bonsai/bonsai/bim/data/assets/default.css @@ -20,6 +20,8 @@ * { stroke-linecap: round; stroke-linejoin: round; } text, tspan { /* 2.5mm */ fill: black; stroke: none; font-family: 'OpenGost Type B TT', 'DejaVu Sans Condensed', 'Liberation Sans', 'Arial Narrow', 'Arial'; font-size: 4.13px; } +a text, a tspan { fill: blue !important; text-decoration: underline;} +a:hover { cursor: pointer; } .cut { fill: black; stroke: black; stroke-linecap: 'round'; stroke-width: 0.35; fill-rule: evenodd; } .projection { fill: white; stroke: black; stroke-linecap: 'round'; stroke-width: 0.25; } .surface { stroke: none; fill: #fff; fill-rule: evenodd; } diff --git a/src/bonsai/bonsai/bim/module/drawing/__init__.py b/src/bonsai/bonsai/bim/module/drawing/__init__.py index eb5779d4af..1578f4eeed 100644 --- a/src/bonsai/bonsai/bim/module/drawing/__init__.py +++ b/src/bonsai/bonsai/bim/module/drawing/__init__.py @@ -65,6 +65,17 @@ classes = ( operator.EnableEditingText, operator.ExcludeAnnotation, operator.ExpandSheet, + operator.ToggleElementValuesPanel, + operator.ToggleElementValuesCategory, + operator.SelectElementValues, + operator.InsertFormattedLiteralPopup, + operator.AddElementValueRow, + operator.RemoveElementValueRow, + operator.ElementValueSuggestionsPopup, + operator.FormatElementValueRow, + operator.ApplyElementValueRowsToLiteral, + operator.ShowCategoryHelp, + operator.ShowElementValuesInstructions, operator.LoadDrawings, operator.LoadReferences, operator.LoadSchedules, @@ -89,8 +100,10 @@ classes = ( operator.SelectAllDrawings, operator.SelectAllSheets, operator.SelectAssignedProduct, + operator.SelectSimilarTextLiteralValue, operator.ToggleTargetView, operator.OpenDocumentationWebUi, + operator.FilterSelectedObjectsIfIntersectedByCamera, prop.Variable, prop.Drawing, prop.Document, @@ -98,7 +111,9 @@ classes = ( prop.Sheet, prop.DocProperties, prop.BIMCameraProperties, + prop.ElementValueRow, prop.LiteralProps, + prop.LiteralApplySettings, prop.BIMTextProperties, prop.BIMAssignedProductProperties, prop.BIMAnnotationProperties, @@ -143,7 +158,6 @@ def menu_func(self, context): if element and element.is_a("IfcAnnotation") and element.ObjectType in ["SECTION", "ELEVATION"]: self.layout.operator("bim.activate_drawing_by_annotation", text="Go to Drawing") - def register(): if not bpy.app.background: bpy.utils.register_tool(workspace.AnnotationTool, after={"bim.bim_tool"}, separator=True, group=False) @@ -156,7 +170,7 @@ def register(): bpy.app.handlers.load_post.append(handler.load_post) bpy.app.handlers.depsgraph_update_pre.append(handler.depsgraph_update_pre_handler) bpy.types.VIEW3D_MT_image_add.append(ui.add_object_button) - bpy.types.VIEW3D_MT_object_context_menu.append(menu_func) + bpy.types.VIEW3D_MT_object_context_menu.append(menu_func) def unregister(): diff --git a/src/bonsai/bonsai/bim/module/drawing/data.py b/src/bonsai/bonsai/bim/module/drawing/data.py index af8fac3cdf..1b3d1255a1 100644 --- a/src/bonsai/bonsai/bim/module/drawing/data.py +++ b/src/bonsai/bonsai/bim/module/drawing/data.py @@ -22,6 +22,7 @@ import json import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.unit +import ifcopenshell.util.selector import bonsai.tool as tool from pathlib import Path from typing import Any, Union @@ -335,19 +336,17 @@ class DecoratorData: @classmethod def get_text_data(cls, obj: bpy.types.Object) -> dict[str, Any]: - """used by Ifc Annotations with ObjectType = "TEXT" / "TEXT_LEADER"\n + """used by Ifc Annotations with ObjectType = "TEXT" / "TEXT_LEADER" returns font size in mm for current ifc text object""" element = tool.Ifc.get_entity(obj) assert element # getting font size pset_data = ifcopenshell.util.element.get_pset(element, "EPset_Annotation") or {} - # use `regular` as default # get font size classes = pset_data.get("Classes", None) or "regular" classes_split = classes.split() - # prioritize smaller font sizes just like in svg font_size_type = next( (font_size_type for font_size_type in FONT_SIZES if font_size_type in classes_split), "regular" ) @@ -361,15 +360,22 @@ class DecoratorData: literals = tool.Drawing.get_text_literal(obj, return_list=True) assert isinstance(literals, list) literals_data: list[dict[str, Any]] = [] - product = tool.Drawing.get_assigned_product(element) or element + + product = cls.get_product_for_element_values(obj, element) + for literal in literals: literal_value = literal.Literal + + try: + current_value = cls.evaluate_formatting_expressions(literal_value) + current_value = tool.Drawing.replace_text_literal_variables(current_value, product) + except Exception: + current_value = literal_value + literal_data = { "Literal": literal_value, "BoxAlignment": literal.BoxAlignment, - "CurrentValue": tool.Drawing.replace_text_literal_variables( - literal_value, product, reverse_list, list_separator - ), + "CurrentValue": current_value, } literals_data.append(literal_data) @@ -382,6 +388,419 @@ class DecoratorData: "List_Separator": list_separator, } + @classmethod + def get_product_for_element_values(cls, text_obj: bpy.types.Object, element: ifcopenshell.entity_instance): + """Get the product to use for element values - either ProductUsed or assigned product""" + props = tool.Drawing.get_text_props(text_obj) + if props.literals: + for literal_props in props.literals: + if hasattr(literal_props, "product_used") and literal_props.product_used: + return tool.Ifc.get_entity(literal_props.product_used) + + assigned_product = tool.Drawing.get_assigned_product(element) + if assigned_product: + return assigned_product + + return element + + @classmethod + def evaluate_formatting_expressions(cls, text: str) -> str: + """Evaluate formatting expressions wrapped in backticks using ifcopenshell.util.selector.format""" + import re + + def evaluate_expression(match): + try: + expression = match.group(1) + result = ifcopenshell.util.selector.format(expression) + return str(result) + except Exception as e: + return match.group(0) + + return re.sub(r"``([^`]+)``", evaluate_expression, text) + + @classmethod + def get_element_value_by_key(cls, element: ifcopenshell.entity_instance, key: str): + """Get element value by its key using IfcOpenShell selector syntax""" + try: + # Basic keys + if key == "id": + return element.id() + elif key == "class": + return element.is_a() + elif key == "predefined_type": + return ifcopenshell.util.element.get_predefined_type(element) + + # Direct attributes + elif hasattr(element, key): + return getattr(element, key) + + # Material keys + elif key.startswith("material"): + return cls._get_material_value(element, key) + + # Type keys + elif key.startswith("type."): + if hasattr(element, "IsTypedBy") and element.IsTypedBy: + element_type = element.IsTypedBy[0].RelatingType + attr_name = key.split(".", 1)[1] + if hasattr(element_type, attr_name): + return getattr(element_type, attr_name) + + elif key == "types.count": + if hasattr(element, "IsTypedBy") and element.IsTypedBy: + element_type = element.IsTypedBy[0].RelatingType + occurrence_count = 0 + if hasattr(element_type, "Types"): + for rel in element_type.Types: + if hasattr(rel, "RelatedObjects"): + occurrence_count += len(rel.RelatedObjects) + return occurrence_count + + elif key == "occurrences.count": + if element.is_a("IfcTypeProduct"): + occurrence_count = 0 + if hasattr(element, "Types"): + for rel in element.Types: + if hasattr(rel, "RelatedObjects"): + occurrence_count += len(rel.RelatedObjects) + return occurrence_count + + # Spatial keys + elif key.startswith("container."): + container = ifcopenshell.util.element.get_container(element) + if container: + attr_name = key.split(".", 1)[1] + if hasattr(container, attr_name): + return getattr(container, attr_name) + + elif key.startswith("space."): + container = ifcopenshell.util.element.get_container(element) + current = container + while current: + if current.is_a("IfcSpace"): + attr_name = key.split(".", 1)[1] + if hasattr(current, attr_name): + return getattr(current, attr_name) + break + current = ifcopenshell.util.element.get_aggregate(current) + + elif key.startswith("storey."): + container = ifcopenshell.util.element.get_container(element) + current = container + while current: + if current.is_a("IfcBuildingStorey"): + attr_name = key.split(".", 1)[1] + if hasattr(current, attr_name): + return getattr(current, attr_name) + break + current = ifcopenshell.util.element.get_aggregate(current) + + elif key.startswith("building."): + container = ifcopenshell.util.element.get_container(element) + current = container + while current: + if current.is_a("IfcBuilding"): + attr_name = key.split(".", 1)[1] + if hasattr(current, attr_name): + return getattr(current, attr_name) + break + current = ifcopenshell.util.element.get_aggregate(current) + + elif key.startswith("site."): + container = ifcopenshell.util.element.get_container(element) + current = container + while current: + if current.is_a("IfcSite"): + attr_name = key.split(".", 1)[1] + if hasattr(current, attr_name): + return getattr(current, attr_name) + break + current = ifcopenshell.util.element.get_aggregate(current) + + # Parent keys + elif key.startswith("parent."): + parent = ifcopenshell.util.element.get_aggregate(element) + if parent: + attr_name = key.split(".", 1)[1] + if hasattr(parent, attr_name): + return getattr(parent, attr_name) + + # Group, system, zone keys + elif key.startswith(("group.", "system.", "zone.")): + prefix = key.split(".")[0] + attr_name = key.split(".", 1)[1] + + if hasattr(element, "HasAssignments"): + for assignment in element.HasAssignments: + if assignment.is_a("IfcRelAssignsToGroup"): + group = assignment.RelatingGroup + if ( + prefix == "group" + and group.is_a("IfcGroup") + and not group.is_a("IfcSystem") + and not group.is_a("IfcZone") + ): + if hasattr(group, attr_name): + return getattr(group, attr_name) + elif prefix == "system" and group.is_a("IfcSystem"): + if hasattr(group, attr_name): + return getattr(group, attr_name) + elif prefix == "zone" and group.is_a("IfcZone"): + if hasattr(group, attr_name): + return getattr(group, attr_name) + + elif key in ("groups.count", "systems.count", "zones.count"): + prefix = key.split(".")[0] + count = 0 + + if hasattr(element, "HasAssignments"): + for assignment in element.HasAssignments: + if assignment.is_a("IfcRelAssignsToGroup"): + group = assignment.RelatingGroup + if ( + prefix == "groups" + and group.is_a("IfcGroup") + and not group.is_a("IfcSystem") + and not group.is_a("IfcZone") + ): + count += 1 + elif prefix == "systems" and group.is_a("IfcSystem"): + count += 1 + elif prefix == "zones" and group.is_a("IfcZone"): + count += 1 + + return count + + # Classification keys + elif key.startswith("classification."): + import re + + match = re.match(r"classification\.(\d+)\.(\w+)", key) + if match: + idx = int(match.group(1)) + attr_name = match.group(2) + classifications = ifcopenshell.util.classification.get_references(element) + if classifications and 0 <= idx < len(classifications): + classification = classifications[idx] + if hasattr(classification, attr_name): + return getattr(classification, attr_name) + + elif key == "classification.count": + classifications = ifcopenshell.util.classification.get_references(element) + return len(classifications) if classifications else 0 + + # Profile keys + elif key.startswith("profiles."): + import re + + if key == "profiles.count": + material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) + if material and material.is_a("IfcMaterialProfileSet") and hasattr(material, "MaterialProfiles"): + return len(material.MaterialProfiles) + return 0 + + match = re.match(r"profiles\.(\d+)\.(\w+)", key) + if match: + idx = int(match.group(1)) + attr_name = match.group(2) + material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) + if material and material.is_a("IfcMaterialProfileSet") and hasattr(material, "MaterialProfiles"): + if 0 <= idx < len(material.MaterialProfiles): + profile_item = material.MaterialProfiles[idx] + if hasattr(profile_item, "Profile") and profile_item.Profile: + profile = profile_item.Profile + if hasattr(profile, attr_name): + return getattr(profile, attr_name) + return None + + elif key.startswith("profile."): + attr_name = key.split(".", 1)[1] + if hasattr(element, "Representation") and element.Representation: + for representation in element.Representation.Representations: + if hasattr(representation, "Items"): + for item in representation.Items: + if item.is_a("IfcExtrudedAreaSolid") and hasattr(item, "SweptArea"): + profile = item.SweptArea + if hasattr(profile, attr_name): + return getattr(profile, attr_name) + return None + + # Style keys + elif key.startswith("styles."): + import re + + if key == "styles.count": + try: + styles = ifcopenshell.util.element.get_styles(element) + return len(styles) if styles else 0 + except: + return 0 + + match = re.match(r"styles\.(\d+)\.(\w+)", key) + if match: + idx = int(match.group(1)) + attr_name = match.group(2) + try: + styles = ifcopenshell.util.element.get_styles(element) + if styles and 0 <= idx < len(styles): + style = styles[idx] + if attr_name == "Color" and style.is_a("IfcSurfaceStyle"): + # Extract color from surface style + if hasattr(style, "Styles"): + for surface_style_elem in style.Styles: + if surface_style_elem.is_a("IfcSurfaceStyleRendering"): + if hasattr(surface_style_elem, "SurfaceColour"): + color = surface_style_elem.SurfaceColour + return f"RGB({color.Red:.2f}, {color.Green:.2f}, {color.Blue:.2f})" + elif hasattr(style, attr_name): + return getattr(style, attr_name) + except: + pass + return None + + # Coordinate keys + elif key in ("x", "y", "z"): + if hasattr(element, "ObjectPlacement") and element.ObjectPlacement: + matrix = ifcopenshell.util.placement.get_local_placement(element.ObjectPlacement) + if matrix is not None: + if key == "x": + return matrix[0][3] + elif key == "y": + return matrix[1][3] + elif key == "z": + return matrix[2][3] + return None + + elif key in ("easting", "northing", "elevation"): + if hasattr(element, "ObjectPlacement") and element.ObjectPlacement: + try: + matrix = ifcopenshell.util.placement.get_local_placement(element.ObjectPlacement) + if matrix is not None: + ifc_file = element.wrapped_data.file + project = ifc_file.by_type("IfcProject")[0] if ifc_file.by_type("IfcProject") else None + + if project: + for context in project.RepresentationContexts or []: + if context.is_a("IfcGeometricRepresentationContext") and hasattr( + context, "HasCoordinateOperation" + ): + for coord_op in context.HasCoordinateOperation: + if coord_op.is_a("IfcMapConversion"): + if key == "easting": + return matrix[0][3] + coord_op.Eastings + elif key == "northing": + return matrix[1][3] + coord_op.Northings + elif key == "elevation": + return matrix[2][3] + coord_op.OrthogonalHeight + except: + pass + return None + + # Property sets / Quantity sets (must be checked last to avoid conflicts) + elif "." in key: + parts = key.split(".", 1) + if len(parts) == 2: + pset_name, prop_name = parts + psets = ifcopenshell.util.element.get_psets(element, psets_only=True) + qsets = ifcopenshell.util.element.get_psets(element, qtos_only=True) + all_psets = {**psets, **qsets} + + if pset_name in all_psets and prop_name in all_psets[pset_name]: + return all_psets[pset_name][prop_name] + + # Check for regex patterns (e.g., /Pset_.*Common/) + import re + + if pset_name.startswith("/") and pset_name.endswith("/"): + pattern = pset_name[1:-1] + try: + regex = re.compile(pattern) + for actual_pset_name in all_psets.keys(): + if regex.match(actual_pset_name): + if prop_name in all_psets[actual_pset_name]: + return all_psets[actual_pset_name][prop_name] + elif prop_name.startswith("/") and prop_name.endswith("/"): + prop_pattern = prop_name[1:-1] + prop_regex = re.compile(prop_pattern) + for actual_prop_name, prop_value in all_psets[actual_pset_name].items(): + if prop_regex.match(actual_prop_name): + return prop_value + except re.error: + pass + + except Exception as e: + print(f"Error getting value for key '{key}': {e}") + + return None + + @classmethod + def _get_material_value(cls, element: ifcopenshell.entity_instance, key: str): + """Extract material values using correct selector syntax""" + material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) + if not material: + return None + + if key == "materials.count": + if material.is_a("IfcMaterialLayerSetUsage") and material.ForLayerSet: + layer_set = material.ForLayerSet + if hasattr(layer_set, "MaterialLayers"): + return len(layer_set.MaterialLayers) + elif material.is_a("IfcMaterialLayerSet") and hasattr(material, "MaterialLayers"): + return len(material.MaterialLayers) + elif material.is_a("IfcMaterialProfileSet") and hasattr(material, "MaterialProfiles"): + return len(material.MaterialProfiles) + elif material.is_a("IfcMaterialConstituentSet") and hasattr(material, "MaterialConstituents"): + return len(material.MaterialConstituents) + elif material.is_a("IfcMaterial"): + return 1 + return 0 + + if key == "material.Name": + return getattr(material, "Name", None) + + elif key.startswith("material.item."): + import re + + match = re.match(r"material\.item\.(\d+)\.(\w+)", key) + if match: + item_idx = int(match.group(1)) + prop_name = match.group(2) + + items = cls._get_material_items(material) + if items and 0 <= item_idx < len(items): + item = items[item_idx] + if prop_name == "Name" and hasattr(item, "Material") and item.Material: + return getattr(item.Material, "Name", None) + elif prop_name == "LayerThickness" and hasattr(item, "LayerThickness"): + return getattr(item, "LayerThickness", None) + elif hasattr(item, prop_name): + return getattr(item, prop_name, None) + + match = re.match(r"material\.item\.Material\.Name\.(\d+)", key) + if match: + item_idx = int(match.group(1)) + items = cls._get_material_items(material) + if items and 0 <= item_idx < len(items): + item = items[item_idx] + if hasattr(item, "Material") and item.Material: + return getattr(item.Material, "Name", None) + + return None + + @classmethod + def _get_material_items(cls, material): + """Get material items (layers, profiles, or constituents) from material""" + if material.is_a("IfcMaterialLayerSetUsage") and hasattr(material, "ForLayerSet") and material.ForLayerSet: + if hasattr(material.ForLayerSet, "MaterialLayers"): + return material.ForLayerSet.MaterialLayers + elif material.is_a("IfcMaterialLayerSet") and hasattr(material, "MaterialLayers"): + return material.MaterialLayers + elif material.is_a("IfcMaterialProfileSet") and hasattr(material, "MaterialProfiles"): + return material.MaterialProfiles + elif material.is_a("IfcMaterialConstituentSet") and hasattr(material, "MaterialConstituents"): + return material.MaterialConstituents + return None + @classmethod def get_dimension_data(cls, obj: bpy.types.Object) -> dict[str, Any]: """used by Ifc Annotations with ObjectType: @@ -514,3 +933,390 @@ class AnnotationData: ) return sorted(relating_types, key=lambda x: x["name"]) + + +class ElementValuesData: + data = {} + is_loaded = False + + @classmethod + def load(cls): + cls.is_loaded = True + + @classmethod + def get_flattened_keys(cls, available_keys: dict[str, list[tuple[str, str]]]) -> list[tuple[str, str]]: + """Flatten all keys from all categories into a single list for numbering""" + all_keys_flat = [] + for cat_name, cat_keys in available_keys.items(): + for cat_key, cat_desc in cat_keys: + all_keys_flat.append((cat_key, cat_desc)) + return all_keys_flat + + @classmethod + def get_available_element_value_keys( + cls, element: ifcopenshell.entity_instance + ) -> dict[str, list[tuple[str, str]]]: + """Get all available selector syntax keys for the element""" + keys = {} + + keys["Basic"] = cls._get_basic_keys(element) + + keys["Attributes"] = cls._get_attribute_keys(element) + + keys["Property Sets"] = cls._get_pset_keys(element) + keys["Quantity Sets"] = cls._get_qset_keys(element) + + keys["Type"] = cls._get_type_keys(element) + keys["Spatial"] = cls._get_spatial_keys(element) + keys["Parent"] = cls._get_parent_keys(element) + keys["Groups"] = cls._get_group_keys(element) + keys["Systems"] = cls._get_system_keys(element) + keys["Zones"] = cls._get_zone_keys(element) + + keys["Material"] = cls._get_material_keys(element) + keys["Styles"] = cls._get_style_keys(element) + + keys["Classification"] = cls._get_classification_keys(element) + + keys["Profiles"] = cls._get_profile_keys(element) + + keys["Coordinates"] = cls._get_coordinate_keys() + + return keys + + @classmethod + def _get_basic_keys(cls, element): + keys = [] + keys.append(("id", f"IFC ID: {element.id()}")) + keys.append(("class", f"IFC Class: {element.is_a()}")) + + predefined_type = ifcopenshell.util.element.get_predefined_type(element) + if predefined_type and predefined_type != "NOTDEFINED": + keys.append(("predefined_type", f"Predefined Type: {predefined_type}")) + + return keys + + @classmethod + def _get_attribute_keys(cls, element): + keys = [] + excluded_attrs = {"id", "type", "GlobalId", "OwnerHistory", "ObjectPlacement", "Representation"} + + for attr_name in element.get_info().keys(): + if attr_name not in excluded_attrs: + attr_value = getattr(element, attr_name, None) + if attr_value is not None: + keys.append((attr_name, f"{attr_name}: {attr_value}")) + + return keys + + @classmethod + def _get_pset_keys(cls, element): + keys = [] + psets = ifcopenshell.util.element.get_psets(element, psets_only=True) + if psets: + for pset_name, props in psets.items(): + for prop_name, prop_value in props.items(): + if isinstance(prop_value, (str, int, float, bool)): + keys.append((f"{pset_name}.{prop_name}", f"{pset_name}.{prop_name}: {prop_value}")) + return keys + + @classmethod + def _get_qset_keys(cls, element): + keys = [] + qsets = ifcopenshell.util.element.get_psets(element, qtos_only=True) + if qsets: + for qset_name, quantities in qsets.items(): + for qty_name, qty_value in quantities.items(): + if isinstance(qty_value, (str, int, float)): + keys.append((f"{qset_name}.{qty_name}", f"{qset_name}.{qty_name}: {qty_value}")) + return keys + + @classmethod + def _get_material_keys(cls, element): + keys = [] + material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) + if not material: + return keys + + if hasattr(material, "Name") and material.Name: + keys.append(("material.Name", f"Material: {material.Name}")) + + material_count = 0 + if material.is_a("IfcMaterialLayerSetUsage") and material.ForLayerSet: + layer_set = material.ForLayerSet + if hasattr(layer_set, "MaterialLayers"): + material_count = len(layer_set.MaterialLayers) + for i, layer in enumerate(layer_set.MaterialLayers): + if layer.Material and layer.Material.Name: + keys.append( + (f"material.item.Material.Name.{i}", f"Layer {i+1} Material Name: {layer.Material.Name}") + ) + if hasattr(layer, "LayerThickness") and layer.LayerThickness: + keys.append( + (f"material.item.{i}.LayerThickness", f"Layer {i+1} Thickness: {layer.LayerThickness}") + ) + + elif material.is_a("IfcMaterialLayerSet") and hasattr(material, "MaterialLayers"): + material_count = len(material.MaterialLayers) + for i, layer in enumerate(material.MaterialLayers): + if layer.Material and layer.Material.Name: + keys.append( + (f"material.item.Material.Name.{i}", f"Layer {i+1} Material Name: {layer.Material.Name}") + ) + if hasattr(layer, "LayerThickness") and layer.LayerThickness: + keys.append((f"material.item.{i}.LayerThickness", f"Layer {i+1} Thickness: {layer.LayerThickness}")) + + elif material.is_a("IfcMaterialProfileSet") and hasattr(material, "MaterialProfiles"): + material_count = len(material.MaterialProfiles) + for i, profile in enumerate(material.MaterialProfiles): + if profile.Material and profile.Material.Name: + keys.append( + (f"material.item.Material.Name.{i}", f"Profile {i+1} Material Name: {profile.Material.Name}") + ) + + elif material.is_a("IfcMaterialConstituentSet") and hasattr(material, "MaterialConstituents"): + material_count = len(material.MaterialConstituents) + for i, constituent in enumerate(material.MaterialConstituents): + if constituent.Material and constituent.Material.Name: + keys.append( + ( + f"material.item.Material.Name.{i}", + f"Constituent {i+1} Material Name: {constituent.Material.Name}", + ) + ) + + elif material.is_a("IfcMaterial"): + material_count = 1 + + if material_count > 0: + keys.append(("materials.count", f"Material Count: {material_count}")) + + return keys + + @classmethod + def _get_style_keys(cls, element): + """Get presentation styles from the element""" + keys = [] + + styles = ifcopenshell.util.element.get_styles(element) + if styles: + keys.append(("styles.count", f"Style Count: {len(styles)}")) + for i, style in enumerate(styles): + if hasattr(style, "Name") and style.Name: + keys.append((f"styles.{i}.Name", f"Style {i+1} Name: {style.Name}")) + if style.is_a("IfcSurfaceStyle") and hasattr(style, "Styles"): + for surface_style_elem in style.Styles: + if surface_style_elem.is_a("IfcSurfaceStyleRendering"): + if hasattr(surface_style_elem, "SurfaceColour"): + color = surface_style_elem.SurfaceColour + if hasattr(color, "Red") and hasattr(color, "Green") and hasattr(color, "Blue"): + rgb = f"RGB({color.Red:.2f}, {color.Green:.2f}, {color.Blue:.2f})" + keys.append((f"styles.{i}.Color", f"Style {i+1} Color: {rgb}")) + + return keys + + @classmethod + def _get_type_keys(cls, element): + keys = [] + + if hasattr(element, "IsTypedBy") and element.IsTypedBy: + element_type = element.IsTypedBy[0].RelatingType + if hasattr(element_type, "Name") and element_type.Name: + keys.append(("type.Name", f"Type Name: {element_type.Name}")) + + if element.is_a("IfcTypeProduct"): + occurrence_count = 0 + if hasattr(element, "Types"): + for rel in element.Types: + if hasattr(rel, "RelatedObjects"): + occurrence_count += len(rel.RelatedObjects) + keys.append(("occurrences.count", f"Occurrence Count: {occurrence_count}")) + + elif hasattr(element, "IsTypedBy") and element.IsTypedBy: + element_type = element.IsTypedBy[0].RelatingType + occurrence_count = 0 + if hasattr(element_type, "Types"): + for rel in element_type.Types: + if hasattr(rel, "RelatedObjects"): + occurrence_count += len(rel.RelatedObjects) + keys.append(("types.count", f"Type Occurrence Count: {occurrence_count}")) + + return keys + + @classmethod + def _get_spatial_keys(cls, element): + keys = [] + + container = ifcopenshell.util.element.get_container(element) + if container and hasattr(container, "Name") and container.Name: + keys.append(("container.Name", f"Container: {container.Name}")) + + space = None + current = container + while current: + if current.is_a("IfcSpace"): + space = current + break + current = ifcopenshell.util.element.get_aggregate(current) + if space and hasattr(space, "Name") and space.Name: + keys.append(("space.Name", f"Space: {space.Name}")) + + storey = None + current = container + while current: + if current.is_a("IfcBuildingStorey"): + storey = current + break + current = ifcopenshell.util.element.get_aggregate(current) + if storey and hasattr(storey, "Name") and storey.Name: + keys.append(("storey.Name", f"Storey: {storey.Name}")) + + building = None + current = container + while current: + if current.is_a("IfcBuilding"): + building = current + break + current = ifcopenshell.util.element.get_aggregate(current) + if building and hasattr(building, "Name") and building.Name: + keys.append(("building.Name", f"Building: {building.Name}")) + + site = None + current = container + while current: + if current.is_a("IfcSite"): + site = current + break + current = ifcopenshell.util.element.get_aggregate(current) + if site and hasattr(site, "Name") and site.Name: + keys.append(("site.Name", f"Site: {site.Name}")) + + return keys + + @classmethod + def _get_parent_keys(cls, element): + keys = [] + parent = ifcopenshell.util.element.get_aggregate(element) + if parent and hasattr(parent, "Name") and parent.Name: + keys.append((f"parent.name", f"Parent: {parent.Name}")) + return keys + + @classmethod + def _get_group_keys(cls, element): + keys = [] + groups = [] + if hasattr(element, "HasAssignments"): + for assignment in element.HasAssignments: + if assignment.is_a("IfcRelAssignsToGroup"): + group = assignment.RelatingGroup + if group.is_a("IfcGroup") and not group.is_a("IfcSystem") and not group.is_a("IfcZone"): + groups.append(group) + if group.Name: + keys.append((f"group.Name", f"Group: {group.Name}")) + + if groups: + keys.append(("groups.count", f"Group Count: {len(groups)}")) + + return keys + + @classmethod + def _get_system_keys(cls, element): + keys = [] + systems = [] + if hasattr(element, "HasAssignments"): + for assignment in element.HasAssignments: + if assignment.is_a("IfcRelAssignsToGroup"): + group = assignment.RelatingGroup + if group.is_a("IfcSystem"): + systems.append(group) + if group.Name: + keys.append((f"system.Name", f"System: {group.Name}")) + + if systems: + keys.append(("systems.count", f"System Count: {len(systems)}")) + + return keys + + @classmethod + def _get_zone_keys(cls, element): + keys = [] + zones = [] + if hasattr(element, "HasAssignments"): + for assignment in element.HasAssignments: + if assignment.is_a("IfcRelAssignsToGroup"): + group = assignment.RelatingGroup + if group.is_a("IfcZone"): + zones.append(group) + if group.Name: + keys.append((f"zone.Name", f"Zone: {group.Name}")) + + if zones: + keys.append(("zones.count", f"Zone Count: {len(zones)}")) + + return keys + + @classmethod + def _get_classification_keys(cls, element): + keys = [] + classifications = ifcopenshell.util.classification.get_references(element) + if classifications: + for i, classification in enumerate(classifications): + if hasattr(classification, "Name") and classification.Name: + keys.append((f"classification.{i}.Name", f"Classification {i+1}: {classification.Name}")) + if hasattr(classification, "Identification") and classification.Identification: + keys.append( + ( + f"classification.{i}.Identification", + f"Classification {i+1} ID: {classification.Identification}", + ) + ) + + keys.append(("classification.count", f"Classification Count: {len(classifications)}")) + + return keys + + @classmethod + def _get_coordinate_keys(cls): + return [ + ("x", "X Coordinate"), + ("y", "Y Coordinate"), + ("z", "Z Coordinate"), + ("easting", "Easting"), + ("northing", "Northing"), + ("elevation", "Elevation"), + ] + + @classmethod + def _get_profile_keys(cls, element): + """Get profile definitions from the element""" + keys = [] + + material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) + if material: + profiles = [] + if material.is_a("IfcMaterialProfileSet") and hasattr(material, "MaterialProfiles"): + for profile in material.MaterialProfiles: + if hasattr(profile, "Profile") and profile.Profile: + profiles.append(profile.Profile) + + if profiles: + keys.append(("profiles.count", f"Profile Count: {len(profiles)}")) + for i, profile in enumerate(profiles): + if hasattr(profile, "ProfileName") and profile.ProfileName: + keys.append((f"profiles.{i}.ProfileName", f"Profile {i+1} Name: {profile.ProfileName}")) + if hasattr(profile, "ProfileType") and profile.ProfileType: + keys.append((f"profiles.{i}.ProfileType", f"Profile {i+1} Type: {profile.ProfileType}")) + + if hasattr(element, "Representation") and element.Representation: + for representation in element.Representation.Representations: + if hasattr(representation, "Items"): + for item in representation.Items: + if item.is_a("IfcExtrudedAreaSolid") and hasattr(item, "SweptArea"): + profile = item.SweptArea + if hasattr(profile, "ProfileName") and profile.ProfileName: + keys.append(("profile.ProfileName", f"Swept Profile Name: {profile.ProfileName}")) + if hasattr(profile, "ProfileType") and profile.ProfileType: + keys.append(("profile.ProfileType", f"Swept Profile Type: {profile.ProfileType}")) + break + + return keys diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index e874983074..66c417f3ec 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -19,6 +19,7 @@ import os import bpy import json +import re import time import bmesh import shutil @@ -50,7 +51,9 @@ import bonsai.bim.module.drawing.sheeter as sheeter import bonsai.bim.export_ifc from bpy_extras.io_utils import ImportHelper from bonsai.bim.module.drawing.decoration import CutDecorator -from bonsai.bim.module.drawing.data import DecoratorData +from bonsai.bim.module.drawing.data import DecoratorData, ElementValuesData +from bonsai.bim.module.drawing.ui import get_current_product_for_element_values +from bonsai.bim.prop import StrProperty from typing import NamedTuple, Union, Optional, Literal, TYPE_CHECKING, Any, TypedDict, get_args from lxml import etree from math import radians @@ -305,7 +308,6 @@ class CreateDrawing(bpy.types.Operator): # Process events to let Blender finish internal cleanup bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) - self.camera = context.scene.camera assert (camera_element := tool.Ifc.get_entity(self.camera)) self.camera_element = camera_element @@ -351,20 +353,20 @@ class CreateDrawing(bpy.types.Operator): # Clear any local camera setup and force viewport to use scene camera for area in context.screen.areas: - if area.type == "VIEW_3D": + if area.type == 'VIEW_3D': for space in area.spaces: - if space.type == "VIEW_3D": + if space.type == 'VIEW_3D': # Clear local camera to ensure we use scene.camera space.use_local_camera = False space.camera = context.scene.camera - space.region_3d.view_perspective = "CAMERA" + space.region_3d.view_perspective = 'CAMERA' print(f"Set viewport camera to: {context.scene.camera.name}") break - + # Force complete scene update context.view_layer.update() context.evaluated_depsgraph_get() - + underlay_svg = self.generate_underlay(context) with profile("Generate linework"): @@ -3076,9 +3078,9 @@ class AddReference(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): filter_glob: bpy.props.StringProperty(default="*.svg", options={"HIDDEN"}) use_relative_path: bpy.props.BoolProperty(name="Use Relative Path", default=True) filename_ext = ".svg" - + files: bpy.props.CollectionProperty(type=bpy.types.OperatorFileListElement) - directory: bpy.props.StringProperty(subtype="DIR_PATH") + directory: bpy.props.StringProperty(subtype='DIR_PATH') def _execute(self, context): # Handle both single and multiple file selection @@ -3168,9 +3170,166 @@ class EditText(bpy.types.Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} def _execute(self, context): - core.edit_text(tool.Drawing, obj=context.active_object) + obj = context.active_object + props = tool.Drawing.get_text_props(obj) + + captured_apply_settings = { + "apply_font_size_to_all": props.apply_font_size_to_all, + "apply_newline_to_all": props.apply_newline_to_all, + "font_size": props.font_size, + "newline_at": props.newline_at, + "literals": [], + } + + for i, literal in enumerate(props.literals): + literal_data = { + "attributes": [ + (attr.string_value, attr.enum_value if attr.data_type == "enum" else attr.string_value) + for attr in literal.attributes + ], + "box_alignment": literal.box_alignment[:] if hasattr(literal, "box_alignment") else None, + "element_value_rows": [ + { + "category": row.category, + "element_key": row.element_key, + "formatted_value": row.formatted_value, + "separator": row.separator, + } + for row in literal.element_value_rows + ], + "product_used": literal.product_used.name if literal.product_used else None, + } + + if i < len(props.literal_apply_settings): + apply_settings = props.literal_apply_settings[i] + literal_data["apply_text_to_all"] = apply_settings.apply_text_to_all + literal_data["apply_path_to_all"] = apply_settings.apply_path_to_all + literal_data["apply_box_alignment_to_all"] = apply_settings.apply_box_alignment_to_all + else: + literal_data["apply_text_to_all"] = False + literal_data["apply_path_to_all"] = False + literal_data["apply_box_alignment_to_all"] = False + + captured_apply_settings["literals"].append(literal_data) + + obj["_bonsai_element_value_rows_backup"] = json.dumps(captured_apply_settings["literals"]) + + core.edit_text(tool.Drawing, obj=obj) + + self.apply_to_selected_objects_with_captured_data(context, obj, captured_apply_settings) + tool.Blender.update_viewport() + return {"FINISHED"} + + def apply_to_selected_objects(self, context, active_obj, active_props): + """Apply changes to other selected text objects based on toggle settings""" + selected_objects = [obj for obj in context.selected_objects if obj != active_obj] + + for obj in selected_objects: + element = tool.Ifc.get_entity(obj) + if not element or not tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]): + continue + + obj_props = tool.Drawing.get_text_props(obj) + needs_update = False + + if active_props.apply_font_size_to_all: + obj_props.font_size = active_props.font_size + needs_update = True + + if active_props.apply_newline_to_all: + obj_props.newline_at = active_props.newline_at + needs_update = True + + for i, active_literal in enumerate(active_props.literals): + if i >= len(obj_props.literals): + continue + + obj_props.ensure_literal_apply_settings(len(obj_props.literals)) + obj_literal = obj_props.literals[i] + + if i < len(active_props.literal_apply_settings): + active_settings = active_props.literal_apply_settings[i] + + if active_settings.apply_text_to_all: + if len(active_literal.attributes) > 0 and len(obj_literal.attributes) > 0: + obj_literal.attributes[0].string_value = active_literal.attributes[0].string_value + needs_update = True + + if active_settings.apply_path_to_all: + if len(active_literal.attributes) > 1 and len(obj_literal.attributes) > 1: + if ( + active_literal.attributes[1].data_type == "enum" + and obj_literal.attributes[1].data_type == "enum" + ): + obj_literal.attributes[1].enum_value = active_literal.attributes[1].enum_value + else: + obj_literal.attributes[1].string_value = active_literal.attributes[1].string_value + needs_update = True + + if active_settings.apply_box_alignment_to_all: + obj_literal.box_alignment = active_literal.box_alignment[:] + needs_update = True + + if needs_update: + core.edit_text(tool.Drawing, obj=obj) + + def apply_to_selected_objects_with_captured_data(self, context, active_obj, captured_data): + """Apply changes to other selected text objects using captured apply settings""" + selected_objects = [obj for obj in context.selected_objects if obj != active_obj] + + for obj in selected_objects: + element = tool.Ifc.get_entity(obj) + if not element: + continue + if not tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]): + continue + + obj_props = tool.Drawing.get_text_props(obj) + + if len(obj_props.literals) == 0: + core.enable_editing_text(tool.Drawing, obj=obj) + obj_props.ensure_literal_apply_settings(len(obj_props.literals)) + + needs_update = False + + if captured_data["apply_font_size_to_all"]: + obj_props.font_size = captured_data["font_size"] + needs_update = True + + if captured_data["apply_newline_to_all"]: + obj_props.newline_at = captured_data["newline_at"] + needs_update = True + + for i, captured_literal in enumerate(captured_data["literals"]): + if i >= len(obj_props.literals): + continue + + obj_literal = obj_props.literals[i] + + if captured_literal["apply_text_to_all"]: + if len(captured_literal["attributes"]) > 0 and len(obj_literal.attributes) > 0: + new_value = captured_literal["attributes"][0][0] # [0] = string_value + obj_literal.attributes[0].string_value = new_value + needs_update = True + + if captured_literal["apply_path_to_all"]: + if len(captured_literal["attributes"]) > 1 and len(obj_literal.attributes) > 1: + new_value = captured_literal["attributes"][1][1] # [1] = enum_value or string_value + if obj_literal.attributes[1].data_type == "enum": + obj_literal.attributes[1].enum_value = new_value + else: + obj_literal.attributes[1].string_value = new_value + needs_update = True + + if captured_literal["apply_box_alignment_to_all"] and captured_literal["box_alignment"]: + obj_literal.box_alignment = captured_literal["box_alignment"] + needs_update = True + + if needs_update: + core.edit_text(tool.Drawing, obj=obj) + class EnableEditingText(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_text" @@ -3180,7 +3339,46 @@ class EnableEditingText(bpy.types.Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} def _execute(self, context): - core.enable_editing_text(tool.Drawing, obj=context.active_object) + obj = context.active_object + props = tool.Drawing.get_text_props(obj) + core.enable_editing_text(tool.Drawing, obj=obj) + + props.ensure_literal_apply_settings(len(props.literals)) + + text_element = tool.Ifc.get_entity(obj) + assigned_product_entity = tool.Drawing.get_assigned_product(text_element) if text_element else None + assigned_product_obj = tool.Ifc.get_object(assigned_product_entity) if assigned_product_entity else None + + if "_bonsai_element_value_rows_backup" in obj: + try: + literals_backup = json.loads(obj["_bonsai_element_value_rows_backup"]) + for i, literal_backup in enumerate(literals_backup): + if i < len(props.literals): + literal_props = props.literals[i] + + if assigned_product_obj: + literal_props.product_used = assigned_product_obj + elif "product_used" in literal_backup and literal_backup["product_used"]: + product_name = literal_backup["product_used"] + if product_name in bpy.data.objects: + literal_props.product_used = bpy.data.objects[product_name] + + literal_props.element_value_rows.clear() + if "element_value_rows" in literal_backup: + for row_data in literal_backup["element_value_rows"]: + new_row = literal_props.element_value_rows.add() + new_row.category = row_data.get("category", "") + new_row.element_key = row_data.get("element_key", "") + new_row.formatted_value = row_data.get("formatted_value", "") + new_row.separator = row_data.get("separator", "") + except (json.JSONDecodeError, KeyError) as e: + print(f"Failed to restore element_value_rows: {e}") + else: + if assigned_product_obj: + for literal_props in props.literals: + literal_props.product_used = assigned_product_obj + + return {"FINISHED"} class DisableEditingText(bpy.types.Operator, tool.Ifc.Operator): @@ -3235,6 +3433,9 @@ class AddTextLiteral(bpy.types.Operator): box_alignment_mask = [False] * 9 box_alignment_mask[6] = True # bottom_left box_alignment literal_props.box_alignment = box_alignment_mask + + props.ensure_literal_apply_settings(len(props.literals)) + return {"FINISHED"} @@ -3253,6 +3454,9 @@ class RemoveTextLiteral(bpy.types.Operator): props = tool.Drawing.get_text_props(obj) props.literals.remove(self.literal_prop_id) tool.Blender.update_viewport() + + props.ensure_literal_apply_settings(len(props.literals)) + return {"FINISHED"} @@ -3687,12 +3891,8 @@ class EnableEditingElementFilter(bpy.types.Operator, tool.Ifc.Operator): if query := ifcopenshell.util.element.get_pset(element, "EPset_Drawing", self.filter_mode.title()): filter_groups = tool.Search.get_filter_groups(f"drawing_{self.filter_mode.lower()}") try: - data = json.loads(query) - if isinstance(data, dict) and "filter_structure" in data: - tool.Search.import_filter_structure(data["filter_structure"], filter_groups) - else: - tool.Search.import_filter_query(query, filter_groups) - except Exception: + tool.Search.import_filter_query(query, filter_groups) + except: pass @@ -3712,41 +3912,12 @@ class EditElementFilter(bpy.types.Operator, tool.Ifc.Operator): assert element pset = tool.Pset.get_element_pset(element, "EPset_Drawing") assert pset - if self.filter_mode == "INCLUDE": - filter_groups = props.include_filter_groups + query = tool.Search.export_filter_query(props.include_filter_groups) or None + ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Include": query}) elif self.filter_mode == "EXCLUDE": - filter_groups = props.exclude_filter_groups - else: - return - - query = tool.Search.export_filter_query(filter_groups) or None - - if tool.Blender.get_addon_preferences().chain_filter_with_set_operations and query: - filter_structure = [] - for filter_group in filter_groups: - group_data = [] - for ifc_filter in filter_group.filters: - filter_data = { - "type": ifc_filter.type, - "name": ifc_filter.name, - "value": ifc_filter.value, - "pset": ifc_filter.pset, - "comparison": ifc_filter.comparison, - "filter_mode": ifc_filter.filter_mode, - } - group_data.append(filter_data) - filter_structure.append(group_data) - - value = json.dumps({"type": "BBIM_Search", "query": query, "filter_structure": filter_structure}) - else: - value = query - - if self.filter_mode == "INCLUDE": - ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Include": value}) - elif self.filter_mode == "EXCLUDE": - ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Exclude": value}) - + query = tool.Search.export_filter_query(props.exclude_filter_groups) or None + ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Exclude": query}) props.filter_mode = "NONE" bpy.ops.bim.activate_drawing(drawing=element.id(), should_view_from_camera=False) @@ -4080,60 +4251,1316 @@ class ActivateDrawingByAnnotation(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Activate Drawing" bl_description = "Activate the drawing corresponding to the selected annotation" bl_options = {"REGISTER", "UNDO"} - + @classmethod def poll(cls, context): # Check if an annotation object is selected if not context.selected_objects: cls.poll_message_set("No object selected") return False - + active_obj = context.active_object if not active_obj: cls.poll_message_set("No active object") return False - + element = tool.Ifc.get_entity(active_obj) if not element: cls.poll_message_set("Selected object is not an IFC element") return False - + # Check if it's an IfcAnnotation with ObjectType = "SECTION" or "ELEVATION" if not element.is_a("IfcAnnotation") or element.ObjectType not in ["SECTION", "ELEVATION"]: cls.poll_message_set("Selected object is not a drawing annotation") return False - + return True def _execute(self, context): active_obj = context.active_object element = tool.Ifc.get_entity(active_obj) - + if not element or not element.is_a("IfcAnnotation") or element.ObjectType not in ["SECTION", "ELEVATION"]: self.report({"ERROR"}, "Selected object is not a drawing annotation") return {"CANCELLED"} - + # Find the drawing/camera element that this annotation references drawing_element = self.find_drawing_from_annotation(element) - + if not drawing_element: self.report({"ERROR"}, "Could not find drawing element for this annotation") return {"CANCELLED"} - + # Use the existing ActivateDrawing operator with the drawing element's ID bpy.ops.bim.activate_drawing(drawing=drawing_element.id()) - + return {"FINISHED"} - + def find_drawing_from_annotation(self, annotation_element): """Find the drawing/camera element that this annotation references.""" ifc = tool.Ifc.get() - + # Check IfcRelAssignsToProduct relationships for rel in ifc.get_inverse(annotation_element): if rel.is_a("IfcRelAssignsToProduct") and rel.RelatingProduct: if rel.RelatingProduct.is_a("IfcAnnotation"): # Found the drawing element! return rel.RelatingProduct - + + return None + + +class SelectSimilarTextLiteralValue(bpy.types.Operator): + bl_idname = "bim.select_similar_text_literal_value" + bl_label = "" + bl_description = "Click to select all text annotations with this value\n\nSHIFT+CLICK to remove from selection" + bl_options = {"REGISTER", "UNDO"} + + literal_value: bpy.props.StringProperty() + literal_index: bpy.props.IntProperty(default=0) + attribute_type: bpy.props.StringProperty(default="text") + display_text: bpy.props.StringProperty() + remove_from_selection: bpy.props.BoolProperty(default=False, options={"SKIP_SAVE"}) + + def invoke(self, context, event): + if hasattr(event, "type") and event.type == "LEFTMOUSE": + self.remove_from_selection = event.shift + elif hasattr(event, "shift"): + self.remove_from_selection = event.shift + + return self.execute(context) + + def execute(self, context): + if not self.literal_value and self.attribute_type in ["text", "path", "box_alignment", "font_size"]: + return {"CANCELLED"} + + editing_status = {} + for obj in context.visible_objects: + obj_props = tool.Drawing.get_text_props(obj) + editing_status[obj] = obj_props.is_editing if hasattr(obj_props, "is_editing") else False + + count = 0 + for obj in context.visible_objects: + element = tool.Ifc.get_entity(obj) + if not element or not tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]): + continue + + obj_props = tool.Drawing.get_text_props(obj) + should_select = False + + if self.attribute_type in ["text", "path", "box_alignment", "font_size", "literal", "resolved_text"]: + was_editing = obj_props.is_editing if hasattr(obj_props, "is_editing") else False + if not was_editing: + core.enable_editing_text(tool.Drawing, obj=obj) + + if self.attribute_type == "font_size": + should_select = str(obj_props.font_size) == self.literal_value + elif self.attribute_type == "literal": + for idx, literal in enumerate(obj_props.literals): + if len(literal.attributes) > 0: + if literal.attributes[0].string_value == self.literal_value: + should_select = True + break + elif self.attribute_type == "resolved_text": + for idx, literal in enumerate(obj_props.literals): + if len(literal.attributes) > 0: + raw_value = literal.attributes[0].string_value + assigned_element = tool.Drawing.get_assigned_product(element) or element + resolved_value = tool.Drawing.replace_text_literal_variables(raw_value, assigned_element) + if resolved_value == self.literal_value: + should_select = True + break + else: + for idx, literal in enumerate(obj_props.literals): + if self.attribute_type == "text" and len(literal.attributes) > 0: + raw_value = literal.attributes[0].string_value + assigned_element = tool.Drawing.get_assigned_product(element) or element + resolved_value = tool.Drawing.replace_text_literal_variables(raw_value, assigned_element) + if resolved_value == self.literal_value: + should_select = True + break + elif self.attribute_type == "path" and len(literal.attributes) > 1: + attr = literal.attributes[1] + if attr.data_type == "enum": + if attr.enum_value == self.literal_value: + should_select = True + break + else: + if attr.string_value == self.literal_value: + should_select = True + break + elif self.attribute_type == "box_alignment": + box_alignment_attr = next( + (attr for attr in literal.attributes if attr.name == "BoxAlignment"), None + ) + if box_alignment_attr and box_alignment_attr.string_value == self.literal_value: + should_select = True + break + + if should_select: + obj.select_set(not self.remove_from_selection) + count += 1 + + for obj, was_editing in editing_status.items(): + obj_props = tool.Drawing.get_text_props(obj) + if hasattr(obj_props, "is_editing"): + if was_editing and not obj_props.is_editing: + core.enable_editing_text(tool.Drawing, obj=obj) + elif not was_editing and obj_props.is_editing: + core.disable_editing_text(tool.Drawing, obj=obj) + + if self.attribute_type in ["text", "path", "box_alignment"]: + result = f'literal[{self.literal_index}].{self.attribute_type} = "{self.literal_value}"' + else: + result = f'{self.attribute_type} = "{self.literal_value}"' + + verb = "Deselected" if self.remove_from_selection else "Selected" + self.report( + {"INFO"}, + f"{verb} {count} objects with {self.attribute_type} '{self.literal_value}'.", + ) + + return {"FINISHED"} + + +class FilterSelectedObjectsIfIntersectedByCamera(bpy.types.Operator): + bl_idname = "bim.filter_selected_objects_if_intersected_by_camera" + bl_label = "Filter Selected Objects If Intersected by Camera" + bl_options = {"REGISTER", "UNDO"} + bl_description = "Deselect objects that are not intersected by the active camera view" + + @classmethod + def poll(cls, context): + return context.scene.camera is not None and len(context.selected_objects) > 0 + + def execute(self, context): + self.filter_selected_objects_if_intersected_by_camera(context) + return {"FINISHED"} + + def filter_selected_objects_if_intersected_by_camera(self, context: bpy.types.Context) -> None: + camera_obj = context.scene.camera + if not camera_obj: + return + + camera = camera_obj.data + if not isinstance(camera, bpy.types.Camera): + return + + cam_matrix = camera_obj.matrix_world + cam_origin = cam_matrix.translation + cam_direction = cam_matrix.to_quaternion() @ Vector((0.0, 0.0, -1.0)) + plane_normal = cam_direction.normalized() + plane_point = cam_origin + + def point_plane_distance(point): + return (point - plane_point).dot(plane_normal) + + selected_objects = [obj for obj in context.selected_objects if obj != camera_obj] + + deselected = 0 + for obj in selected_objects: + bbox_world = [obj.matrix_world @ Vector(corner) for corner in obj.bound_box] + distances = [point_plane_distance(p) for p in bbox_world] + min_d = min(distances) + max_d = max(distances) + + intersects = (min_d <= 0.0 <= max_d) or (max_d <= 0.0 <= min_d) + + if not intersects: + obj.select_set(False) + deselected += 1 + + remaining_selected = len([obj for obj in context.selected_objects if obj != camera_obj]) + self.report( + {"INFO"}, f"Filtered to {remaining_selected} object(s) intersecting camera plane (deselected {deselected})" + ) + return {"FINISHED"} + + +class SelectElementValues(bpy.types.Operator): + bl_idname = "bim.select_element_values" + bl_label = "Select Element Values" + bl_description = "Select a property or quantity from the assigned product to insert into the text literal" + bl_options = {"REGISTER", "UNDO"} + + literal_prop_id: bpy.props.IntProperty() + expanded_category: bpy.props.StringProperty(default="Basic") + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self, width=600) + + def draw(self, context): + obj = context.active_object + element = tool.Ifc.get_entity(obj) + assigned_product = tool.Drawing.get_assigned_product(element) + if not assigned_product: + self.layout.label(text="No product assigned to this annotation", icon="ERROR") + return + + if not ElementValuesData.is_loaded: + ElementValuesData.load() + available_keys = ElementValuesData.get_available_element_value_keys(assigned_product) + + for category_name, keys in available_keys.items(): + if not keys: + continue + + box = self.layout.box() + box.label(text=category_name, icon=self.get_category_icon(category_name)) + + for key, description in keys: + row = box.row() + row.label(text=description) + + def execute(self, context): + return {"FINISHED"} + + def get_category_icon(self, category_name): + icons = { + "Basic": "OBJECT_DATA", + "Attributes": "PROPERTIES", + "Property Sets": "PROPERTIES", + "Quantity Sets": "SNAP_VOLUME", + "Type": "OUTLINER_OB_MESH", + "Spatial": "HOME", + "Parent": "FILE_PARENT", + "Classification": "BOOKMARKS", + "Groups": "GROUP", + "Systems": "SYSTEM", + "Zones": "MESH_CIRCLE", + "Material": "MATERIAL", + "Coordinates": "EMPTY_ARROWS", + } + return icons.get(category_name, "DOT") + + +class ToggleElementValuesPanel(bpy.types.Operator): + bl_idname = "bim.toggle_element_values_panel" + bl_label = "Toggle Element Values Panel" + bl_options = {"REGISTER", "UNDO"} + + literal_prop_id: bpy.props.IntProperty() + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + if self.literal_prop_id >= len(props.literals): + return {"CANCELLED"} + + literal_props = props.literals[self.literal_prop_id] + + current_state = getattr(literal_props, "show_element_values", False) + literal_props.show_element_values = not current_state + + return {"FINISHED"} + + +class ToggleElementValuesCategory(bpy.types.Operator): + bl_idname = "bim.toggle_element_values_category" + bl_label = "Toggle Element Values Category" + bl_options = {"REGISTER", "UNDO"} + + category_name: bpy.props.StringProperty() + literal_prop_id: bpy.props.IntProperty() + is_currently_expanded: bpy.props.BoolProperty() + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + if self.literal_prop_id >= len(props.literals): + return {"CANCELLED"} + + literal_props = props.literals[self.literal_prop_id] + + if self.is_currently_expanded: + literal_props.expanded_category = "" + else: + literal_props.expanded_category = self.category_name + + return {"FINISHED"} + + +class InsertFormattedLiteralPopup(bpy.types.Operator): + bl_idname = "bim.insert_formatted_literal_popup" + bl_label = "Insert Formatted Element Value" + bl_description = "Insert element value with formatting options" + bl_options = {"REGISTER", "UNDO"} + + literal_prop_id: bpy.props.IntProperty() + element_value_key: bpy.props.StringProperty() + value_number: bpy.props.IntProperty() + + formatting_type: bpy.props.EnumProperty( + name="Formatting", + items=[ + ("NONE", "No Formatting", "Insert value as-is"), + ("UPPER", "Uppercase", "Convert to uppercase"), + ("LOWER", "Lowercase", "Convert to lowercase"), + ("TITLE", "Title Case", "Convert to title case"), + ("ROUND", "Round Number", "Round to specified precision"), + ("INT", "Integer", "Truncate decimal part"), + ("NUMBER", "Format Number", "Format with separators"), + ("METRIC_LENGTH", "Metric Length", "Format as metric length"), + ("IMPERIAL_LENGTH", "Imperial Length", "Format as imperial length"), + ("CUSTOM", "Custom Expression", "Create custom expression with functions"), + ], + default="NONE", + ) + + round_precision: bpy.props.StringProperty( + name="Precision", description="Rounding precision (e.g. 0.1, 0.01, 0.001, 1, 10, 100)", default="0.01" + ) + + decimal_separator: bpy.props.StringProperty( + name="Decimal Separator", description="Decimal separator character", default=".", maxlen=1 + ) + + thousands_separator: bpy.props.StringProperty( + name="Thousands Separator", description="Thousands separator character", default=",", maxlen=1 + ) + + metric_decimals: bpy.props.IntProperty( + name="Decimal Places", description="Number of decimal places to show", default=2, min=0, max=10 + ) + + metric_precision: bpy.props.StringProperty( + name="Metric Precision", + description="Rounding precision for metric length (e.g. 0.1, 0.01, 0.001)", + default="0.01", + ) + + imperial_precision: bpy.props.IntProperty( + name="Fraction Precision", description="Imperial fraction precision (1/N)", default=4, min=1, max=64 + ) + + imperial_input_unit: bpy.props.EnumProperty( + name="Input Unit", + items=[ + ("foot", "Feet", "Input value is in feet"), + ("inch", "Inches", "Input value is in inches"), + ], + default="foot", + ) + + imperial_output_unit: bpy.props.EnumProperty( + name="Output Format", + items=[ + ("foot", "Feet and Inches", "Display as feet and inches"), + ("inch", "Inches Only", "Display as inches only"), + ], + default="foot", + ) + + custom_expression: bpy.props.StringProperty( + name="Custom Expression", + description=( + "Custom expression using functions like concat(), upper(), round(), etc.\n" + "Use {{value}} as placeholder for the selected element value.\n" + "Examples:\n" + '- concat("Name: ", {{value}})\n' + '- upper(concat("Type: ", {{value}}))' + ), + default='concat({{value}}, " - additional text")', + ) + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self, width=450) + + def draw(self, context): + layout = self.layout + + box = layout.box() + box.label(text=f"Element Value: {self.element_value_key}", icon="PROPERTIES") + + layout.prop(self, "formatting_type") + + if self.formatting_type == "ROUND": + layout.prop(self, "round_precision") + elif self.formatting_type == "NUMBER": + col = layout.column() + col.prop(self, "decimal_separator") + col.prop(self, "thousands_separator") + elif self.formatting_type == "METRIC_LENGTH": + col = layout.column() + col.prop(self, "metric_precision") + col.prop(self, "metric_decimals") + elif self.formatting_type == "IMPERIAL_LENGTH": + col = layout.column() + col.prop(self, "imperial_precision") + col.prop(self, "imperial_input_unit") + col.prop(self, "imperial_output_unit") + elif self.formatting_type == "CUSTOM": + col = layout.column() + col.prop(self, "custom_expression", text="") + + obj = bpy.context.active_object + if obj: + element = tool.Ifc.get_entity(obj) + + props = tool.Drawing.get_text_props(obj) + product = None + + if props.literals: + for literal_props in props.literals: + if hasattr(literal_props, "product_used") and literal_props.product_used: + product = tool.Ifc.get_entity(literal_props.product_used) + break + + if not product: + product = tool.Drawing.get_assigned_product(element) + + if not product: + product = element + + if product: + all_categories = ElementValuesData.get_available_element_value_keys(product) + + available_keys = [] + for cat_name, cat_keys in all_categories.items(): + for cat_key, cat_desc in cat_keys: + available_keys.append( + ( + cat_key, + f"[{cat_name}] {cat_desc.split(': ', 1)[-1] if ': ' in cat_desc else cat_desc}", + ) + ) + + if available_keys: + help_box = col.box() + help_box.scale_y = 0.7 + help_box.label(text="Available attributes:", icon="INFO") + + for i, (key, desc) in enumerate(available_keys[:5]): + help_box.label(text="{{value{}}} = {} ({})".format(i + 1, key, desc)) + + if len(available_keys) > 5: + help_box.label(text=f"... and {len(available_keys) - 5} more attributes") + + help_box = col.box() + help_box.scale_y = 0.8 + help_box.label(text="Available functions:", icon="INFO") + help_box.label(text="• concat(text1, text2, ...) - combine values") + help_box.label(text="• upper(value) - uppercase") + help_box.label(text="• lower(value) - lowercase") + help_box.label(text="• round(value, precision) - round number") + help_box.label(text="• Use {{value}} for current element value") + + preview_box = layout.box() + preview_box.label(text="Preview:", icon="PROPERTIES") + formatted_syntax = self._generate_formatted_syntax() + + preview_text = formatted_syntax + if len(preview_text) > 60: + words = preview_text.split() + lines = [] + current_line = "" + for word in words: + if len(current_line + " " + word) > 60 and current_line: + lines.append(current_line) + current_line = word + else: + current_line = (current_line + " " + word).strip() + if current_line: + lines.append(current_line) + + for line in lines: + preview_box.label(text=line) + else: + preview_box.label(text=preview_text) + + def _get_all_available_keys(self, element): + """Get all available element value keys in a flat list with their descriptions""" + available_keys = [] + + all_categories = ElementValuesData.get_available_element_value_keys(element) + + for category_name, keys in all_categories.items(): + for key, description in keys: + available_keys.append( + (key, f"[{category_name}] {description.split(': ', 1)[-1] if ': ' in description else description}") + ) + + return available_keys + + def _generate_formatted_syntax(self) -> str: + """Generate the formatted selector syntax based on current settings""" + base_value = f"{{{{{self.element_value_key}}}}}" + + if self.formatting_type == "NONE": + return base_value + elif self.formatting_type == "UPPER": + return f"``upper({base_value})`` " + elif self.formatting_type == "LOWER": + return f"``lower({base_value})`` " + elif self.formatting_type == "TITLE": + return f"``title({base_value})`` " + elif self.formatting_type == "ROUND": + return f"``round({base_value}, {self.round_precision})`` " + elif self.formatting_type == "INT": + return f"``int({base_value})`` " + elif self.formatting_type == "NUMBER": + return f"``number({base_value}, {self.decimal_separator}, {self.thousands_separator})`` " + elif self.formatting_type == "METRIC_LENGTH": + return f"``metric_length({base_value}, {self.metric_precision}, {self.metric_decimals})`` " + elif self.formatting_type == "IMPERIAL_LENGTH": + return f'``imperial_length({base_value}, {self.imperial_precision}, "{self.imperial_input_unit}", "{self.imperial_output_unit}")`` ' + elif self.formatting_type == "CUSTOM": + custom_expr = self.custom_expression.replace("{{value}}", base_value) + return f"``{custom_expr}``" + + return base_value + + def execute(self, context): + obj = context.active_object + assert obj + props = tool.Drawing.get_text_props(obj) + literal_props = props.literals[self.literal_prop_id] + + formatted_syntax = self._generate_formatted_syntax() + + for attr in literal_props.attributes: + if attr.name == "Literal": + current_text = attr.string_value or "" + + if current_text: + attr.string_value = f"{current_text} {formatted_syntax}" + else: + attr.string_value = formatted_syntax + break + + tool.Blender.update_viewport() + return {"FINISHED"} + + +class ShowCategoryHelp(bpy.types.Operator): + bl_idname = "bim.show_category_help" + bl_label = "Category Help" + bl_description = "Show help for this element value category" + bl_options = {"REGISTER"} + + category_name: bpy.props.StringProperty() + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self, width=600) + + def draw(self, context): + layout = self.layout + + category_help = { + "Basic": { + "title": "BASIC KEYS", + "icon": "DOT", + "items": [ + ("id", "IFC entity ID", "{{id}} → '12345'"), + ("class", "IFC class name", "{{class}} → 'IfcWall'"), + ("predefined_type", "Predefined type", "{{predefined_type}} → 'SOLIDWALL'"), + ], + }, + "Attributes": { + "title": "ATTRIBUTES", + "icon": "PROPERTIES", + "items": [ + ("Name", "Element name", "{{Name}} → 'Wall-001'"), + ("Description", "Element description", "{{Description}} → 'Exterior wall'"), + ("Tag", "Element tag", "{{Tag}} → 'W-01'"), + ("ObjectType", "Object type", "{{ObjectType}} → 'Load Bearing'"), + ], + "note": "All IFC attributes are accessible by their name", + }, + "Property Sets": { + "title": "PROPERTY SETS", + "icon": "ALIGN_JUSTIFY", + "items": [ + ("Pset_*.PropertyName", "Property value", "{{Pset_WallCommon.FireRating}} → 'REI 120'"), + ("Pset_*.IsExternal", "Boolean property", "{{Pset_WallCommon.IsExternal}} → 'True'"), + ], + "note": "Access any property from any property set using Pset_Name.PropertyName syntax", + }, + "Quantity Sets": { + "title": "QUANTITY SETS", + "icon": "ALIGN_JUSTIFY", + "items": [ + ("Qto_*.QuantityName", "Quantity value", "{{Qto_WallBaseQuantities.NetArea}} → '45.5'"), + ("Qto_*.NetVolume", "Volume quantity", "{{Qto_WallBaseQuantities.NetVolume}} → '9.1'"), + ], + "note": "Access any quantity from quantity sets using Qto_Name.QuantityName syntax", + }, + "Type": { + "title": "TYPE INFORMATION", + "icon": "OUTLINER_OB_MESH", + "items": [ + ("type.Name", "Type element name", "{{type.Name}} → 'WT-200mm-Concrete'"), + ("types.count", "Number of instances of this type", "{{types.count}} → '15'"), + ("occurrences.count", "Same as types.count", "{{occurrences.count}} → '15'"), + ], + "example": "Type: {{type.Name}} ({{types.count}} instances)", + }, + "Spatial": { + "title": "SPATIAL HIERARCHY", + "icon": "HOME", + "items": [ + ("container.Name", "Immediate spatial container", "{{container.Name}} → 'Level 2'"), + ("space.Name", "Containing space", "{{space.Name}} → 'Office 205'"), + ("storey.Name", "Building storey", "{{storey.Name}} → 'Level 2'"), + ("building.Name", "Building", "{{building.Name}} → 'Building A'"), + ("site.Name", "Site", "{{site.Name}} → 'Main Campus'"), + ], + "example": "{{building.Name}} / {{storey.Name}} / {{space.Name}}", + }, + "Parent": { + "title": "PARENT (AGGREGATION)", + "icon": "OUTLINER_DATA_GP_LAYER", + "items": [ + ("parent.name", "Aggregate parent element", "{{parent.name}} → 'Curtain Wall-01'"), + ], + "note": "Used for aggregated elements like mullions in curtain walls", + }, + "Material": { + "title": "MATERIALS", + "icon": "MATERIAL", + "items": [ + ("material.Name", "Material name", "{{material.Name}} → 'Concrete'"), + ("materials.count", "Number of layers/profiles", "{{materials.count}} → '3'"), + ( + "material.item.Material.Name.0", + "First layer material", + "{{material.item.Material.Name.0}} → 'Brick'", + ), + ( + "material.item.Material.Name.1", + "Second layer material", + "{{material.item.Material.Name.1}} → 'Insulation'", + ), + ("material.item.0.LayerThickness", "Layer thickness", "{{material.item.0.LayerThickness}} → '0.1'"), + ], + "example": "{{materials.count}} layers: {{material.item.Material.Name.0}}", + }, + "Styles": { + "title": "PRESENTATION STYLES", + "icon": "COLOR", + "items": [ + ("styles.count", "Number of styles", "{{styles.count}} → '1'"), + ("styles.0.Name", "Style name (indexed)", "{{styles.0.Name}} → 'Red'"), + ("styles.0.Color", "RGB color value", "{{styles.0.Color}} → 'RGB(1.00, 0.00, 0.00)'"), + ], + }, + "Profiles": { + "title": "PROFILES", + "icon": "OUTLINER_DATA_CURVES", + "items": [ + ("profiles.count", "Number of profiles", "{{profiles.count}} → '2'"), + ("profiles.0.ProfileName", "Profile name (indexed)", "{{profiles.0.ProfileName}} → 'HEA200'"), + ("profiles.0.ProfileType", "Profile type (indexed)", "{{profiles.0.ProfileType}} → 'AREA'"), + ("profile.ProfileName", "Single swept profile", "{{profile.ProfileName}} → 'Rectangle'"), + ], + }, + "Groups": { + "title": "GROUPS", + "icon": "OUTLINER_OB_GROUP_INSTANCE", + "items": [ + ("group.Name", "Group name", "{{group.Name}} → 'Phase 1'"), + ("groups.count", "Number of group assignments", "{{groups.count}} → '2'"), + ], + }, + "Systems": { + "title": "SYSTEMS", + "icon": "OUTLINER_OB_GROUP_INSTANCE", + "items": [ + ("system.Name", "System name", "{{system.Name}} → 'HVAC-01'"), + ("systems.count", "Number of system assignments", "{{systems.count}} → '1'"), + ], + }, + "Zones": { + "title": "ZONES", + "icon": "OUTLINER_OB_GROUP_INSTANCE", + "items": [ + ("zone.Name", "Zone name", "{{zone.Name}} → 'Fire Zone A'"), + ("zones.count", "Number of zone assignments", "{{zones.count}} → '1'"), + ], + }, + "Classification": { + "title": "CLASSIFICATION", + "icon": "PRESET", + "items": [ + ("classification.0.Name", "Classification name (indexed)", "{{classification.0.Name}} → 'Walls'"), + ( + "classification.0.Identification", + "Classification code (indexed)", + "{{classification.0.Identification}} → 'E20'", + ), + ("classification.count", "Number of classification references", "{{classification.count}} → '2'"), + ], + }, + "Coordinates": { + "title": "COORDINATES", + "icon": "ORIENTATION_VIEW", + "items": [ + ("x", "Local X coordinate", "{{x}} → '10.5'"), + ("y", "Local Y coordinate", "{{y}} → '5.2'"), + ("z", "Local Z coordinate", "{{z}} → '3.0'"), + ("easting", "Map easting coordinate", "{{easting}} → '500123.45'"), + ("northing", "Map northing coordinate", "{{northing}} → '6750234.56'"), + ("elevation", "Map elevation", "{{elevation}} → '123.45'"), + ], + }, + } + + if self.category_name in category_help: + info = category_help[self.category_name] + layout.label(text=info["title"], icon=info["icon"]) + + box = layout.box() + for key, desc, example in info["items"]: + col = box.column(align=True) + col.scale_y = 0.85 + col.label(text=f"{key} - {desc}") + col.label(text=f" {example}") + box.separator(factor=0.3) + + if "note" in info: + note_box = layout.box() + note_box.label(text="Note:", icon="INFO") + note_box.label(text=info["note"]) + + if "example" in info: + ex_box = layout.box() + ex_box.label(text="Example:", icon="SCRIPTPLUGINS") + ex_box.label(text=info["example"]) + else: + layout.label(text=f"No help available for '{self.category_name}'") + + def execute(self, context): + return {"FINISHED"} + + +class AddElementValueRow(bpy.types.Operator): + bl_idname = "bim.add_element_value_row" + bl_label = "Add Element" + bl_description = "Add a new element value row" + bl_options = {"REGISTER", "UNDO"} + + literal_prop_id: bpy.props.IntProperty() + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + if self.literal_prop_id >= len(props.literals): + return {"CANCELLED"} + + literal_props = props.literals[self.literal_prop_id] + new_row = literal_props.element_value_rows.add() + new_row.category = literal_props.category_for_adding + new_row.element_key = "" + new_row.formatted_value = "" + + if len(literal_props.element_value_rows) == 1: + new_row.separator = "" + else: + new_row.separator = " - " + + return {"FINISHED"} + + +class RemoveElementValueRow(bpy.types.Operator): + bl_idname = "bim.remove_element_value_row" + bl_label = "Remove Element Value Row" + bl_description = "Remove this element value row" + bl_options = {"REGISTER", "UNDO"} + + literal_prop_id: bpy.props.IntProperty() + row_index: bpy.props.IntProperty() + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + if self.literal_prop_id >= len(props.literals): + return {"CANCELLED"} + + literal_props = props.literals[self.literal_prop_id] + if self.row_index < len(literal_props.element_value_rows): + literal_props.element_value_rows.remove(self.row_index) + + return {"FINISHED"} + + +class ElementValueSuggestionsPopup(bpy.types.Operator): + bl_idname = "bim.element_value_suggestions_popup" + bl_label = "Element Value Suggestions" + bl_description = "Show suggestions for element values in the selected category" + bl_options = {"REGISTER", "UNDO"} + + literal_prop_id: bpy.props.IntProperty() + row_index: bpy.props.IntProperty() + category: bpy.props.StringProperty() + search_query: bpy.props.StringProperty(name="Search", description="Search for element values") + + collection_keys: bpy.props.CollectionProperty(type=StrProperty) + collection_descriptions: bpy.props.CollectionProperty(type=StrProperty) + + selected_key: bpy.props.StringProperty() + + def invoke(self, context, event): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + if self.literal_prop_id >= len(props.literals): + return {"CANCELLED"} + + literal_props = props.literals[self.literal_prop_id] + current_product = get_current_product_for_element_values(obj, literal_props) + + if not current_product: + self.report({"ERROR"}, "No product selected. Use eyedropper to select an object.") + return {"CANCELLED"} + + element = tool.Ifc.get_entity(current_product) + if not element: + self.report({"ERROR"}, "Selected object has no IFC data") + return {"CANCELLED"} + + if not ElementValuesData.is_loaded: + ElementValuesData.load() + + available_keys = ElementValuesData.get_available_element_value_keys(element) + + if self.category not in available_keys: + self.report({"ERROR"}, f"Category '{self.category}' not found") + return {"CANCELLED"} + + keys = available_keys[self.category] + if not keys: + self.report({"INFO"}, f"No values available for category '{self.category}'") + return {"CANCELLED"} + + self.collection_keys.clear() + self.collection_descriptions.clear() + for key, description in keys: + self.collection_keys.add().name = key + self.collection_descriptions.add().name = description + + return context.window_manager.invoke_props_dialog(self, width=500) + + def draw(self, context): + layout = self.layout + + layout.prop_search(self, "selected_key", self, "collection_descriptions", text="Value") + + def execute(self, context): + if not self.selected_key: + return {"CANCELLED"} + + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + if self.literal_prop_id >= len(props.literals): + return {"CANCELLED"} + + literal_props = props.literals[self.literal_prop_id] + if self.row_index >= len(literal_props.element_value_rows): + return {"CANCELLED"} + + value_row = literal_props.element_value_rows[self.row_index] + + for idx, desc_item in enumerate(self.collection_descriptions): + if desc_item.name == self.selected_key: + actual_key = self.collection_keys[idx].name + value_row.element_key = actual_key + value_row.formatted_value = f"{{{{{actual_key}}}}}" + break + + return {"FINISHED"} + + +class FormatElementValueRow(bpy.types.Operator): + bl_idname = "bim.format_element_value_row" + bl_label = "Format Element Value" + bl_description = "Format element value with functions" + bl_options = {"REGISTER", "UNDO"} + + literal_prop_id: bpy.props.IntProperty() + row_index: bpy.props.IntProperty() + + formatting_type: bpy.props.EnumProperty( + name="Formatting", + items=[ + ("NONE", "No Formatting", "Insert value as-is"), + ("UPPER", "Uppercase", "Convert to uppercase"), + ("LOWER", "Lowercase", "Convert to lowercase"), + ("TITLE", "Title Case", "Convert to title case"), + ("ROUND", "Round Number", "Round to specified precision"), + ("INT", "Integer", "Truncate decimal part"), + ("NUMBER", "Format Number", "Format with separators"), + ("METRIC_LENGTH", "Metric Length", "Format as metric length"), + ("IMPERIAL_LENGTH", "Imperial Length", "Format as imperial length"), + ("CUSTOM", "Custom Expression", "Create custom expression with functions"), + ], + default="NONE", + ) + + round_precision: bpy.props.StringProperty( + name="Precision", description="Rounding precision (e.g. 0.1, 0.01, 0.001, 1, 10, 100)", default="0.01" + ) + + decimal_separator: bpy.props.StringProperty( + name="Decimal Separator", description="Decimal separator character", default=".", maxlen=1 + ) + + thousands_separator: bpy.props.StringProperty( + name="Thousands Separator", description="Thousands separator character", default=",", maxlen=1 + ) + + metric_decimals: bpy.props.IntProperty( + name="Decimal Places", description="Number of decimal places to show", default=2, min=0, max=10 + ) + + metric_precision: bpy.props.StringProperty( + name="Metric Precision", + description="Rounding precision for metric length (e.g. 0.1, 0.01, 0.001)", + default="0.01", + ) + + imperial_precision: bpy.props.IntProperty( + name="Fraction Precision", description="Imperial fraction precision (1/N)", default=4, min=1, max=64 + ) + + imperial_input_unit: bpy.props.EnumProperty( + name="Input Unit", + items=[ + ("foot", "Feet", "Input value is in feet"), + ("inch", "Inches", "Input value is in inches"), + ], + default="foot", + ) + + imperial_output_unit: bpy.props.EnumProperty( + name="Output Format", + items=[ + ("foot", "Feet and Inches", "Display as feet and inches"), + ("inch", "Inches Only", "Display as inches only"), + ], + default="foot", + ) + + custom_expression: bpy.props.StringProperty( + name="Custom Expression", + description=( + "Custom expression using functions\n" + "Use {{value}} as placeholder for the current row's value." + ), + default='concat({{value}}, " - additional text")', + ) + + def invoke(self, context, event): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + if self.literal_prop_id >= len(props.literals): + return {"CANCELLED"} + + literal_props = props.literals[self.literal_prop_id] + if self.row_index >= len(literal_props.element_value_rows): + return {"CANCELLED"} + + row = literal_props.element_value_rows[self.row_index] + self._load_formatting_from_row(row) + + return context.window_manager.invoke_props_dialog(self, width=450) + + def _load_formatting_from_row(self, row): + """Parse the formatted_value to load existing formatting settings""" + import re + + formatted_value = row.formatted_value + + if not formatted_value or formatted_value == f"{{{{{row.element_key}}}}}": + self.formatting_type = "NONE" + return + + if formatted_value.startswith("``") and formatted_value.endswith("``"): + expression = formatted_value[2:-2].strip() + else: + self.formatting_type = "NONE" + return + + if match := re.match(r"upper\(\{\{[^}]+\}\}\)", expression): + self.formatting_type = "UPPER" + + elif match := re.match(r"lower\(\{\{[^}]+\}\}\)", expression): + self.formatting_type = "LOWER" + + elif match := re.match(r"title\(\{\{[^}]+\}\}\)", expression): + self.formatting_type = "TITLE" + + elif match := re.match(r"int\(\{\{[^}]+\}\}\)", expression): + self.formatting_type = "INT" + + elif match := re.match(r"round\(\{\{[^}]+\}\},\s*([^)]+)\)", expression): + self.formatting_type = "ROUND" + self.round_precision = match.group(1).strip() + + elif match := re.match(r"number\(\{\{[^}]+\}\},\s*([^,]+),\s*([^)]+)\)", expression): + self.formatting_type = "NUMBER" + self.decimal_separator = match.group(1).strip() + self.thousands_separator = match.group(2).strip() + + elif match := re.match(r"metric_length\(\{\{[^}]+\}\},\s*([^,]+),\s*([^)]+)\)", expression): + self.formatting_type = "METRIC_LENGTH" + self.metric_precision = match.group(1).strip() + self.metric_decimals = int(match.group(2).strip()) + + elif match := re.match(r'imperial_length\(\{\{[^}]+\}\},\s*(\d+),\s*"([^"]+)",\s*"([^"]+)"\)', expression): + self.formatting_type = "IMPERIAL_LENGTH" + self.imperial_precision = int(match.group(1).strip()) + self.imperial_input_unit = match.group(2).strip() + self.imperial_output_unit = match.group(3).strip() + + else: + self.formatting_type = "CUSTOM" + self.custom_expression = expression + + def draw(self, context): + layout = self.layout + obj = context.active_object + props = tool.Drawing.get_text_props(obj) + literal_props = props.literals[self.literal_prop_id] + row = literal_props.element_value_rows[self.row_index] + + box = layout.box() + box.label(text=f"Element Value: {row.element_key}", icon="PROPERTIES") + + layout.prop(self, "formatting_type") + + if self.formatting_type == "ROUND": + layout.prop(self, "round_precision") + elif self.formatting_type == "NUMBER": + col = layout.column() + col.prop(self, "decimal_separator") + col.prop(self, "thousands_separator") + elif self.formatting_type == "METRIC_LENGTH": + col = layout.column() + col.prop(self, "metric_precision") + col.prop(self, "metric_decimals") + elif self.formatting_type == "IMPERIAL_LENGTH": + col = layout.column() + col.prop(self, "imperial_precision") + col.prop(self, "imperial_input_unit") + col.prop(self, "imperial_output_unit") + elif self.formatting_type == "CUSTOM": + col = layout.column() + col.prop(self, "custom_expression", text="") + + preview_box = layout.box() + preview_box.label(text="Preview:", icon="PROPERTIES") + formatted_syntax = self._generate_formatted_syntax(row.element_key) + preview_box.label(text=formatted_syntax) + + def _generate_formatted_syntax(self, element_key: str) -> str: + """Generate the formatted selector syntax based on current settings""" + base_value = f"{{{{{element_key}}}}}" + + if self.formatting_type == "NONE": + return base_value + elif self.formatting_type == "UPPER": + return f"``upper({base_value})``" + elif self.formatting_type == "LOWER": + return f"``lower({base_value})``" + elif self.formatting_type == "TITLE": + return f"``title({base_value})``" + elif self.formatting_type == "ROUND": + return f"``round({base_value}, {self.round_precision})``" + elif self.formatting_type == "INT": + return f"``int({base_value})``" + elif self.formatting_type == "NUMBER": + return f"``number({base_value}, {self.decimal_separator}, {self.thousands_separator})``" + elif self.formatting_type == "METRIC_LENGTH": + return f"``metric_length({base_value}, {self.metric_precision}, {self.metric_decimals})``" + elif self.formatting_type == "IMPERIAL_LENGTH": + return f'``imperial_length({base_value}, {self.imperial_precision}, "{self.imperial_input_unit}", "{self.imperial_output_unit}")``' + elif self.formatting_type == "CUSTOM": + custom_expr = self.custom_expression.replace("{{value}}", base_value) + return f"``{custom_expr}``" + + return base_value + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + literal_props = props.literals[self.literal_prop_id] + row = literal_props.element_value_rows[self.row_index] + + formatted_syntax = self._generate_formatted_syntax(row.element_key) + row.formatted_value = formatted_syntax + + tool.Blender.update_viewport() + return {"FINISHED"} + + +class ApplyElementValueRowsToLiteral(bpy.types.Operator): + bl_idname = "bim.apply_element_value_rows_to_literal" + bl_label = "Apply Element Values to Literal" + bl_description = "Concatenate all element value rows and apply to the literal" + bl_options = {"REGISTER", "UNDO"} + + literal_prop_id: bpy.props.IntProperty() + + def execute(self, context): + obj = context.active_object + if not obj: + return {"CANCELLED"} + + props = tool.Drawing.get_text_props(obj) + if self.literal_prop_id >= len(props.literals): + return {"CANCELLED"} + + literal_props = props.literals[self.literal_prop_id] + + parts = [] + for row in literal_props.element_value_rows: + if row.element_key: + if row.category == "Custom String": + parts.append(row.element_key) + else: + if row.formatted_value and row.formatted_value != f"{{{{{row.element_key}}}}}": + updated_formatted = self._update_formatted_value(row.element_key, row.formatted_value) + row.formatted_value = updated_formatted + value_part = updated_formatted + else: + default_format = f"{{{{{row.element_key}}}}}" + row.formatted_value = default_format + value_part = default_format + + parts.append(row.separator + value_part) + + concatenated_value = "".join(parts) + + for attr in literal_props.attributes: + if attr.name == "Literal": + attr.string_value = concatenated_value + break + + tool.Blender.update_viewport() + return {"FINISHED"} + + def _update_formatted_value(self, new_element_key: str, old_formatted_value: str) -> str: + """ + Update formatted value by replacing old element key placeholders with new one. + This preserves formatting functions like upper(), round(), etc. + """ + import re + + pattern = r'\{\{[^}]+\}\}' + + new_base_value = f"{{{{{new_element_key}}}}}" + updated_value = re.sub(pattern, new_base_value, old_formatted_value) + + return updated_value + + +class ShowElementValuesInstructions(bpy.types.Operator): + bl_idname = "bim.show_element_values_instructions" + bl_label = "Element Values - Quick Start Guide" + bl_description = "Show general tips and formatting instructions for element values" + bl_options = {"REGISTER"} + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self, width=700) + + def draw(self, context): + layout = self.layout + layout.label(text="Element Values - Building Custom Literals", icon="INFO") + + box = layout.box() + row = box.row() + row.label(text="Full Documentation:", icon="URL") + row.operator("wm.url_open", text="IFC Selector Syntax Guide", icon="URL").url = ( + "https://docs.ifcopenshell.org/ifcopenshell-python/selector_syntax.html#getting-element-values" + ) + + box = layout.box() + box.label(text="WORKFLOW: BUILDING LITERALS WITH ROWS", icon="SEQUENCE") + col = box.column(align=True) + col.scale_y = 0.85 + col.label(text="1. Select a category from the dropdown (Basic, Property Sets, etc.)") + col.label(text="2. Click 'Add Element' to create a new row") + col.label(text="3. Use the magnifying glass icon to browse available values for that category") + col.label(text="4. Optionally, click the format icon (star) to apply formatting (uppercase, round, etc.)") + col.label(text="5. Repeat to add more rows, each with its own separator text") + col.label(text="6. Click 'Apply to Literal' to concatenate all rows into the final text") + + box = layout.box() + box.label(text="SEPARATORS & CUSTOM TEXT", icon="THREE_DOTS") + col = box.column(align=True) + col.scale_y = 0.85 + col.label(text="• Each row has a separator field (shown before the value)") + col.label(text="• Default separator is ' - ' but you can change it to spaces, commas, newlines, etc.") + col.label(text="• Use 'Custom String' category to add plain text without any element key") + col.label(text="• Example: 'Custom String' row with 'Wall: ' → 'Custom String' with 'Type-' → 'Name' key") + col.label(text="• Result: 'Wall: Type-WALL-001' (combining custom text with element values)") + + box = layout.box() + box.label(text="SELECTING SOURCE ELEMENT", icon="EYEDROPPER") + col = box.column(align=True) + col.scale_y = 0.85 + col.label(text="• By default, uses the assigned product (if any) or the text annotation object itself") + col.label(text="• Use the eyedropper next to 'Element Values:' to select a different object") + col.label(text="• Useful for referencing values from related elements (like types, spaces, storeys)") + col.label(text="• The 'Source:' label shows which object is currently being used") + + box = layout.box() + box.label(text="FORMATTING FUNCTIONS (click star icon on any row)", icon="SHADERFX") + col = box.column(align=True) + col.scale_y = 0.8 + + col.label(text="Text Case:") + col.label(text=" • Uppercase, Lowercase, Title Case") + col.label(text=" Example: upper({{Name}}) → 'WALL-001'") + + col.separator(factor=0.5) + col.label(text="Numbers:") + col.label(text=" • Round - Round to precision (0.01, 0.1, 1, 10, etc.)") + col.label(text=" • Integer - Remove decimal part") + col.label(text=" • Number - Format with separators (1,234.56)") + + col.separator(factor=0.5) + col.label(text="Lengths:") + col.label(text=" • Metric Length - Format as metric with units (45.50 m²)") + col.label(text=" • Imperial Length - Format as feet-inches (10'-6\")") + + col.separator(factor=0.5) + col.label(text="Custom Expression:") + col.label(text=" • Write your own using functions: concat(), upper(), round(), etc.") + col.label(text=" • Use {{value}} as placeholder for the current row's value") + + box = layout.box() + box.label(text="TIPS & ADVANCED USAGE", icon="LIGHTPROBE_VOLUME") + col = box.column(align=True) + col.scale_y = 0.8 + col.label(text="• Category counts show available values: 'Property Sets (12)'") + col.label(text="• Regex patterns work in property set names: /Pset_.*Common/") + col.label(text="• Combine multiple formatted rows for complex labels") + col.label(text="• Each row remembers its own formatting when you re-edit it") + + def execute(self, context): + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/drawing/prop.py b/src/bonsai/bonsai/bim/module/drawing/prop.py index 4dd025afc0..da04caf7ff 100644 --- a/src/bonsai/bonsai/bim/module/drawing/prop.py +++ b/src/bonsai/bonsai/bim/module/drawing/prop.py @@ -30,7 +30,7 @@ import bonsai.bim.module.drawing.annotation as annotation import bonsai.bim.module.drawing.decoration as decoration from mathutils import Matrix from bonsai.bim.prop import BIMFilterGroup -from bonsai.bim.module.drawing.data import DrawingsData, DecoratorData, SheetsData, AnnotationData +from bonsai.bim.module.drawing.data import DrawingsData, DecoratorData, SheetsData, AnnotationData, ElementValuesData from bonsai.bim.module.drawing.data import refresh as refresh_drawing_data from pathlib import Path from bonsai.bim.prop import Attribute, StrProperty @@ -687,6 +687,105 @@ BOX_ALIGNMENT_POSITIONS = [ ] +class ElementValueRow(PropertyGroup): + """Represents a single element value row with category, key, and formatted value""" + + category: EnumProperty( + name="Category", + items=[ + ("Basic", "Basic", "Basic element information"), + ("Attributes", "Attributes", "IFC Attributes"), + ("Property Sets", "Property Sets", "Property Sets"), + ("Quantity Sets", "Quantity Sets", "Quantity Sets"), + ("Type", "Type", "Type information"), + ("Spatial", "Spatial", "Spatial relationships"), + ("Parent", "Parent", "Parent relationships"), + ("Classification", "Classification", "Classifications"), + ("Groups", "Groups", "Group assignments"), + ("Systems", "Systems", "System assignments"), + ("Zones", "Zones", "Zone assignments"), + ("Material", "Material", "Material information"), + ("Styles", "Styles", "Style information"), + ("Profiles", "Profiles", "Profile information"), + ("Coordinates", "Coordinates", "Coordinate information"), + ("Custom String", "Custom String", "Custom text (no element key)"), + ], + default="Basic", + ) + + element_key: StringProperty( + name="Element Key", description="The element value key (e.g., 'id', 'Name', 'Pset_WallCommon.Reference')", default="" + ) + + formatted_value: StringProperty( + name="Formatted Value", + description="The formatted value string with selector syntax (e.g., '{{id}}' or '``upper({{Name}})``')", + default="", + ) + + separator: StringProperty( + name="Separator", + description="Text to insert before this value when concatenating (e.g., ' - ', ', ', '\\n')", + default=" - ", + ) + + if TYPE_CHECKING: + category: str + element_key: str + formatted_value: str + separator: str + + +def get_category_items_with_counts(self, context): + """Generate category items with counts dynamically""" + category_metadata = [ + ("Basic", "Basic", "Basic element information", "OBJECT_DATA"), + ("Attributes", "Attributes", "IFC Attributes", "PROPERTIES"), + ("Property Sets", "Property Sets", "Property Sets", "ALIGN_JUSTIFY"), + ("Quantity Sets", "Quantity Sets", "Quantity Sets", "SNAP_VOLUME"), + ("Type", "Type", "Type information", "FILE_VOLUME"), + ("Spatial", "Spatial", "Spatial relationships", "HOME"), + ("Parent", "Parent", "Parent relationships", "FILE_PARENT"), + ("Classification", "Classification", "Classifications", "BOOKMARKS"), + ("Groups", "Groups", "Group assignments", "OUTLINER_COLLECTION"), + ("Systems", "Systems", "System assignments", "SYSTEM"), + ("Zones", "Zones", "Zone assignments", "MESH_CIRCLE"), + ("Material", "Material", "Material information", "MATERIAL"), + ("Styles", "Styles", "Style information", "COLOR"), + ("Profiles", "Profiles", "Profile information", "OUTLINER_DATA_CURVES"), + ("Coordinates", "Coordinates", "Coordinate information", "EMPTY_ARROWS"), + ("Custom String", "Custom String", "Add custom text (no element key)", "SMALL_CAPS"), + ] + + obj = context.active_object + + if obj and tool.Ifc.get_entity(obj): + try: + element = tool.Ifc.get_entity(obj) + text_element = element + + if hasattr(self, 'product_used'): + if self.product_used: + element = tool.Ifc.get_entity(self.product_used) + else: + assigned = tool.Drawing.get_assigned_product(text_element) + if assigned: + element = assigned + + available_keys = ElementValuesData.get_available_element_value_keys(element) + items = [] + for i, (identifier, base_name, description, icon) in enumerate(category_metadata): + count = len(available_keys.get(identifier, [])) + display_name = f"{base_name} ({count})" if count > 0 else base_name + items.append((identifier, display_name, description, icon, i)) + + return items + except Exception as e: + pass + + return [(id, name, desc, icon, i) for i, (id, name, desc, icon) in enumerate(category_metadata)] + + class LiteralProps(PropertyGroup): def set_box_alignment(self, new_value): markers = new_value.count(True) @@ -725,11 +824,57 @@ class LiteralProps(PropertyGroup): } return text_data + show_element_values: bpy.props.BoolProperty( + name="Show Element Values", description="Show/hide the element values panel", default=False + ) + + expanded_category: bpy.props.StringProperty( + name="Expanded Category", description="Currently expanded category in the element values panel", default="" + ) + + element_values_filter: bpy.props.StringProperty( + name="Element Values Filter", description="Search filter for element values", default="" + ) + + product_used: PointerProperty( + name="Product Used", + type=bpy.types.Object, + description="Object to use for fetching element values. If empty, uses assigned product", + ) + + element_value_rows: CollectionProperty( + name="Element Value Rows", + type=ElementValueRow, + description="Collection of element value rows for building the literal value" + ) + + category_for_adding: EnumProperty( + name="Category for Adding", + items=get_category_items_with_counts, + default=0, + description="Category to use when adding a new element value row" + ) + if TYPE_CHECKING: attributes: bpy.types.bpy_prop_collection_idprop[Attribute] value: str box_alignment: tuple[bool, bool, bool, bool, bool, bool, bool, bool, bool] ifc_definition_id: int + element_value_rows: bpy.types.bpy_prop_collection_idprop[ElementValueRow] + category_for_adding: str + + +class LiteralApplySettings(PropertyGroup): + literal_index: IntProperty(name="Literal Index") + apply_text_to_all: BoolProperty(name="Apply Text to All", default=False) + apply_path_to_all: BoolProperty(name="Apply Path to All", default=False) + apply_box_alignment_to_all: BoolProperty(name="Apply Box Alignment to All", default=False) + + if TYPE_CHECKING: + literal_index: int + apply_text_to_all: bool + apply_path_to_all: bool + apply_box_alignment_to_all: bool class BIMTextProperties(PropertyGroup): @@ -763,6 +908,24 @@ class BIMTextProperties(PropertyGroup): description="Non-default symbol to use for this text.", ) + apply_font_size_to_all: BoolProperty( + name="Apply Font Size to All", description="Apply font size changes to all selected text objects", default=False + ) + apply_newline_to_all: BoolProperty( + name="Apply Newline to All", description="Apply newline changes to all selected text objects", default=False + ) + + literal_apply_settings: CollectionProperty(name="Literal Apply Settings", type=LiteralApplySettings) + + def ensure_literal_apply_settings(self, literal_count: int): + """Ensure we have apply settings for all literals""" + while len(self.literal_apply_settings) > literal_count: + self.literal_apply_settings.remove(len(self.literal_apply_settings) - 1) + + while len(self.literal_apply_settings) < literal_count: + setting = self.literal_apply_settings.add() + setting.literal_index = len(self.literal_apply_settings) - 1 + if TYPE_CHECKING: is_editing: bool literals: bpy.types.bpy_prop_collection_idprop[LiteralProps] @@ -772,6 +935,8 @@ class BIMTextProperties(PropertyGroup): list_separator: str symbol: Union[str, Literal["NO SYMBOL", "CUSTOM SYMBOL"]] custom_symbol: str + apply_font_size_to_all: bool + apply_newline_to_all: bool def get_symbol(self) -> Union[str, None]: if self.symbol == "NO SYMBOL": diff --git a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py index 37d39e502f..2d8c4e60cf 100644 --- a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py +++ b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py @@ -42,6 +42,7 @@ from mathutils import geometry, Vector from typing import Optional, Self, Union from collections.abc import Callable, Sequence from pathlib import Path +from markdown_it import MarkdownIt class External(svgwrite.container.Group): @@ -61,6 +62,120 @@ class External(svgwrite.container.Group): return self.xml +def parse_markdown_it(text: str) -> list[dict[str, Union[str, None]]]: + """ + Parse markdown (links, breaks, bold, italic, bullet points) from text and return structured information. + Returns a list of dicts with keys: + - 'text': the text content + - 'url': link target if present, else None + - 'break': True if this is a line break (\n or
), else False + - 'bold': True if bold, else False + - 'italic': True if italic, else False + - \u2022 for bullet points (you start a bullet point list by prefixing \n before the first - bullet point) + + Example: + Hello **bold** *italic* [World](http://ex.com)\n + - Bullet 1\n + - Bullet 2
Another [Link](http://foo.com) + [ + {'text': 'Hello ', 'url': None, 'break': False, 'bold': False, 'italic': False}, + {'text': 'bold', 'url': None, 'break': False, 'bold': True, 'italic': False}, + {'text': ' ', 'url': None, 'break': False, 'bold': False, 'italic': False}, + {'text': 'italic', 'url': None, 'break': False, 'bold': False, 'italic': True}, + {'text': ' ', 'url': None, 'break': False, 'bold': False, 'italic': False}, + {'text': 'World', 'url': 'http://ex.com', 'break': False, 'bold': False, 'italic': False}, + {'text': None, 'url': None, 'break': True, 'bold': False, 'italic': False}, + {'text': '\u2022 ', 'url': None, 'break': True, 'bold': False, 'italic': False}, + {'text': 'Bullet 1', 'url': None, 'break': False, 'bold': False, 'italic': False}, + {'text': None, 'url': None, 'break': True, 'bold': False, 'italic': False}, + {'text': '\u2022 ', 'url': None, 'break': True, 'bold': False, 'italic': False}, + {'text': 'Bullet 2 ', 'url': None, 'break': False, 'bold': False, 'italic': False}, + {'text': None, 'url': None, 'break': True, 'bold': False, 'italic': False}, + {'text': 'Another ', 'url': None, 'break': False, 'bold': False, 'italic': False}, + {'text': 'Link', 'url': 'http://foo.com', 'break': False, 'bold': False, 'italic': False} + ] + """ + md = MarkdownIt("commonmark") + tokens = md.parse(text) + segments = [] + bold = False + italic = False + link_opening = None + link_text = None + i = 0 + while i < len(tokens): + token = tokens[i] + if token.type == "bullet_list_open": + i += 1 + while i < len(tokens) and tokens[i].type != "bullet_list_close": + if tokens[i].type == "list_item_open": + segments.append({"text": "\u2022 ", "url": None, "break": True, "bold": False, "italic": False}) + j = i + 1 + while j < len(tokens) and tokens[j].type != "list_item_close": + if tokens[j].type == "inline": + for child in tokens[j].children or []: + if child.type == "softbreak": + segments.append({"text": None, "url": None, "break": True, "bold": False, "italic": False}) + elif child.type == "html_inline" and child.content.strip().lower() == "
": + segments.append({"text": None, "url": None, "break": True, "bold": False, "italic": False}) + elif child.type == "strong_open": + bold = True + elif child.type == "strong_close": + bold = False + elif child.type == "em_open": + italic = True + elif child.type == "em_close": + italic = False + elif child.type == "link_open": + link_opening = child + elif child.type == "text" and link_opening: + link_text = child.content + elif child.type == "link_close" and link_opening: + url = link_opening.attrGet("href") + if url and link_text: + segments.append({"text": link_text, "url": url, "break": False, "bold": bold, "italic": italic}) + link_opening = None + link_text = None + elif child.type == "text" and not link_opening: + segments.append({"text": child.content, "url": None, "break": False, "bold": bold, "italic": italic}) + j += 1 + i = j + else: + i += 1 + i += 1 + elif token.type == "inline": + for child in token.children or []: + if child.type == "softbreak": + segments.append({"text": None, "url": None, "break": True, "bold": False, "italic": False}) + elif child.type == "html_inline" and child.content.strip().lower() == "
": + segments.append({"text": None, "url": None, "break": True, "bold": False, "italic": False}) + elif child.type == "strong_open": + bold = True + elif child.type == "strong_close": + bold = False + elif child.type == "em_open": + italic = True + elif child.type == "em_close": + italic = False + elif child.type == "link_open": + link_opening = child + elif child.type == "text" and link_opening: + link_text = child.content + elif child.type == "link_close" and link_opening: + url = link_opening.attrGet("href") + if url and link_text: + segments.append({"text": link_text, "url": url, "break": False, "bold": bold, "italic": italic}) + link_opening = None + link_text = None + elif child.type == "text" and not link_opening: + segments.append({"text": child.content, "url": None, "break": False, "bold": bold, "italic": italic}) + i += 1 + segments = [seg for seg in segments if seg.get("text") is not None or seg.get("break", False)] + if not segments: + return [{"text": text, "url": None, "break": False, "bold": False, "italic": False}] + return segments + + class SvgWriter: metadata: list[str] resource_paths: dict[tool.Drawing.ResourceType, Union[str, None]] @@ -893,19 +1008,78 @@ class SvgWriter: text = tool.Drawing.replace_text_literal_variables( text_literal.Literal, product or element, reverse_list, list_separator ) - text_tags = self.create_text_tag( - text, - text_position_svg, - angle, - text_literal.BoxAlignment, - classes_str, - fill_bg=fill_bg, - line_number_start=line_number, - newline_at=newline_at, - ) - for tag in text_tags: - self.svg.add(tag) - line_number += len(tag.elements) + + text_segments = parse_markdown_it(text) + + if len(text_segments) == 1 and text_segments[0]["url"] is None and not text_segments[0].get("break", False): + text_tags = self.create_text_tag( + text, + text_position_svg, + angle, + text_literal.BoxAlignment, + classes_str, + fill_bg=fill_bg, + line_number_start=line_number, + newline_at=newline_at, + ) + for tag in text_tags: + self.svg.add(tag) + line_number += len(text_tags) + else: + base_text_attrs = SvgWriter.get_box_alignment_parameters(text_literal.BoxAlignment) + text_position_svg_str = ", ".join(map(str, text_position_svg)) + text_transform = f"translate({text_position_svg_str}) rotate({angle})" + + text_tag = self.svg.text("", transform=text_transform, class_=classes_str, **base_text_attrs) + + line_idx = 0 + new_line = True + bullet_next = False + for idx, segment in enumerate(text_segments): + if segment.get("break", False): + if segment.get("text") == "\u2022 ": + bullet_next = True + line_idx += 1 + new_line = True + continue + if segment["text"] is None: + continue + text_content = segment["text"] + if bullet_next: + text_content = "\u2022 " + (text_content or "") + bullet_next = False + + if new_line: + dy, x, y = f"{line_idx}em", 0, 0 + new_line = False + else: + dy, x, y = None, None, None + + tspan = self.svg.tspan(text_content, class_=classes_str) + if segment.get("bold", False): + tspan.attribs["font-weight"] = "bold" + if segment.get("italic", False): + tspan.attribs["font-style"] = "italic" + if dy is not None: + tspan.attribs["dy"] = dy + if x is not None: + tspan.attribs["x"] = x + if y is not None: + tspan.attribs["y"] = y + + if segment["url"]: + link_element = self.svg.a(href=segment["url"], target="_blank") + link_element.add(tspan) + text_tag.add(link_element) + else: + text_tag.add(tspan) + + if fill_bg: + fill_bg_tag = self.add_fill_bg(text_tag) + self.svg.add(fill_bg_tag) + + self.svg.add(text_tag) + line_number += 1 def draw_empty_annotation(self, obj: bpy.types.Object, classes: list[str]) -> None: x_offset = self.raw_width / 2 diff --git a/src/bonsai/bonsai/bim/module/drawing/ui.py b/src/bonsai/bonsai/bim/module/drawing/ui.py index 1a25b387dd..552ca7f9b4 100644 --- a/src/bonsai/bonsai/bim/module/drawing/ui.py +++ b/src/bonsai/bonsai/bim/module/drawing/ui.py @@ -28,8 +28,9 @@ from bonsai.bim.module.drawing.data import ( DrawingsData, ElementFiltersData, DecoratorData, + ElementValuesData, ) -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING, Union, Optional if TYPE_CHECKING: from bonsai.bim.module.drawing.prop import DocProperties, Drawing, Sheet @@ -475,21 +476,20 @@ class BIM_PT_sheets(Panel): op = row3.operator("bim.activate_drawing_from_sheet", icon="OUTLINER_OB_CAMERA", text="") + if active_sheet.reference_type == "DRAWING": drawingnamesvg = active_sheet.name drawingname = drawingnamesvg.split(".svg")[0] ifc_file = tool.Ifc.get() + ifc_annotations = ifc_file.by_type("IfcAnnotation") drawingid = None - - for annotation in ifc_file.by_type("IfcAnnotation"): + for annotation in ifc_annotations: if annotation.ObjectType != "DRAWING": continue - Annotation_Name = annotation.Name.replace(",", "") # Remove commas if Annotation_Name == drawingname: drawingid = annotation.id() break - if drawingid is not None: op.drawing = drawingid @@ -551,6 +551,61 @@ class BIM_PT_product_assignments(Panel): col.enabled = bool(ProductAssignmentsData.data["relating_product"]) +def get_category_icon(category_name): + """Get appropriate icon for each category""" + icons = { + "Basic": "OBJECT_DATA", + "Attributes": "PROPERTIES", + "Property Sets": "PROPERTIES", + "Quantity Sets": "SNAP_VOLUME", + "Type": "OUTLINER_OB_MESH", + "Spatial": "HOME", + "Parent": "FILE_PARENT", + "Classification": "BOOKMARKS", + "Groups": "GROUP", + "Systems": "SYSTEM", + "Zones": "MESH_CIRCLE", + "Material": "MATERIAL", + "Profiles": "MESH_DATA", + "Coordinates": "EMPTY_ARROWS", + } + return icons.get(category_name, "DOT") + + +def get_current_product_for_element_values(obj: bpy.types.Object, literal_props) -> Optional[bpy.types.Object]: + """Get the product to use for fetching element values - either explicitly set or assigned product""" + if hasattr(literal_props, "product_used") and literal_props.product_used: + return literal_props.product_used + + element = tool.Ifc.get_entity(obj) + if element: + return tool.Drawing.get_assigned_product(element) or obj + return obj + + +def get_category_icon(category: str) -> str: + """Get the icon for an element value category""" + icons = { + "Basic": "OBJECT_DATA", + "Attributes": "PROPERTIES", + "Property Sets": "ALIGN_JUSTIFY", + "Quantity Sets": "SNAP_VOLUME", + "Type": "FILE_VOLUME", + "Spatial": "HOME", + "Parent": "FILE_PARENT", + "Classification": "BOOKMARKS", + "Groups": "OUTLINER_COLLECTION", + "Systems": "SYSTEM", + "Zones": "MESH_CIRCLE", + "Material": "MATERIAL", + "Styles": "COLOR", + "Profiles": "OUTLINER_DATA_CURVES", + "Coordinates": "EMPTY_ARROWS", + "Custom String": "SMALL_CAPS", + } + return icons.get(category, "DOT") + + class BIM_PT_text(Panel): bl_label = "Text" bl_idname = "BIM_PT_text" @@ -563,10 +618,10 @@ class BIM_PT_text(Panel): @classmethod def poll(cls, context): if not tool.Ifc.get() or not context.active_object: - return + return False element = tool.Ifc.get_entity(context.active_object) if not element: - return + return False return tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]) def draw_text_editing_ui( @@ -592,6 +647,8 @@ class BIM_PT_text(Panel): row = self.layout.row(align=True) row.prop(props, "font_size") + row.prop(props, "apply_font_size_to_all", text="", icon="COPYDOWN") + row = self.layout.row(align=True) row.prop(props, "newline_at") row = self.layout.row(align=True) @@ -604,10 +661,13 @@ class BIM_PT_text(Panel): if props.symbol == "CUSTOM SYMBOL": row = self.layout.row(align=True) row.prop(props, "custom_symbol", text="") + row.prop(props, "apply_newline_to_all", text="", icon="COPYDOWN") + select_op = row.operator("bim.select_similar_text_literal_value", text="", icon="RESTRICT_SELECT_OFF") + select_op.literal_value = str(props.newline_at) + select_op.attribute_type = "newline" for i, literal_props in enumerate(props.literals): box = self.layout.box() - row = self.layout.row(align=True) row = box.row(align=True) row.label(text=f"Literal[{i}]:") @@ -617,25 +677,140 @@ class BIM_PT_text(Panel): row.operator("bim.order_text_literal_down", icon="TRIA_DOWN", text="").literal_prop_id = i row.operator("bim.remove_text_literal", icon="X", text="").literal_prop_id = i - # skip BoxAlignment since we're going to format it ourselves - attributes = [a for a in literal_props.attributes if a.name != "BoxAlignment"] - popup_active_attribute = attributes[0] if popup_mode else None - bonsai.bim.helper.draw_attributes(attributes, box, popup_active_attribute=popup_active_attribute) + if len(literal_props.attributes) > 0 and i < len(props.literal_apply_settings): + row = box.row(align=True) + row.prop(literal_props.attributes[0], "string_value", text="Literal") + + expand_icon = "DOWNARROW_HLT" if getattr(literal_props, "show_element_values", False) else "RIGHTARROW" + op = row.operator("bim.toggle_element_values_panel", icon=expand_icon, text="") + op.literal_prop_id = i + + row.prop(props.literal_apply_settings[i], "apply_text_to_all", text="", icon="COPYDOWN") + + element = tool.Ifc.get_entity(obj) + assigned_element = tool.Drawing.get_assigned_product(element) or element + resolved_value = tool.Drawing.replace_text_literal_variables( + literal_props.attributes[0].string_value, + assigned_element, + props.reverse_list, + props.list_separator, + ) + row = box.row(align=True) + row.label(text="CurrentValue:") + row.label(text=str(resolved_value)) + + # Show the element values panel if expanded + if getattr(literal_props, "show_element_values", False): + values_box = box.box() + + help_row = values_box.row(align=True) + help_row.operator("bim.show_element_values_instructions", text="Instructions", icon="QUESTION") + + element_values_row = values_box.row(align=True) + element_values_row.label(text="Element Values:", icon="PROPERTIES") + element_values_row.prop(literal_props, "product_used", text="", icon="EYEDROPPER") + + current_product = get_current_product_for_element_values(obj, literal_props) + + product_name = current_product.name if (current_product and hasattr(current_product, "name")) else "Unknown" + source_row = values_box.row() + source_row.label(text=f"Source: {product_name}", icon="OBJECT_DATA") + + element = tool.Ifc.get_entity(current_product) if current_product else None + if element: + add_row = values_box.row(align=True) + add_row.prop(literal_props, "category_for_adding", text="") + + op = add_row.operator("bim.add_element_value_row", text="Add Element", icon="ADD") + op.literal_prop_id = i + + if len(literal_props.element_value_rows) > 0: + for row_idx, value_row in enumerate(literal_props.element_value_rows): + row = values_box.row(align=True) + + is_custom_string = value_row.category == "Custom String" + + if is_custom_string: + category_icon = get_category_icon(value_row.category) + row.prop(value_row, "element_key", text="", icon=category_icon) + else: + split = row.split(factor=0.25, align=True) + + sep_col = split.row(align=True) + sep_col.prop(value_row, "separator", text="") + + key_col = split.row(align=True) + category_icon = get_category_icon(value_row.category) + key_col.prop(value_row, "element_key", text="", icon=category_icon) + + op = row.operator("bim.element_value_suggestions_popup", text="", icon="VIEWZOOM") + op.literal_prop_id = i + op.row_index = row_idx + op.category = value_row.category + + op = row.operator("bim.format_element_value_row", text="", icon="SHADERFX") + op.literal_prop_id = i + op.row_index = row_idx + + op = row.operator("bim.remove_element_value_row", text="", icon="X") + op.literal_prop_id = i + op.row_index = row_idx + + apply_row = values_box.row() + apply_row.scale_y = 1.2 + op = apply_row.operator("bim.apply_element_value_rows_to_literal", text="Apply to Literal", icon="CHECKMARK") + op.literal_prop_id = i + else: + error_row = values_box.row() + error_row.label(text="Selected object has no IFC data", icon="ERROR") + + if len(literal_props.attributes) > 1: + attr = literal_props.attributes[1] + row = box.row(align=True) + if getattr(attr, "data_type", None) == "enum" and getattr(attr, "enum_items", None): + row.prop(attr, "enum_value", text="Path") + select_value = attr.enum_value + else: + row.prop(attr, "string_value", text="Path") + select_value = attr.string_value + if i < len(props.literal_apply_settings): + row.prop(props.literal_apply_settings[i], "apply_path_to_all", text="", icon="COPYDOWN") + + other_attributes = [a for a in literal_props.attributes[2:] if a.name != "BoxAlignment"] + if other_attributes: + bonsai.bim.helper.draw_attributes(other_attributes, box) row = box.row(align=True) - cols = [row.column(align=True) for i in range(3)] - for i in range(9): - cols[i % 3].prop( + cols = [row.column(align=True) for j in range(3)] + for j in range(9): + cols[j % 3].prop( literal_props, "box_alignment", text="", - index=i, - icon="RADIOBUT_ON" if literal_props.box_alignment[i] else "RADIOBUT_OFF", + index=j, + icon="RADIOBUT_ON" if literal_props.box_alignment[j] else "RADIOBUT_OFF", ) col = row.column(align=True) - col.label(text=" Text box alignment:") - col.label(text=f' {literal_props.attributes["BoxAlignment"].string_value}') + alignment_label_row = col.row(align=True) + alignment_label_row.label(text=" Text box alignment:") + if i < len(props.literal_apply_settings): + alignment_label_row.prop( + props.literal_apply_settings[i], "apply_box_alignment_to_all", text="", icon="COPYDOWN" + ) + + box_alignment_value = ( + literal_props.attributes[ + next( + (idx for idx, attr in enumerate(literal_props.attributes) if attr.name == "BoxAlignment"), + -1, + ) + ].string_value + if any(attr.name == "BoxAlignment" for attr in literal_props.attributes) + else "N/A" + ) + + col.label(text=f" {box_alignment_value}") def draw(self, context): obj = context.active_object @@ -652,10 +827,21 @@ class BIM_PT_text(Panel): row = self.layout.row(align=True) row.label(text="FontSize") - row.label(text=str(text_data["FontSize"])) + click_op = row.operator( + "bim.select_similar_text_literal_value", text=str(text_data["FontSize"]), emboss=False + ) + click_op.literal_value = str(text_data["FontSize"]) + click_op.attribute_type = "font_size" + click_op.display_text = str(text_data["FontSize"]) + row = self.layout.row(align=True) row.label(text="Newline_At") - row.label(text=str(text_data["Newline_At"])) + click_op = row.operator( + "bim.select_similar_text_literal_value", text=str(text_data["Newline_At"]), emboss=False + ) + click_op.literal_value = str(text_data["Newline_At"]) + click_op.attribute_type = "newline" + click_op.display_text = str(text_data["Newline_At"]) row = self.layout.row(align=True) row.label(text="Reverse_List") row.label(text=str(text_data["Reverse_List"])) @@ -663,12 +849,30 @@ class BIM_PT_text(Panel): row.label(text="List_Separator") row.label(text=str(text_data["List_Separator"])) - for literal_data in text_data["Literals"]: + for i, literal_data in enumerate(text_data["Literals"]): box = self.layout.box() + box.label(text=f"Literal[{i}]:") + + # Combine both approaches: clickable attributes from PR #7292 and display from PR #7106 for attribute in literal_data: row = box.row(align=True) row.label(text=attribute) - row.label(text=literal_data[attribute]) + click_op = row.operator( + "bim.select_similar_text_literal_value", + text=str(literal_data[attribute]), + emboss=False, + ) + click_op.literal_value = str(literal_data[attribute]) + click_op.literal_index = i + if attribute == "Literal": + click_op.attribute_type = "literal" + elif attribute == "Path": + click_op.attribute_type = "path" + elif attribute == "BoxAlignment": + click_op.attribute_type = "box_alignment" + else: + click_op.attribute_type = "text" + click_op.display_text = str(literal_data[attribute]) class BIM_UL_drawinglist(bpy.types.UIList): diff --git a/src/bonsai/bonsai/bim/module/drawing/workspace.py b/src/bonsai/bonsai/bim/module/drawing/workspace.py index b938514c70..ae593d0873 100644 --- a/src/bonsai/bonsai/bim/module/drawing/workspace.py +++ b/src/bonsai/bonsai/bim/module/drawing/workspace.py @@ -259,6 +259,9 @@ class AnnotationToolUI: add_layout_hotkey_operator( cls.layout, "Readjust", "S_G", "Readjust tags based on the products they are assigned to" ) + row = cls.layout.row(align=True) + props = tool.Drawing.get_document_props() + row.operator("bim.filter_selected_objects_if_intersected_by_camera", text="Filter by Camera") class Hotkey(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index f9c7f57782..d4ed4f8a9b 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -92,7 +92,12 @@ def get_attribute_enum_values(prop: "Attribute", context: bpy.types.Context) -> # Support weird buildingSMART dictionary mappings which behave like enums items: list[tuple[str, str, str]] = [] - data = json.loads(prop.enum_items) + if not prop.enum_items: + return items + try: + data = json.loads(prop.enum_items) + except Exception: + return items if isinstance(data, dict): for k, v in data.items(): @@ -633,7 +638,7 @@ class BIMProperties(PropertyGroup): ], name="Time Unit", default="HOUR", - ) + ) tab_visibilities: CollectionProperty(type=BIMTabVisibility, name="Tab Visibilities") panel_properties: CollectionProperty(type=BIMPanelProperties, name="Panel Properties") @@ -774,15 +779,6 @@ class BIMFacet(PropertyGroup): pset: StringProperty(name="Pset") value: StringProperty(name="Value") type: StringProperty(name="Type") - filter_mode: EnumProperty( - name="Filter Mode", - items=[ - ("ADD", "Add", "Add elements to the result set (query entire IFC file)", "ADD", 0), - ("SUBTRACT", "Subtract", "Subtract matching elements from previous results", "REMOVE", 1), - ("FILTER", "Filter", "Filter down previous results to matching elements", "FILTER", 2), - ], - default="ADD", - ) comparison: EnumProperty( items=[ ("=", "equal to", ""), @@ -800,7 +796,6 @@ class BIMFacet(PropertyGroup): pset: str value: str type: str - filter_mode: Literal["ADD", "SUBTRACT", "FILTER"] comparison: Literal["=", "!=", ">=", "<=", ">", "<", "*=", "!*="] diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index a2ce6fb467..31b4f54a98 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -139,21 +139,32 @@ get_element_grammar = lark.Lark( ) format_grammar = lark.Lark( - """start: function + """start: expression - function: round | number | int | format_length | lower | upper | title | concat | substr | ESCAPED_STRING | NUMBER + ?expression: add_sub + ?add_sub: mul_div + | add_sub "+" mul_div -> add + | add_sub "-" mul_div -> subtract + ?mul_div: function + | mul_div "*" function -> multiply + | mul_div "/" function -> divide + + function: round | number | int | format_length | lower | upper | title | concat | substr | variable | ESCAPED_STRING | NUMBER | "(" expression ")" - round: "round(" function "," NUMBER ")" - number: "number(" function ["," ESCAPED_STRING ["," ESCAPED_STRING]] ")" - int: "int(" function ")" + variable: "{{" query_path "}}" + query_path: /[^}]+/ + + round: "round(" expression "," NUMBER ")" + number: "number(" expression ["," ESCAPED_STRING ["," ESCAPED_STRING]] ")" + int: "int(" expression ")" format_length: metric_length | imperial_length - metric_length: "metric_length(" function "," NUMBER "," NUMBER ")" - imperial_length: "imperial_length(" function "," NUMBER ["," ESCAPED_STRING "," ESCAPED_STRING ["," boolean]] ")" - lower: "lower(" function ")" - upper: "upper(" function ")" - title: "title(" function ")" - concat: "concat(" function ("," function)* ")" - substr: "substr(" function "," SIGNED_INT ["," SIGNED_INT] ")" + metric_length: "metric_length(" expression "," NUMBER "," NUMBER ")" + imperial_length: "imperial_length(" expression "," NUMBER ["," ESCAPED_STRING "," ESCAPED_STRING ["," boolean]] ")" + lower: "lower(" expression ")" + upper: "upper(" expression ")" + title: "title(" expression ")" + concat: "concat(" expression ("," expression)* ")" + substr: "substr(" expression "," SIGNED_INT ["," SIGNED_INT] ")" boolean: TRUE | FALSE TRUE: "true" | "True" | "TRUE" @@ -189,9 +200,83 @@ format_grammar = lark.Lark( class FormatTransformer(lark.Transformer): + def __init__(self, element=None): + """Initialize transformer with optional element for variable substitution""" + super().__init__() + self.element = element + def start(self, args): return args[0] + def expression(self, args): + return args[0] + + def variable(self, args): + """Handle variable substitution like {{z}} or {{Pset_Wall.FireRating}}""" + if self.element is None: + return "0" # Default value if no element context + + query_path = args[0] + try: + value = get_element_value(self.element, query_path) + if value is None: + return "0" + # Convert to string for further processing + return str(value) + except: + return "0" # Return default on error + + def query_path(self, args): + """Extract the query path from variable""" + return str(args[0]).strip() + + def add(self, args): + """Handle addition operation""" + left, right = args + try: + left_val = float(left) if left != "None" and left is not None else 0.0 + right_val = float(right) if right != "None" and right is not None else 0.0 + result = left_val + right_val + # Return integer if result has no decimal part + if result % 1 == 0: + return str(int(result)) + return str(result) + except (ValueError, TypeError): + # If can't convert to numbers, concatenate as strings + return str(left) + str(right) + + def subtract(self, args): + """Handle subtraction operation""" + left, right = args + left_val = float(left) if left != "None" and left is not None else 0.0 + right_val = float(right) if right != "None" and right is not None else 0.0 + result = left_val - right_val + if result % 1 == 0: + return str(int(result)) + return str(result) + + def multiply(self, args): + """Handle multiplication operation""" + left, right = args + left_val = float(left) if left != "None" and left is not None else 0.0 + right_val = float(right) if right != "None" and right is not None else 0.0 + result = left_val * right_val + if result % 1 == 0: + return str(int(result)) + return str(result) + + def divide(self, args): + """Handle division operation""" + left, right = args + left_val = float(left) if left != "None" and left is not None else 0.0 + right_val = float(right) if right != "None" and right is not None else 1.0 + if right_val == 0: + return "inf" # or raise an error, or return "0" + result = left_val / right_val + if result % 1 == 0: + return str(int(result)) + return str(result) + def function(self, args): return args[0] @@ -211,7 +296,7 @@ class FormatTransformer(lark.Transformer): return str(args[0]).title() def concat(self, args): - return "".join(args) + return "".join(str(arg) for arg in args) def substr(self, args): if len(args) == 3: @@ -241,13 +326,14 @@ class FormatTransformer(lark.Transformer): return str(result) def number(self, args): - if isinstance(args[0], str): - args[0] = float(args[0]) if "." in args[0] else int(args[0]) + arg_val = args[0] + if isinstance(arg_val, str): + arg_val = float(arg_val) if "." in arg_val else int(arg_val) if len(args) >= 3 and args[2]: - return "{:,}".format(args[0]).replace(".", "*").replace(",", args[2]).replace("*", args[1]) + return "{:,}".format(arg_val).replace(".", "*").replace(",", args[2]).replace("*", args[1]) elif len(args) >= 2 and args[1]: - return "{}".format(args[0]).replace(".", args[1]) - return "{:,}".format(args[0]) + return "{}".format(arg_val).replace(".", args[1]) + return "{:,}".format(arg_val) def format_length(self, args): return args[0] @@ -287,7 +373,8 @@ class FormatTransformer(lark.Transformer): ) def int(self, args: list[str]) -> str: - return str(int(float(args[0]))) + value = 0.0 if args[0] == "None" else args[0] or 0.0 + return str(int(float(value))) class GetElementTransformer(lark.Transformer): @@ -313,8 +400,18 @@ class GetElementTransformer(lark.Transformer): return args[1:-1].replace("\\", "") -def format(query: str) -> str: - return FormatTransformer().transform(format_grammar.parse(query)) +def format(query: str, element: Optional[ifcopenshell.entity_instance] = None) -> str: + """Format a query string with optional element context for variable substitution. + + :param query: Format query string (can include {{variable}} placeholders) + :param element: Optional IFC element for variable substitution + :return: Formatted string + + Example: + format("{{z}} / 2", element) # Substitutes element's z value + format("imperial_length({{z}} / 2, 4)", element) # Uses z in calculation + """ + return FormatTransformer(element).transform(format_grammar.parse(query)) def get_element_value(element: ifcopenshell.entity_instance, query: str) -> Any: @@ -1163,4 +1260,4 @@ class FacetTransformer(lark.Transformer): if comparison.startswith("!"): return not result - return result + return result \ No newline at end of file From 4db9d60a9715eb2a1f33f14b5451eebde4f6cdb5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 18:01:05 +0500 Subject: [PATCH 410/657] Drop Python 3.9 support as it reached EOL --- .github/workflows/ci-black-formatting.yaml | 4 ++-- nix/build-all.py | 2 +- src/bsdd/pyproject.toml | 5 +++-- .../docs/ifcopenshell-python/installation.rst | 2 -- src/ifcopenshell-python/ifcopenshell/api/__init__.py | 3 ++- .../ifcopenshell/api/attribute/edit_attributes.py | 6 +----- .../ifcopenshell/api/project/append_asset.py | 3 ++- src/ifcopenshell-python/ifcopenshell/util/element.py | 4 ++-- src/ifcopenshell-python/ifcopenshell/util/mvd_info.py | 8 ++++---- src/ifcopenshell-python/ifcopenshell/util/selector.py | 6 +----- src/ifcopenshell-python/ifcopenshell/validate.py | 6 +----- src/ifcopenshell-python/pyproject.toml | 2 +- win/build-all-win.py | 2 +- 13 files changed, 21 insertions(+), 32 deletions(-) diff --git a/.github/workflows/ci-black-formatting.yaml b/.github/workflows/ci-black-formatting.yaml index 283acd56bc..90a0b95431 100644 --- a/.github/workflows/ci-black-formatting.yaml +++ b/.github/workflows/ci-black-formatting.yaml @@ -14,7 +14,7 @@ jobs: - name: Action - install python uses: actions/setup-python@v6 with: - python-version: "3.9" + python-version: "3.10" - name: Action - install python uses: actions/setup-python@v6 @@ -33,7 +33,7 @@ jobs: id: syntax-errors run: | ERROR=0 - python3.9 -W error -m compileall -q src/ifcopenshell-python || ERROR=1 + python3.10 -W error -m compileall -q src/ifcopenshell-python || ERROR=1 python3.11 -W error -m compileall -q src/bonsai || ERROR=1 exit $ERROR continue-on-error: true diff --git a/nix/build-all.py b/nix/build-all.py index 3bd12885c3..0b159d1e9f 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -139,7 +139,7 @@ PROJECT_NAME = "IfcOpenShell" USE_CURRENT_PYTHON_VERSION = os.getenv("USE_CURRENT_PYTHON_VERSION") ADD_COMMIT_SHA = os.getenv("ADD_COMMIT_SHA") -PYTHON_VERSIONS = ["3.9.11", "3.10.3", "3.11.8", "3.12.1", "3.13.6", "3.14.0"] +PYTHON_VERSIONS = ["3.10.3", "3.11.8", "3.12.1", "3.13.6", "3.14.0"] JSON_VERSION = "3.11.3" OCE_VERSION = "0.18.3" OCCT_VERSION = "7.8.1" diff --git a/src/bsdd/pyproject.toml b/src/bsdd/pyproject.toml index 76e0e5353a..d64d667a20 100644 --- a/src/bsdd/pyproject.toml +++ b/src/bsdd/pyproject.toml @@ -10,15 +10,16 @@ authors = [ ] description = "Library to interact with the buildingSMART Data Dictionary" readme = "README.md" -requires-python = ">=3.9" +requires-python = ">=3.10" keywords = ["IFC", "bSDD", "BIM"] classifiers = [ "Development Status :: 4 - Beta", "Programming Language :: Python", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst index 9ff9b917e2..8d75712f71 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst @@ -34,8 +34,6 @@ ZIP packages +-------------+---------------------------------+-------------------------------+---------------------------------+-----------------------------------+ | | Linux 64bit | Windows 64bit | MacOS Intel 64bit | MacOS Silicon 64bit | +=============+=================================+===============================+=================================+===================================+ - | Python 3.9 | :ios_python_url:`py39-linux64` | :ios_python_url:`py39-win64` | :ios_python_url:`py39-macos64` | :ios_python_url:`py39-macosm164` | - +-------------+---------------------------------+-------------------------------+---------------------------------+-----------------------------------+ | Python 3.10 | :ios_python_url:`py310-linux64` | :ios_python_url:`py310-win64` | :ios_python_url:`py310-macos64` | :ios_python_url:`py310-macosm164` | +-------------+---------------------------------+-------------------------------+---------------------------------+-----------------------------------+ | Python 3.11 | :ios_python_url:`py311-linux64` | :ios_python_url:`py311-win64` | :ios_python_url:`py311-macos64` | :ios_python_url:`py311-macosm164` | diff --git a/src/ifcopenshell-python/ifcopenshell/api/__init__.py b/src/ifcopenshell-python/ifcopenshell/api/__init__.py index 0eb95b2c65..85e60be9c2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/api/__init__.py @@ -43,7 +43,8 @@ import numpy import inspect import importlib import ifcopenshell -from typing import Callable, Any, Optional, TYPE_CHECKING +from collections.abc import Callable +from typing import Any, Optional, TYPE_CHECKING from functools import partial if TYPE_CHECKING: diff --git a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py index 6199ddf3b7..85cd3aa646 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py +++ b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py @@ -20,11 +20,7 @@ import sys import ifcopenshell.api.owner import ifcopenshell.util.element from typing import Any, Union - -if sys.version_info >= (3, 10): - from types import EllipsisType -else: - EllipsisType = type(...) +from types import EllipsisType def edit_attributes(file: ifcopenshell.file, product: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py index 22eb022e99..2de3352e79 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py @@ -27,7 +27,8 @@ import ifcopenshell.util.element import ifcopenshell.util.geolocation import ifcopenshell.util.placement import ifcopenshell.util.unit -from typing import Optional, Any, Union, Literal, get_args, Callable +from typing import Optional, Any, Union, Literal, get_args +from collections.abc import Callable from functools import partial diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index 067febd115..9421bc9760 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -20,8 +20,8 @@ import ifcopenshell import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.representation -from typing import Any, Callable, Optional, Union, Literal, overload -from collections.abc import Generator, Sequence +from typing import Any, Optional, Union, Literal, overload +from collections.abc import Callable, Generator, Sequence from collections import namedtuple diff --git a/src/ifcopenshell-python/ifcopenshell/util/mvd_info.py b/src/ifcopenshell-python/ifcopenshell/util/mvd_info.py index a4ca36039d..cae535698e 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/mvd_info.py +++ b/src/ifcopenshell-python/ifcopenshell/util/mvd_info.py @@ -26,7 +26,7 @@ try: except ImportError: LARK_AVAILABLE = False -from typing import Callable, Union +from typing import Union import re if LARK_AVAILABLE: @@ -51,9 +51,9 @@ if LARK_AVAILABLE: value: /[A-Za-z0-9 _\.-]+/ - other_keyword: /[^\[\]]+/ - - dynamic_option_word: /[^\[\]]+/ + other_keyword: /[^\[\]]+/ + + dynamic_option_word: /[^\[\]]+/ %import common.WS %ignore WS diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index a2ce6fb467..7b0acfef7f 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -37,11 +37,7 @@ import ifcopenshell.util.unit from decimal import Decimal from typing import Optional, Any, Union from collections.abc import Iterable - -if sys.version_info >= (3, 10): - from types import EllipsisType -else: - EllipsisType = type(...) +from types import EllipsisType filter_elements_grammar = lark.Lark( diff --git a/src/ifcopenshell-python/ifcopenshell/validate.py b/src/ifcopenshell-python/ifcopenshell/validate.py index 25f9b3a685..526d1a1db7 100644 --- a/src/ifcopenshell-python/ifcopenshell/validate.py +++ b/src/ifcopenshell-python/ifcopenshell/validate.py @@ -55,11 +55,7 @@ from collections import namedtuple from typing import Union, Any, Optional, TYPE_CHECKING from collections.abc import Iterator from logging import Logger, Handler - -if sys.version_info >= (3, 10): - from types import EllipsisType -else: - EllipsisType = type(...) +from types import EllipsisType import ifcopenshell import ifcopenshell.ifcopenshell_wrapper diff --git a/src/ifcopenshell-python/pyproject.toml b/src/ifcopenshell-python/pyproject.toml index 08f8c433fc..790891e350 100644 --- a/src/ifcopenshell-python/pyproject.toml +++ b/src/ifcopenshell-python/pyproject.toml @@ -10,7 +10,7 @@ authors = [ ] description = "Python bindings, utility functions, and high-level API for IfcOpenShell" readme = "README.md" -requires-python = ">=3.9,<3.15" +requires-python = ">=3.10,<3.15" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", diff --git a/win/build-all-win.py b/win/build-all-win.py index 5c2c6ababa..087f869ac4 100644 --- a/win/build-all-win.py +++ b/win/build-all-win.py @@ -11,7 +11,7 @@ from zipfile import ZipFile assert Path.cwd() == Path(__file__).parent, "Run this script from the 'win' directory." -PYTHON_VERSIONS = ["3.9.13", "3.10.3", "3.11.8", "3.12.1", "3.13.0", "3.14.0"] +PYTHON_VERSIONS = ["3.10.3", "3.11.8", "3.12.1", "3.13.0", "3.14.0"] REPO_PATH = Path(__file__).parent.parent REPO_WIN = REPO_PATH / "win" VERSION = (REPO_PATH / "VERSION").read_text().strip() From 5d42ded1549ced029c29b322a5464695d3036af4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 18:13:50 +0500 Subject: [PATCH 411/657] Fix unsorted `__all__` ruff check --- src/bonsai/bonsai/bim/module/drawing/gizmos.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/gizmos.py b/src/bonsai/bonsai/bim/module/drawing/gizmos.py index ef42c57dc6..3b25a0b12a 100644 --- a/src/bonsai/bonsai/bim/module/drawing/gizmos.py +++ b/src/bonsai/bonsai/bim/module/drawing/gizmos.py @@ -86,7 +86,7 @@ overlapping with geometry. The get_local_view_direction() helper determines if t camera is viewing from the positive or negative side of each axis. """ -__all__ = [ +__all__ = [ # noqa: RUF022 (unsorted `__all__`) "GizmoColor", "GizmoAxis", "TextAlignment", From b784cb06aee918f2e93041e17f9f89c67d0bbdaa Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 18:15:30 +0500 Subject: [PATCH 412/657] Revert "Make zip strict argument optional to support Python 3.9" This reverts commit 3bdce4fbc3586f754d3ef431adc7804c06feea82. --- src/ifc4d/ifc4d/wpattern.py | 5 +---- .../ifcopenshell/api/geometry/add_window_representation.py | 5 ++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/ifc4d/ifc4d/wpattern.py b/src/ifc4d/ifc4d/wpattern.py index cbadad53e0..2e434223d5 100644 --- a/src/ifc4d/ifc4d/wpattern.py +++ b/src/ifc4d/ifc4d/wpattern.py @@ -6,14 +6,11 @@ for each day as a key there is a list of working times with the format """ -import sys import re from datetime import time, datetime from typing import Any from ifc4d.common import WorkSlot -ZIP_STRICT = {} if sys.version_info < (3, 10) else {"strict": True} - class AstaCalendarWorkPattern: def get_keys(self, s: str) -> list[str]: @@ -123,7 +120,7 @@ class AstaCalendarWorkPattern: self.values = self.get_values(string) self.dict_wp: list[WorkSlot] = [] - for value, day_name in zip(self.values[1:], self.day_names, **ZIP_STRICT): + for value, day_name in zip(self.values[1:], self.day_names, strict=True): splt_data = value.strip().split(",") workhours: list[dict[str, Any]] = [] if len(splt_data) >= 7: diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py index 298ec18f70..6a1e487506 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py @@ -27,7 +27,6 @@ from ifcopenshell.util.shape_builder import ShapeBuilder, V from typing import Any, Optional, Literal, Union, overload DATACLASS_SLOTS = {} if sys.version_info < (3, 10) else {"slots": True} -ZIP_STRICT = {} if sys.version_info < (3, 10) else {"strict": True} # SCHEMAS describe panels setup # where: @@ -169,7 +168,7 @@ def window_l_shape_check( """`lining_thickness` and `lining_to_panel_offset_x` expected to be defined as a list, similarly to `create_ifc_window_frame_simple` `thickness` argument""" l_shape_check = lining_to_panel_offset_y_full < lining_depth and any( - x_offset < th for th, x_offset in zip(lining_thickness, lining_to_panel_offset_x, **ZIP_STRICT) + x_offset < th for th, x_offset in zip(lining_thickness, lining_to_panel_offset_x, strict=True) ) return l_shape_check @@ -211,7 +210,7 @@ def create_ifc_window( second_lining_size = lining_size.copy() second_lining_size[np_Y] = lining_size[np_Y] - lining_to_panel_offset_y_full second_lining_position = V(0, lining_to_panel_offset_y_full, 0) - second_lining_thickness = [min(th, x_offset) for th, x_offset in zip(lining_thickness, x_offsets, **ZIP_STRICT)] + second_lining_thickness = [min(th, x_offset) for th, x_offset in zip(lining_thickness, x_offsets, strict=True)] second_lining_items = create_ifc_window_frame_simple( builder, second_lining_size, second_lining_thickness, second_lining_position From 29176330e8a2728490726e0016437c94ab2e4432 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 18:17:19 +0500 Subject: [PATCH 413/657] Revert "Make dataclasses args optional to support Python 3.9 #6725" This reverts commit ad7473ff1fcb836545782cd87585c4c0ae2df6d1. --- src/bcf/bcf/v2/model/extensions.py | 20 ++++----- src/bcf/bcf/v2/model/markup.py | 23 +++++----- src/bcf/bcf/v2/model/project.py | 7 +-- src/bcf/bcf/v2/model/version.py | 5 +-- src/bcf/bcf/v2/model/visinfo.py | 39 ++++++++-------- src/bcf/bcf/v3/model/documents.py | 9 ++-- src/bcf/bcf/v3/model/extensions.py | 19 ++++---- src/bcf/bcf/v3/model/markup.py | 37 +++++++--------- src/bcf/bcf/v3/model/project.py | 7 +-- src/bcf/bcf/v3/model/version.py | 5 +-- src/bcf/bcf/v3/model/visinfo.py | 44 +++++++++---------- .../api/geometry/add_door_representation.py | 7 +-- .../api/geometry/add_window_representation.py | 6 +-- 13 files changed, 94 insertions(+), 134 deletions(-) diff --git a/src/bcf/bcf/v2/model/extensions.py b/src/bcf/bcf/v2/model/extensions.py index bf28512100..e50277570e 100644 --- a/src/bcf/bcf/v2/model/extensions.py +++ b/src/bcf/bcf/v2/model/extensions.py @@ -14,15 +14,11 @@ # Currently extensions support for v2 is only read-only. -import sys from dataclasses import dataclass, field, fields from typing import Optional -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsPriorities: class Meta: global_type = False @@ -39,7 +35,7 @@ class ExtensionsPriorities: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsSnippetTypes: class Meta: global_type = False @@ -56,7 +52,7 @@ class ExtensionsSnippetTypes: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsStages: class Meta: global_type = False @@ -73,7 +69,7 @@ class ExtensionsStages: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsTopicLabels: class Meta: global_type = False @@ -90,7 +86,7 @@ class ExtensionsTopicLabels: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsTopicStatuses: class Meta: global_type = False @@ -107,7 +103,7 @@ class ExtensionsTopicStatuses: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsTopicTypes: class Meta: global_type = False @@ -124,7 +120,7 @@ class ExtensionsTopicTypes: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsUsers: class Meta: global_type = False @@ -141,7 +137,7 @@ class ExtensionsUsers: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Extensions: topic_types: Optional[ExtensionsTopicTypes] = field( default=None, diff --git a/src/bcf/bcf/v2/model/markup.py b/src/bcf/bcf/v2/model/markup.py index f91d8fe8dc..9027d5b280 100644 --- a/src/bcf/bcf/v2/model/markup.py +++ b/src/bcf/bcf/v2/model/markup.py @@ -1,13 +1,10 @@ -import sys from dataclasses import dataclass, field from typing import Optional from xsdata.models.datatype import XmlDateTime -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class BimSnippet: reference: str = field( metadata={ @@ -41,7 +38,7 @@ class BimSnippet: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class CommentViewpoint: class Meta: global_type = False @@ -56,7 +53,7 @@ class CommentViewpoint: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class HeaderFile: class Meta: global_type = False @@ -112,7 +109,7 @@ class HeaderFile: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicDocumentReference: class Meta: global_type = False @@ -150,7 +147,7 @@ class TopicDocumentReference: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicRelatedTopic: class Meta: global_type = False @@ -165,7 +162,7 @@ class TopicRelatedTopic: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ViewPoint: viewpoint: Optional[str] = field( default=None, @@ -201,7 +198,7 @@ class ViewPoint: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Comment: date: XmlDateTime = field( metadata={ @@ -261,7 +258,7 @@ class Comment: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Header: file: list[HeaderFile] = field( default_factory=list, @@ -274,7 +271,7 @@ class Header: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Topic: reference_link: list[str] = field( default_factory=list, @@ -428,7 +425,7 @@ class Topic: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Markup: header: Optional[Header] = field( default=None, diff --git a/src/bcf/bcf/v2/model/project.py b/src/bcf/bcf/v2/model/project.py index a27afb7cd6..e86fb9b009 100644 --- a/src/bcf/bcf/v2/model/project.py +++ b/src/bcf/bcf/v2/model/project.py @@ -1,11 +1,8 @@ -import sys from dataclasses import dataclass, field from typing import Optional -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Project: name: Optional[str] = field( default=None, @@ -24,7 +21,7 @@ class Project: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ProjectExtension: project: Optional[Project] = field( default=None, diff --git a/src/bcf/bcf/v2/model/version.py b/src/bcf/bcf/v2/model/version.py index ea9331bc36..9f55ad5bf9 100644 --- a/src/bcf/bcf/v2/model/version.py +++ b/src/bcf/bcf/v2/model/version.py @@ -1,11 +1,8 @@ -import sys from dataclasses import dataclass, field from typing import Optional -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Version: detailed_version: Optional[str] = field( default=None, diff --git a/src/bcf/bcf/v2/model/visinfo.py b/src/bcf/bcf/v2/model/visinfo.py index 3615609881..3d4debbcbd 100644 --- a/src/bcf/bcf/v2/model/visinfo.py +++ b/src/bcf/bcf/v2/model/visinfo.py @@ -1,17 +1,14 @@ -import sys from dataclasses import dataclass, field from enum import Enum from typing import Optional -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - class BitmapFormat(Enum): PNG = "PNG" JPG = "JPG" -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Component: originating_system: Optional[str] = field( default=None, @@ -38,7 +35,7 @@ class Component: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Direction: x: float = field( metadata={ @@ -63,7 +60,7 @@ class Direction: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Point: x: float = field( metadata={ @@ -88,7 +85,7 @@ class Point: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ViewSetupHints: spaces_visible: Optional[bool] = field( default=None, @@ -113,7 +110,7 @@ class ViewSetupHints: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ClippingPlane: location: Point = field( metadata={ @@ -131,7 +128,7 @@ class ClippingPlane: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentColoringColor: class Meta: global_type = False @@ -154,7 +151,7 @@ class ComponentColoringColor: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentSelection: component: list[Component] = field( default_factory=list, @@ -166,7 +163,7 @@ class ComponentSelection: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentVisibilityExceptions: class Meta: global_type = False @@ -181,7 +178,7 @@ class ComponentVisibilityExceptions: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Line: start_point: Point = field( metadata={ @@ -199,7 +196,7 @@ class Line: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class OrthogonalCamera: """ Attributes @@ -239,7 +236,7 @@ class OrthogonalCamera: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class PerspectiveCamera: """ Attributes @@ -284,7 +281,7 @@ class PerspectiveCamera: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class VisualizationInfoBitmap: class Meta: global_type = False @@ -333,7 +330,7 @@ class VisualizationInfoBitmap: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentColoring: color: list[ComponentColoringColor] = field( default_factory=list, @@ -345,7 +342,7 @@ class ComponentColoring: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentVisibility: exceptions: Optional[ComponentVisibilityExceptions] = field( default=None, @@ -363,7 +360,7 @@ class ComponentVisibility: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class VisualizationInfoClippingPlanes: class Meta: global_type = False @@ -377,7 +374,7 @@ class VisualizationInfoClippingPlanes: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class VisualizationInfoLines: class Meta: global_type = False @@ -392,7 +389,7 @@ class VisualizationInfoLines: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Components: view_setup_hints: Optional[ViewSetupHints] = field( default=None, @@ -424,7 +421,7 @@ class Components: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class VisualizationInfo: """ VisualizationInfo documentation. diff --git a/src/bcf/bcf/v3/model/documents.py b/src/bcf/bcf/v3/model/documents.py index 2e2de1f5ea..65a3615e7c 100644 --- a/src/bcf/bcf/v3/model/documents.py +++ b/src/bcf/bcf/v3/model/documents.py @@ -1,11 +1,8 @@ -import sys from dataclasses import dataclass, field from typing import Optional -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Document: filename: str = field( metadata={ @@ -37,7 +34,7 @@ class Document: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class DocumentInfoDocuments: class Meta: global_type = False @@ -52,7 +49,7 @@ class DocumentInfoDocuments: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class DocumentInfo: documents: Optional[DocumentInfoDocuments] = field( default=None, diff --git a/src/bcf/bcf/v3/model/extensions.py b/src/bcf/bcf/v3/model/extensions.py index 12d3d4dbfd..48aef2243b 100644 --- a/src/bcf/bcf/v3/model/extensions.py +++ b/src/bcf/bcf/v3/model/extensions.py @@ -1,11 +1,8 @@ -import sys from dataclasses import dataclass, field from typing import Optional -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsPriorities: class Meta: global_type = False @@ -22,7 +19,7 @@ class ExtensionsPriorities: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsSnippetTypes: class Meta: global_type = False @@ -39,7 +36,7 @@ class ExtensionsSnippetTypes: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsStages: class Meta: global_type = False @@ -56,7 +53,7 @@ class ExtensionsStages: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsTopicLabels: class Meta: global_type = False @@ -73,7 +70,7 @@ class ExtensionsTopicLabels: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsTopicStatuses: class Meta: global_type = False @@ -90,7 +87,7 @@ class ExtensionsTopicStatuses: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsTopicTypes: class Meta: global_type = False @@ -107,7 +104,7 @@ class ExtensionsTopicTypes: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ExtensionsUsers: class Meta: global_type = False @@ -124,7 +121,7 @@ class ExtensionsUsers: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Extensions: topic_types: Optional[ExtensionsTopicTypes] = field( default=None, diff --git a/src/bcf/bcf/v3/model/markup.py b/src/bcf/bcf/v3/model/markup.py index 96b656b09d..bcd985af34 100644 --- a/src/bcf/bcf/v3/model/markup.py +++ b/src/bcf/bcf/v3/model/markup.py @@ -1,13 +1,10 @@ -import sys from dataclasses import dataclass, field from typing import Optional from xsdata.models.datatype import XmlDateTime -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class BimSnippet: reference: str = field( metadata={ @@ -47,7 +44,7 @@ class BimSnippet: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class CommentViewpoint: class Meta: global_type = False @@ -62,7 +59,7 @@ class CommentViewpoint: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class DocumentReference: document_guid: Optional[str] = field( default=None, @@ -103,7 +100,7 @@ class DocumentReference: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class File: filename: Optional[str] = field( default=None, @@ -160,7 +157,7 @@ class File: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicLabels: class Meta: global_type = False @@ -177,7 +174,7 @@ class TopicLabels: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicReferenceLinks: class Meta: global_type = False @@ -194,7 +191,7 @@ class TopicReferenceLinks: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicRelatedTopicsRelatedTopic: class Meta: global_type = False @@ -209,7 +206,7 @@ class TopicRelatedTopicsRelatedTopic: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ViewPoint: viewpoint: Optional[str] = field( default=None, @@ -249,7 +246,7 @@ class ViewPoint: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Comment: date: XmlDateTime = field( metadata={ @@ -315,7 +312,7 @@ class Comment: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class HeaderFiles: class Meta: global_type = False @@ -330,7 +327,7 @@ class HeaderFiles: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicDocumentReferences: class Meta: global_type = False @@ -345,7 +342,7 @@ class TopicDocumentReferences: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicRelatedTopics: class Meta: global_type = False @@ -360,7 +357,7 @@ class TopicRelatedTopics: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicViewpoints: class Meta: global_type = False @@ -375,7 +372,7 @@ class TopicViewpoints: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Header: files: Optional[HeaderFiles] = field( default=None, @@ -387,7 +384,7 @@ class Header: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class TopicComments: class Meta: global_type = False @@ -402,7 +399,7 @@ class TopicComments: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Topic: reference_links: Optional[TopicReferenceLinks] = field( default=None, @@ -599,7 +596,7 @@ class Topic: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Markup: header: Optional[Header] = field( default=None, diff --git a/src/bcf/bcf/v3/model/project.py b/src/bcf/bcf/v3/model/project.py index ff07fa2c08..76a6922925 100644 --- a/src/bcf/bcf/v3/model/project.py +++ b/src/bcf/bcf/v3/model/project.py @@ -1,11 +1,8 @@ -import sys from dataclasses import dataclass, field from typing import Optional -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Project: name: Optional[str] = field( default=None, @@ -28,7 +25,7 @@ class Project: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ProjectInfo: project: Project = field( metadata={ diff --git a/src/bcf/bcf/v3/model/version.py b/src/bcf/bcf/v3/model/version.py index dd8cc713e3..f3a44d2ab3 100644 --- a/src/bcf/bcf/v3/model/version.py +++ b/src/bcf/bcf/v3/model/version.py @@ -1,10 +1,7 @@ -import sys from dataclasses import dataclass, field -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Version: version_id: str = field( metadata={ diff --git a/src/bcf/bcf/v3/model/visinfo.py b/src/bcf/bcf/v3/model/visinfo.py index 43a00f33d3..e2fa3d06d7 100644 --- a/src/bcf/bcf/v3/model/visinfo.py +++ b/src/bcf/bcf/v3/model/visinfo.py @@ -1,18 +1,14 @@ -import sys from dataclasses import dataclass, field from enum import Enum from typing import Optional -DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} - - class BitmapFormat(Enum): PNG = "png" JPG = "jpg" -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Component: originating_system: Optional[str] = field( default=None, @@ -43,7 +39,7 @@ class Component: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Direction: x: float = field( metadata={ @@ -68,7 +64,7 @@ class Direction: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Point: x: float = field( metadata={ @@ -93,7 +89,7 @@ class Point: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ViewSetupHints: spaces_visible: bool = field( default=False, @@ -118,7 +114,7 @@ class ViewSetupHints: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Bitmap: format: BitmapFormat = field( metadata={ @@ -166,7 +162,7 @@ class Bitmap: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ClippingPlane: location: Point = field( metadata={ @@ -184,7 +180,7 @@ class ClippingPlane: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentColoringColorComponents: class Meta: global_type = False @@ -199,7 +195,7 @@ class ComponentColoringColorComponents: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentSelection: component: list[Component] = field( default_factory=list, @@ -210,7 +206,7 @@ class ComponentSelection: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentVisibilityExceptions: class Meta: global_type = False @@ -224,7 +220,7 @@ class ComponentVisibilityExceptions: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Line: start_point: Point = field( metadata={ @@ -242,7 +238,7 @@ class Line: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class OrthogonalCamera: """ Attributes @@ -292,7 +288,7 @@ class OrthogonalCamera: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class PerspectiveCamera: """ Attributes @@ -348,7 +344,7 @@ class PerspectiveCamera: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentColoringColor: class Meta: global_type = False @@ -370,7 +366,7 @@ class ComponentColoringColor: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentVisibility: view_setup_hints: Optional[ViewSetupHints] = field( default=None, @@ -395,7 +391,7 @@ class ComponentVisibility: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class VisualizationInfoBitmaps: class Meta: global_type = False @@ -409,7 +405,7 @@ class VisualizationInfoBitmaps: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class VisualizationInfoClippingPlanes: class Meta: global_type = False @@ -423,7 +419,7 @@ class VisualizationInfoClippingPlanes: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class VisualizationInfoLines: class Meta: global_type = False @@ -437,7 +433,7 @@ class VisualizationInfoLines: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class ComponentColoring: color: list[ComponentColoringColor] = field( default_factory=list, @@ -448,7 +444,7 @@ class ComponentColoring: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class Components: selection: Optional[ComponentSelection] = field( default=None, @@ -473,7 +469,7 @@ class Components: ) -@dataclass(**DATACLASS_KWARGS) +@dataclass(slots=True, kw_only=True) class VisualizationInfo: """ VisualizationInfo documentation. diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_door_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_door_representation.py index d91b7b0327..fc60a25bbc 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_door_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_door_representation.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations -import sys import ifcopenshell.util.unit import ifcopenshell.api.geometry import dataclasses @@ -27,8 +26,6 @@ from ifcopenshell.api.geometry.add_window_representation import create_ifc_windo from math import cos, radians from typing import Any, Optional, Literal, Union, get_args, overload -DATACLASS_SLOTS = {} if sys.version_info < (3, 10) else {"slots": True} - DOOR_TYPE = Literal[ "SINGLE_SWING_LEFT", @@ -99,7 +96,7 @@ def create_ifc_box( # we use dataclass as we need default values for arguments # it's okay to use slots since we don't need dynamic attributes -@dataclasses.dataclass(**DATACLASS_SLOTS) +@dataclasses.dataclass(slots=True) class DoorLiningProperties: LiningDepth: Optional[float] = None """Optional, defaults to 50mm.""" @@ -173,7 +170,7 @@ class DoorLiningProperties: setattr(self, attr, default_value * si_conversion) -@dataclasses.dataclass(**DATACLASS_SLOTS) +@dataclasses.dataclass(slots=True) class DoorPanelProperties: PanelDepth: Optional[float] = None """Frame thickness by Y axis. Optional, defaults to 35 mm.""" diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py index 6a1e487506..d1ef540ab0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations -import sys import numpy as np import dataclasses import ifcopenshell.api.geometry @@ -26,7 +25,6 @@ from itertools import chain from ifcopenshell.util.shape_builder import ShapeBuilder, V from typing import Any, Optional, Literal, Union, overload -DATACLASS_SLOTS = {} if sys.version_info < (3, 10) else {"slots": True} # SCHEMAS describe panels setup # where: @@ -240,7 +238,7 @@ def create_ifc_window( # we use dataclass as we need default values for arguments # it's okay to use slots since we don't need dynamic attributes -@dataclasses.dataclass(**DATACLASS_SLOTS) +@dataclasses.dataclass(slots=True) class WindowLiningProperties: LiningDepth: Optional[float] = None """Optional, defaults to 50mm.""" @@ -323,7 +321,7 @@ class WindowLiningProperties: setattr(self, attr, default_value * si_conversion) -@dataclasses.dataclass(**DATACLASS_SLOTS) +@dataclasses.dataclass(slots=True) class WindowPanelProperties: FrameDepth: Optional[float] = None """Frame thickness by Y axis. Optional, defaults to 35 mm.""" From 13be6ccd45a3788062c8dde7d9cfe12db25e9734 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 18:53:04 +0500 Subject: [PATCH 414/657] Sort imports --- .github/workflows/check_repo_ci_jobs.py | 4 +- aws/lambda/example_handler/__init__.py | 2 +- choco/bonsai/choco_release.py | 5 ++- .../bonsai/tools/disable_blenderbim_addon.py | 1 - choco/bonsai/tools/enable_blenderbim_addon.py | 1 - conda/update_version_init.py | 3 +- docs/conf.py | 1 + docs/generate_docs.py | 4 +- nix/build-all.py | 25 +++++------ pyodide/cache_dependencies.py | 3 +- pyodide/test/test_wheel.py | 1 - pyproject.toml | 1 + src/bcf/bcf/agnostic/extensions.py | 5 ++- src/bcf/bcf/agnostic/model.py | 3 +- src/bcf/bcf/agnostic/topic.py | 7 +-- src/bcf/bcf/agnostic/visinfo.py | 5 ++- src/bcf/bcf/bcfxml.py | 1 - src/bcf/bcf/inmemory_zipfile.py | 1 + src/bcf/bcf/v2/bcfxml.py | 1 + src/bcf/bcf/v2/topic.py | 1 + src/bcf/bcf/v2/visinfo.py | 6 +-- src/bcf/bcf/v3/bcfxml.py | 1 + src/bcf/bcf/v3/topic.py | 1 + src/bcf/bcf/v3/visinfo.py | 6 +-- src/bcf/tests/conftest.py | 1 - src/bcf/tests/v2/test_bcf_xml.py | 3 +- src/bcf/tests/v2/test_example_files.py | 3 +- src/bcf/tests/v2/test_ifcclash_api.py | 1 - src/bcf/tests/v3/test_bcf_xml.py | 3 +- src/bcf/tests/v3/test_example_files.py | 3 +- src/bcf/tests/v3/test_ifcclash_api.py | 1 - src/bonsai/pyproject.toml | 5 +++ src/bsdd/bsdd.py | 10 ++--- src/bsdd/bsdd_json.py | 10 +++-- src/bsdd/type_hints.py | 1 - src/bsdd/yml_to_classes.py | 2 +- src/ifc2ca/_deprecated/ca2ifc.py | 5 ++- .../_deprecated/scriptCodeAsterBonded.py | 5 ++- src/ifc2ca/_deprecated/scriptSalomeBonded.py | 14 +++--- src/ifc2ca/ifc2ca.py | 1 + src/ifc4d/__main__.py | 7 ++- src/ifc4d/ifc4d/common.py | 6 ++- src/ifc4d/ifc4d/csv2ifc.py | 13 +++--- src/ifc4d/ifc4d/csv4d2ifc.py | 5 ++- src/ifc4d/ifc4d/ifc2msp.py | 5 ++- src/ifc4d/ifc4d/ifc2p6.py | 6 ++- src/ifc4d/ifc4d/msp2ifc.py | 5 ++- src/ifc4d/ifc4d/p62ifc.py | 6 ++- src/ifc4d/ifc4d/p6xer2ifc.py | 6 ++- src/ifc4d/ifc4d/pp2ifc.py | 11 ++--- src/ifc4d/ifc4d/wpattern.py | 3 +- src/ifc5d/ifc5d/csv2ifc.py | 14 +++--- src/ifc5d/ifc5d/ifc2json.py | 6 +-- src/ifc5d/ifc5d/ifc5Dspreadsheet.py | 24 ++++++----- src/ifc5d/ifc5d/qto.py | 17 ++++---- src/ifc5d/test/test_csv2ifc.py | 11 ++--- src/ifcbimtester/bimtester/__init__.py | 3 +- src/ifcbimtester/bimtester/clean.py | 3 +- .../bimtester/features/environment.py | 9 ++-- .../features/steps/aggregation/en.py | 3 +- .../bimtester/features/steps/all.py | 2 +- .../features/steps/application/en.py | 1 - .../steps/attributes_eleclasses/en.py | 2 - .../features/steps/attributes_psets/en.py | 5 +-- .../features/steps/classification/en.py | 2 +- .../features/steps/element_classes/en.py | 1 - .../bimtester/features/steps/geocoding/en.py | 1 - .../features/steps/geolocation/en.py | 7 ++- .../features/steps/geometric_detail/en.py | 1 - .../features/steps/model_federation/en.py | 2 - .../features/steps/project_setup/en.py | 1 - .../features/steps/spatial_structure/en.py | 1 - src/ifcbimtester/bimtester/guiwidget.py | 8 ++-- src/ifcbimtester/bimtester/reports.py | 4 +- src/ifcbimtester/bimtester/run.py | 16 ++++--- src/ifcbimtester/bimtester/util.py | 4 +- src/ifcbimtester/cli.py | 3 +- .../examples/steps/aggregation.py | 2 +- .../examples/steps/attributes_eleclasses.py | 2 - src/ifcbimtester/gui.py | 1 - .../io_import_scene_ifc/__init__.py | 11 ++--- src/ifccityjson/ifccityjson/__main__.py | 2 + .../ifccityjson/cityjson2ifc/cityjson2ifc.py | 5 ++- src/ifcclash/ifcclash/__main__.py | 5 ++- src/ifcclash/ifcclash/ifcclash.py | 13 +++--- src/ifcclash/make.py | 1 - src/ifccsv/ifccsv.py | 15 ++++--- src/ifcdiff/ifcdiff.py | 16 +++---- src/ifcdiff/test.py | 3 +- src/ifcfm/ifcfm/__init__.py | 14 +++--- src/ifcfm/ifcfm/__main__.py | 4 +- src/ifcfm/ifcfm/basic.py | 3 +- src/ifcfm/ifcfm/cobie24.py | 6 +-- src/ifcfm/ifcfm/cobie24legacy.py | 4 +- .../ifcopenshell/__init__.py | 17 ++++---- .../ifcopenshell/api/__init__.py | 16 ++++--- .../api/aggregate/assign_object.py | 5 ++- .../ifcopenshell/api/alignment/__init__.py | 27 ++++++------ .../api/alignment/_add_segment_to_curve.py | 22 +++++++--- .../api/alignment/_add_segment_to_layout.py | 16 ++++--- .../api/alignment/_add_zero_length_segment.py | 5 ++- .../_create_geometric_representation.py | 6 +-- .../_create_offset_curve_representation.py | 6 +-- .../_create_polyline_representation.py | 6 +-- .../api/alignment/_get_cant_segment.py | 6 +-- .../_get_segment_start_point_label.py | 4 +- .../alignment/_map_alignment_cant_segment.py | 5 ++- .../_map_alignment_horizontal_segment.py | 8 ++-- .../_map_alignment_vertical_segment.py | 8 ++-- .../_update_curve_segment_transition_code.py | 9 ++-- .../api/alignment/add_stationing_referent.py | 6 +-- .../api/alignment/add_vertical_layout.py | 3 +- .../api/alignment/add_zero_length_segment.py | 27 ++++++++---- .../ifcopenshell/api/alignment/create.py | 6 +-- .../api/alignment/create_as_offset_curve.py | 10 ++--- .../api/alignment/create_as_polyline.py | 12 +++--- .../api/alignment/create_by_pi_method.py | 3 +- .../api/alignment/create_from_csv.py | 13 +++--- .../api/alignment/create_layout_segment.py | 12 +++--- .../api/alignment/create_representation.py | 5 ++- .../create_segment_representations.py | 2 +- .../api/alignment/get_alignment_layouts.py | 6 +-- .../api/alignment/get_axis_subcontext.py | 2 +- .../api/alignment/get_basis_curve.py | 3 +- .../api/alignment/get_child_alignments.py | 6 +-- .../ifcopenshell/api/alignment/get_curve.py | 3 +- .../get_curve_segment_transition_code.py | 9 ++-- .../api/alignment/get_layout_segments.py | 6 +-- .../api/alignment/get_mapped_segments.py | 3 +- .../api/alignment/get_parent_alignment.py | 3 +- ...ayout_horizontal_alignment_by_pi_method.py | 7 ++- .../layout_vertical_alignment_by_pi_method.py | 6 +-- .../api/alignment/update_fallback_position.py | 3 +- .../ifcopenshell/api/alignment/util.py | 6 +-- .../api/attribute/edit_attributes.py | 5 ++- .../boundary/assign_connection_geometry.py | 6 ++- .../api/boundary/edit_attributes.py | 3 +- .../api/classification/add_classification.py | 5 ++- .../api/classification/add_reference.py | 3 +- .../api/classification/edit_classification.py | 3 +- .../api/classification/edit_reference.py | 3 +- .../ifcopenshell/api/cogo/__init__.py | 2 +- .../ifcopenshell/api/cogo/add_survey_point.py | 3 +- .../api/cogo/assign_survey_point.py | 3 +- .../api/cogo/edit_survey_point.py | 3 +- .../api/constraint/assign_constraint.py | 3 +- .../api/constraint/edit_metric.py | 3 +- .../api/constraint/edit_objective.py | 3 +- .../ifcopenshell/api/context/add_context.py | 3 +- .../ifcopenshell/api/context/edit_context.py | 3 +- .../api/control/assign_control.py | 3 +- .../ifcopenshell/api/cost/add_cost_item.py | 9 ++-- .../api/cost/add_cost_schedule.py | 5 ++- .../api/cost/assign_cost_item_quantity.py | 5 ++- .../ifcopenshell/api/cost/copy_cost_item.py | 3 +- .../api/cost/copy_cost_item_values.py | 2 +- .../ifcopenshell/api/cost/edit_cost_item.py | 3 +- .../api/cost/edit_cost_item_quantity.py | 3 +- .../api/cost/edit_cost_schedule.py | 3 +- .../ifcopenshell/api/cost/edit_cost_value.py | 7 +-- .../api/cost/edit_cost_value_formula.py | 5 ++- .../api/document/add_information.py | 7 +-- .../api/document/assign_document.py | 3 +- .../api/document/edit_information.py | 3 +- .../api/document/edit_reference.py | 3 +- .../api/drawing/edit_text_literal.py | 3 +- .../ifcopenshell/api/feature/add_feature.py | 4 +- .../api/feature/remove_feature.py | 2 +- .../api/geometry/add_axis_representation.py | 3 +- .../ifcopenshell/api/geometry/add_boolean.py | 4 +- .../api/geometry/add_door_representation.py | 18 ++++---- .../api/geometry/add_mesh_representation.py | 8 ++-- .../geometry/add_profile_representation.py | 3 +- .../geometry/add_railing_representation.py | 16 ++++--- .../api/geometry/add_representation.py | 15 ++++--- .../api/geometry/add_shape_aspect.py | 3 +- .../api/geometry/add_slab_representation.py | 5 ++- .../api/geometry/add_wall_representation.py | 5 ++- .../api/geometry/add_window_representation.py | 10 +++-- .../api/geometry/assign_representation.py | 7 +-- .../api/geometry/connect_element.py | 3 +- .../ifcopenshell/api/geometry/connect_path.py | 3 +- .../ifcopenshell/api/geometry/connect_wall.py | 4 +- .../api/geometry/create_2pt_wall.py | 4 +- .../api/geometry/disconnect_path.py | 3 +- .../api/geometry/edit_object_placement.py | 6 ++- .../regenerate_wall_representation.py | 8 ++-- .../api/geometry/unassign_representation.py | 3 +- .../api/geometry/validate_type.py | 3 +- .../api/georeference/edit_georeferencing.py | 3 +- .../api/georeference/edit_true_north.py | 3 +- .../ifcopenshell/api/georeference/edit_wcs.py | 6 ++- .../ifcopenshell/api/grid/__init__.py | 1 - .../api/grid/create_axis_curve.py | 13 ++++-- .../ifcopenshell/api/grid/create_grid_axis.py | 3 +- .../ifcopenshell/api/group/add_group.py | 3 +- .../ifcopenshell/api/group/assign_group.py | 3 +- .../ifcopenshell/api/group/edit_group.py | 3 +- .../ifcopenshell/api/layer/add_layer.py | 3 +- .../api/layer/add_layer_with_style.py | 5 ++- .../ifcopenshell/api/layer/edit_layer.py | 3 +- .../ifcopenshell/api/library/add_library.py | 2 +- .../api/library/assign_reference.py | 3 +- .../ifcopenshell/api/library/edit_library.py | 5 ++- .../api/library/edit_reference.py | 3 +- .../api/library/unassign_reference.py | 2 +- .../api/material/add_constituent.py | 3 +- .../ifcopenshell/api/material/add_layer.py | 3 +- .../ifcopenshell/api/material/add_material.py | 3 +- .../api/material/add_material_set.py | 2 +- .../ifcopenshell/api/material/add_profile.py | 3 +- .../api/material/assign_material.py | 7 +-- .../api/material/assign_profile.py | 3 +- .../api/material/edit_assigned_material.py | 3 +- .../api/material/edit_constituent.py | 3 +- .../ifcopenshell/api/material/edit_layer.py | 3 +- .../api/material/edit_layer_usage.py | 3 +- .../api/material/edit_material.py | 3 +- .../ifcopenshell/api/material/edit_profile.py | 1 + .../api/material/edit_profile_usage.py | 3 +- .../material/set_shape_aspect_constituents.py | 2 +- .../api/material/unassign_material.py | 3 +- .../ifcopenshell/api/nest/assign_object.py | 3 +- .../ifcopenshell/api/owner/add_actor.py | 4 +- .../ifcopenshell/api/owner/add_address.py | 2 +- .../ifcopenshell/api/owner/add_application.py | 3 +- .../api/owner/create_owner_history.py | 3 +- .../ifcopenshell/api/owner/edit_actor.py | 3 +- .../ifcopenshell/api/owner/edit_address.py | 3 +- .../api/owner/edit_application.py | 3 +- .../api/owner/edit_organisation.py | 3 +- .../ifcopenshell/api/owner/edit_person.py | 3 +- .../ifcopenshell/api/owner/edit_role.py | 3 +- .../api/owner/remove_organisation.py | 2 +- .../ifcopenshell/api/owner/remove_person.py | 2 +- .../ifcopenshell/api/owner/settings.py | 3 +- .../api/owner/update_owner_history.py | 3 +- .../api/profile/add_arbitrary_profile.py | 8 ++-- .../add_arbitrary_profile_with_voids.py | 8 ++-- .../api/profile/add_parameterized_profile.py | 2 +- .../ifcopenshell/api/profile/edit_profile.py | 3 +- .../ifcopenshell/api/project/append_asset.py | 16 +++---- .../api/project/assign_declaration.py | 3 +- .../ifcopenshell/api/project/create_file.py | 1 + .../ifcopenshell/api/pset/add_pset.py | 3 +- .../ifcopenshell/api/pset/add_qto.py | 3 +- .../ifcopenshell/api/pset/assign_pset.py | 3 +- .../ifcopenshell/api/pset/edit_pset.py | 3 +- .../ifcopenshell/api/pset/edit_qto.py | 6 ++- .../api/pset_template/add_prop_template.py | 3 +- .../api/pset_template/edit_prop_template.py | 3 +- .../api/pset_template/edit_pset_template.py | 3 +- .../ifcopenshell/api/resource/add_resource.py | 5 ++- .../api/resource/calculate_resource_usage.py | 1 + .../api/resource/edit_resource.py | 3 +- .../api/resource/edit_resource_quantity.py | 3 +- .../api/resource/edit_resource_time.py | 3 +- .../ifcopenshell/api/root/copy_class.py | 7 +-- .../ifcopenshell/api/root/create_entity.py | 3 +- .../ifcopenshell/api/root/reassign_class.py | 9 ++-- .../ifcopenshell/api/root/remove_product.py | 12 +++--- .../api/sequence/add_date_time.py | 3 +- .../ifcopenshell/api/sequence/add_task.py | 9 ++-- .../api/sequence/add_time_period.py | 6 +-- .../api/sequence/add_work_calendar.py | 2 +- .../api/sequence/add_work_plan.py | 9 ++-- .../api/sequence/add_work_schedule.py | 10 ++--- .../api/sequence/add_work_time.py | 3 +- .../api/sequence/assign_work_plan.py | 7 +-- .../api/sequence/calculate_task_duration.py | 3 +- .../api/sequence/cascade_schedule.py | 3 +- .../api/sequence/create_baseline.py | 5 ++- .../api/sequence/duplicate_task.py | 2 +- .../api/sequence/edit_lag_time.py | 3 +- .../api/sequence/edit_recurrence_pattern.py | 3 +- .../api/sequence/edit_sequence.py | 3 +- .../ifcopenshell/api/sequence/edit_task.py | 3 +- .../api/sequence/edit_task_time.py | 5 ++- .../api/sequence/edit_work_calendar.py | 3 +- .../api/sequence/edit_work_plan.py | 3 +- .../api/sequence/edit_work_schedule.py | 3 +- .../api/sequence/edit_work_time.py | 3 +- .../api/sequence/recalculate_schedule.py | 2 + .../ifcopenshell/api/sequence/remove_task.py | 2 +- .../api/sequence/remove_work_plan.py | 2 +- .../api/sequence/remove_work_schedule.py | 2 +- .../api/spatial/assign_container.py | 9 ++-- .../api/spatial/reference_structure.py | 3 +- .../ifcopenshell/api/structural/__init__.py | 4 +- .../api/structural/add_structural_activity.py | 3 +- .../add_structural_boundary_condition.py | 3 +- .../api/structural/add_structural_load.py | 3 +- .../assign_structural_analysis_model.py | 3 +- .../edit_structural_analysis_model.py | 3 +- .../edit_structural_boundary_condition.py | 3 +- .../api/structural/edit_structural_load.py | 3 +- .../structural/edit_structural_load_case.py | 3 +- .../remove_structural_boundary_condition.py | 3 +- .../ifcopenshell/api/style/add_style.py | 3 +- .../api/style/add_surface_style.py | 4 +- .../api/style/add_surface_textures.py | 4 +- .../api/style/assign_item_style.py | 3 +- .../api/style/assign_material_style.py | 3 +- .../api/style/assign_representation_styles.py | 3 +- .../api/style/edit_presentation_style.py | 3 +- .../api/style/edit_surface_style.py | 3 +- .../ifcopenshell/api/style/remove_style.py | 3 +- .../style/unassign_representation_styles.py | 3 +- .../ifcopenshell/api/system/add_port.py | 3 +- .../api/system/assign_flow_control.py | 3 +- .../ifcopenshell/api/system/assign_port.py | 5 ++- .../ifcopenshell/api/system/assign_system.py | 3 +- .../ifcopenshell/api/system/connect_port.py | 3 +- .../ifcopenshell/api/system/edit_system.py | 3 +- .../ifcopenshell/api/type/assign_type.py | 7 +-- .../ifcopenshell/api/unit/__init__.py | 2 +- .../api/unit/add_conversion_based_unit.py | 3 +- .../ifcopenshell/api/unit/add_derived_unit.py | 3 +- .../ifcopenshell/api/unit/add_si_unit.py | 3 +- .../ifcopenshell/api/unit/assign_unit.py | 3 +- .../api/unit/edit_derived_unit.py | 3 +- .../api/unit/edit_monetary_unit.py | 3 +- .../ifcopenshell/api/unit/edit_named_unit.py | 3 +- .../ifcopenshell/api/unit/remove_unit.py | 2 +- .../ifcopenshell/api/unit/unassign_unit.py | 3 +- src/ifcopenshell-python/ifcopenshell/draw.py | 17 ++++---- .../ifcopenshell/entity_instance.py | 8 ++-- src/ifcopenshell-python/ifcopenshell/file.py | 20 +++++---- .../ifcopenshell/geom/app.py | 14 +++--- .../ifcopenshell/geom/code_editor_pane.py | 16 +++---- .../ifcopenshell/geom/main.py | 17 ++++---- .../ifcopenshell/geom/occ_utils.py | 19 ++++---- .../ifcopenshell/geom/stats.py | 2 +- src/ifcopenshell-python/ifcopenshell/guid.py | 5 +-- .../ifcopenshell/ifcopenshell_wrapper.pyi | 6 ++- src/ifcopenshell-python/ifcopenshell/sql.py | 12 ++++-- .../ifcopenshell/stream.py | 9 ++-- .../ifcopenshell/template.py | 3 +- .../ifcopenshell/util/alignment.py | 1 + .../ifcopenshell/util/attribute.py | 3 +- .../ifcopenshell/util/brick.py | 6 +-- .../ifcopenshell/util/classification.py | 3 +- .../ifcopenshell/util/constraint.py | 3 +- .../ifcopenshell/util/cost.py | 8 ++-- .../ifcopenshell/util/data.py | 9 ++-- .../ifcopenshell/util/date.py | 8 ++-- .../ifcopenshell/util/doc.py | 23 +++++----- .../ifcopenshell/util/element.py | 8 ++-- .../ifcopenshell/util/file.py | 3 +- .../ifcopenshell/util/fm.py | 6 ++- .../util/generate_pset_templates.py | 17 ++++---- .../ifcopenshell/util/geolocation.py | 6 ++- .../util/ifc4x3dev_scrape_data_for_docs.py | 15 +++++-- .../ifcopenshell/util/mvd_info.py | 2 +- .../ifcopenshell/util/placement.py | 6 ++- .../ifcopenshell/util/pset.py | 7 +-- .../ifcopenshell/util/representation.py | 13 +++--- .../ifcopenshell/util/resource.py | 8 ++-- .../ifcopenshell/util/schema.py | 7 +-- .../util/scripts/validate_stub.py | 1 + .../ifcopenshell/util/selector.py | 13 +++--- .../ifcopenshell/util/sequence.py | 10 ++--- .../ifcopenshell/util/shape.py | 12 +++--- .../ifcopenshell/util/shape_builder.py | 15 ++++--- .../ifcopenshell/util/system.py | 3 +- .../ifcopenshell/util/type.py | 3 +- .../ifcopenshell/util/unit.py | 8 ++-- .../ifcopenshell/validate.py | 18 ++++---- .../test/api/aggregate/test_assign_object.py | 11 ++--- .../api/aggregate/test_unassign_object.py | 4 +- .../alignment/test_add_segment_to_layout.py | 2 +- .../test_add_stationing_to_alignment.py | 1 + .../alignment/test_add_vertical_alignment.py | 1 + .../test/api/alignment/test_create.py | 1 + .../alignment/test_create_as_offset_curve.py | 8 ++-- .../api/alignment/test_create_as_polyline.py | 1 + .../api/alignment/test_create_by_pi_method.py | 1 + .../alignment/test_create_layout_segment.py | 4 +- .../api/alignment/test_create_no_geometry.py | 1 + .../test_distance_along_from_station.py | 1 + .../test/api/alignment/test_get_alignment.py | 1 + .../test_horizontal_layout_by_pi_method.py | 1 + .../test_map_alignment_cant_segment.py | 5 ++- .../test_map_alignment_horizontal_segment.py | 5 ++- .../test_map_alignment_vertical_segment.py | 5 ++- .../test/api/alignment/test_name_segments.py | 1 + .../test/api/alignment/test_referent_names.py | 1 + ...st_update_curve_segment_transition_code.py | 5 ++- .../test_update_fallback_position.py | 1 + .../test_vertical_layout_by_pi_method.py | 1 + .../test/api/boundary/test_copy_boundary.py | 4 +- .../test/api/boundary/test_remove_boundary.py | 4 +- .../classification/test_add_classification.py | 4 +- .../api/classification/test_add_reference.py | 5 ++- .../test_remove_classification.py | 4 +- .../classification/test_remove_reference.py | 5 ++- .../test/api/cogo/test_add_survey_point.py | 3 +- .../test/api/cogo/test_assign_survey_point.py | 3 +- .../test/api/cogo/test_bearing2dd.py | 6 ++- .../test/api/cogo/test_edit_survey_point.py | 3 +- .../api/constraint/test_assign_constraint.py | 4 +- .../constraint/test_unassign_constraint.py | 4 +- .../test/api/context/test_add_context.py | 2 +- .../test/api/context/test_edit_context.py | 2 +- .../test/api/context/test_remove_context.py | 2 +- .../test/api/control/test_assign_control.py | 4 +- .../test/api/control/test_unassign_control.py | 4 +- .../test/api/cost/test_add_cost_item.py | 2 +- .../api/cost/test_add_cost_item_quantity.py | 4 +- .../test/api/cost/test_add_cost_schedule.py | 2 +- .../test/api/cost/test_remove_cost_item.py | 2 +- .../api/cost/test_remove_cost_schedule.py | 2 +- .../test/api/document/test_add_information.py | 2 +- .../test/api/document/test_add_reference.py | 2 +- .../test/api/document/test_assign_document.py | 4 +- .../api/document/test_remove_information.py | 2 +- .../api/document/test_remove_reference.py | 2 +- .../api/document/test_unassign_document.py | 4 +- .../test/api/drawing/test_assign_product.py | 2 +- .../api/drawing/test_edit_text_literal.py | 2 +- .../test/api/drawing/test_unassign_product.py | 2 +- .../test/api/feature/test_add_feature.py | 5 ++- .../test/api/feature/test_add_filling.py | 2 +- .../test/api/feature/test_remove_feature.py | 2 +- .../test/api/geometry/test_add_boolean.py | 4 +- .../test_add_profile_representation.py | 6 +-- .../api/geometry/test_add_shape_aspect.py | 4 +- .../geometry/test_assign_representation.py | 8 ++-- .../test/api/geometry/test_connect_element.py | 4 +- .../test/api/geometry/test_connect_path.py | 4 +- .../api/geometry/test_disconnect_element.py | 4 +- .../test/api/geometry/test_disconnect_path.py | 4 +- .../geometry/test_edit_object_placement.py | 15 ++++--- .../test/api/geometry/test_remove_boolean.py | 4 +- .../geometry/test_remove_representation.py | 2 +- .../geometry/test_unassign_representation.py | 2 +- .../test/api/geometry/test_validate_type.py | 4 +- .../georeference/test_add_georeferencing.py | 4 +- .../georeference/test_edit_georeferencing.py | 4 +- .../api/georeference/test_edit_true_north.py | 5 ++- .../test/api/georeference/test_edit_wcs.py | 5 ++- .../test_remove_georeferencing.py | 4 +- .../test/api/grid/test_create_grid_axis.py | 2 +- .../test/api/group/test_add_group.py | 2 +- .../test/api/group/test_assign_group.py | 4 +- .../test/api/group/test_remove_group.py | 4 +- .../test/api/group/test_unassign_group.py | 4 +- .../api/group/test_update_group_products.py | 4 +- .../test/api/layer/test_add_layer.py | 2 +- .../api/layer/test_add_layer_with_style.py | 2 +- .../test/api/layer/test_assign_layer.py | 2 +- .../test/api/layer/test_unassign_layer.py | 2 +- .../test/api/library/test_add_library.py | 2 +- .../test/api/library/test_add_reference.py | 2 +- .../test/api/library/test_assign_reference.py | 2 +- .../test/api/library/test_edit_library.py | 3 +- .../test/api/library/test_edit_reference.py | 2 +- .../test/api/library/test_remove_library.py | 2 +- .../test/api/library/test_remove_reference.py | 2 +- .../api/library/test_unassign_reference.py | 2 +- .../api/material/test_add_material_set.py | 2 +- .../test/api/material/test_assign_material.py | 4 +- .../test/api/material/test_copy_material.py | 6 +-- .../api/material/test_edit_profile_usage.py | 2 +- .../test/api/material/test_remove_material.py | 6 +-- .../api/material/test_remove_material_set.py | 2 +- .../api/material/test_unassign_material.py | 4 +- .../test/api/nest/test_assign_object.py | 3 +- .../test/api/nest/test_unassign_object.py | 2 +- .../test/api/owner/test_add_actor.py | 2 +- .../test/api/owner/test_add_address.py | 2 +- .../test/api/owner/test_add_application.py | 2 +- .../test/api/owner/test_add_organisation.py | 2 +- .../test/api/owner/test_add_person.py | 2 +- .../owner/test_add_person_and_organisation.py | 2 +- .../test/api/owner/test_add_role.py | 2 +- .../test/api/owner/test_assign_actor.py | 2 +- .../api/owner/test_create_owner_history.py | 4 +- .../test/api/owner/test_edit_actor.py | 2 +- .../test/api/owner/test_edit_address.py | 2 +- .../test/api/owner/test_edit_application.py | 2 +- .../test/api/owner/test_edit_organisation.py | 2 +- .../test/api/owner/test_edit_person.py | 2 +- .../test/api/owner/test_edit_role.py | 2 +- .../test/api/owner/test_remove_actor.py | 2 +- .../test/api/owner/test_remove_address.py | 2 +- .../api/owner/test_remove_organisation.py | 2 +- .../test/api/owner/test_remove_person.py | 3 +- .../test_remove_person_and_organisation.py | 2 +- .../test/api/owner/test_remove_role.py | 2 +- .../test/api/owner/test_unassign_actor.py | 2 +- .../api/owner/test_update_owner_history.py | 3 +- .../profile/test_add_parameterized_profile.py | 2 +- .../test/api/profile/test_copy_profile.py | 2 +- .../test/api/profile/test_remove_profile.py | 2 +- .../test/api/project/test_append_asset.py | 31 ++++++------- .../api/project/test_assign_declaration.py | 4 +- .../test/api/project/test_create_file.py | 2 +- .../api/project/test_unassign_declaration.py | 7 +-- .../test/api/pset/test_add_pset.py | 6 +-- .../test/api/pset/test_add_qto.py | 2 +- .../test/api/pset/test_assign_pset.py | 2 +- .../test/api/pset/test_edit_pset.py | 5 ++- .../test/api/pset/test_edit_qto.py | 2 +- .../test/api/pset/test_remove_pset.py | 2 +- .../test/api/pset/test_unassign_pset.py | 2 +- .../test/api/pset/test_unshare_pset.py | 4 +- .../pset_template/test_edit_prop_template.py | 2 +- .../resource/test_add_resource_quantity.py | 3 +- .../resource/test_calculate_resource_work.py | 4 +- .../test/api/root/test_copy_class.py | 21 ++++----- .../test/api/root/test_create_entity.py | 2 +- .../test/api/root/test_reassign_class.py | 6 +-- .../test/api/root/test_remove_product.py | 32 +++++++------- .../test/api/sequence/test_add_date_time.py | 5 ++- .../test/api/sequence/test_assign_product.py | 2 +- .../sequence/test_calculate_task_duration.py | 6 +-- .../api/sequence/test_cascade_schedule.py | 6 ++- .../test/api/sequence/test_edit_task_time.py | 8 ++-- .../test/api/sequence/test_edit_work_time.py | 3 +- .../api/sequence/test_recalculate_schedule.py | 6 ++- .../test/api/sequence/test_remove_task.py | 3 +- .../api/sequence/test_remove_work_calendar.py | 3 +- .../api/sequence/test_remove_work_plan.py | 3 +- .../api/sequence/test_remove_work_schedule.py | 3 +- .../api/sequence/test_remove_work_time.py | 3 +- .../api/sequence/test_unassign_product.py | 2 +- .../test/api/spatial/test_assign_container.py | 11 ++--- .../api/spatial/test_dereference_structure.py | 2 +- .../api/spatial/test_reference_structure.py | 2 +- .../api/spatial/test_unassign_container.py | 2 +- .../test_add_structural_analysis_model.py | 2 +- .../test_assign_structural_analysis_model.py | 2 +- .../test_edit_structural_analysis_model.py | 2 +- .../test_remove_structural_analysis_model.py | 2 +- ...test_unassign_structural_analysis_model.py | 2 +- .../test/api/style/test_add_surface_style.py | 2 +- .../api/style/test_add_surface_textures.py | 3 +- .../api/style/test_assign_material_style.py | 4 +- .../test_assign_representation_styles.py | 2 +- .../test/api/style/test_edit_surface_style.py | 3 +- .../test/api/style/test_remove_style.py | 3 +- .../api/style/test_remove_surface_style.py | 3 +- .../api/style/test_unassign_material_style.py | 4 +- .../test_unassign_representation_styles.py | 2 +- .../test/api/system/test_add_port.py | 2 +- .../test/api/system/test_add_system.py | 2 +- .../api/system/test_assign_flow_control.py | 2 +- .../test/api/system/test_assign_port.py | 7 +-- .../test/api/system/test_assign_system.py | 3 +- .../test/api/system/test_connect_port.py | 2 +- .../test/api/system/test_disconnect_port.py | 2 +- .../test/api/system/test_remove_system.py | 4 +- .../api/system/test_unassign_flow_control.py | 2 +- .../test/api/system/test_unassign_port.py | 2 +- .../test/api/system/test_unassign_system.py | 3 +- src/ifcopenshell-python/test/api/test_api.py | 15 ++++--- .../test/api/type/test_assign_type.py | 9 ++-- .../api/type/test_map_type_representation.py | 2 +- .../test/api/type/test_unassign_type.py | 6 +-- .../unit/test_add_context_dependent_unit.py | 2 +- .../unit/test_add_conversion_based_unit.py | 2 +- .../test/api/unit/test_add_monetary_unit.py | 2 +- .../test/api/unit/test_add_si_unit.py | 2 +- .../test/api/unit/test_assign_unit.py | 2 +- .../test/api/unit/test_edit_derived_unit.py | 2 +- .../test/api/unit/test_edit_monetary_unit.py | 2 +- .../test/api/unit/test_edit_named_unit.py | 2 +- .../test/api/unit/test_remove_unit.py | 2 +- .../test/api/unit/test_unassign_unit.py | 2 +- src/ifcopenshell-python/test/bootstrap.py | 3 +- src/ifcopenshell-python/test/file_gc.py | 16 ++++--- .../test/fixtures/rules/generate_00.py | 1 + .../test/fixtures/rules/generate_02.py | 1 + .../test/fixtures/rules/generate_06.py | 1 + .../test/fixtures/rules/generate_10.py | 1 + .../test/fixtures/rules/generate_16.py | 1 + .../test/fixtures/rules/generate_17.py | 1 + .../test/fixtures/rules/generate_21.py | 1 + .../test/fixtures/rules/generate_24.py | 1 + .../test/fixtures/validate/generate_00.py | 6 +-- .../test/geom/geometry_tests.py | 3 +- .../test/geom/polyhedral_shapes.py | 5 +-- src/ifcopenshell-python/test/geom/settings.py | 2 +- src/ifcopenshell-python/test/geom/stats.py | 4 +- .../test/geom/test_sweeps.py | 3 +- .../test/global_id_updates.py | 1 + .../test/instance_string_formatting.py | 1 + .../test/test_create_shape.py | 6 ++- .../test/test_entity_instance.py | 3 +- src/ifcopenshell-python/test/test_file.py | 3 +- .../test/test_file_inverse.py | 10 +++-- src/ifcopenshell-python/test/test_guid.py | 9 ++-- src/ifcopenshell-python/test/test_mvd_info.py | 2 + src/ifcopenshell-python/test/test_open.py | 5 ++- src/ifcopenshell-python/test/test_package.py | 5 ++- src/ifcopenshell-python/test/test_rules.py | 4 +- src/ifcopenshell-python/test/test_sql.py | 6 ++- src/ifcopenshell-python/test/test_stream.py | 8 ++-- ...st_streaming_rocksdb_and_simpletyperefs.py | 6 ++- src/ifcopenshell-python/test/test_validate.py | 2 +- .../test/test_validate_rocksdb.py | 2 +- .../test/test_wall_opening.py | 8 ++-- src/ifcopenshell-python/test/test_write.py | 5 ++- src/ifcopenshell-python/test/typing_tests.py | 4 +- .../test/util/scripts/test_validate_stub.py | 1 + .../test/util/test_attribute.py | 3 +- .../test/util/test_brick.py | 3 +- .../test/util/test_classification.py | 4 +- .../test/util/test_date.py | 3 +- .../test/util/test_element.py | 33 +++++++------- .../test/util/test_file.py | 7 +-- .../test/util/test_geolocation.py | 5 ++- .../test/util/test_placement.py | 2 +- .../test/util/test_pset.py | 2 +- .../test/util/test_schema.py | 2 +- .../test/util/test_selector.py | 23 +++++----- .../test/util/test_shape_builder.py | 22 +++++----- .../test/util/test_system.py | 6 ++- .../test/util/test_type.py | 3 +- .../test/util/test_unit.py | 10 +++-- .../test/util/test_unit_conversion.py | 6 ++- src/ifcpatch/bootstrap.py | 10 ++--- src/ifcpatch/ifcpatch/__init__.py | 20 ++++----- src/ifcpatch/ifcpatch/__main__.py | 4 +- src/ifcpatch/ifcpatch/recipes/AGS2IFC.py | 21 ++++----- .../AddGeometricRepresentationToAlignment.py | 9 ++-- .../AddLinearPlacementFallbackPosition.py | 9 ++-- .../AddZeroLengthSegmentToAlignment.py | 9 ++-- .../recipes/AssignConstituentFractions.py | 3 +- .../ifcpatch/recipes/ConvertLengthUnit.py | 11 ++--- .../recipes/ConvertPropertiesToQuantities.py | 7 +-- .../ifcpatch/recipes/ExtractElements.py | 6 ++- .../recipes/ExtractPropertiesToSQLite.py | 5 ++- .../recipes/FixArchiCADToRevitDoorSwings.py | 3 +- .../recipes/FixArchiCADToRevitSpaces.py | 5 ++- .../ifcpatch/recipes/FixRevit2025TINs.py | 43 ++++++++++--------- src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py | 8 ++-- src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py | 21 +++++---- .../ifcpatch/recipes/MergeDuplicateTypes.py | 5 ++- .../ifcpatch/recipes/MergeProjects.py | 10 +++-- src/ifcpatch/ifcpatch/recipes/MergeStyles.py | 8 ++-- src/ifcpatch/ifcpatch/recipes/Migrate.py | 8 ++-- .../recipes/OffsetObjectPlacements.py | 5 ++- .../recipes/PatchStationReferentPosition.py | 9 ++-- src/ifcpatch/ifcpatch/recipes/PurgeData.py | 3 +- .../recipes/RecycleNonRootedElements.py | 3 +- .../ifcpatch/recipes/RegenerateGlobalIds.py | 3 +- .../recipes/ResetAbsoluteCoordinates.py | 5 ++- .../recipes/ResetSpatialElementLocations.py | 3 +- .../ifcpatch/recipes/SetFalseOrigin.py | 10 ++++- .../recipes/SetWorldCoordinateSystem.py | 3 +- .../ifcpatch/recipes/SplitByBuildingStorey.py | 8 ++-- .../ifcpatch/recipes/TessellateElements.py | 9 ++-- src/ifcpatch/ifcpatch/recipes/UnsharePsets.py | 3 +- src/ifcpatch/test/bootstrap.py | 4 +- src/ifcpatch/test/test_ConvertLengthUnit.py | 3 +- .../test_ConvertPropertiesToQuantities.py | 3 +- src/ifcpatch/test/test_ExtractElements.py | 6 ++- src/ifcpatch/test/test_Ifc2Sql.py | 6 ++- src/ifcpatch/test/test_MergeDuplicateTypes.py | 6 ++- src/ifcpatch/test/test_MergeProject.py | 12 +++--- src/ifcpatch/test/test_Migrate.py | 3 +- src/ifcpatch/test/test_RegenerateGlobalIds.py | 6 ++- .../test/test_ResetSpatialElementLocations.py | 5 ++- src/ifcpatch/test/test_SetFalseOrigin.py | 5 ++- src/ifcpatch/test/test_TesselateElements.py | 7 +-- src/ifcpatch/test/test_UnsharePsets.py | 3 +- src/ifcpatch/test/test_ifcpatch.py | 6 ++- src/ifcsverchok/__init__.py | 3 ++ src/ifcsverchok/helper.py | 3 +- src/ifcsverchok/ifcstore.py | 3 +- src/ifcsverchok/nodes/ifc/add.py | 7 +-- src/ifcsverchok/nodes/ifc/add_pset.py | 18 ++++---- .../nodes/ifc/add_spatial_element.py | 15 +++---- src/ifcsverchok/nodes/ifc/api.py | 12 +++--- src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py | 31 +++++++------ src/ifcsverchok/nodes/ifc/by_guid.py | 7 +-- src/ifcsverchok/nodes/ifc/by_id.py | 7 +-- src/ifcsverchok/nodes/ifc/by_query.py | 7 +-- src/ifcsverchok/nodes/ifc/by_type.py | 9 ++-- src/ifcsverchok/nodes/ifc/create_entity.py | 20 ++++----- src/ifcsverchok/nodes/ifc/create_file.py | 7 +-- src/ifcsverchok/nodes/ifc/create_project.py | 3 +- src/ifcsverchok/nodes/ifc/create_shape.py | 12 +++--- src/ifcsverchok/nodes/ifc/generate_guid.py | 3 +- src/ifcsverchok/nodes/ifc/get_attribute.py | 7 +-- src/ifcsverchok/nodes/ifc/get_property.py | 7 +-- src/ifcsverchok/nodes/ifc/pick_ifc_class.py | 7 +-- .../nodes/ifc/quick_project_setup.py | 10 +++-- src/ifcsverchok/nodes/ifc/read_entity.py | 7 +-- src/ifcsverchok/nodes/ifc/read_file.py | 7 +-- src/ifcsverchok/nodes/ifc/remove.py | 10 +++-- .../nodes/ifc/select_blender_objects.py | 9 ++-- src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py | 9 ++-- src/ifcsverchok/nodes/ifc/write_file.py | 8 ++-- src/ifctester/ifctester/__main__.py | 9 ++-- src/ifctester/ifctester/facet.py | 14 +++--- src/ifctester/ifctester/ids.py | 26 +++++------ src/ifctester/ifctester/reporter.py | 15 ++++--- src/ifctester/test/ids_doc_generator.py | 16 ++++--- src/ifctester/test/test_facet.py | 13 +++++- src/ifctester/test/test_ids.py | 8 ++-- src/ifctester/webapp/public/worker/api.py | 5 ++- src/ifctester/webapp/serve.py | 6 +-- src/opencdeserver/api/app/api/bcf.py | 11 ++--- src/opencdeserver/api/app/api/documents.py | 25 +++++------ src/opencdeserver/api/app/api/foundation.py | 23 ++++------ src/opencdeserver/api/app/api/logging.py | 11 ++--- src/opencdeserver/api/app/api/user.py | 22 ++++------ src/opencdeserver/api/app/database/neo4j.py | 13 +++--- .../api/app/ifcgraph/ifcgraph.py | 3 +- src/opencdeserver/api/app/main.py | 7 +-- .../api/app/models/bcf_common.py | 5 ++- .../api/app/models/bcf_request.py | 20 +++++++-- .../api/app/models/documents_common.py | 2 +- .../api/app/models/documents_not_used.py | 5 ++- .../api/app/models/documents_other.py | 8 ++-- .../api/app/models/documents_request.py | 6 +-- .../api/app/models/documents_response.py | 6 +-- .../api/app/models/foundation_other.py | 1 + src/opencdeserver/api/app/models/other.py | 1 + src/opencdeserver/api/app/models/request.py | 1 + src/opencdeserver/api/app/repository/bcf.py | 7 +-- .../api/app/repository/documents.py | 23 ++++------ .../api/app/repository/foundation.py | 13 ++---- src/opencdeserver/api/app/security/secure.py | 16 +++---- src/pyodide/demo-app/context.py | 4 +- src/pyodide/demo-app/tests/missing_files.py | 2 +- test/bpy.py | 18 +++++--- test/run.py | 8 ++-- 731 files changed, 2234 insertions(+), 1709 deletions(-) diff --git a/.github/workflows/check_repo_ci_jobs.py b/.github/workflows/check_repo_ci_jobs.py index 3a78b8e911..7bf7ed13e1 100644 --- a/.github/workflows/check_repo_ci_jobs.py +++ b/.github/workflows/check_repo_ci_jobs.py @@ -1,9 +1,9 @@ +import os import pathlib import shutil +import zipfile import requests -import zipfile -import os # To test this locally, set these environment variables REPO_OWNER = os.environ.get("REPO_OWNER", "IfcOpenShell/IfcOpenShell") diff --git a/aws/lambda/example_handler/__init__.py b/aws/lambda/example_handler/__init__.py index 5256cb90a2..a6e3fe0212 100644 --- a/aws/lambda/example_handler/__init__.py +++ b/aws/lambda/example_handler/__init__.py @@ -1,6 +1,6 @@ +import boto3 import ifcopenshell import ifcopenshell.util.element -import boto3 s3 = boto3.client('s3') diff --git a/choco/bonsai/choco_release.py b/choco/bonsai/choco_release.py index b63ee3bf89..681e6c58e5 100644 --- a/choco/bonsai/choco_release.py +++ b/choco/bonsai/choco_release.py @@ -13,9 +13,10 @@ import hashlib import os import pathlib import re -from urllib import request -from github import Github from typing import NoReturn +from urllib import request + +from github import Github def get_repo_tag_names() -> list[str]: diff --git a/choco/bonsai/tools/disable_blenderbim_addon.py b/choco/bonsai/tools/disable_blenderbim_addon.py index c7355eb7d9..644be2623f 100644 --- a/choco/bonsai/tools/disable_blenderbim_addon.py +++ b/choco/bonsai/tools/disable_blenderbim_addon.py @@ -1,6 +1,5 @@ import bpy - bpy.ops.preferences.addon_disable(module='blenderbim') bpy.ops.wm.save_userpref() diff --git a/choco/bonsai/tools/enable_blenderbim_addon.py b/choco/bonsai/tools/enable_blenderbim_addon.py index eae588e5f8..2b767dea03 100644 --- a/choco/bonsai/tools/enable_blenderbim_addon.py +++ b/choco/bonsai/tools/enable_blenderbim_addon.py @@ -1,6 +1,5 @@ import bpy - bpy.ops.preferences.addon_enable(module='blenderbim') bpy.ops.wm.save_userpref() diff --git a/conda/update_version_init.py b/conda/update_version_init.py index e5a7a6fd22..cbcf0df1f9 100644 --- a/conda/update_version_init.py +++ b/conda/update_version_init.py @@ -1,7 +1,8 @@ -import re import argparse +import re from pathlib import Path + def update_version(file_path: str, version: str) -> None: """Update the version string in the given __init__.py file.""" file_path = Path(file_path) diff --git a/docs/conf.py b/docs/conf.py index 4583e85a43..5f4b91a23e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,4 +1,5 @@ import textwrap + # The `extensions` list should already be in here from `sphinx-quickstart` extensions = [ # there may be others here already, e.g. 'sphinx.ext.mathjax' diff --git a/docs/generate_docs.py b/docs/generate_docs.py index 09f3683c82..8b3e60140d 100644 --- a/docs/generate_docs.py +++ b/docs/generate_docs.py @@ -1,10 +1,10 @@ # This program requires doxygen, sphinx, breathe and exhale. +import multiprocessing import os -import sys import shutil import subprocess -import multiprocessing +import sys # some extra check to see if we can find sphinx in pypy bin dir sphinx_build = os.path.join(os.path.dirname(sys.executable), 'sphinx-build') diff --git a/nix/build-all.py b/nix/build-all.py index 0b159d1e9f..a76a53862c 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -99,35 +99,36 @@ Used environment variables: """ -import logging -import os -import re -import sys import glob -import subprocess as sp -import shutil -import tarfile +import logging import multiprocessing +import os import platform -import threading -import sysconfig -from datetime import datetime +import re +import shutil # @todo temporary for expired mpfr.org certificate on 2023-04-08 import ssl +import subprocess as sp +import sys +import sysconfig +import tarfile +import threading +from datetime import datetime ssl._create_default_https_context = ssl._create_unverified_context import time -from urllib.request import urlretrieve from collections.abc import Generator, Sequence from pathlib import Path +from urllib.request import urlretrieve try: - from typing import Union, Literal + from typing import Literal, Union except: # python 3.6 compatibility for rocky 8 from typing import Union + from typing_extensions import Literal logger = logging.getLogger(__name__) diff --git a/pyodide/cache_dependencies.py b/pyodide/cache_dependencies.py index 0ac2c8a600..5800cba067 100644 --- a/pyodide/cache_dependencies.py +++ b/pyodide/cache_dependencies.py @@ -8,12 +8,11 @@ or unpacks existing archives. Usage: python cache_dependencies.py [pack|unpack] """ -import tarfile import sys +import tarfile from pathlib import Path from typing import Literal - CACHE_PREFIX = "cache-" diff --git a/pyodide/test/test_wheel.py b/pyodide/test/test_wheel.py index 1204c3d532..f241776d02 100644 --- a/pyodide/test/test_wheel.py +++ b/pyodide/test/test_wheel.py @@ -1,6 +1,5 @@ from pathlib import Path - WHEEL_FILENAME = next( p.name for p in (Path.cwd() / "pyodide").iterdir() if p.name.startswith("ifcopenshell-") and p.suffix == ".whl" ) diff --git a/pyproject.toml b/pyproject.toml index edd328321e..13abb08d76 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,6 +47,7 @@ select = [ "UP", # pyupgrade "RUF015", # next() > list_comprehension[0] "RUF022", # sort __all__ + "I", # import sorting ] ignore = [ "FA100", # Conflicts with Blender using annotations for props definitions. diff --git a/src/bcf/bcf/agnostic/extensions.py b/src/bcf/bcf/agnostic/extensions.py index 20ecd621d8..16e7283c1a 100644 --- a/src/bcf/bcf/agnostic/extensions.py +++ b/src/bcf/bcf/agnostic/extensions.py @@ -1,7 +1,8 @@ +from dataclasses import fields +from typing import NamedTuple, Union + import bcf.v2.model.extensions import bcf.v3.model.extensions -from typing import NamedTuple, Union -from dataclasses import fields class AttributeData(NamedTuple): diff --git a/src/bcf/bcf/agnostic/model.py b/src/bcf/bcf/agnostic/model.py index 4afd25d1bc..e511c07656 100644 --- a/src/bcf/bcf/agnostic/model.py +++ b/src/bcf/bcf/agnostic/model.py @@ -1,6 +1,7 @@ +from typing import Union + import bcf.v2.model import bcf.v3.model -from typing import Union BimSnippet = Union[bcf.v2.model.BimSnippet, bcf.v3.model.BimSnippet] BitMap = Union[bcf.v2.model.VisualizationInfoBitmap, bcf.v3.model.Bitmap] diff --git a/src/bcf/bcf/agnostic/topic.py b/src/bcf/bcf/agnostic/topic.py index 1493d44bd7..1e77f40e97 100644 --- a/src/bcf/bcf/agnostic/topic.py +++ b/src/bcf/bcf/agnostic/topic.py @@ -1,13 +1,14 @@ import tempfile +from pathlib import Path +from typing import Optional, Union + +import bcf.agnostic.model as mdl import bcf.v2.bcfxml import bcf.v2.model import bcf.v2.topic import bcf.v3.bcfxml import bcf.v3.model import bcf.v3.topic -import bcf.agnostic.model as mdl -from pathlib import Path -from typing import Union, Optional from typing_extensions import assert_never TopicHandler = Union[bcf.v2.topic.TopicHandler, bcf.v3.topic.TopicHandler] diff --git a/src/bcf/bcf/agnostic/visinfo.py b/src/bcf/bcf/agnostic/visinfo.py index 27adf56bdf..a2b248b085 100644 --- a/src/bcf/bcf/agnostic/visinfo.py +++ b/src/bcf/bcf/agnostic/visinfo.py @@ -1,5 +1,6 @@ -import bcf.v2.visinfo -import bcf.v3.visinfo from typing import Union +import bcf.v2.visinfo +import bcf.v3.visinfo + VisualizationInfoHandler = Union[bcf.v2.visinfo.VisualizationInfoHandler, bcf.v3.visinfo.VisualizationInfoHandler] diff --git a/src/bcf/bcf/bcfxml.py b/src/bcf/bcf/bcfxml.py index 073e50af39..07b1fb5cb0 100644 --- a/src/bcf/bcf/bcfxml.py +++ b/src/bcf/bcf/bcfxml.py @@ -29,7 +29,6 @@ from bcf.v3.bcfxml import BcfXml as BcfXml3 from bcf.v3.model import Version as Version3 from bcf.xml_parser import AbstractXmlParserSerializer, XmlParserSerializer - BcfXml = Union[BcfXml2, BcfXml3] diff --git a/src/bcf/bcf/inmemory_zipfile.py b/src/bcf/bcf/inmemory_zipfile.py index 413da4fcfa..bac4b47c7b 100644 --- a/src/bcf/bcf/inmemory_zipfile.py +++ b/src/bcf/bcf/inmemory_zipfile.py @@ -7,6 +7,7 @@ original idea from https://stackoverflow.com/a/19722365/1307905 """ from __future__ import annotations + import zipfile from io import BytesIO from os import PathLike diff --git a/src/bcf/bcf/v2/bcfxml.py b/src/bcf/bcf/v2/bcfxml.py index 039f1cbe09..ad9f8e7679 100644 --- a/src/bcf/bcf/v2/bcfxml.py +++ b/src/bcf/bcf/v2/bcfxml.py @@ -1,6 +1,7 @@ """BCF XML V2 handler.""" from __future__ import annotations + import uuid import warnings import zipfile diff --git a/src/bcf/bcf/v2/topic.py b/src/bcf/bcf/v2/topic.py index 7ee4c50b60..30506d734d 100644 --- a/src/bcf/bcf/v2/topic.py +++ b/src/bcf/bcf/v2/topic.py @@ -1,6 +1,7 @@ """BCF XML V2 Topic handler.""" from __future__ import annotations + import datetime import tempfile import uuid diff --git a/src/bcf/bcf/v2/visinfo.py b/src/bcf/bcf/v2/visinfo.py index 46d274ea1d..1d081ae782 100644 --- a/src/bcf/bcf/v2/visinfo.py +++ b/src/bcf/bcf/v2/visinfo.py @@ -1,12 +1,12 @@ import uuid import zipfile -from typing import Any, Optional, Literal, Union from collections.abc import Iterable +from typing import Any, Literal, Optional, Union +import ifcopenshell.util.placement +import ifcopenshell.util.unit import numpy as np from ifcopenshell import entity_instance -import ifcopenshell.util.unit -import ifcopenshell.util.placement from numpy.typing import NDArray import bcf.v2.model as mdl diff --git a/src/bcf/bcf/v3/bcfxml.py b/src/bcf/bcf/v3/bcfxml.py index 872efe5db9..7d5ca0de1f 100644 --- a/src/bcf/bcf/v3/bcfxml.py +++ b/src/bcf/bcf/v3/bcfxml.py @@ -1,6 +1,7 @@ """BCF XML V3 handlers.""" from __future__ import annotations + import uuid import warnings import zipfile diff --git a/src/bcf/bcf/v3/topic.py b/src/bcf/bcf/v3/topic.py index 04753c006e..d82e4ed0f1 100644 --- a/src/bcf/bcf/v3/topic.py +++ b/src/bcf/bcf/v3/topic.py @@ -1,6 +1,7 @@ """BCF XML V3 Topic handler.""" from __future__ import annotations + import datetime import uuid import zipfile diff --git a/src/bcf/bcf/v3/visinfo.py b/src/bcf/bcf/v3/visinfo.py index 7880ddb10f..050641ed23 100644 --- a/src/bcf/bcf/v3/visinfo.py +++ b/src/bcf/bcf/v3/visinfo.py @@ -1,12 +1,12 @@ import uuid import zipfile -from typing import Any, Optional, Literal, Union from collections.abc import Iterable +from typing import Any, Literal, Optional, Union +import ifcopenshell.util.placement +import ifcopenshell.util.unit import numpy as np from ifcopenshell import entity_instance -import ifcopenshell.util.unit -import ifcopenshell.util.placement from numpy.typing import NDArray import bcf.v3.model as mdl diff --git a/src/bcf/tests/conftest.py b/src/bcf/tests/conftest.py index ea1b2aee8b..f19792122a 100644 --- a/src/bcf/tests/conftest.py +++ b/src/bcf/tests/conftest.py @@ -1,5 +1,4 @@ import pytest - from bcf.xml_parser import XmlParserSerializer diff --git a/src/bcf/tests/v2/test_bcf_xml.py b/src/bcf/tests/v2/test_bcf_xml.py index fed1428e73..1b5128e96f 100644 --- a/src/bcf/tests/v2/test_bcf_xml.py +++ b/src/bcf/tests/v2/test_bcf_xml.py @@ -4,9 +4,8 @@ import uuid from pathlib import Path from tempfile import TemporaryDirectory -import pytest - import bcf.v2.model as mdl +import pytest from bcf.v2.bcfxml import BcfXml from bcf.v2.topic import TopicHandler from bcf.v2.visinfo import ( diff --git a/src/bcf/tests/v2/test_example_files.py b/src/bcf/tests/v2/test_example_files.py index 3821569c28..6d964bd0e9 100644 --- a/src/bcf/tests/v2/test_example_files.py +++ b/src/bcf/tests/v2/test_example_files.py @@ -3,11 +3,10 @@ import os import zipfile from pathlib import Path -from xsdata.models.datatype import XmlDateTime - import bcf.v2.model as mdl from bcf.v2.bcfxml import BcfXml from bcf.v2.topic import TopicHandler +from xsdata.models.datatype import XmlDateTime def test_maximum_information() -> None: diff --git a/src/bcf/tests/v2/test_ifcclash_api.py b/src/bcf/tests/v2/test_ifcclash_api.py index 14945e8392..34c3a493e4 100644 --- a/src/bcf/tests/v2/test_ifcclash_api.py +++ b/src/bcf/tests/v2/test_ifcclash_api.py @@ -1,6 +1,5 @@ import numpy as np import pytest - from bcf.v2.bcfxml import BcfXml diff --git a/src/bcf/tests/v3/test_bcf_xml.py b/src/bcf/tests/v3/test_bcf_xml.py index 50664b98c7..ae658ca55f 100644 --- a/src/bcf/tests/v3/test_bcf_xml.py +++ b/src/bcf/tests/v3/test_bcf_xml.py @@ -4,9 +4,8 @@ import uuid from pathlib import Path from tempfile import TemporaryDirectory -import pytest - import bcf.v3.model as mdl +import pytest from bcf.v3.bcfxml import BcfXml from bcf.v3.topic import TopicHandler from bcf.v3.visinfo import ( diff --git a/src/bcf/tests/v3/test_example_files.py b/src/bcf/tests/v3/test_example_files.py index e385b8634f..6774c49982 100644 --- a/src/bcf/tests/v3/test_example_files.py +++ b/src/bcf/tests/v3/test_example_files.py @@ -3,11 +3,10 @@ import os import zipfile from pathlib import Path -from xsdata.models.datatype import XmlDateTime - import bcf.v3.model as mdl from bcf.v3.bcfxml import BcfXml from bcf.v3.topic import TopicHandler +from xsdata.models.datatype import XmlDateTime def test_doc_ref_internal() -> None: diff --git a/src/bcf/tests/v3/test_ifcclash_api.py b/src/bcf/tests/v3/test_ifcclash_api.py index d470f1ffb8..faea9b6a1a 100644 --- a/src/bcf/tests/v3/test_ifcclash_api.py +++ b/src/bcf/tests/v3/test_ifcclash_api.py @@ -1,6 +1,5 @@ import numpy as np import pytest - from bcf.v3.bcfxml import BcfXml diff --git a/src/bonsai/pyproject.toml b/src/bonsai/pyproject.toml index 3ec2cb8748..6dab8f3454 100644 --- a/src/bonsai/pyproject.toml +++ b/src/bonsai/pyproject.toml @@ -38,3 +38,8 @@ exclude = ["test*"] [tool.ruff] extend = "../../pyproject.toml" + +[tool.ruff.lint] +ignore = [ + "I", # import sorting - ignore it temporarily, still need to do some tests +] diff --git a/src/bsdd/bsdd.py b/src/bsdd/bsdd.py index 9a24d1dd1e..17480c87f5 100644 --- a/src/bsdd/bsdd.py +++ b/src/bsdd/bsdd.py @@ -17,15 +17,15 @@ # along with bSDD. If not, see . from __future__ import annotations -import uuid +import http.server import time import urllib.parse -import requests +import uuid import webbrowser -import http.server -from typing import TypedDict, Literal, Optional, TYPE_CHECKING, Any -from typing_extensions import NotRequired +from typing import TYPE_CHECKING, Any, Literal, Optional, TypedDict +import requests +from typing_extensions import NotRequired if TYPE_CHECKING: import ifcopenshell diff --git a/src/bsdd/bsdd_json.py b/src/bsdd/bsdd_json.py index 5edc8616fa..becaac810b 100644 --- a/src/bsdd/bsdd_json.py +++ b/src/bsdd/bsdd_json.py @@ -1,11 +1,13 @@ from __future__ import annotations -from .type_hints import * -from typing import Optional, Literal -from datetime import datetime -from pydantic import BaseModel, Field, PrivateAttr, model_validator, ConfigDict import json import weakref +from datetime import datetime +from typing import Literal, Optional + +from pydantic import BaseModel, ConfigDict, Field, PrivateAttr, model_validator + +from .type_hints import * def _lower_first(s: str) -> str: diff --git a/src/bsdd/type_hints.py b/src/bsdd/type_hints.py index b408e3b9a1..6f825cdd80 100644 --- a/src/bsdd/type_hints.py +++ b/src/bsdd/type_hints.py @@ -1,6 +1,5 @@ from typing import Literal - COUNTRY_CODE = Literal[ "AF", "AX", diff --git a/src/bsdd/yml_to_classes.py b/src/bsdd/yml_to_classes.py index ba53917051..981d3c4439 100644 --- a/src/bsdd/yml_to_classes.py +++ b/src/bsdd/yml_to_classes.py @@ -1,8 +1,8 @@ -import yaml import sys from pathlib import Path from typing import Any +import yaml type_to_python_type = { "string": "str", diff --git a/src/ifc2ca/_deprecated/ca2ifc.py b/src/ifc2ca/_deprecated/ca2ifc.py index 5f9115396e..0f55d9d6d3 100644 --- a/src/ifc2ca/_deprecated/ca2ifc.py +++ b/src/ifc2ca/_deprecated/ca2ifc.py @@ -17,11 +17,12 @@ # along with Ifc2CA. If not, see . import json -import ifcopenshell -import ifcopenshell.guid import os from datetime import datetime +import ifcopenshell +import ifcopenshell.guid + class CA2IFC: def __init__(self, inputFilename, outputFilename): diff --git a/src/ifc2ca/_deprecated/scriptCodeAsterBonded.py b/src/ifc2ca/_deprecated/scriptCodeAsterBonded.py index 005e28fa4c..0b1184453b 100644 --- a/src/ifc2ca/_deprecated/scriptCodeAsterBonded.py +++ b/src/ifc2ca/_deprecated/scriptCodeAsterBonded.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with Ifc2CA. If not, see . -import json -import numpy as np import itertools +import json from pathlib import Path +import numpy as np + flatten = itertools.chain.from_iterable ScaleFactor = 1.0 diff --git a/src/ifc2ca/_deprecated/scriptSalomeBonded.py b/src/ifc2ca/_deprecated/scriptSalomeBonded.py index a1c6030956..fb2bd575f9 100644 --- a/src/ifc2ca/_deprecated/scriptSalomeBonded.py +++ b/src/ifc2ca/_deprecated/scriptSalomeBonded.py @@ -16,15 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with Ifc2CA. If not, see . +import itertools +import json import os import time -import json +from pathlib import Path + +import numpy as np import salome import salome_notebook import salome_version -import numpy as np -import itertools -from pathlib import Path flatten = itertools.chain.from_iterable @@ -155,10 +156,11 @@ class MODEL: ### ### GEOM component ### - import GEOM - from salome.geom import geomBuilder import math + + import GEOM import SALOMEDS + from salome.geom import geomBuilder gg = salome.ImportComponentGUI("GEOM") if NEW_SALOME: diff --git a/src/ifc2ca/ifc2ca.py b/src/ifc2ca/ifc2ca.py index f8908b0aa7..728df67d45 100644 --- a/src/ifc2ca/ifc2ca.py +++ b/src/ifc2ca/ifc2ca.py @@ -17,6 +17,7 @@ # along with Ifc2CA. If not, see . from __future__ import annotations + import json import os import subprocess diff --git a/src/ifc4d/__main__.py b/src/ifc4d/__main__.py index d7e2a58307..8313ba7464 100644 --- a/src/ifc4d/__main__.py +++ b/src/ifc4d/__main__.py @@ -1,13 +1,12 @@ +import argparse import os import sys -import argparse +import ifcopenshell +from ifc4d.msp2ifc import MSP2Ifc from ifc4d.p6xer2ifc import P6XER2Ifc from ifc4d.p62ifc import P62Ifc -from ifc4d.msp2ifc import MSP2Ifc from ifc4d.pp2ifc import PP2Ifc -import ifcopenshell - parser = argparse.ArgumentParser() parser.add_argument("-f", "--file", action="store", type=str, required=True, help="schedule file name to be parsed") diff --git a/src/ifc4d/ifc4d/common.py b/src/ifc4d/ifc4d/common.py index d13840267a..f4fd42e1d1 100644 --- a/src/ifc4d/ifc4d/common.py +++ b/src/ifc4d/ifc4d/common.py @@ -1,12 +1,14 @@ from __future__ import annotations + +from datetime import date, datetime, timedelta +from typing import Any, TypedDict, Union + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.control import ifcopenshell.api.resource import ifcopenshell.api.sequence import ifcopenshell.util.date -from datetime import datetime, timedelta, date -from typing import Union, Any, TypedDict from typing_extensions import NotRequired diff --git a/src/ifc4d/ifc4d/csv2ifc.py b/src/ifc4d/ifc4d/csv2ifc.py index 1233734290..6efbf4fad6 100644 --- a/src/ifc4d/ifc4d/csv2ifc.py +++ b/src/ifc4d/ifc4d/csv2ifc.py @@ -17,23 +17,24 @@ # along with IfcResources. If not, see . from __future__ import annotations -import csv + import _csv -import ifcopenshell.api.resource -import isodate +import csv +import datetime +from typing import Any, Literal, NamedTuple, Optional, Union, cast, get_args + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.cost import ifcopenshell.api.pset +import ifcopenshell.api.resource import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.date import ifcopenshell.util.element import ifcopenshell.util.resource import ifcopenshell.util.unit -import datetime -from typing import Any, Optional, Union, Literal, get_args, NamedTuple, cast - +import isodate SUPPORTED_COLUMN = Literal[ "HIERARCHY", diff --git a/src/ifc4d/ifc4d/csv4d2ifc.py b/src/ifc4d/ifc4d/csv4d2ifc.py index 9a33ea8198..2e519cc0ea 100644 --- a/src/ifc4d/ifc4d/csv4d2ifc.py +++ b/src/ifc4d/ifc4d/csv4d2ifc.py @@ -18,13 +18,14 @@ import csv +import locale +import re + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.api.sequence import ifcopenshell.util.date -import locale -import re class Csv2Ifc: diff --git a/src/ifc4d/ifc4d/ifc2msp.py b/src/ifc4d/ifc4d/ifc2msp.py index e7d540dd3a..a685f689dc 100644 --- a/src/ifc4d/ifc4d/ifc2msp.py +++ b/src/ifc4d/ifc4d/ifc2msp.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with Ifc4D. If not, see . -import uuid import datetime +import uuid +import xml.etree.ElementTree as ET + import ifcopenshell import ifcopenshell.util.date import ifcopenshell.util.sequence -import xml.etree.ElementTree as ET class Ifc2Msp: diff --git a/src/ifc4d/ifc4d/ifc2p6.py b/src/ifc4d/ifc4d/ifc2p6.py index 1d4bfea195..5093f306be 100644 --- a/src/ifc4d/ifc4d/ifc2p6.py +++ b/src/ifc4d/ifc4d/ifc2p6.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with Ifc4D. If not, see . -import uuid import datetime +import uuid +import xml.etree.ElementTree as ET + import ifcopenshell import ifcopenshell.util.date import ifcopenshell.util.sequence -import xml.etree.ElementTree as ET + from .common import ScheduleIfcGenerator diff --git a/src/ifc4d/ifc4d/msp2ifc.py b/src/ifc4d/ifc4d/msp2ifc.py index 2285a1a1ea..3ba14a6985 100644 --- a/src/ifc4d/ifc4d/msp2ifc.py +++ b/src/ifc4d/ifc4d/msp2ifc.py @@ -17,7 +17,9 @@ # along with Ifc4D. If not, see . import datetime -from datetime import timedelta, date +import xml.etree.ElementTree as ET +from datetime import date, timedelta + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.control @@ -25,7 +27,6 @@ import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.sequence import ifcopenshell.util.date -import xml.etree.ElementTree as ET class MSP2Ifc: diff --git a/src/ifc4d/ifc4d/p62ifc.py b/src/ifc4d/ifc4d/p62ifc.py index aeb4338c07..833bf39dd3 100644 --- a/src/ifc4d/ifc4d/p62ifc.py +++ b/src/ifc4d/ifc4d/p62ifc.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with Ifc4D. If not, see . -import math import datetime +import math +import xml.etree.ElementTree as ET + import ifcopenshell import ifcopenshell.api import ifcopenshell.util.date -import xml.etree.ElementTree as ET + from .common import ScheduleIfcGenerator diff --git a/src/ifc4d/ifc4d/p6xer2ifc.py b/src/ifc4d/ifc4d/p6xer2ifc.py index 9e8bd1bfd9..ef218ade2d 100644 --- a/src/ifc4d/ifc4d/p6xer2ifc.py +++ b/src/ifc4d/ifc4d/p6xer2ifc.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with Ifc4D. If not, see . -from xerparser.reader import Reader +from datetime import date, datetime, timedelta + import ifcopenshell import ifcopenshell.api import ifcopenshell.util.date -from datetime import datetime, timedelta, date +from xerparser.reader import Reader + from .common import ScheduleIfcGenerator diff --git a/src/ifc4d/ifc4d/pp2ifc.py b/src/ifc4d/ifc4d/pp2ifc.py index 5ce9b68b48..338a887e91 100644 --- a/src/ifc4d/ifc4d/pp2ifc.py +++ b/src/ifc4d/ifc4d/pp2ifc.py @@ -5,16 +5,17 @@ import sys print("In module products sys.path[0], __package__ ==", sys.path[0], __package__) sys.path.append(sys.path[0]) -import sqlite3 import datetime -from datetime import timedelta -import ifcopenshell.util.date -from .wpattern import AstaCalendarWorkPattern -from .common import ScheduleIfcGenerator, Calendar, WBSEntry, Activity +import sqlite3 import time from collections import defaultdict +from datetime import timedelta from typing import Any +import ifcopenshell.util.date + +from .common import Activity, Calendar, ScheduleIfcGenerator, WBSEntry +from .wpattern import AstaCalendarWorkPattern list_of_tables = [ "BAR", diff --git a/src/ifc4d/ifc4d/wpattern.py b/src/ifc4d/ifc4d/wpattern.py index 2e434223d5..0c2cc265b9 100644 --- a/src/ifc4d/ifc4d/wpattern.py +++ b/src/ifc4d/ifc4d/wpattern.py @@ -7,8 +7,9 @@ for each day as a key there is a list of working times with the format """ import re -from datetime import time, datetime +from datetime import datetime, time from typing import Any + from ifc4d.common import WorkSlot diff --git a/src/ifc5d/ifc5d/csv2ifc.py b/src/ifc5d/ifc5d/csv2ifc.py index 6e0cb7b5ea..b1edd82d88 100644 --- a/src/ifc5d/ifc5d/csv2ifc.py +++ b/src/ifc5d/ifc5d/csv2ifc.py @@ -17,19 +17,21 @@ # along with Ifc5D. If not, see . from __future__ import annotations + import csv +import locale +from pathlib import Path +from typing import Optional, TypedDict, Union + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.control import ifcopenshell.api.cost import ifcopenshell.api.root -import ifcopenshell.util.unit -import ifcopenshell.util.selector -import ifcopenshell.util.element import ifcopenshell.util.cost -import locale -from pathlib import Path -from typing import Union, Optional, TypedDict +import ifcopenshell.util.element +import ifcopenshell.util.selector +import ifcopenshell.util.unit from typing_extensions import NotRequired diff --git a/src/ifc5d/ifc5d/ifc2json.py b/src/ifc5d/ifc5d/ifc2json.py index fae04126af..3b184ca1c7 100644 --- a/src/ifc5d/ifc5d/ifc2json.py +++ b/src/ifc5d/ifc5d/ifc2json.py @@ -1,11 +1,11 @@ -import ifcopenshell -import ifcopenshell.util.unit from typing import Any + +import ifcopenshell import ifcopenshell.util.cost import ifcopenshell.util.date +import ifcopenshell.util.unit from ifcopenshell.util.classification import get_references - CostItem = dict[str, Any] diff --git a/src/ifc5d/ifc5d/ifc5Dspreadsheet.py b/src/ifc5d/ifc5d/ifc5Dspreadsheet.py index 369232c401..324340fb1c 100644 --- a/src/ifc5d/ifc5d/ifc5Dspreadsheet.py +++ b/src/ifc5d/ifc5d/ifc5Dspreadsheet.py @@ -18,18 +18,20 @@ from __future__ import annotations -import os -import time + import argparse import datetime import logging +import os +import time +from collections import Counter +from typing import Any, Optional, TypedDict, Union + import ifcopenshell -import ifcopenshell.util.element import ifcopenshell.util.cost import ifcopenshell.util.date +import ifcopenshell.util.element import ifcopenshell.util.unit -from collections import Counter -from typing import Union, Optional, Any, TypedDict class CostItem(TypedDict): @@ -418,9 +420,9 @@ class Ifc5DCsvWriter(Ifc5Dwriter): class Ifc5DOdsWriter(Ifc5Dwriter): def write(self) -> None: + from odf.number import CurrencyStyle, CurrencySymbol, Number, NumberStyle, Text from odf.opendocument import OpenDocumentSpreadsheet from odf.style import Style, TableCellProperties - from odf.number import NumberStyle, CurrencyStyle, CurrencySymbol, Number, Text super().write() @@ -448,9 +450,9 @@ class Ifc5DOdsWriter(Ifc5Dwriter): self.doc.save(os.path.join(self.output, file_name), True) def write_table(self, cost_schedule): - from odf.table import Table, TableRow, TableCell + from odf.number import CurrencyStyle, CurrencySymbol, Number, NumberStyle, Text + from odf.table import Table, TableCell, TableRow from odf.text import P - from odf.number import NumberStyle, CurrencyStyle, CurrencySymbol, Number, Text def row(): return TableRow() @@ -594,11 +596,13 @@ class Ifc5DPdfWriter(Ifc5Dwriter): def write(self) -> None: import os - import ifc5d import shutil - import typst import tempfile + import typst + + import ifc5d + DEFAULT_OPTIONS = { "nested_structure_depth": 0, "parent_to_new_page_up_to_depth": 0, diff --git a/src/ifc5d/ifc5d/qto.py b/src/ifc5d/ifc5d/qto.py index 67e5478ef1..f7fba8d9e5 100644 --- a/src/ifc5d/ifc5d/qto.py +++ b/src/ifc5d/ifc5d/qto.py @@ -18,24 +18,25 @@ import functools import itertools +import json +import multiprocessing import os import types -import json +from collections import defaultdict +from collections.abc import Iterable +from typing import Any, Literal, NamedTuple, Union, get_args + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W -import ifcopenshell.util.unit import ifcopenshell.util.element +import ifcopenshell.util.representation import ifcopenshell.util.selector import ifcopenshell.util.shape -import ifcopenshell.util.representation import ifcopenshell.util.type -import multiprocessing -from collections import defaultdict -from typing import Any, Literal, get_args, Union, NamedTuple -from collections.abc import Iterable +import ifcopenshell.util.unit class Function(NamedTuple): @@ -545,8 +546,8 @@ class Blender(QtoCalculator): @classmethod def calculate(cls, ifc_file, elements, qtos, results): - import bonsai.tool as tool import bonsai.bim.module.qto.calculator as calculator + import bonsai.tool as tool unit_converter = SI2ProjectUnitConverter(ifc_file) formula_functions: dict[str, types.FunctionType] = {} diff --git a/src/ifc5d/test/test_csv2ifc.py b/src/ifc5d/test/test_csv2ifc.py index 49858ba386..7dc1bbd718 100644 --- a/src/ifc5d/test/test_csv2ifc.py +++ b/src/ifc5d/test/test_csv2ifc.py @@ -16,17 +16,18 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import tempfile import csv -import pytest +import tempfile +from pathlib import Path + +import ifc5d.csv2ifc +import ifc5d.ifc5Dspreadsheet import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.cost import ifcopenshell.util.element -import ifc5d.csv2ifc -import ifc5d.ifc5Dspreadsheet -from pathlib import Path +import pytest class TestCsv2Ifc: diff --git a/src/ifcbimtester/bimtester/__init__.py b/src/ifcbimtester/bimtester/__init__.py index d76bea9460..180dbfaa6f 100644 --- a/src/ifcbimtester/bimtester/__init__.py +++ b/src/ifcbimtester/bimtester/__init__.py @@ -16,8 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with BIMTester. If not, see . -from os.path import dirname -from os.path import realpath +from os.path import dirname, realpath __version__ = version = "0.0.0" diff --git a/src/ifcbimtester/bimtester/clean.py b/src/ifcbimtester/bimtester/clean.py index f457da2a59..d681a9fe29 100644 --- a/src/ifcbimtester/bimtester/clean.py +++ b/src/ifcbimtester/bimtester/clean.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with BIMTester. If not, see . -import ifcopenshell import os from pathlib import Path +import ifcopenshell + class TestPurger: def __init__(self): diff --git a/src/ifcbimtester/bimtester/features/environment.py b/src/ifcbimtester/bimtester/features/environment.py index dc249f32d5..d9576dc885 100644 --- a/src/ifcbimtester/bimtester/features/environment.py +++ b/src/ifcbimtester/bimtester/features/environment.py @@ -17,15 +17,12 @@ # along with BIMTester. If not, see . import os -from behave.model import Scenario +from behave.model import Scenario from bimtester.ifc import IfcStore from bimtester.lang import switch_locale -from logfile import append_logfile -from logfile import create_logfile -from zoom_smart_view import add_smartview -from zoom_smart_view import create_zoom_set_of_smartviews - +from logfile import append_logfile, create_logfile +from zoom_smart_view import add_smartview, create_zoom_set_of_smartviews this_path = os.path.dirname(os.path.realpath(__file__)) diff --git a/src/ifcbimtester/bimtester/features/steps/aggregation/en.py b/src/ifcbimtester/bimtester/features/steps/aggregation/en.py index 70568d42cb..a2bbe621a1 100644 --- a/src/ifcbimtester/bimtester/features/steps/aggregation/en.py +++ b/src/ifcbimtester/bimtester/features/steps/aggregation/en.py @@ -16,8 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with BIMTester. If not, see . -from behave import step, given, when, then, use_step_matcher - +from behave import given, step, then, use_step_matcher, when from bimtester import util from bimtester.ifc import IfcStore from bimtester.table import TableModel diff --git a/src/ifcbimtester/bimtester/features/steps/all.py b/src/ifcbimtester/bimtester/features/steps/all.py index a525eccf00..6c46e6450d 100644 --- a/src/ifcbimtester/bimtester/features/steps/all.py +++ b/src/ifcbimtester/bimtester/features/steps/all.py @@ -26,7 +26,7 @@ use_step_matcher("parse") from bimtester.features.steps.attributes_eleclasses import de, en use_step_matcher("parse") -from bimtester.features.steps.attributes_psets import en, de +from bimtester.features.steps.attributes_psets import de, en use_step_matcher("parse") from bimtester.features.steps.attributes_qsets import en diff --git a/src/ifcbimtester/bimtester/features/steps/application/en.py b/src/ifcbimtester/bimtester/features/steps/application/en.py index b2dbd5ffe7..9e40eb99b4 100644 --- a/src/ifcbimtester/bimtester/features/steps/application/en.py +++ b/src/ifcbimtester/bimtester/features/steps/application/en.py @@ -17,7 +17,6 @@ # along with BIMTester. If not, see . from behave import step - from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/attributes_eleclasses/en.py b/src/ifcbimtester/bimtester/features/steps/attributes_eleclasses/en.py index f141eaee23..e032207acf 100644 --- a/src/ifcbimtester/bimtester/features/steps/attributes_eleclasses/en.py +++ b/src/ifcbimtester/bimtester/features/steps/attributes_eleclasses/en.py @@ -17,9 +17,7 @@ # along with BIMTester. If not, see . import ifcopenshell.util.element as eleutils - from behave import step - from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/attributes_psets/en.py b/src/ifcbimtester/bimtester/features/steps/attributes_psets/en.py index 6141213801..d9b41eb10a 100644 --- a/src/ifcbimtester/bimtester/features/steps/attributes_psets/en.py +++ b/src/ifcbimtester/bimtester/features/steps/attributes_psets/en.py @@ -16,9 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with BIMTester. If not, see . -from behave import step -from behave import use_step_matcher - +from behave import step, use_step_matcher from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ @@ -48,6 +46,7 @@ def step_impl(context, ifc_class, property_path): ) def step_impl(context, ifc_class, property_path, pattern): import re + from ifcopenshell.util.element import get_psets pset_name, property_name = property_path.split(".") diff --git a/src/ifcbimtester/bimtester/features/steps/classification/en.py b/src/ifcbimtester/bimtester/features/steps/classification/en.py index 356d9cfd36..461b6b91e2 100644 --- a/src/ifcbimtester/bimtester/features/steps/classification/en.py +++ b/src/ifcbimtester/bimtester/features/steps/classification/en.py @@ -17,8 +17,8 @@ # along with BIMTester. If not, see . import json -from behave import step +from behave import step from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/element_classes/en.py b/src/ifcbimtester/bimtester/features/steps/element_classes/en.py index e41c0aad05..035ff05cf2 100644 --- a/src/ifcbimtester/bimtester/features/steps/element_classes/en.py +++ b/src/ifcbimtester/bimtester/features/steps/element_classes/en.py @@ -17,7 +17,6 @@ # along with BIMTester. If not, see . from behave import step - from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/geocoding/en.py b/src/ifcbimtester/bimtester/features/steps/geocoding/en.py index c9b4007d49..de0204ba55 100644 --- a/src/ifcbimtester/bimtester/features/steps/geocoding/en.py +++ b/src/ifcbimtester/bimtester/features/steps/geocoding/en.py @@ -17,7 +17,6 @@ # along with BIMTester. If not, see . from behave import step, use_step_matcher - from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/geolocation/en.py b/src/ifcbimtester/bimtester/features/steps/geolocation/en.py index 13aa359671..40568b6fe4 100644 --- a/src/ifcbimtester/bimtester/features/steps/geolocation/en.py +++ b/src/ifcbimtester/bimtester/features/steps/geolocation/en.py @@ -17,14 +17,13 @@ # along with BIMTester. If not, see . import math -import numpy as np + import ifcopenshell import ifcopenshell.util.element -import ifcopenshell.util.placement import ifcopenshell.util.geolocation - +import ifcopenshell.util.placement +import numpy as np from behave import step - from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/geometric_detail/en.py b/src/ifcbimtester/bimtester/features/steps/geometric_detail/en.py index 153cca30b5..5179a1d726 100644 --- a/src/ifcbimtester/bimtester/features/steps/geometric_detail/en.py +++ b/src/ifcbimtester/bimtester/features/steps/geometric_detail/en.py @@ -17,7 +17,6 @@ # along with BIMTester. If not, see . from behave import step - from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/model_federation/en.py b/src/ifcbimtester/bimtester/features/steps/model_federation/en.py index af0edc0975..db76d08484 100644 --- a/src/ifcbimtester/bimtester/features/steps/model_federation/en.py +++ b/src/ifcbimtester/bimtester/features/steps/model_federation/en.py @@ -18,9 +18,7 @@ import ifcopenshell.util.geolocation import ifcopenshell.util.placement - from behave import step - from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/project_setup/en.py b/src/ifcbimtester/bimtester/features/steps/project_setup/en.py index 84e3e84f58..c86990eb7d 100644 --- a/src/ifcbimtester/bimtester/features/steps/project_setup/en.py +++ b/src/ifcbimtester/bimtester/features/steps/project_setup/en.py @@ -17,7 +17,6 @@ # along with BIMTester. If not, see . from behave import step - from bimtester import util from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/features/steps/spatial_structure/en.py b/src/ifcbimtester/bimtester/features/steps/spatial_structure/en.py index 5eee990077..f57efa1713 100644 --- a/src/ifcbimtester/bimtester/features/steps/spatial_structure/en.py +++ b/src/ifcbimtester/bimtester/features/steps/spatial_structure/en.py @@ -17,7 +17,6 @@ # along with BIMTester. If not, see . from behave import step - from bimtester.ifc import IfcStore from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/guiwidget.py b/src/ifcbimtester/bimtester/guiwidget.py index b9b02e81af..9c41a78b7e 100644 --- a/src/ifcbimtester/bimtester/guiwidget.py +++ b/src/ifcbimtester/bimtester/guiwidget.py @@ -16,18 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with BIMTester. If not, see . -import os import json +import os import sys import webbrowser +from PySide2 import QtCore, QtGui, QtWidgets + import bimtester.reports import bimtester.run -from PySide2 import QtCore -from PySide2 import QtGui -from PySide2 import QtWidgets - def run(): app = QtWidgets.QApplication(sys.argv) diff --git a/src/ifcbimtester/bimtester/reports.py b/src/ifcbimtester/bimtester/reports.py index df237f631b..2c250c7f85 100644 --- a/src/ifcbimtester/bimtester/reports.py +++ b/src/ifcbimtester/bimtester/reports.py @@ -19,8 +19,10 @@ import datetime import json import os -import pystache import sys + +import pystache + from bimtester.lang import _ diff --git a/src/ifcbimtester/bimtester/run.py b/src/ifcbimtester/bimtester/run.py index 5f0d58bd18..f4684cfb78 100644 --- a/src/ifcbimtester/bimtester/run.py +++ b/src/ifcbimtester/bimtester/run.py @@ -16,27 +16,29 @@ # You should have received a copy of the GNU Lesser General Public License # along with BIMTester. If not, see . -import os -import sys import json -import shutil import logging +import os +import shutil +import sys import tempfile + import ifcopenshell try: import ifcopenshell.express except: pass # They are using an old version of IfcOpenShell. Gracefully degrade for now. -import behave.formatter.pretty # Needed for pyinstaller to package it -from bimtester.ifc import IfcStore from distutils.dir_util import copy_tree -from behave.__main__ import main as behave_main - # TODO: refactor when this isn't super experimental from logging import StreamHandler +import behave.formatter.pretty # Needed for pyinstaller to package it +from behave.__main__ import main as behave_main + +from bimtester.ifc import IfcStore + class TestRunner: def __init__(self, ifc_path, schema_path=None, ifc=None): diff --git a/src/ifcbimtester/bimtester/util.py b/src/ifcbimtester/bimtester/util.py index a9e09b0b8e..16bdf06aa6 100644 --- a/src/ifcbimtester/bimtester/util.py +++ b/src/ifcbimtester/bimtester/util.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with BIMTester. If not, see . +import json + import ifcopenshell import ifcopenshell.util.element import ifcopenshell.validate -import json + from bimtester.lang import _ diff --git a/src/ifcbimtester/cli.py b/src/ifcbimtester/cli.py index f091fc27ae..7172b62023 100644 --- a/src/ifcbimtester/cli.py +++ b/src/ifcbimtester/cli.py @@ -19,8 +19,9 @@ # along with BIMTester. If not, see . -import os import argparse +import os + import bimtester.clean import bimtester.reports import bimtester.run diff --git a/src/ifcbimtester/examples/steps/aggregation.py b/src/ifcbimtester/examples/steps/aggregation.py index 67435eee62..ccf46b5e0d 100644 --- a/src/ifcbimtester/examples/steps/aggregation.py +++ b/src/ifcbimtester/examples/steps/aggregation.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with BIMTester. If not, see . -from behave import step, given, when, then, use_step_matcher +from behave import given, step, then, use_step_matcher, when use_step_matcher("parse") diff --git a/src/ifcbimtester/examples/steps/attributes_eleclasses.py b/src/ifcbimtester/examples/steps/attributes_eleclasses.py index 466eff15c2..ed5475ac65 100644 --- a/src/ifcbimtester/examples/steps/attributes_eleclasses.py +++ b/src/ifcbimtester/examples/steps/attributes_eleclasses.py @@ -17,10 +17,8 @@ # along with BIMTester. If not, see . from behave import step - from utils import IfcFile - use_step_matcher("re") diff --git a/src/ifcbimtester/gui.py b/src/ifcbimtester/gui.py index 1fe0c6b674..6c5ada241b 100644 --- a/src/ifcbimtester/gui.py +++ b/src/ifcbimtester/gui.py @@ -21,5 +21,4 @@ from bimtester.guiwidget import run - run() diff --git a/src/ifcblender/io_import_scene_ifc/__init__.py b/src/ifcblender/io_import_scene_ifc/__init__.py index 29834b2356..c85864a6de 100644 --- a/src/ifcblender/io_import_scene_ifc/__init__.py +++ b/src/ifcblender/io_import_scene_ifc/__init__.py @@ -40,17 +40,18 @@ if "bpy" in locals(): if "ifcopenshell" in locals(): importlib.reload(ifcopenshell) +import logging +import os +from collections import defaultdict + +import bpy +import mathutils from bpy.props import ( BoolProperty, IntProperty, StringProperty, ) from bpy_extras.io_utils import ImportHelper -from collections import defaultdict -import bpy -import logging -import mathutils -import os major, minor = bpy.app.version[0:2] transpose_matrices = minor >= 62 diff --git a/src/ifccityjson/ifccityjson/__main__.py b/src/ifccityjson/ifccityjson/__main__.py index 284560b288..6a9e5e9881 100644 --- a/src/ifccityjson/ifccityjson/__main__.py +++ b/src/ifccityjson/ifccityjson/__main__.py @@ -17,7 +17,9 @@ # along with ifccityjson. If not, see . import argparse + from cjio import cityjson + from .cityjson2ifc import Cityjson2ifc diff --git a/src/ifccityjson/ifccityjson/cityjson2ifc/cityjson2ifc.py b/src/ifccityjson/ifccityjson/cityjson2ifc/cityjson2ifc.py index 441855baf4..f26f5c89d6 100644 --- a/src/ifccityjson/ifccityjson/cityjson2ifc/cityjson2ifc.py +++ b/src/ifccityjson/ifccityjson/cityjson2ifc/cityjson2ifc.py @@ -18,6 +18,8 @@ # along with ifccityjson. If not, see . import os +from datetime import datetime + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.context @@ -26,10 +28,9 @@ import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.guid -from datetime import datetime -from .geometry import GeometryIO from . import __version__ +from .geometry import GeometryIO JSON_TO_IFC = { "Building": ["IfcBuilding"], diff --git a/src/ifcclash/ifcclash/__main__.py b/src/ifcclash/ifcclash/__main__.py index bc81131a53..13371a1119 100644 --- a/src/ifcclash/ifcclash/__main__.py +++ b/src/ifcclash/ifcclash/__main__.py @@ -18,10 +18,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcClash. If not, see . -import sys +import argparse import json import logging -import argparse +import sys + from .ifcclash import Clasher, ClashSettings parser = argparse.ArgumentParser(description="Clashes geometry between two IFC files") diff --git a/src/ifcclash/ifcclash/ifcclash.py b/src/ifcclash/ifcclash/ifcclash.py index 409fb914d7..6e8f05b3a8 100644 --- a/src/ifcclash/ifcclash/ifcclash.py +++ b/src/ifcclash/ifcclash/ifcclash.py @@ -20,15 +20,17 @@ from __future__ import annotations + import json -import time -import numpy as np import multiprocessing +import time +from logging import Logger +from typing import Literal, TypedDict, Union + import ifcopenshell import ifcopenshell.geom import ifcopenshell.util.selector -from logging import Logger -from typing import Literal, TypedDict, Union +import numpy as np from typing_extensions import NotRequired, assert_never @@ -256,9 +258,10 @@ class Clasher: json.dump(clash_sets, clashes_file, indent=4) def smart_group_clashes(self, clash_sets: list[ClashSet], max_clustering_distance: float): - from sklearn.cluster import OPTICS from collections import defaultdict + from sklearn.cluster import OPTICS + count_of_input_clashes = 0 count_of_clash_sets = 0 count_of_smart_groups = 0 diff --git a/src/ifcclash/make.py b/src/ifcclash/make.py index b4436f6e14..e15c972795 100644 --- a/src/ifcclash/make.py +++ b/src/ifcclash/make.py @@ -21,6 +21,5 @@ import os import subprocess - cmd = "pyinstaller ./bootstrap.py --name ifcclash --onefile --clean" subprocess.check_output(cmd, shell=True) diff --git a/src/ifccsv/ifccsv.py b/src/ifccsv/ifccsv.py index 6c87209770..341fa186e7 100755 --- a/src/ifccsv/ifccsv.py +++ b/src/ifccsv/ifccsv.py @@ -20,23 +20,24 @@ # This can be packaged with `pyinstaller --onefile --clean --icon=icon.ico ifccsv.py` +import argparse +import csv import os import re -import csv -import argparse +from collections.abc import Iterable +from statistics import mean +from typing import Literal, Optional, Union + import ifcopenshell -import ifcopenshell.util.selector import ifcopenshell.util.element import ifcopenshell.util.schema -from statistics import mean -from typing import Optional, Union, Literal -from collections.abc import Iterable +import ifcopenshell.util.selector try: from odf.namespaces import OFFICENS from odf.opendocument import OpenDocumentSpreadsheet, load from odf.style import Style, TableCellProperties - from odf.table import Table, TableRow, TableCell + from odf.table import Table, TableCell, TableRow from odf.text import P except: pass # No ODF support diff --git a/src/ifcdiff/ifcdiff.py b/src/ifcdiff/ifcdiff.py index 889f23ca37..c7d6bb5d03 100755 --- a/src/ifcdiff/ifcdiff.py +++ b/src/ifcdiff/ifcdiff.py @@ -20,23 +20,23 @@ # This can be packaged with `pyinstaller --onefile --clean --icon=icon.ico ifcdiff.py` -import time +import argparse import json import logging -import argparse -import numpy as np import multiprocessing +import time +from typing import Any, Literal, Optional, Union + import ifcopenshell import ifcopenshell.geom -import ifcopenshell.util.element -import ifcopenshell.util.selector -import ifcopenshell.util.placement import ifcopenshell.util.classification +import ifcopenshell.util.element +import ifcopenshell.util.placement import ifcopenshell.util.representation +import ifcopenshell.util.selector +import numpy as np from deepdiff import DeepDiff from orderly_set import OrderedSet -from typing import Optional, Union, Literal, Any - __version__ = version = "0.0.0" diff --git a/src/ifcdiff/test.py b/src/ifcdiff/test.py index c9e632091f..ca294a1ed4 100644 --- a/src/ifcdiff/test.py +++ b/src/ifcdiff/test.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcdiff import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.geometry @@ -24,6 +23,8 @@ import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.representation +import ifcdiff + def setup_project() -> ifcopenshell.file: ifc_file = ifcopenshell.file(schema="IFC4") diff --git a/src/ifcfm/ifcfm/__init__.py b/src/ifcfm/ifcfm/__init__.py index 14fa76146d..ced960305c 100644 --- a/src/ifcfm/ifcfm/__init__.py +++ b/src/ifcfm/ifcfm/__init__.py @@ -17,15 +17,17 @@ # along with IfcFM. If not, see . from __future__ import annotations -import os -import re + import csv import importlib -import ifcopenshell.util.selector -from pathlib import Path +import os +import re from collections import defaultdict -from typing import Literal, Union, Any, TYPE_CHECKING from collections.abc import Callable +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Union + +import ifcopenshell.util.selector try: from openpyxl import Workbook @@ -37,7 +39,7 @@ try: import odf.namespaces as odf_ns from odf.opendocument import OpenDocumentSpreadsheet from odf.style import Style, TableCellProperties, TableProperties - from odf.table import Table, TableRow, TableCell + from odf.table import Table, TableCell, TableRow from odf.text import P except: pass # No ODF support diff --git a/src/ifcfm/ifcfm/__main__.py b/src/ifcfm/ifcfm/__main__.py index 9133611716..8affc93d29 100644 --- a/src/ifcfm/ifcfm/__main__.py +++ b/src/ifcfm/ifcfm/__main__.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcFM. If not, see . -import ifcfm import argparse + import ifcopenshell +import ifcfm + parser = argparse.ArgumentParser(description="Extracts FM data from IFC to spreadsheets") parser.add_argument( "-p", diff --git a/src/ifcfm/ifcfm/basic.py b/src/ifcfm/ifcfm/basic.py index 62fbdd47e0..7cd5801c6d 100644 --- a/src/ifcfm/ifcfm/basic.py +++ b/src/ifcfm/ifcfm/basic.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcFM. If not, see . +from typing import Any, Optional, Union + import ifcopenshell import ifcopenshell.util.classification import ifcopenshell.util.date @@ -23,7 +25,6 @@ import ifcopenshell.util.element import ifcopenshell.util.fm import ifcopenshell.util.placement import ifcopenshell.util.system -from typing import Any, Union, Optional def get_facilities(ifc_file: ifcopenshell.file) -> list[ifcopenshell.entity_instance]: diff --git a/src/ifcfm/ifcfm/cobie24.py b/src/ifcfm/ifcfm/cobie24.py index 778d49de79..f4848e1654 100644 --- a/src/ifcfm/ifcfm/cobie24.py +++ b/src/ifcfm/ifcfm/cobie24.py @@ -16,6 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcFM. If not, see . +from collections.abc import Generator +from typing import Any, Optional, Union + import ifcopenshell import ifcopenshell.geom import ifcopenshell.util.classification @@ -26,9 +29,6 @@ import ifcopenshell.util.placement import ifcopenshell.util.shape import ifcopenshell.util.system from ifcopenshell.util.shape_builder import np_matrix_to_euler -from typing import Any, Union, Optional -from collections.abc import Generator - # The original BIMServer plugin has a function called ifcToCOBie: # https://github.com/opensourceBIM/COBie-plugins/blob/master/COBieShared/src/org/bimserver/cobie/shared/serialization/COBieTabSerializer.java#L54 diff --git a/src/ifcfm/ifcfm/cobie24legacy.py b/src/ifcfm/ifcfm/cobie24legacy.py index 6e5eaf84c2..078529e892 100644 --- a/src/ifcfm/ifcfm/cobie24legacy.py +++ b/src/ifcfm/ifcfm/cobie24legacy.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcFM. If not, see . +from typing import Any, Optional, Union + import ifcopenshell import ifcopenshell.guid import ifcopenshell.util.classification @@ -24,8 +26,6 @@ import ifcopenshell.util.element import ifcopenshell.util.fm import ifcopenshell.util.placement import ifcopenshell.util.system -from typing import Any, Union, Optional - # The original BIMServer plugin has a function called ifcToCOBie: # https://github.com/opensourceBIM/COBie-plugins/blob/master/COBieShared/src/org/bimserver/cobie/shared/serialization/COBieTabSerializer.java#L54 diff --git a/src/ifcopenshell-python/ifcopenshell/__init__.py b/src/ifcopenshell-python/ifcopenshell/__init__.py index b81db34cbc..9d472d3b1d 100644 --- a/src/ifcopenshell-python/ifcopenshell/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/__init__.py @@ -54,13 +54,14 @@ Example: print(wall.Name) """ from __future__ import annotations + import os import sys -import zipfile import tempfile -from pathlib import Path -from typing import Optional, Union, TYPE_CHECKING, Any, overload, Literal +import zipfile from collections.abc import Generator, Sequence +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Optional, Union, overload if TYPE_CHECKING: import ifcopenshell.express.schema_class @@ -88,12 +89,10 @@ except Exception: # `_file`, `_stream` is used only for annotations inside this file, # see https://github.com/microsoft/pyright/discussions/9065. -from .file import file as _file -from .file import file - -from .file import rocksdb_lazy_instance from . import guid from .entity_instance import entity_instance, register_schema_attributes +from .file import file, rocksdb_lazy_instance +from .file import file as _file from .sql import sqlite, sqlite_entity # explicitly specify available imported symbols @@ -110,8 +109,8 @@ __all__ = [ ] try: - from .stream import stream as _stream, stream_entity - from .stream import stream + from .stream import stream, stream_entity + from .stream import stream as _stream except: pass diff --git a/src/ifcopenshell-python/ifcopenshell/api/__init__.py b/src/ifcopenshell-python/ifcopenshell/api/__init__.py index 85e60be9c2..49c3b471dd 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/api/__init__.py @@ -38,14 +38,16 @@ Also see how to `create a simple model from scratch `_. """ -import json -import numpy -import inspect import importlib -import ifcopenshell +import inspect +import json from collections.abc import Callable -from typing import Any, Optional, TYPE_CHECKING from functools import partial +from typing import TYPE_CHECKING, Any, Optional + +import numpy + +import ifcopenshell if TYPE_CHECKING: import ifcopenshell.api @@ -187,8 +189,8 @@ def remove_all_listeners(): def extract_docs(module: str, usecase: str) -> dict[str, Any]: - import typing import collections + import typing inputs = collections.OrderedDict() @@ -304,8 +306,8 @@ def wrap_usecase(usecase_path, usecase): def wrap_usecases(path, name): """This developer feature wraps an API module's usecases with listeners.""" - import sys import pkgutil + import sys module_name = name.split(".")[-1] module = sys.modules[name] diff --git a/src/ifcopenshell-python/ifcopenshell/api/aggregate/assign_object.py b/src/ifcopenshell-python/ifcopenshell/api/aggregate/assign_object.py index 22d027b73b..a7e3e403d8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/aggregate/assign_object.py +++ b/src/ifcopenshell-python/ifcopenshell/api/aggregate/assign_object.py @@ -16,14 +16,15 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell +import ifcopenshell.api.geometry import ifcopenshell.api.owner import ifcopenshell.api.spatial -import ifcopenshell.api.geometry import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.placement -from typing import Union def assign_object( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/__init__.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/__init__.py index 563376485f..790125cb0b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/__init__.py @@ -47,45 +47,48 @@ Future versions of this API may support: 5. Adding a segment at any location along a curve """ +from ._get_segment_start_point_label import register_referent_name_callback from .add_stationing_referent import add_stationing_referent from .add_vertical_layout import add_vertical_layout from .add_zero_length_segment import add_zero_length_segment -from .create_layout_segment import create_layout_segment from .create import create from .create_as_offset_curve import create_as_offset_curve from .create_as_polyline import create_as_polyline from .create_by_pi_method import create_by_pi_method from .create_from_csv import create_from_csv -from .create_segment_representations import create_segment_representations +from .create_layout_segment import create_layout_segment from .create_representation import create_representation +from .create_segment_representations import create_segment_representations from .distance_along_from_station import distance_along_from_station from .get_alignment import get_alignment from .get_alignment_layout_nest import get_alignment_layout_nest +from .get_alignment_layouts import get_alignment_layouts from .get_alignment_segment_nest import get_alignment_segment_nest from .get_alignment_start_station import get_alignment_start_station -from .get_curve_segment_transition_code import get_curve_segment_transition_code -from .get_layout_segments import get_layout_segments -from .get_horizontal_layout import get_horizontal_layout -from .get_vertical_layout import get_vertical_layout -from .get_cant_layout import get_cant_layout -from .get_alignment_layouts import get_alignment_layouts from .get_axis_subcontext import get_axis_subcontext from .get_basis_curve import get_basis_curve +from .get_cant_layout import get_cant_layout from .get_child_alignments import get_child_alignments from .get_curve import get_curve +from .get_curve_segment_transition_code import get_curve_segment_transition_code +from .get_horizontal_layout import get_horizontal_layout from .get_layout_curve import get_layout_curve +from .get_layout_segments import get_layout_segments from .get_mapped_segments import get_mapped_segments from .get_parent_alignment import get_parent_alignment from .get_referent_nest import get_referent_nest +from .get_vertical_layout import get_vertical_layout from .has_zero_length_segment import has_zero_length_segment -from .layout_horizontal_alignment_by_pi_method import layout_horizontal_alignment_by_pi_method -from .layout_vertical_alignment_by_pi_method import layout_vertical_alignment_by_pi_method +from .layout_horizontal_alignment_by_pi_method import ( + layout_horizontal_alignment_by_pi_method, +) +from .layout_vertical_alignment_by_pi_method import ( + layout_vertical_alignment_by_pi_method, +) from .name_segments import name_segments from .update_fallback_position import update_fallback_position from .util import * -from ._get_segment_start_point_label import register_referent_name_callback - __all__ = [ "add_stationing_referent", "add_vertical_layout", diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_curve.py index 4fcadc176e..934e456b57 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_curve.py @@ -16,19 +16,27 @@ # 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 import ifcopenshell.api import ifcopenshell.api.alignment import ifcopenshell.geom -import ifcopenshell.util.unit import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper -import numpy as np +import ifcopenshell.util.unit from ifcopenshell import entity_instance - -from ifcopenshell.api.alignment._update_curve_segment_transition_code import _update_curve_segment_transition_code -from ifcopenshell.api.alignment._map_alignment_horizontal_segment import _map_alignment_horizontal_segment -from ifcopenshell.api.alignment._map_alignment_vertical_segment import _map_alignment_vertical_segment -from ifcopenshell.api.alignment._map_alignment_cant_segment import _map_alignment_cant_segment +from ifcopenshell.api.alignment._map_alignment_cant_segment import ( + _map_alignment_cant_segment, +) +from ifcopenshell.api.alignment._map_alignment_horizontal_segment import ( + _map_alignment_horizontal_segment, +) +from ifcopenshell.api.alignment._map_alignment_vertical_segment import ( + _map_alignment_vertical_segment, +) +from ifcopenshell.api.alignment._update_curve_segment_transition_code import ( + _update_curve_segment_transition_code, +) def _add_curve_segment_to_composite_curve( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_layout.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_layout.py index bb31342efb..999bf2f80f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_layout.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_layout.py @@ -16,6 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + +import numpy as np + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.api.nest @@ -23,14 +28,11 @@ import ifcopenshell.api.pset import ifcopenshell.geom import ifcopenshell.util.alignment import ifcopenshell.util.unit -from ifcopenshell import ifcopenshell_wrapper -import numpy as np -import math -from ifcopenshell import entity_instance -from collections.abc import Sequence - +from ifcopenshell import entity_instance, ifcopenshell_wrapper from ifcopenshell.api.alignment._add_segment_to_curve import _add_segment_to_curve -from ifcopenshell.api.alignment._get_segment_start_point_label import _get_segment_start_point_label +from ifcopenshell.api.alignment._get_segment_start_point_label import ( + _get_segment_start_point_label, +) def _add_segment_to_layout(file: ifcopenshell.file, layout: entity_instance, segment: entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_zero_length_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_zero_length_segment.py index 17be8ec45c..00ac9d6000 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_zero_length_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_zero_length_segment.py @@ -21,8 +21,9 @@ import ifcopenshell.api.alignment import ifcopenshell.util import ifcopenshell.util.alignment from ifcopenshell import entity_instance - -from ifcopenshell.api.alignment._get_segment_start_point_label import _get_segment_start_point_label +from ifcopenshell.api.alignment._get_segment_start_point_label import ( + _get_segment_start_point_label, +) def _add_zero_length_segment(file: ifcopenshell.file, layout: entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_geometric_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_geometric_representation.py index d6b070af78..30b91bb0a0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_geometric_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_geometric_representation.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.api.geometry from ifcopenshell import entity_instance -import math -from collections.abc import Sequence - def _create_geometric_representation(file: ifcopenshell.file, alignment: entity_instance) -> None: """ diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py index 402a6c3513..31f0c583aa 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.api.geometry from ifcopenshell import entity_instance -import math -from collections.abc import Sequence - def _create_offset_curve_representation( file: ifcopenshell.file, alignment: entity_instance, offsets: Sequence[entity_instance] diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_polyline_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_polyline_representation.py index e8329a5b1a..c745e6b9ac 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_polyline_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_polyline_representation.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.api.geometry from ifcopenshell import entity_instance -import math -from collections.abc import Sequence - def _create_polyline_representation( file: ifcopenshell.file, alignment: entity_instance, points: Sequence[entity_instance] diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_cant_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_cant_segment.py index ccf466828b..27a781c505 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_cant_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_cant_segment.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.api.geometry from ifcopenshell import entity_instance -import math -from collections.abc import Sequence - def _get_cant_segment(horizontal_segment: entity_instance) -> entity_instance: """ diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_segment_start_point_label.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_segment_start_point_label.py index b1bddfb2e6..34b30b9f59 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_segment_start_point_label.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_segment_start_point_label.py @@ -16,10 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -from ifcopenshell import entity_instance from collections.abc import Sequence +import ifcopenshell +from ifcopenshell import entity_instance _horizontal_callback = None _vertical_callback = None diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_cant_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_cant_segment.py index c86edc110e..e5b9ea0381 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_cant_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_cant_segment.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + import ifcopenshell from ifcopenshell import entity_instance from ifcopenshell.api.alignment import get_axis_subcontext -from collections.abc import Sequence -import math def _get_axis(file: ifcopenshell.file, Ds: float, rail_head_distance: float) -> entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_horizontal_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_horizontal_segment.py index 73802f2318..17de77a7ad 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_horizontal_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_horizontal_segment.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + import ifcopenshell -from ifcopenshell import entity_instance import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper import ifcopenshell.util import ifcopenshell.util.unit -from collections.abc import Sequence -import math - +from ifcopenshell import entity_instance from ifcopenshell.api.alignment._get_cant_segment import _get_cant_segment diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_vertical_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_vertical_segment.py index 1f8a1ef5d7..e47a50d5ce 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_vertical_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_vertical_segment.py @@ -16,11 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -from ifcopenshell import ifcopenshell_wrapper -from ifcopenshell import entity_instance -from collections.abc import Sequence import math +from collections.abc import Sequence + +import ifcopenshell +from ifcopenshell import entity_instance, ifcopenshell_wrapper def _polynomial_length(A: float, B: float, C: float, L: float) -> float: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_update_curve_segment_transition_code.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_update_curve_segment_transition_code.py index 59154980dc..5e1c2d0123 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_update_curve_segment_transition_code.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_update_curve_segment_transition_code.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math + +import numpy as np + import ifcopenshell import ifcopenshell.api.alignment -from ifcopenshell import ifcopenshell_wrapper import ifcopenshell.geom -from ifcopenshell import entity_instance -import numpy as np -import math +from ifcopenshell import entity_instance, ifcopenshell_wrapper def _update_curve_segment_transition_code(prev_segment: entity_instance, segment: entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_stationing_referent.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_stationing_referent.py index 2ac08a2fbf..bccc7b0213 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_stationing_referent.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_stationing_referent.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 numpy as np + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.api.nest @@ -24,9 +26,7 @@ import ifcopenshell.geom import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.unit -from ifcopenshell import entity_instance -from ifcopenshell import ifcopenshell_wrapper -import numpy as np +from ifcopenshell import entity_instance, ifcopenshell_wrapper def add_stationing_referent( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_vertical_layout.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_vertical_layout.py index 06c1ef9fa8..41daef657c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_vertical_layout.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_vertical_layout.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import ifcopenshell +import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.alignment import ifcopenshell.api.geometry @@ -24,9 +25,7 @@ import ifcopenshell.api.nest import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.representation -import ifcopenshell.api from ifcopenshell import entity_instance - from ifcopenshell.api.alignment._add_zero_length_segment import _add_zero_length_segment diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_zero_length_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_zero_length_segment.py index 5b36cddd75..96c3a9c1f2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_zero_length_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_zero_length_segment.py @@ -16,21 +16,30 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math + +import numpy as np + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.api.nest import ifcopenshell.geom -import ifcopenshell.util.alignment -from ifcopenshell import entity_instance import ifcopenshell.ifcopenshell_wrapper as wrapper +import ifcopenshell.util.alignment import ifcopenshell.util.unit -import numpy as np -import math - -from ifcopenshell.api.alignment._get_segment_start_point_label import _get_segment_start_point_label -from ifcopenshell.api.alignment._map_alignment_horizontal_segment import _map_alignment_horizontal_segment -from ifcopenshell.api.alignment._map_alignment_vertical_segment import _map_alignment_vertical_segment -from ifcopenshell.api.alignment._update_curve_segment_transition_code import _update_curve_segment_transition_code +from ifcopenshell import entity_instance +from ifcopenshell.api.alignment._get_segment_start_point_label import ( + _get_segment_start_point_label, +) +from ifcopenshell.api.alignment._map_alignment_horizontal_segment import ( + _map_alignment_horizontal_segment, +) +from ifcopenshell.api.alignment._map_alignment_vertical_segment import ( + _map_alignment_vertical_segment, +) +from ifcopenshell.api.alignment._update_curve_segment_transition_code import ( + _update_curve_segment_transition_code, +) def add_zero_length_segment(file: ifcopenshell.file, layout: entity_instance, include_referent: bool = True) -> bool: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create.py index cd707920c0..d2682aaad1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create.py @@ -21,11 +21,11 @@ import ifcopenshell.api.aggregate import ifcopenshell.api.alignment import ifcopenshell.api.nest import ifcopenshell.util.alignment - from ifcopenshell import entity_instance - -from ifcopenshell.api.alignment._create_geometric_representation import _create_geometric_representation from ifcopenshell.api.alignment._add_zero_length_segment import _add_zero_length_segment +from ifcopenshell.api.alignment._create_geometric_representation import ( + _create_geometric_representation, +) def create( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py index a206fda69b..f4bc35773a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py @@ -16,17 +16,17 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.aggregate import ifcopenshell.api.alignment import ifcopenshell.api.nest import ifcopenshell.util.alignment - from ifcopenshell import entity_instance - -from ifcopenshell.api.alignment._create_offset_curve_representation import _create_offset_curve_representation - -from collections.abc import Sequence +from ifcopenshell.api.alignment._create_offset_curve_representation import ( + _create_offset_curve_representation, +) def create_as_offset_curve( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_polyline.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_polyline.py index 1048f1fa69..4988a31920 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_polyline.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_polyline.py @@ -16,18 +16,18 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.aggregate import ifcopenshell.api.alignment import ifcopenshell.api.nest import ifcopenshell.util.alignment - from ifcopenshell import entity_instance - -from ifcopenshell.api.alignment._create_polyline_representation import _create_polyline_representation - -import math -from collections.abc import Sequence +from ifcopenshell.api.alignment._create_polyline_representation import ( + _create_polyline_representation, +) def _create_layout(file: ifcopenshell.file, alignment: entity_instance, points: Sequence[entity_instance]): diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_by_pi_method.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_by_pi_method.py index 55f91b5cbe..09a0f0ecb6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_by_pi_method.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_by_pi_method.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.aggregate import ifcopenshell.api.alignment import ifcopenshell.api.nest from ifcopenshell import entity_instance -from collections.abc import Sequence def create_by_pi_method( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_from_csv.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_from_csv.py index 4125f16bfc..ce7192611c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_from_csv.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_from_csv.py @@ -16,15 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.api.alignment -import ifcopenshell.api -from ifcopenshell import entity_instance -from ifcopenshell.api.alignment import get_axis_subcontext - +import csv from collections.abc import Sequence -import csv +import ifcopenshell +import ifcopenshell.api +import ifcopenshell.api.alignment +from ifcopenshell import entity_instance +from ifcopenshell.api.alignment import get_axis_subcontext def create_from_csv(file: ifcopenshell.file, filepath: str) -> entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_layout_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_layout_segment.py index 3f6789fd98..6fd6876e08 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_layout_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_layout_segment.py @@ -16,15 +16,15 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from typing import Union + +import numpy as np + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.geom -from ifcopenshell import entity_instance -import math -from ifcopenshell import ifcopenshell_wrapper -import numpy as np -from typing import Union - +from ifcopenshell import entity_instance, ifcopenshell_wrapper from ifcopenshell.api.alignment._add_segment_to_layout import _add_segment_to_layout diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_representation.py index c94ee873fa..896108367f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_representation.py @@ -19,9 +19,10 @@ import ifcopenshell import ifcopenshell.api.alignment from ifcopenshell import entity_instance - -from ifcopenshell.api.alignment._create_geometric_representation import _create_geometric_representation from ifcopenshell.api.alignment._add_segment_to_curve import _add_segment_to_curve +from ifcopenshell.api.alignment._create_geometric_representation import ( + _create_geometric_representation, +) def create_representation( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_segment_representations.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_segment_representations.py index c6f479e656..d35429ce75 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_segment_representations.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_segment_representations.py @@ -17,9 +17,9 @@ # along with IfcOpenShell. If not, see . import ifcopenshell +import ifcopenshell.api.alignment import ifcopenshell.util.element import ifcopenshell.util.representation -import ifcopenshell.api.alignment from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layouts.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layouts.py index 897ab22da8..4b4a1a17d3 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layouts.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layouts.py @@ -16,12 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.util -from ifcopenshell import entity_instance from collections.abc import Sequence +import ifcopenshell +import ifcopenshell.util import ifcopenshell.util.representation +from ifcopenshell import entity_instance def get_alignment_layouts(alignment: entity_instance) -> Sequence[entity_instance]: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_axis_subcontext.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_axis_subcontext.py index 033c94d9bb..98e6646cc4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_axis_subcontext.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_axis_subcontext.py @@ -17,8 +17,8 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.util.representation import ifcopenshell.api.context +import ifcopenshell.util.representation from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_basis_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_basis_curve.py index b96c830757..0bf28746fe 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_basis_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_basis_curve.py @@ -18,9 +18,8 @@ import ifcopenshell import ifcopenshell.util -from ifcopenshell import entity_instance - import ifcopenshell.util.representation +from ifcopenshell import entity_instance def get_basis_curve(alignment: entity_instance) -> entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_child_alignments.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_child_alignments.py index c81018ce06..ccc8f01214 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_child_alignments.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_child_alignments.py @@ -16,12 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.util -from ifcopenshell import entity_instance from collections.abc import Sequence +import ifcopenshell +import ifcopenshell.util import ifcopenshell.util.element +from ifcopenshell import entity_instance def get_child_alignments(alignment: entity_instance) -> Sequence[entity_instance]: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve.py index aeb018976a..6b1a7172d9 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve.py @@ -18,9 +18,8 @@ import ifcopenshell import ifcopenshell.util -from ifcopenshell import entity_instance - import ifcopenshell.util.representation +from ifcopenshell import entity_instance def get_curve(alignment: entity_instance) -> entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve_segment_transition_code.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve_segment_transition_code.py index 577b14d709..6711935e6f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve_segment_transition_code.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve_segment_transition_code.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math + +import numpy as np + import ifcopenshell import ifcopenshell.api -from ifcopenshell import ifcopenshell_wrapper import ifcopenshell.geom -from ifcopenshell import entity_instance -import numpy as np -import math +from ifcopenshell import entity_instance, ifcopenshell_wrapper def get_curve_segment_transition_code( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_segments.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_segments.py index cae8079f53..34cfd90a1d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_segments.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_segments.py @@ -16,12 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.util -from ifcopenshell import entity_instance from collections.abc import Sequence +import ifcopenshell +import ifcopenshell.util import ifcopenshell.util.element +from ifcopenshell import entity_instance def get_layout_segments(layout: entity_instance) -> Sequence[entity_instance]: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_mapped_segments.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_mapped_segments.py index 12be6d90f1..2e10aa9824 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_mapped_segments.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_mapped_segments.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.alignment from ifcopenshell import entity_instance -from collections.abc import Sequence def _get_curve_segment_count(segment: entity_instance) -> int: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_parent_alignment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_parent_alignment.py index 5115f9e37a..333bfc01e5 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_parent_alignment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_parent_alignment.py @@ -18,9 +18,8 @@ import ifcopenshell import ifcopenshell.util -from ifcopenshell import entity_instance - import ifcopenshell.util.representation +from ifcopenshell import entity_instance def get_parent_alignment(alignment: entity_instance) -> entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_horizontal_alignment_by_pi_method.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_horizontal_alignment_by_pi_method.py index 3409fd761b..ed157c3c90 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_horizontal_alignment_by_pi_method.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_horizontal_alignment_by_pi_method.py @@ -16,15 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.api.alignment -from ifcopenshell import entity_instance - import math from collections.abc import Sequence +import ifcopenshell +import ifcopenshell.api.alignment import ifcopenshell.util import ifcopenshell.util.unit +from ifcopenshell import entity_instance def layout_horizontal_alignment_by_pi_method( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_vertical_alignment_by_pi_method.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_vertical_alignment_by_pi_method.py index 73470467af..542237cbc4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_vertical_alignment_by_pi_method.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_vertical_alignment_by_pi_method.py @@ -16,13 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math +from collections.abc import Sequence + import ifcopenshell import ifcopenshell.api.alignment from ifcopenshell import entity_instance -import math -from collections.abc import Sequence - def layout_vertical_alignment_by_pi_method( file: ifcopenshell.file, layout: entity_instance, vpoints: Sequence[Sequence[float]], lengths: Sequence[float] diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/update_fallback_position.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/update_fallback_position.py index 6cc653fb52..3cd4c05907 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/update_fallback_position.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/update_fallback_position.py @@ -16,10 +16,11 @@ # 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 import ifcopenshell.util.placement from ifcopenshell import entity_instance -import numpy as np def update_fallback_position(file: ifcopenshell.file, lp: entity_instance): diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/util.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/util.py index 389f94576a..144311a3df 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/util.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/util.py @@ -16,20 +16,18 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.api.alignment import math import numpy as np import ifcopenshell +import ifcopenshell.api.alignment import ifcopenshell.geom import ifcopenshell.guid import ifcopenshell.template -from ifcopenshell import entity_instance -from ifcopenshell import ifcopenshell_wrapper import ifcopenshell.util import ifcopenshell.util.alignment +from ifcopenshell import entity_instance, ifcopenshell_wrapper def evaluate_representation(shape_rep: entity_instance, dist_along: float) -> np.ndarray: diff --git a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py index 85cd3aa646..2e679fd409 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py +++ b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import sys +from types import EllipsisType +from typing import Any, Union + import ifcopenshell.api.owner import ifcopenshell.util.element -from typing import Any, Union -from types import EllipsisType def edit_attributes(file: ifcopenshell.file, product: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/boundary/assign_connection_geometry.py b/src/ifcopenshell-python/ifcopenshell/api/boundary/assign_connection_geometry.py index 36e55f2d00..f974ea2cd2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/boundary/assign_connection_geometry.py +++ b/src/ifcopenshell-python/ifcopenshell/api/boundary/assign_connection_geometry.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.unit +from typing import Optional + import numpy as np import numpy.typing as npt -from typing import Optional + +import ifcopenshell.util.unit from ifcopenshell.util.shape_builder import SequenceOfVectors, V, ifc_safe_vector_type diff --git a/src/ifcopenshell-python/ifcopenshell/api/boundary/edit_attributes.py b/src/ifcopenshell-python/ifcopenshell/api/boundary/edit_attributes.py index 6980b1a2dd..ee11094d13 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/boundary/edit_attributes.py +++ b/src/ifcopenshell-python/ifcopenshell/api/boundary/edit_attributes.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def edit_attributes( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/classification/add_classification.py b/src/ifcopenshell-python/ifcopenshell/api/classification/add_classification.py index 2932a5bb93..6642e618b4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/classification/add_classification.py +++ b/src/ifcopenshell-python/ifcopenshell/api/classification/add_classification.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Union + import ifcopenshell import ifcopenshell.guid -import ifcopenshell.util.schema import ifcopenshell.util.date -from typing import Union, Any +import ifcopenshell.util.schema def add_classification( diff --git a/src/ifcopenshell-python/ifcopenshell/api/classification/add_reference.py b/src/ifcopenshell-python/ifcopenshell/api/classification/add_reference.py index 7f3d46bc96..10177821b4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/classification/add_reference.py +++ b/src/ifcopenshell-python/ifcopenshell/api/classification/add_reference.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional, Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.schema -from typing import Optional, Union, Any def add_reference( diff --git a/src/ifcopenshell-python/ifcopenshell/api/classification/edit_classification.py b/src/ifcopenshell-python/ifcopenshell/api/classification/edit_classification.py index b2091c0eca..133dc1bfc2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/classification/edit_classification.py +++ b/src/ifcopenshell-python/ifcopenshell/api/classification/edit_classification.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_classification( file: ifcopenshell.file, classification: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/classification/edit_reference.py b/src/ifcopenshell-python/ifcopenshell/api/classification/edit_reference.py index f5a85d40f9..24e670f2f3 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/classification/edit_reference.py +++ b/src/ifcopenshell-python/ifcopenshell/api/classification/edit_reference.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_reference( file: ifcopenshell.file, reference: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/cogo/__init__.py b/src/ifcopenshell-python/ifcopenshell/api/cogo/__init__.py index bb1c7c5243..5fdb2bcea0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cogo/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cogo/__init__.py @@ -22,8 +22,8 @@ Coordinate Geometry (cogo) functions primarily for survey points and control mon from .add_survey_point import add_survey_point from .assign_survey_point import assign_survey_point -from .edit_survey_point import edit_survey_point from .bearing2dd import bearing2dd +from .edit_survey_point import edit_survey_point __all__ = [ "add_survey_point", diff --git a/src/ifcopenshell-python/ifcopenshell/api/cogo/add_survey_point.py b/src/ifcopenshell-python/ifcopenshell/api/cogo/add_survey_point.py index c4a10661d3..20c0852a04 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cogo/add_survey_point.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cogo/add_survey_point.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.spatial import ifcopenshell.util.representation from ifcopenshell import entity_instance -from typing import Union def add_survey_point( diff --git a/src/ifcopenshell-python/ifcopenshell/api/cogo/assign_survey_point.py b/src/ifcopenshell-python/ifcopenshell/api/cogo/assign_survey_point.py index c9a6ba0acc..be9e650ac7 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cogo/assign_survey_point.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cogo/assign_survey_point.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import typing + import ifcopenshell from ifcopenshell import entity_instance -import typing def assign_survey_point(annotation: entity_instance, survey_point: entity_instance): diff --git a/src/ifcopenshell-python/ifcopenshell/api/cogo/edit_survey_point.py b/src/ifcopenshell-python/ifcopenshell/api/cogo/edit_survey_point.py index d2208dc649..3c7d478441 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cogo/edit_survey_point.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cogo/edit_survey_point.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import typing + import ifcopenshell from ifcopenshell import entity_instance -import typing def edit_survey_point(annotation: entity_instance, x: float, y: float, z: float = 0.0): diff --git a/src/ifcopenshell-python/ifcopenshell/api/constraint/assign_constraint.py b/src/ifcopenshell-python/ifcopenshell/api/constraint/assign_constraint.py index ac021840c7..fb6364042a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/constraint/assign_constraint.py +++ b/src/ifcopenshell-python/ifcopenshell/api/constraint/assign_constraint.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid -from typing import Union def assign_constraint( diff --git a/src/ifcopenshell-python/ifcopenshell/api/constraint/edit_metric.py b/src/ifcopenshell-python/ifcopenshell/api/constraint/edit_metric.py index 3967846759..f788722b75 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/constraint/edit_metric.py +++ b/src/ifcopenshell-python/ifcopenshell/api/constraint/edit_metric.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_metric(file: ifcopenshell.file, metric: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edit the attributes of a metric diff --git a/src/ifcopenshell-python/ifcopenshell/api/constraint/edit_objective.py b/src/ifcopenshell-python/ifcopenshell/api/constraint/edit_objective.py index 3cd75356a7..cd2b17e66b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/constraint/edit_objective.py +++ b/src/ifcopenshell-python/ifcopenshell/api/constraint/edit_objective.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_objective( file: ifcopenshell.file, objective: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/context/add_context.py b/src/ifcopenshell-python/ifcopenshell/api/context/add_context.py index a1a7839e09..0a6992ce8d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/context/add_context.py +++ b/src/ifcopenshell-python/ifcopenshell/api/context/add_context.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional + import ifcopenshell import ifcopenshell.util.representation -from typing import Optional, Any def add_context( diff --git a/src/ifcopenshell-python/ifcopenshell/api/context/edit_context.py b/src/ifcopenshell-python/ifcopenshell/api/context/edit_context.py index 1a7d567c58..15afc571f2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/context/edit_context.py +++ b/src/ifcopenshell-python/ifcopenshell/api/context/edit_context.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_context(file: ifcopenshell.file, context: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcGeometricRepresentationContext diff --git a/src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py b/src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py index cd7c398a54..69ecb324eb 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py +++ b/src/ifcopenshell-python/ifcopenshell/api/control/assign_control.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid -from typing import Union def assign_control( diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/add_cost_item.py b/src/ifcopenshell-python/ifcopenshell/api/cost/add_cost_item.py index 70c0cfc06c..1bdae9e9a1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/add_cost_item.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/add_cost_item.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.control -import ifcopenshell.api.root -import ifcopenshell.api.nest -import ifcopenshell.guid from typing import Optional +import ifcopenshell.api.control +import ifcopenshell.api.nest +import ifcopenshell.api.root +import ifcopenshell.guid + def add_cost_item( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/add_cost_schedule.py b/src/ifcopenshell-python/ifcopenshell/api/cost/add_cost_schedule.py index 19f0762b69..cc88336cb4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/add_cost_schedule.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/add_cost_schedule.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root -import ifcopenshell.api.sequence from datetime import datetime from typing import Optional +import ifcopenshell.api.root +import ifcopenshell.api.sequence + def add_cost_schedule( file: ifcopenshell.file, name: Optional[str] = None, predefined_type: str = "NOTDEFINED" diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/assign_cost_item_quantity.py b/src/ifcopenshell-python/ifcopenshell/api/cost/assign_cost_item_quantity.py index 2db09c45f6..20fc24ab37 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/assign_cost_item_quantity.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/assign_cost_item_quantity.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.cost -import ifcopenshell.api.control from typing import Any +import ifcopenshell.api.control +import ifcopenshell.api.cost + def assign_cost_item_quantity( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/copy_cost_item.py b/src/ifcopenshell-python/ifcopenshell/api/cost/copy_cost_item.py index fcf298ff7c..af1915d57f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/copy_cost_item.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/copy_cost_item.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.nest import ifcopenshell.util.element -from typing import Union def copy_cost_item( diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/copy_cost_item_values.py b/src/ifcopenshell-python/ifcopenshell/api/cost/copy_cost_item_values.py index 01d0a02976..11e975fd53 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/copy_cost_item_values.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/copy_cost_item_values.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.element import ifcopenshell.api.cost +import ifcopenshell.util.element def copy_cost_item_values( diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_item.py b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_item.py index 813e306bc8..20770fb673 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_item.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_item.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_cost_item( file: ifcopenshell.file, cost_item: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_item_quantity.py b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_item_quantity.py index 697d028a37..f5713cd33a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_item_quantity.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_item_quantity.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_cost_item_quantity( file: ifcopenshell.file, physical_quantity: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_schedule.py b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_schedule.py index d55e93330e..089c2b1336 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_schedule.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_schedule.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_cost_schedule( file: ifcopenshell.file, cost_schedule: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value.py b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value.py index ebc09ed34c..e1be553922 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.util.unit -import ifcopenshell.util.element from typing import Any +import ifcopenshell +import ifcopenshell.util.element +import ifcopenshell.util.unit + def edit_cost_value( file: ifcopenshell.file, cost_value: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value_formula.py b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value_formula.py index 2f68a66023..213940904d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value_formula.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value_formula.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell import ifcopenshell.api.cost import ifcopenshell.util.cost -import ifcopenshell.util.unit import ifcopenshell.util.element -from typing import Any +import ifcopenshell.util.unit def edit_cost_value_formula(file: ifcopenshell.file, cost_value: ifcopenshell.entity_instance, formula: str) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/document/add_information.py b/src/ifcopenshell-python/ifcopenshell/api/document/add_information.py index a5018c63cb..572de820a0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/document/add_information.py +++ b/src/ifcopenshell-python/ifcopenshell/api/document/add_information.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.guid -import ifcopenshell.api.owner from typing import Optional +import ifcopenshell +import ifcopenshell.api.owner +import ifcopenshell.guid + def add_information( file: ifcopenshell.file, parent: Optional[ifcopenshell.entity_instance] = None diff --git a/src/ifcopenshell-python/ifcopenshell/api/document/assign_document.py b/src/ifcopenshell-python/ifcopenshell/api/document/assign_document.py index a86a178e86..666d7420d1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/document/assign_document.py +++ b/src/ifcopenshell-python/ifcopenshell/api/document/assign_document.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Union def assign_document( diff --git a/src/ifcopenshell-python/ifcopenshell/api/document/edit_information.py b/src/ifcopenshell-python/ifcopenshell/api/document/edit_information.py index 56c1d40df4..c50e74de58 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/document/edit_information.py +++ b/src/ifcopenshell-python/ifcopenshell/api/document/edit_information.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_information( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/document/edit_reference.py b/src/ifcopenshell-python/ifcopenshell/api/document/edit_reference.py index 51ad195bf3..56bd3c8538 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/document/edit_reference.py +++ b/src/ifcopenshell-python/ifcopenshell/api/document/edit_reference.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_reference( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/drawing/edit_text_literal.py b/src/ifcopenshell-python/ifcopenshell/api/drawing/edit_text_literal.py index c083960e59..838fbb357a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/drawing/edit_text_literal.py +++ b/src/ifcopenshell-python/ifcopenshell/api/drawing/edit_text_literal.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_text_literal( file: ifcopenshell.file, text_literal: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/feature/add_feature.py b/src/ifcopenshell-python/ifcopenshell/api/feature/add_feature.py index 5de3f2cf42..cfdff3819c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/feature/add_feature.py +++ b/src/ifcopenshell-python/ifcopenshell/api/feature/add_feature.py @@ -17,9 +17,9 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api.owner -import ifcopenshell.api.geometry import ifcopenshell.api.aggregate +import ifcopenshell.api.geometry +import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.placement diff --git a/src/ifcopenshell-python/ifcopenshell/api/feature/remove_feature.py b/src/ifcopenshell-python/ifcopenshell/api/feature/remove_feature.py index 6a1d5e5610..ff847b39eb 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/feature/remove_feature.py +++ b/src/ifcopenshell-python/ifcopenshell/api/feature/remove_feature.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root import ifcopenshell.api.aggregate +import ifcopenshell.api.root import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_axis_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_axis_representation.py index 02bd057cc6..b206cc2ef1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_axis_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_axis_representation.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Union + import ifcopenshell.util.unit -from typing import Union, Any COORD = Union[tuple[float, float], tuple[float, float, float]] diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py index f5d0a31456..910df42d8c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py @@ -17,9 +17,11 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations -import ifcopenshell.util.element + from typing import Literal +import ifcopenshell.util.element + def add_boolean( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_door_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_door_representation.py index fc60a25bbc..a4460ce984 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_door_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_door_representation.py @@ -17,15 +17,17 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations -import ifcopenshell.util.unit -import ifcopenshell.api.geometry -import dataclasses -import numpy as np -from ifcopenshell.util.shape_builder import ShapeBuilder, V -from ifcopenshell.api.geometry.add_window_representation import create_ifc_window -from math import cos, radians -from typing import Any, Optional, Literal, Union, get_args, overload +import dataclasses +from math import cos, radians +from typing import Any, Literal, Optional, Union, get_args, overload + +import numpy as np + +import ifcopenshell.api.geometry +import ifcopenshell.util.unit +from ifcopenshell.api.geometry.add_window_representation import create_ifc_window +from ifcopenshell.util.shape_builder import ShapeBuilder, V DOOR_TYPE = Literal[ "SINGLE_SWING_LEFT", diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_mesh_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_mesh_representation.py index 9a4b41a4df..91f816041f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_mesh_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_mesh_representation.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.unit +from typing import Optional, TypeVar + import numpy as np import numpy.typing as npt -from ifcopenshell.util.shape_builder import ShapeBuilder, SequenceOfVectors, VectorType -from typing import Optional, TypeVar + +import ifcopenshell.util.unit +from ifcopenshell.util.shape_builder import SequenceOfVectors, ShapeBuilder, VectorType T = TypeVar("T") COORD_3D = tuple[float, float, float] 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 9458131046..754b7ded03 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_profile_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_profile_representation.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Literal, Optional, Union, get_args + import ifcopenshell.geom import ifcopenshell.util.element import ifcopenshell.util.shape import ifcopenshell.util.unit from ifcopenshell.util.data import Clipping -from typing import Any, Union, Optional, Literal, get_args VECTOR_3D = tuple[float, float, float] CardinalPointNumeric = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_railing_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_railing_representation.py index 5f81c51fd0..a3af58dfbf 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_railing_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_railing_representation.py @@ -16,24 +16,26 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from math import cos, pi, radians, sin, tan +from typing import Any, Literal, Optional + import numpy as np +from typing_extensions import assert_never + import ifcopenshell.util.unit from ifcopenshell.util.shape_builder import ( + SequenceOfVectors, ShapeBuilder, V, - SequenceOfVectors, is_x, np_angle, np_angle_signed, - np_normalized, - np_to_3d, - np_normal, np_intersect_line_line, np_lerp, + np_normal, + np_normalized, + np_to_3d, ) -from math import pi, cos, sin, tan, radians -from typing import Literal, Optional, Any -from typing_extensions import assert_never def mm(x: float) -> float: diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py index 3f3a9881a7..d77655a60c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py @@ -16,16 +16,19 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . from __future__ import annotations -import bpy.types + import math +from typing import TYPE_CHECKING, Any, Literal, Optional, Union + import bmesh -import ifcopenshell.util.shape_builder -import ifcopenshell.util.unit +import bpy.types import numpy as np import numpy.typing as npt -from mathutils import Vector, Matrix -from typing import Union, Optional, Literal, Any, TYPE_CHECKING -from ifcopenshell.util.shape_builder import ifc_safe_vector_type, VectorType +from mathutils import Matrix, Vector + +import ifcopenshell.util.shape_builder +import ifcopenshell.util.unit +from ifcopenshell.util.shape_builder import VectorType, ifc_safe_vector_type if TYPE_CHECKING: import bonsai.tool as tool diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_shape_aspect.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_shape_aspect.py index 2f4ee941fe..afb8489a4c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_shape_aspect.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_shape_aspect.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def add_shape_aspect( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py index f6a6f85d1a..284f6e7c30 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from math import cos, sin +from typing import Any, Optional, Union + import ifcopenshell.util.element import ifcopenshell.util.unit from ifcopenshell.util.data import Clipping -from math import sin, cos -from typing import Any, Optional, Union def add_slab_representation( diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py index 53e2f58660..4c108dc7df 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from math import cos, pi, sin +from typing import Any, Optional, Union + import ifcopenshell.util.element import ifcopenshell.util.unit -from math import sin, cos, pi -from typing import Optional, Union, Any from ifcopenshell.util.data import Clipping diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py index d1ef540ab0..36848e7883 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_window_representation.py @@ -17,14 +17,16 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations -import numpy as np + import dataclasses +from itertools import chain +from typing import Any, Literal, Optional, Union, overload + +import numpy as np + import ifcopenshell.api.geometry import ifcopenshell.util.unit -from itertools import chain from ifcopenshell.util.shape_builder import ShapeBuilder, V -from typing import Any, Optional, Literal, Union, overload - # SCHEMAS describe panels setup # where: diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/assign_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/assign_representation.py index 5b62fd4639..158f0152ac 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/assign_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/assign_representation.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.owner -import ifcopenshell.api.geometry -import ifcopenshell.util.element from typing import Any +import ifcopenshell.api.geometry +import ifcopenshell.api.owner +import ifcopenshell.util.element + def assign_representation( file: ifcopenshell.file, product: ifcopenshell.entity_instance, representation: ifcopenshell.entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_element.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_element.py index f737b54c77..1222d458a2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_element.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_element.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Optional def connect_element( diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_path.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_path.py index 81fa276a2c..3135bef116 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_path.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_path.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Optional def connect_path( diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_wall.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_wall.py index 8666a38693..c63139b451 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_wall.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/connect_wall.py @@ -16,13 +16,15 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import numpy as np + import ifcopenshell import ifcopenshell.api.geometry import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape_builder -from typing import Optional def connect_wall( diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/create_2pt_wall.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/create_2pt_wall.py index 3401b29c7a..72449ada84 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/create_2pt_wall.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/create_2pt_wall.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import numpy as np + import ifcopenshell.api.geometry import ifcopenshell.util.unit -from typing import Any def create_2pt_wall( diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/disconnect_path.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/disconnect_path.py index 787f7a5633..6e04a9df73 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/disconnect_path.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/disconnect_path.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import ifcopenshell import ifcopenshell.api import ifcopenshell.util.element -from typing import Optional def disconnect_path( diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/edit_object_placement.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/edit_object_placement.py index 2e37e99e26..7fbe44ce12 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/edit_object_placement.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/edit_object_placement.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional, Union + import numpy as np import numpy.typing as npt + import ifcopenshell.api.owner -import ifcopenshell.util.unit import ifcopenshell.util.element import ifcopenshell.util.placement +import ifcopenshell.util.unit from ifcopenshell.util.shape_builder import ShapeBuilder -from typing import Optional, Union, Any NPArrayOfFloats = npt.NDArray[np.float64] diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/regenerate_wall_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/regenerate_wall_representation.py index 0cce951810..9143577438 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/regenerate_wall_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/regenerate_wall_representation.py @@ -17,7 +17,12 @@ # along with IfcOpenShell. If not, see . import json +from collections import namedtuple +from math import cos, sin +from typing import Optional + import numpy as np + import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.geometry @@ -26,9 +31,6 @@ import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape_builder import ifcopenshell.util.unit -from collections import namedtuple -from math import sin, cos -from typing import Optional # https://stackoverflow.com/a/9184560/9627415 # Possible optimisation to linalg.norm? diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/unassign_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/unassign_representation.py index 5dc3bf3aeb..db4f231aff 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/unassign_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/unassign_representation.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell.api.geometry import ifcopenshell.util.element -from typing import Any def unassign_representation( diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/validate_type.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/validate_type.py index b5970e4d44..46bec8757b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/validate_type.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/validate_type.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell.api.geometry import ifcopenshell.util.representation -from typing import Union def validate_type( diff --git a/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_georeferencing.py b/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_georeferencing.py index 0d4da93bcb..070797356b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_georeferencing.py +++ b/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_georeferencing.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional + import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.element -from typing import Optional, Any def edit_georeferencing( diff --git a/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_true_north.py b/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_true_north.py index 0a7e967fbd..5a39f917f4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_true_north.py +++ b/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_true_north.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional, Union + import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.geolocation -from typing import Union, Optional def edit_true_north(file: ifcopenshell.file, true_north: Optional[Union[tuple[float, float], float]] = 0.0) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_wcs.py b/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_wcs.py index 25fb4f3b6e..126072e254 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_wcs.py +++ b/src/ifcopenshell-python/ifcopenshell/api/georeference/edit_wcs.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from math import cos, radians, sin + +import numpy as np + import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.unit -import numpy as np from ifcopenshell.util.shape_builder import ShapeBuilder -from math import sin, cos, radians def edit_wcs( diff --git a/src/ifcopenshell-python/ifcopenshell/api/grid/__init__.py b/src/ifcopenshell-python/ifcopenshell/api/grid/__init__.py index cc759ce7e0..4d821057da 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/grid/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/api/grid/__init__.py @@ -22,7 +22,6 @@ A grid in IFC may contain two or more axes running in two or more directions. """ from .. import wrap_usecases - from .create_axis_curve import create_axis_curve from .create_grid_axis import create_grid_axis from .remove_grid_axis import remove_grid_axis diff --git a/src/ifcopenshell-python/ifcopenshell/api/grid/create_axis_curve.py b/src/ifcopenshell-python/ifcopenshell/api/grid/create_axis_curve.py index b87eea94d0..a71c523c3f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/grid/create_axis_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/grid/create_axis_curve.py @@ -17,12 +17,19 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations + +import numpy as np + import ifcopenshell import ifcopenshell.util.element -import ifcopenshell.util.unit import ifcopenshell.util.placement -import numpy as np -from ifcopenshell.util.shape_builder import VectorType, V, ifc_safe_vector_type, np_apply_matrix +import ifcopenshell.util.unit +from ifcopenshell.util.shape_builder import ( + V, + VectorType, + ifc_safe_vector_type, + np_apply_matrix, +) def create_axis_curve( diff --git a/src/ifcopenshell-python/ifcopenshell/api/grid/create_grid_axis.py b/src/ifcopenshell-python/ifcopenshell/api/grid/create_grid_axis.py index 77228434b0..7500ab1f55 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/grid/create_grid_axis.py +++ b/src/ifcopenshell-python/ifcopenshell/api/grid/create_grid_axis.py @@ -15,8 +15,9 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Literal, Optional + import ifcopenshell -from typing import Optional, Literal def create_grid_axis( diff --git a/src/ifcopenshell-python/ifcopenshell/api/group/add_group.py b/src/ifcopenshell-python/ifcopenshell/api/group/add_group.py index a2a877ef6e..4dd10adfe3 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/group/add_group.py +++ b/src/ifcopenshell-python/ifcopenshell/api/group/add_group.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid -from typing import Optional def add_group( diff --git a/src/ifcopenshell-python/ifcopenshell/api/group/assign_group.py b/src/ifcopenshell-python/ifcopenshell/api/group/assign_group.py index cb9cd95fea..544a889cc0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/group/assign_group.py +++ b/src/ifcopenshell-python/ifcopenshell/api/group/assign_group.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid -from typing import Union def assign_group( diff --git a/src/ifcopenshell-python/ifcopenshell/api/group/edit_group.py b/src/ifcopenshell-python/ifcopenshell/api/group/edit_group.py index 5a7a2b2018..55ee85e0f8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/group/edit_group.py +++ b/src/ifcopenshell-python/ifcopenshell/api/group/edit_group.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_group(file: ifcopenshell.file, group: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcGroup diff --git a/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer.py b/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer.py index 8a3c1dc95f..cd61465326 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer.py +++ b/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def add_layer(file: ifcopenshell.file, name: str = "Unnamed") -> ifcopenshell.entity_instance: """Adds a new layer diff --git a/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer_with_style.py b/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer_with_style.py index f3af61a81c..ffdf67fec0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer_with_style.py +++ b/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer_with_style.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -from typing import Union, Literal from collections.abc import Sequence +from typing import Literal, Union + +import ifcopenshell IfcLogical = Union[bool, Literal["UNKNOWN"]] diff --git a/src/ifcopenshell-python/ifcopenshell/api/layer/edit_layer.py b/src/ifcopenshell-python/ifcopenshell/api/layer/edit_layer.py index 7203fabb0c..5e51b1ec39 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/layer/edit_layer.py +++ b/src/ifcopenshell-python/ifcopenshell/api/layer/edit_layer.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_layer(file: ifcopenshell.file, layer: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcPresentationLayerAssignment diff --git a/src/ifcopenshell-python/ifcopenshell/api/library/add_library.py b/src/ifcopenshell-python/ifcopenshell/api/library/add_library.py index a8ce0690d4..debdded93a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/library/add_library.py +++ b/src/ifcopenshell-python/ifcopenshell/api/library/add_library.py @@ -17,8 +17,8 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.util.schema import ifcopenshell.util.date +import ifcopenshell.util.schema def add_library(file: ifcopenshell.file, name: str) -> ifcopenshell.entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/library/assign_reference.py b/src/ifcopenshell-python/ifcopenshell/api/library/assign_reference.py index a9b6169304..2d0cb59906 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/library/assign_reference.py +++ b/src/ifcopenshell-python/ifcopenshell/api/library/assign_reference.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Union def assign_reference( diff --git a/src/ifcopenshell-python/ifcopenshell/api/library/edit_library.py b/src/ifcopenshell-python/ifcopenshell/api/library/edit_library.py index 4e12195bda..430ddc96a2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/library/edit_library.py +++ b/src/ifcopenshell-python/ifcopenshell/api/library/edit_library.py @@ -15,11 +15,12 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.util.date import datetime from typing import Any +import ifcopenshell +import ifcopenshell.util.date + def edit_library(file: ifcopenshell.file, library: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcLibraryInformation diff --git a/src/ifcopenshell-python/ifcopenshell/api/library/edit_reference.py b/src/ifcopenshell-python/ifcopenshell/api/library/edit_reference.py index e6acacbd8f..7860c41943 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/library/edit_reference.py +++ b/src/ifcopenshell-python/ifcopenshell/api/library/edit_reference.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_reference( file: ifcopenshell.file, reference: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/library/unassign_reference.py b/src/ifcopenshell-python/ifcopenshell/api/library/unassign_reference.py index 5dd40749b9..5190b91ccb 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/library/unassign_reference.py +++ b/src/ifcopenshell-python/ifcopenshell/api/library/unassign_reference.py @@ -17,8 +17,8 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.util.element import ifcopenshell.api.owner +import ifcopenshell.util.element def unassign_reference( diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/add_constituent.py b/src/ifcopenshell-python/ifcopenshell/api/material/add_constituent.py index 3a2dad4ba2..057ff0849e 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/add_constituent.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/add_constituent.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def add_constituent( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/add_layer.py b/src/ifcopenshell-python/ifcopenshell/api/material/add_layer.py index 5fae2ed275..db717528ec 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/add_layer.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/add_layer.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import ifcopenshell import ifcopenshell.util.unit -from typing import Optional def add_layer( diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/add_material.py b/src/ifcopenshell-python/ifcopenshell/api/material/add_material.py index 6b04f78be2..87f5e4cdb4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/add_material.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/add_material.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def add_material( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/add_material_set.py b/src/ifcopenshell-python/ifcopenshell/api/material/add_material_set.py index bd23688ac8..f679d4c8f0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/add_material_set.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/add_material_set.py @@ -15,9 +15,9 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Literal +import ifcopenshell MATERIAL_SET_TYPE = Literal[ "IfcMaterialLayerSet", diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/add_profile.py b/src/ifcopenshell-python/ifcopenshell/api/material/add_profile.py index 160f79e453..87746cee30 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/add_profile.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/add_profile.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def add_profile( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/assign_material.py b/src/ifcopenshell-python/ifcopenshell/api/material/assign_material.py index 0e37eef148..47c888bb1c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/assign_material.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/assign_material.py @@ -16,14 +16,15 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections import defaultdict +from typing import Any, Optional, Union + import ifcopenshell -import ifcopenshell.api.owner import ifcopenshell.api.material +import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.representation -from collections import defaultdict -from typing import Optional, Union, Any def assign_material( diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/assign_profile.py b/src/ifcopenshell-python/ifcopenshell/api/material/assign_profile.py index ce269dbc86..23a5a216b8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/assign_profile.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/assign_profile.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.representation from typing import Any +import ifcopenshell.util.representation + def assign_profile( file: ifcopenshell.file, material_profile: ifcopenshell.entity_instance, profile: ifcopenshell.entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/edit_assigned_material.py b/src/ifcopenshell-python/ifcopenshell/api/material/edit_assigned_material.py index 9a01322743..09886c90fd 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/edit_assigned_material.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/edit_assigned_material.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_assigned_material( file: ifcopenshell.file, element: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/edit_constituent.py b/src/ifcopenshell-python/ifcopenshell/api/material/edit_constituent.py index a7398ca5f0..165a3655d5 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/edit_constituent.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/edit_constituent.py @@ -15,8 +15,9 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional + import ifcopenshell -from typing import Optional, Any def edit_constituent( diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/edit_layer.py b/src/ifcopenshell-python/ifcopenshell/api/material/edit_layer.py index 68f3c6d832..b21530faa3 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/edit_layer.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/edit_layer.py @@ -15,8 +15,9 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional + import ifcopenshell -from typing import Optional, Any def edit_layer( diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/edit_layer_usage.py b/src/ifcopenshell-python/ifcopenshell/api/material/edit_layer_usage.py index 9d1ffb14ec..35916f9c50 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/edit_layer_usage.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/edit_layer_usage.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_layer_usage(file: ifcopenshell.file, usage: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcMaterialLayerSetUsage diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/edit_material.py b/src/ifcopenshell-python/ifcopenshell/api/material/edit_material.py index ddf541503c..749f3b0ea0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/edit_material.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/edit_material.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_material(file: ifcopenshell.file, material: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcMaterial""" diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/edit_profile.py b/src/ifcopenshell-python/ifcopenshell/api/material/edit_profile.py index 3bc7479388..5dec072609 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/edit_profile.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/edit_profile.py @@ -18,6 +18,7 @@ from typing import Any, Optional + import ifcopenshell diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/edit_profile_usage.py b/src/ifcopenshell-python/ifcopenshell/api/material/edit_profile_usage.py index 4c004ecfdd..2d7cdcbca8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/edit_profile_usage.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/edit_profile_usage.py @@ -15,11 +15,12 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell.geom import ifcopenshell.util.representation import ifcopenshell.util.shape from ifcopenshell.geom import ShapeType -from typing import Any def edit_profile_usage( diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/set_shape_aspect_constituents.py b/src/ifcopenshell-python/ifcopenshell/api/material/set_shape_aspect_constituents.py index d95f877fcf..bd0fdf9683 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/set_shape_aspect_constituents.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/set_shape_aspect_constituents.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.style import ifcopenshell.api.material +import ifcopenshell.api.style import ifcopenshell.util.element import ifcopenshell.util.representation diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/unassign_material.py b/src/ifcopenshell-python/ifcopenshell/api/material/unassign_material.py index 51d11b3248..00a39a4120 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/unassign_material.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/unassign_material.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.util.element -from typing import Any def unassign_material(file: ifcopenshell.file, products: list[ifcopenshell.entity_instance]) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/nest/assign_object.py b/src/ifcopenshell-python/ifcopenshell/api/nest/assign_object.py index 290ac58b05..d3432b617f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/nest/assign_object.py +++ b/src/ifcopenshell-python/ifcopenshell/api/nest/assign_object.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Union def assign_object( diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/add_actor.py b/src/ifcopenshell-python/ifcopenshell/api/owner/add_actor.py index 1456a99d5e..8b3a8306fd 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/add_actor.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/add_actor.py @@ -17,10 +17,10 @@ # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.api.root from typing import Literal +import ifcopenshell +import ifcopenshell.api.root ACTOR_TYPE = Literal["IfcActor", "IfcOccupant"] diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/add_address.py b/src/ifcopenshell-python/ifcopenshell/api/owner/add_address.py index 791f41c6a2..7d40e9a420 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/add_address.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/add_address.py @@ -15,9 +15,9 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Literal +import ifcopenshell ADDRESS_TYPE = Literal["IfcPostalAddress", "IfcTelecomAddress"] diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py b/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py index 665bebc292..8387ecf871 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional, Union + import ifcopenshell.api import ifcopenshell.api.owner import ifcopenshell.api.pset -from typing import Optional, Any, Union def add_application( diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/create_owner_history.py b/src/ifcopenshell-python/ifcopenshell/api/owner/create_owner_history.py index 296834062e..39b118446c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/create_owner_history.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/create_owner_history.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . import time +from typing import Union + import ifcopenshell import ifcopenshell.api.owner.settings -from typing import Union def create_owner_history(file: ifcopenshell.file) -> Union[ifcopenshell.entity_instance, None]: diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_actor.py b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_actor.py index 8ad238f994..e976d9e09e 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_actor.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_actor.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_actor(file: ifcopenshell.file, actor: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcActor diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_address.py b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_address.py index 52e80d6ef1..d274989eec 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_address.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_address.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_address(file: ifcopenshell.file, address: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcAddress diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_application.py b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_application.py index 3224169ff2..631265f522 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_application.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_application.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_application( file: ifcopenshell.file, application: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_organisation.py b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_organisation.py index a2bb5e3eb6..2f0a8af568 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_organisation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_organisation.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_organisation( file: ifcopenshell.file, organisation: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_person.py b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_person.py index 6b697bd674..3c53fabdd4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_person.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_person.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_person(file: ifcopenshell.file, person: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcPerson diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_role.py b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_role.py index fca80a16b0..8fb293c151 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_role.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_role.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_role(file: ifcopenshell.file, role: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcActorRole diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/remove_organisation.py b/src/ifcopenshell-python/ifcopenshell/api/owner/remove_organisation.py index acee11d9f5..fa5434d289 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/remove_organisation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/remove_organisation.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root import ifcopenshell.api.owner +import ifcopenshell.api.root def remove_organisation(file: ifcopenshell.file, organisation: ifcopenshell.entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/remove_person.py b/src/ifcopenshell-python/ifcopenshell/api/owner/remove_person.py index 0c618c1e74..4fc86d70c8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/remove_person.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/remove_person.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root import ifcopenshell.api.owner +import ifcopenshell.api.root def remove_person(file: ifcopenshell.file, person: ifcopenshell.entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/settings.py b/src/ifcopenshell-python/ifcopenshell/api/owner/settings.py index b5dedfff49..035107da73 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/settings.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/settings.py @@ -19,9 +19,10 @@ # Note: it is the intent for you to override these with your own functions -import ifcopenshell from typing import Union +import ifcopenshell + def get_application(ifc: ifcopenshell.file) -> Union[ifcopenshell.entity_instance, None]: """Returns the application representing the authoring software diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py b/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py index 99ec6f18d5..7df304778a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py @@ -17,11 +17,12 @@ # along with IfcOpenShell. If not, see . import time +from typing import Union + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.owner.settings import ifcopenshell.util.element -from typing import Union def update_owner_history( diff --git a/src/ifcopenshell-python/ifcopenshell/api/profile/add_arbitrary_profile.py b/src/ifcopenshell-python/ifcopenshell/api/profile/add_arbitrary_profile.py index 80f3b8cf71..5874986031 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/profile/add_arbitrary_profile.py +++ b/src/ifcopenshell-python/ifcopenshell/api/profile/add_arbitrary_profile.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import numpy.typing as npt -import ifcopenshell.util.unit -from ifcopenshell.util.shape_builder import V, SequenceOfVectors, ifc_safe_vector_type from typing import Optional, Union +import numpy.typing as npt + +import ifcopenshell.util.unit +from ifcopenshell.util.shape_builder import SequenceOfVectors, V, ifc_safe_vector_type + def add_arbitrary_profile( file: ifcopenshell.file, profile: SequenceOfVectors, name: Optional[str] = None diff --git a/src/ifcopenshell-python/ifcopenshell/api/profile/add_arbitrary_profile_with_voids.py b/src/ifcopenshell-python/ifcopenshell/api/profile/add_arbitrary_profile_with_voids.py index b813a3c65f..5a78cd400f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/profile/add_arbitrary_profile_with_voids.py +++ b/src/ifcopenshell-python/ifcopenshell/api/profile/add_arbitrary_profile_with_voids.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.unit -import numpy.typing as npt -from ifcopenshell.util.shape_builder import SequenceOfVectors, ifc_safe_vector_type, V from typing import Optional, Union +import numpy.typing as npt + +import ifcopenshell.util.unit +from ifcopenshell.util.shape_builder import SequenceOfVectors, V, ifc_safe_vector_type + def add_arbitrary_profile_with_voids( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/profile/add_parameterized_profile.py b/src/ifcopenshell-python/ifcopenshell/api/profile/add_parameterized_profile.py index 12c57532b0..02f93a4a20 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/profile/add_parameterized_profile.py +++ b/src/ifcopenshell-python/ifcopenshell/api/profile/add_parameterized_profile.py @@ -15,9 +15,9 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Literal +import ifcopenshell ProfileType = Literal["AREA", "CURVE"] diff --git a/src/ifcopenshell-python/ifcopenshell/api/profile/edit_profile.py b/src/ifcopenshell-python/ifcopenshell/api/profile/edit_profile.py index ba7bc3cfeb..4766f6c59b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/profile/edit_profile.py +++ b/src/ifcopenshell-python/ifcopenshell/api/profile/edit_profile.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_profile(file: ifcopenshell.file, profile: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcProfileDef diff --git a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py index 2de3352e79..c3f55d6795 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py @@ -16,21 +16,21 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections.abc import Callable +from functools import partial +from typing import Any, Literal, Optional, Union, get_args + import ifcopenshell -import ifcopenshell.ifcopenshell_wrapper as W -import ifcopenshell.api.geometry -import ifcopenshell.api.type -import ifcopenshell.api.project import ifcopenshell.api.context +import ifcopenshell.api.geometry import ifcopenshell.api.owner.settings +import ifcopenshell.api.project +import ifcopenshell.api.type +import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.element import ifcopenshell.util.geolocation import ifcopenshell.util.placement import ifcopenshell.util.unit -from typing import Optional, Any, Union, Literal, get_args -from collections.abc import Callable -from functools import partial - APPENDABLE_ASSET = Literal[ "IfcTypeProduct", diff --git a/src/ifcopenshell-python/ifcopenshell/api/project/assign_declaration.py b/src/ifcopenshell-python/ifcopenshell/api/project/assign_declaration.py index 2daa7dc729..35f76ac7bd 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/project/assign_declaration.py +++ b/src/ifcopenshell-python/ifcopenshell/api/project/assign_declaration.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Union def assign_declaration( diff --git a/src/ifcopenshell-python/ifcopenshell/api/project/create_file.py b/src/ifcopenshell-python/ifcopenshell/api/project/create_file.py index 41bc45fdd5..e122ba766b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/project/create_file.py +++ b/src/ifcopenshell-python/ifcopenshell/api/project/create_file.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import datetime + import ifcopenshell import ifcopenshell.util.schema diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/add_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/add_pset.py index f1a99bd847..a1075334de 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/add_pset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/add_pset.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.api.pset import ifcopenshell.guid -from typing import Optional, Any def add_pset( diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/add_qto.py b/src/ifcopenshell-python/ifcopenshell/api/pset/add_qto.py index 695ca21dd8..229a43f4ae 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/add_qto.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/add_qto.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid -from typing import Any def add_qto(file: ifcopenshell.file, product: ifcopenshell.entity_instance, name: str) -> ifcopenshell.entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/assign_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/assign_pset.py index ed309944a1..eef7f6e8e9 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/assign_pset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/assign_pset.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Union def assign_pset( diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py index 35ef9ee6a8..97730760e7 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import datetime +from typing import Any, Optional, Union + import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.pset -from typing import Optional, Any, Union def edit_pset( diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/edit_qto.py b/src/ifcopenshell-python/ifcopenshell/api/pset/edit_qto.py index 54405efdd1..41bd4fbecf 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/edit_qto.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/edit_qto.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional, Union + +from typing_extensions import assert_never + import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.pset -from typing import Optional, Any, Union -from typing_extensions import assert_never FLOAT_TYPE_KEYWORDS = ( ("Area", ("area",)), diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset_template/add_prop_template.py b/src/ifcopenshell-python/ifcopenshell/api/pset_template/add_prop_template.py index 39d1987fa4..f9cb427d3b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset_template/add_prop_template.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset_template/add_prop_template.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import ifcopenshell import ifcopenshell.guid import ifcopenshell.util.pset -from typing import Optional def add_prop_template( diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset_template/edit_prop_template.py b/src/ifcopenshell-python/ifcopenshell/api/pset_template/edit_prop_template.py index 3677a8e63e..b6ea4e823c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset_template/edit_prop_template.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset_template/edit_prop_template.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_prop_template( file: ifcopenshell.file, prop_template: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset_template/edit_pset_template.py b/src/ifcopenshell-python/ifcopenshell/api/pset_template/edit_pset_template.py index d143b5554e..2fdd445f98 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset_template/edit_pset_template.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset_template/edit_pset_template.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_pset_template( file: ifcopenshell.file, pset_template: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/resource/add_resource.py b/src/ifcopenshell-python/ifcopenshell/api/resource/add_resource.py index 691ad2ec6a..642673f2dc 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/resource/add_resource.py +++ b/src/ifcopenshell-python/ifcopenshell/api/resource/add_resource.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root +from typing import Optional + import ifcopenshell.api.nest import ifcopenshell.api.project -from typing import Optional +import ifcopenshell.api.root def add_resource( diff --git a/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_usage.py b/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_usage.py index 545016bfd2..24815d45e0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_usage.py +++ b/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_usage.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import math + import ifcopenshell.api import ifcopenshell.util.constraint import ifcopenshell.util.date diff --git a/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource.py b/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource.py index 3476032c1a..27c27e519e 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource.py +++ b/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_resource(file: ifcopenshell.file, resource: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcResource diff --git a/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource_quantity.py b/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource_quantity.py index 87a14774d8..18a2877484 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource_quantity.py +++ b/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource_quantity.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_resource_quantity( file: ifcopenshell.file, physical_quantity: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource_time.py b/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource_time.py index 7326a5fd90..45dc7cc5e1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource_time.py +++ b/src/ifcopenshell-python/ifcopenshell/api/resource/edit_resource_time.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell import ifcopenshell.api.sequence import ifcopenshell.util.constraint import ifcopenshell.util.date import ifcopenshell.util.resource -from typing import Any def edit_resource_time( diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py b/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py index 167680bd78..867f25f727 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py @@ -16,15 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell +import ifcopenshell.api.geometry import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.api.system -import ifcopenshell.api.geometry -import ifcopenshell.util.system import ifcopenshell.util.element import ifcopenshell.util.placement -from typing import Any +import ifcopenshell.util.system def copy_class(file: ifcopenshell.file, product: ifcopenshell.entity_instance) -> ifcopenshell.entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/create_entity.py b/src/ifcopenshell-python/ifcopenshell/api/root/create_entity.py index 96a3b130be..6afe5ec3a6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/create_entity.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/create_entity.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid -from typing import Optional, Any def create_entity( diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py index 18ff02b199..c7971bc4f7 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Literal, Optional, Union + import ifcopenshell import ifcopenshell.api.aggregate import ifcopenshell.api.geometry @@ -23,11 +25,10 @@ import ifcopenshell.api.pset import ifcopenshell.api.spatial import ifcopenshell.api.type import ifcopenshell.guid -import ifcopenshell.util.representation -import ifcopenshell.util.type -import ifcopenshell.util.schema import ifcopenshell.util.element -from typing import Optional, Union, Literal +import ifcopenshell.util.representation +import ifcopenshell.util.schema +import ifcopenshell.util.type def reassign_class( diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py b/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py index df17e3bb69..9f1724d914 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.type -import ifcopenshell.api.grid -import ifcopenshell.api.feature -import ifcopenshell.api.root -import ifcopenshell.api.pset import ifcopenshell.api.boundary -import ifcopenshell.api.material +import ifcopenshell.api.feature import ifcopenshell.api.geometry +import ifcopenshell.api.grid +import ifcopenshell.api.material +import ifcopenshell.api.pset +import ifcopenshell.api.root +import ifcopenshell.api.type import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_date_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_date_time.py index 96017a0807..3c029add56 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_date_time.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_date_time.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.date from datetime import datetime from typing import Union +import ifcopenshell.util.date + def add_date_time(file: ifcopenshell.file, dt: datetime) -> Union[str, ifcopenshell.entity_instance]: """Add a new date time. diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_task.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_task.py index 36d7d452b1..b8d0d05c15 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_task.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_task.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.control -import ifcopenshell.api.root -import ifcopenshell.api.nest -import ifcopenshell from typing import Optional +import ifcopenshell +import ifcopenshell.api.control +import ifcopenshell.api.nest +import ifcopenshell.api.root + def add_task( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_time_period.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_time_period.py index 41e0785b1d..8a72d2044d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_time_period.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_time_period.py @@ -16,12 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from datetime import datetime, time, timedelta +from typing import Optional, Union + import ifcopenshell.api import ifcopenshell.util.date import ifcopenshell.util.sequence -from datetime import datetime, time -from datetime import timedelta -from typing import Optional, Union def add_time_period( diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_calendar.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_calendar.py index c530a766de..2be4456f0f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_calendar.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_calendar.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root import ifcopenshell.api.project +import ifcopenshell.api.root def add_work_calendar( diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_plan.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_plan.py index 75ab9944be..088199c82c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_plan.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_plan.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root -import ifcopenshell.api.project -import ifcopenshell.api.owner.settings -import ifcopenshell.api.sequence from datetime import datetime, time from typing import Optional, Union +import ifcopenshell.api.owner.settings +import ifcopenshell.api.project +import ifcopenshell.api.root +import ifcopenshell.api.sequence + def add_work_plan( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_schedule.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_schedule.py index 35fa1052ce..06a3fa9e8f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_schedule.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_schedule.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root -import ifcopenshell.api.project +from datetime import datetime, time +from typing import Optional, Union + import ifcopenshell.api.aggregate import ifcopenshell.api.owner.settings +import ifcopenshell.api.project +import ifcopenshell.api.root import ifcopenshell.api.sequence -from datetime import time -from datetime import datetime -from typing import Union, Optional def add_work_schedule( diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_time.py index 05b4960e09..74317f620f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_time.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_work_time.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Literal +import ifcopenshell + TIME_TYPE = Literal["WorkingTimes", "ExceptionTimes"] diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_work_plan.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_work_plan.py index 4b2fd704f4..6c4dae83f6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_work_plan.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_work_plan.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.api.project -import ifcopenshell.api.aggregate from typing import Union +import ifcopenshell +import ifcopenshell.api.aggregate +import ifcopenshell.api.project + def assign_work_plan( file: ifcopenshell.file, work_schedule: ifcopenshell.entity_instance, work_plan: ifcopenshell.entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/calculate_task_duration.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/calculate_task_duration.py index d5f0e5947e..1751f57ec0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/calculate_task_duration.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/calculate_task_duration.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import math +from typing import Union + import ifcopenshell.api.sequence import ifcopenshell.util.date import ifcopenshell.util.element -from typing import Union def calculate_task_duration(file: ifcopenshell.file, task: ifcopenshell.entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/cascade_schedule.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/cascade_schedule.py index 65cbd5a58a..17f2fa3bd5 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/cascade_schedule.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/cascade_schedule.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import datetime +from typing import Optional, Union + import ifcopenshell.util.date import ifcopenshell.util.sequence from ifcopenshell.util.sequence import DURATION_TYPE -from typing import Union, Optional def cascade_schedule(file: ifcopenshell.file, task: ifcopenshell.entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/create_baseline.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/create_baseline.py index 00764a4f7c..f70ead281f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/create_baseline.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/create_baseline.py @@ -16,15 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional, Union + import ifcopenshell -import ifcopenshell.api.owner import ifcopenshell.api.control +import ifcopenshell.api.owner import ifcopenshell.api.sequence import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.sequence import ifcopenshell.util.system -from typing import Optional, Union def create_baseline( diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/duplicate_task.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/duplicate_task.py index fb79581f6b..db9ed0f7db 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/duplicate_task.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/duplicate_task.py @@ -17,10 +17,10 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.guid import ifcopenshell.api.nest import ifcopenshell.api.owner import ifcopenshell.api.sequence +import ifcopenshell.guid import ifcopenshell.util.date import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_lag_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_lag_time.py index d55bf0e4b5..5bf53eecfa 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_lag_time.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_lag_time.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell.api.sequence import ifcopenshell.util.date -from typing import Any def edit_lag_time(file: ifcopenshell.file, lag_time: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_recurrence_pattern.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_recurrence_pattern.py index 519c5cdf25..4cfdb0f1b6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_recurrence_pattern.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_recurrence_pattern.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell import ifcopenshell.util.sequence -from typing import Any def edit_recurrence_pattern( diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_sequence.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_sequence.py index 2686ec5ace..2569d8dab6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_sequence.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_sequence.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell import ifcopenshell.api.sequence -from typing import Any def edit_sequence( diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_task.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_task.py index 3fa1b88caf..d2a2243805 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_task.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_task.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_task(file: ifcopenshell.file, task: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcTask diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_task_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_task_time.py index ffde70580f..06e266b6dc 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_task_time.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_task_time.py @@ -17,12 +17,13 @@ # along with IfcOpenShell. If not, see . import datetime -import ifcopenshell.api.sequence +from typing import Any + import ifcopenshell.api.resource +import ifcopenshell.api.sequence import ifcopenshell.util.constraint import ifcopenshell.util.date import ifcopenshell.util.sequence -from typing import Any def edit_task_time( diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_calendar.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_calendar.py index 83e56a4372..7dfb65de3f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_calendar.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_calendar.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_work_calendar( file: ifcopenshell.file, work_calendar: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_plan.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_plan.py index 145460e11c..67ed76c255 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_plan.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_plan.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.date from typing import Any +import ifcopenshell.util.date + def edit_work_plan( file: ifcopenshell.file, work_plan: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_schedule.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_schedule.py index 98905b9a1f..158caff06d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_schedule.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_schedule.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.date from typing import Any +import ifcopenshell.util.date + def edit_work_schedule( file: ifcopenshell.file, work_schedule: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_time.py index 7fae8b4c18..0c3f5c625f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_time.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/edit_work_time.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.date from typing import Any +import ifcopenshell.util.date + def edit_work_time( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/recalculate_schedule.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/recalculate_schedule.py index 14e82822e3..bfb68051be 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/recalculate_schedule.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/recalculate_schedule.py @@ -17,7 +17,9 @@ # along with IfcOpenShell. If not, see . import datetime + import networkx as nx + import ifcopenshell.api.sequence import ifcopenshell.util.date import ifcopenshell.util.sequence diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_task.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_task.py index 107dcada2b..d42ad9a7b0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_task.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_task.py @@ -17,9 +17,9 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api.pset import ifcopenshell.api.nest import ifcopenshell.api.project +import ifcopenshell.api.pset import ifcopenshell.api.sequence import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_plan.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_plan.py index 1d7fd8ce3a..a0218b2074 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_plan.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_plan.py @@ -17,8 +17,8 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api.project import ifcopenshell.api.aggregate +import ifcopenshell.api.project import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_schedule.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_schedule.py index d0bc15b0db..e9911e09ba 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_schedule.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_schedule.py @@ -17,9 +17,9 @@ # along with IfcOpenShell. If not, see . import ifcopenshell +import ifcopenshell.api.aggregate import ifcopenshell.api.project import ifcopenshell.api.sequence -import ifcopenshell.api.aggregate import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/spatial/assign_container.py b/src/ifcopenshell-python/ifcopenshell/api/spatial/assign_container.py index 15f59905f6..a98e941776 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/spatial/assign_container.py +++ b/src/ifcopenshell-python/ifcopenshell/api/spatial/assign_container.py @@ -16,14 +16,15 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell -import ifcopenshell.guid -import ifcopenshell.api.owner -import ifcopenshell.api.geometry import ifcopenshell.api.aggregate +import ifcopenshell.api.geometry +import ifcopenshell.api.owner +import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.placement -from typing import Union def assign_container( diff --git a/src/ifcopenshell-python/ifcopenshell/api/spatial/reference_structure.py b/src/ifcopenshell-python/ifcopenshell/api/spatial/reference_structure.py index 41452244d1..4446971f0d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/spatial/reference_structure.py +++ b/src/ifcopenshell-python/ifcopenshell/api/spatial/reference_structure.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Union def reference_structure( diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/__init__.py b/src/ifcopenshell-python/ifcopenshell/api/structural/__init__.py index 9406c5fc12..2baa262432 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/__init__.py @@ -39,7 +39,9 @@ from .edit_structural_load import edit_structural_load from .edit_structural_load_case import edit_structural_load_case from .remove_structural_analysis_model import remove_structural_analysis_model from .remove_structural_boundary_condition import remove_structural_boundary_condition -from .remove_structural_connection_condition import remove_structural_connection_condition +from .remove_structural_connection_condition import ( + remove_structural_connection_condition, +) from .remove_structural_load import remove_structural_load from .remove_structural_load_case import remove_structural_load_case from .remove_structural_load_group import remove_structural_load_group diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_activity.py b/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_activity.py index 466d26526f..ef12a4cb12 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_activity.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_activity.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.root from typing import Literal +import ifcopenshell.api.root + def add_structural_activity( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_boundary_condition.py b/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_boundary_condition.py index 4e3ac0c1b9..c78bba2b68 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_boundary_condition.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_boundary_condition.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def add_structural_boundary_condition( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_load.py b/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_load.py index ad79a58ce5..6a7d9eb03f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_load.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/add_structural_load.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api from typing import Optional +import ifcopenshell.api + def add_structural_load( file: ifcopenshell.file, name: Optional[str] = None, ifc_class: str = "IfcStructuralLoadLinearForce" diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/assign_structural_analysis_model.py b/src/ifcopenshell-python/ifcopenshell/api/structural/assign_structural_analysis_model.py index dfae40d862..e378b3d984 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/assign_structural_analysis_model.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/assign_structural_analysis_model.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.group import ifcopenshell.api.owner import ifcopenshell.guid -from typing import Union def assign_structural_analysis_model( diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_analysis_model.py b/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_analysis_model.py index 65c03eb238..6d9b87b596 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_analysis_model.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_analysis_model.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_structural_analysis_model( file: ifcopenshell.file, structural_analysis_model: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_boundary_condition.py b/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_boundary_condition.py index f88eb7fc71..67eaadf46d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_boundary_condition.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_boundary_condition.py @@ -15,8 +15,9 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Literal, TypedDict, Union + import ifcopenshell -from typing import Any, TypedDict, Literal, Union class AttributeDict(TypedDict): diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_load.py b/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_load.py index faa218a7a3..874db34655 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_load.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_load.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_structural_load( file: ifcopenshell.file, structural_load: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_load_case.py b/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_load_case.py index 02948c637d..511ef3fe87 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_load_case.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/edit_structural_load_case.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_structural_load_case( file: ifcopenshell.file, load_case: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_boundary_condition.py b/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_boundary_condition.py index d31811a739..6f17b4ffba 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_boundary_condition.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_boundary_condition.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def remove_structural_boundary_condition( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/add_style.py b/src/ifcopenshell-python/ifcopenshell/api/style/add_style.py index 54e5ffd2a8..3b5c3acef8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/add_style.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/add_style.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def add_style( file: ifcopenshell.file, name: Optional[str] = None, ifc_class="IfcSurfaceStyle" diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_style.py b/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_style.py index 55af1b35b2..e4c3f82c9c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_style.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_style.py @@ -16,10 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Literal, Optional + import ifcopenshell import ifcopenshell.api.style -from typing import Any, Optional, Literal - SURFACE_STYLE_TYPES = Literal[ "IfcSurfaceStyleShading", diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_textures.py b/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_textures.py index 89505d1a98..a0765bbf8d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_textures.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_textures.py @@ -16,9 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Optional + import ifcopenshell import ifcopenshell.api -from typing import TYPE_CHECKING, Optional, Any if TYPE_CHECKING: import bpy diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/assign_item_style.py b/src/ifcopenshell-python/ifcopenshell/api/style/assign_item_style.py index 0712bc2f83..cf8b5dc1a6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/assign_item_style.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/assign_item_style.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional, Union +import ifcopenshell + def assign_item_style( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/assign_material_style.py b/src/ifcopenshell-python/ifcopenshell/api/style/assign_material_style.py index a9050a3379..bccd0568f1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/assign_material_style.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/assign_material_style.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell import ifcopenshell.api.style import ifcopenshell.util.element -from typing import Any def assign_material_style( diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/assign_representation_styles.py b/src/ifcopenshell-python/ifcopenshell/api/style/assign_representation_styles.py index b4d0fbe0e5..2182d354c1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/assign_representation_styles.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/assign_representation_styles.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def assign_representation_styles( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/edit_presentation_style.py b/src/ifcopenshell-python/ifcopenshell/api/style/edit_presentation_style.py index 7a39629528..a259b7ac83 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/edit_presentation_style.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/edit_presentation_style.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_presentation_style( file: ifcopenshell.file, style: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/edit_surface_style.py b/src/ifcopenshell-python/ifcopenshell/api/style/edit_surface_style.py index 7f7f05948d..681ba6ccf6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/edit_surface_style.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/edit_surface_style.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any, Union +import ifcopenshell + def edit_surface_style( file: ifcopenshell.file, style: ifcopenshell.entity_instance, attributes: dict[str, Any] diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/remove_style.py b/src/ifcopenshell-python/ifcopenshell/api/style/remove_style.py index 3637dcaca7..cc8045b189 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/remove_style.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/remove_style.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections.abc import Iterable + import ifcopenshell.api.style import ifcopenshell.util.element -from collections.abc import Iterable def remove_style(file: ifcopenshell.file, style: ifcopenshell.entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/unassign_representation_styles.py b/src/ifcopenshell-python/ifcopenshell/api/style/unassign_representation_styles.py index 47a542c1b7..ef2d516fb8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/unassign_representation_styles.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/unassign_representation_styles.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def unassign_representation_styles( file: ifcopenshell.file, diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/add_port.py b/src/ifcopenshell-python/ifcopenshell/api/system/add_port.py index 5c1ba67bda..3b8348f77b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/add_port.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/add_port.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.system -from typing import Optional def add_port( diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/assign_flow_control.py b/src/ifcopenshell-python/ifcopenshell/api/system/assign_flow_control.py index 3b9273acf1..1be4d2c3bd 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/assign_flow_control.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/assign_flow_control.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid -from typing import Union def assign_flow_control( diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/assign_port.py b/src/ifcopenshell-python/ifcopenshell/api/system/assign_port.py index eee8780778..20e2ec26b8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/assign_port.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/assign_port.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any + import ifcopenshell -import ifcopenshell.api.owner import ifcopenshell.api.geometry +import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.placement -from typing import Any def assign_port( diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/assign_system.py b/src/ifcopenshell-python/ifcopenshell/api/system/assign_system.py index 8677f748b4..ee1acff2c4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/assign_system.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/assign_system.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell import ifcopenshell.api.group import ifcopenshell.util.system -from typing import Union def assign_system( diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/connect_port.py b/src/ifcopenshell-python/ifcopenshell/api/system/connect_port.py index d64f5c2064..6c43df1b8b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/connect_port.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/connect_port.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional + import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid import ifcopenshell.util.element -from typing import Optional, Any def connect_port( diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/edit_system.py b/src/ifcopenshell-python/ifcopenshell/api/system/edit_system.py index c90894ec7f..0615025f4c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/edit_system.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/edit_system.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_system(file: ifcopenshell.file, system: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcSystem diff --git a/src/ifcopenshell-python/ifcopenshell/api/type/assign_type.py b/src/ifcopenshell-python/ifcopenshell/api/type/assign_type.py index f412d4dd2e..2c7abcd169 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/type/assign_type.py +++ b/src/ifcopenshell-python/ifcopenshell/api/type/assign_type.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Union + import ifcopenshell -import ifcopenshell.api.type -import ifcopenshell.api.owner import ifcopenshell.api.material +import ifcopenshell.api.owner +import ifcopenshell.api.type import ifcopenshell.guid import ifcopenshell.util.element -from typing import Union def assign_type( diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/__init__.py b/src/ifcopenshell-python/ifcopenshell/api/unit/__init__.py index 4245b49c37..31ed3d0ddc 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/__init__.py @@ -26,9 +26,9 @@ equipment. from .. import wrap_usecases from .add_context_dependent_unit import add_context_dependent_unit from .add_conversion_based_unit import add_conversion_based_unit +from .add_derived_unit import add_derived_unit from .add_monetary_unit import add_monetary_unit from .add_si_unit import add_si_unit -from .add_derived_unit import add_derived_unit from .assign_unit import assign_unit from .edit_derived_unit import edit_derived_unit from .edit_monetary_unit import edit_monetary_unit diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py index 6a4f17f8fd..b223f7cc46 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/add_conversion_based_unit.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Optional + import ifcopenshell import ifcopenshell.util.unit -from typing import Optional def add_conversion_based_unit( diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/add_derived_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/add_derived_unit.py index aba4388010..5cd167e66d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/add_derived_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/add_derived_unit.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.unit from typing import Any, Optional +import ifcopenshell.util.unit + def add_derived_unit( file: ifcopenshell.file, unit_type: str, userdefinedtype: str, attributes: dict[ifcopenshell.entity_instance, int] diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/add_si_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/add_si_unit.py index 50da1c10f2..52f79f413b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/add_si_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/add_si_unit.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.unit from typing import Optional +import ifcopenshell.util.unit + def add_si_unit( file: ifcopenshell.file, unit_type: str = "LENGTHUNIT", prefix: Optional[str] = None diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py index 5861e4248a..7b5c2b6ae4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/assign_unit.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Any, Optional + import ifcopenshell import ifcopenshell.util.unit -from typing import Optional, Any def assign_unit( diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/edit_derived_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/edit_derived_unit.py index 5bc9bbd316..6c82e5edad 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/edit_derived_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/edit_derived_unit.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_derived_unit(file: ifcopenshell.file, unit: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcDerivedUnit diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/edit_monetary_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/edit_monetary_unit.py index bccc61afc0..62d3d1186f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/edit_monetary_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/edit_monetary_unit.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_monetary_unit(file: ifcopenshell.file, unit: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcMonetaryUnit diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/edit_named_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/edit_named_unit.py index 683feb7216..87e3608138 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/edit_named_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/edit_named_unit.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Any +import ifcopenshell + def edit_named_unit(file: ifcopenshell.file, unit: ifcopenshell.entity_instance, attributes: dict[str, Any]) -> None: """Edits the attributes of an IfcNamedUnit diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/remove_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/remove_unit.py index a9920e0e5c..36ab2f73a2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/remove_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/remove_unit.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.unit import ifcopenshell.util.element +import ifcopenshell.util.unit def remove_unit(file: ifcopenshell.file, unit: ifcopenshell.entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/unassign_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/unassign_unit.py index 443d9d0b1c..db968a960d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/unassign_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/unassign_unit.py @@ -15,9 +15,10 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from typing import Optional +import ifcopenshell + def unassign_unit(file: ifcopenshell.file, units: Optional[list[ifcopenshell.entity_instance]] = None) -> None: """Unassigns units as default units for the project diff --git a/src/ifcopenshell-python/ifcopenshell/draw.py b/src/ifcopenshell-python/ifcopenshell/draw.py index e2e38d700b..15ad2ef11f 100644 --- a/src/ifcopenshell-python/ifcopenshell/draw.py +++ b/src/ifcopenshell-python/ifcopenshell/draw.py @@ -18,12 +18,17 @@ """2D drawing generation and serialisation""" -from functools import reduce import itertools -import math import json +import math import operator import warnings +from collections.abc import Callable, Sequence +from dataclasses import dataclass, field, fields +from functools import reduce +from xml.dom.minidom import parseString + +import numpy import shapely import ifcopenshell @@ -31,12 +36,6 @@ import ifcopenshell.geom import ifcopenshell.util.element import ifcopenshell.util.selector -from xml.dom.minidom import parseString -from dataclasses import dataclass, fields, field -from collections.abc import Callable, Sequence - -import numpy - W = ifcopenshell.ifcopenshell_wrapper WHITE = numpy.array((1.0, 1.0, 1.0)) @@ -670,9 +669,9 @@ def main( if __name__ == "__main__": + import argparse import sys import time - import argparse times = [] diff --git a/src/ifcopenshell-python/ifcopenshell/entity_instance.py b/src/ifcopenshell-python/ifcopenshell/entity_instance.py index 0cae2608f3..1dea67b793 100644 --- a/src/ifcopenshell-python/ifcopenshell/entity_instance.py +++ b/src/ifcopenshell-python/ifcopenshell/entity_instance.py @@ -18,19 +18,19 @@ from __future__ import annotations + import functools import importlib -import numbers import itertools +import numbers import operator import subprocess import sys import time -from typing import Union, Any, TypeVar, overload, TYPE_CHECKING, cast, NoReturn from collections.abc import Callable, Sequence +from typing import TYPE_CHECKING, Any, NoReturn, TypeVar, Union, cast, overload -from . import ifcopenshell_wrapper -from . import settings +from . import ifcopenshell_wrapper, settings if TYPE_CHECKING: import ifcopenshell diff --git a/src/ifcopenshell-python/ifcopenshell/file.py b/src/ifcopenshell-python/ifcopenshell/file.py index 0aadacfbfc..a12d12eb57 100644 --- a/src/ifcopenshell-python/ifcopenshell/file.py +++ b/src/ifcopenshell-python/ifcopenshell/file.py @@ -17,25 +17,27 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations + +import functools +import numbers import os import re -import numbers import time -import zipfile -import functools -import ifcopenshell -import weakref import types -from pathlib import Path -from typing import Any, Optional, TYPE_CHECKING, Union, overload, Literal, TypedDict +import weakref +import zipfile from collections.abc import Callable, Generator +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Optional, TypedDict, Union, overload + from typing_extensions import assert_never +import ifcopenshell +from ifcopenshell.util.mvd_info import LARK_AVAILABLE, MvdInfo + from . import ifcopenshell_wrapper from .entity_instance import entity_instance -from ifcopenshell.util.mvd_info import MvdInfo, LARK_AVAILABLE - if TYPE_CHECKING: import ifcopenshell.util.schema diff --git a/src/ifcopenshell-python/ifcopenshell/geom/app.py b/src/ifcopenshell-python/ifcopenshell/geom/app.py index aa11f18c1f..4ee0a5d482 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/app.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/app.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import functools +import multiprocessing +import operator import os import sys import time -import operator -import functools -import multiprocessing + import ifcopenshell.ifcopenshell_wrapper as W try: @@ -33,7 +34,7 @@ except ImportError: USE_OCCT_HANDLE = True -from collections import defaultdict, OrderedDict +from collections import OrderedDict, defaultdict from collections.abc import Iterable try: @@ -69,11 +70,10 @@ except BaseException: from OCC.Display.qtDisplay import qtViewer3d -from .main import settings, iterator -from .occ_utils import display_shape - from .. import open as open_ifc_file from .. import version as ifcopenshell_version +from .main import iterator, settings +from .occ_utils import display_shape if ifcopenshell_version < "0.6": # not yet ported diff --git a/src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py b/src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py index f84f45a234..ff46b67d8d 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py @@ -16,11 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import logging import os import sys -import logging - from code import InteractiveConsole + from PyQt5 import QtCore, QtGui, QtWidgets try: @@ -29,14 +29,14 @@ except BaseException: QtWidgets = QtGui try: - from pyqode.core.panels import CheckerPanel - from pyqode.core import api - from pyqode.core import modes - from pyqode.core import panels + from pyqode.core import api, modes, panels from pyqode.core.api import CodeEdit, ColorScheme - from pyqode.python.modes import PyAutoIndentMode, PythonSH + from pyqode.core.panels import CheckerPanel + from pyqode.python import modes as pymodes + from pyqode.python import panels as pypanels + from pyqode.python import widgets from pyqode.python.backend import server - from pyqode.python import modes as pymodes, panels as pypanels, widgets + from pyqode.python.modes import PyAutoIndentMode, PythonSH from pyqode.python.widgets import PyInteractiveConsole has_pyqode = True diff --git a/src/ifcopenshell-python/ifcopenshell/geom/main.py b/src/ifcopenshell-python/ifcopenshell/geom/main.py index 0800ac7763..fe31a15d84 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/main.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/main.py @@ -18,18 +18,17 @@ from __future__ import annotations + +import operator import os import sys -import operator - -from .. import open, ifcopenshell_wrapper -from ..file import file -from ..entity_instance import entity_instance - -from . import has_occ - -from typing import TypeVar, Union, Optional, Any, Literal, overload, TYPE_CHECKING, cast from collections.abc import Generator, Iterable +from typing import TYPE_CHECKING, Any, Literal, Optional, TypeVar, Union, cast, overload + +from .. import ifcopenshell_wrapper, open +from ..entity_instance import entity_instance +from ..file import file +from . import has_occ if TYPE_CHECKING: from OCC.Core import TopoDS diff --git a/src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py b/src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py index 9835b48696..9abddff470 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py @@ -18,24 +18,25 @@ from __future__ import annotations -import inspect -import random -import operator -import warnings -import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper -from typing import NamedTuple, Any, Union -from typing_extensions import assert_never +import inspect +import operator +import random +import warnings from collections.abc import Iterable +from typing import Any, NamedTuple, Union import OCC +from typing_extensions import assert_never + +import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper try: - from OCC.Core import V3d, TopoDS, gp, AIS, Quantity, BRepTools, Graphic3d + from OCC.Core import AIS, BRepTools, Graphic3d, Quantity, TopoDS, V3d, gp USE_OCCT_HANDLE = False except ImportError: - from OCC import V3d, TopoDS, gp, AIS, Quantity, BRepTools, Graphic3d + from OCC import AIS, BRepTools, Graphic3d, Quantity, TopoDS, V3d, gp USE_OCCT_HANDLE = True diff --git a/src/ifcopenshell-python/ifcopenshell/geom/stats.py b/src/ifcopenshell-python/ifcopenshell/geom/stats.py index 364083acd7..9266d532d4 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/stats.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/stats.py @@ -1,6 +1,6 @@ import sys -from typing import Optional, IO from itertools import accumulate +from typing import IO, Optional from . import ifcopenshell_wrapper diff --git a/src/ifcopenshell-python/ifcopenshell/guid.py b/src/ifcopenshell-python/ifcopenshell/guid.py index 6e3c6f5b0a..4f6d30332d 100644 --- a/src/ifcopenshell-python/ifcopenshell/guid.py +++ b/src/ifcopenshell-python/ifcopenshell/guid.py @@ -47,11 +47,10 @@ cf. . -import ifcopenshell -from typing import Any, Union, Literal +from typing import Any, Literal, Union + from typing_extensions import Self +import ifcopenshell + # `std::vector` usually translated to `tuple[xxx, ...]`. ON_SLABS_AND_WALLS: Any diff --git a/src/ifcopenshell-python/ifcopenshell/sql.py b/src/ifcopenshell-python/ifcopenshell/sql.py index e0701cf8ed..dcc170e006 100644 --- a/src/ifcopenshell-python/ifcopenshell/sql.py +++ b/src/ifcopenshell-python/ifcopenshell/sql.py @@ -16,19 +16,23 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . from __future__ import annotations -import re + import json +import re import types +from pathlib import Path +from typing import TYPE_CHECKING, Any, NoReturn, Optional, TypedDict, Union + import numpy as np import numpy.typing as npt + import ifcopenshell import ifcopenshell.util.attribute import ifcopenshell.util.schema -from pathlib import Path -from typing import Any, NoReturn, Union, Optional, TYPE_CHECKING, TypedDict + from . import ifcopenshell_wrapper -from .file import file from .entity_instance import entity_instance +from .file import file if TYPE_CHECKING: import sqlite3 diff --git a/src/ifcopenshell-python/ifcopenshell/stream.py b/src/ifcopenshell-python/ifcopenshell/stream.py index 655dc2d9cd..627ebac82c 100644 --- a/src/ifcopenshell-python/ifcopenshell/stream.py +++ b/src/ifcopenshell-python/ifcopenshell/stream.py @@ -21,15 +21,16 @@ from __future__ import annotations try: import os import re + from typing import Any, NoReturn, Optional, Union + + from lark import Lark, Transformer import ifcopenshell.util.attribute import ifcopenshell.util.schema - from .file import file + from . import ifcopenshell_wrapper from .entity_instance import entity_instance - - from lark import Lark, Transformer - from typing import Any, NoReturn, Union, Optional + from .file import file class StreamTransformer(Transformer): file: file diff --git a/src/ifcopenshell-python/ifcopenshell/template.py b/src/ifcopenshell-python/ifcopenshell/template.py index d31b125279..bd58d0fdef 100644 --- a/src/ifcopenshell-python/ifcopenshell/template.py +++ b/src/ifcopenshell-python/ifcopenshell/template.py @@ -19,12 +19,11 @@ import time import uuid +from typing import Optional from .file import file from .guid import compress from .ifcopenshell_wrapper import version -from typing import Optional - # A quick way to setup an 'empty' IFC file, taken from: # http://academy.ifcopenshell.org/creating-a-simple-wall-with-property-set-and-quantity-information/ diff --git a/src/ifcopenshell-python/ifcopenshell/util/alignment.py b/src/ifcopenshell-python/ifcopenshell/util/alignment.py index ad6c6dd65d..1b90ac7c5f 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/alignment.py +++ b/src/ifcopenshell-python/ifcopenshell/util/alignment.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import math + import ifcopenshell import ifcopenshell.util.unit diff --git a/src/ifcopenshell-python/ifcopenshell/util/attribute.py b/src/ifcopenshell-python/ifcopenshell/util/attribute.py index a3212aca67..0e34b5c022 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/attribute.py +++ b/src/ifcopenshell-python/ifcopenshell/util/attribute.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Literal, Union + import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper -from typing import Union, Literal PrimitiveType = Literal["entity", "string", "float", "integer", "boolean", "enum", "binary"] ComplexPrimitiveType = Literal["list", "array", "set"] diff --git a/src/ifcopenshell-python/ifcopenshell/util/brick.py b/src/ifcopenshell-python/ifcopenshell/util/brick.py index 04e0be5452..ec358c2b98 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/brick.py +++ b/src/ifcopenshell-python/ifcopenshell/util/brick.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import os import json +import os +from typing import Union + import ifcopenshell import ifcopenshell.util.classification import ifcopenshell.util.element import ifcopenshell.util.system -from typing import Union - cwd = os.path.dirname(os.path.realpath(__file__)) diff --git a/src/ifcopenshell-python/ifcopenshell/util/classification.py b/src/ifcopenshell-python/ifcopenshell/util/classification.py index 06f9b0e31a..df36eb97a4 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/classification.py +++ b/src/ifcopenshell-python/ifcopenshell/util/classification.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.element from typing import Optional +import ifcopenshell.util.element + def get_references(element: ifcopenshell.entity_instance, should_inherit=True) -> set[ifcopenshell.entity_instance]: """Gets classification references associated with the element diff --git a/src/ifcopenshell-python/ifcopenshell/util/constraint.py b/src/ifcopenshell-python/ifcopenshell/util/constraint.py index 2c370aa997..6d52d74676 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/constraint.py +++ b/src/ifcopenshell-python/ifcopenshell/util/constraint.py @@ -18,9 +18,10 @@ # # -import ifcopenshell from typing import Union +import ifcopenshell + def get_constraints(product: ifcopenshell.entity_instance) -> list[ifcopenshell.entity_instance]: """ diff --git a/src/ifcopenshell-python/ifcopenshell/util/cost.py b/src/ifcopenshell-python/ifcopenshell/util/cost.py index a7e96221d9..19172c4710 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/cost.py +++ b/src/ifcopenshell-python/ifcopenshell/util/cost.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import lark -import ifcopenshell -from typing import Optional, Union, Literal, Any from collections.abc import Generator +from typing import Any, Literal, Optional, Union + +import lark + +import ifcopenshell import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper import ifcopenshell.util.attribute import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/util/data.py b/src/ifcopenshell-python/ifcopenshell/util/data.py index c65a87ddb0..4169b1ea4d 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/data.py +++ b/src/ifcopenshell-python/ifcopenshell/util/data.py @@ -17,10 +17,13 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations -import numpy as np -import ifcopenshell -from typing import Any, Union + from dataclasses import dataclass +from typing import Any, Union + +import numpy as np + +import ifcopenshell from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcopenshell-python/ifcopenshell/util/date.py b/src/ifcopenshell-python/ifcopenshell/util/date.py index 3b0761f75c..dcd1c36ca5 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/date.py +++ b/src/ifcopenshell-python/ifcopenshell/util/date.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import datetime -import isodate from re import findall +from typing import Any, Literal, Union, overload + +import isodate from dateutil import parser -from typing import Literal, Union, Any, overload + +import ifcopenshell def timedelta2duration(timedelta): diff --git a/src/ifcopenshell-python/ifcopenshell/util/doc.py b/src/ifcopenshell-python/ifcopenshell/util/doc.py index 41d6189fe4..9c7acf16b7 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/doc.py +++ b/src/ifcopenshell-python/ifcopenshell/util/doc.py @@ -16,27 +16,30 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import copy import json from pathlib import Path -import copy +from typing import Any, Literal, Optional, TypedDict, Union + +from typing_extensions import NotRequired + import ifcopenshell import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper import ifcopenshell.util.attribute import ifcopenshell.util.schema -from typing import Optional, Literal, Any, Union, TypedDict -from typing_extensions import NotRequired try: import glob - import warnings - import requests - import urllib.parse - from markdown import markdown - from bs4 import BeautifulSoup, MarkupResemblesLocatorWarning - import zipfile - from lxml import etree import re import shutil + import urllib.parse + import warnings + import zipfile + + import requests + from bs4 import BeautifulSoup, MarkupResemblesLocatorWarning + from lxml import etree + from markdown import markdown except: pass # Only necessary if you're using it to generate the docs database diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index 9421bc9760..149606cb14 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections import namedtuple +from collections.abc import Callable, Generator, Sequence +from typing import Any, Literal, Optional, Union, overload + import ifcopenshell import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.representation -from typing import Any, Optional, Union, Literal, overload -from collections.abc import Callable, Generator, Sequence -from collections import namedtuple - MATERIAL_TYPE = Literal[ "IfcMaterial", diff --git a/src/ifcopenshell-python/ifcopenshell/util/file.py b/src/ifcopenshell-python/ifcopenshell/util/file.py index 4875ddf3b7..a874e1ba4d 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/file.py +++ b/src/ifcopenshell-python/ifcopenshell/util/file.py @@ -17,7 +17,8 @@ # along with IfcOpenShell. If not, see . import zipfile -from typing import IO, Union, TypedDict +from typing import IO, TypedDict, Union + from typing_extensions import NotRequired diff --git a/src/ifcopenshell-python/ifcopenshell/util/fm.py b/src/ifcopenshell-python/ifcopenshell/util/fm.py index c9b1977e4e..bfb7391dc3 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/fm.py +++ b/src/ifcopenshell-python/ifcopenshell/util/fm.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import Literal + +from typing_extensions import assert_never + import ifcopenshell import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.attribute -from typing import Literal -from typing_extensions import assert_never # COBie actually uses an exclusion list, but this inclusion list is equivalent. cobie_type_classes = [ diff --git a/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py b/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py index 44d5bc28cf..87c65e2f28 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py +++ b/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py @@ -18,22 +18,23 @@ RUN_FROM_DEV_REPO = False -import ifcopenshell.ifcopenshell_wrapper as W -import ifcopenshell.api.unit -import ifcopenshell.api.project -import ifcopenshell.guid -import ifcopenshell.util.attribute import glob import sys -from pathlib import Path -from lxml import etree from itertools import chain +from pathlib import Path from typing import cast +from lxml import etree + +import ifcopenshell.api.project +import ifcopenshell.api.unit +import ifcopenshell.guid +import ifcopenshell.ifcopenshell_wrapper as W +import ifcopenshell.util.attribute if not RUN_FROM_DEV_REPO: - import zipfile import shutil + import zipfile BASE_MODULE_PATH = Path(__file__).parent diff --git a/src/ifcopenshell-python/ifcopenshell/util/geolocation.py b/src/ifcopenshell-python/ifcopenshell/util/geolocation.py index 748ba8f3c3..fba8dfffaf 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/geolocation.py +++ b/src/ifcopenshell-python/ifcopenshell/util/geolocation.py @@ -17,12 +17,14 @@ # along with IfcOpenShell. If not, see . import math +from decimal import ROUND_HALF_UP, Decimal +from typing import NamedTuple, Optional, Union + import numpy as np + import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.placement -from typing import NamedTuple, Optional, Union -from decimal import Decimal, ROUND_HALF_UP MatrixType = ifcopenshell.util.placement.MatrixType diff --git a/src/ifcopenshell-python/ifcopenshell/util/ifc4x3dev_scrape_data_for_docs.py b/src/ifcopenshell-python/ifcopenshell/util/ifc4x3dev_scrape_data_for_docs.py index 02e4f1f491..86ab81ef4c 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/ifc4x3dev_scrape_data_for_docs.py +++ b/src/ifcopenshell-python/ifcopenshell/util/ifc4x3dev_scrape_data_for_docs.py @@ -17,7 +17,12 @@ # along with IfcOpenShell. If not, see . try: - from server import get_resource_path, resource_documentation_builder, process_markdown, R + from server import ( + R, + get_resource_path, + process_markdown, + resource_documentation_builder, + ) except ModuleNotFoundError as e: print( "ERROR. Failed to import `server.py`.\n" @@ -26,13 +31,15 @@ except ModuleNotFoundError as e: raise e import itertools -import operator import json -import ifcopenshell +import operator from collections import Counter -from bs4 import BeautifulSoup from typing import Any, Union +from bs4 import BeautifulSoup + +import ifcopenshell + # Hacky modified functions from server.py to make parser work def get_definition_from_md(resource: str, mdc: str) -> str: diff --git a/src/ifcopenshell-python/ifcopenshell/util/mvd_info.py b/src/ifcopenshell-python/ifcopenshell/util/mvd_info.py index cae535698e..a3bdb07337 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/mvd_info.py +++ b/src/ifcopenshell-python/ifcopenshell/util/mvd_info.py @@ -26,8 +26,8 @@ try: except ImportError: LARK_AVAILABLE = False -from typing import Union import re +from typing import Union if LARK_AVAILABLE: mvd_grammar = r""" diff --git a/src/ifcopenshell-python/ifcopenshell/util/placement.py b/src/ifcopenshell-python/ifcopenshell/util/placement.py index e7e7b99a68..cc37ab9906 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/placement.py +++ b/src/ifcopenshell-python/ifcopenshell/util/placement.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections.abc import Iterable +from typing import Literal, Optional + import numpy as np import numpy.typing as npt + import ifcopenshell -from typing import Literal, Optional -from collections.abc import Iterable MatrixType = npt.NDArray[np.float64] """`npt.NDArray[np.float64]`""" diff --git a/src/ifcopenshell-python/ifcopenshell/util/pset.py b/src/ifcopenshell-python/ifcopenshell/util/pset.py index df906a2e57..68fc84a5b1 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/pset.py +++ b/src/ifcopenshell-python/ifcopenshell/util/pset.py @@ -16,15 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import re import pathlib +import re +from functools import lru_cache +from typing import Literal, NamedTuple, Optional, Union + import ifcopenshell import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.schema import ifcopenshell.util.type from ifcopenshell.entity_instance import entity_instance -from functools import lru_cache -from typing import Optional, Literal, NamedTuple, Union templates: dict[ifcopenshell.util.schema.IFC_SCHEMA, "PsetQto"] = {} diff --git a/src/ifcopenshell-python/ifcopenshell/util/representation.py b/src/ifcopenshell-python/ifcopenshell/util/representation.py index 10743294b0..f0c2b54fca 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/representation.py +++ b/src/ifcopenshell-python/ifcopenshell/util/representation.py @@ -16,15 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections.abc import Generator, Sequence +from typing import Literal, Optional, TypedDict, Union + import numpy as np import numpy.typing as npt -import ifcopenshell -import ifcopenshell.util.representation -import ifcopenshell.util.placement -import ifcopenshell.util.shape -from typing import Optional, Union, TypedDict, Literal -from collections.abc import Generator, Sequence +import ifcopenshell +import ifcopenshell.util.placement +import ifcopenshell.util.representation +import ifcopenshell.util.shape CONTEXT_TYPE = Literal["Model", "Plan", "NotDefined"] REPRESENTATION_IDENTIFIER = Literal[ diff --git a/src/ifcopenshell-python/ifcopenshell/util/resource.py b/src/ifcopenshell-python/ifcopenshell/util/resource.py index f518a09125..262ddda125 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/resource.py +++ b/src/ifcopenshell-python/ifcopenshell/util/resource.py @@ -16,11 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.cost -import ifcopenshell.util.element -import ifcopenshell.util.date -from typing import Union, Any +from typing import Any, Union +import ifcopenshell.util.cost +import ifcopenshell.util.date +import ifcopenshell.util.element PRODUCTIVITY_PSET_DATA = Union[dict[str, Any], None] # https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcConstructionResource.htm#Table-7.3.3.7.1.3.H diff --git a/src/ifcopenshell-python/ifcopenshell/util/schema.py b/src/ifcopenshell-python/ifcopenshell/util/schema.py index d3d7b65c6a..bdd6d489d0 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/schema.py +++ b/src/ifcopenshell-python/ifcopenshell/util/schema.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import os import json +import os import time +from typing import Any, Literal, Union + import ifcopenshell -import ifcopenshell.util.attribute import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper -from typing import Union, Any, Literal +import ifcopenshell.util.attribute # This is highly experimental and incomplete, however, it may work for simple datasets. diff --git a/src/ifcopenshell-python/ifcopenshell/util/scripts/validate_stub.py b/src/ifcopenshell-python/ifcopenshell/util/scripts/validate_stub.py index 14b05ed258..2ddf444704 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/scripts/validate_stub.py +++ b/src/ifcopenshell-python/ifcopenshell/util/scripts/validate_stub.py @@ -30,6 +30,7 @@ import ast import difflib from pathlib import Path from typing import Union + from typing_extensions import assert_never diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index 7b0acfef7f..1508e36e8f 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -18,10 +18,16 @@ import re import sys +from collections.abc import Iterable +from decimal import Decimal +from types import EllipsisType +from typing import Any, Optional, Union + import lark import numpy as np -import ifcopenshell.api.pset + import ifcopenshell.api.geometry +import ifcopenshell.api.pset import ifcopenshell.util import ifcopenshell.util.attribute import ifcopenshell.util.classification @@ -34,11 +40,6 @@ import ifcopenshell.util.schema import ifcopenshell.util.shape import ifcopenshell.util.system import ifcopenshell.util.unit -from decimal import Decimal -from typing import Optional, Any, Union -from collections.abc import Iterable -from types import EllipsisType - filter_elements_grammar = lark.Lark( """start: filter_group diff --git a/src/ifcopenshell-python/ifcopenshell/util/sequence.py b/src/ifcopenshell-python/ifcopenshell/util/sequence.py index 51f34b7226..518d581657 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/sequence.py +++ b/src/ifcopenshell-python/ifcopenshell/util/sequence.py @@ -17,13 +17,13 @@ # along with IfcOpenShell. If not, see . import datetime +from collections.abc import Generator +from functools import cache +from math import floor +from typing import Literal, Optional, Union + import ifcopenshell.util.date import ifcopenshell.util.element -from math import floor -from functools import cache -from typing import Union, Literal, Optional -from collections.abc import Generator - DURATION_TYPE = Literal["ELAPSEDTIME", "WORKTIME", "NOTDEFINED"] RECURRENCE_TYPE = Literal[ diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape.py b/src/ifcopenshell-python/ifcopenshell/util/shape.py index 75c15b6935..4c41eff9f9 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape.py @@ -16,18 +16,20 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import shapely -import shapely.ops +from math import cos, radians +from typing import Literal, Optional, Union + import numpy as np import numpy.typing as npt +import shapely +import shapely.ops + import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation -from ifcopenshell.util.shape_builder import VectorType -from math import radians, cos from ifcopenshell.geom import ShapeElementType -from typing import Optional, Literal, Union +from ifcopenshell.util.shape_builder import VectorType tol = 1e-6 AXIS_LITERAL = Literal["X", "Y", "Z"] diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py index 0811b8798c..8c0f3d6ce9 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py @@ -17,20 +17,23 @@ # along with IfcOpenShell. If not, see . from __future__ import annotations -import numpy as np -import numpy.typing as npt + import collections import collections.abc +from collections.abc import Sequence +from itertools import chain +from math import atan, cos, degrees, pi, radians, sin, sqrt, tan +from typing import TYPE_CHECKING, Any, Literal, Optional, Union + +import numpy as np +import numpy.typing as npt + import ifcopenshell import ifcopenshell.api import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.unit -from math import cos, sin, pi, tan, radians, degrees, atan, sqrt -from typing import Union, Optional, Literal, Any, TYPE_CHECKING -from collections.abc import Sequence -from itertools import chain PRECISION = 1.0e-5 diff --git a/src/ifcopenshell-python/ifcopenshell/util/system.py b/src/ifcopenshell-python/ifcopenshell/util/system.py index 832daefc0d..39d9207018 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/system.py +++ b/src/ifcopenshell-python/ifcopenshell/util/system.py @@ -17,8 +17,9 @@ # along with IfcOpenShell. If not, see . +from typing import Literal, Optional, Union + import ifcopenshell.util.system -from typing import Optional, Union, Literal group_types: dict[str, tuple[str, ...]] = { "IfcZone": ("IfcZone", "IfcSpace", "IfcSpatialZone"), diff --git a/src/ifcopenshell-python/ifcopenshell/util/type.py b/src/ifcopenshell-python/ifcopenshell/util/type.py index ab58814267..86a1ccc7c9 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/type.py +++ b/src/ifcopenshell-python/ifcopenshell/util/type.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import os import json +import os + import ifcopenshell.util.schema cwd = os.path.dirname(os.path.realpath(__file__)) diff --git a/src/ifcopenshell-python/ifcopenshell/util/unit.py b/src/ifcopenshell-python/ifcopenshell/util/unit.py index 86254cb826..93d4776df0 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/unit.py +++ b/src/ifcopenshell-python/ifcopenshell/util/unit.py @@ -16,14 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from collections.abc import Generator from fractions import Fraction from math import pi from typing import Literal, Optional, Union -from collections.abc import Generator import ifcopenshell -import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper import ifcopenshell.api.unit +import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper prefixes = { "EXA": 1e18, @@ -869,10 +869,10 @@ def iter_element_and_attributes_per_type(ifc_file: ifcopenshell.file, attr_type_ def convert_file_length_units(ifc_file: ifcopenshell.file, target_units: str = "METER") -> ifcopenshell.file: """Converts all units in an IFC file to the specified target units. Returns a new file.""" - import ifcopenshell.util.element - import ifcopenshell.util.geolocation import ifcopenshell.api.georeference import ifcopenshell.api.unit + import ifcopenshell.util.element + import ifcopenshell.util.geolocation prefix = get_prefix(target_units) si_unit = get_unit_name(target_units) diff --git a/src/ifcopenshell-python/ifcopenshell/validate.py b/src/ifcopenshell-python/ifcopenshell/validate.py index 526d1a1db7..13f148d520 100644 --- a/src/ifcopenshell-python/ifcopenshell/validate.py +++ b/src/ifcopenshell-python/ifcopenshell/validate.py @@ -44,23 +44,23 @@ Can be used to run validation on IFC file from the command line: """ from __future__ import annotations + +import argparse +import functools +import json import os import sys -import json -import functools import types -import argparse - from collections import namedtuple -from typing import Union, Any, Optional, TYPE_CHECKING from collections.abc import Iterator -from logging import Logger, Handler +from logging import Handler, Logger from types import EllipsisType +from typing import TYPE_CHECKING, Any, Optional, Union import ifcopenshell +import ifcopenshell.express.rule_executor import ifcopenshell.ifcopenshell_wrapper import ifcopenshell.ifcopenshell_wrapper as W -import ifcopenshell.express.rule_executor if TYPE_CHECKING: import ifcopenshell.simple_spf @@ -311,8 +311,8 @@ def assert_valid( def log_internal_cpp_errors( f: Optional[ifcopenshell.file], filename: str, logger: Union[Logger, json_logger], log_content: Optional[str] = None ) -> None: - import re import bisect + import re chr_offset_re = re.compile(r"at offset (\d+)\s*") for_instance_re = re.compile(r"\s*for instance #(\d+)\s*") @@ -775,8 +775,8 @@ class LogDetectionHandler(Handler): if __name__ == "__main__": - import sys import logging + import sys def handle_exception(exc_type, exc_value, exc_traceback): import traceback diff --git a/src/ifcopenshell-python/test/api/aggregate/test_assign_object.py b/src/ifcopenshell-python/test/api/aggregate/test_assign_object.py index f00ff6c1d0..e8b41e8dbb 100644 --- a/src/ifcopenshell-python/test/api/aggregate/test_assign_object.py +++ b/src/ifcopenshell-python/test/api/aggregate/test_assign_object.py @@ -18,14 +18,15 @@ import numpy import pytest -import test.bootstrap -import ifcopenshell.api.root -import ifcopenshell.api.unit -import ifcopenshell.api.spatial -import ifcopenshell.api.geometry + import ifcopenshell.api.aggregate +import ifcopenshell.api.geometry +import ifcopenshell.api.root +import ifcopenshell.api.spatial +import ifcopenshell.api.unit import ifcopenshell.util.element import ifcopenshell.util.placement +import test.bootstrap class TestAssignObject(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/aggregate/test_unassign_object.py b/src/ifcopenshell-python/test/api/aggregate/test_unassign_object.py index 722cccdb93..3d8e25134d 100644 --- a/src/ifcopenshell-python/test/api/aggregate/test_unassign_object.py +++ b/src/ifcopenshell-python/test/api/aggregate/test_unassign_object.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.aggregate +import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestUnassignObject(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/alignment/test_add_segment_to_layout.py b/src/ifcopenshell-python/test/api/alignment/test_add_segment_to_layout.py index bea6f8989a..9c6503516a 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_add_segment_to_layout.py +++ b/src/ifcopenshell-python/test/api/alignment/test_add_segment_to_layout.py @@ -17,10 +17,10 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit - from ifcopenshell.api.alignment._add_segment_to_layout import _add_segment_to_layout diff --git a/src/ifcopenshell-python/test/api/alignment/test_add_stationing_to_alignment.py b/src/ifcopenshell-python/test/api/alignment/test_add_stationing_to_alignment.py index 49cbd70367..52786cb28c 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_add_stationing_to_alignment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_add_stationing_to_alignment.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_add_vertical_alignment.py b/src/ifcopenshell-python/test/api/alignment/test_add_vertical_alignment.py index 243188866c..50298717b3 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_add_vertical_alignment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_add_vertical_alignment.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_create.py b/src/ifcopenshell-python/test/api/alignment/test_create.py index 355c2d1ae5..e9fb2d00f3 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py b/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py index 25b2656611..90321574bd 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util -import ifcopenshell.util.unit -import pytest import math + +import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.unit +import ifcopenshell.util +import ifcopenshell.util.unit def test_create_as_offset_curve(): diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_as_polyline.py b/src/ifcopenshell-python/test/api/alignment/test_create_as_polyline.py index dac7d3156b..8724de5e95 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_as_polyline.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_as_polyline.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_by_pi_method.py b/src/ifcopenshell-python/test/api/alignment/test_create_by_pi_method.py index bd3a25faed..17a7d9b558 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_by_pi_method.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_by_pi_method.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py b/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py index 6713f0f78a..87d1ca563f 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import math + import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit -import math def _test_horizontal() -> ifcopenshell.file: diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_no_geometry.py b/src/ifcopenshell-python/test/api/alignment/test_create_no_geometry.py index 15b64af2f9..a8f7c3ac06 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_no_geometry.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_no_geometry.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_distance_along_from_station.py b/src/ifcopenshell-python/test/api/alignment/test_distance_along_from_station.py index d5c8518259..a5af19ebe3 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_distance_along_from_station.py +++ b/src/ifcopenshell-python/test/api/alignment/test_distance_along_from_station.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_get_alignment.py b/src/ifcopenshell-python/test/api/alignment/test_get_alignment.py index b1d5ac720e..a7821ce213 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_get_alignment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_get_alignment.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_horizontal_layout_by_pi_method.py b/src/ifcopenshell-python/test/api/alignment/test_horizontal_layout_by_pi_method.py index a4678f7e0e..75d46ba173 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_horizontal_layout_by_pi_method.py +++ b/src/ifcopenshell-python/test/api/alignment/test_horizontal_layout_by_pi_method.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_map_alignment_cant_segment.py b/src/ifcopenshell-python/test/api/alignment/test_map_alignment_cant_segment.py index 021314547c..2f529fb08a 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_map_alignment_cant_segment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_map_alignment_cant_segment.py @@ -17,9 +17,12 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context -from ifcopenshell.api.alignment._map_alignment_cant_segment import _map_alignment_cant_segment +from ifcopenshell.api.alignment._map_alignment_cant_segment import ( + _map_alignment_cant_segment, +) def _BlossCurve_100_0_300_1000_1_Meter(file): diff --git a/src/ifcopenshell-python/test/api/alignment/test_map_alignment_horizontal_segment.py b/src/ifcopenshell-python/test/api/alignment/test_map_alignment_horizontal_segment.py index c9bdfc0432..191f56a279 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_map_alignment_horizontal_segment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_map_alignment_horizontal_segment.py @@ -20,9 +20,12 @@ # for horizontal alignment. import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.unit -from ifcopenshell.api.alignment._map_alignment_horizontal_segment import _map_alignment_horizontal_segment +from ifcopenshell.api.alignment._map_alignment_horizontal_segment import ( + _map_alignment_horizontal_segment, +) def _BlossCurve_100_0_300_1000_1_Meter(file): diff --git a/src/ifcopenshell-python/test/api/alignment/test_map_alignment_vertical_segment.py b/src/ifcopenshell-python/test/api/alignment/test_map_alignment_vertical_segment.py index 2d5f6a6133..fc88aed036 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_map_alignment_vertical_segment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_map_alignment_vertical_segment.py @@ -20,8 +20,11 @@ # for vertical alignment. import pytest + import ifcopenshell.api.alignment -from ifcopenshell.api.alignment._map_alignment_vertical_segment import _map_alignment_vertical_segment +from ifcopenshell.api.alignment._map_alignment_vertical_segment import ( + _map_alignment_vertical_segment, +) def _CircularArc_100_0_10_0_0_0_0_5_1_Meter(file): diff --git a/src/ifcopenshell-python/test/api/alignment/test_name_segments.py b/src/ifcopenshell-python/test/api/alignment/test_name_segments.py index 5a1174573b..20ed746ab0 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_name_segments.py +++ b/src/ifcopenshell-python/test/api/alignment/test_name_segments.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_referent_names.py b/src/ifcopenshell-python/test/api/alignment/test_referent_names.py index 2e0e50a683..d18ecf16c3 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_referent_names.py +++ b/src/ifcopenshell-python/test/api/alignment/test_referent_names.py @@ -18,6 +18,7 @@ import pytest from pytest import fixture + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_update_curve_segment_transition_code.py b/src/ifcopenshell-python/test/api/alignment/test_update_curve_segment_transition_code.py index 2b6accf037..30803b5a59 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_update_curve_segment_transition_code.py +++ b/src/ifcopenshell-python/test/api/alignment/test_update_curve_segment_transition_code.py @@ -17,9 +17,12 @@ # along with IfcOpenShell. If not, see . import pytest -from ifcopenshell.api.alignment._update_curve_segment_transition_code import _update_curve_segment_transition_code + import ifcopenshell.api.context import ifcopenshell.api.unit +from ifcopenshell.api.alignment._update_curve_segment_transition_code import ( + _update_curve_segment_transition_code, +) def _test1(): diff --git a/src/ifcopenshell-python/test/api/alignment/test_update_fallback_position.py b/src/ifcopenshell-python/test/api/alignment/test_update_fallback_position.py index 2982cb466b..a53c162ea9 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_update_fallback_position.py +++ b/src/ifcopenshell-python/test/api/alignment/test_update_fallback_position.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_vertical_layout_by_pi_method.py b/src/ifcopenshell-python/test/api/alignment/test_vertical_layout_by_pi_method.py index 8dab67c181..b34e22c741 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_vertical_layout_by_pi_method.py +++ b/src/ifcopenshell-python/test/api/alignment/test_vertical_layout_by_pi_method.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/boundary/test_copy_boundary.py b/src/ifcopenshell-python/test/api/boundary/test_copy_boundary.py index 30adbf74c4..675f187c09 100644 --- a/src/ifcopenshell-python/test/api/boundary/test_copy_boundary.py +++ b/src/ifcopenshell-python/test/api/boundary/test_copy_boundary.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.boundary +import ifcopenshell.api.root +import test.bootstrap class TestCopyBoundary(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/boundary/test_remove_boundary.py b/src/ifcopenshell-python/test/api/boundary/test_remove_boundary.py index 7dea36b2bc..91227b66a4 100644 --- a/src/ifcopenshell-python/test/api/boundary/test_remove_boundary.py +++ b/src/ifcopenshell-python/test/api/boundary/test_remove_boundary.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.boundary +import ifcopenshell.api.root +import test.bootstrap class TestRemoveBoundary(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/classification/test_add_classification.py b/src/ifcopenshell-python/test/api/classification/test_add_classification.py index 12442255fe..f97d32d881 100644 --- a/src/ifcopenshell-python/test/api/classification/test_add_classification.py +++ b/src/ifcopenshell-python/test/api/classification/test_add_classification.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.classification +import ifcopenshell.api.root +import test.bootstrap class TestAddClassification(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/classification/test_add_reference.py b/src/ifcopenshell-python/test/api/classification/test_add_reference.py index caf6f5d8af..7aad6996f1 100644 --- a/src/ifcopenshell-python/test/api/classification/test_add_reference.py +++ b/src/ifcopenshell-python/test/api/classification/test_add_reference.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap -import ifcopenshell.api.root + import ifcopenshell.api.classification +import ifcopenshell.api.root import ifcopenshell.util.classification +import test.bootstrap class TestAddReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/classification/test_remove_classification.py b/src/ifcopenshell-python/test/api/classification/test_remove_classification.py index 15a8b414cb..54d3b8418b 100644 --- a/src/ifcopenshell-python/test/api/classification/test_remove_classification.py +++ b/src/ifcopenshell-python/test/api/classification/test_remove_classification.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.classification +import ifcopenshell.api.root +import test.bootstrap class TestRemoveClassification(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/classification/test_remove_reference.py b/src/ifcopenshell-python/test/api/classification/test_remove_reference.py index 6812805594..9bcede5db3 100644 --- a/src/ifcopenshell-python/test/api/classification/test_remove_reference.py +++ b/src/ifcopenshell-python/test/api/classification/test_remove_reference.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap -import ifcopenshell.api.root + import ifcopenshell.api.classification +import ifcopenshell.api.root import ifcopenshell.util.classification +import test.bootstrap class TestRemoveReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/cogo/test_add_survey_point.py b/src/ifcopenshell-python/test/api/cogo/test_add_survey_point.py index 068fef52a8..73d3c69105 100644 --- a/src/ifcopenshell-python/test/api/cogo/test_add_survey_point.py +++ b/src/ifcopenshell-python/test/api/cogo/test_add_survey_point.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.aggregate import ifcopenshell.api.alignment -import ifcopenshell.api.context import ifcopenshell.api.cogo +import ifcopenshell.api.context def test_add_survey_point(): diff --git a/src/ifcopenshell-python/test/api/cogo/test_assign_survey_point.py b/src/ifcopenshell-python/test/api/cogo/test_assign_survey_point.py index 39e7823af9..e19639166f 100644 --- a/src/ifcopenshell-python/test/api/cogo/test_assign_survey_point.py +++ b/src/ifcopenshell-python/test/api/cogo/test_assign_survey_point.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.aggregate import ifcopenshell.api.alignment -import ifcopenshell.api.context import ifcopenshell.api.cogo +import ifcopenshell.api.context def test_assign_survey_point(): diff --git a/src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py b/src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py index 657c0a65a8..433a981ac7 100644 --- a/src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py +++ b/src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest -import ifcopenshell.api.cogo import math +import pytest + +import ifcopenshell.api.cogo + def test_bearing2dd(): assert 44.743888875 == pytest.approx(ifcopenshell.api.cogo.bearing2dd("N 45 15 22.5 E")) diff --git a/src/ifcopenshell-python/test/api/cogo/test_edit_survey_point.py b/src/ifcopenshell-python/test/api/cogo/test_edit_survey_point.py index 17038f533b..6b714b7342 100644 --- a/src/ifcopenshell-python/test/api/cogo/test_edit_survey_point.py +++ b/src/ifcopenshell-python/test/api/cogo/test_edit_survey_point.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.api.aggregate import ifcopenshell.api.alignment -import ifcopenshell.api.context import ifcopenshell.api.cogo +import ifcopenshell.api.context def test_edit_survey_point(): diff --git a/src/ifcopenshell-python/test/api/constraint/test_assign_constraint.py b/src/ifcopenshell-python/test/api/constraint/test_assign_constraint.py index 41d594098e..f83c00be19 100644 --- a/src/ifcopenshell-python/test/api/constraint/test_assign_constraint.py +++ b/src/ifcopenshell-python/test/api/constraint/test_assign_constraint.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.constraint +import ifcopenshell.api.root import ifcopenshell.util.constraint +import test.bootstrap class TestAssignConstraint(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/constraint/test_unassign_constraint.py b/src/ifcopenshell-python/test/api/constraint/test_unassign_constraint.py index bf311f2870..245ae07e91 100644 --- a/src/ifcopenshell-python/test/api/constraint/test_unassign_constraint.py +++ b/src/ifcopenshell-python/test/api/constraint/test_unassign_constraint.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.constraint +import ifcopenshell.api.root import ifcopenshell.util.constraint +import test.bootstrap class TestUnassignConstraint(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/context/test_add_context.py b/src/ifcopenshell-python/test/api/context/test_add_context.py index 1ae3183697..4e24fe623a 100644 --- a/src/ifcopenshell-python/test/api/context/test_add_context.py +++ b/src/ifcopenshell-python/test/api/context/test_add_context.py @@ -16,8 +16,8 @@ # 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.context +import test.bootstrap class TestAddContext(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/context/test_edit_context.py b/src/ifcopenshell-python/test/api/context/test_edit_context.py index f138b649e1..eead4d1971 100644 --- a/src/ifcopenshell-python/test/api/context/test_edit_context.py +++ b/src/ifcopenshell-python/test/api/context/test_edit_context.py @@ -16,8 +16,8 @@ # 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.context +import test.bootstrap class TestEditContext(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/context/test_remove_context.py b/src/ifcopenshell-python/test/api/context/test_remove_context.py index dbc4185b6c..1dd3e255b4 100644 --- a/src/ifcopenshell-python/test/api/context/test_remove_context.py +++ b/src/ifcopenshell-python/test/api/context/test_remove_context.py @@ -16,10 +16,10 @@ # 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.context import ifcopenshell.api.geometry import ifcopenshell.api.root +import test.bootstrap class TestRemoveContext(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/control/test_assign_control.py b/src/ifcopenshell-python/test/api/control/test_assign_control.py index 75c6c0e8d3..a84b8d3ed7 100644 --- a/src/ifcopenshell-python/test/api/control/test_assign_control.py +++ b/src/ifcopenshell-python/test/api/control/test_assign_control.py @@ -16,9 +16,9 @@ # 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.cost import ifcopenshell.api.control +import ifcopenshell.api.cost +import test.bootstrap class TestAssignControl(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/control/test_unassign_control.py b/src/ifcopenshell-python/test/api/control/test_unassign_control.py index ecaebdae32..e413847f76 100644 --- a/src/ifcopenshell-python/test/api/control/test_unassign_control.py +++ b/src/ifcopenshell-python/test/api/control/test_unassign_control.py @@ -16,9 +16,9 @@ # 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.cost import ifcopenshell.api.control +import ifcopenshell.api.cost +import test.bootstrap class TestUnassignControl(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/cost/test_add_cost_item.py b/src/ifcopenshell-python/test/api/cost/test_add_cost_item.py index c2a3762e78..b473bdc86c 100644 --- a/src/ifcopenshell-python/test/api/cost/test_add_cost_item.py +++ b/src/ifcopenshell-python/test/api/cost/test_add_cost_item.py @@ -16,9 +16,9 @@ # 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.cost import ifcopenshell.util.element +import test.bootstrap class TestAddCostItem(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/cost/test_add_cost_item_quantity.py b/src/ifcopenshell-python/test/api/cost/test_add_cost_item_quantity.py index e5ffe38ce0..7680e9e376 100644 --- a/src/ifcopenshell-python/test/api/cost/test_add_cost_item_quantity.py +++ b/src/ifcopenshell-python/test/api/cost/test_add_cost_item_quantity.py @@ -16,10 +16,10 @@ # 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.control import ifcopenshell.api.cost import ifcopenshell.api.root -import ifcopenshell.api.control +import test.bootstrap class TestAddCostItemQuantity(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/cost/test_add_cost_schedule.py b/src/ifcopenshell-python/test/api/cost/test_add_cost_schedule.py index 019bc2b6b4..af138af60a 100644 --- a/src/ifcopenshell-python/test/api/cost/test_add_cost_schedule.py +++ b/src/ifcopenshell-python/test/api/cost/test_add_cost_schedule.py @@ -16,8 +16,8 @@ # 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.cost +import test.bootstrap class TestAddCostSchedule(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/cost/test_remove_cost_item.py b/src/ifcopenshell-python/test/api/cost/test_remove_cost_item.py index a987063769..1bcd60eae9 100644 --- a/src/ifcopenshell-python/test/api/cost/test_remove_cost_item.py +++ b/src/ifcopenshell-python/test/api/cost/test_remove_cost_item.py @@ -16,8 +16,8 @@ # 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.cost +import test.bootstrap class TestRemoveCostItem(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/cost/test_remove_cost_schedule.py b/src/ifcopenshell-python/test/api/cost/test_remove_cost_schedule.py index 309f4b0906..5acadb9673 100644 --- a/src/ifcopenshell-python/test/api/cost/test_remove_cost_schedule.py +++ b/src/ifcopenshell-python/test/api/cost/test_remove_cost_schedule.py @@ -16,9 +16,9 @@ # 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 ifcopenshell.api.cost +import test.bootstrap class TestRemoveCostSchedule(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/document/test_add_information.py b/src/ifcopenshell-python/test/api/document/test_add_information.py index 8dc687652b..ea4846c9a5 100644 --- a/src/ifcopenshell-python/test/api/document/test_add_information.py +++ b/src/ifcopenshell-python/test/api/document/test_add_information.py @@ -16,8 +16,8 @@ # 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.document +import test.bootstrap class TestAddInformation(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/document/test_add_reference.py b/src/ifcopenshell-python/test/api/document/test_add_reference.py index a0420a6d15..dbfbfb474b 100644 --- a/src/ifcopenshell-python/test/api/document/test_add_reference.py +++ b/src/ifcopenshell-python/test/api/document/test_add_reference.py @@ -16,8 +16,8 @@ # 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.document +import test.bootstrap class TestAddReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/document/test_assign_document.py b/src/ifcopenshell-python/test/api/document/test_assign_document.py index 2a3051fe4b..336e640a67 100644 --- a/src/ifcopenshell-python/test/api/document/test_assign_document.py +++ b/src/ifcopenshell-python/test/api/document/test_assign_document.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.document +import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestAssignDocument(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/document/test_remove_information.py b/src/ifcopenshell-python/test/api/document/test_remove_information.py index 69e87faece..cee5357fd7 100644 --- a/src/ifcopenshell-python/test/api/document/test_remove_information.py +++ b/src/ifcopenshell-python/test/api/document/test_remove_information.py @@ -16,8 +16,8 @@ # 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.document +import test.bootstrap class TestRemoveInformation(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/document/test_remove_reference.py b/src/ifcopenshell-python/test/api/document/test_remove_reference.py index dd5fde6602..56a6971a76 100644 --- a/src/ifcopenshell-python/test/api/document/test_remove_reference.py +++ b/src/ifcopenshell-python/test/api/document/test_remove_reference.py @@ -16,8 +16,8 @@ # 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.document +import test.bootstrap class TestRemoveReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/document/test_unassign_document.py b/src/ifcopenshell-python/test/api/document/test_unassign_document.py index a5671a2b89..167143a949 100644 --- a/src/ifcopenshell-python/test/api/document/test_unassign_document.py +++ b/src/ifcopenshell-python/test/api/document/test_unassign_document.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.document +import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestUnassignDocument(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/drawing/test_assign_product.py b/src/ifcopenshell-python/test/api/drawing/test_assign_product.py index c2464203c0..925afc7073 100644 --- a/src/ifcopenshell-python/test/api/drawing/test_assign_product.py +++ b/src/ifcopenshell-python/test/api/drawing/test_assign_product.py @@ -16,8 +16,8 @@ # 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.drawing +import test.bootstrap class TestAssignProduct(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/drawing/test_edit_text_literal.py b/src/ifcopenshell-python/test/api/drawing/test_edit_text_literal.py index 410c11ce7a..dcc7ba3dd5 100644 --- a/src/ifcopenshell-python/test/api/drawing/test_edit_text_literal.py +++ b/src/ifcopenshell-python/test/api/drawing/test_edit_text_literal.py @@ -16,8 +16,8 @@ # 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.drawing +import test.bootstrap class TestEditTextLiteral(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/drawing/test_unassign_product.py b/src/ifcopenshell-python/test/api/drawing/test_unassign_product.py index f80a9b2ecc..381b9c01e7 100644 --- a/src/ifcopenshell-python/test/api/drawing/test_unassign_product.py +++ b/src/ifcopenshell-python/test/api/drawing/test_unassign_product.py @@ -16,8 +16,8 @@ # 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.drawing +import test.bootstrap class TestUnassignProduct(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/feature/test_add_feature.py b/src/ifcopenshell-python/test/api/feature/test_add_feature.py index 7ac05f6ecf..eb4f0e3565 100644 --- a/src/ifcopenshell-python/test/api/feature/test_add_feature.py +++ b/src/ifcopenshell-python/test/api/feature/test_add_feature.py @@ -17,12 +17,13 @@ # along with IfcOpenShell. If not, see . import numpy -import test.bootstrap + import ifcopenshell.api.feature +import ifcopenshell.api.geometry import ifcopenshell.api.root import ifcopenshell.api.unit -import ifcopenshell.api.geometry import ifcopenshell.util.placement +import test.bootstrap class TestAddFeature(test.bootstrap.IFC4X3): diff --git a/src/ifcopenshell-python/test/api/feature/test_add_filling.py b/src/ifcopenshell-python/test/api/feature/test_add_filling.py index 49259d75ab..c968215187 100644 --- a/src/ifcopenshell-python/test/api/feature/test_add_filling.py +++ b/src/ifcopenshell-python/test/api/feature/test_add_filling.py @@ -16,9 +16,9 @@ # 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.feature import ifcopenshell.api.root +import test.bootstrap class TestAddFilling(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/feature/test_remove_feature.py b/src/ifcopenshell-python/test/api/feature/test_remove_feature.py index 5275639525..74065267da 100644 --- a/src/ifcopenshell-python/test/api/feature/test_remove_feature.py +++ b/src/ifcopenshell-python/test/api/feature/test_remove_feature.py @@ -16,9 +16,9 @@ # 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.feature import ifcopenshell.api.root +import test.bootstrap class TestRemoveFeature(test.bootstrap.IFC4): 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 80673275f8..d507f89308 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py +++ b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.context import ifcopenshell.api.geometry +import ifcopenshell.api.root import ifcopenshell.util.shape_builder +import test.bootstrap class TestAddBoolean(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_add_profile_representation.py b/src/ifcopenshell-python/test/api/geometry/test_add_profile_representation.py index 39ac9aa928..e0c500a8cf 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_add_profile_representation.py +++ b/src/ifcopenshell-python/test/api/geometry/test_add_profile_representation.py @@ -16,11 +16,11 @@ # 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.unit -import ifcopenshell.api.root import ifcopenshell.api.context import ifcopenshell.api.geometry +import ifcopenshell.api.root +import ifcopenshell.api.unit +import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcopenshell-python/test/api/geometry/test_add_shape_aspect.py b/src/ifcopenshell-python/test/api/geometry/test_add_shape_aspect.py index c827f1e33a..b0e9b63f48 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_add_shape_aspect.py +++ b/src/ifcopenshell-python/test/api/geometry/test_add_shape_aspect.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.context import ifcopenshell.api.geometry +import ifcopenshell.api.root import ifcopenshell.util.shape_builder +import test.bootstrap class TestAddShapeAspect(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_assign_representation.py b/src/ifcopenshell-python/test/api/geometry/test_assign_representation.py index c971219157..ec02c7bc27 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_assign_representation.py +++ b/src/ifcopenshell-python/test/api/geometry/test_assign_representation.py @@ -16,12 +16,12 @@ # 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 ifcopenshell.api.material -import ifcopenshell.api.type -import ifcopenshell.api.root import ifcopenshell.api.geometry +import ifcopenshell.api.material +import ifcopenshell.api.root +import ifcopenshell.api.type +import test.bootstrap class TestAssignRepresentation(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_connect_element.py b/src/ifcopenshell-python/test/api/geometry/test_connect_element.py index 240976463b..9902b7b4df 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_connect_element.py +++ b/src/ifcopenshell-python/test/api/geometry/test_connect_element.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.geometry +import ifcopenshell.api.root +import test.bootstrap class TestConnectElement(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_connect_path.py b/src/ifcopenshell-python/test/api/geometry/test_connect_path.py index 634eb1b45e..bda341d2c6 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_connect_path.py +++ b/src/ifcopenshell-python/test/api/geometry/test_connect_path.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.geometry +import ifcopenshell.api.root +import test.bootstrap class TestConnectPath(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_disconnect_element.py b/src/ifcopenshell-python/test/api/geometry/test_disconnect_element.py index 4bf8dfbbc8..9fab39cc01 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_disconnect_element.py +++ b/src/ifcopenshell-python/test/api/geometry/test_disconnect_element.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.geometry +import ifcopenshell.api.root +import test.bootstrap class TestDisconnectElement(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_disconnect_path.py b/src/ifcopenshell-python/test/api/geometry/test_disconnect_path.py index fdb0c013d8..5a58a8693b 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_disconnect_path.py +++ b/src/ifcopenshell-python/test/api/geometry/test_disconnect_path.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.geometry +import ifcopenshell.api.root +import test.bootstrap class TestDisconnectPath(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_edit_object_placement.py b/src/ifcopenshell-python/test/api/geometry/test_edit_object_placement.py index 70dcbf7285..d243d4b738 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_edit_object_placement.py +++ b/src/ifcopenshell-python/test/api/geometry/test_edit_object_placement.py @@ -18,16 +18,17 @@ import numpy import pytest -import test.bootstrap -import ifcopenshell.api.feature -import ifcopenshell.api.root -import ifcopenshell.api.unit -import ifcopenshell.api.system -import ifcopenshell.api.spatial -import ifcopenshell.api.geometry + import ifcopenshell.api.aggregate +import ifcopenshell.api.feature +import ifcopenshell.api.geometry +import ifcopenshell.api.root +import ifcopenshell.api.spatial +import ifcopenshell.api.system +import ifcopenshell.api.unit import ifcopenshell.guid import ifcopenshell.util.placement +import test.bootstrap class TestEditObjectPlacement(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_remove_boolean.py b/src/ifcopenshell-python/test/api/geometry/test_remove_boolean.py index 5330d097cc..aeb7728ea6 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_remove_boolean.py +++ b/src/ifcopenshell-python/test/api/geometry/test_remove_boolean.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.context import ifcopenshell.api.geometry +import ifcopenshell.api.root import ifcopenshell.util.shape_builder +import test.bootstrap class TestRemoveBoolean(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_remove_representation.py b/src/ifcopenshell-python/test/api/geometry/test_remove_representation.py index 4363cc8ac8..1c37f8960a 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_remove_representation.py +++ b/src/ifcopenshell-python/test/api/geometry/test_remove_representation.py @@ -16,8 +16,8 @@ # 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.geometry +import test.bootstrap class TestRemoveRepresentation(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_unassign_representation.py b/src/ifcopenshell-python/test/api/geometry/test_unassign_representation.py index 1e45054369..55fbcaefe9 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_unassign_representation.py +++ b/src/ifcopenshell-python/test/api/geometry/test_unassign_representation.py @@ -16,9 +16,9 @@ # 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.geometry import ifcopenshell.util.placement +import test.bootstrap class TestUnassignRepresentation(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/geometry/test_validate_type.py b/src/ifcopenshell-python/test/api/geometry/test_validate_type.py index 189f9619a9..7f4a57e995 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_validate_type.py +++ b/src/ifcopenshell-python/test/api/geometry/test_validate_type.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.context import ifcopenshell.api.geometry +import ifcopenshell.api.root import ifcopenshell.util.shape_builder +import test.bootstrap class TestValidateType(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/georeference/test_add_georeferencing.py b/src/ifcopenshell-python/test/api/georeference/test_add_georeferencing.py index 121af8f5a1..68f1ac2597 100644 --- a/src/ifcopenshell-python/test/api/georeference/test_add_georeferencing.py +++ b/src/ifcopenshell-python/test/api/georeference/test_add_georeferencing.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.context import ifcopenshell.api.georeference +import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestAddGeoreferencing(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/georeference/test_edit_georeferencing.py b/src/ifcopenshell-python/test/api/georeference/test_edit_georeferencing.py index 862983fdc5..729eb0559b 100644 --- a/src/ifcopenshell-python/test/api/georeference/test_edit_georeferencing.py +++ b/src/ifcopenshell-python/test/api/georeference/test_edit_georeferencing.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.context import ifcopenshell.api.georeference +import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestEditGeoreferencing(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/georeference/test_edit_true_north.py b/src/ifcopenshell-python/test/api/georeference/test_edit_true_north.py index 9f8f2dd07a..dc8ea2bc3e 100644 --- a/src/ifcopenshell-python/test/api/georeference/test_edit_true_north.py +++ b/src/ifcopenshell-python/test/api/georeference/test_edit_true_north.py @@ -17,11 +17,12 @@ # along with IfcOpenShell. If not, see . import numpy as np -import test.bootstrap -import ifcopenshell.api.root + import ifcopenshell.api.context import ifcopenshell.api.georeference +import ifcopenshell.api.root import ifcopenshell.util.geolocation +import test.bootstrap class TestEditTrueNorth(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/georeference/test_edit_wcs.py b/src/ifcopenshell-python/test/api/georeference/test_edit_wcs.py index f23ce928ce..9e761e81bb 100644 --- a/src/ifcopenshell-python/test/api/georeference/test_edit_wcs.py +++ b/src/ifcopenshell-python/test/api/georeference/test_edit_wcs.py @@ -17,11 +17,12 @@ # along with IfcOpenShell. If not, see . import numpy as np -import test.bootstrap -import ifcopenshell.api.root + import ifcopenshell.api.context import ifcopenshell.api.georeference +import ifcopenshell.api.root import ifcopenshell.util.geolocation +import test.bootstrap class TestEditWCS(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/georeference/test_remove_georeferencing.py b/src/ifcopenshell-python/test/api/georeference/test_remove_georeferencing.py index 5befb17b99..13bca27c5d 100644 --- a/src/ifcopenshell-python/test/api/georeference/test_remove_georeferencing.py +++ b/src/ifcopenshell-python/test/api/georeference/test_remove_georeferencing.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.context import ifcopenshell.api.georeference +import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestRemoveGeoreferencing(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/grid/test_create_grid_axis.py b/src/ifcopenshell-python/test/api/grid/test_create_grid_axis.py index 518f6308d2..24ca32f9ef 100644 --- a/src/ifcopenshell-python/test/api/grid/test_create_grid_axis.py +++ b/src/ifcopenshell-python/test/api/grid/test_create_grid_axis.py @@ -16,8 +16,8 @@ # 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.grid +import test.bootstrap class TestCreateGridAxis(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/group/test_add_group.py b/src/ifcopenshell-python/test/api/group/test_add_group.py index 0c8af993ab..0c3547ce49 100644 --- a/src/ifcopenshell-python/test/api/group/test_add_group.py +++ b/src/ifcopenshell-python/test/api/group/test_add_group.py @@ -16,9 +16,9 @@ # 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.group import ifcopenshell.util.element +import test.bootstrap class TestAddGroup(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/group/test_assign_group.py b/src/ifcopenshell-python/test/api/group/test_assign_group.py index 85b2711e27..959883db3b 100644 --- a/src/ifcopenshell-python/test/api/group/test_assign_group.py +++ b/src/ifcopenshell-python/test/api/group/test_assign_group.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.group +import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestAssignGroup(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/group/test_remove_group.py b/src/ifcopenshell-python/test/api/group/test_remove_group.py index 28e59493c5..efe7cd25d3 100644 --- a/src/ifcopenshell-python/test/api/group/test_remove_group.py +++ b/src/ifcopenshell-python/test/api/group/test_remove_group.py @@ -16,10 +16,10 @@ # 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.group import ifcopenshell.api.pset import ifcopenshell.api.root -import ifcopenshell.api.group +import test.bootstrap class TestRemoveGroup(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/group/test_unassign_group.py b/src/ifcopenshell-python/test/api/group/test_unassign_group.py index c40b4affcb..f909e428f7 100644 --- a/src/ifcopenshell-python/test/api/group/test_unassign_group.py +++ b/src/ifcopenshell-python/test/api/group/test_unassign_group.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.group +import ifcopenshell.api.root +import test.bootstrap class TestAssignGroup(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/group/test_update_group_products.py b/src/ifcopenshell-python/test/api/group/test_update_group_products.py index 56d685de9a..c8e50f7d0e 100644 --- a/src/ifcopenshell-python/test/api/group/test_update_group_products.py +++ b/src/ifcopenshell-python/test/api/group/test_update_group_products.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.group +import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestUpdateGroupProductsIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/layer/test_add_layer.py b/src/ifcopenshell-python/test/api/layer/test_add_layer.py index 97635ccb63..aa54065048 100644 --- a/src/ifcopenshell-python/test/api/layer/test_add_layer.py +++ b/src/ifcopenshell-python/test/api/layer/test_add_layer.py @@ -16,8 +16,8 @@ # 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.layer +import test.bootstrap class TestAddLayer(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/layer/test_add_layer_with_style.py b/src/ifcopenshell-python/test/api/layer/test_add_layer_with_style.py index 0395e40178..8d52258727 100644 --- a/src/ifcopenshell-python/test/api/layer/test_add_layer_with_style.py +++ b/src/ifcopenshell-python/test/api/layer/test_add_layer_with_style.py @@ -16,8 +16,8 @@ # 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.layer +import test.bootstrap class TestAddLayerWithStyle(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/layer/test_assign_layer.py b/src/ifcopenshell-python/test/api/layer/test_assign_layer.py index f2b0e831d9..9c174975ca 100644 --- a/src/ifcopenshell-python/test/api/layer/test_assign_layer.py +++ b/src/ifcopenshell-python/test/api/layer/test_assign_layer.py @@ -16,8 +16,8 @@ # 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.layer +import test.bootstrap class TestAssignLayer(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/layer/test_unassign_layer.py b/src/ifcopenshell-python/test/api/layer/test_unassign_layer.py index 018c9125f5..8d14f6ad94 100644 --- a/src/ifcopenshell-python/test/api/layer/test_unassign_layer.py +++ b/src/ifcopenshell-python/test/api/layer/test_unassign_layer.py @@ -16,8 +16,8 @@ # 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.layer +import test.bootstrap class TestUnassignLayer(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/library/test_add_library.py b/src/ifcopenshell-python/test/api/library/test_add_library.py index e2cd440028..36b63b70f6 100644 --- a/src/ifcopenshell-python/test/api/library/test_add_library.py +++ b/src/ifcopenshell-python/test/api/library/test_add_library.py @@ -16,8 +16,8 @@ # 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.library +import test.bootstrap class TestAddLibrary(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/library/test_add_reference.py b/src/ifcopenshell-python/test/api/library/test_add_reference.py index 95f23d495f..596d878b67 100644 --- a/src/ifcopenshell-python/test/api/library/test_add_reference.py +++ b/src/ifcopenshell-python/test/api/library/test_add_reference.py @@ -16,8 +16,8 @@ # 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.library +import test.bootstrap class TestAddReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/library/test_assign_reference.py b/src/ifcopenshell-python/test/api/library/test_assign_reference.py index 988d4c2265..822687f2db 100644 --- a/src/ifcopenshell-python/test/api/library/test_assign_reference.py +++ b/src/ifcopenshell-python/test/api/library/test_assign_reference.py @@ -16,8 +16,8 @@ # 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.library +import test.bootstrap class TestAssignReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/library/test_edit_library.py b/src/ifcopenshell-python/test/api/library/test_edit_library.py index 26f46d3016..42f4119f99 100644 --- a/src/ifcopenshell-python/test/api/library/test_edit_library.py +++ b/src/ifcopenshell-python/test/api/library/test_edit_library.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import test.bootstrap import datetime + import ifcopenshell.api.library import ifcopenshell.util.date +import test.bootstrap class TestEditLibrary(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/library/test_edit_reference.py b/src/ifcopenshell-python/test/api/library/test_edit_reference.py index b979a56357..6bb638ff5b 100644 --- a/src/ifcopenshell-python/test/api/library/test_edit_reference.py +++ b/src/ifcopenshell-python/test/api/library/test_edit_reference.py @@ -16,8 +16,8 @@ # 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.library +import test.bootstrap class TestEditReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/library/test_remove_library.py b/src/ifcopenshell-python/test/api/library/test_remove_library.py index 7376d4a288..038249f49b 100644 --- a/src/ifcopenshell-python/test/api/library/test_remove_library.py +++ b/src/ifcopenshell-python/test/api/library/test_remove_library.py @@ -16,8 +16,8 @@ # 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.library +import test.bootstrap class TestRemoveLibrary(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/library/test_remove_reference.py b/src/ifcopenshell-python/test/api/library/test_remove_reference.py index f6f6d90588..32b0920188 100644 --- a/src/ifcopenshell-python/test/api/library/test_remove_reference.py +++ b/src/ifcopenshell-python/test/api/library/test_remove_reference.py @@ -16,8 +16,8 @@ # 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.library +import test.bootstrap class TestRemoveReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/library/test_unassign_reference.py b/src/ifcopenshell-python/test/api/library/test_unassign_reference.py index e7e1b9cf63..e1223b91fe 100644 --- a/src/ifcopenshell-python/test/api/library/test_unassign_reference.py +++ b/src/ifcopenshell-python/test/api/library/test_unassign_reference.py @@ -16,9 +16,9 @@ # 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.library import ifcopenshell.util.element +import test.bootstrap class TestUnassignReference(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/material/test_add_material_set.py b/src/ifcopenshell-python/test/api/material/test_add_material_set.py index 758c40b824..10e65cb6d3 100644 --- a/src/ifcopenshell-python/test/api/material/test_add_material_set.py +++ b/src/ifcopenshell-python/test/api/material/test_add_material_set.py @@ -16,8 +16,8 @@ # 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.material +import test.bootstrap class TestAddMaterialSetIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/material/test_assign_material.py b/src/ifcopenshell-python/test/api/material/test_assign_material.py index 2baeedcb50..554bc95b9f 100644 --- a/src/ifcopenshell-python/test/api/material/test_assign_material.py +++ b/src/ifcopenshell-python/test/api/material/test_assign_material.py @@ -16,11 +16,11 @@ # 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.material import ifcopenshell.api.root import ifcopenshell.api.type -import ifcopenshell.api.material import ifcopenshell.util.element +import test.bootstrap class TestAssignMaterialIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/material/test_copy_material.py b/src/ifcopenshell-python/test/api/material/test_copy_material.py index 2faa210e6c..51e36f0eac 100644 --- a/src/ifcopenshell-python/test/api/material/test_copy_material.py +++ b/src/ifcopenshell-python/test/api/material/test_copy_material.py @@ -16,13 +16,13 @@ # 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.context +import ifcopenshell.api.material import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.style -import ifcopenshell.api.context -import ifcopenshell.api.material import ifcopenshell.util.element +import test.bootstrap class TestCopyMaterial(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/material/test_edit_profile_usage.py b/src/ifcopenshell-python/test/api/material/test_edit_profile_usage.py index 3a029482c1..478c41eb55 100644 --- a/src/ifcopenshell-python/test/api/material/test_edit_profile_usage.py +++ b/src/ifcopenshell-python/test/api/material/test_edit_profile_usage.py @@ -16,12 +16,12 @@ # 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.context import ifcopenshell.api.geometry import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.util.placement +import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcopenshell-python/test/api/material/test_remove_material.py b/src/ifcopenshell-python/test/api/material/test_remove_material.py index 01f3621a81..d33f9114dc 100644 --- a/src/ifcopenshell-python/test/api/material/test_remove_material.py +++ b/src/ifcopenshell-python/test/api/material/test_remove_material.py @@ -16,12 +16,12 @@ # 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.context +import ifcopenshell.api.material import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.style -import ifcopenshell.api.context -import ifcopenshell.api.material +import test.bootstrap class TestRemoveMaterialIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/material/test_remove_material_set.py b/src/ifcopenshell-python/test/api/material/test_remove_material_set.py index 3c6c70b44a..24330c3720 100644 --- a/src/ifcopenshell-python/test/api/material/test_remove_material_set.py +++ b/src/ifcopenshell-python/test/api/material/test_remove_material_set.py @@ -16,11 +16,11 @@ # 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.material import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.type +import test.bootstrap class TestRemoveMaterialSetIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/material/test_unassign_material.py b/src/ifcopenshell-python/test/api/material/test_unassign_material.py index 398661c7b0..ba5f29c04a 100644 --- a/src/ifcopenshell-python/test/api/material/test_unassign_material.py +++ b/src/ifcopenshell-python/test/api/material/test_unassign_material.py @@ -16,11 +16,11 @@ # 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.material import ifcopenshell.api.root import ifcopenshell.api.type -import ifcopenshell.api.material import ifcopenshell.util.element +import test.bootstrap class TestUnassignMaterialIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/nest/test_assign_object.py b/src/ifcopenshell-python/test/api/nest/test_assign_object.py index a6abfde611..45c4d828e3 100644 --- a/src/ifcopenshell-python/test/api/nest/test_assign_object.py +++ b/src/ifcopenshell-python/test/api/nest/test_assign_object.py @@ -17,11 +17,12 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.nest import ifcopenshell.api.root import ifcopenshell.util.element import ifcopenshell.util.placement +import test.bootstrap class TestAssignObject(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/nest/test_unassign_object.py b/src/ifcopenshell-python/test/api/nest/test_unassign_object.py index 9f3979b85d..925d15b2db 100644 --- a/src/ifcopenshell-python/test/api/nest/test_unassign_object.py +++ b/src/ifcopenshell-python/test/api/nest/test_unassign_object.py @@ -16,10 +16,10 @@ # 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.nest import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestUnassignObject(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_add_actor.py b/src/ifcopenshell-python/test/api/owner/test_add_actor.py index 2a4bf52cf7..c3a8410ae6 100644 --- a/src/ifcopenshell-python/test/api/owner/test_add_actor.py +++ b/src/ifcopenshell-python/test/api/owner/test_add_actor.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestAddActor(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_add_address.py b/src/ifcopenshell-python/test/api/owner/test_add_address.py index 16dc75f492..ffb3daebf2 100644 --- a/src/ifcopenshell-python/test/api/owner/test_add_address.py +++ b/src/ifcopenshell-python/test/api/owner/test_add_address.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestAddAddress(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_add_application.py b/src/ifcopenshell-python/test/api/owner/test_add_application.py index 77890c19cf..bc70fae55a 100644 --- a/src/ifcopenshell-python/test/api/owner/test_add_application.py +++ b/src/ifcopenshell-python/test/api/owner/test_add_application.py @@ -16,9 +16,9 @@ # 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.owner import ifcopenshell.util.element +import test.bootstrap class TestAddApplication(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_add_organisation.py b/src/ifcopenshell-python/test/api/owner/test_add_organisation.py index 5f20a35129..5080951e57 100644 --- a/src/ifcopenshell-python/test/api/owner/test_add_organisation.py +++ b/src/ifcopenshell-python/test/api/owner/test_add_organisation.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestAddOrganisation(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_add_person.py b/src/ifcopenshell-python/test/api/owner/test_add_person.py index 9f1dc8e776..8d02a45d0a 100644 --- a/src/ifcopenshell-python/test/api/owner/test_add_person.py +++ b/src/ifcopenshell-python/test/api/owner/test_add_person.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestAddPerson(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_add_person_and_organisation.py b/src/ifcopenshell-python/test/api/owner/test_add_person_and_organisation.py index ac97b7a317..7ed6cf8934 100644 --- a/src/ifcopenshell-python/test/api/owner/test_add_person_and_organisation.py +++ b/src/ifcopenshell-python/test/api/owner/test_add_person_and_organisation.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestAddPersonAndOrganisation(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_add_role.py b/src/ifcopenshell-python/test/api/owner/test_add_role.py index c98cba08e9..05c450aa2f 100644 --- a/src/ifcopenshell-python/test/api/owner/test_add_role.py +++ b/src/ifcopenshell-python/test/api/owner/test_add_role.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestAddRole(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_assign_actor.py b/src/ifcopenshell-python/test/api/owner/test_assign_actor.py index c4c6f84c24..0098037f39 100644 --- a/src/ifcopenshell-python/test/api/owner/test_assign_actor.py +++ b/src/ifcopenshell-python/test/api/owner/test_assign_actor.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestAssignActor(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_create_owner_history.py b/src/ifcopenshell-python/test/api/owner/test_create_owner_history.py index 839f46ea73..5d717fed80 100644 --- a/src/ifcopenshell-python/test/api/owner/test_create_owner_history.py +++ b/src/ifcopenshell-python/test/api/owner/test_create_owner_history.py @@ -17,10 +17,12 @@ # along with IfcOpenShell. If not, see . import time + import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.api.owner.settings +import test.bootstrap class TestCreateOwnerHistory(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_edit_actor.py b/src/ifcopenshell-python/test/api/owner/test_edit_actor.py index 02335cca41..f050514819 100644 --- a/src/ifcopenshell-python/test/api/owner/test_edit_actor.py +++ b/src/ifcopenshell-python/test/api/owner/test_edit_actor.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestEditActor(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_edit_address.py b/src/ifcopenshell-python/test/api/owner/test_edit_address.py index c01b072939..1529f1b863 100644 --- a/src/ifcopenshell-python/test/api/owner/test_edit_address.py +++ b/src/ifcopenshell-python/test/api/owner/test_edit_address.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestEditAddress(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_edit_application.py b/src/ifcopenshell-python/test/api/owner/test_edit_application.py index 4a88e8631b..ac3612bca9 100644 --- a/src/ifcopenshell-python/test/api/owner/test_edit_application.py +++ b/src/ifcopenshell-python/test/api/owner/test_edit_application.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestEditApplication(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_edit_organisation.py b/src/ifcopenshell-python/test/api/owner/test_edit_organisation.py index c1a6742239..6580762406 100644 --- a/src/ifcopenshell-python/test/api/owner/test_edit_organisation.py +++ b/src/ifcopenshell-python/test/api/owner/test_edit_organisation.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestEditOrganisation(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_edit_person.py b/src/ifcopenshell-python/test/api/owner/test_edit_person.py index e1b79ddc6e..ae07f78e91 100644 --- a/src/ifcopenshell-python/test/api/owner/test_edit_person.py +++ b/src/ifcopenshell-python/test/api/owner/test_edit_person.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestEditPerson(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_edit_role.py b/src/ifcopenshell-python/test/api/owner/test_edit_role.py index c92f38d15c..8fb203cbf1 100644 --- a/src/ifcopenshell-python/test/api/owner/test_edit_role.py +++ b/src/ifcopenshell-python/test/api/owner/test_edit_role.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestEditRole(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_remove_actor.py b/src/ifcopenshell-python/test/api/owner/test_remove_actor.py index f46b70ca6e..db044c3efe 100644 --- a/src/ifcopenshell-python/test/api/owner/test_remove_actor.py +++ b/src/ifcopenshell-python/test/api/owner/test_remove_actor.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestRemoveActor(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_remove_address.py b/src/ifcopenshell-python/test/api/owner/test_remove_address.py index f8d6c6094f..e8dfb72dc0 100644 --- a/src/ifcopenshell-python/test/api/owner/test_remove_address.py +++ b/src/ifcopenshell-python/test/api/owner/test_remove_address.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestRemoveAddress(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_remove_organisation.py b/src/ifcopenshell-python/test/api/owner/test_remove_organisation.py index 7da306ecf3..0a0f25dd73 100644 --- a/src/ifcopenshell-python/test/api/owner/test_remove_organisation.py +++ b/src/ifcopenshell-python/test/api/owner/test_remove_organisation.py @@ -16,9 +16,9 @@ # 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.owner import ifcopenshell.guid +import test.bootstrap class TestRemoveOrganisationIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/owner/test_remove_person.py b/src/ifcopenshell-python/test/api/owner/test_remove_person.py index 8304d4b985..d8effdd4ec 100644 --- a/src/ifcopenshell-python/test/api/owner/test_remove_person.py +++ b/src/ifcopenshell-python/test/api/owner/test_remove_person.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.owner import ifcopenshell.guid +import test.bootstrap class TestRemovePersonIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/owner/test_remove_person_and_organisation.py b/src/ifcopenshell-python/test/api/owner/test_remove_person_and_organisation.py index a07d8dbe6a..a8bfa3a891 100644 --- a/src/ifcopenshell-python/test/api/owner/test_remove_person_and_organisation.py +++ b/src/ifcopenshell-python/test/api/owner/test_remove_person_and_organisation.py @@ -16,9 +16,9 @@ # 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.owner import ifcopenshell.guid +import test.bootstrap class TestRemovePersonAndOrganisationIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/owner/test_remove_role.py b/src/ifcopenshell-python/test/api/owner/test_remove_role.py index 0c2afcdd99..3ef261be00 100644 --- a/src/ifcopenshell-python/test/api/owner/test_remove_role.py +++ b/src/ifcopenshell-python/test/api/owner/test_remove_role.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestRemoveRoleIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/owner/test_unassign_actor.py b/src/ifcopenshell-python/test/api/owner/test_unassign_actor.py index 96a21c1a79..465ca01bae 100644 --- a/src/ifcopenshell-python/test/api/owner/test_unassign_actor.py +++ b/src/ifcopenshell-python/test/api/owner/test_unassign_actor.py @@ -16,8 +16,8 @@ # 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.owner +import test.bootstrap class TestUnassignActor(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/owner/test_update_owner_history.py b/src/ifcopenshell-python/test/api/owner/test_update_owner_history.py index fb500658e1..1aeb5ad7c3 100644 --- a/src/ifcopenshell-python/test/api/owner/test_update_owner_history.py +++ b/src/ifcopenshell-python/test/api/owner/test_update_owner_history.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . import time -import test.bootstrap + import ifcopenshell.api.owner import ifcopenshell.api.owner.settings +import test.bootstrap class TestUpdateOwnerHistory(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/profile/test_add_parameterized_profile.py b/src/ifcopenshell-python/test/api/profile/test_add_parameterized_profile.py index 8481592643..b485cc97e7 100644 --- a/src/ifcopenshell-python/test/api/profile/test_add_parameterized_profile.py +++ b/src/ifcopenshell-python/test/api/profile/test_add_parameterized_profile.py @@ -16,9 +16,9 @@ # 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.profile import ifcopenshell.util.schema +import test.bootstrap class TestAddParametrizedProfileIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/profile/test_copy_profile.py b/src/ifcopenshell-python/test/api/profile/test_copy_profile.py index 8cc19b1489..b82c47c12b 100644 --- a/src/ifcopenshell-python/test/api/profile/test_copy_profile.py +++ b/src/ifcopenshell-python/test/api/profile/test_copy_profile.py @@ -16,10 +16,10 @@ # 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.profile import ifcopenshell.api.pset import ifcopenshell.util.element +import test.bootstrap class TestCopyProfileIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/profile/test_remove_profile.py b/src/ifcopenshell-python/test/api/profile/test_remove_profile.py index 86b3e136e7..3657ebc2d2 100644 --- a/src/ifcopenshell-python/test/api/profile/test_remove_profile.py +++ b/src/ifcopenshell-python/test/api/profile/test_remove_profile.py @@ -16,9 +16,9 @@ # 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.profile import ifcopenshell.api.pset +import test.bootstrap class TestRemoveProfileIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/project/test_append_asset.py b/src/ifcopenshell-python/test/api/project/test_append_asset.py index 399ee1fd04..f89e4d5c89 100644 --- a/src/ifcopenshell-python/test/api/project/test_append_asset.py +++ b/src/ifcopenshell-python/test/api/project/test_append_asset.py @@ -16,28 +16,29 @@ # 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.layer -import ifcopenshell.api.geometry -import ifcopenshell.api.georeference -import ifcopenshell.api.pset -import ifcopenshell.api.root -import ifcopenshell.api.type +import numpy as np + +import ifcopenshell.api.classification +import ifcopenshell.api.context import ifcopenshell.api.cost import ifcopenshell.api.feature -import ifcopenshell.api.style -import ifcopenshell.api.context -import ifcopenshell.api.project +import ifcopenshell.api.geometry +import ifcopenshell.api.georeference +import ifcopenshell.api.layer import ifcopenshell.api.material -import ifcopenshell.api.profile -import ifcopenshell.api.unit -import ifcopenshell.api.classification import ifcopenshell.api.owner.settings -import ifcopenshell.util.element +import ifcopenshell.api.profile +import ifcopenshell.api.project +import ifcopenshell.api.pset +import ifcopenshell.api.root +import ifcopenshell.api.style +import ifcopenshell.api.type +import ifcopenshell.api.unit import ifcopenshell.util.classification +import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.unit -import numpy as np +import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcopenshell-python/test/api/project/test_assign_declaration.py b/src/ifcopenshell-python/test/api/project/test_assign_declaration.py index 8bbaf521cc..af24565b59 100644 --- a/src/ifcopenshell-python/test/api/project/test_assign_declaration.py +++ b/src/ifcopenshell-python/test/api/project/test_assign_declaration.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.project +import ifcopenshell.api.root +import test.bootstrap # NOTE: supported only in IFC4+ diff --git a/src/ifcopenshell-python/test/api/project/test_create_file.py b/src/ifcopenshell-python/test/api/project/test_create_file.py index 8456e2fe27..6373968cb2 100644 --- a/src/ifcopenshell-python/test/api/project/test_create_file.py +++ b/src/ifcopenshell-python/test/api/project/test_create_file.py @@ -16,8 +16,8 @@ # 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.project +import test.bootstrap class TestCreateFile(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/project/test_unassign_declaration.py b/src/ifcopenshell-python/test/api/project/test_unassign_declaration.py index 6a1683840b..4d77f2b721 100644 --- a/src/ifcopenshell-python/test/api/project/test_unassign_declaration.py +++ b/src/ifcopenshell-python/test/api/project/test_unassign_declaration.py @@ -16,11 +16,12 @@ # 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.root -import ifcopenshell.api.project from typing import Union +import ifcopenshell.api.project +import ifcopenshell.api.root +import test.bootstrap + # NOTE: supported only in IFC4+ class TestUnassignDeclaration(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/pset/test_add_pset.py b/src/ifcopenshell-python/test/api/pset/test_add_pset.py index fadb1a369c..1629c639bf 100644 --- a/src/ifcopenshell-python/test/api/pset/test_add_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_add_pset.py @@ -16,12 +16,12 @@ # 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.material +import ifcopenshell.api.profile import ifcopenshell.api.pset import ifcopenshell.api.root -import ifcopenshell.api.profile -import ifcopenshell.api.material import ifcopenshell.util.element +import test.bootstrap class TestAddPset(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/pset/test_add_qto.py b/src/ifcopenshell-python/test/api/pset/test_add_qto.py index 4c7493ca14..3f4a4e3ce6 100644 --- a/src/ifcopenshell-python/test/api/pset/test_add_qto.py +++ b/src/ifcopenshell-python/test/api/pset/test_add_qto.py @@ -16,10 +16,10 @@ # 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.pset import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestAddQto(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/pset/test_assign_pset.py b/src/ifcopenshell-python/test/api/pset/test_assign_pset.py index 950d2743cb..e1234e8fe1 100644 --- a/src/ifcopenshell-python/test/api/pset/test_assign_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_assign_pset.py @@ -16,9 +16,9 @@ # 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.pset import ifcopenshell.util.element +import test.bootstrap class TestAssignPset(test.bootstrap.IFC4): 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 257297f6b9..84347c626f 100644 --- a/src/ifcopenshell-python/test/api/pset/test_edit_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_edit_pset.py @@ -17,12 +17,13 @@ # along with IfcOpenShell. If not, see . import operator -import test.bootstrap +from typing import Union + import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.guid import ifcopenshell.util.element -from typing import Union +import test.bootstrap def get_properties(material: ifcopenshell.entity_instance) -> Union[ifcopenshell.entity_instance, None]: diff --git a/src/ifcopenshell-python/test/api/pset/test_edit_qto.py b/src/ifcopenshell-python/test/api/pset/test_edit_qto.py index 0dc2bb5ef7..5bf31f8262 100644 --- a/src/ifcopenshell-python/test/api/pset/test_edit_qto.py +++ b/src/ifcopenshell-python/test/api/pset/test_edit_qto.py @@ -16,9 +16,9 @@ # 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.pset import ifcopenshell.api.root +import test.bootstrap class TestEditQto(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/pset/test_remove_pset.py b/src/ifcopenshell-python/test/api/pset/test_remove_pset.py index bb154cfc4f..b0f5dfd004 100644 --- a/src/ifcopenshell-python/test/api/pset/test_remove_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_remove_pset.py @@ -16,10 +16,10 @@ # 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.pset import ifcopenshell.api.root import ifcopenshell.util.element +import test.bootstrap class TestRemovePset(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/pset/test_unassign_pset.py b/src/ifcopenshell-python/test/api/pset/test_unassign_pset.py index 585a281713..58c476d74a 100644 --- a/src/ifcopenshell-python/test/api/pset/test_unassign_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_unassign_pset.py @@ -16,9 +16,9 @@ # 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.pset import ifcopenshell.util.element +import test.bootstrap class TestUnassignPset(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py b/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py index 846d2d5a54..769294e1b5 100644 --- a/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py @@ -16,11 +16,11 @@ # 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.pset import ifcopenshell.api.root -import ifcopenshell.util.element import ifcopenshell.guid +import ifcopenshell.util.element +import test.bootstrap class TestUnsharePset(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/pset_template/test_edit_prop_template.py b/src/ifcopenshell-python/test/api/pset_template/test_edit_prop_template.py index ac076964c7..5f26b02983 100644 --- a/src/ifcopenshell-python/test/api/pset_template/test_edit_prop_template.py +++ b/src/ifcopenshell-python/test/api/pset_template/test_edit_prop_template.py @@ -16,8 +16,8 @@ # 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.pset_template +import test.bootstrap class TestEditPropTemplate(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/resource/test_add_resource_quantity.py b/src/ifcopenshell-python/test/api/resource/test_add_resource_quantity.py index c9e20e7a49..890f290bc6 100644 --- a/src/ifcopenshell-python/test/api/resource/test_add_resource_quantity.py +++ b/src/ifcopenshell-python/test/api/resource/test_add_resource_quantity.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.api.resource import ifcopenshell.util.resource +import test.bootstrap class TestAddResourceQuantity(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/resource/test_calculate_resource_work.py b/src/ifcopenshell-python/test/api/resource/test_calculate_resource_work.py index c80e3dae28..6affa8a60f 100644 --- a/src/ifcopenshell-python/test/api/resource/test_calculate_resource_work.py +++ b/src/ifcopenshell-python/test/api/resource/test_calculate_resource_work.py @@ -16,12 +16,12 @@ # 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.pset -import ifcopenshell.api.root import ifcopenshell.api.resource +import ifcopenshell.api.root import ifcopenshell.api.sequence import ifcopenshell.util.constraint +import test.bootstrap # NOTE: resource module features relies on entities introduced in IFC4 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 66ba27ec06..77de023379 100644 --- a/src/ifcopenshell-python/test/api/root/test_copy_class.py +++ b/src/ifcopenshell-python/test/api/root/test_copy_class.py @@ -17,19 +17,20 @@ # along with IfcOpenShell. If not, see . import numpy -import test.bootstrap -import ifcopenshell.api.unit -import ifcopenshell.api.type -import ifcopenshell.api.root -import ifcopenshell.api.feature -import ifcopenshell.api.pset -import ifcopenshell.api.group -import ifcopenshell.api.system -import ifcopenshell.api.spatial -import ifcopenshell.api.geometry + import ifcopenshell.api.aggregate +import ifcopenshell.api.feature +import ifcopenshell.api.geometry +import ifcopenshell.api.group +import ifcopenshell.api.pset +import ifcopenshell.api.root +import ifcopenshell.api.spatial +import ifcopenshell.api.system +import ifcopenshell.api.type +import ifcopenshell.api.unit import ifcopenshell.util import ifcopenshell.util.system +import test.bootstrap class TestCopyClass(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/root/test_create_entity.py b/src/ifcopenshell-python/test/api/root/test_create_entity.py index dbe27a3a51..9616b2fec1 100644 --- a/src/ifcopenshell-python/test/api/root/test_create_entity.py +++ b/src/ifcopenshell-python/test/api/root/test_create_entity.py @@ -16,8 +16,8 @@ # 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.root +import test.bootstrap class TestCreateEntity(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/root/test_reassign_class.py b/src/ifcopenshell-python/test/api/root/test_reassign_class.py index f8be13225e..bd6d0f05e8 100644 --- a/src/ifcopenshell-python/test/api/root/test_reassign_class.py +++ b/src/ifcopenshell-python/test/api/root/test_reassign_class.py @@ -18,13 +18,13 @@ import ifcopenshell.api.aggregate import ifcopenshell.api.geometry -import ifcopenshell.api.spatial -import ifcopenshell.util.representation -import test.bootstrap import ifcopenshell.api.pset import ifcopenshell.api.root +import ifcopenshell.api.spatial import ifcopenshell.api.type import ifcopenshell.util.element +import ifcopenshell.util.representation +import test.bootstrap class TestReassignClass(test.bootstrap.IFC4): 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 da9b46dbe5..ae2308b360 100644 --- a/src/ifcopenshell-python/test/api/root/test_remove_product.py +++ b/src/ifcopenshell-python/test/api/root/test_remove_product.py @@ -16,24 +16,24 @@ # 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.unit -import ifcopenshell.api.nest -import ifcopenshell.api.root -import ifcopenshell.api.feature -import ifcopenshell.api.grid -import ifcopenshell.api.type -import ifcopenshell.api.pset -import ifcopenshell.api.group -import ifcopenshell.api.owner -import ifcopenshell.api.system -import ifcopenshell.api.spatial -import ifcopenshell.api.drawing -import ifcopenshell.api.context -import ifcopenshell.api.geometry -import ifcopenshell.api.material import ifcopenshell.api.aggregate +import ifcopenshell.api.context +import ifcopenshell.api.drawing +import ifcopenshell.api.feature +import ifcopenshell.api.geometry +import ifcopenshell.api.grid +import ifcopenshell.api.group +import ifcopenshell.api.material +import ifcopenshell.api.nest +import ifcopenshell.api.owner +import ifcopenshell.api.pset +import ifcopenshell.api.root +import ifcopenshell.api.spatial +import ifcopenshell.api.system +import ifcopenshell.api.type +import ifcopenshell.api.unit import ifcopenshell.guid +import test.bootstrap class TestRemoveProduct(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/sequence/test_add_date_time.py b/src/ifcopenshell-python/test/api/sequence/test_add_date_time.py index 3b5d5ac15c..742a7d54ec 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_add_date_time.py +++ b/src/ifcopenshell-python/test/api/sequence/test_add_date_time.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from datetime import datetime + +import ifcopenshell.api.sequence import ifcopenshell.util import ifcopenshell.util.date import test.bootstrap -import ifcopenshell.api.sequence -from datetime import datetime class TestAddDateTime(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/sequence/test_assign_product.py b/src/ifcopenshell-python/test/api/sequence/test_assign_product.py index 19812e820c..b78b4d65a8 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_assign_product.py +++ b/src/ifcopenshell-python/test/api/sequence/test_assign_product.py @@ -16,8 +16,8 @@ # 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.sequence +import test.bootstrap class TestAssignProduct(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/sequence/test_calculate_task_duration.py b/src/ifcopenshell-python/test/api/sequence/test_calculate_task_duration.py index daed2ecb64..462526966a 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_calculate_task_duration.py +++ b/src/ifcopenshell-python/test/api/sequence/test_calculate_task_duration.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.pset -import ifcopenshell.api.sequence import ifcopenshell.api.resource +import ifcopenshell.api.root +import ifcopenshell.api.sequence +import test.bootstrap # NOTE: sequence module features relies on entities introduced in IFC4 diff --git a/src/ifcopenshell-python/test/api/sequence/test_cascade_schedule.py b/src/ifcopenshell-python/test/api/sequence/test_cascade_schedule.py index 87d5647343..32c9908736 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_cascade_schedule.py +++ b/src/ifcopenshell-python/test/api/sequence/test_cascade_schedule.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import datetime -import test.bootstrap + +import pytest + import ifcopenshell.api.sequence +import test.bootstrap # NOTE: sequence module features relies on entities introduced in IFC4 diff --git a/src/ifcopenshell-python/test/api/sequence/test_edit_task_time.py b/src/ifcopenshell-python/test/api/sequence/test_edit_task_time.py index dcaf082bf8..a28a6cd604 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_edit_task_time.py +++ b/src/ifcopenshell-python/test/api/sequence/test_edit_task_time.py @@ -17,11 +17,11 @@ # along with IfcOpenShell. If not, see . import datetime -import test.bootstrap -import ifcopenshell.api.root -import ifcopenshell.api.control -import ifcopenshell.api.sequence +import ifcopenshell.api.control +import ifcopenshell.api.root +import ifcopenshell.api.sequence +import test.bootstrap # NOTE: IfcTaskTime was introduced in IFC4 diff --git a/src/ifcopenshell-python/test/api/sequence/test_edit_work_time.py b/src/ifcopenshell-python/test/api/sequence/test_edit_work_time.py index dc58088d38..8ca467b681 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_edit_work_time.py +++ b/src/ifcopenshell-python/test/api/sequence/test_edit_work_time.py @@ -17,8 +17,9 @@ # along with IfcOpenShell. If not, see . import datetime -import test.bootstrap + import ifcopenshell.api.sequence +import test.bootstrap # NOTE: IfcWorkTime was introduced in IFC4 diff --git a/src/ifcopenshell-python/test/api/sequence/test_recalculate_schedule.py b/src/ifcopenshell-python/test/api/sequence/test_recalculate_schedule.py index d5aacde632..0445f16474 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_recalculate_schedule.py +++ b/src/ifcopenshell-python/test/api/sequence/test_recalculate_schedule.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import datetime -import test.bootstrap + +import pytest + import ifcopenshell.api.root import ifcopenshell.api.sequence +import test.bootstrap # NOTE: sequence module features relies on entities introduced in IFC4 diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_task.py b/src/ifcopenshell-python/test/api/sequence/test_remove_task.py index a23cf9cb54..1d1d3c1467 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_task.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_task.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.api.nest import ifcopenshell.api.sequence +import test.bootstrap # NOTE: sequence module features relies on entities introduced in IFC4 diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_calendar.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_calendar.py index 99b0a035dc..42264d1182 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_work_calendar.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_calendar.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.api.control import ifcopenshell.api.sequence +import test.bootstrap # NOTE: sequence module features relies on entities introduced in IFC4 diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_plan.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_plan.py index 273577f63e..6f9a0ee9cf 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_work_plan.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_plan.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.api.sequence +import test.bootstrap def declared_objects(ifc_file: ifcopenshell.file) -> set[ifcopenshell.entity_instance]: diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_schedule.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_schedule.py index b661b8df48..ea2b094364 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_work_schedule.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_schedule.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.api.sequence +import test.bootstrap def declared_objects(ifc_file: ifcopenshell.file) -> set[ifcopenshell.entity_instance]: diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py index d0318c5c7a..30393c540b 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.api.sequence +import test.bootstrap # NOTE: sequence module features relies on entities introduced in IFC4 diff --git a/src/ifcopenshell-python/test/api/sequence/test_unassign_product.py b/src/ifcopenshell-python/test/api/sequence/test_unassign_product.py index fdeae7e25d..537b2c6043 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_unassign_product.py +++ b/src/ifcopenshell-python/test/api/sequence/test_unassign_product.py @@ -16,8 +16,8 @@ # 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.sequence +import test.bootstrap class TestUnassignProduct(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/spatial/test_assign_container.py b/src/ifcopenshell-python/test/api/spatial/test_assign_container.py index 4e0ba57666..fcee090724 100644 --- a/src/ifcopenshell-python/test/api/spatial/test_assign_container.py +++ b/src/ifcopenshell-python/test/api/spatial/test_assign_container.py @@ -18,14 +18,15 @@ import numpy import pytest -import test.bootstrap -import ifcopenshell.api.root -import ifcopenshell.api.unit -import ifcopenshell.api.spatial -import ifcopenshell.api.geometry + import ifcopenshell.api.aggregate +import ifcopenshell.api.geometry +import ifcopenshell.api.root +import ifcopenshell.api.spatial +import ifcopenshell.api.unit import ifcopenshell.util.element import ifcopenshell.util.placement +import test.bootstrap class TestAssignContainer(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/spatial/test_dereference_structure.py b/src/ifcopenshell-python/test/api/spatial/test_dereference_structure.py index 9e618033e1..5f9d2b5099 100644 --- a/src/ifcopenshell-python/test/api/spatial/test_dereference_structure.py +++ b/src/ifcopenshell-python/test/api/spatial/test_dereference_structure.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.spatial import ifcopenshell.util.element +import test.bootstrap class TestDereferenceStructure(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/spatial/test_reference_structure.py b/src/ifcopenshell-python/test/api/spatial/test_reference_structure.py index 013b0e4a18..6b5a3daeaa 100644 --- a/src/ifcopenshell-python/test/api/spatial/test_reference_structure.py +++ b/src/ifcopenshell-python/test/api/spatial/test_reference_structure.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.spatial import ifcopenshell.util.element +import test.bootstrap class TestReferenceStructure(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/spatial/test_unassign_container.py b/src/ifcopenshell-python/test/api/spatial/test_unassign_container.py index 795614e35d..efd89c990f 100644 --- a/src/ifcopenshell-python/test/api/spatial/test_unassign_container.py +++ b/src/ifcopenshell-python/test/api/spatial/test_unassign_container.py @@ -16,11 +16,11 @@ # 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.root import ifcopenshell.api.spatial import ifcopenshell.util.element import ifcopenshell.util.placement +import test.bootstrap class TestUnassignContainer(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/structural/test_add_structural_analysis_model.py b/src/ifcopenshell-python/test/api/structural/test_add_structural_analysis_model.py index c7c715d1c0..3d19dd50eb 100644 --- a/src/ifcopenshell-python/test/api/structural/test_add_structural_analysis_model.py +++ b/src/ifcopenshell-python/test/api/structural/test_add_structural_analysis_model.py @@ -16,8 +16,8 @@ # 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.structural +import test.bootstrap class TestAddStructuralAnalysisModel(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/structural/test_assign_structural_analysis_model.py b/src/ifcopenshell-python/test/api/structural/test_assign_structural_analysis_model.py index da09c38674..867630696b 100644 --- a/src/ifcopenshell-python/test/api/structural/test_assign_structural_analysis_model.py +++ b/src/ifcopenshell-python/test/api/structural/test_assign_structural_analysis_model.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.structural +import test.bootstrap class TestAssignStructuralAnalysisModel(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/structural/test_edit_structural_analysis_model.py b/src/ifcopenshell-python/test/api/structural/test_edit_structural_analysis_model.py index fddb8a9993..6deda5a833 100644 --- a/src/ifcopenshell-python/test/api/structural/test_edit_structural_analysis_model.py +++ b/src/ifcopenshell-python/test/api/structural/test_edit_structural_analysis_model.py @@ -16,8 +16,8 @@ # 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.structural +import test.bootstrap class TestEditStructuralAnalysisModel(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/structural/test_remove_structural_analysis_model.py b/src/ifcopenshell-python/test/api/structural/test_remove_structural_analysis_model.py index b496dcc9a1..c330be81cb 100644 --- a/src/ifcopenshell-python/test/api/structural/test_remove_structural_analysis_model.py +++ b/src/ifcopenshell-python/test/api/structural/test_remove_structural_analysis_model.py @@ -16,8 +16,8 @@ # 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.structural +import test.bootstrap class TestRemoveStructuralAnalysisModel(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/structural/test_unassign_structural_analysis_model.py b/src/ifcopenshell-python/test/api/structural/test_unassign_structural_analysis_model.py index c80842b7ad..43992acd3c 100644 --- a/src/ifcopenshell-python/test/api/structural/test_unassign_structural_analysis_model.py +++ b/src/ifcopenshell-python/test/api/structural/test_unassign_structural_analysis_model.py @@ -16,9 +16,9 @@ # 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.root import ifcopenshell.api.structural +import test.bootstrap class TestUnassignStructuralAnalysisModel(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/style/test_add_surface_style.py b/src/ifcopenshell-python/test/api/style/test_add_surface_style.py index 83f176a690..dcfd42fd2c 100644 --- a/src/ifcopenshell-python/test/api/style/test_add_surface_style.py +++ b/src/ifcopenshell-python/test/api/style/test_add_surface_style.py @@ -16,8 +16,8 @@ # 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.style +import test.bootstrap class TestAddSurfaceStyle(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/style/test_add_surface_textures.py b/src/ifcopenshell-python/test/api/style/test_add_surface_textures.py index 78971148d7..12c1711baa 100644 --- a/src/ifcopenshell-python/test/api/style/test_add_surface_textures.py +++ b/src/ifcopenshell-python/test/api/style/test_add_surface_textures.py @@ -17,8 +17,9 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.style +import test.bootstrap # TODO: add ifc2x3 tests after add_surface_textures will support ifc2x3 diff --git a/src/ifcopenshell-python/test/api/style/test_assign_material_style.py b/src/ifcopenshell-python/test/api/style/test_assign_material_style.py index 47f26ee6ac..7b7ea3df56 100644 --- a/src/ifcopenshell-python/test/api/style/test_assign_material_style.py +++ b/src/ifcopenshell-python/test/api/style/test_assign_material_style.py @@ -16,11 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import test.bootstrap import ifcopenshell +import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.api.style -import ifcopenshell.api.material +import test.bootstrap class TestAssignMaterialStyleIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/style/test_assign_representation_styles.py b/src/ifcopenshell-python/test/api/style/test_assign_representation_styles.py index 9527813291..157acf49da 100644 --- a/src/ifcopenshell-python/test/api/style/test_assign_representation_styles.py +++ b/src/ifcopenshell-python/test/api/style/test_assign_representation_styles.py @@ -16,10 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import test.bootstrap import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.style +import test.bootstrap class TestAssignRepresentationStyles(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/style/test_edit_surface_style.py b/src/ifcopenshell-python/test/api/style/test_edit_surface_style.py index 5875396a7a..b8fc7e241b 100644 --- a/src/ifcopenshell-python/test/api/style/test_edit_surface_style.py +++ b/src/ifcopenshell-python/test/api/style/test_edit_surface_style.py @@ -17,8 +17,9 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.style +import test.bootstrap class TestEditSurfaceStyle(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/style/test_remove_style.py b/src/ifcopenshell-python/test/api/style/test_remove_style.py index 1993ef3cf3..5b39ec655c 100644 --- a/src/ifcopenshell-python/test/api/style/test_remove_style.py +++ b/src/ifcopenshell-python/test/api/style/test_remove_style.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.material import ifcopenshell.api.style +import test.bootstrap class TestRemoveStyle(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/style/test_remove_surface_style.py b/src/ifcopenshell-python/test/api/style/test_remove_surface_style.py index 14f8173a3a..12ebf766f2 100644 --- a/src/ifcopenshell-python/test/api/style/test_remove_surface_style.py +++ b/src/ifcopenshell-python/test/api/style/test_remove_surface_style.py @@ -17,8 +17,9 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.style +import test.bootstrap class TestRemoveSurfaceStyleIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/style/test_unassign_material_style.py b/src/ifcopenshell-python/test/api/style/test_unassign_material_style.py index b009de1616..919f26e3c9 100644 --- a/src/ifcopenshell-python/test/api/style/test_unassign_material_style.py +++ b/src/ifcopenshell-python/test/api/style/test_unassign_material_style.py @@ -16,11 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import test.bootstrap import ifcopenshell +import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.api.style -import ifcopenshell.api.material +import test.bootstrap class TestUnassignMaterialStyleIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/style/test_unassign_representation_styles.py b/src/ifcopenshell-python/test/api/style/test_unassign_representation_styles.py index 2138f6cb9b..ed7285b1de 100644 --- a/src/ifcopenshell-python/test/api/style/test_unassign_representation_styles.py +++ b/src/ifcopenshell-python/test/api/style/test_unassign_representation_styles.py @@ -16,10 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import test.bootstrap import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.style +import test.bootstrap class TestUnassignRepresentationStyles(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_add_port.py b/src/ifcopenshell-python/test/api/system/test_add_port.py index c2c420427c..ff8163fa15 100644 --- a/src/ifcopenshell-python/test/api/system/test_add_port.py +++ b/src/ifcopenshell-python/test/api/system/test_add_port.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.system import ifcopenshell.util.system +import test.bootstrap class TestAddPort(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_add_system.py b/src/ifcopenshell-python/test/api/system/test_add_system.py index 8d98d5c3dd..1801a2332a 100644 --- a/src/ifcopenshell-python/test/api/system/test_add_system.py +++ b/src/ifcopenshell-python/test/api/system/test_add_system.py @@ -16,8 +16,8 @@ # 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.system +import test.bootstrap class TestAddSystem(test.bootstrap.IFC4): 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 index e3d1df3bec..4ce38defa7 100644 --- a/src/ifcopenshell-python/test/api/system/test_assign_flow_control.py +++ b/src/ifcopenshell-python/test/api/system/test_assign_flow_control.py @@ -16,8 +16,8 @@ # 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.system +import test.bootstrap class TestAssignFlowControl(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_assign_port.py b/src/ifcopenshell-python/test/api/system/test_assign_port.py index d17f2775d8..650496f875 100644 --- a/src/ifcopenshell-python/test/api/system/test_assign_port.py +++ b/src/ifcopenshell-python/test/api/system/test_assign_port.py @@ -17,13 +17,14 @@ # along with IfcOpenShell. If not, see . import numpy -import test.bootstrap -import ifcopenshell.api.unit + +import ifcopenshell.api.geometry import ifcopenshell.api.root import ifcopenshell.api.system -import ifcopenshell.api.geometry +import ifcopenshell.api.unit import ifcopenshell.util.placement import ifcopenshell.util.system +import test.bootstrap class TestAssignPort(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_assign_system.py b/src/ifcopenshell-python/test/api/system/test_assign_system.py index 22c26d9214..e262419d13 100644 --- a/src/ifcopenshell-python/test/api/system/test_assign_system.py +++ b/src/ifcopenshell-python/test/api/system/test_assign_system.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.root import ifcopenshell.api.system import ifcopenshell.util.system +import test.bootstrap class TestAssignSystem(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_connect_port.py b/src/ifcopenshell-python/test/api/system/test_connect_port.py index 8dd19d47fa..06d1fb7f26 100644 --- a/src/ifcopenshell-python/test/api/system/test_connect_port.py +++ b/src/ifcopenshell-python/test/api/system/test_connect_port.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.system import ifcopenshell.util.system +import test.bootstrap class TestConnectPort(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_disconnect_port.py b/src/ifcopenshell-python/test/api/system/test_disconnect_port.py index a34fdfc615..4d782414a6 100644 --- a/src/ifcopenshell-python/test/api/system/test_disconnect_port.py +++ b/src/ifcopenshell-python/test/api/system/test_disconnect_port.py @@ -16,9 +16,9 @@ # 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.system import ifcopenshell.util.system +import test.bootstrap class TestDisconnectPort(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_remove_system.py b/src/ifcopenshell-python/test/api/system/test_remove_system.py index 44e00987d6..c347ae09a0 100644 --- a/src/ifcopenshell-python/test/api/system/test_remove_system.py +++ b/src/ifcopenshell-python/test/api/system/test_remove_system.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.pset +import ifcopenshell.api.root import ifcopenshell.api.system +import test.bootstrap class TestRemoveSystem(test.bootstrap.IFC4): 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 index 22d2559561..afc20789fd 100644 --- a/src/ifcopenshell-python/test/api/system/test_unassign_flow_control.py +++ b/src/ifcopenshell-python/test/api/system/test_unassign_flow_control.py @@ -16,8 +16,8 @@ # 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.system +import test.bootstrap class TestUnassignFlowControl(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_unassign_port.py b/src/ifcopenshell-python/test/api/system/test_unassign_port.py index b49de25f9a..711b17eeeb 100644 --- a/src/ifcopenshell-python/test/api/system/test_unassign_port.py +++ b/src/ifcopenshell-python/test/api/system/test_unassign_port.py @@ -16,10 +16,10 @@ # 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.root import ifcopenshell.api.system import ifcopenshell.util.system +import test.bootstrap class TestAssignPort(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/system/test_unassign_system.py b/src/ifcopenshell-python/test/api/system/test_unassign_system.py index 8503dd82c3..7e60cbb07c 100644 --- a/src/ifcopenshell-python/test/api/system/test_unassign_system.py +++ b/src/ifcopenshell-python/test/api/system/test_unassign_system.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.root import ifcopenshell.api.system import ifcopenshell.util.system +import test.bootstrap class TestUnassignSystem(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/test_api.py b/src/ifcopenshell-python/test/api/test_api.py index 8dca81d32f..55889cc627 100644 --- a/src/ifcopenshell-python/test/api/test_api.py +++ b/src/ifcopenshell-python/test/api/test_api.py @@ -16,16 +16,17 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api.cost -import ifcopenshell.api.root -import test.bootstrap -import ifcopenshell.api -import ifcopenshell.api.control -import ifcopenshell.api.sequence -import ifcopenshell.util.element from datetime import datetime from typing import Union +import ifcopenshell.api +import ifcopenshell.api.control +import ifcopenshell.api.cost +import ifcopenshell.api.root +import ifcopenshell.api.sequence +import ifcopenshell.util.element +import test.bootstrap + def deprecation_check(test): def new_test(self): diff --git a/src/ifcopenshell-python/test/api/type/test_assign_type.py b/src/ifcopenshell-python/test/api/type/test_assign_type.py index 21df8c8bba..009d4efedf 100644 --- a/src/ifcopenshell-python/test/api/type/test_assign_type.py +++ b/src/ifcopenshell-python/test/api/type/test_assign_type.py @@ -16,14 +16,15 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import test.bootstrap +import pytest + +import ifcopenshell.api.geometry +import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.api.type -import ifcopenshell.api.material -import ifcopenshell.api.geometry import ifcopenshell.util.element import ifcopenshell.util.representation -import pytest +import test.bootstrap class TestAssignType(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/type/test_map_type_representation.py b/src/ifcopenshell-python/test/api/type/test_map_type_representation.py index cd52591fd7..520c22e5f3 100644 --- a/src/ifcopenshell-python/test/api/type/test_map_type_representation.py +++ b/src/ifcopenshell-python/test/api/type/test_map_type_representation.py @@ -16,8 +16,8 @@ # 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.type +import test.bootstrap class TestMapTypeRepresentations(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/type/test_unassign_type.py b/src/ifcopenshell-python/test/api/type/test_unassign_type.py index c37ae7214d..3f5adf1148 100644 --- a/src/ifcopenshell-python/test/api/type/test_unassign_type.py +++ b/src/ifcopenshell-python/test/api/type/test_unassign_type.py @@ -16,12 +16,12 @@ # 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.geometry +import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.api.type -import ifcopenshell.api.material -import ifcopenshell.api.geometry import ifcopenshell.util.element +import test.bootstrap class TestUnassignType(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/unit/test_add_context_dependent_unit.py b/src/ifcopenshell-python/test/api/unit/test_add_context_dependent_unit.py index 705a2f0815..567d2cfd7a 100644 --- a/src/ifcopenshell-python/test/api/unit/test_add_context_dependent_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_add_context_dependent_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestAddContextDependentUnit(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py b/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py index a29b9b2ad8..2286be6df1 100644 --- a/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_add_conversion_based_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestAddConversionBasedUnitIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/unit/test_add_monetary_unit.py b/src/ifcopenshell-python/test/api/unit/test_add_monetary_unit.py index 3d3e44bfe4..0e11f29882 100644 --- a/src/ifcopenshell-python/test/api/unit/test_add_monetary_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_add_monetary_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestAddMonetaryUnit(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/unit/test_add_si_unit.py b/src/ifcopenshell-python/test/api/unit/test_add_si_unit.py index f618f9871e..b12cbd16ca 100644 --- a/src/ifcopenshell-python/test/api/unit/test_add_si_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_add_si_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestAddSIUnit(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/unit/test_assign_unit.py b/src/ifcopenshell-python/test/api/unit/test_assign_unit.py index 21a136b257..66cee04442 100644 --- a/src/ifcopenshell-python/test/api/unit/test_assign_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_assign_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestAssignUnit(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/unit/test_edit_derived_unit.py b/src/ifcopenshell-python/test/api/unit/test_edit_derived_unit.py index 679f5602b7..c97d55b407 100644 --- a/src/ifcopenshell-python/test/api/unit/test_edit_derived_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_edit_derived_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestEditDerivedUnit(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/unit/test_edit_monetary_unit.py b/src/ifcopenshell-python/test/api/unit/test_edit_monetary_unit.py index d956b2fb04..a8bba121c0 100644 --- a/src/ifcopenshell-python/test/api/unit/test_edit_monetary_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_edit_monetary_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestEditMonetaryUnit(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/unit/test_edit_named_unit.py b/src/ifcopenshell-python/test/api/unit/test_edit_named_unit.py index cc99e69eae..6f861f9cd8 100644 --- a/src/ifcopenshell-python/test/api/unit/test_edit_named_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_edit_named_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestEditNamedUnitIFC2X3(test.bootstrap.IFC2X3): diff --git a/src/ifcopenshell-python/test/api/unit/test_remove_unit.py b/src/ifcopenshell-python/test/api/unit/test_remove_unit.py index 5b3ab7bcc4..02df1ec562 100644 --- a/src/ifcopenshell-python/test/api/unit/test_remove_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_remove_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestRemoveUnit(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/api/unit/test_unassign_unit.py b/src/ifcopenshell-python/test/api/unit/test_unassign_unit.py index 5a101e2018..a30a9570a9 100644 --- a/src/ifcopenshell-python/test/api/unit/test_unassign_unit.py +++ b/src/ifcopenshell-python/test/api/unit/test_unassign_unit.py @@ -16,8 +16,8 @@ # 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.unit +import test.bootstrap class TestUnassignUnit(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/bootstrap.py b/src/ifcopenshell-python/test/bootstrap.py index 055ea8774a..1342be206c 100644 --- a/src/ifcopenshell-python/test/bootstrap.py +++ b/src/ifcopenshell-python/test/bootstrap.py @@ -26,9 +26,10 @@ if os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) == sys.path[0] import pytest + import ifcopenshell -import ifcopenshell.api.project import ifcopenshell.api.owner.settings +import ifcopenshell.api.project class IFC4X3: diff --git a/src/ifcopenshell-python/test/file_gc.py b/src/ifcopenshell-python/test/file_gc.py index f28256a3d0..483c268e17 100644 --- a/src/ifcopenshell-python/test/file_gc.py +++ b/src/ifcopenshell-python/test/file_gc.py @@ -1,14 +1,16 @@ -import os -import pytest -import weakref import itertools +import os +import weakref + +import pytest + import ifcopenshell -import ifcopenshell.guid -import ifcopenshell.api.pset +import ifcopenshell.api.attribute +import ifcopenshell.api.material import ifcopenshell.api.owner import ifcopenshell.api.project -import ifcopenshell.api.material -import ifcopenshell.api.attribute +import ifcopenshell.api.pset +import ifcopenshell.guid import ifcopenshell.template diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_00.py b/src/ifcopenshell-python/test/fixtures/rules/generate_00.py index 251f501bec..e50e20a81e 100644 --- a/src/ifcopenshell-python/test/fixtures/rules/generate_00.py +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_00.py @@ -1,4 +1,5 @@ import time + import ifcopenshell for i in range(3): diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_02.py b/src/ifcopenshell-python/test/fixtures/rules/generate_02.py index 298fee7eba..5747fa589f 100644 --- a/src/ifcopenshell-python/test/fixtures/rules/generate_02.py +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_02.py @@ -1,4 +1,5 @@ import time + import ifcopenshell latitudes = [ diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_06.py b/src/ifcopenshell-python/test/fixtures/rules/generate_06.py index b36c5108cb..fd9cca7153 100644 --- a/src/ifcopenshell-python/test/fixtures/rules/generate_06.py +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_06.py @@ -1,5 +1,6 @@ import itertools import time + import ifcopenshell for pty, ety in itertools.product(("GRILLE", "USERDEFINED"), (None, "Something")): diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_10.py b/src/ifcopenshell-python/test/fixtures/rules/generate_10.py index b717411dfd..f4ac7209e8 100644 --- a/src/ifcopenshell-python/test/fixtures/rules/generate_10.py +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_10.py @@ -1,4 +1,5 @@ import itertools + import ifcopenshell defaults = {"Girth": 1.0, "WallThickness": 0.11} diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_16.py b/src/ifcopenshell-python/test/fixtures/rules/generate_16.py index 7b6a32dfb1..88964b17ff 100644 --- a/src/ifcopenshell-python/test/fixtures/rules/generate_16.py +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_16.py @@ -1,4 +1,5 @@ import time + import ifcopenshell names = [("Same", "Same"), ("Different", "SomethingElse")] diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_17.py b/src/ifcopenshell-python/test/fixtures/rules/generate_17.py index 2daa8b3b38..c313ac93a1 100644 --- a/src/ifcopenshell-python/test/fixtures/rules/generate_17.py +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_17.py @@ -1,4 +1,5 @@ import time + import ifcopenshell for i, nm in enumerate(("no-mls", "mls", "mlsu")): diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_21.py b/src/ifcopenshell-python/test/fixtures/rules/generate_21.py index f5fcc68b71..0d99acc560 100644 --- a/src/ifcopenshell-python/test/fixtures/rules/generate_21.py +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_21.py @@ -1,4 +1,5 @@ import itertools + import ifcopenshell diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_24.py b/src/ifcopenshell-python/test/fixtures/rules/generate_24.py index c790a6103d..f792a169f6 100644 --- a/src/ifcopenshell-python/test/fixtures/rules/generate_24.py +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_24.py @@ -1,4 +1,5 @@ import time + import ifcopenshell for ents in [ diff --git a/src/ifcopenshell-python/test/fixtures/validate/generate_00.py b/src/ifcopenshell-python/test/fixtures/validate/generate_00.py index 082804fa26..3d6db0620e 100644 --- a/src/ifcopenshell-python/test/fixtures/validate/generate_00.py +++ b/src/ifcopenshell-python/test/fixtures/validate/generate_00.py @@ -1,8 +1,8 @@ -import ifcopenshell -import ifcopenshell.api.root -import ifcopenshell.api.owner from pathlib import Path +import ifcopenshell +import ifcopenshell.api.owner +import ifcopenshell.api.root guid1 = "3pdqyORIn8KBHZAhhtJ72T" guid2 = "1sEzC8v31DshmvW5t5P631" diff --git a/src/ifcopenshell-python/test/geom/geometry_tests.py b/src/ifcopenshell-python/test/geom/geometry_tests.py index d84ef3e9ea..f18cb3206a 100644 --- a/src/ifcopenshell-python/test/geom/geometry_tests.py +++ b/src/ifcopenshell-python/test/geom/geometry_tests.py @@ -16,11 +16,12 @@ # 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 import ifcopenshell.geom import ifcopenshell.util.shape import test.bootstrap -import numpy as np from ifcopenshell.util.shape_builder import ShapeBuilder, V diff --git a/src/ifcopenshell-python/test/geom/polyhedral_shapes.py b/src/ifcopenshell-python/test/geom/polyhedral_shapes.py index 2e58809f71..07ed5bf6e6 100644 --- a/src/ifcopenshell-python/test/geom/polyhedral_shapes.py +++ b/src/ifcopenshell-python/test/geom/polyhedral_shapes.py @@ -1,11 +1,10 @@ import collections import numpy as np -import ifcopenshell -import ifcopenshell.geom - import pytest +import ifcopenshell +import ifcopenshell.geom from test.bootstrap import file diff --git a/src/ifcopenshell-python/test/geom/settings.py b/src/ifcopenshell-python/test/geom/settings.py index c4e24b2027..3ede93b941 100644 --- a/src/ifcopenshell-python/test/geom/settings.py +++ b/src/ifcopenshell-python/test/geom/settings.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import numpy as np + import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.geometry @@ -24,7 +25,6 @@ import ifcopenshell.api.profile import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.geom -import ifcopenshell.geom import ifcopenshell.util.unit import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcopenshell-python/test/geom/stats.py b/src/ifcopenshell-python/test/geom/stats.py index fd0cd8e337..9e2a9b2985 100644 --- a/src/ifcopenshell-python/test/geom/stats.py +++ b/src/ifcopenshell-python/test/geom/stats.py @@ -1,7 +1,9 @@ import os + +import pytest + import ifcopenshell from ifcopenshell.geom.stats import StatsCollector -import pytest @pytest.mark.parametrize( diff --git a/src/ifcopenshell-python/test/geom/test_sweeps.py b/src/ifcopenshell-python/test/geom/test_sweeps.py index d77faec540..ac2b2faf6f 100644 --- a/src/ifcopenshell-python/test/geom/test_sweeps.py +++ b/src/ifcopenshell-python/test/geom/test_sweeps.py @@ -1,9 +1,10 @@ import pathlib from collections.abc import Sequence -import ifcopenshell import pytest +import ifcopenshell + def _bbox_from_vertices(verts: list[tuple[float, float, float]]): if not verts: diff --git a/src/ifcopenshell-python/test/global_id_updates.py b/src/ifcopenshell-python/test/global_id_updates.py index 40b548f8c6..c128eef4a5 100644 --- a/src/ifcopenshell-python/test/global_id_updates.py +++ b/src/ifcopenshell-python/test/global_id_updates.py @@ -1,4 +1,5 @@ import pytest + import ifcopenshell import ifcopenshell.guid diff --git a/src/ifcopenshell-python/test/instance_string_formatting.py b/src/ifcopenshell-python/test/instance_string_formatting.py index 2d85e99d26..6f5a096a57 100644 --- a/src/ifcopenshell-python/test/instance_string_formatting.py +++ b/src/ifcopenshell-python/test/instance_string_formatting.py @@ -1,4 +1,5 @@ import pytest + import ifcopenshell import ifcopenshell.guid diff --git a/src/ifcopenshell-python/test/test_create_shape.py b/src/ifcopenshell-python/test/test_create_shape.py index bc743217bf..dfcb68c7be 100644 --- a/src/ifcopenshell-python/test/test_create_shape.py +++ b/src/ifcopenshell-python/test/test_create_shape.py @@ -3,8 +3,10 @@ import itertools import multiprocessing import operator import os +from typing import get_args + import pytest -import test.bootstrap + import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.owner.settings @@ -14,8 +16,8 @@ import ifcopenshell.api.unit import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.shape +import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder -from typing import get_args fn = os.path.join(os.path.dirname(__file__), "fixtures/ColumnPSetsOfSets.ifc") diff --git a/src/ifcopenshell-python/test/test_entity_instance.py b/src/ifcopenshell-python/test/test_entity_instance.py index 6af57585d0..c031796b9f 100644 --- a/src/ifcopenshell-python/test/test_entity_instance.py +++ b/src/ifcopenshell-python/test/test_entity_instance.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell import ifcopenshell.api import ifcopenshell.util.element +import test.bootstrap class TestGetInfo2(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/test_file.py b/src/ifcopenshell-python/test/test_file.py index 31c77cd6e6..062ef88b9f 100644 --- a/src/ifcopenshell-python/test/test_file.py +++ b/src/ifcopenshell-python/test/test_file.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell import ifcopenshell.api import ifcopenshell.util.element +import test.bootstrap class TestTransaction(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/test_file_inverse.py b/src/ifcopenshell-python/test/test_file_inverse.py index 9d385ff0f0..d1708bc2bb 100644 --- a/src/ifcopenshell-python/test/test_file_inverse.py +++ b/src/ifcopenshell-python/test/test_file_inverse.py @@ -1,9 +1,11 @@ import gc -import sys -import pytest -import pprint -import weakref import itertools +import pprint +import sys +import weakref + +import pytest + import ifcopenshell import ifcopenshell.api diff --git a/src/ifcopenshell-python/test/test_guid.py b/src/ifcopenshell-python/test/test_guid.py index 53af52bbed..ff361a2d77 100644 --- a/src/ifcopenshell-python/test/test_guid.py +++ b/src/ifcopenshell-python/test/test_guid.py @@ -20,15 +20,14 @@ # IMPORTS # ---------------------------------------------------------------- +import string from functools import reduce from unittest import TestCase -from pytest import mark -from pytest import fixture from uuid import uuid4 -import string -from ifcopenshell.guid import compress -from ifcopenshell.guid import expand +from pytest import fixture, mark + +from ifcopenshell.guid import compress, expand # ---------------------------------------------------------------- # FIXTURES diff --git a/src/ifcopenshell-python/test/test_mvd_info.py b/src/ifcopenshell-python/test/test_mvd_info.py index 80fe2f2154..7ba33481e6 100644 --- a/src/ifcopenshell-python/test/test_mvd_info.py +++ b/src/ifcopenshell-python/test/test_mvd_info.py @@ -1,5 +1,7 @@ import os + import pytest + import ifcopenshell from ifcopenshell.util import mvd_info from ifcopenshell.util.mvd_info import parse_mvd diff --git a/src/ifcopenshell-python/test/test_open.py b/src/ifcopenshell-python/test/test_open.py index 99f312c76e..7525adaa72 100644 --- a/src/ifcopenshell-python/test/test_open.py +++ b/src/ifcopenshell-python/test/test_open.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . from pathlib import Path -import pytest -import ifcopenshell +import pytest + +import ifcopenshell TEST_FILE_DIR = Path(__file__).parent / "../../../test/input/" diff --git a/src/ifcopenshell-python/test/test_package.py b/src/ifcopenshell-python/test/test_package.py index 137c1079bf..b251e081c7 100644 --- a/src/ifcopenshell-python/test/test_package.py +++ b/src/ifcopenshell-python/test/test_package.py @@ -17,11 +17,12 @@ # along with IfcOpenShell. If not, see . import http.client -from pathlib import Path from collections.abc import Sequence -from typing_extensions import assert_never +from pathlib import Path from urllib.parse import urlparse +from typing_extensions import assert_never + try: from bs4 import BeautifulSoup except: diff --git a/src/ifcopenshell-python/test/test_rules.py b/src/ifcopenshell-python/test/test_rules.py index a54e98ed68..9754405626 100644 --- a/src/ifcopenshell-python/test/test_rules.py +++ b/src/ifcopenshell-python/test/test_rules.py @@ -1,12 +1,12 @@ +import glob import os import sys -import glob import pytest import tabulate -import ifcopenshell.validate import ifcopenshell.express.rule_executor +import ifcopenshell.validate @pytest.mark.parametrize( diff --git a/src/ifcopenshell-python/test/test_sql.py b/src/ifcopenshell-python/test/test_sql.py index 6d6c85786c..d0f11792c4 100644 --- a/src/ifcopenshell-python/test/test_sql.py +++ b/src/ifcopenshell-python/test/test_sql.py @@ -17,11 +17,13 @@ # along with IfcOpenShell. If not, see . import tempfile -import ifcpatch -import ifcopenshell from pathlib import Path + +import ifcpatch from ifcpatch.recipes import Ifc2Sql +import ifcopenshell + TEST_FILE = Path(__file__).parent / "files" / "basic.ifc" SQLITE_PATH = None diff --git a/src/ifcopenshell-python/test/test_stream.py b/src/ifcopenshell-python/test/test_stream.py index e425fd1583..c463c3ccca 100644 --- a/src/ifcopenshell-python/test/test_stream.py +++ b/src/ifcopenshell-python/test/test_stream.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest -import test.bootstrap -import ifcopenshell from pathlib import Path +import pytest + +import ifcopenshell +import test.bootstrap + TEST_FILE = Path(__file__).parent / "files" / "basic.ifc" diff --git a/src/ifcopenshell-python/test/test_streaming_rocksdb_and_simpletyperefs.py b/src/ifcopenshell-python/test/test_streaming_rocksdb_and_simpletyperefs.py index b0bfb2925a..32ea728df9 100644 --- a/src/ifcopenshell-python/test/test_streaming_rocksdb_and_simpletyperefs.py +++ b/src/ifcopenshell-python/test/test_streaming_rocksdb_and_simpletyperefs.py @@ -19,10 +19,12 @@ import gc import os import struct -import pytest -import ifcopenshell import tempfile +import pytest + +import ifcopenshell + try: import psutil except ImportError: diff --git a/src/ifcopenshell-python/test/test_validate.py b/src/ifcopenshell-python/test/test_validate.py index 16b12f223d..d3eff78f33 100644 --- a/src/ifcopenshell-python/test/test_validate.py +++ b/src/ifcopenshell-python/test/test_validate.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import os import glob +import os import pytest diff --git a/src/ifcopenshell-python/test/test_validate_rocksdb.py b/src/ifcopenshell-python/test/test_validate_rocksdb.py index 203d0ed2a4..6cfde4fddd 100644 --- a/src/ifcopenshell-python/test/test_validate_rocksdb.py +++ b/src/ifcopenshell-python/test/test_validate_rocksdb.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import os import glob +import os import tempfile import time diff --git a/src/ifcopenshell-python/test/test_wall_opening.py b/src/ifcopenshell-python/test/test_wall_opening.py index 0e8c0d42cf..812a5420e2 100644 --- a/src/ifcopenshell-python/test/test_wall_opening.py +++ b/src/ifcopenshell-python/test/test_wall_opening.py @@ -16,17 +16,17 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import os -import re import glob import json -import typing +import os +import re import shutil import subprocess - +import typing from dataclasses import dataclass, field import pytest + import ifcopenshell import ifcopenshell.guid import ifcopenshell.template diff --git a/src/ifcopenshell-python/test/test_write.py b/src/ifcopenshell-python/test/test_write.py index e7a1f76b7c..1e55221d54 100644 --- a/src/ifcopenshell-python/test/test_write.py +++ b/src/ifcopenshell-python/test/test_write.py @@ -18,9 +18,10 @@ import tempfile from pathlib import Path -import pytest -import ifcopenshell +import pytest + +import ifcopenshell TEST_FILE_DIR = Path(__file__).parent / "../../../test/input/" diff --git a/src/ifcopenshell-python/test/typing_tests.py b/src/ifcopenshell-python/test/typing_tests.py index c535960348..5b2d789613 100644 --- a/src/ifcopenshell-python/test/typing_tests.py +++ b/src/ifcopenshell-python/test/typing_tests.py @@ -22,10 +22,12 @@ Those tests are not automatically checked and just there to make sure overloads """ -import ifcopenshell from typing import Union + from typing_extensions import assert_type +import ifcopenshell + def ifcopenshell_open_test(str_: str, bool_: bool): ifc_file = ifcopenshell.open(str_) diff --git a/src/ifcopenshell-python/test/util/scripts/test_validate_stub.py b/src/ifcopenshell-python/test/util/scripts/test_validate_stub.py index 86d18bd356..82b9e02adc 100644 --- a/src/ifcopenshell-python/test/util/scripts/test_validate_stub.py +++ b/src/ifcopenshell-python/test/util/scripts/test_validate_stub.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import pytest + import ifcopenshell.util.scripts.validate_stub as subject diff --git a/src/ifcopenshell-python/test/util/test_attribute.py b/src/ifcopenshell-python/test/util/test_attribute.py index 494374f565..4b04e8a678 100644 --- a/src/ifcopenshell-python/test/util/test_attribute.py +++ b/src/ifcopenshell-python/test/util/test_attribute.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import pytest + +import ifcopenshell import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.attribute as subject diff --git a/src/ifcopenshell-python/test/util/test_brick.py b/src/ifcopenshell-python/test/util/test_brick.py index 61a9f413af..d0cffeaba9 100644 --- a/src/ifcopenshell-python/test/util/test_brick.py +++ b/src/ifcopenshell-python/test/util/test_brick.py @@ -17,10 +17,11 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api.root import ifcopenshell.api.type import ifcopenshell.util.brick as subject +import test.bootstrap class TestGetBrickTypeIFC4(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/util/test_classification.py b/src/ifcopenshell-python/test/util/test_classification.py index 29820dc665..e006773d2a 100644 --- a/src/ifcopenshell-python/test/util/test_classification.py +++ b/src/ifcopenshell-python/test/util/test_classification.py @@ -16,11 +16,11 @@ # 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.classification import ifcopenshell.api.root import ifcopenshell.api.type -import ifcopenshell.api.classification import ifcopenshell.util.classification as subject +import test.bootstrap class TestGetReferences(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/util/test_date.py b/src/ifcopenshell-python/test/util/test_date.py index b57b2d158b..dd47244ba7 100644 --- a/src/ifcopenshell-python/test/util/test_date.py +++ b/src/ifcopenshell-python/test/util/test_date.py @@ -17,8 +17,9 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.util.date as subject +import test.bootstrap class TestReadableIFCDuration: diff --git a/src/ifcopenshell-python/test/util/test_element.py b/src/ifcopenshell-python/test/util/test_element.py index 2c62c6d7c5..1308e957c1 100644 --- a/src/ifcopenshell-python/test/util/test_element.py +++ b/src/ifcopenshell-python/test/util/test_element.py @@ -16,30 +16,31 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import pytest + +import ifcopenshell.api.aggregate +import ifcopenshell.api.classification +import ifcopenshell.api.context import ifcopenshell.api.control import ifcopenshell.api.cost -import ifcopenshell.api.profile -import pytest -import test.bootstrap +import ifcopenshell.api.document import ifcopenshell.api.feature -import ifcopenshell.api.pset -import ifcopenshell.api.root -import ifcopenshell.api.type -import ifcopenshell.api.nest -import ifcopenshell.api.style +import ifcopenshell.api.geometry +import ifcopenshell.api.group import ifcopenshell.api.layer import ifcopenshell.api.library -import ifcopenshell.api.context -import ifcopenshell.api.spatial -import ifcopenshell.api.geometry -import ifcopenshell.api.sequence -import ifcopenshell.api.classification import ifcopenshell.api.material -import ifcopenshell.api.document -import ifcopenshell.api.aggregate -import ifcopenshell.api.group +import ifcopenshell.api.nest +import ifcopenshell.api.profile +import ifcopenshell.api.pset +import ifcopenshell.api.root +import ifcopenshell.api.sequence +import ifcopenshell.api.spatial +import ifcopenshell.api.style +import ifcopenshell.api.type import ifcopenshell.guid import ifcopenshell.util.element as subject +import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcopenshell-python/test/util/test_file.py b/src/ifcopenshell-python/test/util/test_file.py index 6517bbd5d8..b7b34cd097 100644 --- a/src/ifcopenshell-python/test/util/test_file.py +++ b/src/ifcopenshell-python/test/util/test_file.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest -import test.bootstrap -import ifcopenshell.util.file as subject import tempfile import zipfile from pathlib import Path +import pytest + +import ifcopenshell.util.file as subject +import test.bootstrap HEADER_EXTRACTOR_TEST_FILE_STR = """ ISO-10303-21; diff --git a/src/ifcopenshell-python/test/util/test_geolocation.py b/src/ifcopenshell-python/test/util/test_geolocation.py index 59f70fcd7a..92775963c3 100644 --- a/src/ifcopenshell-python/test/util/test_geolocation.py +++ b/src/ifcopenshell-python/test/util/test_geolocation.py @@ -17,11 +17,12 @@ # along with IfcOpenShell. If not, see . import numpy as np -import test.bootstrap -import ifcopenshell.api.root + import ifcopenshell.api.context import ifcopenshell.api.georeference +import ifcopenshell.api.root import ifcopenshell.util.geolocation as subject +import test.bootstrap class TestXYZ2ENH(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/util/test_placement.py b/src/ifcopenshell-python/test/util/test_placement.py index af428660fd..8a26c52ee5 100644 --- a/src/ifcopenshell-python/test/util/test_placement.py +++ b/src/ifcopenshell-python/test/util/test_placement.py @@ -17,8 +17,8 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import test.bootstrap import ifcopenshell.util.placement as subject +import test.bootstrap class TestGetStoreyElevationIFC4(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/util/test_pset.py b/src/ifcopenshell-python/test/util/test_pset.py index c99a0b86a6..ccfbcc4970 100644 --- a/src/ifcopenshell-python/test/util/test_pset.py +++ b/src/ifcopenshell-python/test/util/test_pset.py @@ -17,8 +17,8 @@ # along with IfcOpenShell. If not, see . """Run this test from src/ifcopenshell-python folder: pytest --durations=0 ifcopenshell/util/test_pset.py""" -from ifcopenshell.util import pset from ifcopenshell import util +from ifcopenshell.util import pset from ifcopenshell.util.pset import ApplicableEntity diff --git a/src/ifcopenshell-python/test/util/test_schema.py b/src/ifcopenshell-python/test/util/test_schema.py index aa24de6360..cb45b6e8db 100644 --- a/src/ifcopenshell-python/test/util/test_schema.py +++ b/src/ifcopenshell-python/test/util/test_schema.py @@ -16,9 +16,9 @@ # 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.project import ifcopenshell.util.schema as subject +import test.bootstrap class TestMigrator(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/util/test_selector.py b/src/ifcopenshell-python/test/util/test_selector.py index 41bf0649e7..e4de678529 100644 --- a/src/ifcopenshell-python/test/util/test_selector.py +++ b/src/ifcopenshell-python/test/util/test_selector.py @@ -16,24 +16,25 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import numpy as np import pytest -import test.bootstrap -import ifcopenshell.api.spatial -import ifcopenshell.api.root -import ifcopenshell.api.unit -import ifcopenshell.api.classification -import ifcopenshell.api.pset -import ifcopenshell.api.type -import ifcopenshell.api.material -import ifcopenshell.api.geometry + import ifcopenshell.api.aggregate +import ifcopenshell.api.classification +import ifcopenshell.api.geometry import ifcopenshell.api.group +import ifcopenshell.api.material +import ifcopenshell.api.pset +import ifcopenshell.api.root import ifcopenshell.api.sequence +import ifcopenshell.api.spatial +import ifcopenshell.api.type +import ifcopenshell.api.unit import ifcopenshell.util.element -import ifcopenshell.util.selector as subject import ifcopenshell.util.placement import ifcopenshell.util.pset -import numpy as np +import ifcopenshell.util.selector as subject +import test.bootstrap class TestFormat: diff --git a/src/ifcopenshell-python/test/util/test_shape_builder.py b/src/ifcopenshell-python/test/util/test_shape_builder.py index a46c014fa7..87499b3288 100644 --- a/src/ifcopenshell-python/test/util/test_shape_builder.py +++ b/src/ifcopenshell-python/test/util/test_shape_builder.py @@ -16,27 +16,29 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from math import degrees, radians +from typing import Any, Union + +import numpy as np +import pytest + +import ifcopenshell.api import ifcopenshell.geom import ifcopenshell.util import ifcopenshell.util.shape -import pytest import test.bootstrap -import ifcopenshell.api -import numpy as np from ifcopenshell.util.shape_builder import ( ShapeBuilder, - is_x, - np_rotation_matrix, - np_to_3d, - np_angle, V, + is_x, + np_angle, np_angle_signed, - np_normal, np_intersect_line_line, np_matrix_to_euler, + np_normal, + np_rotation_matrix, + np_to_3d, ) -from math import degrees, radians -from typing import Any, Union class TestMathutilsCompatibleMethods(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/util/test_system.py b/src/ifcopenshell-python/test/util/test_system.py index 3e8c6d0159..f38971351a 100644 --- a/src/ifcopenshell-python/test/util/test_system.py +++ b/src/ifcopenshell-python/test/util/test_system.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from typing import get_args + import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.api.system import ifcopenshell.util.schema import ifcopenshell.util.system as subject -from typing import get_args +import test.bootstrap class TestValidateGroupTypes: diff --git a/src/ifcopenshell-python/test/util/test_type.py b/src/ifcopenshell-python/test/util/test_type.py index 6043238e73..54f0e6da16 100644 --- a/src/ifcopenshell-python/test/util/test_type.py +++ b/src/ifcopenshell-python/test/util/test_type.py @@ -17,9 +17,10 @@ # along with IfcOpenShell. If not, see . import pytest -import test.bootstrap + import ifcopenshell.api import ifcopenshell.util.type as subject +import test.bootstrap class TestGetApplicableTypes(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/util/test_unit.py b/src/ifcopenshell-python/test/util/test_unit.py index 6e28a28e70..5deef1884a 100644 --- a/src/ifcopenshell-python/test/util/test_unit.py +++ b/src/ifcopenshell-python/test/util/test_unit.py @@ -16,18 +16,20 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import test.bootstrap +from math import pi + import numpy as np + import ifcopenshell.api.context -import ifcopenshell.api.unit -import ifcopenshell.api.root import ifcopenshell.api.georeference import ifcopenshell.api.pset +import ifcopenshell.api.root +import ifcopenshell.api.unit import ifcopenshell.util.element import ifcopenshell.util.geolocation import ifcopenshell.util.unit as subject +import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder -from math import pi class TestCacheUnits(test.bootstrap.IFC4): diff --git a/src/ifcopenshell-python/test/util/test_unit_conversion.py b/src/ifcopenshell-python/test/util/test_unit_conversion.py index fa95260607..a3c8b702ef 100644 --- a/src/ifcopenshell-python/test/util/test_unit_conversion.py +++ b/src/ifcopenshell-python/test/util/test_unit_conversion.py @@ -16,9 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . import pathlib -import pytest -import ifcopenshell.util.unit + import numpy as np +import pytest + +import ifcopenshell.util.unit UNITS_FIXTURE_DIR = pathlib.Path(__file__).parent.parent / "fixtures" / "units" diff --git a/src/ifcpatch/bootstrap.py b/src/ifcpatch/bootstrap.py index 263da876ec..368d7b5cff 100644 --- a/src/ifcpatch/bootstrap.py +++ b/src/ifcpatch/bootstrap.py @@ -16,11 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import toposort -import ifcpatch -import ifcpatch.recipes -import ifcopenshell.util.selector import ifcopenshell.util.element import ifcopenshell.util.schema - +import ifcopenshell.util.selector import ifcpatch.__main__ +import ifcpatch.recipes +import toposort + +import ifcpatch diff --git a/src/ifcpatch/ifcpatch/__init__.py b/src/ifcpatch/ifcpatch/__init__.py index 91acba3bd4..7ea668d55e 100644 --- a/src/ifcpatch/ifcpatch/__init__.py +++ b/src/ifcpatch/ifcpatch/__init__.py @@ -18,22 +18,22 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import os -import shutil -import sys -import ifcopenshell -import logging -import typing -import inspect import collections import importlib import importlib.util +import inspect +import logging +import os import re -from pathlib import Path -from typing import Union, Optional, Any, TypedDict -from typing_extensions import NotRequired +import shutil +import sys +import typing from collections.abc import Sequence +from pathlib import Path +from typing import Any, Optional, TypedDict, Union +import ifcopenshell +from typing_extensions import NotRequired __version__ = version = "0.0.0" diff --git a/src/ifcpatch/ifcpatch/__main__.py b/src/ifcpatch/ifcpatch/__main__.py index 178259694d..ae01f9b594 100644 --- a/src/ifcpatch/ifcpatch/__main__.py +++ b/src/ifcpatch/ifcpatch/__main__.py @@ -19,9 +19,11 @@ # along with IfcPatch. If not, see . import argparse -import ifcpatch + import ifcopenshell +import ifcpatch + parser = argparse.ArgumentParser(description="Patches IFC files to fix badly formatted data") parser.add_argument("-i", "--input", type=str, required=True, help="The IFC file to patch") parser.add_argument("-o", "--output", type=str, help="The output file to save the patched IFC") diff --git a/src/ifcpatch/ifcpatch/recipes/AGS2IFC.py b/src/ifcpatch/ifcpatch/recipes/AGS2IFC.py index 283d83a6b7..8067d2e718 100644 --- a/src/ifcpatch/ifcpatch/recipes/AGS2IFC.py +++ b/src/ifcpatch/ifcpatch/recipes/AGS2IFC.py @@ -17,22 +17,23 @@ # along with IfcPatch. If not, see . -import os import csv -import numpy as np +import os +from itertools import cycle + import ifcopenshell -import ifcopenshell.api.pset -import ifcopenshell.api.root -import ifcopenshell.api.unit -import ifcopenshell.api.style +import ifcopenshell.api.aggregate import ifcopenshell.api.context import ifcopenshell.api.document -import ifcopenshell.api.project -import ifcopenshell.api.spatial import ifcopenshell.api.geometry -import ifcopenshell.api.aggregate +import ifcopenshell.api.project +import ifcopenshell.api.pset +import ifcopenshell.api.root +import ifcopenshell.api.spatial +import ifcopenshell.api.style +import ifcopenshell.api.unit import ifcopenshell.util.shape_builder -from itertools import cycle +import numpy as np from ifcopenshell.util.shape_builder import V diff --git a/src/ifcpatch/ifcpatch/recipes/AddGeometricRepresentationToAlignment.py b/src/ifcpatch/ifcpatch/recipes/AddGeometricRepresentationToAlignment.py index b4c9cd2b6c..65f48f899d 100644 --- a/src/ifcpatch/ifcpatch/recipes/AddGeometricRepresentationToAlignment.py +++ b/src/ifcpatch/ifcpatch/recipes/AddGeometricRepresentationToAlignment.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +import typing +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.util.alignment -import ifcpatch -from logging import Logger -import typing -from typing import Union +import ifcpatch class Patcher(ifcpatch.BasePatcher): diff --git a/src/ifcpatch/ifcpatch/recipes/AddLinearPlacementFallbackPosition.py b/src/ifcpatch/ifcpatch/recipes/AddLinearPlacementFallbackPosition.py index 256dd8f5aa..9ec3f52a6a 100644 --- a/src/ifcpatch/ifcpatch/recipes/AddLinearPlacementFallbackPosition.py +++ b/src/ifcpatch/ifcpatch/recipes/AddLinearPlacementFallbackPosition.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +import typing +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.util.alignment -import ifcpatch -from logging import Logger -import typing -from typing import Union +import ifcpatch class Patcher(ifcpatch.BasePatcher): diff --git a/src/ifcpatch/ifcpatch/recipes/AddZeroLengthSegmentToAlignment.py b/src/ifcpatch/ifcpatch/recipes/AddZeroLengthSegmentToAlignment.py index aa6870939c..e1f6664cd0 100644 --- a/src/ifcpatch/ifcpatch/recipes/AddZeroLengthSegmentToAlignment.py +++ b/src/ifcpatch/ifcpatch/recipes/AddZeroLengthSegmentToAlignment.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +import typing +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.util.alignment -import ifcpatch -from logging import Logger -import typing -from typing import Union +import ifcpatch class Patcher(ifcpatch.BasePatcher): diff --git a/src/ifcpatch/ifcpatch/recipes/AssignConstituentFractions.py b/src/ifcpatch/ifcpatch/recipes/AssignConstituentFractions.py index 0989c6bd14..0b105a52f7 100644 --- a/src/ifcpatch/ifcpatch/recipes/AssignConstituentFractions.py +++ b/src/ifcpatch/ifcpatch/recipes/AssignConstituentFractions.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +from logging import Logger + import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.unit -from logging import Logger class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py b/src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py index e82f12c281..6b3554b192 100644 --- a/src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py +++ b/src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py @@ -16,17 +16,18 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +import typing +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.owner.settings -import ifcopenshell.util.pset import ifcopenshell.util.element +import ifcopenshell.util.pset import ifcopenshell.util.unit -import ifcpatch -from logging import Logger -import typing -from typing import Union +import ifcpatch LengthUnit = typing.Literal[ "ATTOMETER", diff --git a/src/ifcpatch/ifcpatch/recipes/ConvertPropertiesToQuantities.py b/src/ifcpatch/ifcpatch/recipes/ConvertPropertiesToQuantities.py index 74c28fb0e3..a9df2c93c4 100644 --- a/src/ifcpatch/ifcpatch/recipes/ConvertPropertiesToQuantities.py +++ b/src/ifcpatch/ifcpatch/recipes/ConvertPropertiesToQuantities.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset -import ifcopenshell.util.pset import ifcopenshell.util.element -from logging import Logger -from typing import Union +import ifcopenshell.util.pset class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/ExtractElements.py b/src/ifcpatch/ifcpatch/recipes/ExtractElements.py index 6f70a410b3..31f1fb4140 100644 --- a/src/ifcpatch/ifcpatch/recipes/ExtractElements.py +++ b/src/ifcpatch/ifcpatch/recipes/ExtractElements.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.project import ifcopenshell.guid import ifcopenshell.util.selector + import ifcpatch -from typing import Union -from logging import Logger class Patcher(ifcpatch.BasePatcher): diff --git a/src/ifcpatch/ifcpatch/recipes/ExtractPropertiesToSQLite.py b/src/ifcpatch/ifcpatch/recipes/ExtractPropertiesToSQLite.py index 226052ae19..5df98c4ab4 100644 --- a/src/ifcpatch/ifcpatch/recipes/ExtractPropertiesToSQLite.py +++ b/src/ifcpatch/ifcpatch/recipes/ExtractPropertiesToSQLite.py @@ -17,11 +17,12 @@ # along with IfcPatch. If not, see . +import json import os import re -import json -import time import tempfile +import time + import ifcopenshell import ifcopenshell.util.element diff --git a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py index 28860b58dc..cf602bab0a 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py +++ b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py @@ -22,13 +22,14 @@ import math import os from typing import Union -import ifcpatch import ifcopenshell import ifcopenshell.geom import ifcopenshell.util.element import ifcopenshell.util.schema import ifcopenshell.util.unit +import ifcpatch + class Patcher(ifcpatch.BasePatcher): def __init__(self, file: ifcopenshell.file, logger: Union[logging.Logger, None] = None): diff --git a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py index d19bc8b26c..c6ea871c7b 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py +++ b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py @@ -17,6 +17,7 @@ # along with IfcPatch. If not, see . import logging + import ifcopenshell @@ -67,11 +68,11 @@ class Patcher: self.filepath = filepath def patch(self) -> None: - import bpy import bonsai.tool as tool + import bpy import ifcopenshell import ifcopenshell.util.element - from mathutils import Vector, Matrix + from mathutils import Matrix, Vector if len(bpy.data.objects) > 0: bpy.data.batch_remove(bpy.data.objects) diff --git a/src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py b/src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py index e18b4eed39..d6dc49be18 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py +++ b/src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py @@ -17,12 +17,13 @@ # along with IfcPatch. If not, see . +import logging +from typing import Optional + import ifcopenshell import ifcopenshell.util.schema import ifcopenshell.util.shape_builder import ifcopenshell.util.unit -import logging -from typing import Optional class Patcher: @@ -110,9 +111,9 @@ class Patcher: self.should_create_edges = should_create_edges def patch(self) -> None: - import bpy import bmesh import bonsai.tool as tool + import bpy import ifcopenshell.util.shape_builder bpy.context.scene.BIMProjectProperties.should_use_native_meshes = True @@ -161,15 +162,15 @@ class Patcher: self.file = tool.Ifc.get() def create_edges(self, obj): - import bpy import bmesh import bonsai.tool as tool + import bpy + import ifcopenshell.api.geometry + import ifcopenshell.api.root + import ifcopenshell.api.spatial + import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation - import ifcopenshell.api.root - import ifcopenshell.api.type - import ifcopenshell.api.spatial - import ifcopenshell.api.geometry element = tool.Ifc.get_entity(obj) data = obj.data @@ -229,16 +230,17 @@ class Patcher: def create_face_sampleable_object(self, obj): # No sharp faces - import bpy + from math import degrees + import bmesh import bonsai.tool as tool + import bpy + import ifcopenshell.api.geometry + import ifcopenshell.api.root + import ifcopenshell.api.spatial + import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation - import ifcopenshell.api.root - import ifcopenshell.api.type - import ifcopenshell.api.spatial - import ifcopenshell.api.geometry - from math import degrees print("working on ", obj.name) element = tool.Ifc.get_entity(obj) @@ -278,16 +280,17 @@ class Patcher: def create_edge_sampleable_object(self, obj): # This is crazy but we need a sharp face per island - import bpy + from math import degrees, radians, sin + import bmesh import bonsai.tool as tool + import bpy + import ifcopenshell.api.geometry + import ifcopenshell.api.root + import ifcopenshell.api.spatial + import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation - import ifcopenshell.api.root - import ifcopenshell.api.type - import ifcopenshell.api.spatial - import ifcopenshell.api.geometry - from math import degrees, radians, sin from mathutils import Matrix # Get the active object (assumed to have a mesh) diff --git a/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py b/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py index a673bf377c..872b1a0091 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py +++ b/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py @@ -17,9 +17,10 @@ # along with IfcPatch. If not, see . -import ifcopenshell import logging +import ifcopenshell + class Patcher: def __init__(self, file: None, logger: logging.Logger, filepath: str, is_solid: bool = True): @@ -79,10 +80,11 @@ class Patcher: self.is_solid = is_solid def patch(self) -> None: - import bpy + from math import degrees + import bmesh import bonsai.tool as tool - from math import degrees + import bpy props = tool.Project.get_project_props() props.should_use_native_meshes = True diff --git a/src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py b/src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py index 1e8ac55b7c..74744f3487 100644 --- a/src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py +++ b/src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py @@ -17,16 +17,18 @@ # along with IfcPatch. If not, see . +import itertools +import json +import logging +import multiprocessing import os import re -import json -import time import tempfile +import time import typing -import itertools -import logging -import numpy as np -import multiprocessing +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Union + import ifcopenshell import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W @@ -37,15 +39,16 @@ import ifcopenshell.util.representation import ifcopenshell.util.schema import ifcopenshell.util.shape import ifcopenshell.util.unit -import ifcpatch -from pathlib import Path -from typing import Any, TYPE_CHECKING, Literal, Union +import numpy as np from typing_extensions import assert_never +import ifcpatch + SQLTypes = typing.Literal["SQLite", "MySQL"] if TYPE_CHECKING: import sqlite3 + import mysql.connector import mysql.connector.abstracts else: diff --git a/src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py b/src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py index fe82b33cfb..2c8385066b 100644 --- a/src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py +++ b/src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +from logging import Logger +from typing import Any + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.type import ifcopenshell.util.element -from logging import Logger -from typing import Any class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/MergeProjects.py b/src/ifcpatch/ifcpatch/recipes/MergeProjects.py index 9372f1d75f..ffb8e2e65b 100644 --- a/src/ifcpatch/ifcpatch/recipes/MergeProjects.py +++ b/src/ifcpatch/ifcpatch/recipes/MergeProjects.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import numpy as np +from logging import Logger +from typing import Union + import ifcopenshell -import ifcopenshell.util.unit import ifcopenshell.util.element import ifcopenshell.util.geolocation +import ifcopenshell.util.unit +import numpy as np + from ifcpatch.recipes.SetFalseOrigin import Patcher as SetFalseOrigin -from typing import Union -from logging import Logger class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/MergeStyles.py b/src/ifcpatch/ifcpatch/recipes/MergeStyles.py index 5c1fa2f4fa..c6df956bbe 100644 --- a/src/ifcpatch/ifcpatch/recipes/MergeStyles.py +++ b/src/ifcpatch/ifcpatch/recipes/MergeStyles.py @@ -16,12 +16,14 @@ # 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 -import ifcpatch import logging from typing import Union +import ifcopenshell +import ifcopenshell.util.element + +import ifcpatch + class Patcher(ifcpatch.BasePatcher): def __init__(self, file: ifcopenshell.file, logger: Union[logging.Logger, None] = None): diff --git a/src/ifcpatch/ifcpatch/recipes/Migrate.py b/src/ifcpatch/ifcpatch/recipes/Migrate.py index 9f330e9016..6b5c18ff11 100644 --- a/src/ifcpatch/ifcpatch/recipes/Migrate.py +++ b/src/ifcpatch/ifcpatch/recipes/Migrate.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +import typing +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.util.schema + import ifcpatch -import typing -from typing import Union -from logging import Logger class Patcher(ifcpatch.BasePatcher): diff --git a/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py b/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py index e147b783d2..a575fc4eac 100644 --- a/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py +++ b/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py @@ -17,10 +17,11 @@ # along with IfcPatch. If not, see . import math -import numpy as np +import typing + import ifcopenshell import ifcopenshell.util.placement -import typing +import numpy as np from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcpatch/ifcpatch/recipes/PatchStationReferentPosition.py b/src/ifcpatch/ifcpatch/recipes/PatchStationReferentPosition.py index 556c43a094..cd3a4fb523 100644 --- a/src/ifcpatch/ifcpatch/recipes/PatchStationReferentPosition.py +++ b/src/ifcpatch/ifcpatch/recipes/PatchStationReferentPosition.py @@ -1,11 +1,12 @@ +import typing +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.api.alignment import ifcopenshell.util.element -import ifcpatch -from logging import Logger -import typing -from typing import Union +import ifcpatch class Patcher(ifcpatch.BasePatcher): diff --git a/src/ifcpatch/ifcpatch/recipes/PurgeData.py b/src/ifcpatch/ifcpatch/recipes/PurgeData.py index 5ef1af6102..3c34927a63 100644 --- a/src/ifcpatch/ifcpatch/recipes/PurgeData.py +++ b/src/ifcpatch/ifcpatch/recipes/PurgeData.py @@ -17,9 +17,10 @@ # along with IfcPatch. If not, see . import datetime -import ifcopenshell from logging import Logger +import ifcopenshell + class Patcher: def __init__(self, file: ifcopenshell.file, logger: Logger): diff --git a/src/ifcpatch/ifcpatch/recipes/RecycleNonRootedElements.py b/src/ifcpatch/ifcpatch/recipes/RecycleNonRootedElements.py index 93ab762778..f66b375ae3 100644 --- a/src/ifcpatch/ifcpatch/recipes/RecycleNonRootedElements.py +++ b/src/ifcpatch/ifcpatch/recipes/RecycleNonRootedElements.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -from collections import deque import logging +from collections import deque + import ifcopenshell.util.element diff --git a/src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py b/src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py index 0c3475725d..8e0a8ab976 100644 --- a/src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py +++ b/src/ifcpatch/ifcpatch/recipes/RegenerateGlobalIds.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +from logging import Logger + import ifcopenshell import ifcopenshell.guid -from logging import Logger class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py b/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py index 0136a6de9c..641ba928b1 100644 --- a/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py +++ b/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py @@ -17,10 +17,11 @@ # along with IfcPatch. If not, see . import logging +from typing import Literal, Optional, Union + +import ifcopenshell import numpy as np import numpy.typing as npt -import ifcopenshell -from typing import Literal, Optional, Union class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/ResetSpatialElementLocations.py b/src/ifcpatch/ifcpatch/recipes/ResetSpatialElementLocations.py index fca2a5ee11..0f7c3933b4 100644 --- a/src/ifcpatch/ifcpatch/recipes/ResetSpatialElementLocations.py +++ b/src/ifcpatch/ifcpatch/recipes/ResetSpatialElementLocations.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import ifcopenshell import logging + +import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.util diff --git a/src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py b/src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py index e22f4787d1..72218e5ecf 100644 --- a/src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py +++ b/src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py @@ -16,11 +16,17 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +import typing + import ifcopenshell import ifcopenshell.api.georeference import ifcopenshell.util.geolocation -from ifcpatch.recipes import OffsetObjectPlacements, SetWorldCoordinateSystem, ResetSpatialElementLocations -import typing + +from ifcpatch.recipes import ( + OffsetObjectPlacements, + ResetSpatialElementLocations, + SetWorldCoordinateSystem, +) class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py b/src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py index d5c2e8da94..080da3ef7f 100644 --- a/src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py +++ b/src/ifcpatch/ifcpatch/recipes/SetWorldCoordinateSystem.py @@ -17,9 +17,10 @@ # along with IfcPatch. If not, see . import math -import numpy as np import typing +import numpy as np + class Patcher: def __init__( diff --git a/src/ifcpatch/ifcpatch/recipes/SplitByBuildingStorey.py b/src/ifcpatch/ifcpatch/recipes/SplitByBuildingStorey.py index 1d0b4c02f0..2f83fbb208 100644 --- a/src/ifcpatch/ifcpatch/recipes/SplitByBuildingStorey.py +++ b/src/ifcpatch/ifcpatch/recipes/SplitByBuildingStorey.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import os import logging -import ifcopenshell +import os from pathlib import Path from typing import Union +import ifcopenshell + class Patcher: def __init__(self, file: ifcopenshell.file, logger: logging.Logger, output_dir: Union[str, None] = None): @@ -45,10 +46,11 @@ class Patcher: self.output_dir = output_dir def patch(self) -> None: - import ifcopenshell import tempfile from shutil import copyfile + import ifcopenshell + if self.output_dir is None: output_dir = Path() else: diff --git a/src/ifcpatch/ifcpatch/recipes/TessellateElements.py b/src/ifcpatch/ifcpatch/recipes/TessellateElements.py index 0638568fe4..14ee80aec2 100644 --- a/src/ifcpatch/ifcpatch/recipes/TessellateElements.py +++ b/src/ifcpatch/ifcpatch/recipes/TessellateElements.py @@ -16,16 +16,17 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +import multiprocessing +from logging import Logger +from typing import Union + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.geom +import ifcopenshell.util.representation import ifcopenshell.util.selector import ifcopenshell.util.shape -import ifcopenshell.util.representation -import multiprocessing -from logging import Logger -from typing import Union class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/UnsharePsets.py b/src/ifcpatch/ifcpatch/recipes/UnsharePsets.py index fa7f1b083c..e7a1ad9eb1 100644 --- a/src/ifcpatch/ifcpatch/recipes/UnsharePsets.py +++ b/src/ifcpatch/ifcpatch/recipes/UnsharePsets.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . +from logging import Logger + import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.selector -from logging import Logger class Patcher: diff --git a/src/ifcpatch/test/bootstrap.py b/src/ifcpatch/test/bootstrap.py index d4d1d07c2e..7c6dfec558 100644 --- a/src/ifcpatch/test/bootstrap.py +++ b/src/ifcpatch/test/bootstrap.py @@ -16,11 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell import ifcopenshell.api -import ifcopenshell.api.project import ifcopenshell.api.owner.settings +import ifcopenshell.api.project +import pytest class IFC4X3: diff --git a/src/ifcpatch/test/test_ConvertLengthUnit.py b/src/ifcpatch/test/test_ConvertLengthUnit.py index 85e451110a..a4f586512f 100644 --- a/src/ifcpatch/test/test_ConvertLengthUnit.py +++ b/src/ifcpatch/test/test_ConvertLengthUnit.py @@ -16,12 +16,13 @@ # 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 ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.unit + import ifcpatch +import test.bootstrap class TestConvertLengthUnit(test.bootstrap.IFC4): diff --git a/src/ifcpatch/test/test_ConvertPropertiesToQuantities.py b/src/ifcpatch/test/test_ConvertPropertiesToQuantities.py index 830495f74f..d25dcd9d1d 100644 --- a/src/ifcpatch/test/test_ConvertPropertiesToQuantities.py +++ b/src/ifcpatch/test/test_ConvertPropertiesToQuantities.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcpatch import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.util.element + +import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_ExtractElements.py b/src/ifcpatch/test/test_ExtractElements.py index 8df5095256..fe2e9350dd 100644 --- a/src/ifcpatch/test/test_ExtractElements.py +++ b/src/ifcpatch/test/test_ExtractElements.py @@ -17,14 +17,16 @@ # along with IfcOpenShell. If not, see . import os -import pytest -import ifcpatch + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.api.spatial import ifcopenshell.util.element +import pytest + +import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_Ifc2Sql.py b/src/ifcpatch/test/test_Ifc2Sql.py index e5c40fe245..79257a69c3 100644 --- a/src/ifcpatch/test/test_Ifc2Sql.py +++ b/src/ifcpatch/test/test_Ifc2Sql.py @@ -17,7 +17,8 @@ # along with IfcOpenShell. If not, see . import tempfile -import ifcpatch +from pathlib import Path + import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.geometry @@ -28,7 +29,8 @@ import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape import ifcopenshell.util.shape_builder -from pathlib import Path + +import ifcpatch class TestIfc2Sql: diff --git a/src/ifcpatch/test/test_MergeDuplicateTypes.py b/src/ifcpatch/test/test_MergeDuplicateTypes.py index 37e37d39b4..439f7a0c06 100644 --- a/src/ifcpatch/test/test_MergeDuplicateTypes.py +++ b/src/ifcpatch/test/test_MergeDuplicateTypes.py @@ -17,8 +17,7 @@ # along with IfcOpenShell. If not, see . import os -import pytest -import ifcpatch + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry @@ -27,6 +26,9 @@ import ifcopenshell.api.root import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation +import pytest + +import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_MergeProject.py b/src/ifcpatch/test/test_MergeProject.py index 6384e98dd8..35fcb0719f 100644 --- a/src/ifcpatch/test/test_MergeProject.py +++ b/src/ifcpatch/test/test_MergeProject.py @@ -16,7 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcpatch +import tempfile +from pathlib import Path +from typing import Optional + import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.geometry @@ -29,11 +32,10 @@ import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape import ifcopenshell.util.shape_builder -import test.bootstrap -import tempfile import numpy as np -from pathlib import Path -from typing import Optional + +import ifcpatch +import test.bootstrap class TestMergeProjects(test.bootstrap.IFC4): diff --git a/src/ifcpatch/test/test_Migrate.py b/src/ifcpatch/test/test_Migrate.py index afefd9d3fb..319e01d91b 100644 --- a/src/ifcpatch/test/test_Migrate.py +++ b/src/ifcpatch/test/test_Migrate.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcpatch import ifcopenshell + +import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_RegenerateGlobalIds.py b/src/ifcpatch/test/test_RegenerateGlobalIds.py index 3cc4d9026f..e51e4c7a9c 100644 --- a/src/ifcpatch/test/test_RegenerateGlobalIds.py +++ b/src/ifcpatch/test/test_RegenerateGlobalIds.py @@ -17,12 +17,14 @@ # along with IfcOpenShell. If not, see . import os -import pytest -import ifcpatch + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.util.element +import pytest + +import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_ResetSpatialElementLocations.py b/src/ifcpatch/test/test_ResetSpatialElementLocations.py index 1ae7c63c6f..5d446c9128 100644 --- a/src/ifcpatch/test/test_ResetSpatialElementLocations.py +++ b/src/ifcpatch/test/test_ResetSpatialElementLocations.py @@ -16,16 +16,17 @@ # 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 ifcopenshell.api.aggregate import ifcopenshell.api.geometry import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.placement -import ifcpatch import numpy as np +import ifcpatch +import test.bootstrap + class TestResetSpatialElementLocations(test.bootstrap.IFC4): def test_run(self): diff --git a/src/ifcpatch/test/test_SetFalseOrigin.py b/src/ifcpatch/test/test_SetFalseOrigin.py index da4e621f04..1357ec39b0 100644 --- a/src/ifcpatch/test/test_SetFalseOrigin.py +++ b/src/ifcpatch/test/test_SetFalseOrigin.py @@ -16,7 +16,6 @@ # 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 ifcopenshell.api.aggregate import ifcopenshell.api.context @@ -27,9 +26,11 @@ import ifcopenshell.api.unit import ifcopenshell.util.element import ifcopenshell.util.geolocation import ifcopenshell.util.placement -import ifcpatch import numpy as np +import ifcpatch +import test.bootstrap + class TestSetFalseOrigin(test.bootstrap.IFC4): def test_run(self): diff --git a/src/ifcpatch/test/test_TesselateElements.py b/src/ifcpatch/test/test_TesselateElements.py index 83ea349137..7acdc899a7 100644 --- a/src/ifcpatch/test/test_TesselateElements.py +++ b/src/ifcpatch/test/test_TesselateElements.py @@ -16,19 +16,20 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.util.representation -import ifcpatch import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.geometry import ifcopenshell.api.profile import ifcopenshell.api.root import ifcopenshell.api.unit -import test.bootstrap import ifcopenshell.geom import ifcopenshell.util.element +import ifcopenshell.util.representation from ifcopenshell.util.shape_builder import ShapeBuilder +import ifcpatch +import test.bootstrap + class TestTesselateElements(test.bootstrap.IFC4): def test_run(self): diff --git a/src/ifcpatch/test/test_UnsharePsets.py b/src/ifcpatch/test/test_UnsharePsets.py index d2226223bc..fc40bdb74d 100644 --- a/src/ifcpatch/test/test_UnsharePsets.py +++ b/src/ifcpatch/test/test_UnsharePsets.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcpatch import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.geom import ifcopenshell.util.element + +import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_ifcpatch.py b/src/ifcpatch/test/test_ifcpatch.py index 90ff3937fa..4d7e98e55a 100644 --- a/src/ifcpatch/test/test_ifcpatch.py +++ b/src/ifcpatch/test/test_ifcpatch.py @@ -17,10 +17,12 @@ # along with IfcOpenShell. If not, see . import tempfile -import ifcopenshell.api.root -import ifcpatch from pathlib import Path +import ifcopenshell.api.root + +import ifcpatch + class Test: def test_parsing_docs(self): diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index c655baed52..660ea6f707 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -31,6 +31,7 @@ bl_info = { import importlib import logging import types + import bpy from bpy_extras.io_utils import ExportHelper @@ -141,12 +142,14 @@ imported_modules = make_node_list() reload_event = False from os.path import splitext + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.api.spatial import ifcopenshell.util.element + from ifcsverchok.ifcstore import SvIfcStore diff --git a/src/ifcsverchok/helper.py b/src/ifcsverchok/helper.py index 411809e025..d20626f365 100644 --- a/src/ifcsverchok/helper.py +++ b/src/ifcsverchok/helper.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . +from typing import Any, TypeVar, Union + import bpy import ifcopenshell import sverchok.core.sockets from sverchok.data_structure import zip_long_repeat -from typing import Any, Union, TypeVar T_socket = TypeVar("T_socket", bound=sverchok.core.sockets.SvSocketCommon) diff --git a/src/ifcsverchok/ifcstore.py b/src/ifcsverchok/ifcstore.py index e99a97aa6d..6fda9b2cea 100644 --- a/src/ifcsverchok/ifcstore.py +++ b/src/ifcsverchok/ifcstore.py @@ -16,13 +16,14 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . +from typing import Any, Union + import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.util.representation from ifcopenshell import template -from typing import Union, Any class SvIfcStore: diff --git a/src/ifcsverchok/nodes/ifc/add.py b/src/ifcsverchok/nodes/ifc/add.py index 5aab0da1f1..c6ed124eb7 100644 --- a/src/ifcsverchok/nodes/ifc/add.py +++ b/src/ifcsverchok/nodes/ifc/add.py @@ -18,11 +18,12 @@ import bpy import ifcopenshell +from bpy.props import StringProperty +from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode class SvIfcAdd(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/add_pset.py b/src/ifcsverchok/nodes/ifc/add_pset.py index 4e6f0d7674..3cd25cd4dc 100644 --- a/src/ifcsverchok/nodes/ifc/add_pset.py +++ b/src/ifcsverchok/nodes/ifc/add_pset.py @@ -16,22 +16,20 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . -import bpy - -import ifcopenshell -import sverchok.core.sockets -import ifcsverchok.helper -import ifcsverchok.helper as helper -from ifcsverchok.ifcstore import SvIfcStore - import json + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset - +import sverchok.core.sockets from bpy.props import StringProperty +from sverchok.data_structure import flatten_data, updateNode from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, flatten_data + +import ifcsverchok.helper +import ifcsverchok.helper as helper +from ifcsverchok.ifcstore import SvIfcStore class SvIfcAddPset(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/add_spatial_element.py b/src/ifcsverchok/nodes/ifc/add_spatial_element.py index c96b5e2d14..f53dc3fa16 100644 --- a/src/ifcsverchok/nodes/ifc/add_spatial_element.py +++ b/src/ifcsverchok/nodes/ifc/add_spatial_element.py @@ -16,27 +16,26 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . -import bpy - from itertools import chain +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.api.spatial import ifcopenshell.util.element -import ifcsverchok.helper -from ifcsverchok.ifcstore import SvIfcStore - from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode from sverchok.data_structure import ( - updateNode, + ensure_min_nesting, flatten_data, repeat_last_for_length, - ensure_min_nesting, + updateNode, ) +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper +from ifcsverchok.ifcstore import SvIfcStore class SvIfcAddSpatialElement(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/api.py b/src/ifcsverchok/nodes/ifc/api.py index af0b8766dd..ce75275db4 100644 --- a/src/ifcsverchok/nodes/ifc/api.py +++ b/src/ifcsverchok/nodes/ifc/api.py @@ -16,17 +16,19 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . +import logging +from typing import Any, Union + import bpy import ifcopenshell import ifcopenshell.api import sverchok.core.sockets +from bpy.props import EnumProperty, StringProperty +from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper -from bpy.props import StringProperty, EnumProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode -import logging -from typing import Union, Any logger = logging.getLogger("sverchok.ifc") diff --git a/src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py b/src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py index ab748ecd50..8d623ffe1e 100644 --- a/src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py +++ b/src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py @@ -19,31 +19,38 @@ from copy import deepcopy from decimal import Context from email.policy import default +from itertools import chain, cycle + +import bonsai.core.geometry as core +import bonsai.tool as tool import bpy import ifcopenshell -import ifcsverchok.helper import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.api.geometry import ifcopenshell.util.representation -from ifcsverchok.ifcstore import SvIfcStore -import bonsai.tool as tool -import bonsai.core.geometry as core +from bonsai.bim.module.root.prop import get_contexts from bpy.props import ( - StringProperty, + BoolProperty, EnumProperty, IntProperty, - BoolProperty, PointerProperty, + StringProperty, +) +from mathutils import Matrix +from sverchok.core.socket_data import sv_get_socket +from sverchok.data_structure import ( + fixed_iter, + flat_iter, + flatten_data, + node_id, + updateNode, + zip_long_repeat, ) from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, flatten_data, fixed_iter, flat_iter -from bonsai.bim.module.root.prop import get_contexts -from sverchok.data_structure import zip_long_repeat, node_id -from sverchok.core.socket_data import sv_get_socket -from itertools import chain, cycle -from mathutils import Matrix +import ifcsverchok.helper +from ifcsverchok.ifcstore import SvIfcStore class SvIfcBMeshToIfcRepr(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/by_guid.py b/src/ifcsverchok/nodes/ifc/by_guid.py index 43bea96c84..029b1b11a5 100644 --- a/src/ifcsverchok/nodes/ifc/by_guid.py +++ b/src/ifcsverchok/nodes/ifc/by_guid.py @@ -20,12 +20,13 @@ import itertools import bpy import ifcopenshell +from bpy.props import StringProperty +from sverchok.data_structure import flatten_data, updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, flatten_data class SvIfcByGuid(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/by_id.py b/src/ifcsverchok/nodes/ifc/by_id.py index e985f4d0e6..78ce51415f 100644 --- a/src/ifcsverchok/nodes/ifc/by_id.py +++ b/src/ifcsverchok/nodes/ifc/by_id.py @@ -18,12 +18,13 @@ import bpy +from bpy.props import StringProperty +from sverchok.data_structure import flatten_data, updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, flatten_data class SvIfcById(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/by_query.py b/src/ifcsverchok/nodes/ifc/by_query.py index 95f9ca654f..1bdd88054a 100644 --- a/src/ifcsverchok/nodes/ifc/by_query.py +++ b/src/ifcsverchok/nodes/ifc/by_query.py @@ -19,11 +19,12 @@ import bpy import ifcopenshell import ifcopenshell.util.selector +from bpy.props import StringProperty +from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode class SvIfcByQuery(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/by_type.py b/src/ifcsverchok/nodes/ifc/by_type.py index c4c6f9bdb7..2e6d9b43f4 100644 --- a/src/ifcsverchok/nodes/ifc/by_type.py +++ b/src/ifcsverchok/nodes/ifc/by_type.py @@ -18,11 +18,12 @@ import bpy import ifcopenshell -import ifcsverchok.helper -from bpy.props import StringProperty, EnumProperty -from ifcsverchok.ifcstore import SvIfcStore -from sverchok.node_tree import SverchCustomTreeNode +from bpy.props import EnumProperty, StringProperty from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper +from ifcsverchok.ifcstore import SvIfcStore def get_ifc_products(self, context): diff --git a/src/ifcsverchok/nodes/ifc/create_entity.py b/src/ifcsverchok/nodes/ifc/create_entity.py index 0bfb88b786..bc63b3bc08 100644 --- a/src/ifcsverchok/nodes/ifc/create_entity.py +++ b/src/ifcsverchok/nodes/ifc/create_entity.py @@ -17,25 +17,25 @@ # along with IfcSverchok. If not, see . import bpy -from mathutils import Matrix import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.api.root import ifcopenshell.util.schema +from bpy.props import BoolProperty, StringProperty +from mathutils import Matrix +from sverchok.data_structure import ( + ensure_min_nesting, + flatten_data, + repeat_last_for_length, + updateNode, +) +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty, BoolProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import ( - updateNode, - flatten_data, - repeat_last_for_length, - ensure_min_nesting, -) - class SvIfcCreateEntity(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): bl_idname = "SvIfcCreateEntity" diff --git a/src/ifcsverchok/nodes/ifc/create_file.py b/src/ifcsverchok/nodes/ifc/create_file.py index 50a77a5198..1d10d0fd3e 100644 --- a/src/ifcsverchok/nodes/ifc/create_file.py +++ b/src/ifcsverchok/nodes/ifc/create_file.py @@ -19,12 +19,13 @@ import bpy import ifcopenshell import ifcopenshell.guid -import ifcsverchok.helper -import ifcsverchok.helper as helper import sverchok.core.sockets from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper +import ifcsverchok.helper as helper class SvIfcCreateFileRefresh(bpy.types.Operator): diff --git a/src/ifcsverchok/nodes/ifc/create_project.py b/src/ifcsverchok/nodes/ifc/create_project.py index cc782de19d..4f0b19a398 100644 --- a/src/ifcsverchok/nodes/ifc/create_project.py +++ b/src/ifcsverchok/nodes/ifc/create_project.py @@ -22,9 +22,10 @@ import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.api.root import ifcopenshell.api.unit +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper -from sverchok.node_tree import SverchCustomTreeNode class SvIfcCreateProject(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/create_shape.py b/src/ifcsverchok/nodes/ifc/create_shape.py index 381fc1e11c..7b94008952 100644 --- a/src/ifcsverchok/nodes/ifc/create_shape.py +++ b/src/ifcsverchok/nodes/ifc/create_shape.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . -import bpy import logging + +import bonsai.bim.import_ifc +import bpy import ifcopenshell import ifcopenshell.geom +from bpy.props import BoolProperty, PointerProperty, StringProperty +from sverchok.data_structure import flatten_data, updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper from ifcsverchok.ifcstore import SvIfcStore -import bonsai.bim.import_ifc -from bpy.props import StringProperty, PointerProperty, BoolProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, flatten_data class SvIfcCreateShape(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/generate_guid.py b/src/ifcsverchok/nodes/ifc/generate_guid.py index cd706bc6a4..26f50e8ae6 100644 --- a/src/ifcsverchok/nodes/ifc/generate_guid.py +++ b/src/ifcsverchok/nodes/ifc/generate_guid.py @@ -19,9 +19,10 @@ import bpy import ifcopenshell import ifcopenshell.guid -import ifcsverchok.helper from sverchok.node_tree import SverchCustomTreeNode +import ifcsverchok.helper + class SvIfcGenerateGuid(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): bl_idname = "SvIfcGenerateGuid" diff --git a/src/ifcsverchok/nodes/ifc/get_attribute.py b/src/ifcsverchok/nodes/ifc/get_attribute.py index c4ec65e30e..e809500de3 100644 --- a/src/ifcsverchok/nodes/ifc/get_attribute.py +++ b/src/ifcsverchok/nodes/ifc/get_attribute.py @@ -19,11 +19,12 @@ import bpy import ifcopenshell import ifcopenshell.util.element +from bpy.props import StringProperty +from sverchok.data_structure import flatten_data, updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, flatten_data class SvIfcGetAttribute(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/get_property.py b/src/ifcsverchok/nodes/ifc/get_property.py index a9a78e15b9..f99dff7aa3 100644 --- a/src/ifcsverchok/nodes/ifc/get_property.py +++ b/src/ifcsverchok/nodes/ifc/get_property.py @@ -19,11 +19,12 @@ import bpy import ifcopenshell import ifcopenshell.util.element +from bpy.props import StringProperty +from sverchok.data_structure import flatten_data, updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, flatten_data class SvIfcGetProperty(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/pick_ifc_class.py b/src/ifcsverchok/nodes/ifc/pick_ifc_class.py index 3cbbf03af0..b24d499708 100644 --- a/src/ifcsverchok/nodes/ifc/pick_ifc_class.py +++ b/src/ifcsverchok/nodes/ifc/pick_ifc_class.py @@ -18,11 +18,12 @@ import bpy import ifcopenshell -import ifcsverchok.helper from bpy.props import EnumProperty -from ifcsverchok.ifcstore import SvIfcStore -from sverchok.node_tree import SverchCustomTreeNode from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper +from ifcsverchok.ifcstore import SvIfcStore def get_ifc_products(self, context): diff --git a/src/ifcsverchok/nodes/ifc/quick_project_setup.py b/src/ifcsverchok/nodes/ifc/quick_project_setup.py index 49c621d8ba..5787e29187 100644 --- a/src/ifcsverchok/nodes/ifc/quick_project_setup.py +++ b/src/ifcsverchok/nodes/ifc/quick_project_setup.py @@ -18,15 +18,17 @@ from email.mime import application + import bpy import ifcopenshell import sverchok.core.sockets +from bpy.props import StringProperty +from ifcopenshell import template +from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode -from ifcopenshell import template class SvIfcQuickProjectSetup(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/read_entity.py b/src/ifcsverchok/nodes/ifc/read_entity.py index 9ea2fa3490..38a703151d 100644 --- a/src/ifcsverchok/nodes/ifc/read_entity.py +++ b/src/ifcsverchok/nodes/ifc/read_entity.py @@ -18,11 +18,12 @@ import bpy import ifcopenshell +from bpy.props import StringProperty +from sverchok.data_structure import ensure_min_nesting, flatten_data, updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, ensure_min_nesting, flatten_data class SvIfcReadEntity(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/read_file.py b/src/ifcsverchok/nodes/ifc/read_file.py index ab754d7278..758bd6b14f 100644 --- a/src/ifcsverchok/nodes/ifc/read_file.py +++ b/src/ifcsverchok/nodes/ifc/read_file.py @@ -19,11 +19,12 @@ import bpy import ifcopenshell import ifcopenshell.guid +from bpy.props import StringProperty +from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode class SvIfcReadFile(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/remove.py b/src/ifcsverchok/nodes/ifc/remove.py index 2e76d28896..6a85086fd2 100644 --- a/src/ifcsverchok/nodes/ifc/remove.py +++ b/src/ifcsverchok/nodes/ifc/remove.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . +from typing import Union + import bpy import ifcopenshell +from bpy.props import StringProperty +from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode -from typing import Union class SvIfcRemove(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/select_blender_objects.py b/src/ifcsverchok/nodes/ifc/select_blender_objects.py index 5067db7ccf..3a0053a514 100644 --- a/src/ifcsverchok/nodes/ifc/select_blender_objects.py +++ b/src/ifcsverchok/nodes/ifc/select_blender_objects.py @@ -16,15 +16,16 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . +import bonsai.tool as tool import bpy import ifcopenshell import ifcopenshell.util.selector -import bonsai.tool as tool +from bpy.props import StringProperty +from sverchok.data_structure import updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper -from bpy.props import StringProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode class SvIfcSelectBlenderObjectsRefresh(bpy.types.Operator): diff --git a/src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py b/src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py index f9a6701432..69ac5f37f3 100644 --- a/src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py +++ b/src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py @@ -18,15 +18,16 @@ import bpy import ifcopenshell -import ifcsverchok.helper import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.api.geometry import ifcopenshell.util.representation -from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty, EnumProperty, IntProperty, FloatVectorProperty +from bpy.props import EnumProperty, FloatVectorProperty, IntProperty, StringProperty +from sverchok.data_structure import ensure_min_nesting, updateNode from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, ensure_min_nesting + +import ifcsverchok.helper +from ifcsverchok.ifcstore import SvIfcStore class SvIfcSverchokToIfcRepr(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/write_file.py b/src/ifcsverchok/nodes/ifc/write_file.py index 245c8a9d62..3a25cd99cc 100644 --- a/src/ifcsverchok/nodes/ifc/write_file.py +++ b/src/ifcsverchok/nodes/ifc/write_file.py @@ -17,6 +17,7 @@ # along with IfcSverchok. If not, see . from os.path import abspath, splitext + import bpy import ifcopenshell import ifcopenshell.api @@ -24,12 +25,13 @@ import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.api.spatial import ifcopenshell.util.element +from bpy.props import BoolProperty, StringProperty +from sverchok.data_structure import flatten_data, updateNode +from sverchok.node_tree import SverchCustomTreeNode + import ifcsverchok.helper import ifcsverchok.helper as helper from ifcsverchok.ifcstore import SvIfcStore -from bpy.props import StringProperty, BoolProperty -from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, flatten_data class SvIfcWriteFile(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifctester/ifctester/__main__.py b/src/ifctester/ifctester/__main__.py index e0acdd5468..d961b5e667 100644 --- a/src/ifctester/ifctester/__main__.py +++ b/src/ifctester/ifctester/__main__.py @@ -18,13 +18,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcTester. If not, see . -import time import argparse -import ifcopenshell -from . import ids -from . import reporter +import time from pathlib import Path +import ifcopenshell + +from . import ids, reporter + parser = argparse.ArgumentParser(description="Uses an IDS to audit an IFC") parser.add_argument("ids", type=str, help="Path to an IDS") parser.add_argument("ifc", type=str, help="Path to an IFC", nargs="?") diff --git a/src/ifctester/ifctester/facet.py b/src/ifctester/ifctester/facet.py index 6b5536299d..b8c3ebad5d 100644 --- a/src/ifctester/ifctester/facet.py +++ b/src/ifctester/ifctester/facet.py @@ -17,15 +17,17 @@ # along with IfcTester. If not, see . from __future__ import annotations -import re + import builtins -import ifcopenshell.util.unit -import ifcopenshell.util.element -import ifcopenshell.util.classification +import re from functools import lru_cache -from xmlschema.validators import identities -from typing import Union, Optional, Any, Literal, TYPE_CHECKING, TypedDict from logging import Logger +from typing import TYPE_CHECKING, Any, Literal, Optional, TypedDict, Union + +import ifcopenshell.util.classification +import ifcopenshell.util.element +import ifcopenshell.util.unit +from xmlschema.validators import identities if TYPE_CHECKING: from .ids import Specification diff --git a/src/ifctester/ifctester/ids.py b/src/ifctester/ifctester/ids.py index 7aecf040d3..ea21aa15fd 100644 --- a/src/ifctester/ifctester/ids.py +++ b/src/ifctester/ifctester/ids.py @@ -17,28 +17,30 @@ # along with IfcTester. If not, see . from __future__ import annotations -import os + import datetime -import ifcopenshell -from xmlschema.validators.exceptions import XMLSchemaValidationError -from xmlschema import XMLSchema -from xmlschema import etree_tostring +import os +from typing import Any, Optional, Union from xml.etree import ElementTree as ET + +import ifcopenshell +from xmlschema import XMLSchema, etree_tostring +from xmlschema.validators.exceptions import XMLSchemaValidationError + from .facet import ( - Facet, - Entity, Attribute, + Cardinality, Classification, - Property, - PartOf, + Entity, + Facet, + FacetFailure, Material, + PartOf, + Property, Restriction, get_pset, get_psets, - Cardinality, - FacetFailure, ) -from typing import Optional, Union, Any cwd = os.path.dirname(os.path.realpath(__file__)) schema = None diff --git a/src/ifctester/ifctester/reporter.py b/src/ifctester/ifctester/reporter.py index 2ce8a8c45f..220d0f96a9 100644 --- a/src/ifctester/ifctester/reporter.py +++ b/src/ifctester/ifctester/reporter.py @@ -17,18 +17,21 @@ # along with IfcTester. If not, see . from __future__ import annotations + +import datetime +import math import os import re import sys -import math -import datetime +from typing import Literal, Optional, TypedDict, Union + import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.unit -from .ids import Specification, Ids + from .facet import Facet, FacetFailure -from typing import TypedDict, Union, Literal, Optional +from .ids import Ids, Specification cwd = os.path.dirname(os.path.realpath(__file__)) @@ -555,7 +558,7 @@ class Ods(Json): def to_file(self, filepath: str) -> None: from odf.opendocument import OpenDocumentSpreadsheet from odf.style import Style, TableCellProperties - from odf.table import Table, TableRow, TableCell + from odf.table import Table, TableCell, TableRow from odf.text import P self.doc = OpenDocumentSpreadsheet() @@ -696,7 +699,7 @@ class OdsSummary(Json): def to_file(self, filepath: str) -> None: from odf.opendocument import OpenDocumentSpreadsheet from odf.style import Style, TableCellProperties - from odf.table import Table, TableRow, TableCell + from odf.table import Table, TableCell, TableRow from odf.text import P self.doc = OpenDocumentSpreadsheet() diff --git a/src/ifctester/test/ids_doc_generator.py b/src/ifctester/test/ids_doc_generator.py index fa95854d35..a8323fbeed 100644 --- a/src/ifctester/test/ids_doc_generator.py +++ b/src/ifctester/test/ids_doc_generator.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcTester. If not, see . +import functools import os import re import uuid -import pytest -import functools +from pathlib import Path +from xml.dom.minidom import parseString + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate @@ -32,15 +34,15 @@ import ifcopenshell.api.spatial import ifcopenshell.api.type import ifcopenshell.api.unit import ifcopenshell.guid -import ifctester +import numpy as np +import pytest import test_facet import test_ids -import numpy as np -from pathlib import Path -from xml.dom.minidom import parseString -from ifctester import ids from ifcopenshell import validate +import ifctester +from ifctester import ids + outdir = "build" diff --git a/src/ifctester/test/test_facet.py b/src/ifctester/test/test_facet.py index 3d7518d99f..2e0a16ec85 100644 --- a/src/ifctester/test/test_facet.py +++ b/src/ifctester/test/test_facet.py @@ -18,6 +18,7 @@ import uuid + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate @@ -33,9 +34,17 @@ import ifcopenshell.api.type import ifcopenshell.api.unit import ifcopenshell.guid import ifcopenshell.util.pset -import ifctester.ids import ifctester.facet -from ifctester.facet import Entity, Attribute, Classification, Property, PartOf, Material, Restriction +import ifctester.ids +from ifctester.facet import ( + Attribute, + Classification, + Entity, + Material, + PartOf, + Property, + Restriction, +) def set_facet(facet): diff --git a/src/ifctester/test/test_ids.py b/src/ifctester/test/test_ids.py index 9985a14a2c..0a851a355c 100644 --- a/src/ifctester/test/test_ids.py +++ b/src/ifctester/test/test_ids.py @@ -17,13 +17,15 @@ # along with IfcTester. If not, see . import os -import pytest -import xmlschema +from typing import Optional + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.material +import pytest +import xmlschema + from ifctester import ids -from typing import Optional def run( diff --git a/src/ifctester/webapp/public/worker/api.py b/src/ifctester/webapp/public/worker/api.py index d5b77d846d..dafc61c646 100644 --- a/src/ifctester/webapp/public/worker/api.py +++ b/src/ifctester/webapp/public/worker/api.py @@ -1,11 +1,12 @@ +import xml.etree.ElementTree as ET + import ifcopenshell import ifcopenshell.util import ifcopenshell.util.attribute import ifcopenshell.util.pset import ifcopenshell.util.schema -import xml.etree.ElementTree as ET -from xmlschema.validators.exceptions import XMLSchemaValidationError from ifctester.ids import Ids, IdsXmlValidationError, get_schema +from xmlschema.validators.exceptions import XMLSchemaValidationError # https://github.com/buildingSMART/IDS/blob/9914d568c7ac037acd97e58a0d16e9f93c3e3416/Schema/ids.xsd#L232 ifc_schemas = ["IFC2X3", "IFC4", "IFC4X3_ADD2"] diff --git a/src/ifctester/webapp/serve.py b/src/ifctester/webapp/serve.py index 245d50c38f..5b18f15545 100644 --- a/src/ifctester/webapp/serve.py +++ b/src/ifctester/webapp/serve.py @@ -16,10 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcTester. If not, see . -import os -import sys import argparse import mimetypes +import os +import sys bonsai_lib_path = os.environ.get("BONSAI_LIB_PATH") print(os.environ) @@ -29,7 +29,7 @@ bonsai_version = os.environ.get("BONSAI_VERSION") if bonsai_lib_path: sys.path.insert(0, bonsai_lib_path) -from flask import Flask, send_from_directory, send_file +from flask import Flask, send_file, send_from_directory # Browsers expecting this specific MIME type for .mjs files, # otherwise they fail to load. diff --git a/src/opencdeserver/api/app/api/bcf.py b/src/opencdeserver/api/app/api/bcf.py index 58a907730f..81047e1f23 100644 --- a/src/opencdeserver/api/app/api/bcf.py +++ b/src/opencdeserver/api/app/api/bcf.py @@ -1,19 +1,16 @@ from uuid import UUID -from fastapi import APIRouter, Depends, UploadFile, HTTPException + +from fastapi import APIRouter, Depends, HTTPException, UploadFile from fastapi.responses import FileResponse - -from security.secure import get_current_active_user - from models.bcf_request import * from models.bcf_response import * -from models.request import * from models.other import * - +from models.request import * from repository.bcf import bcf_db +from security.secure import get_current_active_user from api.logging import LoggingRoute - router = APIRouter(route_class=LoggingRoute) # ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- diff --git a/src/opencdeserver/api/app/api/documents.py b/src/opencdeserver/api/app/api/documents.py index c22ab0506f..2c60fe0139 100644 --- a/src/opencdeserver/api/app/api/documents.py +++ b/src/opencdeserver/api/app/api/documents.py @@ -1,27 +1,22 @@ import collections import os import shutil -import traceback import sys - -from fastapi import HTTPException, status, APIRouter, Request, Depends -from fastapi import UploadFile, Form -from fastapi.responses import FileResponse, HTMLResponse -from fastapi.templating import Jinja2Templates -from fastapi.encoders import jsonable_encoder - +import traceback from typing import Union from uuid import UUID, uuid4 -from pydantic import ValidationError -from security.secure import get_current_active_user - -from repository.documents import doc_db - -from models.documents_request import * -from models.documents_response import * +from fastapi import APIRouter, Depends, Form, HTTPException, Request, UploadFile, status +from fastapi.encoders import jsonable_encoder +from fastapi.responses import FileResponse, HTMLResponse +from fastapi.templating import Jinja2Templates from models.documents_common import * from models.documents_other import * +from models.documents_request import * +from models.documents_response import * +from pydantic import ValidationError +from repository.documents import doc_db +from security.secure import get_current_active_user from api.logging import LoggingRoute diff --git a/src/opencdeserver/api/app/api/foundation.py b/src/opencdeserver/api/app/api/foundation.py index 25c6036ac8..7d63eb749d 100644 --- a/src/opencdeserver/api/app/api/foundation.py +++ b/src/opencdeserver/api/app/api/foundation.py @@ -1,21 +1,16 @@ import os - from typing import Optional - -from fastapi import APIRouter, Request, Form -from fastapi import Depends, HTTPException, status -from fastapi.security import HTTPBasicCredentials, HTTPBasic -from fastapi.responses import HTMLResponse -from fastapi.templating import Jinja2Templates - -from models.request import * - -from repository.foundation import foundation_db -from security.secure import authenticate_user, get_current_active_user - from uuid import uuid4 + +from fastapi import APIRouter, Depends, Form, HTTPException, Request, status +from fastapi.responses import HTMLResponse +from fastapi.security import HTTPBasic, HTTPBasicCredentials +from fastapi.templating import Jinja2Templates +from models.request import * +from repository.foundation import foundation_db +from security.secure import authenticate_user, get_current_active_user, get_secrets + from api.logging import LoggingRoute -from security.secure import get_secrets secrets = get_secrets() diff --git a/src/opencdeserver/api/app/api/logging.py b/src/opencdeserver/api/app/api/logging.py index de368ccb9c..8d85cbf80b 100644 --- a/src/opencdeserver/api/app/api/logging.py +++ b/src/opencdeserver/api/app/api/logging.py @@ -1,11 +1,12 @@ -from fastapi import FastAPI, APIRouter, Response, Request +import logging +from collections.abc import Callable + +import httpx +from fastapi import APIRouter, FastAPI, Request, Response +from fastapi.routing import APIRoute from starlette.background import BackgroundTask from starlette.responses import StreamingResponse -from fastapi.routing import APIRoute from starlette.types import Message -from collections.abc import Callable -import logging -import httpx def log_info(req_body, res_body, route_url): diff --git a/src/opencdeserver/api/app/api/user.py b/src/opencdeserver/api/app/api/user.py index 5628a4cf05..def1a1573e 100644 --- a/src/opencdeserver/api/app/api/user.py +++ b/src/opencdeserver/api/app/api/user.py @@ -1,23 +1,19 @@ import collections import os -import traceback import sys - -from fastapi import APIRouter, Request, Depends -from fastapi.responses import FileResponse, HTMLResponse -from fastapi.templating import Jinja2Templates -from fastapi.encoders import jsonable_encoder - +import traceback from uuid import UUID -from pydantic import ValidationError -from security.secure import get_current_active_user - -from repository.documents import doc_db - +from fastapi import APIRouter, Depends, Request +from fastapi.encoders import jsonable_encoder +from fastapi.responses import FileResponse, HTMLResponse +from fastapi.templating import Jinja2Templates +from models.documents_other import * from models.documents_request import * from models.documents_response import * -from models.documents_other import * +from pydantic import ValidationError +from repository.documents import doc_db +from security.secure import get_current_active_user from api.logging import LoggingRoute diff --git a/src/opencdeserver/api/app/database/neo4j.py b/src/opencdeserver/api/app/database/neo4j.py index 9ad68759d2..ff8a4e7cde 100644 --- a/src/opencdeserver/api/app/database/neo4j.py +++ b/src/opencdeserver/api/app/database/neo4j.py @@ -1,15 +1,12 @@ -import jsonpickle import os -import pytz - -from dateutil import parser -from uuid import uuid4, UUID - -from neo4j import GraphDatabase - from datetime import datetime, timezone +from uuid import UUID, uuid4 +import jsonpickle +import pytz +from dateutil import parser from models.request import UserInDB +from neo4j import GraphDatabase from security.secrets import get_secrets get_secrets() diff --git a/src/opencdeserver/api/app/ifcgraph/ifcgraph.py b/src/opencdeserver/api/app/ifcgraph/ifcgraph.py index afe1c36749..e39878a286 100644 --- a/src/opencdeserver/api/app/ifcgraph/ifcgraph.py +++ b/src/opencdeserver/api/app/ifcgraph/ifcgraph.py @@ -18,11 +18,12 @@ # Some modifications have been made to the code. # -from py2neo.data import Node, Relationship from uuid import uuid4 + import ifcopenshell import ifcopenshell.util.schema from py2neo import Graph +from py2neo.data import Node, Relationship # Create the basic node with literal attributes and the class hierarchy diff --git a/src/opencdeserver/api/app/main.py b/src/opencdeserver/api/app/main.py index 4862106a55..2d189b8198 100644 --- a/src/opencdeserver/api/app/main.py +++ b/src/opencdeserver/api/app/main.py @@ -1,12 +1,9 @@ +from api import bcf, documents, foundation from fastapi import FastAPI, Request -from fastapi.responses import HTMLResponse, FileResponse from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import FileResponse, HTMLResponse from fastapi.templating import Jinja2Templates -from api import foundation -from api import bcf -from api import documents - endpoint_metadata = [ {"name": "api_versions_get", "description": "/foundation/versions"}, {"name": "foundation_auth_get", "description": "/foundation/1.0/auth"}, diff --git a/src/opencdeserver/api/app/models/bcf_common.py b/src/opencdeserver/api/app/models/bcf_common.py index 30df15b565..d93d2c3dff 100644 --- a/src/opencdeserver/api/app/models/bcf_common.py +++ b/src/opencdeserver/api/app/models/bcf_common.py @@ -1,6 +1,7 @@ -from pydantic import BaseModel -from typing import Optional from enum import Enum +from typing import Optional + +from pydantic import BaseModel class BimSnippet(BaseModel): diff --git a/src/opencdeserver/api/app/models/bcf_request.py b/src/opencdeserver/api/app/models/bcf_request.py index 52fd9cad84..aa14bedd83 100644 --- a/src/opencdeserver/api/app/models/bcf_request.py +++ b/src/opencdeserver/api/app/models/bcf_request.py @@ -1,7 +1,21 @@ -from pydantic import BaseModel from typing import Optional -from models.bcf_common import BimSnippet, BitmapType, Location, Direction, SnapshotType, Component -from models.bcf_common import Coloring, OrthogonalCamera, Visibility, PerspectiveCamera, Line, ClippingPlane + +from pydantic import BaseModel + +from models.bcf_common import ( + BimSnippet, + BitmapType, + ClippingPlane, + Coloring, + Component, + Direction, + Line, + Location, + OrthogonalCamera, + PerspectiveCamera, + SnapshotType, + Visibility, +) class ProjectPUT(BaseModel): diff --git a/src/opencdeserver/api/app/models/documents_common.py b/src/opencdeserver/api/app/models/documents_common.py index 1e269babad..a32a3551be 100644 --- a/src/opencdeserver/api/app/models/documents_common.py +++ b/src/opencdeserver/api/app/models/documents_common.py @@ -1,6 +1,6 @@ -from pydantic import BaseModel, Field, constr from typing import Optional +from pydantic import BaseModel, Field, constr # This file contains models used in both requests and responses during upload and download of documents. diff --git a/src/opencdeserver/api/app/models/documents_not_used.py b/src/opencdeserver/api/app/models/documents_not_used.py index e0c78ba09f..902eb23137 100644 --- a/src/opencdeserver/api/app/models/documents_not_used.py +++ b/src/opencdeserver/api/app/models/documents_not_used.py @@ -1,7 +1,8 @@ from typing import Optional -from pydantic import BaseModel -from models.documents_common import Document, DocumentVersion +from pydantic import BaseModel + +from models.documents_common import Document, DocumentVersion # This file contains models that are not used at all, at least not yet. diff --git a/src/opencdeserver/api/app/models/documents_other.py b/src/opencdeserver/api/app/models/documents_other.py index 9530268df7..253e5ecd80 100644 --- a/src/opencdeserver/api/app/models/documents_other.py +++ b/src/opencdeserver/api/app/models/documents_other.py @@ -1,10 +1,10 @@ -from pydantic import BaseModel, Field from typing import Optional -from models.documents_common import CallbackLink, Document -from models.documents_request import FileToUpload, DocumentMetadataEntry -from models.request import User +from pydantic import BaseModel, Field +from models.documents_common import CallbackLink, Document +from models.documents_request import DocumentMetadataEntry, FileToUpload +from models.request import User # This file contains models that are neither used in requests nor in responses, # and they can be used during both upload and download of documents. diff --git a/src/opencdeserver/api/app/models/documents_request.py b/src/opencdeserver/api/app/models/documents_request.py index 6eb9210a63..e58fe3af2a 100644 --- a/src/opencdeserver/api/app/models/documents_request.py +++ b/src/opencdeserver/api/app/models/documents_request.py @@ -1,10 +1,10 @@ -from pydantic import BaseModel, Field, constr -from typing import Optional from enum import Enum +from typing import Optional + +from pydantic import BaseModel, Field, constr from models.documents_common import CallbackLink - # This file contains models used in requests during upload and download of documents. diff --git a/src/opencdeserver/api/app/models/documents_response.py b/src/opencdeserver/api/app/models/documents_response.py index 2e98c70583..a2a53381ca 100644 --- a/src/opencdeserver/api/app/models/documents_response.py +++ b/src/opencdeserver/api/app/models/documents_response.py @@ -1,10 +1,10 @@ -from pydantic import BaseModel, Field, constr -from typing import Optional from enum import Enum +from typing import Optional + +from pydantic import BaseModel, Field, constr from models.documents_common import DocumentVersion, LinkData - # This file contains models used in responses during upload and download of documents. diff --git a/src/opencdeserver/api/app/models/foundation_other.py b/src/opencdeserver/api/app/models/foundation_other.py index 486a9b82f2..f6a894b5ad 100644 --- a/src/opencdeserver/api/app/models/foundation_other.py +++ b/src/opencdeserver/api/app/models/foundation_other.py @@ -1,4 +1,5 @@ from __future__ import annotations + from pydantic import BaseModel diff --git a/src/opencdeserver/api/app/models/other.py b/src/opencdeserver/api/app/models/other.py index c71593ce70..024db30398 100644 --- a/src/opencdeserver/api/app/models/other.py +++ b/src/opencdeserver/api/app/models/other.py @@ -1,4 +1,5 @@ from __future__ import annotations + from pydantic import BaseModel diff --git a/src/opencdeserver/api/app/models/request.py b/src/opencdeserver/api/app/models/request.py index 40271cf37a..616df5ef15 100644 --- a/src/opencdeserver/api/app/models/request.py +++ b/src/opencdeserver/api/app/models/request.py @@ -1,4 +1,5 @@ from __future__ import annotations + from pydantic import BaseModel diff --git a/src/opencdeserver/api/app/repository/bcf.py b/src/opencdeserver/api/app/repository/bcf.py index 80f9d172a1..a65c43d115 100644 --- a/src/opencdeserver/api/app/repository/bcf.py +++ b/src/opencdeserver/api/app/repository/bcf.py @@ -1,13 +1,10 @@ import base64 import os -import jsonpickle - -from fastapi import UploadFile, HTTPException - from uuid import UUID, uuid4 +import jsonpickle from database.neo4j import MyDB, driver - +from fastapi import HTTPException, UploadFile from models.bcf_request import * from models.bcf_response import * from models.request import * diff --git a/src/opencdeserver/api/app/repository/documents.py b/src/opencdeserver/api/app/repository/documents.py index 39f5576065..95c669a7bc 100644 --- a/src/opencdeserver/api/app/repository/documents.py +++ b/src/opencdeserver/api/app/repository/documents.py @@ -1,22 +1,17 @@ -import os import math - -from uuid import UUID, uuid4 +import os from typing import Union - -from fastapi import HTTPException - -from database.neo4j import MyDB, driver - -from models.documents_request import * -from models.documents_response import * -from models.documents_common import * -from models.documents_other import * +from uuid import UUID, uuid4 import ifcopenshell -from py2neo import Graph - +from database.neo4j import MyDB, driver +from fastapi import HTTPException from ifcgraph.ifcgraph import create_full_graph +from models.documents_common import * +from models.documents_other import * +from models.documents_request import * +from models.documents_response import * +from py2neo import Graph class DOCDB(MyDB): diff --git a/src/opencdeserver/api/app/repository/foundation.py b/src/opencdeserver/api/app/repository/foundation.py index 2554bfee8d..d80dc78c24 100644 --- a/src/opencdeserver/api/app/repository/foundation.py +++ b/src/opencdeserver/api/app/repository/foundation.py @@ -1,19 +1,14 @@ -import os import hashlib - +import os from datetime import timedelta -from fastapi import HTTPException - from database.neo4j import MyDB, driver -from security.secure import create_access_token +from fastapi import HTTPException from jose import jwt - -from security.secrets import get_secrets -from security.secure import credentials_exception - from models.foundation_other import * from models.other import * +from security.secrets import get_secrets +from security.secure import create_access_token, credentials_exception secrets = get_secrets() diff --git a/src/opencdeserver/api/app/security/secure.py b/src/opencdeserver/api/app/security/secure.py index 77c225ee24..fec837b868 100644 --- a/src/opencdeserver/api/app/security/secure.py +++ b/src/opencdeserver/api/app/security/secure.py @@ -1,17 +1,15 @@ from __future__ import annotations -from fastapi import Depends, HTTPException, status, Security -from fastapi.security import OAuth2AuthorizationCodeBearer, SecurityScopes +import os from datetime import datetime, timedelta -from passlib.context import CryptContext -from jose import jwt, JWTError - -from models.other import TokenData -from models.request import User from database.neo4j import db -import os - +from fastapi import Depends, HTTPException, Security, status +from fastapi.security import OAuth2AuthorizationCodeBearer, SecurityScopes +from jose import JWTError, jwt +from models.other import TokenData +from models.request import User +from passlib.context import CryptContext from security.secrets import get_secrets secrets = get_secrets() diff --git a/src/pyodide/demo-app/context.py b/src/pyodide/demo-app/context.py index 8cece9ef68..f330c21940 100644 --- a/src/pyodide/demo-app/context.py +++ b/src/pyodide/demo-app/context.py @@ -1,4 +1,5 @@ import ifcopenshell +import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.context import ifcopenshell.api.feature @@ -8,12 +9,9 @@ import ifcopenshell.api.spatial import ifcopenshell.api.type import ifcopenshell.api.unit import ifcopenshell.geom -import ifcopenshell.api import ifcopenshell.util.representation import ifcopenshell.util.unit - import numpy as np - import propertygroups O = 0.0, 0.0, 0.0 diff --git a/src/pyodide/demo-app/tests/missing_files.py b/src/pyodide/demo-app/tests/missing_files.py index ab603fa09e..87f7cbdbf8 100644 --- a/src/pyodide/demo-app/tests/missing_files.py +++ b/src/pyodide/demo-app/tests/missing_files.py @@ -1,6 +1,6 @@ async def test_pset(): - import ifcopenshell.api.pset import ifcopenshell.api.material + import ifcopenshell.api.pset errors = [] try: diff --git a/test/bpy.py b/test/bpy.py index 44389c36b7..b706c23e58 100644 --- a/test/bpy.py +++ b/test/bpy.py @@ -24,16 +24,20 @@ ############################################################################### import os -import bpy import sys import time -try: from io_import_scene_ifc import import_ifc -except: + +import bpy + +try: + from io_import_scene_ifc import import_ifc +except: print("[Error] Unable to import IfcOpenShell") sys.exit(1) -from mathutils import Vector as V from math import radians +from mathutils import Vector as V + scn = bpy.context.scene for ob in bpy.data.objects: @@ -49,8 +53,8 @@ if not succes: sys.exit(1) dt = time.time()-t1 -print ("[Notice] Conversion took %.2f seconds"%dt) - +print ("[Notice] Conversion took %.2f seconds"%dt) + cam = bpy.data.cameras.new('cam') cam.angle = radians(45) cam_ob = bpy.data.objects.new('cam',cam) @@ -72,7 +76,7 @@ def material(name,settings): if not m: return for k,v in settings.items(): setattr(m,k,v) - + material("IfcWall",{"diffuse_color":[1,1,1],"diffuse_intensity":1}) material("IfcWallStandardCase",{"diffuse_color":[1,1,1],"diffuse_intensity":1}) material("IfcSite",{"diffuse_color":[0.4,0.5,0.25]}) diff --git a/test/run.py b/test/run.py index 102529d9f9..320b8decc4 100644 --- a/test/run.py +++ b/test/run.py @@ -26,13 +26,13 @@ # # ############################################################################### -import os -import sys -import shutil import inspect +import os +import shutil import subprocess -from zipfile import ZipFile +import sys from urllib.request import urlretrieve +from zipfile import ZipFile # Test whether Blender and IfcOpenShell are installed if subprocess.call(['blender','-b','-P','bpy.py','TEST']) != 0: From b1b67de420a77ae690ef7b79667d16340c293495 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 19 Dec 2025 19:11:02 +0500 Subject: [PATCH 415/657] cmake - move ccache usage to an option --- cmake/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 742ef0d6b8..2c197240d9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -104,6 +104,7 @@ option(USERSPACE_PYTHON_PREFIX "Installs IfcPython for the current user only ins option(USE_DEBUG_PYTHON "Use debug binaries when building Debug IfcPython on Windows." OFF) option(ADD_COMMIT_SHA "Add commit sha and branch in version number, requires git" OFF) option(VERSION_OVERRIDE "Override the version defined in buildinfo.cpp with the file VERSION in the repository root" OFF) +option(USE_CCACHE "Enable use of ccache if it's available from PATH." ON) set( PYTHON_MODULE_INSTALL_DIR @@ -132,7 +133,7 @@ if((BUILD_CONVERT OR BUILD_GEOMSERVER OR BUILD_IFCPYTHON) AND(NOT BUILD_IFCGEOM) endif() find_program(CCACHE_FOUND ccache) -if(CCACHE_FOUND) +if(USE_CCACHE AND CCACHE_FOUND) message(STATUS "`ccache` is found, using it as a compiler launcher.") set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_FOUND}") if(MSVC) From 45de750790665b4341b31372bbfe2b0149b30fa1 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Fri, 19 Dec 2025 12:44:23 -0600 Subject: [PATCH 416/657] Fixes #7507: Fix: Prevent spatial element placement corruption during drawing activation sync_references was syncing spatial element placements FROM Blender TO IFC, corrupting their correct positions. Spatial elements (storeys, spaces, buildings) often have Blender objects at Z=0 for modeling convenience, but their IFC placements store absolute positions. Solution: Skip syncing placements for IfcSpatialElement and IfcGrid types, as their IFC placement is the source of truth. Fixes storey elevation corruption during SECTION_LEVEL annotation generation. --- src/bonsai/bonsai/core/drawing.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index f30c49974d..118fc3b69c 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -487,12 +487,29 @@ def sync_references( potential_reference_elements = drawing_tool.get_potential_reference_elements(drawing) for element in potential_reference_elements: + # Skip spatial elements - their IFC placement is the source of truth + if element.is_a("IfcSpatialElement"): + continue + + # Skip grids - their IFC placement is the source of truth + if element.is_a("IfcGrid") or element.is_a("IfcGridAxis"): + continue + if (obj := ifc.get_object(element)) and ifc.is_moved(obj): drawing_tool.sync_object_placement(obj) for element in drawing_tool.get_group_elements(group): if not drawing_tool.is_auto_annotation(element): continue + + # Skip spatial elements - should never sync their placement + if element.is_a("IfcSpatialElement"): + continue + + # Skip grids + if element.is_a("IfcGrid") or element.is_a("IfcGridAxis"): + continue + if (obj := ifc.get_object(element)) and ifc.is_moved(obj): drawing_tool.sync_object_placement(obj) if not (reference_element := drawing_tool.get_assigned_product(element)): From 9a1b0ce44c36f49a55bd99e81cd18769aab9d695 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sat, 20 Dec 2025 04:10:26 +0100 Subject: [PATCH 417/657] Refactor SaveBlendMetadataFile to improve speed and IFC data cleanup --- src/bonsai/bonsai/bim/operator.py | 109 +++++++++++++++--------------- 1 file changed, 53 insertions(+), 56 deletions(-) diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index d3e4a307ee..82ac6ca185 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -269,77 +269,74 @@ class SaveBlendMetadataFile(bpy.types.Operator): cleanup_script = f""" import bpy -def remove_ifc_collections(): - \"\"\"Remove all collections that start with 'IfcProject' and their contents.\"\"\" - collections_to_remove = [] - - # Find all IfcProject collections - for collection in bpy.data.collections: - if collection.name.startswith('IfcProject'): - collections_to_remove.append(collection) - - # First, use bim.override_outliner_delete to properly remove IFC data - for collection in collections_to_remove: - # Collect all objects in the collection and its children - objects_to_delete = [] - - def collect_objects(col): - for obj in col.objects: - if obj not in objects_to_delete: - objects_to_delete.append(obj) - for child in col.children: - collect_objects(child) - - collect_objects(collection) - - # Use bim.override_outliner_delete for each object to clean up IFC data - for obj in objects_to_delete: - # Select only this object - bpy.ops.object.select_all(action='DESELECT') - obj.select_set(True) - bpy.context.view_layer.objects.active = obj - - # Try to use Bonsai's delete operator which cleans up IFC data - try: - bpy.ops.bim.override_outliner_delete() - except: - # If that fails, use standard delete - bpy.data.objects.remove(obj, do_unlink=True) - - # Remove any remaining child collections - for child in list(collection.children): - try: - bpy.data.collections.remove(child, do_unlink=True) - except: - pass - - # Remove the IfcProject collections themselves - for collection in collections_to_remove: +# Ensure all styles are loaded before attempting to remove them +try: + bpy.ops.bim.load_styles() +except Exception: + pass + +# 1. Collect all IfcStyle material names +ifcstyle_material_names = [] +try: + styles_props = getattr(bpy.context.scene, "BIMStylesProperties", None) + if styles_props is None and bpy.data.scenes: + styles_props = getattr(bpy.data.scenes[0], "BIMStylesProperties", None) + if styles_props: + for style in list(styles_props.styles): + material = getattr(style, "blender_material", None) + if material and material.name: + ifcstyle_material_names.append(material.name) +except Exception: + pass + +# 2. Purge IfcStore +try: + from bonsai.bim.ifc import IfcStore +except ImportError: + IfcStore = None + +if IfcStore: + try: + IfcStore.purge() + except Exception: + pass + +# 3. Remove all collections named IfcProject* +for collection in list(bpy.data.collections): + if collection.name.startswith('IfcProject'): try: bpy.data.collections.remove(collection, do_unlink=True) - except: + except Exception: pass -# Remove IFC-related data -remove_ifc_collections() +# 4. Purge orphaned data blocks after removing IfcProject collections +try: + bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True) +except Exception: + pass -# Note: Scene-level BIM properties are saved with the metadata.blend file but will be -# overwritten when the IFC is loaded. Screen-level properties (BIMTabProperties, -# BIMPanelProperties, BIMAreaProperties) preserve UI customization settings. +# 5. Remove all materials corresponding to the IfcStyles we collected +materials_removed = 0 +try: + for mat_name in ifcstyle_material_names: + if mat_name in bpy.data.materials: + try: + bpy.data.materials.remove(bpy.data.materials[mat_name], do_unlink=True) + materials_removed += 1 + except Exception: + pass +except Exception: + pass -# Save the metadata file bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') """ - import tempfile - with tempfile.NamedTemporaryFile("w", suffix=".py", delete=False) as script_file: script_file.write(cleanup_script) script_path = script_file.name blender_exe = bpy.app.binary_path import subprocess - result = subprocess.run( [blender_exe, temp_path, "--background", "--python", script_path], capture_output=True, text=True ) From fb3e35c96401b0a0a962a4e586a114e09e0de5a7 Mon Sep 17 00:00:00 2001 From: Kristoffer Andersen Date: Sat, 20 Dec 2025 08:56:06 +0100 Subject: [PATCH 418/657] Fix macOS platform entries in CI workflow --- .github/workflows/ci-ifcopenshell-conda-daily.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci-ifcopenshell-conda-daily.yml b/.github/workflows/ci-ifcopenshell-conda-daily.yml index 2cd41686e9..b648538ed7 100644 --- a/.github/workflows/ci-ifcopenshell-conda-daily.yml +++ b/.github/workflows/ci-ifcopenshell-conda-daily.yml @@ -54,8 +54,7 @@ jobs: platform: [ { name: win, distver: windows-latest, pkg_dir: 'win-64' }, { name: linux, distver: ubuntu-latest, pkg_dir: 'linux-64' }, - { name: macOS-arm, distver: macos-latest, pkg_dir: 'osx-arm64' }, - { name: macOS-x86, distver: macos-13, pkg_dir: 'osx-64' } + { name: macOS-arm, distver: macos-latest, pkg_dir: 'osx-arm64' } ] steps: - name: Set Swap Space From 2cac0bdca69a54d683b5fa443746ba99fd9d1533 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sun, 21 Dec 2025 12:17:54 +0100 Subject: [PATCH 419/657] SaveBlendMetadataFile to use IFC directory for temporary file path and fix panel visibility logic in UI --- src/bonsai/bonsai/bim/operator.py | 5 +++-- src/bonsai/bonsai/bim/ui.py | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 82ac6ca185..a3f58d1c44 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -260,10 +260,11 @@ class SaveBlendMetadataFile(bpy.types.Operator): self.report({"WARNING"}, "No IFC file path set.") return {"CANCELLED"} + blendmetadata_path = ifc_file + ".metadata.blend" - # Save a temporary copy of the current blend file - temp_path = bpy.path.abspath("//__temp_blendmetadata.blend") + ifc_dir = os.path.dirname(ifc_file) + temp_path = os.path.join(ifc_dir, "__temp_blendmetadata.blend") bpy.ops.wm.save_as_mainfile(filepath=temp_path, copy=True) cleanup_script = f""" diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 6c2baaa0fb..338c766b81 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -1633,6 +1633,8 @@ class BIM_PT_tab_representations(Panel): def poll(cls, context): if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + return True return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): @@ -1675,6 +1677,8 @@ class BIM_PT_tab_parametric_geometry(Panel): def poll(cls, context): if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + return True return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): @@ -1694,6 +1698,8 @@ class BIM_PT_tab_object_materials(Panel): def poll(cls, context): if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): return False + if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + return True return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): From b686c19a2523f3e27c482f60b0e471ecc4557bed Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Sat, 20 Dec 2025 13:11:25 +0500 Subject: [PATCH 420/657] Create .gersemirc --- .gersemirc | 11 +++++++++++ pyproject.toml | 2 ++ src/svgfill/3rdparty/.gersemirc | 1 + 3 files changed, 14 insertions(+) create mode 100644 .gersemirc create mode 100644 src/svgfill/3rdparty/.gersemirc diff --git a/.gersemirc b/.gersemirc new file mode 100644 index 0000000000..4d74cb215a --- /dev/null +++ b/.gersemirc @@ -0,0 +1,11 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/BlankSpruce/gersemi/0.24.0/gersemi/configuration.schema.json + +# Needed for gersemi to detect custom functions and macros. +definitions: ["./cmake"] +disable_formatting: false +extensions: [] +indent: 4 +line_length: 120 +list_expansion: favour-inlining +unsafe: false +warn_about_unknown_commands: true diff --git a/pyproject.toml b/pyproject.toml index 13abb08d76..801d034d4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,3 +71,5 @@ ruff.sequence = ["ruff-main", "ruff-old"] black = "black ." format.sequence = ["black", "ruff-main", "ruff-old"] + +cmake-format = "gersemi cmake src --in-place" diff --git a/src/svgfill/3rdparty/.gersemirc b/src/svgfill/3rdparty/.gersemirc new file mode 100644 index 0000000000..f64d72913d --- /dev/null +++ b/src/svgfill/3rdparty/.gersemirc @@ -0,0 +1 @@ +disable_formatting: true From d41985f23a724fa870e095c6a37bec3f03163c7d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Sat, 20 Dec 2025 13:27:35 +0500 Subject: [PATCH 421/657] format cmake files --- cmake/CMakeLists.txt | 171 +++++++++++------- cmake/FindCGAL.cmake | 3 +- cmake/FindHDF5.cmake | 1 - cmake/FindLibXml2.cmake | 10 +- cmake/FindOpenCASCADE.cmake | 73 +++++--- cmake/FindOpenCOLLADA.cmake | 52 ++++-- cmake/FindPROJ.cmake | 14 +- cmake/FindUSD.cmake | 77 +++----- cmake/package_export.cmake | 25 +-- src/examples/CMakeLists.txt | 2 +- src/ifcconvert/CMakeLists.txt | 19 +- src/ifcgeom/CMakeLists.txt | 23 ++- src/ifcgeom/Serialization/CMakeLists.txt | 9 +- .../Serialization/schema/CMakeLists.txt | 7 +- src/ifcgeom/kernels/CMakeLists.txt | 18 +- src/ifcgeom/mapping/CMakeLists.txt | 11 +- src/ifcgeomserver/CMakeLists.txt | 4 +- src/ifcmax/CMakeLists.txt | 23 ++- src/ifcparse/CMakeLists.txt | 24 +-- src/ifcwrap/CMakeLists.txt | 153 +++++++--------- src/qtviewer/CMakeLists.txt | 37 ++-- src/serializers/CMakeLists.txt | 31 ++-- .../schema_dependent/CMakeLists.txt | 6 +- src/svgfill/CMakeLists.txt | 41 ++--- 24 files changed, 441 insertions(+), 393 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2c197240d9..2d4d892c0a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -18,16 +18,16 @@ ################################################################################ cmake_minimum_required(VERSION 3.21) -if (NOT DEFINED CMAKE_CXX_STANDARD) +if(NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) endif() -if (CMAKE_CXX_STANDARD LESS 17) +if(CMAKE_CXX_STANDARD LESS 17) message(FATAL_ERROR "C++17 or newer is required.") endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) # not necessary, but encouraged set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -if (VERSION_OVERRIDE) +if(VERSION_OVERRIDE) file(READ "../VERSION" "RELEASE_VERSION_") string(STRIP "${RELEASE_VERSION_}" RELEASE_VERSION) message(STATUS "Detected version '${RELEASE_VERSION}'") @@ -40,7 +40,7 @@ project(IfcOpenShell VERSION ${RELEASE_VERSION}) add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) if(POLICY CMP0141) # 3.25+ - cmake_policy(SET CMP0141 NEW) # Support for `CMAKE_MSVC_DEBUG_INFORMATION_FORMAT`. + cmake_policy(SET CMP0141 NEW) # Support for `CMAKE_MSVC_DEBUG_INFORMATION_FORMAT`. endif() if(POLICY CMP0144) # 3.27 cmake_policy(SET CMP0144 NEW) # find_package() uses upper-case _ROOT variables. @@ -64,7 +64,11 @@ endif() option(MINIMAL_BUILD "The build is to make a minimal version of IFC converter from OCCT into IFC." OFF) option(WASM_BUILD "Build a WebAssembly binary." OFF) -option(ENABLE_BUILD_OPTIMIZATIONS "Enable certain compiler and linker optimizations on RelWithDebInfo and Release builds." OFF) +option( + ENABLE_BUILD_OPTIMIZATIONS + "Enable certain compiler and linker optimizations on RelWithDebInfo and Release builds." + OFF +) option(BUILD_SHARED_LIBS "Build IfcParse and IfcGeom as shared libs (SO/DLL)." OFF) option(MSVC_PARALLEL_BUILD "Multi-threaded compilation in Microsoft Visual Studio (/MP)" OFF) option(USE_VLD "Use Visual Leak Detector for debugging memory leaks, MSVC-only." OFF) @@ -83,9 +87,11 @@ option(BUILD_PACKAGE "" OFF) # Most users probably need just common schemas, # but we're keeping it `OFF` by default to avoid disruption # (e.g. all Python distribution would need to adapt this option to be set). -option(BUILD_ONLY_COMMON_SCHEMAS +option( + BUILD_ONLY_COMMON_SCHEMAS "Build only common IFC schemas (2x3, 4, 4x3_add2). By default all schemas will be built." - OFF) + OFF +) option(SCHEMA_VERSIONS "Explicitly specify schemas to build." "") option(WITH_OPENCASCADE "Enable geometry interpretation using Open CASCADE" ON) @@ -103,12 +109,16 @@ option(WITH_ZSTD "Use Zstd compression in RocksDB writes" OFF) option(USERSPACE_PYTHON_PREFIX "Installs IfcPython for the current user only instead of system-wide." OFF) option(USE_DEBUG_PYTHON "Use debug binaries when building Debug IfcPython on Windows." OFF) option(ADD_COMMIT_SHA "Add commit sha and branch in version number, requires git" OFF) -option(VERSION_OVERRIDE "Override the version defined in buildinfo.cpp with the file VERSION in the repository root" OFF) +option( + VERSION_OVERRIDE + "Override the version defined in buildinfo.cpp with the file VERSION in the repository root" + OFF +) option(USE_CCACHE "Enable use of ccache if it's available from PATH." ON) -set( - PYTHON_MODULE_INSTALL_DIR - "" CACHE PATH +set(PYTHON_MODULE_INSTALL_DIR + "" + CACHE PATH "Directory to install IfcPython package to. By default package is installed in found Python's site-packages." ) @@ -127,7 +137,7 @@ if(MINIMAL_BUILD) set(USD_SUPPORT OFF) endif() -if((BUILD_CONVERT OR BUILD_GEOMSERVER OR BUILD_IFCPYTHON) AND(NOT BUILD_IFCGEOM)) +if((BUILD_CONVERT OR BUILD_GEOMSERVER OR BUILD_IFCPYTHON) AND (NOT BUILD_IFCGEOM)) message(STATUS "'IfcGeom' is required with current outputs") set(BUILD_IFCGEOM ON) endif() @@ -142,14 +152,8 @@ if(USE_CCACHE AND CCACHE_FOUND) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$:Embedded>") # Not needed for Ninja. if(CMAKE_GENERATOR MATCHES "Visual Studio") - file(COPY_FILE - ${CCACHE_FOUND} ${CMAKE_BINARY_DIR}/cl.exe - ONLY_IF_DIFFERENT) - set(CMAKE_VS_GLOBALS - "CLToolExe=cl.exe" - "CLToolPath=${CMAKE_BINARY_DIR}" - "UseMultiToolTask=true" - ) + file(COPY_FILE ${CCACHE_FOUND} ${CMAKE_BINARY_DIR}/cl.exe ONLY_IF_DIFFERENT) + set(CMAKE_VS_GLOBALS "CLToolExe=cl.exe" "CLToolPath=${CMAKE_BINARY_DIR}" "UseMultiToolTask=true") endif() endif() endif() @@ -183,7 +187,10 @@ endif() if(BUILD_SHARED_LIBS) add_definitions(-DIFC_SHARED_BUILD) if(MSVC) - message(WARNING "Building DLLs against the static VC run-time. This is not recommended if the DLLs are to be redistributed.") + message( + WARNING + "Building DLLs against the static VC run-time. This is not recommended if the DLLs are to be redistributed." + ) # C4521: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' # There will be couple hundreds of these so suppress them away, https://msdn.microsoft.com/en-us/library/esew7y1w.aspx add_definitions(-wd4251) @@ -206,7 +213,6 @@ foreach(option_flag IN LISTS option_flags) convert_env_var_to_bool("${option_flag}") endforeach() - if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) add_definitions(-DIFOPSH_WITH_OPENCASCADE) @@ -230,7 +236,7 @@ if(USD_SUPPORT) endif(USD_SUPPORT) set(ROCKSDB_LIBRARIES "") -if (WITH_ROCKSDB) +if(WITH_ROCKSDB) # Temporaily mess with CMAKE_FIND_PACKAGE_PREFER_CONFIG to help RocksDB # find it's zstd dependency on Windows. # Only do it on Windows, otherwise it might create problems as @@ -250,9 +256,12 @@ if (WITH_ROCKSDB) set(ROCKSDB_LIBRARIES "IFCOPENSHELL_RocksDB") target_compile_definitions(IFCOPENSHELL_RocksDB INTERFACE IFOPSH_WITH_ROCKSDB) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB) - target_link_libraries(IFCOPENSHELL_RocksDB INTERFACE $,RocksDB::rocksdb-shared,RocksDB::rocksdb>) + target_link_libraries( + IFCOPENSHELL_RocksDB + INTERFACE $,RocksDB::rocksdb-shared,RocksDB::rocksdb> + ) - if (WITH_ZSTD) + if(WITH_ZSTD) # @todo do we actually need the zstd include dir or rather just pass # the libzstd.a along with the rocksdb library when needed and feature # detect based on rocksdb API? @@ -262,8 +271,7 @@ if (WITH_ROCKSDB) target_link_libraries(IFCOPENSHELL_RocksDB INTERFACE zstd::libzstd_static) endif() - install(TARGETS IFCOPENSHELL_RocksDB - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) + install(TARGETS IFCOPENSHELL_RocksDB EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) endif() # Find Boost: On win32 the (hardcoded) default is to use static libraries and @@ -299,7 +307,14 @@ if(WASM_BUILD) else() # @todo review this, shouldn't this be all possible header-only now? # ... or rewritten using C++17 features? - set(BOOST_COMPONENTS system program_options regex thread date_time iostreams) + set(BOOST_COMPONENTS + system + program_options + regex + thread + date_time + iostreams + ) endif() if(USE_MMAP) @@ -405,7 +420,7 @@ if(MSVC) endif() # Enforce standards-conformance on VS > 2015, older Boost versions fail to compile with this - if(MSVC_VERSION GREATER 1900 AND(Boost_MAJOR_VERSION GREATER 1 OR Boost_MINOR_VERSION GREATER 66)) + if(MSVC_VERSION GREATER 1900 AND (Boost_MAJOR_VERSION GREATER 1 OR Boost_MINOR_VERSION GREATER 66)) add_definitions(-permissive-) endif() @@ -424,11 +439,11 @@ if(MSVC) # endforeach() # endif() - add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE) - # See #5158. - if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.40) - add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) - endif() + add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE) + # See #5158. + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.40) + add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) + endif() else() add_definitions(-Wall -Wextra) @@ -438,7 +453,10 @@ else() add_definitions(-Wno-maybe-uninitialized) endif() - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 9.0)) + if( + CMAKE_CXX_COMPILER_ID MATCHES "GNU" + AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 9.0) + ) # OpenCascade spews a lot of deprecated-copy warnings add_definitions(-Wno-deprecated-copy) endif() @@ -449,16 +467,23 @@ else() endif() endif(MSVC) -include_directories(${OPENCOLLADA_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} ${HDF5_INCLUDE_DIR} -) +include_directories(${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${HDF5_INCLUDE_DIR}) if(NOT SCHEMA_VERSIONS) # `WASM_BUILD` - super arbitrarily try to keep size down at least a little bit if(BUILD_ONLY_COMMON_SCHEMAS OR WASM_BUILD) set(SCHEMA_VERSIONS "2x3" "4" "4x3_add2") else() - set(SCHEMA_VERSIONS "2x3" "4" "4x1" "4x2" "4x3" "4x3_tc1" "4x3_add1" "4x3_add2") + set(SCHEMA_VERSIONS + "2x3" + "4" + "4x1" + "4x2" + "4x3" + "4x3_tc1" + "4x3_add1" + "4x3_add2" + ) endif() endif() @@ -477,7 +502,10 @@ if(COMPILE_SCHEMA) find_package(PythonInterp) if(NOT PYTHONINTERP_FOUND) - message(FATAL_ERROR "A Python interpreter is necessary when COMPILE_SCHEMA is enabled. Disable COMPILE_SCHEMA or fix Python paths to proceed.") + message( + FATAL_ERROR + "A Python interpreter is necessary when COMPILE_SCHEMA is enabled. Disable COMPILE_SCHEMA or fix Python paths to proceed." + ) endif() set(IFC_RELEASE_NOT_USED ${SCHEMA_VERSIONS}) @@ -497,7 +525,10 @@ if(COMPILE_SCHEMA) if("${PYPARSING_FOUND}" STREQUAL "-1") message(STATUS "Installing pyparsing") - execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip "install" --user pyparsing RESULT_VARIABLE SUCCESS) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -m pip "install" --user pyparsing + RESULT_VARIABLE SUCCESS + ) if(NOT "${SUCCESS}" STREQUAL "0") execute_process(COMMAND pip "install" --user pyparsing RESULT_VARIABLE SUCCESS) @@ -512,19 +543,23 @@ if(COMPILE_SCHEMA) # Bootstrap the parser message(STATUS "Compiling schema, this will take a while...") - execute_process(COMMAND ${PYTHON_EXECUTABLE} bootstrap.py express.bnf + execute_process( + COMMAND ${PYTHON_EXECUTABLE} bootstrap.py express.bnf WORKING_DIRECTORY ../src/ifcexpressparser OUTPUT_FILE express_parser.py - RESULT_VARIABLE SUCCESS) + RESULT_VARIABLE SUCCESS + ) if(NOT "${SUCCESS}" STREQUAL "0") message(FATAL_ERROR "Failed to bootstrap parser. Make sure pyparsing is installed") endif() # Generate code - execute_process(COMMAND ${PYTHON_EXECUTABLE} ../ifcexpressparser/express_parser.py ../../${COMPILE_SCHEMA} + execute_process( + COMMAND ${PYTHON_EXECUTABLE} ../ifcexpressparser/express_parser.py ../../${COMPILE_SCHEMA} WORKING_DIRECTORY ../src/ifcparse - OUTPUT_VARIABLE COMPILED_SCHEMA_NAME) + OUTPUT_VARIABLE COMPILED_SCHEMA_NAME + ) # Prevent the schema that had just been compiled from being excluded foreach(schema ${SCHEMA_VERSIONS}) @@ -568,8 +603,8 @@ if(ADD_COMMIT_SHA) endif() if(GIT_FOUND) - if (VERSION_OVERRIDE) - set (git_branch ${RELEASE_VERSION}) + if(VERSION_OVERRIDE) + set(git_branch ${RELEASE_VERSION}) else() message("git found: ${GIT_EXECUTABLE} with version ${GIT_VERSION_STRING}") execute_process( @@ -581,8 +616,8 @@ if(ADD_COMMIT_SHA) string(REPLACE "\n" ";" git_branch_list "${git_branches}") foreach(git_branch_candidate IN ITEMS ${git_branch_list}) - string(REPLACE "*" "" git_branch_candidate_temp "${git_branch_candidate}") - string(STRIP "${git_branch_candidate_temp}" git_branch_candidate_2) + string(REPLACE "*" "" git_branch_candidate_temp "${git_branch_candidate}") + string(STRIP "${git_branch_candidate_temp}" git_branch_candidate_2) if(NOT git_branch_candidate_2 MATCHES "^HEAD$") string(REPLACE "/" ";" git_branch_candidate_2_list "${git_branch_candidate_2}") list(GET git_branch_candidate_2_list -1 git_branch) @@ -600,13 +635,13 @@ if(ADD_COMMIT_SHA) message(STATUS "IfcOpenShell branch: \"${git_branch}\"") message(STATUS "IfcOpenShell commit: \"${git_sha}\"") - if ("${git_branch}" STREQUAL "" OR "${git_sha}" STREQUAL "") + if("${git_branch}" STREQUAL "" OR "${git_sha}" STREQUAL "") message(FATAL_ERROR "Unable to determine commit sha and/or branch") endif() - target_compile_definitions(IfcParse PRIVATE - -DIFCOPENSHELL_BRANCH=${git_branch} - -DIFCOPENSHELL_COMMIT=${git_sha} + target_compile_definitions( + IfcParse + PRIVATE -DIFCOPENSHELL_BRANCH=${git_branch} -DIFCOPENSHELL_COMMIT=${git_sha} ) endif() endif(ADD_COMMIT_SHA) @@ -649,23 +684,23 @@ if(NOT TARGET uninstall) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" - IMMEDIATE @ONLY) + IMMEDIATE + @ONLY + ) - add_custom_target(uninstall - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) + add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() # Packaging -list(APPEND CPACK_SOURCE_IGNORE_FILES - "/\\\\.git" - "/build/" - "/.pytest_cache/" - "/__pycache__/" -) +list(APPEND CPACK_SOURCE_IGNORE_FILES "/\\\\.git" "/build/" "/.pytest_cache/" "/__pycache__/") set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${CMAKE_SOURCE_DIR}/..;/") -set(CPACK_PACKAGE_NAME "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}") +set(CPACK_PACKAGE_NAME + "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}" +) set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}${EXTRA_VERSION}") -SET(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}-${CMAKE_SYSTEM_NAME}") +set(CPACK_PACKAGE_FILE_NAME + "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}-${CMAKE_SYSTEM_NAME}" +) set(CPACK_PACKAGE_DIRECTORY "${PROJECT_BINARY_DIR}/assets") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "IfcOpenShell") set(CPACK_PACKAGE_DESCRIPTION "IfcOpenShell.") @@ -686,12 +721,16 @@ endforeach(COMPONENT) set(CPACK_DEBIAN_PACKAGE_NAME "${PROJECT_NAME}") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_PACKAGE_CONTACT}") -set(CPACK_DEBIAN_PACKAGE_DEPENDS "python3, libxml2, libocct-foundation-dev, libocct-modeling-algorithms-dev, libocct-modeling-data-dev, libocct-ocaf-dev, libocct-visualization-dev, libocct-data-exchange-dev, libhdf5-serial-dev, libpython3-dev, python3-pytest ${BOOST_DEPS}") +set(CPACK_DEBIAN_PACKAGE_DEPENDS + "python3, libxml2, libocct-foundation-dev, libocct-modeling-algorithms-dev, libocct-modeling-data-dev, libocct-ocaf-dev, libocct-visualization-dev, libocct-data-exchange-dev, libhdf5-serial-dev, libpython3-dev, python3-pytest ${BOOST_DEPS}" +) set(CPACK_DEBIAN_PACKAGE_DESCRIPTION_SUMMARY "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}") set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") set(CPACK_DEBIAN_PACKAGE_SECTION "science") -set(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}${EXTRA_VERSION}") +set(CPACK_DEBIAN_PACKAGE_VERSION + "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}${EXTRA_VERSION}" +) set(CPACK_DEBIAN_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") # set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/debian/postinst") diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index 4485be3e6b..0b789d5f03 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -65,5 +65,4 @@ add_library(IFCOPENSHELL_CGAL INTERFACE) target_link_libraries(IFCOPENSHELL_CGAL INTERFACE CGAL::CGAL) target_compile_definitions(IFCOPENSHELL_CGAL INTERFACE IFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) -install(TARGETS IFCOPENSHELL_CGAL - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) +install(TARGETS IFCOPENSHELL_CGAL EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) diff --git a/cmake/FindHDF5.cmake b/cmake/FindHDF5.cmake index f93626093c..399b1c9f13 100644 --- a/cmake/FindHDF5.cmake +++ b/cmake/FindHDF5.cmake @@ -55,7 +55,6 @@ if(HDF5_LIBRARY_DIR) "${HDF5_LIBRARY_DIR}/libsz${debug_postfix}.${lib_ext}" "${HDF5_LIBRARY_DIR}/libaec${debug_postfix}.${lib_ext}" ) - else() message(STATUS "Packaging hdf5 and zlib for conda distribution") diff --git a/cmake/FindLibXml2.cmake b/cmake/FindLibXml2.cmake index 4d6556c47b..3aa4c5efeb 100644 --- a/cmake/FindLibXml2.cmake +++ b/cmake/FindLibXml2.cmake @@ -33,15 +33,15 @@ else() set_property(TARGET LibXml2::LibXml2 PROPERTY IMPORTED_LOCATION) get_release_variant(LIBXML2_RELEASE_LIB "${LIBXML2_LIBRARIES}" "d") get_debug_variant(LIBXML2_DEBUG_LIB "${LIBXML2_LIBRARIES}" "d") - set_target_properties(LibXml2::LibXml2 + set_target_properties( + LibXml2::LibXml2 PROPERTIES - IMPORTED_CONFIGURATIONS "Release;Debug" - IMPORTED_LOCATION_RELEASE "${LIBXML2_RELEASE_LIB}" - IMPORTED_LOCATION_DEBUG "${LIBXML2_DEBUG_LIB}" + IMPORTED_CONFIGURATIONS "Release;Debug" + IMPORTED_LOCATION_RELEASE "${LIBXML2_RELEASE_LIB}" + IMPORTED_LOCATION_DEBUG "${LIBXML2_DEBUG_LIB}" ) endif() endif() - # Restore module path. list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) diff --git a/cmake/FindOpenCASCADE.cmake b/cmake/FindOpenCASCADE.cmake index 64ce0427a7..f78ee33b99 100644 --- a/cmake/FindOpenCASCADE.cmake +++ b/cmake/FindOpenCASCADE.cmake @@ -22,7 +22,6 @@ if(OCC_LIBRARY_DIR) message(STATUS "Looking for Open CASCADE library files in: ${OCC_LIBRARY_DIR}") endif() - if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) # OCE is not supported for find_package, because it's using a different name (`oce`) # and also has an odd directory structure (install/lib/oce-0.18/*.cmake). @@ -41,9 +40,7 @@ if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) if(OpenCASCADE_VERSION VERSION_LESS "7.7.0") # cmake configs < 7.7.0 were not adding include directories to targets automatically. - set_target_properties(TKernel PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}" - ) + set_target_properties(TKernel PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}") endif() if(OpenCASCADE_VERSION VERSION_LESS "7.9.0" AND WIN32) @@ -62,17 +59,11 @@ if(OCC_INCLUDE_DIR AND OCC_LIBRARY_DIR) "and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}')." ) # Parse OCC_VERSION_STRING. - file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR - REGEX "#define OCC_VERSION_MAJOR.*" - ) + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR REGEX "#define OCC_VERSION_MAJOR.*") string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR}) - file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR - REGEX "#define OCC_VERSION_MINOR.*" - ) + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR REGEX "#define OCC_VERSION_MINOR.*") string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR}) - file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT - REGEX "#define OCC_VERSION_MAINTENANCE.*" - ) + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT REGEX "#define OCC_VERSION_MAINTENANCE.*") string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT}) set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}") else() @@ -86,17 +77,37 @@ else() ) endif() -set( - OpenCASCADE_LIBRARIES - TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO - TKFillet TKXSBase TKOffset TKHLR - +set(OpenCASCADE_LIBRARIES + TKernel + TKMath + TKBRep + TKGeomBase + TKGeomAlgo + TKG3d + TKG2d + TKShHealing + TKTopAlgo + TKMesh + TKPrim + TKBool + TKBO + TKFillet + TKXSBase + TKOffset + TKHLR # @todo investigate the exact conditions when this is necessary TKBin ) if(OCC_VERSION_STRING VERSION_LESS 7.8.0) - list(APPEND OpenCASCADE_LIBRARIES TKIGES TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP) + list( + APPEND OpenCASCADE_LIBRARIES + TKIGES + TKSTEPBase + TKSTEPAttr + TKSTEP209 + TKSTEP + ) else(OCC_VERSION_STRING VERSION_LESS 7.8.0) list(APPEND OpenCASCADE_LIBRARIES TKDESTEP TKDEIGES) endif(OCC_VERSION_STRING VERSION_LESS 7.8.0) @@ -106,10 +117,7 @@ find_library(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAU if(libTKernel) message(STATUS "Required Open Cascade Library files found") else() - message( - FATAL_ERROR - "Unable to find Open Cascade library files in OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}'), aborting" - ) + message(FATAL_ERROR "Unable to find Open Cascade library files in OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}'), aborting") endif() if(MSVC) @@ -138,9 +146,21 @@ if(OCCT_STATIC) # 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 if(APPLE) - set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) + 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}) + set(OpenCASCADE_LIBRARIES + -Wl,--start-group + ${OpenCASCADE_LIBRARIES} + -Wl,--end-group + ${CMAKE_THREAD_LIBS_INIT} + ) endif() endif() @@ -157,5 +177,4 @@ target_include_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_INCLUDE_DIR}") target_link_libraries(OpenCASCADE_INTERFACE INTERFACE ${OpenCASCADE_LIBRARIES}) target_link_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_LIBRARY_DIR}") set(OpenCASCADE_LIBRARIES OpenCASCADE_INTERFACE) -install(TARGETS OpenCASCADE_INTERFACE - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) +install(TARGETS OpenCASCADE_INTERFACE EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) diff --git a/cmake/FindOpenCOLLADA.cmake b/cmake/FindOpenCOLLADA.cmake index 404dccb35a..f261f51e7d 100644 --- a/cmake/FindOpenCOLLADA.cmake +++ b/cmake/FindOpenCOLLADA.cmake @@ -1,4 +1,3 @@ - # # Input variables: # - `OPENCOLLADA_INCLUDE_DIR` @@ -41,23 +40,37 @@ if(NOT OpenCOLLADA_DIR) if("${OPENCOLLADA_LIBRARY_DIR}" STREQUAL "") message(STATUS "No OpenCOLLADA library directory specified") - find_library(OPENCOLLADA_FRAMEWORK_LIB NAMES OpenCOLLADAFramework - PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib) + find_library( + OPENCOLLADA_FRAMEWORK_LIB + NAMES OpenCOLLADAFramework + PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib + ) get_filename_component(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH) endif() - find_library(OpenCOLLADAFramework NAMES OpenCOLLADAFramework OpenCOLLADAFrameworkd PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH) + find_library( + OpenCOLLADAFramework + NAMES OpenCOLLADAFramework OpenCOLLADAFrameworkd + PATHS ${OPENCOLLADA_LIBRARY_DIR} + NO_DEFAULT_PATH + ) if(OpenCOLLADAFramework) message(STATUS "OpenCOLLADA library files found") else() - message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA libraries. " - "Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.") + message( + FATAL_ERROR + "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA libraries. " + "Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed." + ) endif() set(OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR}" CACHE FILEPATH "OpenCOLLADA library files") - set(OPENCOLLADA_INCLUDE_DIRS "${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils" "${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter") + set(OPENCOLLADA_INCLUDE_DIRS + "${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils" + "${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter" + ) find_file(COLLADASWStreamWriter_h "COLLADASWStreamWriter.h" ${OPENCOLLADA_INCLUDE_DIRS}) @@ -66,8 +79,15 @@ if(NOT OpenCOLLADA_DIR) set(OPENCOLLADA_FOUND TRUE) set(OPENCOLLADA_LIBRARY_NAMES - GeneratedSaxParser MathMLSolver OpenCOLLADABaseUtils OpenCOLLADAFramework OpenCOLLADASaxFrameworkLoader - OpenCOLLADAStreamWriter UTF buffer ftoa + GeneratedSaxParser + MathMLSolver + OpenCOLLADABaseUtils + OpenCOLLADAFramework + OpenCOLLADASaxFrameworkLoader + OpenCOLLADAStreamWriter + UTF + buffer + ftoa ) # Use the found OpenCOLLADAFramework as a template for all other OpenCOLLADA libraries @@ -100,16 +120,22 @@ if(NOT OpenCOLLADA_DIR) list(APPEND OPENCOLLADA_LIBRARIES "${pcre_library}") endif() else() - message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find PCRE. " - "Disable COLLADA_SUPPORT or fix PCRE_LIBRARY_DIR path to proceed.") + message( + FATAL_ERROR + "COLLADA_SUPPORT enabled, but unable to find PCRE. " + "Disable COLLADA_SUPPORT or fix PCRE_LIBRARY_DIR path to proceed." + ) endif() if(MSVC) add_debug_variants(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES}" d) endif() else() - message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA headers. " - "Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.") + message( + FATAL_ERROR + "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA headers. " + "Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed." + ) endif() endif(NOT OpenCOLLADA_DIR) diff --git a/cmake/FindPROJ.cmake b/cmake/FindPROJ.cmake index ce6956517c..14829987c6 100644 --- a/cmake/FindPROJ.cmake +++ b/cmake/FindPROJ.cmake @@ -19,20 +19,14 @@ if((NOT PROJ_INCLUDE_DIR AND NOT PROJ_LIBRARIES)) find_package(PROJ QUIET CONFIG) if(NOT PROJ_FOUND) - find_path(PROJ_INCLUDE_DIR proj.h - PATHS - /usr/include/proj - REQUIRED - ) + find_path(PROJ_INCLUDE_DIR proj.h PATHS /usr/include/proj REQUIRED) if(PROJ_INCLUDE_DIR) message(STATUS "Found PROJ include files in: ${PROJ_INCLUDE_DIR}") else() message(FATAL_ERROR "Unable to find PROJ include directory, specify PROJ_INCLUDE_DIR manually.") endif() - find_library(PROJ_LIBRARY - NAMES proj - PATHS /usr/lib/x86_64-linux-gnu) + find_library(PROJ_LIBRARY NAMES proj PATHS /usr/lib/x86_64-linux-gnu) if(PROJ_LIBRARY) message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}") set(PROJ_LIBRARIES ${PROJ_LIBRARY}) @@ -46,9 +40,7 @@ if((NOT PROJ_INCLUDE_DIR AND NOT PROJ_LIBRARIES)) target_link_directories(PROJ::proj INTERFACE "${PROJ_LIBRARY}") endif() else() - find_library(PROJ_LIBRARY - NAMES proj - PATHS ${PROJ_LIBRARY_DIR}) + find_library(PROJ_LIBRARY NAMES proj PATHS ${PROJ_LIBRARY_DIR}) if(PROJ_LIBRARY) message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}") set(PROJ_LIBRARIES ${PROJ_LIBRARY}) diff --git a/cmake/FindUSD.cmake b/cmake/FindUSD.cmake index 7402c687ff..3616cca52c 100644 --- a/cmake/FindUSD.cmake +++ b/cmake/FindUSD.cmake @@ -16,7 +16,6 @@ UNIFY_ENVVARS_AND_CACHE(USD_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(TBB_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(TBB_LIBRARY_DIR) - if(NOT USD_LIBRARY_DIR AND NOT USD_INCLUDE_DIR) find_package(pxr CONFIG) if(pxr_FOUND) @@ -29,12 +28,7 @@ if(NOT USD_LIBRARY_DIR AND NOT USD_INCLUDE_DIR) endif() if(NOT USD_INCLUDE_DIR) - find_path(USD_INCLUDE_DIR pxr.h - PATHS - /usr/include/pxr - /usr/local/include/pxr - REQUIRED - ) + find_path(USD_INCLUDE_DIR pxr.h PATHS /usr/include/pxr /usr/local/include/pxr REQUIRED) if(USD_INCLUDE_DIR) message(STATUS "Found USD include files in: ${USD_INCLUDE_DIR}") else() @@ -46,30 +40,28 @@ else() endif() set(USD_LIBRARIES - usd_usd - usd_usdGeom - usd_usdShade - usd_usdLux - usd_vt - usd_sdf - usd_tf - usd_gf - usd_kind - usd_pcp - usd_arch - usd_ar - usd_plug - usd_js - usd_sdr - usd_work - usd_trace - usd_ndr - usd_ts - ) + usd_usd + usd_usdGeom + usd_usdShade + usd_usdLux + usd_vt + usd_sdf + usd_tf + usd_gf + usd_kind + usd_pcp + usd_arch + usd_ar + usd_plug + usd_js + usd_sdr + usd_work + usd_trace + usd_ndr + usd_ts +) -find_library(USD_LIBRARY - NAMES ${USD_LIBRARIES} - PATHS ${USD_LIBRARY_DIR}) +find_library(USD_LIBRARY NAMES ${USD_LIBRARIES} PATHS ${USD_LIBRARY_DIR}) if(USD_LIBRARY) message(STATUS "USD libraries ${USD_LIBRARIES} found in: ${USD_LIBRARY_DIR}") link_directories(${USD_LIBRARY_DIR}) @@ -78,32 +70,17 @@ else() endif() add_library(pxr::USD INTERFACE IMPORTED) -target_link_directories(pxr::USD - INTERFACE - ${USD_LIBRARY_DIR} ${TBB_LIBRARY_DIR} -) -target_include_directories(pxr::USD - INTERFACE - ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} -) +target_link_directories(pxr::USD INTERFACE ${USD_LIBRARY_DIR} ${TBB_LIBRARY_DIR}) +target_include_directories(pxr::USD INTERFACE ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR}) # We don't link TBB libraries - on Windows they're provided using `pragma(lib)`. # On Unix there's no `pragma(lib)`, so in theory it will break. -target_link_libraries(pxr::USD - INTERFACE - ${USD_LIBRARIES} -) +target_link_libraries(pxr::USD INTERFACE ${USD_LIBRARIES}) if(MSVC) - target_link_libraries(pxr::USD - INTERFACE - debug DbgHelp.lib - ) + target_link_libraries(pxr::USD INTERFACE debug DbgHelp.lib) endif() -target_compile_definitions(pxr::USD - INTERFACE - PXR_STATIC WITH_USD -) +target_compile_definitions(pxr::USD INTERFACE PXR_STATIC WITH_USD) set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_USD) diff --git a/cmake/package_export.cmake b/cmake/package_export.cmake index 6c9c233b90..cce10ed0b5 100644 --- a/cmake/package_export.cmake +++ b/cmake/package_export.cmake @@ -6,30 +6,17 @@ set(CONFIG_PACKAGE_INPUT "${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in") set(CONFIG_PACKAGE_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake") # Allow linking against build directory. -export( - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} - FILE ${CONFIG_TARGETS_FILENAME} - NAMESPACE ${CONFIG_NAMESPACE}:: -) - -install( - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} - NAMESPACE ${CONFIG_NAMESPACE}:: - DESTINATION "${CONFIG_PACKAGE_LOCATION}" -) +export(EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} FILE ${CONFIG_TARGETS_FILENAME} NAMESPACE ${CONFIG_NAMESPACE}::) +install(EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} NAMESPACE ${CONFIG_NAMESPACE}:: DESTINATION "${CONFIG_PACKAGE_LOCATION}") include(CMakePackageConfigHelpers) -write_basic_package_version_file(${CONFIG_VERSION_OUTPUT} - COMPATIBILITY ExactVersion) +write_basic_package_version_file(${CONFIG_VERSION_OUTPUT} COMPATIBILITY ExactVersion) -configure_package_config_file(${CONFIG_PACKAGE_INPUT} +configure_package_config_file( + ${CONFIG_PACKAGE_INPUT} ${CONFIG_PACKAGE_OUTPUT} INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION} ) -install(FILES - "${CONFIG_PACKAGE_OUTPUT}" - "${CONFIG_VERSION_OUTPUT}" - DESTINATION ${CONFIG_PACKAGE_LOCATION} -) +install(FILES "${CONFIG_PACKAGE_OUTPUT}" "${CONFIG_VERSION_OUTPUT}" DESTINATION ${CONFIG_PACKAGE_LOCATION}) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 9e1e911cda..3a5c0187b5 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -52,7 +52,7 @@ if(SCHEMA_VERSIONS MATCHES "2x3") add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) add_library(IfcHouseInterface INTERFACE) - if (STANDALONE_PROJECT) + if(STANDALONE_PROJECT) target_link_libraries(IfcHouseInterface INTERFACE IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer) else() target_link_libraries(IfcHouseInterface INTERFACE IfcParse geometry_serializer) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index 4293a3222a..a5e16180cb 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -9,13 +9,18 @@ endif() set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES}) add_executable(IfcConvert ${IFCCONVERT_FILES}) -target_link_libraries(IfcConvert +target_link_libraries( + IfcConvert PRIVATE - IfcGeom IfcParse Serializers - ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES} - ${CGAL_LIBRARIES} ${GLTF_LIBRARIES} + IfcGeom + IfcParse + Serializers + ${OpenCASCADE_LIBRARIES} + ${Boost_LIBRARIES} + ${HDF5_LIBRARIES} + ${USD_LIBRARIES} + ${CGAL_LIBRARIES} + ${GLTF_LIBRARIES} ) -install(TARGETS IfcConvert - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} -) +install(TARGETS IfcConvert EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index a7a6fac6a9..b50dfce590 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -14,12 +14,13 @@ file(GLOB SCHEMA_AGNOSTIC_CPP_FILES *.cpp) set(SCHEMA_AGNOSTIC_FILES ${SCHEMA_AGNOSTIC_H_FILES} ${SCHEMA_AGNOSTIC_CPP_FILES}) add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES}) -set_target_properties(IfcGeom +set_target_properties( + IfcGeom PROPERTIES - COMPILE_FLAGS -DIFC_GEOM_EXPORTS - VERSION "${PROJECT_VERSION}" - SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" - PUBLIC_HEADER "${SCHEMA_AGNOSTIC_H_FILES}" + COMPILE_FLAGS -DIFC_GEOM_EXPORTS + VERSION "${PROJECT_VERSION}" + SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" + PUBLIC_HEADER "${SCHEMA_AGNOSTIC_H_FILES}" ) if(UNIX) @@ -28,16 +29,20 @@ endif() find_package(Eigen3 REQUIRED) -target_link_libraries(IfcGeom - ${kernel_libraries} ${mapping_libraries} - ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen" +target_link_libraries( + IfcGeom + ${kernel_libraries} + ${mapping_libraries} + ${CMAKE_THREAD_LIBS_INIT} + "Eigen3::Eigen" ${CGAL_LIBRARIES} ) if(NOT WASM_BUILD) target_link_libraries(IfcGeom IfcParse) endif() -install(TARGETS IfcGeom +install( + TARGETS IfcGeom EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom" ) diff --git a/src/ifcgeom/Serialization/CMakeLists.txt b/src/ifcgeom/Serialization/CMakeLists.txt index ae3331a2f8..4463cabcc9 100644 --- a/src/ifcgeom/Serialization/CMakeLists.txt +++ b/src/ifcgeom/Serialization/CMakeLists.txt @@ -3,15 +3,16 @@ add_subdirectory(schema) add_library(geometry_serializer STATIC Serialization.cpp) file(GLOB IFCGEOM_SERIALIZATION_H_FILE *.h) -set_target_properties(geometry_serializer PROPERTIES - COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS" - PUBLIC_HEADER "${IFCGEOM_SERIALIZATION_H_FILE}" +set_target_properties( + geometry_serializer + PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS" PUBLIC_HEADER "${IFCGEOM_SERIALIZATION_H_FILE}" ) target_link_libraries(geometry_serializer ${geometry_serializer_libraries} IfcParse) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} "geometry_serializer" ${geometry_serializer_libraries}) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} PARENT_SCOPE) -install(TARGETS geometry_serializer ${geometry_serializer_libraries} +install( + TARGETS geometry_serializer ${geometry_serializer_libraries} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/Serialization" ) diff --git a/src/ifcgeom/Serialization/schema/CMakeLists.txt b/src/ifcgeom/Serialization/schema/CMakeLists.txt index 0ff0938674..b6daf97cd9 100644 --- a/src/ifcgeom/Serialization/schema/CMakeLists.txt +++ b/src/ifcgeom/Serialization/schema/CMakeLists.txt @@ -1,7 +1,10 @@ foreach(schema ${SCHEMA_VERSIONS}) add_library(geometry_serializer_ifc${schema} STATIC Serialization.cpp) target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES}) - set_target_properties(geometry_serializer_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS -DIfcSchema=Ifc${schema}") + set_target_properties( + geometry_serializer_ifc${schema} + PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS -DIfcSchema=Ifc${schema}" + ) list(APPEND geometry_serializer_libraries geometry_serializer_ifc${schema}) endforeach() -set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) \ No newline at end of file +set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index b75ec96c47..c9c8c549cb 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -9,13 +9,14 @@ foreach(kernel ${GEOMETRY_KERNELS}) set(KERNEL_TARGET "geometry_kernel_${kernel}") add_library(${KERNEL_TARGET} OBJECT ${IFCGEOM_FILES}) - set_target_properties(${KERNEL_TARGET} PROPERTIES - COMPILE_FLAGS "-DIFC_GEOM_EXPORTS" - PUBLIC_HEADER "${IFCGEOM_H_FILES}" + set_target_properties( + ${KERNEL_TARGET} + PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS" PUBLIC_HEADER "${IFCGEOM_H_FILES}" ) list(APPEND kernel_libraries ${KERNEL_TARGET}) target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) - install(TARGETS ${KERNEL_TARGET} + install( + TARGETS ${KERNEL_TARGET} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/kernels/${kernel}" ) @@ -27,13 +28,14 @@ foreach(kernel ${GEOMETRY_KERNELS}) set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple") add_library(${KERNEL_TARGET_SIMPLE} OBJECT ${IFCGEOM_FILES}) - set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") + set_target_properties( + ${KERNEL_TARGET_SIMPLE} + PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS" + ) list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) target_link_libraries(${KERNEL_TARGET_SIMPLE} IFCOPENSHELL_CGAL) - install(TARGETS ${KERNEL_TARGET_SIMPLE} - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} - ) + install(TARGETS ${KERNEL_TARGET_SIMPLE} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) endif() diff --git a/src/ifcgeom/mapping/CMakeLists.txt b/src/ifcgeom/mapping/CMakeLists.txt index 5f7fd661ea..4e185b9fa9 100644 --- a/src/ifcgeom/mapping/CMakeLists.txt +++ b/src/ifcgeom/mapping/CMakeLists.txt @@ -7,13 +7,14 @@ foreach(schema ${SCHEMA_VERSIONS}) set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES} ${IFCGEOM_I_FILES}) add_library(geometry_mapping_ifc${schema} OBJECT ${IFCGEOM_FILES}) - set_target_properties(geometry_mapping_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") - target_link_libraries(geometry_mapping_ifc${schema} IfcParse Eigen3::Eigen) + set_target_properties( + geometry_mapping_ifc${schema} + PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}" + ) + target_link_libraries(geometry_mapping_ifc${schema} IfcParse Eigen3::Eigen) list(APPEND mapping_libraries geometry_mapping_ifc${schema}) - install(TARGETS geometry_mapping_ifc${schema} - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} - ) + install(TARGETS geometry_mapping_ifc${schema} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) endforeach() set(mapping_libraries ${mapping_libraries} PARENT_SCOPE) diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt index 15fdbbb3a6..07bbfeb21f 100644 --- a/src/ifcgeomserver/CMakeLists.txt +++ b/src/ifcgeomserver/CMakeLists.txt @@ -5,6 +5,4 @@ set(SOURCE_FILES ${CPP_FILES}) add_executable(IfcGeomServer ${SOURCE_FILES}) target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OpenCASCADE_LIBRARIES}) -install(TARGETS IfcGeomServer - EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} -) +install(TARGETS IfcGeomServer EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) diff --git a/src/ifcmax/CMakeLists.txt b/src/ifcmax/CMakeLists.txt index d306758b67..330e4529cb 100644 --- a/src/ifcmax/CMakeLists.txt +++ b/src/ifcmax/CMakeLists.txt @@ -32,22 +32,32 @@ endforeach() if(HAS_MAX) # build libraray for each found 3ds Max SDK foreach(max_year max_sdk IN ZIP_LISTS FOUND_MAX_YEARS FOUND_MAX_SDKS) - message(STATUS "Building IFCMax library for Autodesk 3ds Max SDK ${max_year}") - include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} ${ICU_INCLUDE_DIR} - ${Boost_INCLUDE_DIRS} ${max_sdk}/include + include_directories( + ${INCLUDE_DIRECTORIES} + ${OPENCOLLADA_INCLUDE_DIRS} + ${ICU_INCLUDE_DIR} + ${Boost_INCLUDE_DIRS} + ${max_sdk}/include ) # All recent versions of 3ds Max (2014 and newer) are 64-bit only so assume lib/x64 directory - link_directories(${LINK_DIRECTORIES} ${IfcOpenShell_BINARY_DIR} ${OPENCOLLADA_LIBRARY_DIR} - ${ICU_LIBRARY_DIR} ${Boost_LIBRARY_DIRS} ${max_sdk}/lib/x64/Release + link_directories( + ${LINK_DIRECTORIES} + ${IfcOpenShell_BINARY_DIR} + ${OPENCOLLADA_LIBRARY_DIR} + ${ICU_LIBRARY_DIR} + ${Boost_LIBRARY_DIRS} + ${max_sdk}/lib/x64/Release ) add_library(IfcMax_${max_year} SHARED IfcMax.h IfcMax.cpp) # TODO: find the minimal subset of 3dsmax libraries to reference - target_link_libraries(IfcMax_${max_year} ${IFCOPENSHELL_LIBRARIES} + target_link_libraries( + IfcMax_${max_year} + ${IFCOPENSHELL_LIBRARIES} bmm.lib Comctl32.lib core.lib @@ -84,4 +94,3 @@ if(HAS_MAX) else() message(STATUS "Autodesk 3ds Max SDK not found, is required to build IFCMax.") endif() - diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index e3bd50fb5b..55e63d68c7 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -18,26 +18,21 @@ foreach(file ${IFCPARSE_CPP_FILES_ALL}) endforeach() foreach(schema ${SCHEMA_VERSIONS}) - list(APPEND IFCPARSE_H_FILES - Ifc${schema}.h - Ifc${schema}-definitions.h - ) - list(APPEND IFCPARSE_CPP_FILES - Ifc${schema}.cpp - Ifc${schema}-schema.cpp - ) + list(APPEND IFCPARSE_H_FILES Ifc${schema}.h Ifc${schema}-definitions.h) + list(APPEND IFCPARSE_CPP_FILES Ifc${schema}.cpp Ifc${schema}-schema.cpp) endforeach() set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES}) add_library(IfcParse ${IFCPARSE_FILES}) target_compile_definitions(IfcParse PUBLIC ${SCHEMA_DEFINITIONS}) -set_target_properties(IfcParse +set_target_properties( + IfcParse PROPERTIES - COMPILE_FLAGS -DIFC_PARSE_EXPORTS - VERSION "${PROJECT_VERSION}" - SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" - PUBLIC_HEADER "${IFCPARSE_H_FILES}" + COMPILE_FLAGS -DIFC_PARSE_EXPORTS + VERSION "${PROJECT_VERSION}" + SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" + PUBLIC_HEADER "${IFCPARSE_H_FILES}" ) if(IFCXML_SUPPORT) @@ -56,7 +51,8 @@ endif() target_link_libraries(IfcParse ${ROCKSDB_LIBRARIES}) -install(TARGETS IfcParse +install( + TARGETS IfcParse EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcparse" INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" diff --git a/src/ifcwrap/CMakeLists.txt b/src/ifcwrap/CMakeLists.txt index 7694c29859..47420d9817 100644 --- a/src/ifcwrap/CMakeLists.txt +++ b/src/ifcwrap/CMakeLists.txt @@ -24,27 +24,27 @@ if(POLICY CMP0177) # 3.31 cmake_policy(SET CMP0177 OLD) endif() -FIND_PACKAGE(SWIG) -IF(NOT SWIG_FOUND) - MESSAGE( +find_package(SWIG) +if(NOT SWIG_FOUND) + message( FATAL_ERROR "BUILD_IFCPYTHON enabled, but unable to find SWIG. Disable BUILD_IFCPYTHON or fix SWIG paths to proceed. " "Likely SWIG_EXECUTABLE is missing (current value - '${SWIG_EXECUTABLE}')." ) -ENDIF() +endif() include(GNUInstallDirs) -INCLUDE(${SWIG_USE_FILE}) +include(${SWIG_USE_FILE}) -IF(NOT "${PYTHON_INCLUDE_DIR}" STREQUAL "") +if(NOT "${PYTHON_INCLUDE_DIR}" STREQUAL "") # Hint for FindPython where to find Python_INCLUDE_DIRS. set(Python_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}") - MESSAGE(STATUS "Looking for Python header files in: ${Python_INCLUDE_DIR}") -ENDIF() -IF(NOT "${PYTHON_LIBRARY}" STREQUAL "") + message(STATUS "Looking for Python header files in: ${Python_INCLUDE_DIR}") +endif() +if(NOT "${PYTHON_LIBRARY}" STREQUAL "") # Hint for FindPython where to find Python_LIBRARIES. set(Python_LIBRARY "${PYTHON_LIBRARY}") - MESSAGE(STATUS "Looking for Python library file in: ${Python_LIBRARY}") -ENDIF() + message(STATUS "Looking for Python library file in: ${Python_LIBRARY}") +endif() # Development.Module = headers on Unix, headers+libraries on Windows. # Required variables: @@ -53,31 +53,29 @@ ENDIF() # Unfortunately all paths must be always provided explicitly, not by prefixing PATH. # Otherwise FindPython will break on newer Python versions (list of supported versions is hardcoded). find_package(Python COMPONENTS Development.Module) -IF(NOT Python_Development.Module_FOUND) - MESSAGE(FATAL_ERROR "BUILD_IFCPYTHON enabled, but unable to find Python lib or header. Disable BUILD_IFCPYTHON or fix Python paths to proceed.") -ENDIF() +if(NOT Python_Development.Module_FOUND) + message( + FATAL_ERROR + "BUILD_IFCPYTHON enabled, but unable to find Python lib or header. Disable BUILD_IFCPYTHON or fix Python paths to proceed." + ) +endif() # Ensure version is saved here, from wasm libraries, # not from Python interpreter that might be unrelated to pyodide Python version. set(_python_libs_version "${Python_VERSION_MAJOR}${Python_VERSION_MINOR}") -INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}) -SET(CMAKE_SWIG_FLAGS ${SWIG_DEFINES}) +set(CMAKE_SWIG_FLAGS ${SWIG_DEFINES}) -if (WITH_CGAL) +if(WITH_CGAL) set(LIBSVGFILL svgfill) endif() -SET_SOURCE_FILES_PROPERTIES(IfcPython.i PROPERTIES CPLUSPLUS ON) +set_source_files_properties(IfcPython.i PROPERTIES CPLUSPLUS ON) # Rebuild on changes in other .i files. -SET_PROPERTY( - SOURCE IfcPython.i - PROPERTY DEPENDS - IfcGeomWrapper.i - IfcParseWrapper.i - utils/type_conversion.i - utils/typemaps_in.i - utils/typemaps_out.i +set_property( + SOURCE IfcPython.i + PROPERTY DEPENDS IfcGeomWrapper.i IfcParseWrapper.i utils/type_conversion.i utils/typemaps_in.i utils/typemaps_out.i ) # On Windows there is '_d' prefix for debug builds - e.g. `_d.cp311-win_amd64.pyd`. @@ -92,20 +90,18 @@ endif() # But debug mode is still might be needed - e.g. Blender's Python is using it, if you're running debug build. if(NOT USE_DEBUG_PYTHON) set(Python_DEBUG_POSTFIX "") - add_compile_definitions(SWIG_PYTHON_INTERPRETER_NO_DEBUG) + add_compile_definitions(SWIG_PYTHON_INTERPRETER_NO_DEBUG) if(Python_LIBRARY_DEBUG) # If debug libraries were found, then override them with release ones. get_target_property(IMPORTED_IMPLIB Python::Module IMPORTED_IMPLIB_RELEASE) get_target_property(IMPORTED_LOCATION Python::Module IMPORTED_LOCATION_RELEASE) set_target_properties( Python::Module - PROPERTIES - IMPORTED_IMPLIB_DEBUG "${IMPORTED_IMPLIB}" - IMPORTED_LOCATION_DEBUG "${IMPORTED_LOCATION}" + PROPERTIES IMPORTED_IMPLIB_DEBUG "${IMPORTED_IMPLIB}" IMPORTED_LOCATION_DEBUG "${IMPORTED_LOCATION}" ) endif() endif() -if (CMAKE_VERSION VERSION_GREATER_EQUAL "4.2") +if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.2") # `DEBUG_POSTFIX` argument was added in 4.2. swig_add_library(ifcopenshell_wrapper LANGUAGE python SOURCES IfcPython.i DEBUG_POSTFIX "${Python_DEBUG_POSTFIX}") else() @@ -113,15 +109,12 @@ else() # swig py wrapper will try to import `_ifcopenshell_wrapper_d` module and would fail. set(SWIG_MODULE_ifcopenshell_wrapper_EXTRA_FLAGS "-interface" "_ifcopenshell_wrapper") swig_add_library(ifcopenshell_wrapper LANGUAGE python SOURCES IfcPython.i) - set_target_properties( - ifcopenshell_wrapper PROPERTIES - DEBUG_POSTFIX "${Python_DEBUG_POSTFIX}" - ) + set_target_properties(ifcopenshell_wrapper PROPERTIES DEBUG_POSTFIX "${Python_DEBUG_POSTFIX}") endif() target_link_libraries(ifcopenshell_wrapper PRIVATE Python::Module) -SET_PROPERTY(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${IFCOPENSHELL_LIBRARIES}) -if (WASM_BUILD) +set_property(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${IFCOPENSHELL_LIBRARIES}) +if(WASM_BUILD) # SIDE_MODULE=1 - add to .so all symbols from linked archives (default used by pyodide). # Since currently libIfcGeom.a seems to be linked twice it results in duplicated symbols and compilation errors. # Possibly in the future we can clean up linked libs and try `=1`. @@ -130,11 +123,7 @@ if (WASM_BUILD) if(CMAKE_GENERATOR MATCHES "Makefile" AND CMAKE_VERSION VERSION_LESS "4.2") # Accomodate bug in cmake makefile generator (fixed in 4.2+). # https://gitlab.kitware.com/cmake/cmake/-/issues/27326 - string( - REPLACE "SIDE_MODULE=1" "SIDE_MODULE=2" - CMAKE_MODULE_LINKER_FLAGS - "${CMAKE_MODULE_LINKER_FLAGS}" - ) + string(REPLACE "SIDE_MODULE=1" "SIDE_MODULE=2" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") endif() target_link_options( ifcopenshell_wrapper @@ -142,13 +131,16 @@ if (WASM_BUILD) ) endif() if("$ENV{LDFLAGS}" MATCHES ".undefined.suppress") -# On osx there is some state in the python dylib. With `-Wl,undefined,suppress` we can ignore the missing symbols at compile time. -target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${LIBSVGFILL}) + # On osx there is some state in the python dylib. With `-Wl,undefined,suppress` we can ignore the missing symbols at compile time. + target_link_libraries( + ifcopenshell_wrapper + PRIVATE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${LIBSVGFILL} + ) else() -target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL}) + target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL}) endif() target_link_libraries(ifcopenshell_wrapper PRIVATE ${CGAL_LIBRARIES}) -if ((NOT WIN32) AND BUILD_SHARED_LIBS) +if((NOT WIN32) AND BUILD_SHARED_LIBS) SET_INSTALL_RPATHS(ifcopenshell_wrapper "${IFCDIRS};${OCC_LIBRARY_DIR}") endif() @@ -156,10 +148,10 @@ endif() # directory in which the wrapper can be installed. if(NOT ${PYTHON_EXECUTABLE} STREQUAL "") set(Python_EXECUTABLE "${PYTHON_EXECUTABLE}") - MESSAGE(STATUS "Looking for Python interpreter in: ${PYTHON_EXECUTABLE}") + message(STATUS "Looking for Python interpreter in: ${PYTHON_EXECUTABLE}") endif() -FIND_PACKAGE(Python COMPONENTS Interpreter) -IF(Python_Interpreter_FOUND OR PYTHON_MODULE_INSTALL_DIR) +find_package(Python COMPONENTS Interpreter) +if(Python_Interpreter_FOUND OR PYTHON_MODULE_INSTALL_DIR) # Python_SOABI example value is 'cp311-win_amd64'. if(WASM_BUILD) # For WASM we usually don't provide interpreter, @@ -172,48 +164,43 @@ IF(Python_Interpreter_FOUND OR PYTHON_MODULE_INSTALL_DIR) else() set(PYTHON_EXTENSION_SUFFIX ".${Python_SOABI}.so") endif() - set_target_properties( - ifcopenshell_wrapper PROPERTIES - SUFFIX ${PYTHON_EXTENSION_SUFFIX} - ) - if (PYTHON_MODULE_INSTALL_DIR) - set(python_package_dir "${PYTHON_MODULE_INSTALL_DIR}") + set_target_properties(ifcopenshell_wrapper PROPERTIES SUFFIX ${PYTHON_EXTENSION_SUFFIX}) + if(PYTHON_MODULE_INSTALL_DIR) + set(python_package_dir "${PYTHON_MODULE_INSTALL_DIR}") else() - IF (USERSPACE_PYTHON_PREFIX) - EXECUTE_PROCESS( + if(USERSPACE_PYTHON_PREFIX) + execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import sys; import site; sys.stdout.write(site.USER_SITE)" OUTPUT_VARIABLE python_package_dir ) - ELSE () + else() set(python_package_dir "${Python_SITEARCH}") - ENDIF() - if (BUILD_PACKAGE) + endif() + if(BUILD_PACKAGE) set(python_package_dir ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION_MAJOR}/dist-packages/) endif() endif() - IF("${python_package_dir}" STREQUAL "") - MESSAGE(WARNING "Unable to locate Python site-package directory, unable to install the Python wrapper") - ELSE() + if("${python_package_dir}" STREQUAL "") + message(WARNING "Unable to locate Python site-package directory, unable to install the Python wrapper") + else() message(STATUS "Python wrapper will be installed to '${python_package_dir}'.") - FILE(GLOB_RECURSE sourcefiles - "${CMAKE_CURRENT_SOURCE_DIR}/../ifcopenshell-python/ifcopenshell/*" - ) - FOREACH(file ${sourcefiles}) - FILE(RELATIVE_PATH relative "${CMAKE_CURRENT_SOURCE_DIR}/../ifcopenshell-python/ifcopenshell/" "${file}") - GET_FILENAME_COMPONENT(dir "${relative}" DIRECTORY) + file(GLOB_RECURSE sourcefiles "${CMAKE_CURRENT_SOURCE_DIR}/../ifcopenshell-python/ifcopenshell/*") + foreach(file ${sourcefiles}) + file(RELATIVE_PATH relative "${CMAKE_CURRENT_SOURCE_DIR}/../ifcopenshell-python/ifcopenshell/" "${file}") + get_filename_component(dir "${relative}" DIRECTORY) if(NOT IS_DIRECTORY "${file}") - INSTALL(FILES "${file}" - DESTINATION "${python_package_dir}/ifcopenshell/${dir}") + install(FILES "${file}" DESTINATION "${python_package_dir}/ifcopenshell/${dir}") endif() - ENDFOREACH() - INSTALL(FILES "${CMAKE_BINARY_DIR}/ifcwrap/ifcopenshell_wrapper.py" - DESTINATION "${python_package_dir}/ifcopenshell") - INSTALL(TARGETS ifcopenshell_wrapper - DESTINATION "${python_package_dir}/ifcopenshell") - if (MSVC) - INSTALL(FILES $ DESTINATION bin OPTIONAL) - endif() - ENDIF() -ELSE() - MESSAGE(WARNING "No Python interpreter found, unable to install the Python wrapper") -ENDIF() + endforeach() + install( + FILES "${CMAKE_BINARY_DIR}/ifcwrap/ifcopenshell_wrapper.py" + DESTINATION "${python_package_dir}/ifcopenshell" + ) + install(TARGETS ifcopenshell_wrapper DESTINATION "${python_package_dir}/ifcopenshell") + if(MSVC) + install(FILES $ DESTINATION bin OPTIONAL) + endif() + endif() +else() + message(WARNING "No Python interpreter found, unable to install the Python wrapper") +endif() diff --git a/src/qtviewer/CMakeLists.txt b/src/qtviewer/CMakeLists.txt index 52d45d1b1d..0ffed811a7 100644 --- a/src/qtviewer/CMakeLists.txt +++ b/src/qtviewer/CMakeLists.txt @@ -21,7 +21,15 @@ message("Running CMakeLists.txt in /src/qtviewer") # Specify the Qt version and components to use set(QT_VERSION 6 CACHE STRING "Qt version") -set(QT_COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets CACHE STRING "Qt components") +set(QT_COMPONENTS + Core + Gui + OpenGL + OpenGLWidgets + Widgets + CACHE STRING + "Qt components" +) find_package(Qt${QT_VERSION} COMPONENTS ${QT_COMPONENTS} REQUIRED PATHS ${QT_DIR}) @@ -45,10 +53,7 @@ set(targetName "QtViewer") # Scan for .qrc files and add to build process set(CMAKE_AUTORCC ON) -set(RESOURCE_FILES - resources/qt_resources.qrc - resources/qt_res.rc -) +set(RESOURCE_FILES resources/qt_resources.qrc resources/qt_res.rc) # The MACOSX_BUNDLE_ICON_FILE variable is added to the Info.plist # generated by CMake. This variable contains the .icns file name, @@ -57,10 +62,10 @@ set(MACOSX_BUNDLE_ICON_FILE ifcosLogo.icns) # The following tells CMake where to find and install the file itself. set(app_icon_macos "resources/ifcosLogo.icns") -set_source_files_properties(${app_icon_macos} PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources") +set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") -add_executable(${targetName} +add_executable( + ${targetName} MessageLogger.h IfcViewerWidget.h IfcViewerWidget.cpp @@ -73,14 +78,13 @@ add_executable(${targetName} ${app_icon_macos} ) -set_target_properties(${targetName} PROPERTIES - AUTOMOC On - WIN32_EXECUTABLE ON - MACOSX_BUNDLE ON - RESOURCE "${RESOURCE_FILES}" +set_target_properties( + ${targetName} + PROPERTIES AUTOMOC On WIN32_EXECUTABLE ON MACOSX_BUNDLE ON RESOURCE "${RESOURCE_FILES}" ) -target_link_libraries(${targetName} +target_link_libraries( + ${targetName} ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES} @@ -91,10 +95,7 @@ target_link_libraries(${targetName} Qt${QT_VERSION}::Widgets ) -target_include_directories(${targetName} PUBLIC - ${QT_DIR}/include - ${OPENSCENEGRAPH_INCLUDE_DIRS} -) +target_include_directories(${targetName} PUBLIC ${QT_DIR}/include ${OPENSCENEGRAPH_INCLUDE_DIRS}) get_target_property(targetIncludeDirs ${targetName} INCLUDE_DIRECTORIES) message(STATUS "target_include_directories: ${targetIncludeDirs}") diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index c6632451c7..94b30a0e38 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -5,10 +5,12 @@ file(GLOB SERIALIZERS_CPP_FILES *.cpp) set(SERIALIZERS_FILES ${SERIALIZERS_H_FILES} ${SERIALIZERS_CPP_FILES}) add_library(Serializers ${SERIALIZERS_FILES}) -set_target_properties(Serializers PROPERTIES - COMPILE_FLAGS "-DSERIALIZERS_EXPORTS" - VERSION "${PROJECT_VERSION}" - SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" +set_target_properties( + Serializers + PROPERTIES + COMPILE_FLAGS "-DSERIALIZERS_EXPORTS" + VERSION "${PROJECT_VERSION}" + SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" ) set(SERIALIZER_SCHEMA_LIBRARIES Serializers ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) @@ -21,18 +23,21 @@ if(WITH_PROJ) target_link_libraries(Serializers PRIVATE PROJ::proj) endif() -target_link_libraries(Serializers +target_link_libraries( + Serializers PRIVATE - ${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} ${GLTF_LIBRARIES} - IfcGeom ${OpenCASCADE_LIBRARIES} ${kernel_libraries} IfcParse + ${SERIALIZER_SCHEMA_LIBRARIES} + ${OPENCOLLADA_LIBRARIES} + ${USD_LIBRARIES} + ${GLTF_LIBRARIES} + IfcGeom + ${OpenCASCADE_LIBRARIES} + ${kernel_libraries} + IfcParse ) install(TARGETS Serializers) # Can't use `PUBLIC_HEADER` since we need two folders. -install(FILES ${SERIALIZERS_H_FILES} - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/" -) -install(FILES ${SERIALIZERS_S_H_FILES} - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/schema_dependent" -) +install(FILES ${SERIALIZERS_H_FILES} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/") +install(FILES ${SERIALIZERS_S_H_FILES} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/schema_dependent") diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt index 6fdcc8e482..ef877342e9 100644 --- a/src/serializers/schema_dependent/CMakeLists.txt +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -5,12 +5,14 @@ set(SERIALIZERS_S_FILES ${SERIALIZERS_S_H_FILES} ${SERIALIZERS_S_CPP_FILES}) foreach(schema ${SCHEMA_VERSIONS}) add_library(Serializers_ifc${schema} OBJECT ${SERIALIZERS_S_FILES}) set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} Serializers_ifc${schema}) - set_target_properties(Serializers_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") + set_target_properties( + Serializers_ifc${schema} + PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}" + ) target_link_libraries(Serializers_ifc${schema} ${HDF5_LIBRARIES} ${GLTF_LIBRARIES}) if(NOT WASM_BUILD) target_link_libraries(Serializers_ifc${schema} IfcGeom ${OpenCASCADE_LIBRARIES}) endif() endforeach() - set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 7caf67d6d7..f2f8c1a062 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -1,20 +1,19 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -project (svgfill) +project(svgfill) -if (POLICY CMP0144) # 3.27 +if(POLICY CMP0144) # 3.27 cmake_policy(SET CMP0144 NEW) # find_package() uses upper-case _ROOT variables. endif() if(POLICY CMP0167) # 3.30 find_package(Boost) to use BoostConfig instead of FindBoost. cmake_policy(SET CMP0167 OLD) endif() - if(WIN32 AND NOT DEFINED ENV{CONDA_BUILD}) - set(Boost_USE_STATIC_LIBS ON) - set(Boost_USE_MULTITHREADED ON) - if (USE_STATIC_MSVC_RUNTIME) + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_MULTITHREADED ON) + if(USE_STATIC_MSVC_RUNTIME) set(Boost_USE_STATIC_RUNTIME ON) endif() else() @@ -28,8 +27,8 @@ else() endif() endif() -if (MSVC) - add_definitions(-bigobj) +if(MSVC) + add_definitions(-bigobj) endif() find_package(Boost) @@ -37,35 +36,31 @@ message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") find_package(LibXml2 REQUIRED) find_package(CGAL REQUIRED) - -include_directories(${Boost_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include -) +include_directories(${Boost_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include) file(GLOB LIB_H_FILES src/*.h) file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp) set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES}) add_library(svgfill ${LIB_SRC_FILES}) target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 IFCOPENSHELL_CGAL) -set_target_properties(svgfill PROPERTIES - PUBLIC_HEADER "${LIB_H_FILES}" -) +set_target_properties(svgfill PROPERTIES PUBLIC_HEADER "${LIB_H_FILES}") add_executable(svgfill_exe src/main.cpp) target_link_libraries(svgfill_exe svgfill) set_property(TARGET svgfill_exe PROPERTY OUTPUT_NAME svgfill) if(WIN32) - # both the library and the executable now result in a file with basename svgfill, - # on linux the the library is prefixed with lib as libsvgfill.a. Windows does not - # have this mechanism, so on windows the linker would be created an import library - # for the executable, also named svgfill.lib. This naming conflict results in: - # LINK : fatal error LNK1149: output filename matches input filename - # This flag tells the linker not to generate an import library and therefore no - # conflict occurs. + # both the library and the executable now result in a file with basename svgfill, + # on linux the the library is prefixed with lib as libsvgfill.a. Windows does not + # have this mechanism, so on windows the linker would be created an import library + # for the executable, also named svgfill.lib. This naming conflict results in: + # LINK : fatal error LNK1149: output filename matches input filename + # This flag tells the linker not to generate an import library and therefore no + # conflict occurs. target_link_options(svgfill_exe PRIVATE "/NOIMPLIB") endif() -install(TARGETS svgfill_exe svgfill +install( + TARGETS svgfill_exe svgfill EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/svgfill" ) From 3a697e3062b1fd54bf177f1b374fa7486858d635 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Sat, 20 Dec 2025 14:06:48 +0500 Subject: [PATCH 422/657] dependabot - track Python tools versions --- .github/dependabot.yml | 4 ++++ pyproject.toml | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8d98ca21fc..52f63cb5d9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,3 +6,7 @@ updates: directory: "/" schedule: interval: "weekly" + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" diff --git a/pyproject.toml b/pyproject.toml index 801d034d4e..8df2bb8091 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,13 @@ +[project] +name = "IfcOpenShell" +version = "0.0.0" +dependencies = [ + "black==25.12", + "ruff==0.14.10", + "poethepoet", + "gersemi==0.24", +] + [tool.black] line-length = 120 include = ''' From a3fda66dec3e6496feceb24a81a05f67a70a3cd0 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 22 Dec 2025 18:59:58 +0500 Subject: [PATCH 423/657] black . --- src/bonsai/bonsai/bim/operator.py | 3 ++- src/bonsai/bonsai/core/drawing.py | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index a3f58d1c44..ffe2e4f662 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -260,7 +260,6 @@ class SaveBlendMetadataFile(bpy.types.Operator): self.report({"WARNING"}, "No IFC file path set.") return {"CANCELLED"} - blendmetadata_path = ifc_file + ".metadata.blend" ifc_dir = os.path.dirname(ifc_file) @@ -332,12 +331,14 @@ except Exception: bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') """ import tempfile + with tempfile.NamedTemporaryFile("w", suffix=".py", delete=False) as script_file: script_file.write(cleanup_script) script_path = script_file.name blender_exe = bpy.app.binary_path import subprocess + result = subprocess.run( [blender_exe, temp_path, "--background", "--python", script_path], capture_output=True, text=True ) diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index 118fc3b69c..fd721cd4be 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -488,28 +488,28 @@ def sync_references( for element in potential_reference_elements: # Skip spatial elements - their IFC placement is the source of truth - if element.is_a("IfcSpatialElement"): + if element.is_a("IfcSpatialElement"): continue - + # Skip grids - their IFC placement is the source of truth if element.is_a("IfcGrid") or element.is_a("IfcGridAxis"): continue - + if (obj := ifc.get_object(element)) and ifc.is_moved(obj): drawing_tool.sync_object_placement(obj) for element in drawing_tool.get_group_elements(group): if not drawing_tool.is_auto_annotation(element): continue - + # Skip spatial elements - should never sync their placement if element.is_a("IfcSpatialElement"): continue - + # Skip grids if element.is_a("IfcGrid") or element.is_a("IfcGridAxis"): - continue - + continue + if (obj := ifc.get_object(element)) and ifc.is_moved(obj): drawing_tool.sync_object_placement(obj) if not (reference_element := drawing_tool.get_assigned_product(element)): From cc559212a3831d7cb68dca67be0cabdfd743f585 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 22 Dec 2025 18:38:34 +0500 Subject: [PATCH 424/657] cmake - fix regression with policy not taking effect after 3971408 --- cmake/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2d4d892c0a..43b9ba8913 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -35,11 +35,10 @@ else() set(RELEASE_VERSION "0.8.0") endif() -project(IfcOpenShell VERSION ${RELEASE_VERSION}) - add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) if(POLICY CMP0141) # 3.25+ + # Has to be set before `project` to take effect. cmake_policy(SET CMP0141 NEW) # Support for `CMAKE_MSVC_DEBUG_INFORMATION_FORMAT`. endif() if(POLICY CMP0144) # 3.27 @@ -49,6 +48,8 @@ if(POLICY CMP0167) # 3.30 cmake_policy(SET CMP0167 OLD) endif() +project(IfcOpenShell VERSION ${RELEASE_VERSION}) + if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif() From 48bb541f2f7b6865a2e1ad4de7c4a36f0a7d9d3f Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 23 Dec 2025 06:54:43 +0100 Subject: [PATCH 425/657] add configurable suffix for metadata blend file --- src/bonsai/bonsai/bim/module/project/operator.py | 13 +++++++++++-- src/bonsai/bonsai/bim/module/project/ui.py | 6 +++++- src/bonsai/bonsai/bim/operator.py | 12 ++++++++++-- src/bonsai/bonsai/bim/ui.py | 14 +++++++++++--- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 94d7279daa..64d6877757 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -1062,10 +1062,15 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): and not self.is_advanced ): filepath = self.get_filepath() - metadata_path = Path(str(filepath) + ".metadata.blend") + suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix + if str(filepath).lower().endswith(".ifc"): + metadata_path = Path(str(filepath)[:-4] + suffix) + else: + metadata_path = Path(str(filepath) + suffix) if metadata_path.exists() and metadata_path.is_file(): try: bpy.ops.bim.load_blend_metadata_and_ifc(filepath=filepath) + self.report({"INFO"}, f"Loaded metadata file: {metadata_path.name}") return {"FINISHED"} except Exception as e: self.report({"WARNING"}, f"Failed to load metadata file, using regular load: {e}") @@ -1763,7 +1768,11 @@ class ExportIFC(bpy.types.Operator, ExportHelper): if tool.Blender.get_addon_preferences().save_metadata_blend_file: try: bpy.ops.bim.save_blend_metadata_file() - blendmetadata_path = output_file + ".metadata.blend" + suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix + if output_file.lower().endswith(".ifc"): + blendmetadata_path = output_file[:-4] + suffix + else: + blendmetadata_path = output_file + suffix self.report( {"INFO"}, f'IFC Project "{os.path.basename(output_file)}" And Metadata File Saved to: {os.path.basename(blendmetadata_path)}', diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index fa45494e0f..5d4f3f695b 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -332,10 +332,14 @@ class BIM_PT_project(Panel): row.operator("bim.select_ifc_file", icon="FILE_FOLDER", text="") if tool.Blender.get_addon_preferences().save_metadata_blend_file: + suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix + if props.ifc_file.lower().endswith(".ifc"): + metadata_filename = os.path.basename(props.ifc_file)[:-4] + suffix + else: + metadata_filename = os.path.basename(props.ifc_file) + suffix row = self.layout.row(align=True) col = row.column() col.enabled = False - metadata_filename = os.path.basename(props.ifc_file) + ".metadata.blend" col.label(text=f"Saving session data to: {metadata_filename}") diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index ffe2e4f662..0b7dcd917e 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -260,7 +260,11 @@ class SaveBlendMetadataFile(bpy.types.Operator): self.report({"WARNING"}, "No IFC file path set.") return {"CANCELLED"} - blendmetadata_path = ifc_file + ".metadata.blend" + suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix + if ifc_file.lower().endswith(".ifc"): + blendmetadata_path = ifc_file[:-4] + suffix + else: + blendmetadata_path = ifc_file + suffix ifc_dir = os.path.dirname(ifc_file) temp_path = os.path.join(ifc_dir, "__temp_blendmetadata.blend") @@ -376,7 +380,11 @@ class LoadBlendMetadataAndIFC(bpy.types.Operator): self.report({"WARNING"}, "No IFC file path set.") return {"CANCELLED"} - metadata_path = ifc_file + ".metadata.blend" + suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix + if ifc_file.lower().endswith(".ifc"): + metadata_path = ifc_file[:-4] + suffix + else: + metadata_path = ifc_file + suffix # Open the metadata blend file bpy.ops.wm.open_mainfile(filepath=metadata_path) # After loading metadata, clear blend warning (no geometry loaded yet) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 338c766b81..e9ab0b446c 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -715,13 +715,18 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): ) save_metadata_blend_file: BoolProperty( - name="Save non ifc data to .metadata.blend File", - description="Save session data (window layout, settings) to a .metadata.blend file alongside the IFC file. This file is automatically loaded when opening the project.", + name="Save non ifc data to metadata blend File", + description="Save session data (window layout, settings) to a metadata blend file alongside the IFC file. This file is automatically loaded when opening the project.", default=False, ) + metadata_blend_file_suffix: StringProperty( + name="Metadata File Suffix", + description="Custom suffix for the metadata blend file. Will be appended to the filename (without .ifc).", + default=".ifc.metadata.blend", + ) user_ui_customization: BoolProperty( name="User UI Customization", - description="Enable user interface customization features (hide/show tabs and panels, bookmark panels) and save the session settings as part of the .metadata.blend file", + description="Enable user interface customization features (hide/show tabs and panels, bookmark panels) and save the session settings as part of the metadata blend file", default=False, ) @@ -958,6 +963,9 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/comment/27030" layout.prop(self, "save_metadata_blend_file") if self.save_metadata_blend_file: + row = layout.row() + row.separator() + row.prop(self, "metadata_blend_file_suffix") row = layout.row() row.separator() row.prop(self, "user_ui_customization") From 2403428d12007b4919d7b4c622e6e504667e08c1 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 23 Dec 2025 07:12:19 +0100 Subject: [PATCH 426/657] copy_node_graph handle missing temp_override keys --- src/bonsai/bonsai/tool/blender.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index df8d12b90b..89f72b91e8 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -387,6 +387,8 @@ class Blender(bonsai.core.tool.Blender): @classmethod def copy_node_graph(cls, material_to: bpy.types.Material, material_from: bpy.types.Material) -> None: temp_override = cls.get_shader_editor_context() + if not temp_override or any(k not in temp_override for k in ("area", "space", "screen")) or temp_override.get("window") is None: + return shader_editor = temp_override["space"] # remove all nodes from the current material From f3669db8e7368afc1dae6ae3ad2be70f2b14ab29 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 24 Dec 2025 19:17:57 +0500 Subject: [PATCH 427/657] black . --- src/bonsai/bonsai/tool/blender.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 89f72b91e8..505bde2b2d 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -387,7 +387,11 @@ class Blender(bonsai.core.tool.Blender): @classmethod def copy_node_graph(cls, material_to: bpy.types.Material, material_from: bpy.types.Material) -> None: temp_override = cls.get_shader_editor_context() - if not temp_override or any(k not in temp_override for k in ("area", "space", "screen")) or temp_override.get("window") is None: + if ( + not temp_override + or any(k not in temp_override for k in ("area", "space", "screen")) + or temp_override.get("window") is None + ): return shader_editor = temp_override["space"] From 5d8d6a0a4c90734e6a3cb9557128f3a661fe8276 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 24 Dec 2025 14:24:57 +0500 Subject: [PATCH 428/657] build-deps - use cpp files compilation multiprocessing To speed up the process. Previously we were using `/m` which build different targets in parallel, but not .cpp files. So rocksdb could have been building for 30 mins because of this. --- win/build-deps.cmd | 3 ++- win/install-ifcopenshell.bat | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index e01cd62d65..040d87b9f0 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -98,7 +98,8 @@ IF NOT DEFINED IFCOS_NUM_BUILD_PROCS set IFCOS_NUM_BUILD_PROCS=%NUMBER_OF_PROCES :: For subroutines REM /clp:ErrorsOnly;WarningsOnly :: Note BUILD_TYPE not passed, Clean e.g. wouldn't delete the installed files. -set MSBUILD_CMD=MSBuild.exe /nologo /m:%IFCOS_NUM_BUILD_PROCS% +set MSBUILD_MULTIPROC=/m /p:CL_MPCount=%IFCOS_NUM_BUILD_PROCS% /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true +set MSBUILD_CMD=MSBuild.exe /nologo %MSBUILD_MULTIPROC% echo. diff --git a/win/install-ifcopenshell.bat b/win/install-ifcopenshell.bat index 6c46574819..ee6ed3b53c 100755 --- a/win/install-ifcopenshell.bat +++ b/win/install-ifcopenshell.bat @@ -58,7 +58,8 @@ call cecho.cmd 0 13 "* IFCOS_NUM_BUILD_PROCS`t= %IFCOS_NUM_BUILD_PROCS%" echo. call cecho.cmd 0 13 "Installing %VS_PLATFORM% %BUILD_CFG% %PROJECT_NAME%" -cmake --build ..\%BUILD_DIR% --target INSTALL -- /nologo /m:%IFCOS_NUM_BUILD_PROCS% /p:Platform=%VS_PLATFORM% ^ +set MSBUILD_MULTIPROC=/m /p:CL_MPCount=%IFCOS_NUM_BUILD_PROCS% /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true +cmake --build ..\%BUILD_DIR% --target INSTALL -- /nologo %MSBUILD_MULTIPROC% /p:Platform=%VS_PLATFORM% ^ /p:Configuration=%BUILD_CFG% %3 %4 %5 %6 %7 %8 %9 IF NOT %ERRORLEVEL%==0 GOTO :Error From c6220b79b6d459ccda82aa07a7c9a7d31a89aea2 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 24 Dec 2025 15:16:25 +0500 Subject: [PATCH 429/657] build-deps - use `cmake --build` --- win/build-deps.cmd | 67 +++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 040d87b9f0..b8e42d14d3 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -282,7 +282,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\proj-9.2.1" ^ -DBUILD_SHARED_LIBS=Off ^ -DBUILD_TESTING=Off IF NOT %ERRORLEVEL%==0 GOTO :Error -call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\PROJ.sln" %BUILD_CFG% +call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -379,7 +379,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%HDF5_INSTALL_NAME%" ^ -DHDF5_BUILD_TOOLS=OFF -DHDF5_BUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DHDF5_BUILD_UTILS=OFF ^ -DHDF5_BUILD_CPP_LIB=ON IF NOT %ERRORLEVEL%==0 GOTO :Error -call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\HDF5.sln" %DEBUG_OR_RELEASE% +call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE% IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -466,7 +466,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" -DLIBXML2_LIBRARIES="" -DLIBXML2_INCLUDE_DIR="" -DPCRE_INCLUDE_DIR="" -DPCRE_LIBRARIES="" IF NOT %ERRORLEVEL%==0 GOTO :Error REM IF NOT EXIST "%DEPS_DIR%\OpenCOLLADA\%BUILD_DIR%\lib\%DEBUG_OR_RELEASE%\OpenCOLLADASaxFrameworkLoader.lib". -call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\OPENCOLLADA.sln" %DEBUG_OR_RELEASE% +call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE% IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -502,7 +502,7 @@ cd "%DEPENDENCY_DIR%" :: NOTE FreeType is built as a static library by default call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\freetype" if not %ERRORLEVEL%==0 goto :Error -call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\freetype.sln" %BUILD_CFG% +call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% if not %ERRORLEVEL%==0 goto :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% if not %ERRORLEVEL%==0 goto :Error @@ -540,7 +540,7 @@ IF %ARCH_BITS%==32 ( ) ) -call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\OCCT.sln" %BUILD_CFG% +call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% if not %ERRORLEVEL%==0 goto :Error :: If `inc` is present in installation folder, then installation takes much longer @@ -627,7 +627,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%DEPENDENCY_INSTALL_DIR%" ^ -DWITH_PCRE=OFF ^ -DBISON_EXECUTABLE="%DEPS_DIR%\%WIN_FLEX_BISON%\win_bison.exe" IF NOT %ERRORLEVEL%==0 GOTO :Error -call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\swig.sln" Release +call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" Release IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" Release IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -650,7 +650,7 @@ git apply --ignore-whitespace "%~dp0patches\cgal_no_zlib.patch" call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\cgal" ^ -DCGAL_HEADER_ONLY=On IF NOT %ERRORLEVEL%==0 GOTO :Error -call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\CGAL.sln" %BUILD_CFG% +call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -686,7 +686,7 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error cd "%DEPENDENCY_DIR%"\build\cmake call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\zstd" -DZSTD_BUILD_STATIC=ON -DZSTD_BUILD_SHARED=OFF IF NOT %ERRORLEVEL%==0 GOTO :Error -call :BuildSolution "%DEPENDENCY_DIR%\build\cmake\%BUILD_DIR%\zstd.sln" %BUILD_CFG% +call :BuildCMakeProject "%DEPENDENCY_DIR%\build\cmake\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\build\cmake\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -727,7 +727,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" -DPORTABLE=1 ^ -DCMAKE_DEBUG_POSTFIX="_d" IF NOT %ERRORLEVEL%==0 GOTO :Error -call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\rocksdb.sln" %BUILD_CFG% +call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -742,7 +742,7 @@ call :MarkInstallation :: call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\tbb" ^ :: -DBUILD_SHARED_LIBS=Off :: IF NOT %ERRORLEVEL%==0 GOTO :Error -:: call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\TBB.sln" %BUILD_CFG% +:: call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% :: IF NOT %ERRORLEVEL%==0 GOTO :Error :: call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% :: IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -766,7 +766,7 @@ call :MarkInstallation :: -DPXR_BUILD_TESTS=FALSE ^ :: -DBUILD_SHARED_LIBS=Off ^ :: IF NOT %ERRORLEVEL%==0 GOTO :Error -:: call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\USD.sln" %BUILD_CFG% +:: call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% :: IF NOT %ERRORLEVEL%==0 GOTO :Error :: call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% :: IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -895,20 +895,36 @@ pushd %BUILD_DIR% :: cache always e.g. when we've had new changes in the repository. IF %BUILD_TYPE%==Rebuild IF EXIST CMakeCache.txt. del CMakeCache.txt +set VS_TOOLSET_CMAKE_ARG= IF NOT "%VS_TOOLSET_HOST%"=="" ( - cmake .. -G %GENERATOR% -A %VS_PLATFORM% -T %VS_TOOLSET_HOST% %* -) ELSE ( - cmake .. -G %GENERATOR% -A %VS_PLATFORM% %* + set VS_TOOLSET_CMAKE_ARG=-T %VS_TOOLSET_HOST% ) - +set COMMAND=cmake .. -G %GENERATOR% -A %VS_PLATFORM% %VS_TOOLSET_CMAKE_ARG% %* +echo %COMMAND% +%COMMAND% set RET=%ERRORLEVEL% popd exit /b %RET% -:: TODO add BuildCMakeProject which utilizes cmake --build +:: Params: %1 buildDir, %2 configuration +:: Required vars: +:: - DEPENDENCY_NAME +:BuildCMakeProject +pushd %1 +call cecho.cmd 0 13 "Building %DEPENDENCY_NAME%. Please be patient, this will take a while." +set COMPILE_WITH_WPO_SETTING= +IF NOT %COMPILE_WITH_WPO%==FALSE ( + set COMPILE_WITH_WPO_SETTING=;WholeProgramOptimization=TRUE +) +set COMMAND=cmake --build . --config %2 -- %MSBUILD_MULTIPROC% +echo %COMMAND% +%COMMAND% +set RET=%ERRORLEVEL% +popd +exit /b %RET% :: BuildSolution - Builds/Rebuilds/Cleans a solution using MSBuild -:: Params: %1 solutioName, %2 configuration +:: Params: %1 solutionName, %2 configuration :BuildSolution IF [%~3]==[] ( set TARGET=%BUILD_TYPE% @@ -930,20 +946,15 @@ IF NOT %COMPILE_WITH_WPO%==FALSE ( %MSBUILD_CMD% %1 /p:configuration=%2;platform=%VS_PLATFORM%%COMPILE_WITH_WPO_SETTING% /t:"%TARGET%" exit /b %ERRORLEVEL% -:: InstallCMakeProject - Builds the INSTALL project of CMake-based project -:: Params: %1 buildDir, %2 == configuration -:: NOTE the actual install dir is set during cmake run. -:: TODO Utilize cmake --build --target INSTALL +:: Params: %1 buildDir, %2 configuration +:: Required vars: +:: - DEPENDENCY_NAME :InstallCMakeProject pushd %1 call cecho.cmd 0 13 "Installing %2 %DEPENDENCY_NAME%. Please be patient, this will take a while." - -:: whole program optimization avoids Visual C++ hanging when compiling 32-bit release OCCT up to version 7.4.0 -set COMPILE_WITH_WPO_SETTING= -IF NOT %COMPILE_WITH_WPO%==FALSE ( - set COMPILE_WITH_WPO_SETTING=;WholeProgramOptimization=TRUE -) -%MSBUILD_CMD% INSTALL.%VCPROJ_FILE_EXT% /p:configuration=%2;platform=%VS_PLATFORM%%COMPILE_WITH_WPO_SETTING% +set COMMAND=cmake --install . --config %2 +echo %COMMAND% +%COMMAND% set RET=%ERRORLEVEL% popd exit /b %RET% From 8e639b00e314a2ed7f31878f9ae65617a6f3b578 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 24 Dec 2025 16:20:41 +0500 Subject: [PATCH 430/657] Skip freetype dependency as it's not required anymore It's not required since OCCT 7.6.0 https://github.com/Open-Cascade-SAS/OCCT/commit/5c9493b34878267b65879270951026982507917b --- nix/build-all.py | 15 +-------------- win/build-deps.cmd | 21 +-------------------- 2 files changed, 2 insertions(+), 34 deletions(-) diff --git a/nix/build-all.py b/nix/build-all.py index a76a53862c..448e3655ec 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -349,14 +349,13 @@ dependency_tree: "dict[str, tuple[str, ...]]" = { "boost": (), "libxml2": (), "python": (), - "occ": ("freetype",), + "occ": (), "pcre": (), "pcre2": (), "json": (), "hdf5": (), "cgal": (), "eigen": (), - "freetype": (), "rocksdb": ("zstd",), "zstd": (), # 'usd': ('boost', 'oneTBB') @@ -951,17 +950,6 @@ if "swig" in targets: revision=f"v{SWIG_VERSION}", ) -if "freetype" in targets: - build_dependency( - name=f"freetype", - mode="cmake", - build_tool_args=[f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/freetype"], - download_url="https://github.com/freetype/freetype", - download_name="freetype2", - download_tool=download_tool_git, - revision="VER-2-14-0", - ) - if USE_OCCT and "occ" in targets: patches = [] if OCCT_VERSION < "7.4": @@ -996,7 +984,6 @@ if USE_OCCT and "occ" in targets: f"-DUSE_FREETYPE=OFF", f"-DUSE_OPENGL=OFF", f"-DUSE_GLES2=OFF", - f"-D3RDPARTY_FREETYPE_DIR={DEPS_DIR}/install/freetype", f"-DCMAKE_POLICY_VERSION_MINIMUM=3.5", *MAC_CROSS_COMPILE_INTEL_ARGS, ], diff --git a/win/build-deps.cmd b/win/build-deps.cmd index b8e42d14d3..ac523774b5 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -488,25 +488,6 @@ echo OCC_INSTALL_DIR=%DEPENDENCY_INSTALL_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" call :CheckInstallation if %ERRORLEVEL%==200 GOTO %NEXT_DEPENDENCY_LABEL% -:: OCCT has many dependencies but FreeType is the only mandatory -set DEPENDENCY_NAME=FreeType -set DEPENDENCY_DIR=%DEPS_DIR%\freetype-2.7.1 -set FREETYPE_ZIP=VER-2-7-1.zip -cd "%DEPS_DIR%" -call :DownloadFile https://github.com/freetype/freetype/archive/refs/tags/%FREETYPE_ZIP% "%DEPS_DIR%" %FREETYPE_ZIP% -if not %ERRORLEVEL%==0 goto :Error -call :ExtractArchive %FREETYPE_ZIP% "%DEPS_DIR%" "%DEPENDENCY_DIR%" -if not %ERRORLEVEL%==0 goto :Error -if exist "%DEPS_DIR%\freetype-VER-2-7-1" ren "%DEPS_DIR%\freetype-VER-2-7-1" "freetype-2.7.1" -cd "%DEPENDENCY_DIR%" -:: NOTE FreeType is built as a static library by default -call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\freetype" -if not %ERRORLEVEL%==0 goto :Error -call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% -if not %ERRORLEVEL%==0 goto :Error -call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% -if not %ERRORLEVEL%==0 goto :Error - set DEPENDENCY_NAME=Open CASCADE %OCCT_VERSION% set DEPENDENCY_DIR=%DEPS_DIR%\occt_git set DEPENDENCY_INSTALL_NAME=%OCCT_DEPENDENCY_INSTALL_NAME% @@ -529,7 +510,7 @@ cd "%DEPENDENCY_DIR%" :: Temporarily explicitly set `CMAKE_DEBUG_POSTFIX` to empty to override it's perviously being set to `d`. :: OCCT don't need it, since it's layout is separating debug and release build by different folders. call :RunCMake -DINSTALL_DIR="%DEPENDENCY_INSTALL_DIR%" -DBUILD_LIBRARY_TYPE="Static" -DCMAKE_DEBUG_POSTFIX="" ^ - -DBUILD_MODULE_Draw=0 -D3RDPARTY_FREETYPE_DIR="%INSTALL_DIR%\freetype" ^ + -DBUILD_MODULE_Draw=0 -DUSE_FREETYPE=OFF ^ -DBUILD_USE_PCH=ON if not %ERRORLEVEL%==0 goto :Error From 633c3bc7eb24c29c1f22a778c6deea7673e24b32 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 24 Dec 2025 17:12:17 +0500 Subject: [PATCH 431/657] build-deps - move some code to powershell --- win/build-deps.cmd | 86 ++++++++----------------------------- win/utils/tools.ps1 | 100 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 116 insertions(+), 70 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index ac523774b5..c81541104f 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -793,76 +793,31 @@ exit %IFCOS_SCRIPT_RET% :: DownloadFile - Downloads a file using PowerShell :: Params: %1 url, %2 destinationDir, %3 filename +:: Required vars: +:: - DEPENDENCY_NAME :DownloadFile -mkdir "%2" -pushd "%2" -if not exist "%~3". ( - call cecho.cmd 0 13 "Downloading %DEPENDENCY_NAME% into %~2." - powershell -Command "[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; $webClient = new-object System.Net.WebClient; $webClient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials; $webClient.DownloadFile('%1', '%3')" - REM Old wget version in case someone has problem with PowerShell: wget --no-check-certificate %1 -) else ( - call cecho.cmd 0 13 "%DEPENDENCY_NAME% already downloaded. Skipping." -) -set RET=%ERRORLEVEL% -set LAST_ACTION=DownloadFile '%DEPENDENCY_NAME%'. -popd -exit /b %RET% +%PWSH_TOOLS% download_file "%DEPENDENCY_NAME%" "%1" "%2" "%3" +IF NOT %ERRORLEVEL%==0 GOTO :Error +exit /b 0 :: ExtractArchive - Extracts an archive file using 7-zip :: Params: %1 filename, %2 destinationDir, %3 dirAfterExtraction +:: Required vars: +:: - DEPENDENCY_NAME :ExtractArchive -if not exist "%~3". ( - call cecho.cmd 0 13 "Extracting %DEPENDENCY_NAME% into %~2 from %1" - 7za x %1 -y -o%2 > nul -) else ( - call cecho.cmd 0 13 "%DEPENDENCY_NAME% already extracted into %~3. Skipping." -) -set RET=%ERRORLEVEL% -set LAST_ACTION=ExtractArchive '%DEPENDENCY_NAME%'. -exit /b %RET% - -:: GitCloneOrPullRepository - Clones or pulls (if repository already cloned) a Git repository -:: Params: %1 gitUrl, %2 destDir -:: F.ex. call :GitCloneRepository https://github.com/KhronosGroup/OpenCOLLADA.git "%DEPS_DIR%\OpenCOLLADA\" -:GitCloneOrPullRepository -if not exist "%~2". ( - call cecho.cmd 0 13 "Cloning %DEPENDENCY_NAME% into %~2." - pushd "%DEPS_DIR%" - call git clone %1 %2 - set RET=!ERRORLEVEL! -) else ( - call cecho.cmd 0 13 "%DEPENDENCY_NAME% already cloned. Pulling latest changes." - git reset --hard - pushd %2 - call git pull - set RET=0 -) -popd -exit /b %RET% +%PWSH_TOOLS% extract_file "%DEPENDENCY_NAME%" "%1" "%2" "%3" +IF NOT %ERRORLEVEL%==0 GOTO :Error +exit /b 0 :: GitCloneAndCheckoutRevision - Clones a Git repository and checks out a specific revision or tag :: Params: %1 gitUrl, %2 destDir, %3 revision :: F.ex. call :GitCloneAndCheckoutRevision https://github.com/KhronosGroup/OpenCOLLADA.git "%DEPENDENCY_DIR%" 064a60b65c2c31b94f013820856bc84fb1937cc6 +:: Required vars: +:: - DEPENDENCY_NAME :GitCloneAndCheckoutRevision -if not exist "%~2". ( - call cecho.cmd 0 13 "Cloning %DEPENDENCY_NAME% into %~2." - pushd "%DEPS_DIR%" - call git clone %1 %2 - set RET=!ERRORLEVEL! - if not "!RET!"=="0" exit /b !RET! - popd -) else ( - call cecho.cmd 0 13 "%DEPENDENCY_NAME% already cloned." - set RET=0 -) -pushd "%2" -call git fetch -call cecho.cmd 0 13 "Checking out %DEPENDENCY_NAME% revision %3." -call git reset --hard -call git checkout %3 -set RET=%ERRORLEVEL% -popd -exit /b %RET% +%PWSH_TOOLS% git_clone_and_checkout_revision "%DEPENDENCY_NAME%" "%1" "%2" "%3" +IF NOT %ERRORLEVEL%==0 GOTO :Error +exit /b 0 :: RunCMake - Runs CMake for a CMake-based project :: Params: %* cmakeOptions @@ -931,14 +886,9 @@ exit /b %ERRORLEVEL% :: Required vars: :: - DEPENDENCY_NAME :InstallCMakeProject -pushd %1 -call cecho.cmd 0 13 "Installing %2 %DEPENDENCY_NAME%. Please be patient, this will take a while." -set COMMAND=cmake --install . --config %2 -echo %COMMAND% -%COMMAND% -set RET=%ERRORLEVEL% -popd -exit /b %RET% +%PWSH_TOOLS% install_cmake_project "%DEPENDENCY_NAME%" "%1" "%2" +IF NOT %ERRORLEVEL%==0 GOTO :Error +exit /b 0 :: Checks whether a dependency is already installed for the specified config :: Doesn't work for dependencies, only for those that need separate Debug/Release installs. diff --git a/win/utils/tools.ps1 b/win/utils/tools.ps1 index ee52d8ba97..c143581789 100644 --- a/win/utils/tools.ps1 +++ b/win/utils/tools.ps1 @@ -18,7 +18,7 @@ function mark { if (Test-Path -Path $marker_filepath) { return } - echo "Marking installation in '$installation_dir' with '$ENV:MARKER_FILE'." + cecho.cmd 0 13 "Marking installation in '$installation_dir' with '$ENV:MARKER_FILE'." New-Item -Path $marker_filepath -ItemType File | Out-Null } @@ -76,7 +76,7 @@ function mark_based_on_artifacts { if (Test-Path -Path $marker_filepath) { return } - echo "Found artifact '$artifact' for dependency '$dependency_name' $env:BUILD_CFG." + cecho.cmd 0 13 "Found artifact '$artifact' for dependency '$dependency_name' $env:BUILD_CFG." & mark $installation_dir } @@ -125,6 +125,102 @@ function setup_build_cfg { } } + +function extract_file { + param( + [Parameter(Mandatory = $true)] + [string]$dependency_name, + [Parameter(Mandatory = $true)] + [string]$filename, + [Parameter(Mandatory = $true)] + [string]$destination_dir, + [Parameter(Mandatory = $true)] + [string]$dir_after_extraction + ) + if (Test-Path -Path "$dir_after_extraction") { + cecho.cmd 0 13 "$dependency_name already extracted into '$dir_after_extraction'. Skipping." + exit 0 + } + cecho.cmd 0 13 "Extracting $dependency_name into '$destination_dir' from '$filename'." + 7za x "$filename" -o"$destination_dir" + exit 0 +} + + +function download_file { + param( + [Parameter(Mandatory = $true)] + [string]$dependency_name, + [Parameter(Mandatory = $true)] + [string]$url, + [Parameter(Mandatory = $true)] + [string]$destination_dir, + [Parameter(Mandatory = $true)] + [string]$filename + ) + mkdir "$destination_dir" -Force | Out-Null + pushd "$destination_dir" + if (Test-Path -Path "$filename") { + cecho.cmd 0 13 "$dependency_name already downloaded. Skipping." + exit 0 + } + + cecho.cmd 0 13 "Downloading $dependency_name into '$destination_dir'" + Invoke-WebRequest $url -OutFile $filename + exit 0 +} + + +# Required env variables: +# - DEPS_DIR +function git_clone_and_checkout_revision { + param( + [Parameter(Mandatory = $true)] + [string]$dependency_name, + [Parameter(Mandatory = $true)] + [string]$git_url, + [Parameter(Mandatory = $true)] + [string]$dest_dir, + [Parameter(Mandatory = $false)] + [string]$revision + ) + if (Test-Path -Path "$dest_dir") { + cecho.cmd 0 13 "Cloning $dependency_name is already cloned." + exit 0 + } + cecho.cmd 0 13 "Cloning $dependency_name into '$dest_dir'." + pushd "$env:DEPS_DIR" + git clone $git_url $dest_dir + popd + + pushd "$dest_dir" + git fetch + cecho.cmd 0 13 "Checking out $dependency_name revision $revision." + git reset --hard + git checkout $revision + popd + exit 0 +} + +function install_cmake_project { + param( + [Parameter(Mandatory = $true)] + [string]$dependency_name, + [Parameter(Mandatory = $true)] + [string]$build_dir, + [Parameter(Mandatory = $true)] + [string]$configuration + ) + pushd "$build_dir" + cecho.cmd 0 13 "Installing $dependency_name ($configuration). Please be patient, this may take a while." + $command = "cmake --install . --config $configuration" + cecho.cmd 0 13 "$command" + Invoke-Expression $command + popd + exit 0 +} + + function main { & setup_build_cfg # Dispatch command. From 8d3c610965eb3004a93e3c570a54c5e3cccc681a Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 24 Dec 2025 15:07:33 +0100 Subject: [PATCH 432/657] Map None -> Indeterminate to prevent iterating over none in non-shortcircuiting rule execution #7501 --- .../ifcopenshell/express/rule_compiler.py | 14 +++++++++++--- .../ifcopenshell/express/rule_executor.py | 6 +++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rule_compiler.py b/src/ifcopenshell-python/ifcopenshell/express/rule_compiler.py index ab6caf93f8..545d68c50a 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rule_compiler.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rule_compiler.py @@ -738,7 +738,7 @@ class AttributeGetattrTransformer(ast.NodeTransformer): while n := getattr(n, "parent", 0): parents.append(n) - custom_funcs = "is_entity", "usedin", "express_len", "express_getitem", "typeof" + custom_funcs = "is_entity", "usedin", "express_len", "express_getitem", "typeof", "express_getattr" function_defs = [p.name for p in parents if isinstance(p, ast.FunctionDef)] if any(fn in function_defs for fn in custom_funcs): return node @@ -755,7 +755,7 @@ class AttributeGetattrTransformer(ast.NodeTransformer): # Replace the Attribute node with a call to the built-in `getattr` function return ast.copy_location( ast.Call( - func=ast.Name(id="getattr", ctx=ast.Load()), + func=ast.Name(id="express_getattr", ctx=ast.Load()), args=[ new_value, ast.Str(s=node.attr), @@ -772,7 +772,7 @@ class AttributeGetattrTransformer(ast.NodeTransformer): while n := getattr(n, "parent", 0): parents.append(n) - custom_funcs = "is_entity", "usedin", "express_len", "express_getitem", "typeof" + custom_funcs = "is_entity", "usedin", "express_len", "express_getitem", "typeof", "express_getattr" function_defs = [p.name for p in parents if isinstance(p, ast.FunctionDef)] if any(fn in function_defs for fn in custom_funcs): return node @@ -937,6 +937,14 @@ def express_getitem(aggr, idx, default): except IndexError as e: return None +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v + + EXPRESS_ONE_BASED_INDEXING = 1 diff --git a/src/ifcopenshell-python/ifcopenshell/express/rule_executor.py b/src/ifcopenshell-python/ifcopenshell/express/rule_executor.py index 0bf8ac439c..9201e480be 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rule_executor.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rule_executor.py @@ -9,7 +9,7 @@ from codegen import indent def reverse_compile(s): - return re.sub( + return re.sub(r'\bself\b', 'SELF', re.sub( r"\s*\-\s*EXPRESS_ONE_BASED_INDEXING", "", re.sub( @@ -22,11 +22,11 @@ def reverse_compile(s): .replace("len(", "SIZEOF(") .replace("assert ", "") .replace(" is not False", "") - .replace("getattr(", "") + .replace("express_getattr(", "") .replace("express_getitem(", ""), )[::-1], )[::-1], - ) + )) @dataclass From 35e2be955ba4c957a03970e629b30aa3cefcd2c9 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 24 Dec 2025 15:15:33 +0100 Subject: [PATCH 433/657] Test files #7501 --- .../fail-property-list-value-distinct-value-types.ifc | 10 ++++++++++ .../rules/pass-property-list-value-label-values.ifc | 10 ++++++++++ .../rules/pass-property-list-value-nil-values.ifc | 10 ++++++++++ 3 files changed, 30 insertions(+) create mode 100644 src/ifcopenshell-python/test/fixtures/rules/fail-property-list-value-distinct-value-types.ifc create mode 100644 src/ifcopenshell-python/test/fixtures/rules/pass-property-list-value-label-values.ifc create mode 100644 src/ifcopenshell-python/test/fixtures/rules/pass-property-list-value-nil-values.ifc diff --git a/src/ifcopenshell-python/test/fixtures/rules/fail-property-list-value-distinct-value-types.ifc b/src/ifcopenshell-python/test/fixtures/rules/fail-property-list-value-distinct-value-types.ifc new file mode 100644 index 0000000000..2da9e30c9c --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/rules/fail-property-list-value-distinct-value-types.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2025-12-24T14:25:45',(''),(''),'IfcOpenShell 0.8.0','IfcOpenShell 0.8.0',''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1=IFCPROPERTYLISTVALUE('Test',$,(IFCLABEL('test1'),IFCINTEGER(2)),$); +ENDSEC; +END-ISO-10303-21; diff --git a/src/ifcopenshell-python/test/fixtures/rules/pass-property-list-value-label-values.ifc b/src/ifcopenshell-python/test/fixtures/rules/pass-property-list-value-label-values.ifc new file mode 100644 index 0000000000..848e9a55b9 --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/rules/pass-property-list-value-label-values.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2025-12-24T14:25:45',(''),(''),'IfcOpenShell 0.8.0','IfcOpenShell 0.8.0',''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1=IFCPROPERTYLISTVALUE('Test',$,(IFCLABEL('test1'),IFCLABEL('test2')),$); +ENDSEC; +END-ISO-10303-21; diff --git a/src/ifcopenshell-python/test/fixtures/rules/pass-property-list-value-nil-values.ifc b/src/ifcopenshell-python/test/fixtures/rules/pass-property-list-value-nil-values.ifc new file mode 100644 index 0000000000..cb57393ca9 --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/rules/pass-property-list-value-nil-values.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2025-12-24T14:25:45',(''),(''),'IfcOpenShell 0.8.0','IfcOpenShell 0.8.0',''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1=IFCPROPERTYLISTVALUE('Test',$,$,$); +ENDSEC; +END-ISO-10303-21; From 7fdf815d3c7a99fbfe336b0a8944623570d13e52 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 24 Dec 2025 15:33:36 +0100 Subject: [PATCH 434/657] Re-run express rule codegen #7501 --- .../ifcopenshell/express/rules/IFC2X3.py | 4137 ++++----- .../ifcopenshell/express/rules/IFC4.py | 6169 ++++++------- .../ifcopenshell/express/rules/IFC4X1.py | 6215 ++++++------- .../ifcopenshell/express/rules/IFC4X2.py | 6469 +++++++------- .../ifcopenshell/express/rules/IFC4X3.py | 7653 +++++++++-------- .../ifcopenshell/express/rules/IFC4X3_ADD1.py | 7525 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_ADD2.py | 7535 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_RC1.py | 7341 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_RC2.py | 7399 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_RC3.py | 7503 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_RC4.py | 7541 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_TC1.py | 7513 ++++++++-------- 12 files changed, 41542 insertions(+), 41458 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py index 345620bdae..e5ddfdad00 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,1481 +147,1481 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_getattr(k, 'upper', INDETERMINATE)() IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionTypeEnum = enum_namespace() -permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAddressTypeEnum = enum_namespace() -office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) IfcAheadOrBehind = enum_namespace() -ahead = getattr(IfcAheadOrBehind, 'AHEAD', INDETERMINATE) -behind = getattr(IfcAheadOrBehind, 'BEHIND', INDETERMINATE) +ahead = express_getattr(IfcAheadOrBehind, 'AHEAD', INDETERMINATE) +behind = express_getattr(IfcAheadOrBehind, 'BEHIND', 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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirTerminalTypeEnum = enum_namespace() -grille = getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -register = getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -diffuser = getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -eyeball = getattr(IfcAirTerminalTypeEnum, 'EYEBALL', INDETERMINATE) -iris = getattr(IfcAirTerminalTypeEnum, 'IRIS', INDETERMINATE) -lineargrille = getattr(IfcAirTerminalTypeEnum, 'LINEARGRILLE', INDETERMINATE) -lineardiffuser = getattr(IfcAirTerminalTypeEnum, 'LINEARDIFFUSER', INDETERMINATE) -userdefined = getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +eyeball = express_getattr(IfcAirTerminalTypeEnum, 'EYEBALL', INDETERMINATE) +iris = express_getattr(IfcAirTerminalTypeEnum, 'IRIS', INDETERMINATE) +lineargrille = express_getattr(IfcAirTerminalTypeEnum, 'LINEARGRILLE', INDETERMINATE) +lineardiffuser = express_getattr(IfcAirTerminalTypeEnum, 'LINEARDIFFUSER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) IfcBSplineCurveForm = enum_namespace() -polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) IfcBeamTypeEnum = enum_namespace() -beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBenchmarkEnum = enum_namespace() -greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) IfcBoilerTypeEnum = enum_namespace() -water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableSegmentTypeEnum = enum_namespace() -cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -userdefined = getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChangeActionEnum = enum_namespace() -nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -modifiedadded = getattr(IfcChangeActionEnum, 'MODIFIEDADDED', INDETERMINATE) -modifieddeleted = getattr(IfcChangeActionEnum, 'MODIFIEDDELETED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +modifiedadded = express_getattr(IfcChangeActionEnum, 'MODIFIEDADDED', INDETERMINATE) +modifieddeleted = express_getattr(IfcChangeActionEnum, 'MODIFIEDDELETED', INDETERMINATE) IfcChillerTypeEnum = enum_namespace() -aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -watercoolingcoil = getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -steamheatingcoil = getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -waterheatingcoil = getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -electricheatingcoil = getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -userdefined = getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcColumnTypeEnum = enum_namespace() -column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCompressorTypeEnum = enum_namespace() -dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCondenserTypeEnum = enum_namespace() -watercooledshelltube = getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledshellcoil = getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledtubeintube = getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -watercooledbrazedplate = getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -aircooled = getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -userdefined = getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConnectionTypeEnum = enum_namespace() -atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConstraintEnum = enum_namespace() -hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) IfcControllerTypeEnum = enum_namespace() -floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -proportionalintegral = getattr(IfcControllerTypeEnum, 'PROPORTIONALINTEGRAL', INDETERMINATE) -proportionalintegralderivative = getattr(IfcControllerTypeEnum, 'PROPORTIONALINTEGRALDERIVATIVE', INDETERMINATE) -timedtwoposition = getattr(IfcControllerTypeEnum, 'TIMEDTWOPOSITION', INDETERMINATE) -twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +proportionalintegral = express_getattr(IfcControllerTypeEnum, 'PROPORTIONALINTEGRAL', INDETERMINATE) +proportionalintegralderivative = express_getattr(IfcControllerTypeEnum, 'PROPORTIONALINTEGRALDERIVATIVE', INDETERMINATE) +timedtwoposition = express_getattr(IfcControllerTypeEnum, 'TIMEDTWOPOSITION', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcControllerTypeEnum, '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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostScheduleTypeEnum = enum_namespace() -budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoveringTypeEnum = enum_namespace() -ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurrencyEnum = enum_namespace() -aed = getattr(IfcCurrencyEnum, 'AED', INDETERMINATE) -aes = getattr(IfcCurrencyEnum, 'AES', INDETERMINATE) -ats = getattr(IfcCurrencyEnum, 'ATS', INDETERMINATE) -aud = getattr(IfcCurrencyEnum, 'AUD', INDETERMINATE) -bbd = getattr(IfcCurrencyEnum, 'BBD', INDETERMINATE) -beg = getattr(IfcCurrencyEnum, 'BEG', INDETERMINATE) -bgl = getattr(IfcCurrencyEnum, 'BGL', INDETERMINATE) -bhd = getattr(IfcCurrencyEnum, 'BHD', INDETERMINATE) -bmd = getattr(IfcCurrencyEnum, 'BMD', INDETERMINATE) -bnd = getattr(IfcCurrencyEnum, 'BND', INDETERMINATE) -brl = getattr(IfcCurrencyEnum, 'BRL', INDETERMINATE) -bsd = getattr(IfcCurrencyEnum, 'BSD', INDETERMINATE) -bwp = getattr(IfcCurrencyEnum, 'BWP', INDETERMINATE) -bzd = getattr(IfcCurrencyEnum, 'BZD', INDETERMINATE) -cad = getattr(IfcCurrencyEnum, 'CAD', INDETERMINATE) -cbd = getattr(IfcCurrencyEnum, 'CBD', INDETERMINATE) -chf = getattr(IfcCurrencyEnum, 'CHF', INDETERMINATE) -clp = getattr(IfcCurrencyEnum, 'CLP', INDETERMINATE) -cny = getattr(IfcCurrencyEnum, 'CNY', INDETERMINATE) -cys = getattr(IfcCurrencyEnum, 'CYS', INDETERMINATE) -czk = getattr(IfcCurrencyEnum, 'CZK', INDETERMINATE) -ddp = getattr(IfcCurrencyEnum, 'DDP', INDETERMINATE) -dem = getattr(IfcCurrencyEnum, 'DEM', INDETERMINATE) -dkk = getattr(IfcCurrencyEnum, 'DKK', INDETERMINATE) -egl = getattr(IfcCurrencyEnum, 'EGL', INDETERMINATE) -est = getattr(IfcCurrencyEnum, 'EST', INDETERMINATE) -eur = getattr(IfcCurrencyEnum, 'EUR', INDETERMINATE) -fak = getattr(IfcCurrencyEnum, 'FAK', INDETERMINATE) -fim = getattr(IfcCurrencyEnum, 'FIM', INDETERMINATE) -fjd = getattr(IfcCurrencyEnum, 'FJD', INDETERMINATE) -fkp = getattr(IfcCurrencyEnum, 'FKP', INDETERMINATE) -frf = getattr(IfcCurrencyEnum, 'FRF', INDETERMINATE) -gbp = getattr(IfcCurrencyEnum, 'GBP', INDETERMINATE) -gip = getattr(IfcCurrencyEnum, 'GIP', INDETERMINATE) -gmd = getattr(IfcCurrencyEnum, 'GMD', INDETERMINATE) -grx = getattr(IfcCurrencyEnum, 'GRX', INDETERMINATE) -hkd = getattr(IfcCurrencyEnum, 'HKD', INDETERMINATE) -huf = getattr(IfcCurrencyEnum, 'HUF', INDETERMINATE) -ick = getattr(IfcCurrencyEnum, 'ICK', INDETERMINATE) -idr = getattr(IfcCurrencyEnum, 'IDR', INDETERMINATE) -ils = getattr(IfcCurrencyEnum, 'ILS', INDETERMINATE) -inr = getattr(IfcCurrencyEnum, 'INR', INDETERMINATE) -irp = getattr(IfcCurrencyEnum, 'IRP', INDETERMINATE) -itl = getattr(IfcCurrencyEnum, 'ITL', INDETERMINATE) -jmd = getattr(IfcCurrencyEnum, 'JMD', INDETERMINATE) -jod = getattr(IfcCurrencyEnum, 'JOD', INDETERMINATE) -jpy = getattr(IfcCurrencyEnum, 'JPY', INDETERMINATE) -kes = getattr(IfcCurrencyEnum, 'KES', INDETERMINATE) -krw = getattr(IfcCurrencyEnum, 'KRW', INDETERMINATE) -kwd = getattr(IfcCurrencyEnum, 'KWD', INDETERMINATE) -kyd = getattr(IfcCurrencyEnum, 'KYD', INDETERMINATE) -lkr = getattr(IfcCurrencyEnum, 'LKR', INDETERMINATE) -luf = getattr(IfcCurrencyEnum, 'LUF', INDETERMINATE) -mtl = getattr(IfcCurrencyEnum, 'MTL', INDETERMINATE) -mur = getattr(IfcCurrencyEnum, 'MUR', INDETERMINATE) -mxn = getattr(IfcCurrencyEnum, 'MXN', INDETERMINATE) -myr = getattr(IfcCurrencyEnum, 'MYR', INDETERMINATE) -nlg = getattr(IfcCurrencyEnum, 'NLG', INDETERMINATE) -nzd = getattr(IfcCurrencyEnum, 'NZD', INDETERMINATE) -omr = getattr(IfcCurrencyEnum, 'OMR', INDETERMINATE) -pgk = getattr(IfcCurrencyEnum, 'PGK', INDETERMINATE) -php = getattr(IfcCurrencyEnum, 'PHP', INDETERMINATE) -pkr = getattr(IfcCurrencyEnum, 'PKR', INDETERMINATE) -pln = getattr(IfcCurrencyEnum, 'PLN', INDETERMINATE) -ptn = getattr(IfcCurrencyEnum, 'PTN', INDETERMINATE) -qar = getattr(IfcCurrencyEnum, 'QAR', INDETERMINATE) -rur = getattr(IfcCurrencyEnum, 'RUR', INDETERMINATE) -sar = getattr(IfcCurrencyEnum, 'SAR', INDETERMINATE) -scr = getattr(IfcCurrencyEnum, 'SCR', INDETERMINATE) -sek = getattr(IfcCurrencyEnum, 'SEK', INDETERMINATE) -sgd = getattr(IfcCurrencyEnum, 'SGD', INDETERMINATE) -skp = getattr(IfcCurrencyEnum, 'SKP', INDETERMINATE) -thb = getattr(IfcCurrencyEnum, 'THB', INDETERMINATE) -trl = getattr(IfcCurrencyEnum, 'TRL', INDETERMINATE) -ttd = getattr(IfcCurrencyEnum, 'TTD', INDETERMINATE) -twd = getattr(IfcCurrencyEnum, 'TWD', INDETERMINATE) -usd = getattr(IfcCurrencyEnum, 'USD', INDETERMINATE) -veb = getattr(IfcCurrencyEnum, 'VEB', INDETERMINATE) -vnd = getattr(IfcCurrencyEnum, 'VND', INDETERMINATE) -xeu = getattr(IfcCurrencyEnum, 'XEU', INDETERMINATE) -zar = getattr(IfcCurrencyEnum, 'ZAR', INDETERMINATE) -zwd = getattr(IfcCurrencyEnum, 'ZWD', INDETERMINATE) -nok = getattr(IfcCurrencyEnum, 'NOK', INDETERMINATE) +aed = express_getattr(IfcCurrencyEnum, 'AED', INDETERMINATE) +aes = express_getattr(IfcCurrencyEnum, 'AES', INDETERMINATE) +ats = express_getattr(IfcCurrencyEnum, 'ATS', INDETERMINATE) +aud = express_getattr(IfcCurrencyEnum, 'AUD', INDETERMINATE) +bbd = express_getattr(IfcCurrencyEnum, 'BBD', INDETERMINATE) +beg = express_getattr(IfcCurrencyEnum, 'BEG', INDETERMINATE) +bgl = express_getattr(IfcCurrencyEnum, 'BGL', INDETERMINATE) +bhd = express_getattr(IfcCurrencyEnum, 'BHD', INDETERMINATE) +bmd = express_getattr(IfcCurrencyEnum, 'BMD', INDETERMINATE) +bnd = express_getattr(IfcCurrencyEnum, 'BND', INDETERMINATE) +brl = express_getattr(IfcCurrencyEnum, 'BRL', INDETERMINATE) +bsd = express_getattr(IfcCurrencyEnum, 'BSD', INDETERMINATE) +bwp = express_getattr(IfcCurrencyEnum, 'BWP', INDETERMINATE) +bzd = express_getattr(IfcCurrencyEnum, 'BZD', INDETERMINATE) +cad = express_getattr(IfcCurrencyEnum, 'CAD', INDETERMINATE) +cbd = express_getattr(IfcCurrencyEnum, 'CBD', INDETERMINATE) +chf = express_getattr(IfcCurrencyEnum, 'CHF', INDETERMINATE) +clp = express_getattr(IfcCurrencyEnum, 'CLP', INDETERMINATE) +cny = express_getattr(IfcCurrencyEnum, 'CNY', INDETERMINATE) +cys = express_getattr(IfcCurrencyEnum, 'CYS', INDETERMINATE) +czk = express_getattr(IfcCurrencyEnum, 'CZK', INDETERMINATE) +ddp = express_getattr(IfcCurrencyEnum, 'DDP', INDETERMINATE) +dem = express_getattr(IfcCurrencyEnum, 'DEM', INDETERMINATE) +dkk = express_getattr(IfcCurrencyEnum, 'DKK', INDETERMINATE) +egl = express_getattr(IfcCurrencyEnum, 'EGL', INDETERMINATE) +est = express_getattr(IfcCurrencyEnum, 'EST', INDETERMINATE) +eur = express_getattr(IfcCurrencyEnum, 'EUR', INDETERMINATE) +fak = express_getattr(IfcCurrencyEnum, 'FAK', INDETERMINATE) +fim = express_getattr(IfcCurrencyEnum, 'FIM', INDETERMINATE) +fjd = express_getattr(IfcCurrencyEnum, 'FJD', INDETERMINATE) +fkp = express_getattr(IfcCurrencyEnum, 'FKP', INDETERMINATE) +frf = express_getattr(IfcCurrencyEnum, 'FRF', INDETERMINATE) +gbp = express_getattr(IfcCurrencyEnum, 'GBP', INDETERMINATE) +gip = express_getattr(IfcCurrencyEnum, 'GIP', INDETERMINATE) +gmd = express_getattr(IfcCurrencyEnum, 'GMD', INDETERMINATE) +grx = express_getattr(IfcCurrencyEnum, 'GRX', INDETERMINATE) +hkd = express_getattr(IfcCurrencyEnum, 'HKD', INDETERMINATE) +huf = express_getattr(IfcCurrencyEnum, 'HUF', INDETERMINATE) +ick = express_getattr(IfcCurrencyEnum, 'ICK', INDETERMINATE) +idr = express_getattr(IfcCurrencyEnum, 'IDR', INDETERMINATE) +ils = express_getattr(IfcCurrencyEnum, 'ILS', INDETERMINATE) +inr = express_getattr(IfcCurrencyEnum, 'INR', INDETERMINATE) +irp = express_getattr(IfcCurrencyEnum, 'IRP', INDETERMINATE) +itl = express_getattr(IfcCurrencyEnum, 'ITL', INDETERMINATE) +jmd = express_getattr(IfcCurrencyEnum, 'JMD', INDETERMINATE) +jod = express_getattr(IfcCurrencyEnum, 'JOD', INDETERMINATE) +jpy = express_getattr(IfcCurrencyEnum, 'JPY', INDETERMINATE) +kes = express_getattr(IfcCurrencyEnum, 'KES', INDETERMINATE) +krw = express_getattr(IfcCurrencyEnum, 'KRW', INDETERMINATE) +kwd = express_getattr(IfcCurrencyEnum, 'KWD', INDETERMINATE) +kyd = express_getattr(IfcCurrencyEnum, 'KYD', INDETERMINATE) +lkr = express_getattr(IfcCurrencyEnum, 'LKR', INDETERMINATE) +luf = express_getattr(IfcCurrencyEnum, 'LUF', INDETERMINATE) +mtl = express_getattr(IfcCurrencyEnum, 'MTL', INDETERMINATE) +mur = express_getattr(IfcCurrencyEnum, 'MUR', INDETERMINATE) +mxn = express_getattr(IfcCurrencyEnum, 'MXN', INDETERMINATE) +myr = express_getattr(IfcCurrencyEnum, 'MYR', INDETERMINATE) +nlg = express_getattr(IfcCurrencyEnum, 'NLG', INDETERMINATE) +nzd = express_getattr(IfcCurrencyEnum, 'NZD', INDETERMINATE) +omr = express_getattr(IfcCurrencyEnum, 'OMR', INDETERMINATE) +pgk = express_getattr(IfcCurrencyEnum, 'PGK', INDETERMINATE) +php = express_getattr(IfcCurrencyEnum, 'PHP', INDETERMINATE) +pkr = express_getattr(IfcCurrencyEnum, 'PKR', INDETERMINATE) +pln = express_getattr(IfcCurrencyEnum, 'PLN', INDETERMINATE) +ptn = express_getattr(IfcCurrencyEnum, 'PTN', INDETERMINATE) +qar = express_getattr(IfcCurrencyEnum, 'QAR', INDETERMINATE) +rur = express_getattr(IfcCurrencyEnum, 'RUR', INDETERMINATE) +sar = express_getattr(IfcCurrencyEnum, 'SAR', INDETERMINATE) +scr = express_getattr(IfcCurrencyEnum, 'SCR', INDETERMINATE) +sek = express_getattr(IfcCurrencyEnum, 'SEK', INDETERMINATE) +sgd = express_getattr(IfcCurrencyEnum, 'SGD', INDETERMINATE) +skp = express_getattr(IfcCurrencyEnum, 'SKP', INDETERMINATE) +thb = express_getattr(IfcCurrencyEnum, 'THB', INDETERMINATE) +trl = express_getattr(IfcCurrencyEnum, 'TRL', INDETERMINATE) +ttd = express_getattr(IfcCurrencyEnum, 'TTD', INDETERMINATE) +twd = express_getattr(IfcCurrencyEnum, 'TWD', INDETERMINATE) +usd = express_getattr(IfcCurrencyEnum, 'USD', INDETERMINATE) +veb = express_getattr(IfcCurrencyEnum, 'VEB', INDETERMINATE) +vnd = express_getattr(IfcCurrencyEnum, 'VND', INDETERMINATE) +xeu = express_getattr(IfcCurrencyEnum, 'XEU', INDETERMINATE) +zar = express_getattr(IfcCurrencyEnum, 'ZAR', INDETERMINATE) +zwd = express_getattr(IfcCurrencyEnum, 'ZWD', INDETERMINATE) +nok = express_getattr(IfcCurrencyEnum, 'NOK', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDamperTypeEnum = enum_namespace() -controldamper = getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -smokedamper = getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -firesmokedamper = getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -backdraftdamper = getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -reliefdamper = getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -blastdamper = getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -gravitydamper = getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -balancingdamper = getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -fumehoodexhaust = getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -userdefined = getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDimensionExtentUsage = enum_namespace() -origin = getattr(IfcDimensionExtentUsage, 'ORIGIN', INDETERMINATE) -target = getattr(IfcDimensionExtentUsage, 'TARGET', INDETERMINATE) +origin = express_getattr(IfcDimensionExtentUsage, 'ORIGIN', INDETERMINATE) +target = express_getattr(IfcDimensionExtentUsage, 'TARGET', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', 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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentConfidentialityEnum = enum_namespace() -public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentStatusEnum = enum_namespace() -draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorPanelOperationEnum = enum_namespace() -swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, '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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricApplianceTypeEnum = enum_namespace() -computer = getattr(IfcElectricApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -directwaterheater = getattr(IfcElectricApplianceTypeEnum, 'DIRECTWATERHEATER', INDETERMINATE) -dishwasher = getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -electricheater = getattr(IfcElectricApplianceTypeEnum, 'ELECTRICHEATER', INDETERMINATE) -facsimile = getattr(IfcElectricApplianceTypeEnum, 'FACSIMILE', INDETERMINATE) -freestandingfan = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freezer = getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -indirectwaterheater = getattr(IfcElectricApplianceTypeEnum, 'INDIRECTWATERHEATER', INDETERMINATE) -microwave = getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -printer = getattr(IfcElectricApplianceTypeEnum, 'PRINTER', INDETERMINATE) -refrigerator = getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -radiantheater = getattr(IfcElectricApplianceTypeEnum, 'RADIANTHEATER', INDETERMINATE) -scanner = getattr(IfcElectricApplianceTypeEnum, 'SCANNER', INDETERMINATE) -telephone = getattr(IfcElectricApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tumbledryer = getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -tv = getattr(IfcElectricApplianceTypeEnum, 'TV', INDETERMINATE) -vendingmachine = getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -waterheater = getattr(IfcElectricApplianceTypeEnum, 'WATERHEATER', INDETERMINATE) -watercooler = getattr(IfcElectricApplianceTypeEnum, 'WATERCOOLER', INDETERMINATE) -userdefined = getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +computer = express_getattr(IfcElectricApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +directwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'DIRECTWATERHEATER', INDETERMINATE) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +electricheater = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICHEATER', INDETERMINATE) +facsimile = express_getattr(IfcElectricApplianceTypeEnum, 'FACSIMILE', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +indirectwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'INDIRECTWATERHEATER', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +printer = express_getattr(IfcElectricApplianceTypeEnum, 'PRINTER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +radiantheater = express_getattr(IfcElectricApplianceTypeEnum, 'RADIANTHEATER', INDETERMINATE) +scanner = express_getattr(IfcElectricApplianceTypeEnum, 'SCANNER', INDETERMINATE) +telephone = express_getattr(IfcElectricApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +tv = express_getattr(IfcElectricApplianceTypeEnum, 'TV', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +waterheater = express_getattr(IfcElectricApplianceTypeEnum, 'WATERHEATER', INDETERMINATE) +watercooler = express_getattr(IfcElectricApplianceTypeEnum, 'WATERCOOLER', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricCurrentEnum = enum_namespace() -alternating = getattr(IfcElectricCurrentEnum, 'ALTERNATING', INDETERMINATE) -direct = getattr(IfcElectricCurrentEnum, 'DIRECT', INDETERMINATE) -notdefined = getattr(IfcElectricCurrentEnum, 'NOTDEFINED', INDETERMINATE) +alternating = express_getattr(IfcElectricCurrentEnum, 'ALTERNATING', INDETERMINATE) +direct = express_getattr(IfcElectricCurrentEnum, 'DIRECT', INDETERMINATE) +notdefined = express_getattr(IfcElectricCurrentEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricDistributionPointFunctionEnum = enum_namespace() -alarmpanel = getattr(IfcElectricDistributionPointFunctionEnum, 'ALARMPANEL', INDETERMINATE) -consumerunit = getattr(IfcElectricDistributionPointFunctionEnum, 'CONSUMERUNIT', INDETERMINATE) -controlpanel = getattr(IfcElectricDistributionPointFunctionEnum, 'CONTROLPANEL', INDETERMINATE) -distributionboard = getattr(IfcElectricDistributionPointFunctionEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -gasdetectorpanel = getattr(IfcElectricDistributionPointFunctionEnum, 'GASDETECTORPANEL', INDETERMINATE) -indicatorpanel = getattr(IfcElectricDistributionPointFunctionEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = getattr(IfcElectricDistributionPointFunctionEnum, 'MIMICPANEL', INDETERMINATE) -motorcontrolcentre = getattr(IfcElectricDistributionPointFunctionEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = getattr(IfcElectricDistributionPointFunctionEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = getattr(IfcElectricDistributionPointFunctionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricDistributionPointFunctionEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'ALARMPANEL', INDETERMINATE) +consumerunit = express_getattr(IfcElectricDistributionPointFunctionEnum, 'CONSUMERUNIT', INDETERMINATE) +controlpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'CONTROLPANEL', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionPointFunctionEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +gasdetectorpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'GASDETECTORPANEL', INDETERMINATE) +indicatorpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'MIMICPANEL', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionPointFunctionEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionPointFunctionEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionPointFunctionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricDistributionPointFunctionEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricGeneratorTypeEnum = enum_namespace() -userdefined = getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricHeaterTypeEnum = enum_namespace() -electricpointheater = getattr(IfcElectricHeaterTypeEnum, 'ELECTRICPOINTHEATER', INDETERMINATE) -electriccableheater = getattr(IfcElectricHeaterTypeEnum, 'ELECTRICCABLEHEATER', INDETERMINATE) -electricmatheater = getattr(IfcElectricHeaterTypeEnum, 'ELECTRICMATHEATER', INDETERMINATE) -userdefined = getattr(IfcElectricHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricpointheater = express_getattr(IfcElectricHeaterTypeEnum, 'ELECTRICPOINTHEATER', INDETERMINATE) +electriccableheater = express_getattr(IfcElectricHeaterTypeEnum, 'ELECTRICCABLEHEATER', INDETERMINATE) +electricmatheater = express_getattr(IfcElectricHeaterTypeEnum, 'ELECTRICMATHEATER', INDETERMINATE) +userdefined = express_getattr(IfcElectricHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricHeaterTypeEnum, '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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementAssemblyTypeEnum = enum_namespace() -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) -girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) IfcEnergySequenceEnum = enum_namespace() -primary = getattr(IfcEnergySequenceEnum, 'PRIMARY', INDETERMINATE) -secondary = getattr(IfcEnergySequenceEnum, 'SECONDARY', INDETERMINATE) -tertiary = getattr(IfcEnergySequenceEnum, 'TERTIARY', INDETERMINATE) -auxiliary = getattr(IfcEnergySequenceEnum, 'AUXILIARY', INDETERMINATE) -userdefined = getattr(IfcEnergySequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEnergySequenceEnum, 'NOTDEFINED', INDETERMINATE) +primary = express_getattr(IfcEnergySequenceEnum, 'PRIMARY', INDETERMINATE) +secondary = express_getattr(IfcEnergySequenceEnum, 'SECONDARY', INDETERMINATE) +tertiary = express_getattr(IfcEnergySequenceEnum, 'TERTIARY', INDETERMINATE) +auxiliary = express_getattr(IfcEnergySequenceEnum, 'AUXILIARY', INDETERMINATE) +userdefined = express_getattr(IfcEnergySequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEnergySequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcEnvironmentalImpactCategoryEnum = enum_namespace() -combinedvalue = getattr(IfcEnvironmentalImpactCategoryEnum, 'COMBINEDVALUE', INDETERMINATE) -disposal = getattr(IfcEnvironmentalImpactCategoryEnum, 'DISPOSAL', INDETERMINATE) -extraction = getattr(IfcEnvironmentalImpactCategoryEnum, 'EXTRACTION', INDETERMINATE) -installation = getattr(IfcEnvironmentalImpactCategoryEnum, 'INSTALLATION', INDETERMINATE) -manufacture = getattr(IfcEnvironmentalImpactCategoryEnum, 'MANUFACTURE', INDETERMINATE) -transportation = getattr(IfcEnvironmentalImpactCategoryEnum, 'TRANSPORTATION', INDETERMINATE) -userdefined = getattr(IfcEnvironmentalImpactCategoryEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEnvironmentalImpactCategoryEnum, 'NOTDEFINED', INDETERMINATE) +combinedvalue = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'COMBINEDVALUE', INDETERMINATE) +disposal = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'DISPOSAL', INDETERMINATE) +extraction = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'EXTRACTION', INDETERMINATE) +installation = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'INSTALLATION', INDETERMINATE) +manufacture = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'MANUFACTURE', INDETERMINATE) +transportation = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'TRANSPORTATION', INDETERMINATE) +userdefined = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporatorTypeEnum = enum_namespace() -directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFilterTypeEnum = enum_namespace() -airparticlefilter = getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', 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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', 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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowDirectionEnum = enum_namespace() -source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', 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) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowMeterTypeEnum = enum_namespace() -electricmeter = getattr(IfcFlowMeterTypeEnum, 'ELECTRICMETER', INDETERMINATE) -energymeter = getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -flowmeter = getattr(IfcFlowMeterTypeEnum, 'FLOWMETER', 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) +electricmeter = express_getattr(IfcFlowMeterTypeEnum, 'ELECTRICMETER', INDETERMINATE) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +flowmeter = express_getattr(IfcFlowMeterTypeEnum, 'FLOWMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFootingTypeEnum = enum_namespace() -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) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGasTerminalTypeEnum = enum_namespace() -gasappliance = getattr(IfcGasTerminalTypeEnum, 'GASAPPLIANCE', INDETERMINATE) -gasbooster = getattr(IfcGasTerminalTypeEnum, 'GASBOOSTER', INDETERMINATE) -gasburner = getattr(IfcGasTerminalTypeEnum, 'GASBURNER', INDETERMINATE) -userdefined = getattr(IfcGasTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGasTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +gasappliance = express_getattr(IfcGasTerminalTypeEnum, 'GASAPPLIANCE', INDETERMINATE) +gasbooster = express_getattr(IfcGasTerminalTypeEnum, 'GASBOOSTER', INDETERMINATE) +gasburner = express_getattr(IfcGasTerminalTypeEnum, 'GASBURNER', INDETERMINATE) +userdefined = express_getattr(IfcGasTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGasTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeometricProjectionEnum = enum_namespace() -graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_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) -elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) IfcHeatExchangerTypeEnum = enum_namespace() -plate = getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -userdefined = getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHumidifierTypeEnum = enum_namespace() -steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcInternalOrExternalEnum = enum_namespace() -internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) IfcInventoryTypeEnum = enum_namespace() -assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcJunctionBoxTypeEnum = enum_namespace() -userdefined = getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLampTypeEnum = enum_namespace() -compactfluorescent = getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -metalhalide = getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcLightFixtureTypeEnum = enum_namespace() -pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLoadGroupTypeEnum = enum_namespace() -load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION_GROUP', INDETERMINATE) -load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION_GROUP', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLogicalOperatorEnum = enum_namespace() -logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) IfcMemberTypeEnum = enum_namespace() -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) -stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMemberTypeEnum, '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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcNullStyle = enum_namespace() -null = getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcObjectiveEnum = enum_namespace() -codecompliance = getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -designintent = getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -healthandsafety = getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', 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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOutletTypeEnum, '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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcPileTypeEnum = enum_namespace() -cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPipeSegmentTypeEnum = enum_namespace() -flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPlateTypeEnum = enum_namespace() -curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', 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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) IfcProjectOrderRecordTypeEnum = enum_namespace() -change = getattr(IfcProjectOrderRecordTypeEnum, 'CHANGE', INDETERMINATE) -maintenance = getattr(IfcProjectOrderRecordTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = getattr(IfcProjectOrderRecordTypeEnum, 'MOVE', INDETERMINATE) -purchase = getattr(IfcProjectOrderRecordTypeEnum, 'PURCHASE', INDETERMINATE) -work = getattr(IfcProjectOrderRecordTypeEnum, 'WORK', INDETERMINATE) -userdefined = getattr(IfcProjectOrderRecordTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProjectOrderRecordTypeEnum, 'NOTDEFINED', INDETERMINATE) +change = express_getattr(IfcProjectOrderRecordTypeEnum, 'CHANGE', INDETERMINATE) +maintenance = express_getattr(IfcProjectOrderRecordTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcProjectOrderRecordTypeEnum, 'MOVE', INDETERMINATE) +purchase = express_getattr(IfcProjectOrderRecordTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcProjectOrderRecordTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderRecordTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderRecordTypeEnum, 'NOTDEFINED', 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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) IfcPropertySourceEnum = enum_namespace() -design = getattr(IfcPropertySourceEnum, 'DESIGN', INDETERMINATE) -designmaximum = getattr(IfcPropertySourceEnum, 'DESIGNMAXIMUM', INDETERMINATE) -designminimum = getattr(IfcPropertySourceEnum, 'DESIGNMINIMUM', INDETERMINATE) -simulated = getattr(IfcPropertySourceEnum, 'SIMULATED', INDETERMINATE) -asbuilt = getattr(IfcPropertySourceEnum, 'ASBUILT', INDETERMINATE) -commissioning = getattr(IfcPropertySourceEnum, 'COMMISSIONING', INDETERMINATE) -measured = getattr(IfcPropertySourceEnum, 'MEASURED', INDETERMINATE) -userdefined = getattr(IfcPropertySourceEnum, 'USERDEFINED', INDETERMINATE) -notknown = getattr(IfcPropertySourceEnum, 'NOTKNOWN', INDETERMINATE) +design = express_getattr(IfcPropertySourceEnum, 'DESIGN', INDETERMINATE) +designmaximum = express_getattr(IfcPropertySourceEnum, 'DESIGNMAXIMUM', INDETERMINATE) +designminimum = express_getattr(IfcPropertySourceEnum, 'DESIGNMINIMUM', INDETERMINATE) +simulated = express_getattr(IfcPropertySourceEnum, 'SIMULATED', INDETERMINATE) +asbuilt = express_getattr(IfcPropertySourceEnum, 'ASBUILT', INDETERMINATE) +commissioning = express_getattr(IfcPropertySourceEnum, 'COMMISSIONING', INDETERMINATE) +measured = express_getattr(IfcPropertySourceEnum, 'MEASURED', INDETERMINATE) +userdefined = express_getattr(IfcPropertySourceEnum, 'USERDEFINED', INDETERMINATE) +notknown = express_getattr(IfcPropertySourceEnum, 'NOTKNOWN', INDETERMINATE) IfcProtectiveDeviceTypeEnum = enum_namespace() -fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthfailuredevice = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHFAILUREDEVICE', INDETERMINATE) -residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthfailuredevice = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHFAILUREDEVICE', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPumpTypeEnum = enum_namespace() -circulator = getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -verticalinline = getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailingTypeEnum = enum_namespace() -handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampFlightTypeEnum = enum_namespace() -straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampTypeEnum = enum_namespace() -straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampTypeEnum, '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) -plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarRoleEnum = enum_namespace() -main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) IfcResourceConsumptionEnum = enum_namespace() -consumed = getattr(IfcResourceConsumptionEnum, 'CONSUMED', INDETERMINATE) -partiallyconsumed = getattr(IfcResourceConsumptionEnum, 'PARTIALLYCONSUMED', INDETERMINATE) -notconsumed = getattr(IfcResourceConsumptionEnum, 'NOTCONSUMED', INDETERMINATE) -occupied = getattr(IfcResourceConsumptionEnum, 'OCCUPIED', INDETERMINATE) -partiallyoccupied = getattr(IfcResourceConsumptionEnum, 'PARTIALLYOCCUPIED', INDETERMINATE) -notoccupied = getattr(IfcResourceConsumptionEnum, 'NOTOCCUPIED', INDETERMINATE) -userdefined = getattr(IfcResourceConsumptionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcResourceConsumptionEnum, 'NOTDEFINED', INDETERMINATE) +consumed = express_getattr(IfcResourceConsumptionEnum, 'CONSUMED', INDETERMINATE) +partiallyconsumed = express_getattr(IfcResourceConsumptionEnum, 'PARTIALLYCONSUMED', INDETERMINATE) +notconsumed = express_getattr(IfcResourceConsumptionEnum, 'NOTCONSUMED', INDETERMINATE) +occupied = express_getattr(IfcResourceConsumptionEnum, 'OCCUPIED', INDETERMINATE) +partiallyoccupied = express_getattr(IfcResourceConsumptionEnum, 'PARTIALLYOCCUPIED', INDETERMINATE) +notoccupied = express_getattr(IfcResourceConsumptionEnum, 'NOTOCCUPIED', INDETERMINATE) +userdefined = express_getattr(IfcResourceConsumptionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcResourceConsumptionEnum, 'NOTDEFINED', INDETERMINATE) IfcRibPlateDirectionEnum = enum_namespace() -direction_x = getattr(IfcRibPlateDirectionEnum, 'DIRECTION_X', INDETERMINATE) -direction_y = getattr(IfcRibPlateDirectionEnum, 'DIRECTION_Y', INDETERMINATE) +direction_x = express_getattr(IfcRibPlateDirectionEnum, 'DIRECTION_X', INDETERMINATE) +direction_y = express_getattr(IfcRibPlateDirectionEnum, 'DIRECTION_Y', INDETERMINATE) IfcRoleEnum = enum_namespace() -supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -comissioningengineer = getattr(IfcRoleEnum, 'COMISSIONINGENGINEER', INDETERMINATE) -engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +comissioningengineer = express_getattr(IfcRoleEnum, 'COMISSIONINGENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) IfcRoofTypeEnum = enum_namespace() -flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSIPrefix = enum_namespace() -exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +atto = express_getattr(IfcSIPrefix, 'ATTO', 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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', 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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) IfcSensorTypeEnum = enum_namespace() -co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -gassensor = getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -lightsensor = getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSequenceEnum = enum_namespace() -start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcServiceLifeFactorTypeEnum = enum_namespace() -a_qualityofcomponents = getattr(IfcServiceLifeFactorTypeEnum, 'A_QUALITYOFCOMPONENTS', INDETERMINATE) -b_designlevel = getattr(IfcServiceLifeFactorTypeEnum, 'B_DESIGNLEVEL', INDETERMINATE) -c_workexecutionlevel = getattr(IfcServiceLifeFactorTypeEnum, 'C_WORKEXECUTIONLEVEL', INDETERMINATE) -d_indoorenvironment = getattr(IfcServiceLifeFactorTypeEnum, 'D_INDOORENVIRONMENT', INDETERMINATE) -e_outdoorenvironment = getattr(IfcServiceLifeFactorTypeEnum, 'E_OUTDOORENVIRONMENT', INDETERMINATE) -f_inuseconditions = getattr(IfcServiceLifeFactorTypeEnum, 'F_INUSECONDITIONS', INDETERMINATE) -g_maintenancelevel = getattr(IfcServiceLifeFactorTypeEnum, 'G_MAINTENANCELEVEL', INDETERMINATE) -userdefined = getattr(IfcServiceLifeFactorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcServiceLifeFactorTypeEnum, 'NOTDEFINED', INDETERMINATE) +a_qualityofcomponents = express_getattr(IfcServiceLifeFactorTypeEnum, 'A_QUALITYOFCOMPONENTS', INDETERMINATE) +b_designlevel = express_getattr(IfcServiceLifeFactorTypeEnum, 'B_DESIGNLEVEL', INDETERMINATE) +c_workexecutionlevel = express_getattr(IfcServiceLifeFactorTypeEnum, 'C_WORKEXECUTIONLEVEL', INDETERMINATE) +d_indoorenvironment = express_getattr(IfcServiceLifeFactorTypeEnum, 'D_INDOORENVIRONMENT', INDETERMINATE) +e_outdoorenvironment = express_getattr(IfcServiceLifeFactorTypeEnum, 'E_OUTDOORENVIRONMENT', INDETERMINATE) +f_inuseconditions = express_getattr(IfcServiceLifeFactorTypeEnum, 'F_INUSECONDITIONS', INDETERMINATE) +g_maintenancelevel = express_getattr(IfcServiceLifeFactorTypeEnum, 'G_MAINTENANCELEVEL', INDETERMINATE) +userdefined = express_getattr(IfcServiceLifeFactorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcServiceLifeFactorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcServiceLifeTypeEnum = enum_namespace() -actualservicelife = getattr(IfcServiceLifeTypeEnum, 'ACTUALSERVICELIFE', INDETERMINATE) -expectedservicelife = getattr(IfcServiceLifeTypeEnum, 'EXPECTEDSERVICELIFE', INDETERMINATE) -optimisticreferenceservicelife = getattr(IfcServiceLifeTypeEnum, 'OPTIMISTICREFERENCESERVICELIFE', INDETERMINATE) -pessimisticreferenceservicelife = getattr(IfcServiceLifeTypeEnum, 'PESSIMISTICREFERENCESERVICELIFE', INDETERMINATE) -referenceservicelife = getattr(IfcServiceLifeTypeEnum, 'REFERENCESERVICELIFE', INDETERMINATE) +actualservicelife = express_getattr(IfcServiceLifeTypeEnum, 'ACTUALSERVICELIFE', INDETERMINATE) +expectedservicelife = express_getattr(IfcServiceLifeTypeEnum, 'EXPECTEDSERVICELIFE', INDETERMINATE) +optimisticreferenceservicelife = express_getattr(IfcServiceLifeTypeEnum, 'OPTIMISTICREFERENCESERVICELIFE', INDETERMINATE) +pessimisticreferenceservicelife = express_getattr(IfcServiceLifeTypeEnum, 'PESSIMISTICREFERENCESERVICELIFE', INDETERMINATE) +referenceservicelife = express_getattr(IfcServiceLifeTypeEnum, 'REFERENCESERVICELIFE', INDETERMINATE) IfcSlabTypeEnum = enum_namespace() -floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSoundScaleEnum = enum_namespace() -dba = getattr(IfcSoundScaleEnum, 'DBA', INDETERMINATE) -dbb = getattr(IfcSoundScaleEnum, 'DBB', INDETERMINATE) -dbc = getattr(IfcSoundScaleEnum, 'DBC', INDETERMINATE) -nc = getattr(IfcSoundScaleEnum, 'NC', INDETERMINATE) -nr = getattr(IfcSoundScaleEnum, 'NR', INDETERMINATE) -userdefined = getattr(IfcSoundScaleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSoundScaleEnum, 'NOTDEFINED', INDETERMINATE) +dba = express_getattr(IfcSoundScaleEnum, 'DBA', INDETERMINATE) +dbb = express_getattr(IfcSoundScaleEnum, 'DBB', INDETERMINATE) +dbc = express_getattr(IfcSoundScaleEnum, 'DBC', INDETERMINATE) +nc = express_getattr(IfcSoundScaleEnum, 'NC', INDETERMINATE) +nr = express_getattr(IfcSoundScaleEnum, 'NR', INDETERMINATE) +userdefined = express_getattr(IfcSoundScaleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSoundScaleEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceHeaterTypeEnum = enum_namespace() -sectionalradiator = getattr(IfcSpaceHeaterTypeEnum, 'SECTIONALRADIATOR', INDETERMINATE) -panelradiator = getattr(IfcSpaceHeaterTypeEnum, 'PANELRADIATOR', INDETERMINATE) -tubularradiator = getattr(IfcSpaceHeaterTypeEnum, 'TUBULARRADIATOR', INDETERMINATE) -convector = getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -baseboardheater = getattr(IfcSpaceHeaterTypeEnum, 'BASEBOARDHEATER', INDETERMINATE) -finnedtubeunit = getattr(IfcSpaceHeaterTypeEnum, 'FINNEDTUBEUNIT', INDETERMINATE) -unitheater = getattr(IfcSpaceHeaterTypeEnum, 'UNITHEATER', INDETERMINATE) -userdefined = getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +sectionalradiator = express_getattr(IfcSpaceHeaterTypeEnum, 'SECTIONALRADIATOR', INDETERMINATE) +panelradiator = express_getattr(IfcSpaceHeaterTypeEnum, 'PANELRADIATOR', INDETERMINATE) +tubularradiator = express_getattr(IfcSpaceHeaterTypeEnum, 'TUBULARRADIATOR', INDETERMINATE) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +baseboardheater = express_getattr(IfcSpaceHeaterTypeEnum, 'BASEBOARDHEATER', INDETERMINATE) +finnedtubeunit = express_getattr(IfcSpaceHeaterTypeEnum, 'FINNEDTUBEUNIT', INDETERMINATE) +unitheater = express_getattr(IfcSpaceHeaterTypeEnum, 'UNITHEATER', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceTypeEnum = enum_namespace() -userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceTypeEnum, '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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairFlightTypeEnum = enum_namespace() -straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairTypeEnum = enum_namespace() -straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStateEnum = enum_namespace() -readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) IfcStructuralCurveTypeEnum = enum_namespace() -rigid_joined_member = getattr(IfcStructuralCurveTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = getattr(IfcStructuralCurveTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = getattr(IfcStructuralCurveTypeEnum, 'CABLE', INDETERMINATE) -tension_member = getattr(IfcStructuralCurveTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = getattr(IfcStructuralCurveTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +cable = express_getattr(IfcStructuralCurveTypeEnum, 'CABLE', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralSurfaceTypeEnum = enum_namespace() -bending_element = getattr(IfcStructuralSurfaceTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = getattr(IfcStructuralSurfaceTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = getattr(IfcStructuralSurfaceTypeEnum, 'SHELL', INDETERMINATE) -userdefined = getattr(IfcStructuralSurfaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralSurfaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = express_getattr(IfcStructuralSurfaceTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralSurfaceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) IfcSurfaceTextureEnum = enum_namespace() -bump = getattr(IfcSurfaceTextureEnum, 'BUMP', INDETERMINATE) -opacity = getattr(IfcSurfaceTextureEnum, 'OPACITY', INDETERMINATE) -reflection = getattr(IfcSurfaceTextureEnum, 'REFLECTION', INDETERMINATE) -selfillumination = getattr(IfcSurfaceTextureEnum, 'SELFILLUMINATION', INDETERMINATE) -shininess = getattr(IfcSurfaceTextureEnum, 'SHININESS', INDETERMINATE) -specular = getattr(IfcSurfaceTextureEnum, 'SPECULAR', INDETERMINATE) -texture = getattr(IfcSurfaceTextureEnum, 'TEXTURE', INDETERMINATE) -transparencymap = getattr(IfcSurfaceTextureEnum, 'TRANSPARENCYMAP', INDETERMINATE) -notdefined = getattr(IfcSurfaceTextureEnum, 'NOTDEFINED', INDETERMINATE) +bump = express_getattr(IfcSurfaceTextureEnum, 'BUMP', INDETERMINATE) +opacity = express_getattr(IfcSurfaceTextureEnum, 'OPACITY', INDETERMINATE) +reflection = express_getattr(IfcSurfaceTextureEnum, 'REFLECTION', INDETERMINATE) +selfillumination = express_getattr(IfcSurfaceTextureEnum, 'SELFILLUMINATION', INDETERMINATE) +shininess = express_getattr(IfcSurfaceTextureEnum, 'SHININESS', INDETERMINATE) +specular = express_getattr(IfcSurfaceTextureEnum, 'SPECULAR', INDETERMINATE) +texture = express_getattr(IfcSurfaceTextureEnum, 'TEXTURE', INDETERMINATE) +transparencymap = express_getattr(IfcSurfaceTextureEnum, 'TRANSPARENCYMAP', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceTextureEnum, 'NOTDEFINED', INDETERMINATE) IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -emergencystop = getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTankTypeEnum = enum_namespace() -preformed = getattr(IfcTankTypeEnum, 'PREFORMED', INDETERMINATE) -sectional = getattr(IfcTankTypeEnum, 'SECTIONAL', INDETERMINATE) -expansion = getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -pressurevessel = getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -userdefined = getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +preformed = express_getattr(IfcTankTypeEnum, 'PREFORMED', INDETERMINATE) +sectional = express_getattr(IfcTankTypeEnum, 'SECTIONAL', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTendonTypeEnum = enum_namespace() -strand = getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -bar = getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -userdefined = getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTextPath = enum_namespace() -left = getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = getattr(IfcTextPath, 'UP', INDETERMINATE) -down = getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) IfcThermalLoadSourceEnum = enum_namespace() -people = getattr(IfcThermalLoadSourceEnum, 'PEOPLE', INDETERMINATE) -lighting = getattr(IfcThermalLoadSourceEnum, 'LIGHTING', INDETERMINATE) -equipment = getattr(IfcThermalLoadSourceEnum, 'EQUIPMENT', INDETERMINATE) -ventilationindoorair = getattr(IfcThermalLoadSourceEnum, 'VENTILATIONINDOORAIR', INDETERMINATE) -ventilationoutsideair = getattr(IfcThermalLoadSourceEnum, 'VENTILATIONOUTSIDEAIR', INDETERMINATE) -recirculatedair = getattr(IfcThermalLoadSourceEnum, 'RECIRCULATEDAIR', INDETERMINATE) -exhaustair = getattr(IfcThermalLoadSourceEnum, 'EXHAUSTAIR', INDETERMINATE) -airexchangerate = getattr(IfcThermalLoadSourceEnum, 'AIREXCHANGERATE', INDETERMINATE) -drybulbtemperature = getattr(IfcThermalLoadSourceEnum, 'DRYBULBTEMPERATURE', INDETERMINATE) -relativehumidity = getattr(IfcThermalLoadSourceEnum, 'RELATIVEHUMIDITY', INDETERMINATE) -infiltration = getattr(IfcThermalLoadSourceEnum, 'INFILTRATION', INDETERMINATE) -userdefined = getattr(IfcThermalLoadSourceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcThermalLoadSourceEnum, 'NOTDEFINED', INDETERMINATE) +people = express_getattr(IfcThermalLoadSourceEnum, 'PEOPLE', INDETERMINATE) +lighting = express_getattr(IfcThermalLoadSourceEnum, 'LIGHTING', INDETERMINATE) +equipment = express_getattr(IfcThermalLoadSourceEnum, 'EQUIPMENT', INDETERMINATE) +ventilationindoorair = express_getattr(IfcThermalLoadSourceEnum, 'VENTILATIONINDOORAIR', INDETERMINATE) +ventilationoutsideair = express_getattr(IfcThermalLoadSourceEnum, 'VENTILATIONOUTSIDEAIR', INDETERMINATE) +recirculatedair = express_getattr(IfcThermalLoadSourceEnum, 'RECIRCULATEDAIR', INDETERMINATE) +exhaustair = express_getattr(IfcThermalLoadSourceEnum, 'EXHAUSTAIR', INDETERMINATE) +airexchangerate = express_getattr(IfcThermalLoadSourceEnum, 'AIREXCHANGERATE', INDETERMINATE) +drybulbtemperature = express_getattr(IfcThermalLoadSourceEnum, 'DRYBULBTEMPERATURE', INDETERMINATE) +relativehumidity = express_getattr(IfcThermalLoadSourceEnum, 'RELATIVEHUMIDITY', INDETERMINATE) +infiltration = express_getattr(IfcThermalLoadSourceEnum, 'INFILTRATION', INDETERMINATE) +userdefined = express_getattr(IfcThermalLoadSourceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcThermalLoadSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcThermalLoadTypeEnum = enum_namespace() -sensible = getattr(IfcThermalLoadTypeEnum, 'SENSIBLE', INDETERMINATE) -latent = getattr(IfcThermalLoadTypeEnum, 'LATENT', INDETERMINATE) -radiant = getattr(IfcThermalLoadTypeEnum, 'RADIANT', INDETERMINATE) -notdefined = getattr(IfcThermalLoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +sensible = express_getattr(IfcThermalLoadTypeEnum, 'SENSIBLE', INDETERMINATE) +latent = express_getattr(IfcThermalLoadTypeEnum, 'LATENT', INDETERMINATE) +radiant = express_getattr(IfcThermalLoadTypeEnum, 'RADIANT', INDETERMINATE) +notdefined = express_getattr(IfcThermalLoadTypeEnum, 'NOTDEFINED', 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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTimeSeriesScheduleTypeEnum = enum_namespace() -annual = getattr(IfcTimeSeriesScheduleTypeEnum, 'ANNUAL', INDETERMINATE) -monthly = getattr(IfcTimeSeriesScheduleTypeEnum, 'MONTHLY', INDETERMINATE) -weekly = getattr(IfcTimeSeriesScheduleTypeEnum, 'WEEKLY', INDETERMINATE) -daily = getattr(IfcTimeSeriesScheduleTypeEnum, 'DAILY', INDETERMINATE) -userdefined = getattr(IfcTimeSeriesScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTimeSeriesScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +annual = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'ANNUAL', INDETERMINATE) +monthly = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'MONTHLY', INDETERMINATE) +weekly = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'WEEKLY', INDETERMINATE) +daily = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'DAILY', INDETERMINATE) +userdefined = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransformerTypeEnum = enum_namespace() -current = getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -voltage = getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransitionCode = enum_namespace() -discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) IfcTransportElementTypeEnum = enum_namespace() -elevator = getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -userdefined = getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', 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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWallTypeEnum = enum_namespace() -standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -greaseinterceptor = getattr(IfcWasteTerminalTypeEnum, 'GREASEINTERCEPTOR', INDETERMINATE) -oilinterceptor = getattr(IfcWasteTerminalTypeEnum, 'OILINTERCEPTOR', INDETERMINATE) -petrolinterceptor = getattr(IfcWasteTerminalTypeEnum, 'PETROLINTERCEPTOR', 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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +greaseinterceptor = express_getattr(IfcWasteTerminalTypeEnum, 'GREASEINTERCEPTOR', INDETERMINATE) +oilinterceptor = express_getattr(IfcWasteTerminalTypeEnum, 'OILINTERCEPTOR', INDETERMINATE) +petrolinterceptor = express_getattr(IfcWasteTerminalTypeEnum, 'PETROLINTERCEPTOR', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelPositionEnum = enum_namespace() -left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWorkControlTypeEnum = enum_namespace() -actual = getattr(IfcWorkControlTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = getattr(IfcWorkControlTypeEnum, 'BASELINE', INDETERMINATE) -planned = getattr(IfcWorkControlTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = getattr(IfcWorkControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWorkControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = express_getattr(IfcWorkControlTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkControlTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkControlTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkControlTypeEnum, 'NOTDEFINED', INDETERMINATE) def Ifc2DCompositeCurve(*args, **kwargs): return ifcopenshell.create_entity('Ifc2DCompositeCurve', 'IFC2X3', *args, **kwargs) @@ -3582,7 +3589,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -3645,7 +3652,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -3654,7 +3661,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -3663,7 +3670,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -3771,7 +3778,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -3780,7 +3787,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -3789,7 +3796,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class Ifc2DCompositeCurve_WR1: SCOPE = 'entity' @@ -3798,7 +3805,7 @@ class Ifc2DCompositeCurve_WR1: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False class Ifc2DCompositeCurve_WR2: SCOPE = 'entity' @@ -3807,7 +3814,7 @@ class Ifc2DCompositeCurve_WR2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -3816,8 +3823,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -3826,8 +3833,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAirTerminalBoxType_WR1: SCOPE = 'entity' @@ -3836,8 +3843,8 @@ class IfcAirTerminalBoxType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_WR1: SCOPE = 'entity' @@ -3846,8 +3853,8 @@ class IfcAirTerminalType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecoveryType_WR1: SCOPE = 'entity' @@ -3856,8 +3863,8 @@ class IfcAirToAirHeatRecoveryType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAnnotationCurveOccurrence_WR31: SCOPE = 'entity' @@ -3866,7 +3873,7 @@ class IfcAnnotationCurveOccurrence_WR31: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Item', INDETERMINATE)) or 'ifc2x3.ifccurve' in typeof(getattr(self, 'Item', INDETERMINATE))) is not False + assert (not exists(express_getattr(self, 'Item', INDETERMINATE)) or 'ifc2x3.ifccurve' in typeof(express_getattr(self, 'Item', INDETERMINATE))) is not False class IfcAnnotationFillAreaOccurrence_WR31: SCOPE = 'entity' @@ -3875,7 +3882,7 @@ class IfcAnnotationFillAreaOccurrence_WR31: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Item', INDETERMINATE)) or 'ifc2x3.ifcannotationfillarea' in typeof(getattr(self, 'Item', INDETERMINATE))) is not False + assert (not exists(express_getattr(self, 'Item', INDETERMINATE)) or 'ifc2x3.ifcannotationfillarea' in typeof(express_getattr(self, 'Item', INDETERMINATE))) is not False class IfcAnnotationSurface_WR01: SCOPE = 'entity' @@ -3884,7 +3891,7 @@ class IfcAnnotationSurface_WR01: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (sizeof(['ifc2x3.ifcsurface', 'ifc2x3.ifcshellbasedsurfacemodel', 'ifc2x3.ifcfacebasedsurfacemodel', 'ifc2x3.ifcsolidmodel', 'ifc2x3.ifcbooleanresult', 'ifc2x3.ifccsgprimitive3d'] * typeof(item)) >= 1) is not False class IfcAnnotationSurfaceOccurrence_WR31: @@ -3894,7 +3901,7 @@ class IfcAnnotationSurfaceOccurrence_WR31: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Item', INDETERMINATE)) or sizeof(['ifc2x3.ifcsurface', 'ifc2x3.ifcfacebasedsurfacemodel', 'ifc2x3.ifcshellbasedsurfacemodel', 'ifc2x3.ifcsolidmodel'] * typeof(getattr(self, 'Item', INDETERMINATE))) > 0) is not False + assert (not exists(express_getattr(self, 'Item', INDETERMINATE)) or sizeof(['ifc2x3.ifcsurface', 'ifc2x3.ifcfacebasedsurfacemodel', 'ifc2x3.ifcshellbasedsurfacemodel', 'ifc2x3.ifcsolidmodel'] * typeof(express_getattr(self, 'Item', INDETERMINATE))) > 0) is not False class IfcAnnotationSymbolOccurrence_WR31: SCOPE = 'entity' @@ -3903,7 +3910,7 @@ class IfcAnnotationSymbolOccurrence_WR31: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Item', INDETERMINATE)) or 'ifc2x3.ifcdefinedsymbol' in typeof(getattr(self, 'Item', INDETERMINATE))) is not False + assert (not exists(express_getattr(self, 'Item', INDETERMINATE)) or 'ifc2x3.ifcdefinedsymbol' in typeof(express_getattr(self, 'Item', INDETERMINATE))) is not False class IfcAnnotationTextOccurrence_WR31: SCOPE = 'entity' @@ -3912,7 +3919,7 @@ class IfcAnnotationTextOccurrence_WR31: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Item', INDETERMINATE)) or 'ifc2x3.ifctextliteral' in typeof(getattr(self, 'Item', INDETERMINATE))) is not False + assert (not exists(express_getattr(self, 'Item', INDETERMINATE)) or 'ifc2x3.ifctextliteral' in typeof(express_getattr(self, 'Item', INDETERMINATE))) is not False class IfcAppliedValue_WR1: SCOPE = 'entity' @@ -3921,8 +3928,8 @@ class IfcAppliedValue_WR1: @staticmethod def __call__(self): - appliedvalue = getattr(self, 'AppliedValue', INDETERMINATE) - valueofcomponents = getattr(self, 'ValueOfComponents', INDETERMINATE) + appliedvalue = express_getattr(self, 'AppliedValue', INDETERMINATE) + valueofcomponents = express_getattr(self, 'ValueOfComponents', INDETERMINATE) assert (exists(appliedvalue) or exists(valueofcomponents)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -3932,8 +3939,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -3942,7 +3949,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc2x3.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -3952,7 +3959,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc2x3.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -3962,7 +3969,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc2x3.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc2x3.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -3971,8 +3978,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -3981,7 +3988,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -3990,8 +3997,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -4000,7 +4007,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc2x3.ifcline' in typeof(temp)]) == 0) is not False class IfcAsset_WR1: @@ -4010,7 +4017,7 @@ class IfcAsset_WR1: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(getattr(self, 'IsGroupedBy', INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc2x3.ifcelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc2x3.ifcelement' in typeof(temp)]) == 0) is not False class IfcAxis1Placement_WR1: SCOPE = 'entity' @@ -4019,8 +4026,8 @@ class IfcAxis1Placement_WR1: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_WR2: SCOPE = 'entity' @@ -4029,10 +4036,10 @@ class IfcAxis1Placement_WR2: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_WR1: @@ -4042,8 +4049,8 @@ class IfcAxis2Placement2D_WR1: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_WR2: SCOPE = 'entity' @@ -4052,10 +4059,10 @@ class IfcAxis2Placement2D_WR2: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_WR1: @@ -4065,7 +4072,7 @@ class IfcAxis2Placement3D_WR1: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_WR2: SCOPE = 'entity' @@ -4074,8 +4081,8 @@ class IfcAxis2Placement3D_WR2: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_WR3: SCOPE = 'entity' @@ -4084,8 +4091,8 @@ class IfcAxis2Placement3D_WR3: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_WR4: SCOPE = 'entity' @@ -4094,9 +4101,9 @@ class IfcAxis2Placement3D_WR4: @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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_WR5: SCOPE = 'entity' @@ -4105,13 +4112,13 @@ class IfcAxis2Placement3D_WR5: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcBSplineCurve_WR41: @@ -4121,16 +4128,16 @@ class IfcBSplineCurve_WR41: @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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(controlpointslist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) def calc_IfcBSplineCurve_UpperIndexOnControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 class IfcBlobTexture_WR11: @@ -4140,7 +4147,7 @@ class IfcBlobTexture_WR11: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBoilerType_WR1: SCOPE = 'entity' @@ -4149,8 +4156,8 @@ class IfcBoilerType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_WR1: SCOPE = 'entity' @@ -4159,7 +4166,7 @@ class IfcBooleanClippingResult_WR1: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc2x3.ifcsweptareasolid' in typeof(firstoperand) or 'ifc2x3.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_WR2: @@ -4169,7 +4176,7 @@ class IfcBooleanClippingResult_WR2: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc2x3.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanClippingResult_WR3: @@ -4179,7 +4186,7 @@ class IfcBooleanClippingResult_WR3: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanResult_WR1: @@ -4189,13 +4196,13 @@ class IfcBooleanResult_WR1: @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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) def calc_IfcBoundingBox_Dim(self): return 3 @@ -4207,7 +4214,7 @@ class IfcBoxedHalfSpace_WR1: @staticmethod def __call__(self): - assert (not 'ifc2x3.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc2x3.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBuildingElementProxy_WR1: SCOPE = 'entity' @@ -4216,7 +4223,7 @@ class IfcBuildingElementProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcCShapeProfileDef_WR1: SCOPE = 'entity' @@ -4225,8 +4232,8 @@ class IfcCShapeProfileDef_WR1: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_WR2: @@ -4236,9 +4243,9 @@ class IfcCShapeProfileDef_WR2: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - internalfilletradius = getattr(self, 'InternalFilletRadius', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + internalfilletradius = express_getattr(self, 'InternalFilletRadius', INDETERMINATE) assert (not exists(internalfilletradius) or (internalfilletradius <= width / 2.0 and internalfilletradius <= depth / 2.0)) is not False class IfcCShapeProfileDef_WR3: @@ -4248,9 +4255,9 @@ class IfcCShapeProfileDef_WR3: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFittingType_WR1: @@ -4260,8 +4267,8 @@ class IfcCableCarrierFittingType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCalendarDate_WR21: SCOPE = 'entity' @@ -4279,11 +4286,11 @@ class IfcCartesianPoint_WR1: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) class IfcCartesianTransformationOperator_WR1: @@ -4293,16 +4300,16 @@ class IfcCartesianTransformationOperator_WR1: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_WR1: SCOPE = 'entity' @@ -4311,7 +4318,7 @@ class IfcCartesianTransformationOperator2D_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_WR2: SCOPE = 'entity' @@ -4320,7 +4327,7 @@ class IfcCartesianTransformationOperator2D_WR2: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_WR3: SCOPE = 'entity' @@ -4329,10 +4336,10 @@ class IfcCartesianTransformationOperator2D_WR3: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcCartesianTransformationOperator2D_U(self): - return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_WR1: SCOPE = 'entity' @@ -4341,12 +4348,12 @@ class IfcCartesianTransformationOperator2DnonUniform_WR1: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_WR1: SCOPE = 'entity' @@ -4355,7 +4362,7 @@ class IfcCartesianTransformationOperator3D_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_WR2: SCOPE = 'entity' @@ -4364,7 +4371,7 @@ class IfcCartesianTransformationOperator3D_WR2: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_WR3: SCOPE = 'entity' @@ -4373,7 +4380,7 @@ class IfcCartesianTransformationOperator3D_WR3: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_WR4: SCOPE = 'entity' @@ -4382,12 +4389,12 @@ class IfcCartesianTransformationOperator3D_WR4: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, '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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_WR1: SCOPE = 'entity' @@ -4396,7 +4403,7 @@ class IfcCartesianTransformationOperator3DnonUniform_WR1: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_WR2: @@ -4406,16 +4413,16 @@ class IfcCartesianTransformationOperator3DnonUniform_WR2: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChillerType_WR1: SCOPE = 'entity' @@ -4424,8 +4431,8 @@ class IfcChillerType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -4434,8 +4441,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoilType_WR1: SCOPE = 'entity' @@ -4444,8 +4451,8 @@ class IfcCoilType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -4454,7 +4461,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -4464,7 +4471,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcCompositeCurve_WR41: @@ -4474,9 +4481,9 @@ class IfcCompositeCurve_WR41: @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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_WR42: SCOPE = 'entity' @@ -4485,17 +4492,17 @@ class IfcCompositeCurve_WR42: @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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveSegment_WR1: SCOPE = 'entity' @@ -4504,12 +4511,12 @@ class IfcCompositeCurveSegment_WR1: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc2x3.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_WR1: SCOPE = 'entity' @@ -4518,8 +4525,8 @@ class IfcCompositeProfileDef_WR1: @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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_WR2: SCOPE = 'entity' @@ -4528,7 +4535,7 @@ class IfcCompositeProfileDef_WR2: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc2x3.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressorType_WR1: @@ -4538,8 +4545,8 @@ class IfcCompressorType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenserType_WR1: SCOPE = 'entity' @@ -4548,8 +4555,8 @@ class IfcCondenserType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConditionCriterion_WR1: SCOPE = 'entity' @@ -4558,7 +4565,7 @@ class IfcConditionCriterion_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -4567,8 +4574,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstraintAggregationRelationship_WR11: SCOPE = 'entity' @@ -4577,8 +4584,8 @@ class IfcConstraintAggregationRelationship_WR11: @staticmethod def __call__(self): - relatingconstraint = getattr(self, 'RelatingConstraint', INDETERMINATE) - relatedconstraints = getattr(self, 'RelatedConstraints', INDETERMINATE) + relatingconstraint = express_getattr(self, 'RelatingConstraint', INDETERMINATE) + relatedconstraints = express_getattr(self, 'RelatedConstraints', INDETERMINATE) assert (sizeof([temp for temp in relatedconstraints if temp == relatingconstraint]) == 0) is not False class IfcConstraintRelationship_WR11: @@ -4588,8 +4595,8 @@ class IfcConstraintRelationship_WR11: @staticmethod def __call__(self): - relatingconstraint = getattr(self, 'RelatingConstraint', INDETERMINATE) - relatedconstraints = getattr(self, 'RelatedConstraints', INDETERMINATE) + relatingconstraint = express_getattr(self, 'RelatingConstraint', INDETERMINATE) + relatedconstraints = express_getattr(self, 'RelatedConstraints', INDETERMINATE) assert (sizeof([temp for temp in relatedconstraints if temp == relatingconstraint]) == 0) is not False class IfcConstructionMaterialResource_WR1: @@ -4599,7 +4606,7 @@ class IfcConstructionMaterialResource_WR1: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'ResourceOf', INDETERMINATE)) <= 1) is not False + assert (sizeof(express_getattr(self, 'ResourceOf', INDETERMINATE)) <= 1) is not False class IfcConstructionMaterialResource_WR2: SCOPE = 'entity' @@ -4608,7 +4615,7 @@ class IfcConstructionMaterialResource_WR2: @staticmethod def __call__(self): - assert (not exists(lambda : express_getitem(getattr(self, 'ResourceOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or getattr(express_getitem(getattr(self, 'ResourceOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjectsType', INDETERMINATE) == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE)) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'ResourceOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or express_getattr(express_getitem(express_getattr(self, 'ResourceOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjectsType', INDETERMINATE) == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE)) is not False class IfcConstructionProductResource_WR1: SCOPE = 'entity' @@ -4617,7 +4624,7 @@ class IfcConstructionProductResource_WR1: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'ResourceOf', INDETERMINATE)) <= 1) is not False + assert (sizeof(express_getattr(self, 'ResourceOf', INDETERMINATE)) <= 1) is not False class IfcConstructionProductResource_WR2: SCOPE = 'entity' @@ -4626,7 +4633,7 @@ class IfcConstructionProductResource_WR2: @staticmethod def __call__(self): - assert (not exists(lambda : express_getitem(getattr(self, 'ResourceOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or getattr(express_getitem(getattr(self, 'ResourceOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjectsType', INDETERMINATE) == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE)) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'ResourceOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or express_getattr(express_getitem(express_getattr(self, 'ResourceOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjectsType', INDETERMINATE) == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE)) is not False class IfcCooledBeamType_WR1: SCOPE = 'entity' @@ -4635,8 +4642,8 @@ class IfcCooledBeamType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTowerType_WR1: SCOPE = 'entity' @@ -4645,8 +4652,8 @@ class IfcCoolingTowerType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_WR61: SCOPE = 'entity' @@ -4655,8 +4662,8 @@ class IfcCovering_WR61: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -4665,8 +4672,8 @@ def calc_IfcCurve_Dim(self): return IfcCurveDim(self) def calc_IfcCurveBoundedPlane_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcCurveStyle_WR11: SCOPE = 'entity' @@ -4675,7 +4682,7 @@ class IfcCurveStyle_WR11: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc2x3.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc2x3.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyleFontPattern_WR01: @@ -4685,7 +4692,7 @@ class IfcCurveStyleFontPattern_WR01: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamperType_WR1: @@ -4695,8 +4702,8 @@ class IfcDamperType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDerivedProfileDef_WR1: SCOPE = 'entity' @@ -4705,8 +4712,8 @@ class IfcDerivedProfileDef_WR1: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -4715,8 +4722,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -4725,11 +4732,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDimensionCalloutRelationship_WR11: @@ -4739,7 +4746,7 @@ class IfcDimensionCalloutRelationship_WR11: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['primary', 'secondary']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['primary', 'secondary']) is not False class IfcDimensionCalloutRelationship_WR12: SCOPE = 'entity' @@ -4748,7 +4755,7 @@ class IfcDimensionCalloutRelationship_WR12: @staticmethod def __call__(self): - assert (sizeof(typeof(getattr(self, 'RelatingDraughtingCallout', INDETERMINATE)) * ['ifc2x3.ifcangulardimension', 'ifc2x3.ifcdiameterdimension', 'ifc2x3.ifclineardimension', 'ifc2x3.ifcradiusdimension']) == 1) is not False + assert (sizeof(typeof(express_getattr(self, 'RelatingDraughtingCallout', INDETERMINATE)) * ['ifc2x3.ifcangulardimension', 'ifc2x3.ifcdiameterdimension', 'ifc2x3.ifclineardimension', 'ifc2x3.ifcradiusdimension']) == 1) is not False class IfcDimensionCalloutRelationship_WR13: SCOPE = 'entity' @@ -4757,7 +4764,7 @@ class IfcDimensionCalloutRelationship_WR13: @staticmethod def __call__(self): - assert (not 'ifc2x3.ifcdimensioncurvedirectedcallout' in typeof(getattr(self, 'RelatedDraughtingCallout', INDETERMINATE))) is not False + assert (not 'ifc2x3.ifcdimensioncurvedirectedcallout' in typeof(express_getattr(self, 'RelatedDraughtingCallout', INDETERMINATE))) is not False class IfcDimensionCurve_WR51: SCOPE = 'entity' @@ -4775,7 +4782,7 @@ class IfcDimensionCurve_WR52: @staticmethod def __call__(self): - assert (sizeof([dct1 for dct1 in usedin(self, 'ifc2x3.' + 'ifcterminatorsymbol.annotatedcurve') if getattr(dct1, 'Role', INDETERMINATE) == getattr(IfcDimensionExtentUsage, 'ORIGIN', INDETERMINATE)]) <= 1 and sizeof([dct2 for dct2 in usedin(self, 'ifc2x3.' + 'ifcterminatorsymbol.annotatedcurve') if getattr(dct2, 'Role', INDETERMINATE) == getattr(IfcDimensionExtentUsage, 'TARGET', INDETERMINATE)]) <= 1) is not False + assert (sizeof([dct1 for dct1 in usedin(self, 'ifc2x3.' + 'ifcterminatorsymbol.annotatedcurve') if express_getattr(dct1, 'Role', INDETERMINATE) == express_getattr(IfcDimensionExtentUsage, 'ORIGIN', INDETERMINATE)]) <= 1 and sizeof([dct2 for dct2 in usedin(self, 'ifc2x3.' + 'ifcterminatorsymbol.annotatedcurve') if express_getattr(dct2, 'Role', INDETERMINATE) == express_getattr(IfcDimensionExtentUsage, 'TARGET', INDETERMINATE)]) <= 1) is not False class IfcDimensionCurve_WR53: SCOPE = 'entity' @@ -4784,7 +4791,7 @@ class IfcDimensionCurve_WR53: @staticmethod def __call__(self): - annotatedbysymbols = getattr(self, 'AnnotatedBySymbols', INDETERMINATE) + annotatedbysymbols = express_getattr(self, 'AnnotatedBySymbols', INDETERMINATE) assert (sizeof([dct for dct in annotatedbysymbols if not 'ifc2x3.ifcdimensioncurveterminator' in typeof(dct)]) == 0) is not False class IfcDimensionCurveDirectedCallout_WR41: @@ -4794,7 +4801,7 @@ class IfcDimensionCurveDirectedCallout_WR41: @staticmethod def __call__(self): - assert (sizeof([dc for dc in getattr(self, 'Contents', INDETERMINATE) if 'ifc2x3.ifcdimensioncurve' in typeof(dc)]) == 1) is not False + assert (sizeof([dc for dc in express_getattr(self, 'Contents', INDETERMINATE) if 'ifc2x3.ifcdimensioncurve' in typeof(dc)]) == 1) is not False class IfcDimensionCurveDirectedCallout_WR42: SCOPE = 'entity' @@ -4803,8 +4810,8 @@ class IfcDimensionCurveDirectedCallout_WR42: @staticmethod def __call__(self): - contents = getattr(self, 'Contents', INDETERMINATE) - assert (sizeof([dc for dc in getattr(self, 'contents', INDETERMINATE) if 'ifc2x3.ifcprojectioncurve' in typeof(dc)]) <= 2) is not False + contents = express_getattr(self, 'Contents', INDETERMINATE) + assert (sizeof([dc for dc in express_getattr(self, 'contents', INDETERMINATE) if 'ifc2x3.ifcprojectioncurve' in typeof(dc)]) <= 2) is not False class IfcDimensionCurveTerminator_WR61: SCOPE = 'entity' @@ -4813,7 +4820,7 @@ class IfcDimensionCurveTerminator_WR61: @staticmethod def __call__(self): - assert ('ifc2x3.ifcdimensioncurve' in typeof(getattr(self, 'AnnotatedCurve', INDETERMINATE))) is not False + assert ('ifc2x3.ifcdimensioncurve' in typeof(express_getattr(self, 'AnnotatedCurve', INDETERMINATE))) is not False class IfcDimensionPair_WR11: SCOPE = 'entity' @@ -4822,7 +4829,7 @@ class IfcDimensionPair_WR11: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['chained', 'parallel']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['chained', 'parallel']) is not False class IfcDimensionPair_WR12: SCOPE = 'entity' @@ -4831,7 +4838,7 @@ class IfcDimensionPair_WR12: @staticmethod def __call__(self): - assert (sizeof(typeof(getattr(self, 'RelatingDraughtingCallout', INDETERMINATE)) * ['ifc2x3.ifcangulardimension', 'ifc2x3.ifcdiameterdimension', 'ifc2x3.ifclineardimension', 'ifc2x3.ifcradiusdimension']) == 1) is not False + assert (sizeof(typeof(express_getattr(self, 'RelatingDraughtingCallout', INDETERMINATE)) * ['ifc2x3.ifcangulardimension', 'ifc2x3.ifcdiameterdimension', 'ifc2x3.ifclineardimension', 'ifc2x3.ifcradiusdimension']) == 1) is not False class IfcDimensionPair_WR13: SCOPE = 'entity' @@ -4840,10 +4847,10 @@ class IfcDimensionPair_WR13: @staticmethod def __call__(self): - assert (sizeof(typeof(getattr(self, 'RelatedDraughtingCallout', INDETERMINATE)) * ['ifc2x3.ifcangulardimension', 'ifc2x3.ifcdiameterdimension', 'ifc2x3.ifclineardimension', 'ifc2x3.ifcradiusdimension']) == 1) is not False + assert (sizeof(typeof(express_getattr(self, 'RelatedDraughtingCallout', INDETERMINATE)) * ['ifc2x3.ifcangulardimension', 'ifc2x3.ifcdiameterdimension', 'ifc2x3.ifclineardimension', 'ifc2x3.ifcradiusdimension']) == 1) is not False def calc_IfcDirection_Dim(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDocumentElectronicFormat_WR1: @@ -4853,8 +4860,8 @@ class IfcDocumentElectronicFormat_WR1: @staticmethod def __call__(self): - fileextension = getattr(self, 'FileExtension', INDETERMINATE) - mimecontenttype = getattr(self, 'MimeContentType', INDETERMINATE) + fileextension = express_getattr(self, 'FileExtension', INDETERMINATE) + mimecontenttype = express_getattr(self, 'MimeContentType', INDETERMINATE) assert (exists(fileextension) or exists(mimecontenttype)) is not False class IfcDocumentReference_WR1: @@ -4864,8 +4871,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referencetodocument = getattr(self, 'ReferenceToDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referencetodocument = express_getattr(self, 'ReferenceToDocument', INDETERMINATE) assert exists(name) ^ exists(lambda : express_getitem(referencetodocument, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) is not False class IfcDoorLiningProperties_WR31: @@ -4875,8 +4882,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (not exists(liningdepth) and exists(liningthickness))) is not False class IfcDoorLiningProperties_WR32: @@ -4886,8 +4893,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (not exists(thresholddepth) and exists(thresholdthickness))) is not False class IfcDoorLiningProperties_WR33: @@ -4897,8 +4904,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -4908,8 +4915,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -4919,7 +4926,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc2x3.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc2x3.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcDoorPanelProperties_WR31: SCOPE = 'entity' @@ -4928,7 +4935,7 @@ class IfcDoorPanelProperties_WR31: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc2x3.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc2x3.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcDraughtingPreDefinedColour_WR31: SCOPE = 'entity' @@ -4937,7 +4944,7 @@ class IfcDraughtingPreDefinedColour_WR31: @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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_WR31: SCOPE = 'entity' @@ -4946,7 +4953,7 @@ class IfcDraughtingPreDefinedCurveFont_WR31: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDraughtingPreDefinedTextFont_WR31: SCOPE = 'entity' @@ -4955,7 +4962,7 @@ class IfcDraughtingPreDefinedTextFont_WR31: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['iso3098-1fonta', 'iso3098-1fontb']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['iso3098-1fonta', 'iso3098-1fontb']) is not False class IfcDuctFittingType_WR2: SCOPE = 'entity' @@ -4964,8 +4971,8 @@ class IfcDuctFittingType_WR2: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegmentType_WR1: SCOPE = 'entity' @@ -4974,8 +4981,8 @@ class IfcDuctSegmentType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencerType_WR1: SCOPE = 'entity' @@ -4984,8 +4991,8 @@ class IfcDuctSilencerType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEdgeLoop_WR1: SCOPE = 'entity' @@ -4994,9 +5001,9 @@ class IfcEdgeLoop_WR1: @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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_WR2: SCOPE = 'entity' @@ -5008,7 +5015,7 @@ class IfcEdgeLoop_WR2: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricDistributionPoint_WR31: @@ -5018,8 +5025,8 @@ class IfcElectricDistributionPoint_WR31: @staticmethod def __call__(self): - distributionpointfunction = getattr(self, 'DistributionPointFunction', INDETERMINATE) - assert (distributionpointfunction != getattr(IfcElectricDistributionPointFunctionEnum, 'USERDEFINED', INDETERMINATE) or (distributionpointfunction == getattr(IfcElectricDistributionPointFunctionEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedFunction', INDETERMINATE)))) is not False + distributionpointfunction = express_getattr(self, 'DistributionPointFunction', INDETERMINATE) + assert (distributionpointfunction != express_getattr(IfcElectricDistributionPointFunctionEnum, 'USERDEFINED', INDETERMINATE) or (distributionpointfunction == express_getattr(IfcElectricDistributionPointFunctionEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedFunction', INDETERMINATE)))) is not False class IfcElementAssembly_WR1: SCOPE = 'entity' @@ -5028,12 +5035,12 @@ class IfcElementAssembly_WR1: @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, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False def calc_IfcElementarySurface_Dim(self): - position = getattr(self, 'Position', INDETERMINATE) - return getattr(position, 'Dim', INDETERMINATE) + position = express_getattr(self, 'Position', INDETERMINATE) + return express_getattr(position, 'Dim', INDETERMINATE) class IfcEnvironmentalImpactValue_WR1: SCOPE = 'entity' @@ -5042,8 +5049,8 @@ class IfcEnvironmentalImpactValue_WR1: @staticmethod def __call__(self): - category = getattr(self, 'Category', INDETERMINATE) - assert (category != getattr(IfcEnvironmentalImpactCategoryEnum, 'USERDEFINED', INDETERMINATE) or (category == getattr(IfcEnvironmentalImpactCategoryEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedCategory', INDETERMINATE)))) is not False + category = express_getattr(self, 'Category', INDETERMINATE) + assert (category != express_getattr(IfcEnvironmentalImpactCategoryEnum, 'USERDEFINED', INDETERMINATE) or (category == express_getattr(IfcEnvironmentalImpactCategoryEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedCategory', INDETERMINATE)))) is not False class IfcEvaporativeCoolerType_WR1: SCOPE = 'entity' @@ -5052,8 +5059,8 @@ class IfcEvaporativeCoolerType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporatorType_WR1: SCOPE = 'entity' @@ -5062,8 +5069,8 @@ class IfcEvaporatorType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -5072,9 +5079,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - itemreference = getattr(self, 'ItemReference', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + itemreference = express_getattr(self, 'ItemReference', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(itemreference) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_WR31: @@ -5084,7 +5091,7 @@ class IfcExtrudedAreaSolid_WR31: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcFace_WR1: SCOPE = 'entity' @@ -5093,7 +5100,7 @@ class IfcFace_WR1: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc2x3.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -5106,8 +5113,8 @@ class IfcFanType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFillAreaStyle_WR11: SCOPE = 'entity' @@ -5116,7 +5123,7 @@ class IfcFillAreaStyle_WR11: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc2x3.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc2x3.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_WR12: SCOPE = 'entity' @@ -5125,7 +5132,7 @@ class IfcFillAreaStyle_WR12: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc2x3.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc2x3.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_WR13: SCOPE = 'entity' @@ -5134,7 +5141,7 @@ class IfcFillAreaStyle_WR13: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyleHatching_WR21: SCOPE = 'entity' @@ -5143,7 +5150,7 @@ class IfcFillAreaStyleHatching_WR21: @staticmethod def __call__(self): - startofnexthatchline = getattr(self, 'StartOfNextHatchLine', INDETERMINATE) + startofnexthatchline = express_getattr(self, 'StartOfNextHatchLine', INDETERMINATE) assert (not 'ifc2x3.ifctwodirectionrepeatfactor' in typeof(startofnexthatchline)) is not False class IfcFillAreaStyleHatching_WR22: @@ -5153,8 +5160,8 @@ class IfcFillAreaStyleHatching_WR22: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_WR23: SCOPE = 'entity' @@ -5163,8 +5170,8 @@ class IfcFillAreaStyleHatching_WR23: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilterType_WR1: SCOPE = 'entity' @@ -5173,8 +5180,8 @@ class IfcFilterType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeterType_WR1: SCOPE = 'entity' @@ -5183,8 +5190,8 @@ class IfcFlowMeterType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_WR1: SCOPE = 'entity' @@ -5193,8 +5200,8 @@ class IfcFooting_WR1: @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, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGasTerminalType_WR1: SCOPE = 'entity' @@ -5203,8 +5210,8 @@ class IfcGasTerminalType_WR1: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcGasTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcGasTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGasTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGasTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeneralProfileProperties_WR1: SCOPE = 'entity' @@ -5213,7 +5220,7 @@ class IfcGeneralProfileProperties_WR1: @staticmethod def __call__(self): - crosssectionarea = getattr(self, 'CrossSectionArea', INDETERMINATE) + crosssectionarea = express_getattr(self, 'CrossSectionArea', INDETERMINATE) assert (not exists(crosssectionarea) or crosssectionarea > 0.0) is not False class IfcGeometricCurveSet_WR1: @@ -5223,7 +5230,7 @@ class IfcGeometricCurveSet_WR1: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc2x3.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc2x3.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationSubContext_WR31: SCOPE = 'entity' @@ -5232,7 +5239,7 @@ class IfcGeometricRepresentationSubContext_WR31: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc2x3.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_WR32: @@ -5242,25 +5249,25 @@ class IfcGeometricRepresentationSubContext_WR32: @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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_TrueNorth(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return nvl(getattr(parentcontext, 'TrueNorth', INDETERMINATE), express_getitem(getattr(getattr(self, 'WorldCoordinateSystem', INDETERMINATE), 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_WR21: SCOPE = 'entity' @@ -5269,12 +5276,12 @@ class IfcGeometricSet_WR21: @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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGrid_WR41: SCOPE = 'entity' @@ -5283,7 +5290,7 @@ class IfcGrid_WR41: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcGridAxis_WR1: SCOPE = 'entity' @@ -5292,8 +5299,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -5302,9 +5309,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -5317,8 +5324,8 @@ class IfcHeatExchangerType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifierType_WR1: SCOPE = 'entity' @@ -5327,8 +5334,8 @@ class IfcHumidifierType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_WR1: SCOPE = 'entity' @@ -5337,8 +5344,8 @@ class IfcIShapeProfileDef_WR1: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < overalldepth / 2.0) is not False class IfcIShapeProfileDef_WR2: @@ -5348,8 +5355,8 @@ class IfcIShapeProfileDef_WR2: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcIShapeProfileDef_WR3: @@ -5359,11 +5366,11 @@ class IfcIShapeProfileDef_WR3: @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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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 IfcInventory_WR41: @@ -5373,7 +5380,7 @@ class IfcInventory_WR41: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(getattr(self, 'IsGroupedBy', INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc2x3.ifcspace' in typeof(temp) or 'ifc2x3.ifcasset' in typeof(temp) or 'ifc2x3.ifcfurnishingelement' in typeof(temp))]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc2x3.ifcspace' in typeof(temp) or 'ifc2x3.ifcasset' in typeof(temp) or 'ifc2x3.ifcfurnishingelement' in typeof(temp))]) == 0) is not False class IfcLShapeProfileDef_WR21: SCOPE = 'entity' @@ -5382,8 +5389,8 @@ class IfcLShapeProfileDef_WR21: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth) is not False class IfcLShapeProfileDef_WR22: @@ -5393,8 +5400,8 @@ class IfcLShapeProfileDef_WR22: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (not exists(width) or thickness < width) is not False class IfcLine_WR1: @@ -5404,9 +5411,9 @@ class IfcLine_WR1: @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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -5415,8 +5422,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcLocalTime_WR21: @@ -5435,7 +5442,7 @@ class IfcMaterialDefinitionRepresentation_WR11: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc2x3.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -5448,7 +5455,7 @@ class IfcMechanicalMaterialProperties_WR21: @staticmethod def __call__(self): - youngmodulus = getattr(self, 'YoungModulus', INDETERMINATE) + youngmodulus = express_getattr(self, 'YoungModulus', INDETERMINATE) assert (not exists(youngmodulus) or youngmodulus >= 0.0) is not False class IfcMechanicalMaterialProperties_WR22: @@ -5458,7 +5465,7 @@ class IfcMechanicalMaterialProperties_WR22: @staticmethod def __call__(self): - shearmodulus = getattr(self, 'ShearModulus', INDETERMINATE) + shearmodulus = express_getattr(self, 'ShearModulus', INDETERMINATE) assert (not exists(shearmodulus) or shearmodulus >= 0.0) is not False class IfcMechanicalSteelMaterialProperties_WR31: @@ -5468,7 +5475,7 @@ class IfcMechanicalSteelMaterialProperties_WR31: @staticmethod def __call__(self): - yieldstress = getattr(self, 'YieldStress', INDETERMINATE) + yieldstress = express_getattr(self, 'YieldStress', INDETERMINATE) assert (not exists(yieldstress) or yieldstress >= 0.0) is not False class IfcMechanicalSteelMaterialProperties_WR32: @@ -5478,7 +5485,7 @@ class IfcMechanicalSteelMaterialProperties_WR32: @staticmethod def __call__(self): - ultimatestress = getattr(self, 'UltimateStress', INDETERMINATE) + ultimatestress = express_getattr(self, 'UltimateStress', INDETERMINATE) assert (not exists(ultimatestress) or ultimatestress >= 0.0) is not False class IfcMechanicalSteelMaterialProperties_WR33: @@ -5488,7 +5495,7 @@ class IfcMechanicalSteelMaterialProperties_WR33: @staticmethod def __call__(self): - hardeningmodule = getattr(self, 'HardeningModule', INDETERMINATE) + hardeningmodule = express_getattr(self, 'HardeningModule', INDETERMINATE) assert (not exists(hardeningmodule) or hardeningmodule >= 0.0) is not False class IfcMechanicalSteelMaterialProperties_WR34: @@ -5498,7 +5505,7 @@ class IfcMechanicalSteelMaterialProperties_WR34: @staticmethod def __call__(self): - proportionalstress = getattr(self, 'ProportionalStress', INDETERMINATE) + proportionalstress = express_getattr(self, 'ProportionalStress', INDETERMINATE) assert (not exists(proportionalstress) or proportionalstress >= 0.0) is not False class IfcMove_WR1: @@ -5508,7 +5515,7 @@ class IfcMove_WR1: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'OperatesOn', INDETERMINATE)) >= 1) is not False + assert (sizeof(express_getattr(self, 'OperatesOn', INDETERMINATE)) >= 1) is not False class IfcMove_WR2: SCOPE = 'entity' @@ -5517,8 +5524,8 @@ class IfcMove_WR2: @staticmethod def __call__(self): - operateson = getattr(self, 'OperatesOn', INDETERMINATE) - assert (sizeof([temp for temp in operateson if sizeof([temp2 for temp2 in getattr(temp, 'RelatedObjects', INDETERMINATE) if 'ifc2x3.ifcactor' in typeof(temp2) or 'ifc2x3.ifcequipmentelement' in typeof(temp2) or 'ifc2x3.ifcfurnishingelement' in typeof(temp2)]) >= 1]) >= 1) is not False + operateson = express_getattr(self, 'OperatesOn', INDETERMINATE) + assert (sizeof([temp for temp in operateson if sizeof([temp2 for temp2 in express_getattr(temp, 'RelatedObjects', INDETERMINATE) if 'ifc2x3.ifcactor' in typeof(temp2) or 'ifc2x3.ifcequipmentelement' in typeof(temp2) or 'ifc2x3.ifcfurnishingelement' in typeof(temp2)]) >= 1]) >= 1) is not False class IfcMove_WR3: SCOPE = 'entity' @@ -5527,7 +5534,7 @@ class IfcMove_WR3: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -5536,7 +5543,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcObject_WR1: SCOPE = 'entity' @@ -5545,7 +5552,7 @@ class IfcObject_WR1: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof([temp for temp in isdefinedby if 'ifc2x3.ifcreldefinesbytype' in typeof(temp)]) <= 1) is not False class IfcObjective_WR21: @@ -5555,8 +5562,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -5565,8 +5572,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_WR1: SCOPE = 'entity' @@ -5575,8 +5582,8 @@ class IfcOffsetCurve2D_WR1: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_WR1: SCOPE = 'entity' @@ -5585,8 +5592,8 @@ class IfcOffsetCurve3D_WR1: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOrientedEdge_WR1: SCOPE = 'entity' @@ -5595,18 +5602,18 @@ class IfcOrientedEdge_WR1: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc2x3.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcPath_WR1: SCOPE = 'entity' @@ -5624,8 +5631,8 @@ class IfcPerson_WR1: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_WR21: @@ -5635,7 +5642,7 @@ class IfcPhysicalComplexQuantity_WR21: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPile_WR1: @@ -5645,8 +5652,8 @@ class IfcPile_WR1: @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, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFittingType_WR1: SCOPE = 'entity' @@ -5655,8 +5662,8 @@ class IfcPipeFittingType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegmentType_WR1: SCOPE = 'entity' @@ -5665,8 +5672,8 @@ class IfcPipeSegmentType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_WR21: SCOPE = 'entity' @@ -5675,7 +5682,7 @@ class IfcPixelTexture_WR21: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_WR22: @@ -5685,7 +5692,7 @@ class IfcPixelTexture_WR22: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_WR23: @@ -5695,7 +5702,7 @@ class IfcPixelTexture_WR23: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_WR24: @@ -5705,22 +5712,22 @@ class IfcPixelTexture_WR24: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_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) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_WR21: SCOPE = 'entity' @@ -5729,8 +5736,8 @@ class IfcPolyLoop_WR21: @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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_WR41: SCOPE = 'entity' @@ -5739,8 +5746,8 @@ class IfcPolygonalBoundedHalfSpace_WR41: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_WR42: SCOPE = 'entity' @@ -5749,7 +5756,7 @@ class IfcPolygonalBoundedHalfSpace_WR42: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc2x3.ifcpolyline', 'ifc2x3.ifccompositecurve']) == 1) is not False class IfcPolyline_WR41: @@ -5759,8 +5766,8 @@ class IfcPolyline_WR41: @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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -5769,13 +5776,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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 IfcPreDefinedDimensionSymbol_WR31: @@ -5785,7 +5792,7 @@ class IfcPreDefinedDimensionSymbol_WR31: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['arclength', 'conicaltaper', 'counterbore', 'countersink', 'depth', 'diameter', 'plusminus', 'radius', 'slope', 'sphericaldiameter', 'sphericalradius', 'square']) is not False + assert (express_getattr(express_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' @@ -5794,7 +5801,7 @@ class IfcPreDefinedPointMarkerSymbol_WR31: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['asterisk', 'circle', 'dot', 'plus', 'square', 'triangle', 'x']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['asterisk', 'circle', 'dot', 'plus', 'square', 'triangle', 'x']) is not False class IfcPreDefinedTerminatorSymbol_WR31: SCOPE = 'entity' @@ -5803,7 +5810,7 @@ class IfcPreDefinedTerminatorSymbol_WR31: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['blankedarrow', 'blankedbox', 'blankeddot', 'dimensionorigin', 'filledarrow', 'filledbox', 'filleddot', 'integralsymbol', 'openarrow', 'slash', 'unfilledarrow']) is not False + assert (express_getattr(express_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' @@ -5812,7 +5819,7 @@ class IfcProcedure_WR1: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Decomposes', INDETERMINATE) if not 'ifc2x3.ifcrelnests' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Decomposes', INDETERMINATE) if not 'ifc2x3.ifcrelnests' in typeof(temp)]) == 0) is not False class IfcProcedure_WR2: SCOPE = 'entity' @@ -5821,7 +5828,7 @@ class IfcProcedure_WR2: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'IsDecomposedBy', INDETERMINATE) if not 'ifc2x3.ifcrelnests' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'IsDecomposedBy', INDETERMINATE) if not 'ifc2x3.ifcrelnests' in typeof(temp)]) == 0) is not False class IfcProcedure_WR3: SCOPE = 'entity' @@ -5830,7 +5837,7 @@ class IfcProcedure_WR3: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedure_WR4: SCOPE = 'entity' @@ -5839,8 +5846,8 @@ class IfcProcedure_WR4: @staticmethod def __call__(self): - proceduretype = getattr(self, 'ProcedureType', INDETERMINATE) - assert (proceduretype != getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (proceduretype == getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedProcedureType', INDETERMINATE)))) is not False + proceduretype = express_getattr(self, 'ProcedureType', INDETERMINATE) + assert (proceduretype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (proceduretype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedProcedureType', INDETERMINATE)))) is not False class IfcProduct_WR1: SCOPE = 'entity' @@ -5849,8 +5856,8 @@ class IfcProduct_WR1: @staticmethod def __call__(self): - objectplacement = getattr(self, 'ObjectPlacement', INDETERMINATE) - representation = getattr(self, 'Representation', INDETERMINATE) + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) assert (exists(representation) and exists(objectplacement) or (exists(representation) and (not 'ifc2x3.ifcproductdefinitionshape' in typeof(representation))) or (not exists(representation))) is not False class IfcProductDefinitionShape_WR11: @@ -5860,7 +5867,7 @@ class IfcProductDefinitionShape_WR11: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc2x3.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_WR31: @@ -5870,7 +5877,7 @@ class IfcProject_WR31: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_WR32: SCOPE = 'entity' @@ -5879,7 +5886,7 @@ class IfcProject_WR32: @staticmethod def __call__(self): - representationcontexts = getattr(self, 'RepresentationContexts', INDETERMINATE) + representationcontexts = express_getattr(self, 'RepresentationContexts', INDETERMINATE) assert (sizeof([temp for temp in representationcontexts if 'ifc2x3.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_WR33: @@ -5889,7 +5896,7 @@ class IfcProject_WR33: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcPropertyBoundedValue_WR21: SCOPE = 'entity' @@ -5898,8 +5905,8 @@ class IfcPropertyBoundedValue_WR21: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_WR22: @@ -5909,8 +5916,8 @@ class IfcPropertyBoundedValue_WR22: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (exists(upperboundvalue) or exists(lowerboundvalue)) is not False class IfcPropertyDependencyRelationship_WR1: @@ -5920,8 +5927,8 @@ class IfcPropertyDependencyRelationship_WR1: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR1: @@ -5931,9 +5938,9 @@ class IfcPropertyEnumeratedValue_WR1: @staticmethod def __call__(self): - enumerationvalues = getattr(self, 'EnumerationValues', INDETERMINATE) - enumerationreference = getattr(self, 'EnumerationReference', INDETERMINATE) - assert (not exists(enumerationreference) or sizeof([temp for temp in enumerationvalues if temp in getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -5942,7 +5949,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -5951,7 +5958,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_WR31: SCOPE = 'entity' @@ -5960,7 +5967,7 @@ class IfcPropertySet_WR31: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_WR32: SCOPE = 'entity' @@ -5969,7 +5976,7 @@ class IfcPropertySet_WR32: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertyTableValue_WR1: @@ -5979,8 +5986,8 @@ class IfcPropertyTableValue_WR1: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR2: @@ -5990,7 +5997,7 @@ class IfcPropertyTableValue_WR2: @staticmethod def __call__(self): - assert (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 + assert (sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR3: SCOPE = 'entity' @@ -5999,7 +6006,7 @@ class IfcPropertyTableValue_WR3: @staticmethod def __call__(self): - assert (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 + assert (sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProxy_WR1: SCOPE = 'entity' @@ -6008,7 +6015,7 @@ class IfcProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPumpType_WR1: SCOPE = 'entity' @@ -6017,8 +6024,8 @@ class IfcPumpType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -6027,7 +6034,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -6036,7 +6043,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -6046,7 +6053,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0.0) is not False class IfcQuantityLength_WR21: @@ -6056,7 +6063,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -6065,7 +6072,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -6075,7 +6082,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -6084,7 +6091,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -6094,7 +6101,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -6103,7 +6110,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -6113,7 +6120,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -6122,7 +6129,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRailing_WR61: @@ -6132,8 +6139,8 @@ class IfcRailing_WR61: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_WR1: SCOPE = 'entity' @@ -6142,7 +6149,7 @@ class IfcRamp_WR1: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 0 or (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 1 and (not exists(getattr(self, 'Representation', INDETERMINATE))))) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 0 or (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 1 and (not exists(express_getattr(self, 'Representation', INDETERMINATE))))) is not False class IfcRationalBezierCurve_WR1: SCOPE = 'entity' @@ -6151,8 +6158,8 @@ class IfcRationalBezierCurve_WR1: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBezierCurve_WR2: SCOPE = 'entity' @@ -6164,8 +6171,8 @@ class IfcRationalBezierCurve_WR2: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBezierCurve_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRectangleHollowProfileDef_WR31: SCOPE = 'entity' @@ -6174,8 +6181,8 @@ class IfcRectangleHollowProfileDef_WR31: @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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangleHollowProfileDef_WR32: SCOPE = 'entity' @@ -6184,8 +6191,8 @@ class IfcRectangleHollowProfileDef_WR32: @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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangleHollowProfileDef_WR33: SCOPE = 'entity' @@ -6194,9 +6201,9 @@ class IfcRectangleHollowProfileDef_WR33: @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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangularTrimmedSurface_WR1: SCOPE = 'entity' @@ -6205,8 +6212,8 @@ class IfcRectangularTrimmedSurface_WR1: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_WR2: @@ -6216,8 +6223,8 @@ class IfcRectangularTrimmedSurface_WR2: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_WR3: @@ -6227,10 +6234,10 @@ class IfcRectangularTrimmedSurface_WR3: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) - usense = getattr(self, 'Usense', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc2x3.ifcelementarysurface' in typeof(basissurface) and (not 'ifc2x3.ifcplane' in typeof(basissurface)) or 'ifc2x3.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_WR4: @@ -6240,14 +6247,14 @@ class IfcRectangularTrimmedSurface_WR4: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False def calc_IfcRectangularTrimmedSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcReinforcingBar_WR1: SCOPE = 'entity' @@ -6256,8 +6263,8 @@ class IfcReinforcingBar_WR1: @staticmethod def __call__(self): - barrole = getattr(self, 'BarRole', INDETERMINATE) - assert (barrole != getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) or (barrole == getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + barrole = express_getattr(self, 'BarRole', INDETERMINATE) + assert (barrole != express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) or (barrole == express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRelAssigns_WR1: SCOPE = 'entity' @@ -6266,8 +6273,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsTasks_WR1: @@ -6277,7 +6284,7 @@ class IfcRelAssignsTasks_WR1: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'RelatedObjects', INDETERMINATE)) == 1) is not False + assert (hiindex(express_getattr(self, 'RelatedObjects', INDETERMINATE)) == 1) is not False class IfcRelAssignsTasks_WR2: SCOPE = 'entity' @@ -6286,7 +6293,7 @@ class IfcRelAssignsTasks_WR2: @staticmethod def __call__(self): - assert ('ifc2x3.ifctask' in typeof(express_getitem(getattr(self, 'RelatedObjects', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert ('ifc2x3.ifctask' in typeof(express_getitem(express_getattr(self, 'RelatedObjects', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRelAssignsTasks_WR3: SCOPE = 'entity' @@ -6295,7 +6302,7 @@ class IfcRelAssignsTasks_WR3: @staticmethod def __call__(self): - assert ('ifc2x3.ifcworkcontrol' in typeof(getattr(self, 'RelatingControl', INDETERMINATE))) is not False + assert ('ifc2x3.ifcworkcontrol' in typeof(express_getattr(self, 'RelatingControl', INDETERMINATE))) is not False class IfcRelAssignsToActor_WR1: SCOPE = 'entity' @@ -6304,8 +6311,8 @@ class IfcRelAssignsToActor_WR1: @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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_WR1: SCOPE = 'entity' @@ -6314,8 +6321,8 @@ class IfcRelAssignsToControl_WR1: @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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_WR1: SCOPE = 'entity' @@ -6324,8 +6331,8 @@ class IfcRelAssignsToGroup_WR1: @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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_WR1: SCOPE = 'entity' @@ -6334,8 +6341,8 @@ class IfcRelAssignsToProcess_WR1: @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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_WR1: SCOPE = 'entity' @@ -6344,8 +6351,8 @@ class IfcRelAssignsToProduct_WR1: @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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_WR1: SCOPE = 'entity' @@ -6354,8 +6361,8 @@ class IfcRelAssignsToResource_WR1: @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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociates_WR21: SCOPE = 'entity' @@ -6364,7 +6371,7 @@ class IfcRelAssociates_WR21: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if not ('ifc2x3.ifcobjectdefinition' in typeof(temp) or 'ifc2x3.ifcpropertydefinition' in typeof(temp))]) == 0) is not False class IfcRelAssociatesMaterial_WR21: @@ -6374,7 +6381,7 @@ class IfcRelAssociatesMaterial_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc2x3.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc2x3.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc2x3.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc2x3.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelAssociatesMaterial_WR22: SCOPE = 'entity' @@ -6383,7 +6390,7 @@ class IfcRelAssociatesMaterial_WR22: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if not 'ifc2x3.ifcproduct' in typeof(temp) and (not 'ifc2x3.ifctypeproduct' in typeof(temp))]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if not 'ifc2x3.ifcproduct' in typeof(temp) and (not 'ifc2x3.ifctypeproduct' in typeof(temp))]) == 0) is not False class IfcRelConnectsElements_WR31: SCOPE = 'entity' @@ -6392,8 +6399,8 @@ class IfcRelConnectsElements_WR31: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -6403,7 +6410,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc2x3.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDecomposes_WR31: @@ -6413,8 +6420,8 @@ class IfcRelDecomposes_WR31: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelNests_WR1: @@ -6424,7 +6431,7 @@ class IfcRelNests_WR1: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if not typeof(getattr(self, 'RelatingObject', INDETERMINATE)) == typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if not typeof(express_getattr(self, 'RelatingObject', INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcRelOverridesProperties_WR1: SCOPE = 'entity' @@ -6433,7 +6440,7 @@ class IfcRelOverridesProperties_WR1: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'RelatedObjects', INDETERMINATE)) == 1) is not False + assert (sizeof(express_getattr(self, 'RelatedObjects', INDETERMINATE)) == 1) is not False class IfcRelReferencedInSpatialStructure_WR31: SCOPE = 'entity' @@ -6442,7 +6449,7 @@ class IfcRelReferencedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc2x3.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelSchedulesCostItems_WR11: @@ -6452,7 +6459,7 @@ class IfcRelSchedulesCostItems_WR11: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if not 'ifc2x3.ifccostitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if not 'ifc2x3.ifccostitem' in typeof(temp)]) == 0) is not False class IfcRelSchedulesCostItems_WR12: SCOPE = 'entity' @@ -6461,7 +6468,7 @@ class IfcRelSchedulesCostItems_WR12: @staticmethod def __call__(self): - assert ('ifc2x3.ifccostschedule' in typeof(getattr(self, 'RelatingControl', INDETERMINATE))) is not False + assert ('ifc2x3.ifccostschedule' in typeof(express_getattr(self, 'RelatingControl', INDETERMINATE))) is not False class IfcRelSequence_WR1: SCOPE = 'entity' @@ -6470,8 +6477,8 @@ class IfcRelSequence_WR1: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSpaceBoundary_WR1: @@ -6481,9 +6488,9 @@ class IfcRelSpaceBoundary_WR1: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (exists(relatedbuildingelement) and (not 'ifc2x3.ifcvirtualelement' in typeof(relatedbuildingelement))) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and (not exists(relatedbuildingelement) or 'ifc2x3.ifcvirtualelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (exists(relatedbuildingelement) and (not 'ifc2x3.ifcvirtualelement' in typeof(relatedbuildingelement))) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and (not exists(relatedbuildingelement) or 'ifc2x3.ifcvirtualelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcRevolvedAreaSolid_WR31: SCOPE = 'entity' @@ -6492,8 +6499,8 @@ class IfcRevolvedAreaSolid_WR31: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_WR32: SCOPE = 'entity' @@ -6502,12 +6509,12 @@ class IfcRevolvedAreaSolid_WR32: @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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', 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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRoof_WR1: SCOPE = 'entity' @@ -6516,7 +6523,7 @@ class IfcRoof_WR1: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 0 or (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 1 and (not exists(getattr(self, 'Representation', INDETERMINATE))))) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 0 or (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 1 and (not exists(express_getattr(self, 'Representation', INDETERMINATE))))) is not False class IfcRoundedRectangleProfileDef_WR31: SCOPE = 'entity' @@ -6525,11 +6532,11 @@ class IfcRoundedRectangleProfileDef_WR31: @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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSiUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSiUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSectionedSpine_WR1: SCOPE = 'entity' @@ -6538,8 +6545,8 @@ class IfcSectionedSpine_WR1: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_WR2: @@ -6549,8 +6556,8 @@ class IfcSectionedSpine_WR2: @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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_WR3: SCOPE = 'entity' @@ -6559,8 +6566,8 @@ class IfcSectionedSpine_WR3: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -6572,8 +6579,8 @@ class IfcServiceLifeFactor_WR31: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not predefinedtype == getattr(IfcServiceLifeFactorTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcServiceLifeFactorTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -6582,8 +6589,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_WR21: SCOPE = 'entity' @@ -6592,7 +6599,7 @@ class IfcShapeRepresentation_WR21: @staticmethod def __call__(self): - assert ('ifc2x3.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc2x3.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_WR22: SCOPE = 'entity' @@ -6601,7 +6608,7 @@ class IfcShapeRepresentation_WR22: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc2x3.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc2x3.ifcvertexpoint', 'ifc2x3.ifcedgecurve', 'ifc2x3.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False class IfcShapeRepresentation_WR23: @@ -6611,7 +6618,7 @@ class IfcShapeRepresentation_WR23: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_WR24: SCOPE = 'entity' @@ -6620,7 +6627,7 @@ class IfcShapeRepresentation_WR24: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): return 3 @@ -6632,8 +6639,8 @@ class IfcSlab_WR61: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -6645,8 +6652,8 @@ class IfcSpaceHeaterType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -6655,7 +6662,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc2x3.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc2x3.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc2x3.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc2x3.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc2x3.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc2x3.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcStair_WR1: SCOPE = 'entity' @@ -6664,7 +6671,7 @@ class IfcStair_WR1: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 0 or (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 1 and (not exists(getattr(self, 'Representation', INDETERMINATE))))) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 0 or (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) == 1 and (not exists(express_getattr(self, 'Representation', INDETERMINATE))))) is not False class IfcStructuralLinearAction_WR61: SCOPE = 'entity' @@ -6673,11 +6680,11 @@ class IfcStructuralLinearAction_WR61: @staticmethod def __call__(self): - assert (sizeof(['ifc2x3.ifcstructuralloadlinearforce', 'ifc2x3.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc2x3.ifcstructuralloadlinearforce', 'ifc2x3.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False def calc_IfcStructuralLinearActionVarying_VaryingAppliedLoads(self): - subsequentappliedloads = getattr(self, 'SubsequentAppliedLoads', INDETERMINATE) - return IfcAddToBeginOfList(getattr(self, 'AppliedLoad', INDETERMINATE), subsequentappliedloads) + subsequentappliedloads = express_getattr(self, 'SubsequentAppliedLoads', INDETERMINATE) + return IfcAddToBeginOfList(express_getattr(self, 'AppliedLoad', INDETERMINATE), subsequentappliedloads) class IfcStructuralPlanarAction_WR61: SCOPE = 'entity' @@ -6686,11 +6693,11 @@ class IfcStructuralPlanarAction_WR61: @staticmethod def __call__(self): - assert (sizeof(['ifc2x3.ifcstructuralloadplanarforce', 'ifc2x3.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc2x3.ifcstructuralloadplanarforce', 'ifc2x3.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False def calc_IfcStructuralPlanarActionVarying_VaryingAppliedLoads(self): - subsequentappliedloads = getattr(self, 'SubsequentAppliedLoads', INDETERMINATE) - return IfcAddToBeginOfList(getattr(self, 'AppliedLoad', INDETERMINATE), subsequentappliedloads) + subsequentappliedloads = express_getattr(self, 'SubsequentAppliedLoads', INDETERMINATE) + return IfcAddToBeginOfList(express_getattr(self, 'AppliedLoad', INDETERMINATE), subsequentappliedloads) class IfcStructuralPointAction_WR61: SCOPE = 'entity' @@ -6699,7 +6706,7 @@ class IfcStructuralPointAction_WR61: @staticmethod def __call__(self): - assert (sizeof(['ifc2x3.ifcstructuralloadsingleforce', 'ifc2x3.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc2x3.ifcstructuralloadsingleforce', 'ifc2x3.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_WR61: SCOPE = 'entity' @@ -6708,7 +6715,7 @@ class IfcStructuralPointReaction_WR61: @staticmethod def __call__(self): - assert (sizeof(['ifc2x3.ifcstructuralloadsingleforce', 'ifc2x3.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc2x3.ifcstructuralloadsingleforce', 'ifc2x3.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralProfileProperties_WR21: SCOPE = 'entity' @@ -6717,7 +6724,7 @@ class IfcStructuralProfileProperties_WR21: @staticmethod def __call__(self): - sheardeformationareay = getattr(self, 'ShearDeformationAreaY', INDETERMINATE) + sheardeformationareay = express_getattr(self, 'ShearDeformationAreaY', INDETERMINATE) assert (not exists(sheardeformationareay) or sheardeformationareay >= 0.0) is not False class IfcStructuralProfileProperties_WR22: @@ -6727,7 +6734,7 @@ class IfcStructuralProfileProperties_WR22: @staticmethod def __call__(self): - sheardeformationareaz = getattr(self, 'ShearDeformationAreaZ', INDETERMINATE) + sheardeformationareaz = express_getattr(self, 'ShearDeformationAreaZ', INDETERMINATE) assert (not exists(sheardeformationareaz) or sheardeformationareaz >= 0.0) is not False class IfcStructuralSteelProfileProperties_WR31: @@ -6737,7 +6744,7 @@ class IfcStructuralSteelProfileProperties_WR31: @staticmethod def __call__(self): - shearareay = getattr(self, 'ShearAreaY', INDETERMINATE) + shearareay = express_getattr(self, 'ShearAreaY', INDETERMINATE) assert (not exists(shearareay) or shearareay >= 0.0) is not False class IfcStructuralSteelProfileProperties_WR32: @@ -6747,7 +6754,7 @@ class IfcStructuralSteelProfileProperties_WR32: @staticmethod def __call__(self): - shearareaz = getattr(self, 'ShearAreaZ', INDETERMINATE) + shearareaz = express_getattr(self, 'ShearAreaZ', INDETERMINATE) assert (not exists(shearareaz) or shearareaz >= 0.0) is not False class IfcStructuralSurfaceMemberVarying_WR61: @@ -6757,7 +6764,7 @@ class IfcStructuralSurfaceMemberVarying_WR61: @staticmethod def __call__(self): - assert exists(getattr(self, 'Thickness', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Thickness', INDETERMINATE)) is not False class IfcStructuralSurfaceMemberVarying_WR62: SCOPE = 'entity' @@ -6766,7 +6773,7 @@ class IfcStructuralSurfaceMemberVarying_WR62: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(getattr(self, 'VaryingThicknessLocation', INDETERMINATE), 'ShapeRepresentations', INDETERMINATE) if not sizeof(getattr(temp, 'Items', INDETERMINATE)) == 1]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(express_getattr(self, 'VaryingThicknessLocation', INDETERMINATE), 'ShapeRepresentations', INDETERMINATE) if not sizeof(express_getattr(temp, 'Items', INDETERMINATE)) == 1]) == 0) is not False class IfcStructuralSurfaceMemberVarying_WR63: SCOPE = 'entity' @@ -6775,11 +6782,11 @@ class IfcStructuralSurfaceMemberVarying_WR63: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(getattr(self, 'VaryingThicknessLocation', INDETERMINATE), 'ShapeRepresentations', INDETERMINATE) if not ('ifc2x3.ifccartesianpoint' in typeof(express_getitem(getattr(temp, 'Items', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc2x3.ifcpointonsurface' in typeof(express_getitem(getattr(temp, 'Items', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(express_getattr(self, 'VaryingThicknessLocation', INDETERMINATE), 'ShapeRepresentations', INDETERMINATE) if not ('ifc2x3.ifccartesianpoint' in typeof(express_getitem(express_getattr(temp, 'Items', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc2x3.ifcpointonsurface' in typeof(express_getitem(express_getattr(temp, 'Items', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))]) == 0) is not False def calc_IfcStructuralSurfaceMemberVarying_VaryingThickness(self): - subsequentthickness = getattr(self, 'SubsequentThickness', INDETERMINATE) - return IfcAddToBeginOfList(getattr(self, 'Thickness', INDETERMINATE), subsequentthickness) + subsequentthickness = express_getattr(self, 'SubsequentThickness', INDETERMINATE) + return IfcAddToBeginOfList(express_getattr(self, 'Thickness', INDETERMINATE), subsequentthickness) class IfcStructuredDimensionCallout_WR31: SCOPE = 'entity' @@ -6788,8 +6795,8 @@ 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(getattr(ato, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['dimensionvalue', 'tolerancevalue', 'unittext', 'prefixtext', 'suffixtext']]) == 0) is not False + contents = express_getattr(self, 'Contents', INDETERMINATE) + assert (sizeof([ato for ato in [con for con in express_getattr(self, 'contents', INDETERMINATE) if 'ifc2x3.ifcannotationtextoccurrence' in typeof(con)] if not express_getattr(express_getattr(ato, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['dimensionvalue', 'tolerancevalue', 'unittext', 'prefixtext', 'suffixtext']]) == 0) is not False class IfcStyledItem_WR11: SCOPE = 'entity' @@ -6798,7 +6805,7 @@ class IfcStyledItem_WR11: @staticmethod def __call__(self): - styles = getattr(self, 'Styles', INDETERMINATE) + styles = express_getattr(self, 'Styles', INDETERMINATE) assert (sizeof(styles) == 1) is not False class IfcStyledItem_WR12: @@ -6808,7 +6815,7 @@ class IfcStyledItem_WR12: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc2x3.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_WR21: @@ -6818,7 +6825,7 @@ class IfcStyledRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc2x3.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc2x3.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSurfaceOfLinearExtrusion_WR41: SCOPE = 'entity' @@ -6827,17 +6834,17 @@ class IfcSurfaceOfLinearExtrusion_WR41: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceStyle_WR11: SCOPE = 'entity' @@ -6846,7 +6853,7 @@ class IfcSurfaceStyle_WR11: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_WR12: SCOPE = 'entity' @@ -6855,7 +6862,7 @@ class IfcSurfaceStyle_WR12: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_WR13: SCOPE = 'entity' @@ -6864,7 +6871,7 @@ class IfcSurfaceStyle_WR13: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_WR14: SCOPE = 'entity' @@ -6873,7 +6880,7 @@ class IfcSurfaceStyle_WR14: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_WR15: SCOPE = 'entity' @@ -6882,7 +6889,7 @@ class IfcSurfaceStyle_WR15: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc2x3.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_WR22: SCOPE = 'entity' @@ -6891,8 +6898,8 @@ class IfcSweptAreaSolid_WR22: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_WR1: SCOPE = 'entity' @@ -6901,8 +6908,8 @@ class IfcSweptDiskSolid_WR1: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_WR2: SCOPE = 'entity' @@ -6911,8 +6918,8 @@ class IfcSweptDiskSolid_WR2: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptSurface_WR1: @@ -6922,7 +6929,7 @@ class IfcSweptSurface_WR1: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) assert (not 'ifc2x3.ifcderivedprofiledef' in typeof(sweptcurve)) is not False class IfcSweptSurface_WR2: @@ -6932,12 +6939,12 @@ class IfcSweptSurface_WR2: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False def calc_IfcSweptSurface_Dim(self): - position = getattr(self, 'Position', INDETERMINATE) - return getattr(position, 'Dim', INDETERMINATE) + position = express_getattr(self, 'Position', INDETERMINATE) + return express_getattr(position, 'Dim', INDETERMINATE) class IfcTShapeProfileDef_WR1: SCOPE = 'entity' @@ -6946,8 +6953,8 @@ class IfcTShapeProfileDef_WR1: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_WR2: @@ -6957,8 +6964,8 @@ class IfcTShapeProfileDef_WR2: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -6968,8 +6975,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -6978,8 +6985,8 @@ class IfcTable_WR2: @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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR3: SCOPE = 'entity' @@ -6988,20 +6995,20 @@ class IfcTable_WR3: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTankType_WR1: SCOPE = 'entity' @@ -7010,8 +7017,8 @@ class IfcTankType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_WR1: SCOPE = 'entity' @@ -7020,7 +7027,7 @@ class IfcTask_WR1: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Decomposes', INDETERMINATE) if not 'ifc2x3.ifcrelnests' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Decomposes', INDETERMINATE) if not 'ifc2x3.ifcrelnests' in typeof(temp)]) == 0) is not False class IfcTask_WR2: SCOPE = 'entity' @@ -7029,7 +7036,7 @@ class IfcTask_WR2: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'IsDecomposedBy', INDETERMINATE) if not 'ifc2x3.ifcrelnests' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'IsDecomposedBy', INDETERMINATE) if not 'ifc2x3.ifcrelnests' in typeof(temp)]) == 0) is not False class IfcTask_WR3: SCOPE = 'entity' @@ -7038,7 +7045,7 @@ class IfcTask_WR3: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTelecomAddress_WR1: SCOPE = 'entity' @@ -7047,11 +7054,11 @@ class IfcTelecomAddress_WR1: @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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) assert (exists(telephonenumbers) or exists(pagernumber) or exists(facsimilenumbers) or exists(electronicmailaddresses) or exists(wwwhomepageurl)) is not False class IfcTendon_WR1: @@ -7061,8 +7068,8 @@ class IfcTendon_WR1: @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, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTextLiteralWithExtent_WR31: SCOPE = 'entity' @@ -7071,7 +7078,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc2x3.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_WR31: @@ -7081,7 +7088,7 @@ class IfcTextStyleFontModel_WR31: @staticmethod def __call__(self): - assert ('ifc2x3.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc2x3.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTextureMap_WR11: SCOPE = 'entity' @@ -7090,7 +7097,7 @@ class IfcTextureMap_WR11: @staticmethod def __call__(self): - assert (sizeof(['ifc2x3.ifcshellbasedsurfacemodel', 'ifc2x3.ifcfacebasedsurfacemodel', 'ifc2x3.ifcfacetedbrep', 'ifc2x3.ifcfacetedbrepwithvoids'] * typeof(getattr(express_getitem(getattr(self, 'AnnotatedSurface', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Item', INDETERMINATE))) >= 1) is not False + assert (sizeof(['ifc2x3.ifcshellbasedsurfacemodel', 'ifc2x3.ifcfacebasedsurfacemodel', 'ifc2x3.ifcfacetedbrep', 'ifc2x3.ifcfacetedbrepwithvoids'] * typeof(express_getattr(express_getitem(express_getattr(self, 'AnnotatedSurface', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Item', INDETERMINATE))) >= 1) is not False class IfcTimeSeriesSchedule_WR41: SCOPE = 'entity' @@ -7099,8 +7106,8 @@ class IfcTimeSeriesSchedule_WR41: @staticmethod def __call__(self): - timeseriesscheduletype = getattr(self, 'TimeSeriesScheduleType', INDETERMINATE) - assert (not timeseriesscheduletype == getattr(IfcTimeSeriesScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + timeseriesscheduletype = express_getattr(self, 'TimeSeriesScheduleType', INDETERMINATE) + assert (not timeseriesscheduletype == express_getattr(IfcTimeSeriesScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -7109,7 +7116,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc2x3.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc2x3.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -7118,7 +7125,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -7127,7 +7134,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcTrimmedCurve_WR41: SCOPE = 'entity' @@ -7136,7 +7143,7 @@ class IfcTrimmedCurve_WR41: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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_WR42: @@ -7146,7 +7153,7 @@ class IfcTrimmedCurve_WR42: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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 IfcTrimmedCurve_WR43: @@ -7156,7 +7163,7 @@ class IfcTrimmedCurve_WR43: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc2x3.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTubeBundleType_WR1: @@ -7166,8 +7173,8 @@ class IfcTubeBundleType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_WR1: SCOPE = 'entity' @@ -7176,7 +7183,7 @@ class IfcTypeObject_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeProduct_WR41: SCOPE = 'entity' @@ -7185,7 +7192,7 @@ class IfcTypeProduct_WR41: @staticmethod def __call__(self): - assert (not exists(lambda : express_getitem(getattr(self, 'ObjectTypeOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in getattr(express_getitem(getattr(self, 'ObjectTypeOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc2x3.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'ObjectTypeOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'ObjectTypeOf', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc2x3.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_WR21: SCOPE = 'entity' @@ -7194,8 +7201,8 @@ class IfcUShapeProfileDef_WR21: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_WR22: @@ -7205,8 +7212,8 @@ class IfcUShapeProfileDef_WR22: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -7216,7 +7223,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryEquipmentType_WR1: @@ -7226,8 +7233,8 @@ class IfcUnitaryEquipmentType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValveType_WR1: SCOPE = 'entity' @@ -7236,8 +7243,8 @@ class IfcValveType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_WR1: SCOPE = 'entity' @@ -7246,12 +7253,12 @@ class IfcVector_WR1: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVibrationIsolatorType_WR1: SCOPE = 'entity' @@ -7260,8 +7267,8 @@ class IfcVibrationIsolatorType_WR1: @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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWall_WR1: SCOPE = 'entity' @@ -7270,7 +7277,7 @@ class IfcWall_WR1: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc2x3.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc2x3.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcWallStandardCase_WR1: SCOPE = 'entity' @@ -7279,7 +7286,7 @@ class IfcWallStandardCase_WR1: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc2x3.ifcrelassociates.relatedobjects') if 'ifc2x3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc2x3.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc2x3.ifcrelassociates.relatedobjects') if 'ifc2x3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc2x3.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -7288,8 +7295,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (not exists(liningdepth) and exists(liningthickness))) is not False class IfcWindowLiningProperties_WR32: @@ -7299,8 +7306,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -7310,8 +7317,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -7321,7 +7328,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc2x3.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc2x3.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcWorkControl_WR1: SCOPE = 'entity' @@ -7330,8 +7337,8 @@ class IfcWorkControl_WR1: @staticmethod def __call__(self): - workcontroltype = getattr(self, 'WorkControlType', INDETERMINATE) - assert (workcontroltype != getattr(IfcWorkControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (workcontroltype == getattr(IfcWorkControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'UserDefinedControlType', INDETERMINATE)))) is not False + workcontroltype = express_getattr(self, 'WorkControlType', INDETERMINATE) + assert (workcontroltype != express_getattr(IfcWorkControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (workcontroltype == express_getattr(IfcWorkControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedControlType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_WR21: SCOPE = 'entity' @@ -7340,8 +7347,8 @@ class IfcZShapeProfileDef_WR21: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -7351,19 +7358,19 @@ class IfcZone_WR1: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(getattr(self, 'IsGroupedBy', INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc2x3.ifczone' in typeof(temp) or 'ifc2x3.ifcspace' in typeof(temp))]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc2x3.ifczone' in typeof(temp) or 'ifc2x3.ifcspace' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -7373,7 +7380,7 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAddToBeginOfList(ascalar, alist): @@ -7400,13 +7407,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -7424,7 +7431,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcCorrectDimensions(m, dim): if m == lengthunit: @@ -7602,7 +7609,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc2x3.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc2x3.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -7613,27 +7620,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc2x3.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc2x3.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc2x3.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc2x3.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc2x3.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc2x3.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc2x3.ifcproject' in typeof(temp)]) return count == 0 else: @@ -7645,26 +7652,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc2x3.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc2x3.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc2x3.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc2x3.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc2x3.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc2x3.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 'ifc2x3.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) + if 'ifc2x3.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc2x3.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -7673,17 +7680,17 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc2x3.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc2x3.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc2x3.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc2x3.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc2x3.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc2x3.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc2x3.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc2x3.ifcoffsetcurve3d' in typeof(curve): @@ -7692,8 +7699,8 @@ def IfcCurveDim(curve): 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -7701,13 +7708,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSiUnit(n): @@ -7777,15 +7784,15 @@ def IfcDimensionsForSiUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -7794,19 +7801,19 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis @@ -7830,16 +7837,16 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -7849,25 +7856,25 @@ def IfcNormalise(arg): if not exists(arg): return None else: - ndim = getattr(arg, 'Dim', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) if 'ifc2x3.ifcvector' in typeof(arg): - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: return None else: vec.Magnitude = 1.0 else: - v.DirectionRatios = getattr(arg, 'DirectionRatios', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc2x3.ifcvector' in typeof(arg): vec.Orientation = v @@ -7879,47 +7886,47 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -7940,15 +7947,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc2x3.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -7964,43 +7971,43 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc2x3.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc2x3.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc2x3.ifcpoint', 'ifc2x3.ifccurve', 'ifc2x3.ifcgeometriccurveset', 'ifc2x3.ifcannotationfillarea', 'ifc2x3.ifcdefinedsymbol', 'ifc2x3.ifctextliteral', 'ifc2x3.ifcdraughtingcallout']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc2x3.ifcgeometricset' in typeof(temp) or 'ifc2x3.ifcpoint' in typeof(temp) or 'ifc2x3.ifccurve' in typeof(temp) or ('ifc2x3.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc2x3.ifcgeometriccurveset' in typeof(temp) or 'ifc2x3.ifcgeometricset' in typeof(temp) or 'ifc2x3.ifcpoint' in typeof(temp) or ('ifc2x3.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc2x3.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 'ifc2x3.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc2x3.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc2x3.ifcshellbasedsurfacemodel', 'ifc2x3.ifcfacebasedsurfacemodel', 'ifc2x3.ifcfacetedbrep', 'ifc2x3.ifcfacetedbrepwithvoids'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc2x3.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if 'ifc2x3.ifcsweptareasolid' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if 'ifc2x3.ifcbooleanresult' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if 'ifc2x3.ifcbooleanclippingresult' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if 'ifc2x3.ifcsurfacecurvesweptareasolid' in typeof(temp) or 'ifc2x3.ifcsweptdisksolid' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc2x3.ifcfacetedbrep' in typeof(temp) or 'ifc2x3.ifcfacetedbrepwithvoids' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc2x3.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc2x3.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc2x3.ifcmappeditem' in typeof(temp)]) else: return None @@ -8008,17 +8015,17 @@ def IfcShapeRepresentationTypes(reptype, items): def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc2x3.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc2x3.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc2x3.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc2x3.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc2x3.ifcopenshell' in typeof(temp) or 'ifc2x3.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -8027,60 +8034,60 @@ def IfcTopologyRepresentationTypes(reptype, items): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcValidCalendarDate(date): - if not 1 <= getattr(date, 'DayComponent', INDETERMINATE) <= 31: + if not 1 <= express_getattr(date, 'DayComponent', INDETERMINATE) <= 31: return False - if getattr(date, 'MonthComponent', INDETERMINATE) == 4: - return 1 <= getattr(date, 'DayComponent', INDETERMINATE) <= 30 - elif getattr(date, 'MonthComponent', INDETERMINATE) == 6: - return 1 <= getattr(date, 'DayComponent', INDETERMINATE) <= 30 - elif getattr(date, 'MonthComponent', INDETERMINATE) == 9: - return 1 <= getattr(date, 'DayComponent', INDETERMINATE) <= 30 - elif getattr(date, 'MonthComponent', INDETERMINATE) == 11: - return 1 <= getattr(date, 'DayComponent', INDETERMINATE) <= 30 - elif getattr(date, 'MonthComponent', INDETERMINATE) == 2: - if IfcLeapYear(getattr(date, 'YearComponent', INDETERMINATE)): - return 1 <= getattr(date, 'DayComponent', INDETERMINATE) <= 29 + if express_getattr(date, 'MonthComponent', INDETERMINATE) == 4: + return 1 <= express_getattr(date, 'DayComponent', INDETERMINATE) <= 30 + elif express_getattr(date, 'MonthComponent', INDETERMINATE) == 6: + return 1 <= express_getattr(date, 'DayComponent', INDETERMINATE) <= 30 + elif express_getattr(date, 'MonthComponent', INDETERMINATE) == 9: + return 1 <= express_getattr(date, 'DayComponent', INDETERMINATE) <= 30 + elif express_getattr(date, 'MonthComponent', INDETERMINATE) == 11: + return 1 <= express_getattr(date, 'DayComponent', INDETERMINATE) <= 30 + elif express_getattr(date, 'MonthComponent', INDETERMINATE) == 2: + if IfcLeapYear(express_getattr(date, 'YearComponent', INDETERMINATE)): + return 1 <= express_getattr(date, 'DayComponent', INDETERMINATE) <= 29 else: - return 1 <= getattr(date, 'DayComponent', INDETERMINATE) <= 28 + return 1 <= express_getattr(date, 'DayComponent', INDETERMINATE) <= 28 else: return True def IfcValidTime(time): - if exists(getattr(time, 'SecondComponent', INDETERMINATE)): - return exists(getattr(time, 'MinuteComponent', INDETERMINATE)) + if exists(express_getattr(time, 'SecondComponent', INDETERMINATE)): + return exists(express_getattr(time, 'MinuteComponent', INDETERMINATE)) else: return True def IfcVectorDifference(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc2x3.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc2x3.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -8088,31 +8095,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc2x3.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc2x3.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py index b973c2e484..bf5e86438f 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,1846 +147,1846 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionTypeEnum = enum_namespace() -permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAddressTypeEnum = enum_namespace() -office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', 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) -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) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBSplineCurveForm = enum_namespace() -polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) IfcBSplineSurfaceForm = enum_namespace() -plane_surf = getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) IfcBeamTypeEnum = enum_namespace() -beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBenchmarkEnum = enum_namespace() -greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) IfcBoilerTypeEnum = enum_namespace() -water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -userdefined = getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableFittingTypeEnum = enum_namespace() -connector = getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -userdefined = getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChangeActionEnum = enum_namespace() -nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) IfcChillerTypeEnum = enum_namespace() -aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcColumnTypeEnum = enum_namespace() -column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -userdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) IfcCompressorTypeEnum = enum_namespace() -dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConnectionTypeEnum = enum_namespace() -atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConstraintEnum = enum_namespace() -hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -notdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcControllerTypeEnum = enum_namespace() -floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcControllerTypeEnum, '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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostScheduleTypeEnum = enum_namespace() -budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoveringTypeEnum = enum_namespace() -ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -userdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, '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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -userdefined = getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionSystemEnum = enum_namespace() -airconditioning = getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', 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) -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) -municipalsolidwaste = getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = getattr(IfcDistributionSystemEnum, 'REFRIGERATION', 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) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentConfidentialityEnum = enum_namespace() -public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentStatusEnum = enum_namespace() -draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorPanelOperationEnum = enum_namespace() -swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeEnum = enum_namespace() -door = getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -userdefined = getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', 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_swing_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', 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) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctSilencerTypeEnum, '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) -freestandingwaterheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', 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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, '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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementAssemblyTypeEnum = enum_namespace() -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) -girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTriggerTypeEnum = enum_namespace() -eventrule = getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTypeEnum = enum_namespace() -startevent = getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcExternalSpatialElementTypeEnum = enum_namespace() -external = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', 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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowDirectionEnum = enum_namespace() -source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', 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) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFurnitureTypeEnum = enum_namespace() -chair = getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -userdefined = getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeographicElementTypeEnum = enum_namespace() -terrain = getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -userdefined = getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeometricProjectionEnum = enum_namespace() -graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_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) -elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) IfcGridTypeEnum = enum_namespace() -rectangular = getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHeatExchangerTypeEnum = enum_namespace() -plate = getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -userdefined = getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHumidifierTypeEnum = enum_namespace() -steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHumidifierTypeEnum, '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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcInternalOrExternalEnum = enum_namespace() -internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) IfcInventoryTypeEnum = enum_namespace() -assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKnotType = enum_namespace() -uniform_knots = getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcLightFixtureTypeEnum = enum_namespace() -pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLoadGroupTypeEnum = enum_namespace() -load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLogicalOperatorEnum = enum_namespace() -logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', 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) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMemberTypeEnum = enum_namespace() -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) -stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMemberTypeEnum, '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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcNullStyle = enum_namespace() -null = getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, '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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcPileTypeEnum = enum_namespace() -bored = getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPipeSegmentTypeEnum = enum_namespace() -culvert = getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPlateTypeEnum = enum_namespace() -curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', 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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) IfcProjectionElementTypeEnum = enum_namespace() -userdefined = getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailingTypeEnum = enum_namespace() -handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampFlightTypeEnum = enum_namespace() -straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampTypeEnum = enum_namespace() -straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRecurrenceTypeEnum = enum_namespace() -daily = getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', 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) -plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarRoleEnum = enum_namespace() -main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) -stud = getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoleEnum = enum_namespace() -supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) IfcRoofTypeEnum = enum_namespace() -flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSIPrefix = enum_namespace() -exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +atto = express_getattr(IfcSIPrefix, 'ATTO', 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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', 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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) IfcSensorTypeEnum = enum_namespace() -cosensor = getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', 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) -phsensor = getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSequenceEnum = enum_namespace() -start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) IfcSlabTypeEnum = enum_namespace() -floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceTypeEnum = enum_namespace() -space = getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpatialZoneTypeEnum = enum_namespace() -construction = getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', 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) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairFlightTypeEnum = enum_namespace() -straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairTypeEnum = enum_namespace() -straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStateEnum = enum_namespace() -readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -userdefined = getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', 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) -selectorswitch = getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -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) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskTypeEnum = enum_namespace() -attendance = getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = getattr(IfcTaskTypeEnum, 'DISPOSAL', 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) -userdefined = getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonAnchorTypeEnum, '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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTextPath = enum_namespace() -left = getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = getattr(IfcTextPath, 'UP', INDETERMINATE) -down = getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = express_getattr(IfcTextPath, 'DOWN', 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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransformerTypeEnum = enum_namespace() -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) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransitionCode = enum_namespace() -discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) IfcTransportElementTypeEnum = enum_namespace() -elevator = getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', 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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWallTypeEnum = enum_namespace() -movable = getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelPositionEnum = enum_namespace() -left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypeEnum = enum_namespace() -window = getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4', *args, **kwargs) @@ -4316,7 +4323,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -4397,7 +4404,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -4406,7 +4413,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -4415,7 +4422,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -4514,7 +4521,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -4523,7 +4530,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -4532,7 +4539,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -4541,8 +4548,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -4551,8 +4558,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -4561,8 +4568,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -4571,8 +4578,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -4581,8 +4588,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -4591,7 +4598,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -4600,8 +4607,8 @@ class IfcAdvancedBrepWithVoids_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 'ifc4.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -4610,7 +4617,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4.ifcelementarysurface', 'ifc4.ifcsweptsurface', 'ifc4.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4.ifcelementarysurface', 'ifc4.ifcsweptsurface', 'ifc4.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -4619,7 +4626,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -4628,7 +4635,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4.ifcline', 'ifc4.ifcconic', 'ifc4.ifcpolyline', 'ifc4.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4.ifcline', 'ifc4.ifcconic', 'ifc4.ifcpolyline', 'ifc4.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -4637,8 +4644,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -4647,8 +4654,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -4657,8 +4664,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -4667,8 +4674,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -4677,8 +4684,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -4687,8 +4694,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -4697,8 +4704,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -4707,8 +4714,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -4717,8 +4724,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -4727,8 +4734,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -4737,8 +4744,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -4747,8 +4754,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -4757,8 +4764,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -4768,8 +4775,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -4778,7 +4785,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -4788,7 +4795,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -4798,7 +4805,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -4807,8 +4814,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -4817,7 +4824,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -4826,8 +4833,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -4836,7 +4843,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -4846,9 +4853,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -4858,9 +4865,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -4870,9 +4877,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -4882,9 +4889,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -4894,8 +4901,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -4904,8 +4911,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -4914,8 +4921,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -4924,8 +4931,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -4934,10 +4941,10 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_RefDirIs2D: @@ -4947,8 +4954,8 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIs2D: SCOPE = 'entity' @@ -4957,10 +4964,10 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_LocationIs3D: @@ -4970,7 +4977,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisIs3D: SCOPE = 'entity' @@ -4979,8 +4986,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -4989,8 +4996,8 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -4999,9 +5006,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_AxisAndRefDirProvision: SCOPE = 'entity' @@ -5010,13 +5017,13 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcBSplineCurve_SameDim: @@ -5026,16 +5033,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5045,11 +5052,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5059,26 +5066,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5088,10 +5095,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5100,10 +5107,10 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False class IfcBSplineSurfaceWithKnots_CorrespondingULists: SCOPE = 'entity' @@ -5112,8 +5119,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -5123,16 +5130,16 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -5142,8 +5149,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -5152,8 +5159,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -5162,7 +5169,7 @@ class IfcBeamStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -5171,8 +5178,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_SupportedRasterFormat: SCOPE = 'entity' @@ -5181,7 +5188,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -5190,7 +5197,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBoiler_CorrectPredefinedType: @@ -5200,8 +5207,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -5210,8 +5217,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -5220,8 +5227,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -5230,7 +5237,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -5240,7 +5247,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -5250,7 +5257,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanResult_SameDim: @@ -5260,9 +5267,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_FirstOperandClosed: SCOPE = 'entity' @@ -5271,8 +5278,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -5281,12 +5288,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -5295,7 +5302,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -5307,7 +5314,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBuildingElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -5316,7 +5323,7 @@ class IfcBuildingElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -5325,8 +5332,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -5335,8 +5342,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -5345,8 +5352,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -5355,7 +5362,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -5364,8 +5371,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -5374,8 +5381,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -5384,8 +5391,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -5394,8 +5401,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -5404,8 +5411,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -5414,8 +5421,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -5424,8 +5431,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -5435,10 +5442,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -5448,9 +5455,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -5460,8 +5467,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -5470,8 +5477,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -5480,8 +5487,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -5490,8 +5497,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -5500,8 +5507,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -5510,8 +5517,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -5520,8 +5527,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -5530,8 +5537,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -5540,8 +5547,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -5550,8 +5557,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -5560,8 +5567,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -5570,8 +5577,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -5580,11 +5587,11 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) def calc_IfcCartesianPointList_Dim(self): @@ -5597,16 +5604,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -5615,7 +5622,7 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -5624,7 +5631,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -5633,10 +5640,10 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcCartesianTransformationOperator2D_U(self): - return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -5645,12 +5652,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -5659,7 +5666,7 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -5668,7 +5675,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -5677,7 +5684,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -5686,12 +5693,12 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, '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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -5700,7 +5707,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -5710,16 +5717,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -5728,8 +5735,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -5738,8 +5745,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -5748,8 +5755,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -5758,8 +5765,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -5768,8 +5775,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -5778,8 +5785,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -5788,8 +5795,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -5798,8 +5805,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -5808,8 +5815,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -5818,8 +5825,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -5828,8 +5835,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -5838,8 +5845,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -5848,7 +5855,7 @@ class IfcColumnStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -5857,8 +5864,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -5867,8 +5874,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5877,8 +5884,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5887,8 +5894,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -5897,7 +5904,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -5907,7 +5914,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -5917,7 +5924,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -5927,7 +5934,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcCompositeCurve_CurveContinuous: @@ -5937,9 +5944,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -5948,17 +5955,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -5967,7 +5974,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -5980,12 +5987,12 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -5994,8 +6001,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6004,7 +6011,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6014,8 +6021,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6024,8 +6031,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6034,8 +6041,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -6044,8 +6051,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -6054,8 +6061,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -6064,8 +6071,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -6074,8 +6081,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6084,8 +6091,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6094,8 +6101,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6104,8 +6111,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6114,8 +6121,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6124,8 +6131,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6134,8 +6141,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -6144,8 +6151,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -6154,8 +6161,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6164,8 +6171,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -6174,8 +6181,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6184,8 +6191,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6194,8 +6201,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -6204,8 +6211,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -6214,8 +6221,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6224,8 +6231,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -6234,8 +6241,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -6244,8 +6251,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -6254,8 +6261,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6264,8 +6271,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6274,8 +6281,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -6287,8 +6294,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -6297,8 +6304,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -6307,8 +6314,8 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) @@ -6320,7 +6327,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyle_IdentifiableCurveStyle: @@ -6330,9 +6337,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -6342,7 +6349,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -6352,8 +6359,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -6362,8 +6369,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -6372,8 +6379,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6382,8 +6389,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -6392,8 +6399,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -6402,11 +6409,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -6416,11 +6423,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDiscreteAccessory_CorrectPredefinedType: @@ -6430,8 +6437,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -6440,8 +6447,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -6450,8 +6457,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -6460,8 +6467,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -6470,8 +6477,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -6480,8 +6487,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -6490,8 +6497,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectStyleAssigned: @@ -6501,8 +6508,8 @@ class IfcDoor_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -6511,8 +6518,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -6522,8 +6529,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -6533,8 +6540,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -6544,8 +6551,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -6555,7 +6562,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -6564,7 +6571,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6573,8 +6580,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -6583,7 +6590,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -6592,7 +6599,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6601,8 +6608,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6611,8 +6618,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6621,8 +6628,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6631,8 +6638,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6641,8 +6648,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6651,8 +6658,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -6661,8 +6668,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -6671,8 +6678,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6681,8 +6688,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -6691,9 +6698,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -6705,7 +6712,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -6715,8 +6722,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6725,8 +6732,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6735,8 +6742,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -6745,8 +6752,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -6755,8 +6762,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -6765,8 +6772,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -6775,8 +6782,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -6785,8 +6792,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6795,8 +6802,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -6805,8 +6812,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -6815,8 +6822,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6825,8 +6832,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -6835,8 +6842,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6845,8 +6852,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6855,8 +6862,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -6865,8 +6872,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -6875,8 +6882,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -6885,8 +6892,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -6895,8 +6902,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -6905,8 +6912,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6915,8 +6922,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -6925,7 +6932,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -6935,8 +6942,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -6945,8 +6952,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -6955,8 +6962,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -6965,8 +6972,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6975,8 +6982,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6985,8 +6992,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -6995,8 +7002,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7005,8 +7012,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7015,8 +7022,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -7025,8 +7032,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -7035,9 +7042,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -7046,8 +7053,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -7056,9 +7063,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -7067,9 +7074,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -7079,7 +7086,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -7088,7 +7095,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -7097,7 +7104,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -7110,8 +7117,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -7120,8 +7127,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -7130,8 +7137,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -7140,8 +7147,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -7150,8 +7157,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7160,8 +7167,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: SCOPE = 'entity' @@ -7170,7 +7177,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -7179,7 +7186,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -7188,7 +7195,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -7197,7 +7204,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -7206,7 +7213,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -7215,8 +7222,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -7225,8 +7232,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -7235,8 +7242,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -7245,8 +7252,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -7255,8 +7262,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -7265,8 +7272,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -7275,8 +7282,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -7285,8 +7292,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFixedReferenceSweptAreaSolid_DirectrixBounded: SCOPE = 'entity' @@ -7295,9 +7302,9 @@ class IfcFixedReferenceSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4.ifcconic', 'ifc4.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcFlowInstrument_CorrectPredefinedType: @@ -7307,8 +7314,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -7317,8 +7324,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7327,8 +7334,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -7337,8 +7344,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -7347,8 +7354,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -7357,8 +7364,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -7367,8 +7374,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7377,8 +7384,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7387,8 +7394,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -7397,8 +7404,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -7407,8 +7414,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -7417,8 +7424,8 @@ class IfcFurnitureType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7427,8 +7434,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7437,8 +7444,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7447,8 +7454,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -7457,7 +7464,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -7466,8 +7473,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -7476,7 +7483,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -7486,9 +7493,9 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedtargetview))) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -7497,23 +7504,23 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False def calc_IfcGeometricRepresentationSubContext_WorldCoordinateSystem(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -7522,12 +7529,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGrid_HasPlacement: SCOPE = 'entity' @@ -7536,7 +7543,7 @@ class IfcGrid_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcGridAxis_WR1: SCOPE = 'entity' @@ -7545,8 +7552,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -7555,9 +7562,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -7570,8 +7577,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -7580,8 +7587,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7590,8 +7597,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -7600,8 +7607,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -7610,8 +7617,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -7620,8 +7627,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -7630,8 +7637,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -7641,8 +7648,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcIShapeProfileDef_ValidFilletRadius: @@ -7652,11 +7659,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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 IfcIndexedPolyCurve_Consecutive: @@ -7666,7 +7673,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (sizeof(segments) == 0 or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -7676,8 +7683,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7686,8 +7693,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7696,8 +7703,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -7706,7 +7713,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -7715,7 +7722,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -7724,8 +7731,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -7734,8 +7741,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -7744,8 +7751,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -7754,9 +7761,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -7766,8 +7773,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7776,8 +7783,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -7786,8 +7793,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -7796,8 +7803,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -7806,8 +7813,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -7816,8 +7823,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -7826,8 +7833,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -7836,8 +7843,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -7846,9 +7853,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -7857,8 +7864,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @@ -7868,7 +7875,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -7878,7 +7885,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -7891,7 +7898,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -7901,8 +7908,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -7911,8 +7918,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7921,8 +7928,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7931,8 +7938,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7941,8 +7948,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7951,8 +7958,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -7961,8 +7968,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -7971,8 +7978,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -7981,7 +7988,7 @@ class IfcMemberStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -7990,8 +7997,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -8003,8 +8010,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -8013,8 +8020,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -8023,8 +8030,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -8033,7 +8040,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -8042,7 +8049,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -8052,8 +8059,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -8062,8 +8069,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -8072,8 +8079,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -8082,8 +8089,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -8092,18 +8099,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -8112,8 +8119,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -8122,8 +8129,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -8132,8 +8139,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -8142,9 +8149,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -8162,8 +8169,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -8172,9 +8179,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -8184,9 +8191,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -8196,7 +8203,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -8206,7 +8213,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -8216,8 +8223,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -8226,8 +8233,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -8236,8 +8243,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -8246,8 +8253,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8256,8 +8263,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8266,8 +8273,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -8276,8 +8283,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -8286,8 +8293,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8296,8 +8303,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -8306,7 +8313,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -8316,7 +8323,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -8326,7 +8333,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_SizeOfPixelList: @@ -8336,9 +8343,9 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_getattr(self, 'Pixel', INDETERMINATE) assert (sizeof(pixel) == width * height) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -8348,12 +8355,12 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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 def calc_IfcPlacement_Dim(self): - location = getattr(self, 'Location', INDETERMINATE) - return getattr(location, 'Dim', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -8362,8 +8369,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -8372,8 +8379,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -8382,7 +8389,7 @@ class IfcPlateStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -8391,16 +8398,16 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_AllPointsSameDim: SCOPE = 'entity' @@ -8409,8 +8416,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -8419,8 +8426,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -8429,7 +8436,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4.ifcpolyline', 'ifc4.ifccompositecurve']) == 1) is not False class IfcPolyline_SameDim: @@ -8439,8 +8446,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -8449,13 +8456,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -8465,7 +8472,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4.ifcshaperepresentation', 'ifc4.ifcgeometricrepresentationitem', 'ifc4.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -8475,7 +8482,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4.ifcgeometricrepresentationitem', 'ifc4.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcProcedure_HasName: @@ -8485,7 +8492,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedure_CorrectPredefinedType: SCOPE = 'entity' @@ -8494,8 +8501,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8504,8 +8511,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -8514,9 +8521,9 @@ class IfcProduct_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 'ifc4.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -8525,7 +8532,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_HasName: @@ -8535,7 +8542,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_CorrectContext: SCOPE = 'entity' @@ -8544,7 +8551,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -8553,7 +8560,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -8562,8 +8569,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: SCOPE = 'entity' @@ -8572,8 +8579,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -8583,8 +8590,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: @@ -8594,8 +8601,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -8605,8 +8612,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -8616,9 +8623,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -8627,7 +8634,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -8636,7 +8643,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -8645,7 +8652,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -8654,7 +8661,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -8664,7 +8671,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -8673,7 +8680,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -8683,8 +8690,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -8694,8 +8701,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -8704,8 +8711,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -8714,8 +8721,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8724,8 +8731,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -8734,8 +8741,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -8744,8 +8751,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -8754,8 +8761,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8764,8 +8771,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProxy_WR1: SCOPE = 'entity' @@ -8774,7 +8781,7 @@ class IfcProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -8783,8 +8790,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -8793,8 +8800,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -8803,8 +8810,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -8813,7 +8820,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -8822,7 +8829,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -8832,7 +8839,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0.0) is not False class IfcQuantityLength_WR21: @@ -8842,7 +8849,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -8851,7 +8858,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -8861,7 +8868,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -8870,7 +8877,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -8880,7 +8887,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -8889,7 +8896,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -8899,7 +8906,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -8908,7 +8915,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRailing_CorrectPredefinedType: @@ -8918,8 +8925,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -8928,8 +8935,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8938,8 +8945,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -8948,8 +8955,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -8958,8 +8965,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -8968,8 +8975,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -8978,8 +8985,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -8988,8 +8995,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -8998,8 +9005,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -9008,8 +9015,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -9021,8 +9028,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -9031,8 +9038,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -9044,9 +9051,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidWallThickness: @@ -9056,8 +9063,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangleHollowProfileDef_ValidInnerRadius: SCOPE = 'entity' @@ -9066,9 +9073,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -9077,8 +9084,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -9087,8 +9094,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -9098,8 +9105,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -9109,10 +9116,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4.ifcplane' in typeof(basissurface)) or 'ifc4.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -9122,9 +9129,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcingBar_CorrectPredefinedType: @@ -9134,8 +9141,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -9144,8 +9151,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_CorrectPredefinedType: SCOPE = 'entity' @@ -9154,8 +9161,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -9164,8 +9171,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMesh_CorrectPredefinedType: @@ -9175,8 +9182,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -9185,8 +9192,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_CorrectPredefinedType: SCOPE = 'entity' @@ -9195,8 +9202,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -9205,8 +9212,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcRelAggregates_NoSelfReference: @@ -9216,8 +9223,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssigns_WR1: @@ -9227,8 +9234,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -9238,8 +9245,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -9248,8 +9255,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -9258,8 +9265,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -9268,8 +9275,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -9278,8 +9285,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -9288,8 +9295,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -9298,7 +9305,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -9307,7 +9314,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4.ifcelement', 'ifc4.ifcelementtype', 'ifc4.ifcwindowstyle', 'ifc4.ifcdoorstyle', 'ifc4.ifcstructuralmember', 'ifc4.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4.ifcelement', 'ifc4.ifcelementtype', 'ifc4.ifcwindowstyle', 'ifc4.ifcdoorstyle', 'ifc4.ifcstructuralmember', 'ifc4.ifcport']) == 0]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -9316,8 +9323,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @@ -9327,7 +9334,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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 IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -9337,7 +9344,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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 IfcRelConnectsPorts_NoSelfReference: @@ -9347,8 +9354,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -9358,7 +9365,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -9368,8 +9375,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -9379,7 +9386,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NotSelfReference: SCOPE = 'entity' @@ -9388,8 +9395,8 @@ class IfcRelInterferesElements_NotSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -9399,8 +9406,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -9410,7 +9417,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -9420,8 +9427,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -9431,9 +9438,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -9442,9 +9449,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -9453,7 +9460,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -9463,7 +9470,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisStartInXY: @@ -9473,8 +9480,8 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: SCOPE = 'entity' @@ -9483,12 +9490,12 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', 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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -9497,7 +9504,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -9506,8 +9513,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -9516,8 +9523,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -9526,8 +9533,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -9536,11 +9543,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSiUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSiUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9549,8 +9556,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9559,8 +9566,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9569,8 +9576,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -9579,7 +9586,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -9588,7 +9595,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -9597,8 +9604,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_ConsistentProfileTypes: @@ -9608,8 +9615,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_SpineCurveDim: SCOPE = 'entity' @@ -9618,8 +9625,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -9631,8 +9638,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -9641,8 +9648,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -9651,8 +9658,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9661,8 +9668,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9671,8 +9678,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9681,8 +9688,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -9691,8 +9698,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -9701,7 +9708,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -9710,7 +9717,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4.ifcvertexpoint', 'ifc4.ifcedgecurve', 'ifc4.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False class IfcShapeRepresentation_HasRepresentationType: @@ -9720,7 +9727,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -9729,7 +9736,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -9738,7 +9745,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): return 3 @@ -9750,8 +9757,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -9760,8 +9767,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabElementedCase_HasDecomposition: SCOPE = 'entity' @@ -9770,7 +9777,7 @@ class IfcSlabElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcSlabStandardCase_HasMaterialLayerSetusage: SCOPE = 'entity' @@ -9779,7 +9786,7 @@ class IfcSlabStandardCase_HasMaterialLayerSetusage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -9788,8 +9795,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9798,8 +9805,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9808,8 +9815,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9818,8 +9825,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -9831,8 +9838,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -9841,8 +9848,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -9851,8 +9858,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -9861,8 +9868,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -9871,8 +9878,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9881,8 +9888,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -9891,7 +9898,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -9900,8 +9907,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -9910,8 +9917,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -9920,8 +9927,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9930,8 +9937,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9940,8 +9947,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9950,8 +9957,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -9960,8 +9967,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -9970,8 +9977,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -9980,8 +9987,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -9990,8 +9997,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10000,8 +10007,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -10010,8 +10017,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_HasObjectType: SCOPE = 'entity' @@ -10020,8 +10027,8 @@ class IfcStructuralAnalysisModel_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -10030,8 +10037,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -10040,8 +10047,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -10050,8 +10057,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -10060,8 +10067,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -10070,8 +10077,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -10080,8 +10087,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -10090,7 +10097,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4.ifcstructuralloadlinearforce', 'ifc4.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4.ifcstructuralloadlinearforce', 'ifc4.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -10099,7 +10106,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -10108,7 +10115,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -10117,8 +10124,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -10128,10 +10135,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -10140,7 +10147,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4.ifcstructuralloadplanarforce', 'ifc4.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4.ifcstructuralloadplanarforce', 'ifc4.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -10149,7 +10156,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -10158,7 +10165,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4.ifcstructuralloadsingleforce', 'ifc4.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4.ifcstructuralloadsingleforce', 'ifc4.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -10167,7 +10174,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4.ifcstructuralloadsingleforce', 'ifc4.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4.ifcstructuralloadsingleforce', 'ifc4.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -10176,8 +10183,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -10186,8 +10193,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -10196,8 +10203,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -10206,8 +10213,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -10216,8 +10223,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -10226,7 +10233,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -10236,7 +10243,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -10245,8 +10252,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10255,8 +10262,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -10268,8 +10275,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -10278,7 +10285,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -10291,9 +10298,9 @@ class IfcSurfaceCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4.ifcconic', 'ifc4.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSurfaceFeature_HasObjectType: @@ -10303,8 +10310,8 @@ class IfcSurfaceFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -10313,17 +10320,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: SCOPE = 'entity' @@ -10332,9 +10339,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceReinforcementArea_NonnegativeArea1: @@ -10344,7 +10351,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -10354,7 +10361,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -10364,7 +10371,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceStyle_MaxOneShading: @@ -10374,7 +10381,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -10383,7 +10390,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -10392,7 +10399,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -10401,7 +10408,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneExtDefined: SCOPE = 'entity' @@ -10410,7 +10417,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -10419,8 +10426,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixDim: SCOPE = 'entity' @@ -10429,8 +10436,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -10439,8 +10446,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolid_DirectrixBounded: @@ -10450,9 +10457,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4.ifcconic', 'ifc4.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -10462,8 +10469,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -10472,7 +10479,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -10481,8 +10488,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10491,8 +10498,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10501,8 +10508,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10511,8 +10518,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10521,8 +10528,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -10531,8 +10538,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -10541,8 +10548,8 @@ class IfcSystemFurnitureElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -10551,8 +10558,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -10562,8 +10569,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -10573,8 +10580,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -10583,20 +10590,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -10605,8 +10612,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -10615,8 +10622,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -10625,8 +10632,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -10635,7 +10642,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -10644,8 +10651,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -10654,8 +10661,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -10664,12 +10671,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -10679,8 +10686,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -10689,8 +10696,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -10699,8 +10706,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -10709,8 +10716,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -10719,8 +10726,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -10729,8 +10736,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -10742,7 +10749,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -10752,7 +10759,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -10761,7 +10768,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -10770,7 +10777,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -10779,7 +10786,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -10788,8 +10795,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTransformer_CorrectPredefinedType: @@ -10799,8 +10806,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -10809,8 +10816,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifctranformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifctranformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -10819,8 +10826,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10829,8 +10836,8 @@ class IfcTransportElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -10839,8 +10846,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -10849,11 +10856,11 @@ class IfcTransportElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTrimmedCurve_Trim1ValuesConsistent: @@ -10863,7 +10870,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -10873,7 +10880,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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 IfcTrimmedCurve_NoTrimOfBoundedCurves: @@ -10883,7 +10890,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTubeBundle_CorrectPredefinedType: @@ -10893,8 +10900,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -10903,8 +10910,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -10913,8 +10920,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -10923,7 +10930,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -10932,7 +10939,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -10942,7 +10949,7 @@ class IfcTypeProduct_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 'ifc4.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -10951,8 +10958,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -10962,8 +10969,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -10973,7 +10980,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -10983,8 +10990,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -10993,8 +11000,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -11003,8 +11010,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -11013,8 +11020,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -11023,8 +11030,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -11033,8 +11040,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -11043,8 +11050,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -11053,8 +11060,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -11063,8 +11070,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -11073,12 +11080,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -11087,8 +11094,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -11097,8 +11104,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11107,8 +11114,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVoidingFeature_HasObjectType: SCOPE = 'entity' @@ -11117,8 +11124,8 @@ class IfcVoidingFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -11127,8 +11134,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -11137,8 +11144,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallElementedCase_HasDecomposition: SCOPE = 'entity' @@ -11147,7 +11154,7 @@ class IfcWallElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -11156,7 +11163,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4.ifcrelassociates.relatedobjects') if 'ifc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -11165,8 +11172,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11175,8 +11182,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11185,8 +11192,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11195,8 +11202,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectStyleAssigned: SCOPE = 'entity' @@ -11205,8 +11212,8 @@ class IfcWindow_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -11215,8 +11222,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -11226,8 +11233,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -11237,8 +11244,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -11248,7 +11255,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -11257,7 +11264,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -11266,8 +11273,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -11276,8 +11283,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -11286,8 +11293,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -11296,8 +11303,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -11306,8 +11313,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -11317,19 +11324,19 @@ class IfcZone_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 ('ifc4.ifczone' in typeof(temp) or 'ifc4.ifcspace' in typeof(temp) or 'ifc4.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4.ifczone' in typeof(temp) or 'ifc4.ifcspace' in typeof(temp) or 'ifc4.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -11339,11 +11346,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -11357,13 +11364,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -11381,7 +11388,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -11418,11 +11425,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -11602,7 +11609,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -11613,27 +11620,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4.ifcproject' in typeof(temp)]) return count == 0 else: @@ -11645,26 +11652,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4.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 'ifc4.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) + if 'ifc4.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -11673,17 +11680,17 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4.ifcoffsetcurve3d' in typeof(curve): @@ -11691,13 +11698,13 @@ def IfcCurveDim(curve): if 'ifc4.ifcpcurve' in typeof(curve): return 3 if 'ifc4.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -11705,13 +11712,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSiUnit(n): @@ -11781,15 +11788,15 @@ def IfcDimensionsForSiUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -11798,36 +11805,36 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcListToArray(lis, low, u): @@ -11844,9 +11851,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -11864,10 +11871,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -11878,25 +11885,25 @@ def IfcNormalise(arg): return None else: if 'ifc4.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4.ifcvector' in typeof(arg): vec.Orientation = v @@ -11908,18 +11915,18 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointListDim(pointlist): @@ -11930,32 +11937,32 @@ def IfcPointListDim(pointlist): 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -11976,15 +11983,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -12000,71 +12007,71 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': - count = sizeof([temp for temp in items if 'ifc4.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': - count = sizeof([temp for temp in items if 'ifc4.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4.ifcpoint', 'ifc4.ifccurve', 'ifc4.ifcgeometriccurveset', 'ifc4.ifcannotationfillarea', 'ifc4.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4.ifcgeometricset' in typeof(temp) or 'ifc4.ifcpoint' in typeof(temp) or 'ifc4.ifccurve' in typeof(temp) or ('ifc4.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4.ifcgeometriccurveset' in typeof(temp) or 'ifc4.ifcgeometricset' in typeof(temp) or 'ifc4.ifcpoint' in typeof(temp) or ('ifc4.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4.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 'ifc4.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4.ifctessellateditem', 'ifc4.ifcshellbasedsurfacemodel', 'ifc4.ifcfacebasedsurfacemodel', 'ifc4.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4.ifctessellateditem', 'ifc4.ifcshellbasedsurfacemodel', 'ifc4.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4.ifcextrudedareasolid', 'ifc4.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4.ifcextrudedareasolidtapered', 'ifc4.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4.ifcsweptareasolid', 'ifc4.ifcsweptdisksolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4.ifcbooleanresult', 'ifc4.ifccsgprimitive3d', 'ifc4.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4.ifccsgsolid', 'ifc4.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4.ifcmappeditem' in typeof(temp)]) else: return None @@ -12072,9 +12079,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -12084,28 +12091,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4.ifcopenshell' in typeof(temp) or 'ifc4.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -12116,7 +12123,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4.ifcpropertysetdefinitionset' in typeof(definition): @@ -12129,7 +12136,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -12137,7 +12144,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -12145,41 +12152,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -12187,31 +12194,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py index ca0e5ef130..afb4197c87 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,1862 +147,1862 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionTypeEnum = enum_namespace() -permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAddressTypeEnum = enum_namespace() -office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', 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) -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) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBSplineCurveForm = enum_namespace() -polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) IfcBSplineSurfaceForm = enum_namespace() -plane_surf = getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) IfcBeamTypeEnum = enum_namespace() -beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBenchmarkEnum = enum_namespace() -greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) IfcBoilerTypeEnum = enum_namespace() -water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -userdefined = getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableFittingTypeEnum = enum_namespace() -connector = getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -userdefined = getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChangeActionEnum = enum_namespace() -nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) IfcChillerTypeEnum = enum_namespace() -aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcColumnTypeEnum = enum_namespace() -column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -userdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) IfcCompressorTypeEnum = enum_namespace() -dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConnectionTypeEnum = enum_namespace() -atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConstraintEnum = enum_namespace() -hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -notdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcControllerTypeEnum = enum_namespace() -floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcControllerTypeEnum, '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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostScheduleTypeEnum = enum_namespace() -budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoveringTypeEnum = enum_namespace() -ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -userdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, '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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -userdefined = getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionSystemEnum = enum_namespace() -airconditioning = getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', 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) -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) -municipalsolidwaste = getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = getattr(IfcDistributionSystemEnum, 'REFRIGERATION', 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) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentConfidentialityEnum = enum_namespace() -public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentStatusEnum = enum_namespace() -draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorPanelOperationEnum = enum_namespace() -swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeEnum = enum_namespace() -door = getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -userdefined = getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', 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_swing_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', 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) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctSilencerTypeEnum, '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) -freestandingwaterheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', 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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, '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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementAssemblyTypeEnum = enum_namespace() -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) -girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTriggerTypeEnum = enum_namespace() -eventrule = getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTypeEnum = enum_namespace() -startevent = getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcExternalSpatialElementTypeEnum = enum_namespace() -external = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', 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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowDirectionEnum = enum_namespace() -source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', 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) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFurnitureTypeEnum = enum_namespace() -chair = getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -userdefined = getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeographicElementTypeEnum = enum_namespace() -terrain = getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -userdefined = getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeometricProjectionEnum = enum_namespace() -graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_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) -elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) IfcGridTypeEnum = enum_namespace() -rectangular = getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHeatExchangerTypeEnum = enum_namespace() -plate = getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -userdefined = getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHumidifierTypeEnum = enum_namespace() -steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHumidifierTypeEnum, '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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcInternalOrExternalEnum = enum_namespace() -internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) IfcInventoryTypeEnum = enum_namespace() -assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKnotType = enum_namespace() -uniform_knots = getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcLightFixtureTypeEnum = enum_namespace() -pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLoadGroupTypeEnum = enum_namespace() -load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLogicalOperatorEnum = enum_namespace() -logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', 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) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMemberTypeEnum = enum_namespace() -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) -stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMemberTypeEnum, '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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcNullStyle = enum_namespace() -null = getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, '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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcPileTypeEnum = enum_namespace() -bored = getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPipeSegmentTypeEnum = enum_namespace() -culvert = getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPlateTypeEnum = enum_namespace() -curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', 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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) IfcProjectionElementTypeEnum = enum_namespace() -userdefined = getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailingTypeEnum = enum_namespace() -handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampFlightTypeEnum = enum_namespace() -straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampTypeEnum = enum_namespace() -straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRecurrenceTypeEnum = enum_namespace() -daily = getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) IfcReferentTypeEnum = enum_namespace() -kilopoint = getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarRoleEnum = enum_namespace() -main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) -stud = getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoleEnum = enum_namespace() -supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) IfcRoofTypeEnum = enum_namespace() -flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSIPrefix = enum_namespace() -exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +atto = express_getattr(IfcSIPrefix, 'ATTO', 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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', 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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) IfcSensorTypeEnum = enum_namespace() -cosensor = getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', 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) -phsensor = getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSequenceEnum = enum_namespace() -start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) IfcSlabTypeEnum = enum_namespace() -floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceTypeEnum = enum_namespace() -space = getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpatialZoneTypeEnum = enum_namespace() -construction = getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', 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) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairFlightTypeEnum = enum_namespace() -straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairTypeEnum = enum_namespace() -straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStateEnum = enum_namespace() -readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -userdefined = getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', 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) -selectorswitch = getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -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) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskTypeEnum = enum_namespace() -attendance = getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = getattr(IfcTaskTypeEnum, 'DISPOSAL', 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) -userdefined = getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonAnchorTypeEnum, '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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTextPath = enum_namespace() -left = getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = getattr(IfcTextPath, 'UP', INDETERMINATE) -down = getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = express_getattr(IfcTextPath, 'DOWN', 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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransformerTypeEnum = enum_namespace() -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) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransitionCode = enum_namespace() -discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) IfcTransitionCurveType = enum_namespace() -biquadraticparabola = getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) -clothoidcurve = getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) -cosinecurve = getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) -cubicparabola = getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) -sinecurve = getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) +biquadraticparabola = express_getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) +blosscurve = express_getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) +clothoidcurve = express_getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) +cosinecurve = express_getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) +cubicparabola = express_getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) +sinecurve = express_getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) IfcTransportElementTypeEnum = enum_namespace() -elevator = getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', 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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWallTypeEnum = enum_namespace() -movable = getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelPositionEnum = enum_namespace() -left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypeEnum = enum_namespace() -window = getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X1', *args, **kwargs) @@ -4407,7 +4414,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -4488,7 +4495,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -4497,7 +4504,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -4506,7 +4513,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -4605,7 +4612,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -4614,7 +4621,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -4623,7 +4630,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -4632,8 +4639,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -4642,8 +4649,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -4652,8 +4659,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -4662,8 +4669,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -4672,8 +4679,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -4682,7 +4689,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x1.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x1.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -4691,8 +4698,8 @@ class IfcAdvancedBrepWithVoids_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 'ifc4x1.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x1.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -4701,7 +4708,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x1.ifcelementarysurface', 'ifc4x1.ifcsweptsurface', 'ifc4x1.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x1.ifcelementarysurface', 'ifc4x1.ifcsweptsurface', 'ifc4x1.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -4710,7 +4717,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x1.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x1.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x1.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x1.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -4719,7 +4726,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x1.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x1.ifcline', 'ifc4x1.ifcconic', 'ifc4x1.ifcpolyline', 'ifc4x1.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x1.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x1.ifcline', 'ifc4x1.ifcconic', 'ifc4x1.ifcpolyline', 'ifc4x1.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -4728,8 +4735,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -4738,8 +4745,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -4748,8 +4755,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -4758,8 +4765,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -4768,8 +4775,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -4778,8 +4785,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -4788,8 +4795,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -4798,8 +4805,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -4808,8 +4815,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -4818,8 +4825,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -4828,8 +4835,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -4838,8 +4845,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -4848,8 +4855,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -4859,8 +4866,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -4869,7 +4876,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x1.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -4879,7 +4886,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x1.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -4889,7 +4896,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x1.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x1.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -4898,8 +4905,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -4908,7 +4915,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -4917,8 +4924,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -4927,7 +4934,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x1.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -4937,9 +4944,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -4949,9 +4956,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -4961,9 +4968,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -4973,9 +4980,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -4985,8 +4992,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -4995,8 +5002,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5005,8 +5012,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5015,8 +5022,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5025,10 +5032,10 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_RefDirIs2D: @@ -5038,8 +5045,8 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIs2D: SCOPE = 'entity' @@ -5048,10 +5055,10 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_LocationIs3D: @@ -5061,7 +5068,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisIs3D: SCOPE = 'entity' @@ -5070,8 +5077,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5080,8 +5087,8 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5090,9 +5097,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_AxisAndRefDirProvision: SCOPE = 'entity' @@ -5101,13 +5108,13 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcBSplineCurve_SameDim: @@ -5117,16 +5124,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5136,11 +5143,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5150,26 +5157,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5179,10 +5186,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5191,10 +5198,10 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False class IfcBSplineSurfaceWithKnots_CorrespondingULists: SCOPE = 'entity' @@ -5203,8 +5210,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -5214,16 +5221,16 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -5233,8 +5240,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -5243,8 +5250,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -5253,7 +5260,7 @@ class IfcBeamStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -5262,8 +5269,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_SupportedRasterFormat: SCOPE = 'entity' @@ -5272,7 +5279,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -5281,7 +5288,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBoiler_CorrectPredefinedType: @@ -5291,8 +5298,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -5301,8 +5308,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -5311,8 +5318,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -5321,7 +5328,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x1.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x1.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x1.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -5331,7 +5338,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x1.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -5341,7 +5348,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanResult_SameDim: @@ -5351,9 +5358,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_FirstOperandClosed: SCOPE = 'entity' @@ -5362,8 +5369,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x1.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x1.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -5372,12 +5379,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x1.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x1.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -5386,7 +5393,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -5398,7 +5405,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x1.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x1.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBuildingElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -5407,7 +5414,7 @@ class IfcBuildingElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -5416,8 +5423,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -5426,8 +5433,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -5436,8 +5443,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -5446,7 +5453,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -5455,8 +5462,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -5465,8 +5472,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -5475,8 +5482,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -5485,8 +5492,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -5495,8 +5502,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -5505,8 +5512,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -5515,8 +5522,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -5526,10 +5533,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -5539,9 +5546,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -5551,8 +5558,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -5561,8 +5568,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -5571,8 +5578,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -5581,8 +5588,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -5591,8 +5598,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -5601,8 +5608,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -5611,8 +5618,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -5621,8 +5628,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -5631,8 +5638,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -5641,8 +5648,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -5651,8 +5658,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -5661,8 +5668,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -5671,11 +5678,11 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) def calc_IfcCartesianPointList_Dim(self): @@ -5688,16 +5695,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -5706,7 +5713,7 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -5715,7 +5722,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -5724,10 +5731,10 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcCartesianTransformationOperator2D_U(self): - return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -5736,12 +5743,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -5750,7 +5757,7 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -5759,7 +5766,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -5768,7 +5775,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -5777,12 +5784,12 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, '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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -5791,7 +5798,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -5801,16 +5808,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -5819,8 +5826,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -5829,8 +5836,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -5839,8 +5846,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -5849,8 +5856,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -5859,8 +5866,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -5869,8 +5876,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -5879,8 +5886,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -5889,8 +5896,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -5899,8 +5906,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -5909,8 +5916,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -5919,8 +5926,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -5929,8 +5936,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -5939,7 +5946,7 @@ class IfcColumnStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -5948,8 +5955,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -5958,8 +5965,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5968,8 +5975,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5978,8 +5985,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -5988,7 +5995,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -5998,7 +6005,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6008,7 +6015,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6018,7 +6025,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcCompositeCurve_CurveContinuous: @@ -6028,9 +6035,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6039,17 +6046,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6058,7 +6065,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6071,12 +6078,12 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x1.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6085,8 +6092,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6095,7 +6102,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x1.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6105,8 +6112,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6115,8 +6122,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6125,8 +6132,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -6135,8 +6142,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -6145,8 +6152,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -6155,8 +6162,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -6165,8 +6172,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6175,8 +6182,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6185,8 +6192,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6195,8 +6202,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6205,8 +6212,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6215,8 +6222,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6225,8 +6232,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -6235,8 +6242,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -6245,8 +6252,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6255,8 +6262,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -6265,8 +6272,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6275,8 +6282,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6285,8 +6292,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -6295,8 +6302,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -6305,8 +6312,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6315,8 +6322,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -6325,8 +6332,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -6335,8 +6342,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -6345,8 +6352,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6355,8 +6362,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6365,8 +6372,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -6378,8 +6385,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -6388,8 +6395,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -6398,8 +6405,8 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) @@ -6411,7 +6418,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x1.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x1.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyle_IdentifiableCurveStyle: @@ -6421,9 +6428,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -6433,7 +6440,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -6443,8 +6450,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -6453,8 +6460,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -6463,8 +6470,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6473,8 +6480,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -6483,8 +6490,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -6493,11 +6500,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -6507,11 +6514,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDiscreteAccessory_CorrectPredefinedType: @@ -6521,8 +6528,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -6531,8 +6538,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -6541,8 +6548,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -6551,8 +6558,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -6561,8 +6568,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -6571,8 +6578,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -6581,8 +6588,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectStyleAssigned: @@ -6592,8 +6599,8 @@ class IfcDoor_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -6602,8 +6609,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -6613,8 +6620,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -6624,8 +6631,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -6635,8 +6642,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -6646,7 +6653,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x1.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x1.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -6655,7 +6662,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x1.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x1.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6664,8 +6671,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -6674,7 +6681,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -6683,7 +6690,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6692,8 +6699,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6702,8 +6709,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6712,8 +6719,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6722,8 +6729,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6732,8 +6739,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6742,8 +6749,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -6752,8 +6759,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -6762,8 +6769,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6772,8 +6779,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -6782,9 +6789,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -6796,7 +6803,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -6806,8 +6813,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6816,8 +6823,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6826,8 +6833,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -6836,8 +6843,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -6846,8 +6853,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -6856,8 +6863,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -6866,8 +6873,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -6876,8 +6883,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6886,8 +6893,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -6896,8 +6903,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -6906,8 +6913,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6916,8 +6923,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -6926,8 +6933,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6936,8 +6943,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6946,8 +6953,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -6956,8 +6963,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -6966,8 +6973,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -6976,8 +6983,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -6986,8 +6993,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -6996,8 +7003,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -7006,8 +7013,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -7016,7 +7023,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -7026,8 +7033,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -7036,8 +7043,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -7046,8 +7053,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -7056,8 +7063,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -7066,8 +7073,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7076,8 +7083,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -7086,8 +7093,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7096,8 +7103,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7106,8 +7113,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -7116,8 +7123,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -7126,9 +7133,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -7137,8 +7144,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -7147,9 +7154,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -7158,9 +7165,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -7170,7 +7177,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -7179,7 +7186,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -7188,7 +7195,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x1.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -7201,8 +7208,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -7211,8 +7218,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -7221,8 +7228,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -7231,8 +7238,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -7241,8 +7248,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7251,8 +7258,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: SCOPE = 'entity' @@ -7261,7 +7268,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -7270,7 +7277,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -7279,7 +7286,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x1.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x1.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -7288,7 +7295,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x1.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x1.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -7297,7 +7304,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -7306,8 +7313,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -7316,8 +7323,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -7326,8 +7333,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -7336,8 +7343,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -7346,8 +7353,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -7356,8 +7363,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -7366,8 +7373,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -7376,8 +7383,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFixedReferenceSweptAreaSolid_DirectrixBounded: SCOPE = 'entity' @@ -7386,9 +7393,9 @@ class IfcFixedReferenceSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x1.ifcconic', 'ifc4x1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcFlowInstrument_CorrectPredefinedType: @@ -7398,8 +7405,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -7408,8 +7415,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7418,8 +7425,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -7428,8 +7435,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -7438,8 +7445,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -7448,8 +7455,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -7458,8 +7465,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7468,8 +7475,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7478,8 +7485,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -7488,8 +7495,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -7498,8 +7505,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -7508,8 +7515,8 @@ class IfcFurnitureType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7518,8 +7525,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7528,8 +7535,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7538,8 +7545,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -7548,7 +7555,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x1.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x1.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -7557,8 +7564,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -7567,7 +7574,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x1.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -7577,9 +7584,9 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedtargetview))) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -7588,23 +7595,23 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False def calc_IfcGeometricRepresentationSubContext_WorldCoordinateSystem(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -7613,12 +7620,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGridAxis_WR1: SCOPE = 'entity' @@ -7627,8 +7634,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -7637,9 +7644,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -7652,8 +7659,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -7662,8 +7669,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7672,8 +7679,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -7682,8 +7689,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -7692,8 +7699,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -7702,8 +7709,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -7712,8 +7719,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -7723,8 +7730,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcIShapeProfileDef_ValidFilletRadius: @@ -7734,11 +7741,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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 IfcIndexedPolyCurve_Consecutive: @@ -7748,7 +7755,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (sizeof(segments) == 0 or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -7758,8 +7765,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7768,8 +7775,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7778,8 +7785,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -7788,7 +7795,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -7797,7 +7804,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -7806,8 +7813,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -7816,8 +7823,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -7826,8 +7833,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -7836,9 +7843,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -7848,8 +7855,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7858,8 +7865,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -7868,8 +7875,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -7878,8 +7885,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -7888,8 +7895,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -7898,8 +7905,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -7908,8 +7915,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -7918,8 +7925,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -7928,9 +7935,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -7939,8 +7946,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @@ -7950,7 +7957,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x1.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -7960,7 +7967,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -7973,7 +7980,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -7983,8 +7990,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -7993,8 +8000,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8003,8 +8010,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -8013,8 +8020,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8023,8 +8030,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8033,8 +8040,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -8043,8 +8050,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -8053,8 +8060,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -8063,7 +8070,7 @@ class IfcMemberStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -8072,8 +8079,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -8085,8 +8092,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -8095,8 +8102,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -8105,8 +8112,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -8115,7 +8122,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -8124,7 +8131,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -8134,8 +8141,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -8144,8 +8151,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -8154,8 +8161,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -8164,8 +8171,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -8174,18 +8181,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x1.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -8194,8 +8201,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -8204,8 +8211,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -8214,8 +8221,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -8224,9 +8231,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -8244,8 +8251,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -8254,9 +8261,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -8266,9 +8273,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -8278,7 +8285,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -8288,7 +8295,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -8298,8 +8305,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -8308,8 +8315,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -8318,8 +8325,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -8328,8 +8335,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8338,8 +8345,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8348,8 +8355,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -8358,8 +8365,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -8368,8 +8375,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8378,8 +8385,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -8388,7 +8395,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -8398,7 +8405,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -8408,7 +8415,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_SizeOfPixelList: @@ -8418,9 +8425,9 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_getattr(self, 'Pixel', INDETERMINATE) assert (sizeof(pixel) == width * height) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -8430,12 +8437,12 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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 def calc_IfcPlacement_Dim(self): - location = getattr(self, 'Location', INDETERMINATE) - return getattr(location, 'Dim', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -8444,8 +8451,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -8454,8 +8461,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -8464,7 +8471,7 @@ class IfcPlateStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -8473,16 +8480,16 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_AllPointsSameDim: SCOPE = 'entity' @@ -8491,8 +8498,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -8501,8 +8508,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -8511,7 +8518,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x1.ifcpolyline', 'ifc4x1.ifccompositecurve']) == 1) is not False class IfcPolyline_SameDim: @@ -8521,8 +8528,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPositioningElement_HasPlacement: SCOPE = 'entity' @@ -8531,7 +8538,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -8540,13 +8547,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -8556,7 +8563,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x1.ifcshaperepresentation', 'ifc4x1.ifcgeometricrepresentationitem', 'ifc4x1.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -8566,7 +8573,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x1.ifcgeometricrepresentationitem', 'ifc4x1.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_HasName: @@ -8576,7 +8583,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedure_CorrectPredefinedType: SCOPE = 'entity' @@ -8585,8 +8592,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8595,8 +8602,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -8605,9 +8612,9 @@ class IfcProduct_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 'ifc4x1.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x1.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -8616,7 +8623,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x1.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_HasName: @@ -8626,7 +8633,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_CorrectContext: SCOPE = 'entity' @@ -8635,7 +8642,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x1.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x1.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -8644,7 +8651,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -8653,8 +8660,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: SCOPE = 'entity' @@ -8663,8 +8670,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -8674,8 +8681,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: @@ -8685,8 +8692,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -8696,8 +8703,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -8707,9 +8714,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -8718,7 +8725,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -8727,7 +8734,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -8736,7 +8743,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -8745,7 +8752,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -8755,7 +8762,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -8764,7 +8771,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -8774,8 +8781,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -8785,8 +8792,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -8795,8 +8802,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -8805,8 +8812,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8815,8 +8822,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -8825,8 +8832,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -8835,8 +8842,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -8845,8 +8852,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8855,8 +8862,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProxy_WR1: SCOPE = 'entity' @@ -8865,7 +8872,7 @@ class IfcProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -8874,8 +8881,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -8884,8 +8891,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -8894,8 +8901,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -8904,7 +8911,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -8913,7 +8920,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -8923,7 +8930,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0.0) is not False class IfcQuantityLength_WR21: @@ -8933,7 +8940,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -8942,7 +8949,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -8952,7 +8959,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -8961,7 +8968,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -8971,7 +8978,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -8980,7 +8987,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -8990,7 +8997,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -8999,7 +9006,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRailing_CorrectPredefinedType: @@ -9009,8 +9016,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -9019,8 +9026,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9029,8 +9036,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -9039,8 +9046,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -9049,8 +9056,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -9059,8 +9066,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -9069,8 +9076,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -9079,8 +9086,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -9089,8 +9096,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -9099,8 +9106,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -9112,8 +9119,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -9122,8 +9129,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -9135,9 +9142,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidWallThickness: @@ -9147,8 +9154,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangleHollowProfileDef_ValidInnerRadius: SCOPE = 'entity' @@ -9157,9 +9164,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -9168,8 +9175,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -9178,8 +9185,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -9189,8 +9196,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -9200,10 +9207,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x1.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x1.ifcplane' in typeof(basissurface)) or 'ifc4x1.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -9213,9 +9220,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcingBar_CorrectPredefinedType: @@ -9225,8 +9232,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -9235,8 +9242,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_CorrectPredefinedType: SCOPE = 'entity' @@ -9245,8 +9252,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -9255,8 +9262,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMesh_CorrectPredefinedType: @@ -9266,8 +9273,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -9276,8 +9283,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_CorrectPredefinedType: SCOPE = 'entity' @@ -9286,8 +9293,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -9296,8 +9303,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcRelAggregates_NoSelfReference: @@ -9307,8 +9314,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssigns_WR1: @@ -9318,8 +9325,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -9329,8 +9336,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -9339,8 +9346,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -9349,8 +9356,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -9359,8 +9366,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -9369,8 +9376,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -9379,8 +9386,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -9389,7 +9396,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x1.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x1.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x1.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x1.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -9398,7 +9405,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x1.ifcelement', 'ifc4x1.ifcelementtype', 'ifc4x1.ifcwindowstyle', 'ifc4x1.ifcdoorstyle', 'ifc4x1.ifcstructuralmember', 'ifc4x1.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x1.ifcelement', 'ifc4x1.ifcelementtype', 'ifc4x1.ifcwindowstyle', 'ifc4x1.ifcdoorstyle', 'ifc4x1.ifcstructuralmember', 'ifc4x1.ifcport']) == 0]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -9407,8 +9414,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @@ -9418,7 +9425,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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 IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -9428,7 +9435,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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 IfcRelConnectsPorts_NoSelfReference: @@ -9438,8 +9445,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -9449,7 +9456,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x1.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -9459,8 +9466,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -9470,7 +9477,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x1.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x1.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NotSelfReference: SCOPE = 'entity' @@ -9479,8 +9486,8 @@ class IfcRelInterferesElements_NotSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -9490,8 +9497,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -9501,7 +9508,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x1.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x1.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -9511,8 +9518,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -9522,9 +9529,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -9533,9 +9540,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x1.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x1.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x1.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x1.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x1.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x1.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -9544,7 +9551,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -9554,7 +9561,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x1.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisStartInXY: @@ -9564,8 +9571,8 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: SCOPE = 'entity' @@ -9574,12 +9581,12 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', 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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -9588,7 +9595,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -9597,8 +9604,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -9607,8 +9614,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -9617,8 +9624,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -9627,11 +9634,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSiUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSiUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9640,8 +9647,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9650,8 +9657,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9660,8 +9667,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -9670,7 +9677,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -9679,7 +9686,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -9688,8 +9695,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -9698,8 +9705,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -9708,7 +9715,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -9718,8 +9725,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -9729,8 +9736,8 @@ class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @staticmethod def __call__(self): - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) - assert (sizeof([temp for temp in crosssectionpositions if exists(getattr(temp, 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(temp, 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -9739,8 +9746,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_ConsistentProfileTypes: @@ -9750,8 +9757,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_SpineCurveDim: SCOPE = 'entity' @@ -9760,8 +9767,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -9773,8 +9780,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -9783,8 +9790,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -9793,8 +9800,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9803,8 +9810,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9813,8 +9820,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9823,8 +9830,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -9833,8 +9840,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -9843,7 +9850,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x1.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x1.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -9852,7 +9859,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x1.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x1.ifcvertexpoint', 'ifc4x1.ifcedgecurve', 'ifc4x1.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False class IfcShapeRepresentation_HasRepresentationType: @@ -9862,7 +9869,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -9871,7 +9878,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -9880,7 +9887,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): return 3 @@ -9892,8 +9899,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -9902,8 +9909,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabElementedCase_HasDecomposition: SCOPE = 'entity' @@ -9912,7 +9919,7 @@ class IfcSlabElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcSlabStandardCase_HasMaterialLayerSetusage: SCOPE = 'entity' @@ -9921,7 +9928,7 @@ class IfcSlabStandardCase_HasMaterialLayerSetusage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -9930,8 +9937,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9940,8 +9947,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9950,8 +9957,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9960,8 +9967,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -9973,8 +9980,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -9983,8 +9990,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -9993,8 +10000,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -10003,8 +10010,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -10013,8 +10020,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10023,8 +10030,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -10033,7 +10040,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x1.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x1.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x1.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x1.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -10042,8 +10049,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -10052,8 +10059,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -10062,8 +10069,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -10072,8 +10079,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -10082,8 +10089,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -10092,8 +10099,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -10102,8 +10109,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -10112,8 +10119,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10122,8 +10129,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10132,8 +10139,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10142,8 +10149,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -10152,8 +10159,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_HasObjectType: SCOPE = 'entity' @@ -10162,8 +10169,8 @@ class IfcStructuralAnalysisModel_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -10172,8 +10179,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -10182,8 +10189,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -10192,8 +10199,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -10202,8 +10209,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -10212,8 +10219,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -10222,8 +10229,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -10232,7 +10239,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x1.ifcstructuralloadlinearforce', 'ifc4x1.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x1.ifcstructuralloadlinearforce', 'ifc4x1.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -10241,7 +10248,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -10250,7 +10257,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -10259,8 +10266,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -10270,10 +10277,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -10282,7 +10289,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x1.ifcstructuralloadplanarforce', 'ifc4x1.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x1.ifcstructuralloadplanarforce', 'ifc4x1.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -10291,7 +10298,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -10300,7 +10307,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x1.ifcstructuralloadsingleforce', 'ifc4x1.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x1.ifcstructuralloadsingleforce', 'ifc4x1.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -10309,7 +10316,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x1.ifcstructuralloadsingleforce', 'ifc4x1.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x1.ifcstructuralloadsingleforce', 'ifc4x1.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -10318,8 +10325,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -10328,8 +10335,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -10338,8 +10345,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -10348,8 +10355,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -10358,8 +10365,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -10368,7 +10375,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x1.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -10378,7 +10385,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x1.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x1.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -10387,8 +10394,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10397,8 +10404,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -10410,8 +10417,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -10420,7 +10427,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x1.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -10433,9 +10440,9 @@ class IfcSurfaceCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x1.ifcconic', 'ifc4x1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSurfaceFeature_HasObjectType: @@ -10445,8 +10452,8 @@ class IfcSurfaceFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -10455,17 +10462,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: SCOPE = 'entity' @@ -10474,9 +10481,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceReinforcementArea_NonnegativeArea1: @@ -10486,7 +10493,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -10496,7 +10503,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -10506,7 +10513,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceStyle_MaxOneShading: @@ -10516,7 +10523,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -10525,7 +10532,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -10534,7 +10541,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -10543,7 +10550,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneExtDefined: SCOPE = 'entity' @@ -10552,7 +10559,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x1.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -10561,8 +10568,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixDim: SCOPE = 'entity' @@ -10571,8 +10578,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -10581,8 +10588,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolid_DirectrixBounded: @@ -10592,9 +10599,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x1.ifcconic', 'ifc4x1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -10604,8 +10611,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -10614,7 +10621,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x1.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x1.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x1.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x1.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -10623,8 +10630,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10633,8 +10640,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10643,8 +10650,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10653,8 +10660,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10663,8 +10670,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -10673,8 +10680,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -10683,8 +10690,8 @@ class IfcSystemFurnitureElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -10693,8 +10700,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -10704,8 +10711,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -10715,8 +10722,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -10725,20 +10732,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -10747,8 +10754,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -10757,8 +10764,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -10767,8 +10774,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -10777,7 +10784,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -10786,8 +10793,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -10796,8 +10803,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -10806,12 +10813,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -10821,8 +10828,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -10831,8 +10838,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -10841,8 +10848,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -10851,8 +10858,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -10861,8 +10868,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -10871,8 +10878,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -10884,7 +10891,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x1.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -10894,7 +10901,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x1.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x1.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -10903,7 +10910,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x1.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x1.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -10912,7 +10919,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -10921,7 +10928,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -10930,8 +10937,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTransformer_CorrectPredefinedType: @@ -10941,8 +10948,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -10951,8 +10958,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctranformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctranformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -10961,8 +10968,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10971,8 +10978,8 @@ class IfcTransportElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -10981,8 +10988,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -10991,11 +10998,11 @@ class IfcTransportElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -11005,7 +11012,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: SCOPE = 'entity' @@ -11014,7 +11021,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -11024,7 +11031,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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 IfcTrimmedCurve_NoTrimOfBoundedCurves: @@ -11034,7 +11041,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x1.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTubeBundle_CorrectPredefinedType: @@ -11044,8 +11051,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -11054,8 +11061,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -11064,8 +11071,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -11074,7 +11081,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -11083,7 +11090,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -11093,7 +11100,7 @@ class IfcTypeProduct_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 'ifc4x1.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x1.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -11102,8 +11109,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -11113,8 +11120,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -11124,7 +11131,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -11134,8 +11141,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -11144,8 +11151,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -11154,8 +11161,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -11164,8 +11171,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -11174,8 +11181,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -11184,8 +11191,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -11194,8 +11201,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -11204,8 +11211,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -11214,8 +11221,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -11224,12 +11231,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -11238,8 +11245,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -11248,8 +11255,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11258,8 +11265,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVoidingFeature_HasObjectType: SCOPE = 'entity' @@ -11268,8 +11275,8 @@ class IfcVoidingFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -11278,8 +11285,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -11288,8 +11295,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallElementedCase_HasDecomposition: SCOPE = 'entity' @@ -11298,7 +11305,7 @@ class IfcWallElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -11307,7 +11314,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x1.ifcrelassociates.relatedobjects') if 'ifc4x1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x1.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -11316,8 +11323,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11326,8 +11333,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11336,8 +11343,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11346,8 +11353,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectStyleAssigned: SCOPE = 'entity' @@ -11356,8 +11363,8 @@ class IfcWindow_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x1.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -11366,8 +11373,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -11377,8 +11384,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -11388,8 +11395,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -11399,7 +11406,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x1.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x1.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -11408,7 +11415,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x1.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x1.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x1.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -11417,8 +11424,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -11427,8 +11434,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -11437,8 +11444,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -11447,8 +11454,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -11457,8 +11464,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -11468,19 +11475,19 @@ class IfcZone_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 ('ifc4x1.ifczone' in typeof(temp) or 'ifc4x1.ifcspace' in typeof(temp) or 'ifc4x1.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x1.ifczone' in typeof(temp) or 'ifc4x1.ifcspace' in typeof(temp) or 'ifc4x1.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -11490,11 +11497,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -11508,13 +11515,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -11532,7 +11539,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -11569,11 +11576,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -11753,7 +11760,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x1.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x1.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -11764,27 +11771,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x1.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x1.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x1.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x1.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x1.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x1.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x1.ifcproject' in typeof(temp)]) return count == 0 else: @@ -11796,26 +11803,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x1.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x1.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x1.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x1.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x1.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x1.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 'ifc4x1.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) + if 'ifc4x1.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x1.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -11824,17 +11831,17 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x1.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x1.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x1.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x1.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x1.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x1.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x1.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x1.ifcoffsetcurve3d' in typeof(curve): @@ -11848,13 +11855,13 @@ def IfcCurveDim(curve): if 'ifc4x1.ifcpcurve' in typeof(curve): return 3 if 'ifc4x1.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -11862,13 +11869,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSiUnit(n): @@ -11938,15 +11945,15 @@ def IfcDimensionsForSiUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -11955,36 +11962,36 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x1.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x1.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x1.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcListToArray(lis, low, u): @@ -12001,9 +12008,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -12021,10 +12028,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -12035,25 +12042,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x1.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x1.ifcvector' in typeof(arg): vec.Orientation = v @@ -12065,18 +12072,18 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointListDim(pointlist): @@ -12087,32 +12094,32 @@ def IfcPointListDim(pointlist): 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -12133,15 +12140,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x1.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -12157,71 +12164,71 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x1.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x1.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x1.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x1.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': - count = sizeof([temp for temp in items if 'ifc4x1.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x1.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x1.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x1.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x1.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': - count = sizeof([temp for temp in items if 'ifc4x1.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x1.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x1.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x1.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x1.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x1.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x1.ifcpoint', 'ifc4x1.ifccurve', 'ifc4x1.ifcgeometriccurveset', 'ifc4x1.ifcannotationfillarea', 'ifc4x1.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x1.ifcgeometricset' in typeof(temp) or 'ifc4x1.ifcpoint' in typeof(temp) or 'ifc4x1.ifccurve' in typeof(temp) or ('ifc4x1.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x1.ifcgeometriccurveset' in typeof(temp) or 'ifc4x1.ifcgeometricset' in typeof(temp) or 'ifc4x1.ifcpoint' in typeof(temp) or ('ifc4x1.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x1.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 'ifc4x1.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x1.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x1.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x1.ifctessellateditem', 'ifc4x1.ifcshellbasedsurfacemodel', 'ifc4x1.ifcfacebasedsurfacemodel', 'ifc4x1.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x1.ifctessellateditem', 'ifc4x1.ifcshellbasedsurfacemodel', 'ifc4x1.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x1.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x1.ifcextrudedareasolid', 'ifc4x1.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x1.ifcextrudedareasolidtapered', 'ifc4x1.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x1.ifcsweptareasolid', 'ifc4x1.ifcsweptdisksolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x1.ifcbooleanresult', 'ifc4x1.ifccsgprimitive3d', 'ifc4x1.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x1.ifccsgsolid', 'ifc4x1.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x1.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x1.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x1.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x1.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x1.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x1.ifcmappeditem' in typeof(temp)]) else: return None @@ -12229,9 +12236,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -12241,28 +12248,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x1.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x1.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x1.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x1.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x1.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x1.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x1.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x1.ifcopenshell' in typeof(temp) or 'ifc4x1.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -12273,7 +12280,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x1.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x1.ifcpropertysetdefinitionset' in typeof(definition): @@ -12286,7 +12293,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -12294,7 +12301,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x1.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -12302,41 +12309,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x1.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x1.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -12344,31 +12351,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x1.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x1.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py index 4c0a82ba74..9ea3753faf 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,1968 +147,1968 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionTypeEnum = enum_namespace() -permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAddressTypeEnum = enum_namespace() -office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', 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) -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) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBSplineCurveForm = enum_namespace() -polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) IfcBSplineSurfaceForm = enum_namespace() -plane_surf = getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) IfcBeamTypeEnum = enum_namespace() -beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) +guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) +guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) +free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeEnum = enum_namespace() -cylindrical = getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBenchmarkEnum = enum_namespace() -greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) IfcBoilerTypeEnum = enum_namespace() -water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', 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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -userdefined = getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -reinforcing = getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) +prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableFittingTypeEnum = enum_namespace() -connector = getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -userdefined = getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCaissonFoundationTypeEnum = enum_namespace() -well = getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChangeActionEnum = enum_namespace() -nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) IfcChillerTypeEnum = enum_namespace() -aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcColumnTypeEnum = enum_namespace() -column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -userdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) IfcCompressorTypeEnum = enum_namespace() -dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConnectionTypeEnum = enum_namespace() -atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConstraintEnum = enum_namespace() -hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -notdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcControllerTypeEnum = enum_namespace() -floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcControllerTypeEnum, '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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostScheduleTypeEnum = enum_namespace() -budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoveringTypeEnum = enum_namespace() -ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -userdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, '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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -userdefined = getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionSystemEnum = enum_namespace() -airconditioning = getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', 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) -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) -municipalsolidwaste = getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = getattr(IfcDistributionSystemEnum, 'REFRIGERATION', 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) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentConfidentialityEnum = enum_namespace() -public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentStatusEnum = enum_namespace() -draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorPanelOperationEnum = enum_namespace() -swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeEnum = enum_namespace() -door = getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -userdefined = getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', 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_swing_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', 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) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctSilencerTypeEnum, '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) -freestandingwaterheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', 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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, '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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementAssemblyTypeEnum = enum_namespace() -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) -girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTriggerTypeEnum = enum_namespace() -eventrule = getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTypeEnum = enum_namespace() -startevent = getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcExternalSpatialElementTypeEnum = enum_namespace() -external = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', 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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowDirectionEnum = enum_namespace() -source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', 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) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFurnitureTypeEnum = enum_namespace() -chair = getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -userdefined = getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeographicElementTypeEnum = enum_namespace() -terrain = getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeometricProjectionEnum = enum_namespace() -graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_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) -elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) IfcGridTypeEnum = enum_namespace() -rectangular = getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHeatExchangerTypeEnum = enum_namespace() -plate = getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -userdefined = getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHumidifierTypeEnum = enum_namespace() -steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHumidifierTypeEnum, '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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcInternalOrExternalEnum = enum_namespace() -internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) IfcInventoryTypeEnum = enum_namespace() -assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKnotType = enum_namespace() -uniform_knots = getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcLightFixtureTypeEnum = enum_namespace() -pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLoadGroupTypeEnum = enum_namespace() -load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLogicalOperatorEnum = enum_namespace() -logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -userdefined = getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMemberTypeEnum = enum_namespace() -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) -stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMemberTypeEnum, '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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcNullStyle = enum_namespace() -null = getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, '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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcPileTypeEnum = enum_namespace() -bored = getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPipeSegmentTypeEnum = enum_namespace() -culvert = getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPlateTypeEnum = enum_namespace() -curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', 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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailingTypeEnum = enum_namespace() -handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampFlightTypeEnum = enum_namespace() -straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampTypeEnum = enum_namespace() -straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRecurrenceTypeEnum = enum_namespace() -daily = getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) IfcReferentTypeEnum = enum_namespace() -kilopoint = getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarRoleEnum = enum_namespace() -main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) -stud = getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoleEnum = enum_namespace() -supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) IfcRoofTypeEnum = enum_namespace() -flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSIPrefix = enum_namespace() -exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +atto = express_getattr(IfcSIPrefix, 'ATTO', 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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', 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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) IfcSensorTypeEnum = enum_namespace() -cosensor = getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', 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) -phsensor = getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSequenceEnum = enum_namespace() -start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) IfcSlabTypeEnum = enum_namespace() -floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceTypeEnum = enum_namespace() -space = getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpatialZoneTypeEnum = enum_namespace() -construction = getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', 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) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairFlightTypeEnum = enum_namespace() -straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairTypeEnum = enum_namespace() -straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStateEnum = enum_namespace() -readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -userdefined = getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', 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) -selectorswitch = getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -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) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskTypeEnum = enum_namespace() -attendance = getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = getattr(IfcTaskTypeEnum, 'DISPOSAL', 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) -userdefined = getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTendonConduitTypeEnum = enum_namespace() -duct = getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTextPath = enum_namespace() -left = getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = getattr(IfcTextPath, 'UP', INDETERMINATE) -down = getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = express_getattr(IfcTextPath, 'DOWN', 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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransformerTypeEnum = enum_namespace() -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) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransitionCode = enum_namespace() -discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) IfcTransitionCurveType = enum_namespace() -biquadraticparabola = getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) -clothoidcurve = getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) -cosinecurve = getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) -cubicparabola = getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) -sinecurve = getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) +biquadraticparabola = express_getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) +blosscurve = express_getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) +clothoidcurve = express_getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) +cosinecurve = express_getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) +cubicparabola = express_getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) +sinecurve = express_getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) IfcTransportElementTypeEnum = enum_namespace() -elevator = getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', 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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWallTypeEnum = enum_namespace() -movable = getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelPositionEnum = enum_namespace() -left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypeEnum = enum_namespace() -window = getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X2', *args, **kwargs) @@ -4558,7 +4565,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -4639,7 +4646,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -4648,7 +4655,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -4657,7 +4664,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -4756,7 +4763,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -4765,7 +4772,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -4774,7 +4781,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -4783,8 +4790,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -4793,8 +4800,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -4803,8 +4810,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -4813,8 +4820,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -4823,8 +4830,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -4833,7 +4840,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x2.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x2.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -4842,8 +4849,8 @@ class IfcAdvancedBrepWithVoids_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 'ifc4x2.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x2.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -4852,7 +4859,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x2.ifcelementarysurface', 'ifc4x2.ifcsweptsurface', 'ifc4x2.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x2.ifcelementarysurface', 'ifc4x2.ifcsweptsurface', 'ifc4x2.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -4861,7 +4868,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x2.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x2.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x2.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x2.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -4870,7 +4877,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x2.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x2.ifcline', 'ifc4x2.ifcconic', 'ifc4x2.ifcpolyline', 'ifc4x2.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x2.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x2.ifcline', 'ifc4x2.ifcconic', 'ifc4x2.ifcpolyline', 'ifc4x2.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -4879,8 +4886,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -4889,8 +4896,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -4899,8 +4906,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -4909,8 +4916,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -4919,8 +4926,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -4929,8 +4936,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -4939,8 +4946,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -4949,8 +4956,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -4959,8 +4966,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -4969,8 +4976,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -4979,8 +4986,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -4989,8 +4996,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -4999,8 +5006,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5010,8 +5017,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5020,7 +5027,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x2.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5030,7 +5037,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x2.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5040,7 +5047,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x2.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x2.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5049,8 +5056,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5059,7 +5066,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5068,8 +5075,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5078,7 +5085,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x2.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5088,9 +5095,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5100,9 +5107,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -5112,9 +5119,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5124,9 +5131,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5136,8 +5143,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5146,8 +5153,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5156,8 +5163,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5166,8 +5173,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5176,10 +5183,10 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_RefDirIs2D: @@ -5189,8 +5196,8 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIs2D: SCOPE = 'entity' @@ -5199,10 +5206,10 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_LocationIs3D: @@ -5212,7 +5219,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisIs3D: SCOPE = 'entity' @@ -5221,8 +5228,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5231,8 +5238,8 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5241,9 +5248,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_AxisAndRefDirProvision: SCOPE = 'entity' @@ -5252,13 +5259,13 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcBSplineCurve_SameDim: @@ -5268,16 +5275,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5287,11 +5294,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5301,26 +5308,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5330,10 +5337,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5342,10 +5349,10 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False class IfcBSplineSurfaceWithKnots_CorrespondingULists: SCOPE = 'entity' @@ -5354,8 +5361,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -5365,16 +5372,16 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -5384,8 +5391,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -5394,8 +5401,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -5404,7 +5411,7 @@ class IfcBeamStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -5413,8 +5420,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -5423,8 +5430,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -5433,8 +5440,8 @@ class IfcBearing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -5443,8 +5450,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_SupportedRasterFormat: SCOPE = 'entity' @@ -5453,7 +5460,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -5462,7 +5469,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBoiler_CorrectPredefinedType: @@ -5472,8 +5479,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -5482,8 +5489,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -5492,8 +5499,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -5502,7 +5509,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x2.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x2.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x2.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -5512,7 +5519,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x2.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -5522,7 +5529,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanResult_SameDim: @@ -5532,9 +5539,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_FirstOperandClosed: SCOPE = 'entity' @@ -5543,8 +5550,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x2.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x2.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -5553,12 +5560,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x2.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x2.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -5567,7 +5574,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -5579,7 +5586,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x2.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x2.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBuildingElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -5588,7 +5595,7 @@ class IfcBuildingElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -5597,8 +5604,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -5607,8 +5614,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -5617,8 +5624,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -5627,7 +5634,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -5636,8 +5643,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -5646,8 +5653,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -5656,8 +5663,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -5666,8 +5673,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -5676,8 +5683,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -5686,8 +5693,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -5696,8 +5703,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -5707,10 +5714,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -5720,9 +5727,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -5732,8 +5739,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -5742,8 +5749,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -5752,8 +5759,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -5762,8 +5769,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -5772,8 +5779,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -5782,8 +5789,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -5792,8 +5799,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -5802,8 +5809,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -5812,8 +5819,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -5822,8 +5829,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -5832,8 +5839,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -5842,8 +5849,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -5852,8 +5859,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -5862,8 +5869,8 @@ class IfcCaissonFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -5872,8 +5879,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -5882,11 +5889,11 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) def calc_IfcCartesianPointList_Dim(self): @@ -5899,16 +5906,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -5917,7 +5924,7 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -5926,7 +5933,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -5935,10 +5942,10 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcCartesianTransformationOperator2D_U(self): - return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -5947,12 +5954,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -5961,7 +5968,7 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -5970,7 +5977,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -5979,7 +5986,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -5988,12 +5995,12 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, '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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6002,7 +6009,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6012,16 +6019,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6030,8 +6037,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6040,8 +6047,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6050,8 +6057,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6060,8 +6067,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6070,8 +6077,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6080,8 +6087,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6090,8 +6097,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6100,8 +6107,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6110,8 +6117,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6120,8 +6127,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6130,8 +6137,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6140,8 +6147,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -6150,7 +6157,7 @@ class IfcColumnStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6159,8 +6166,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6169,8 +6176,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6179,8 +6186,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6189,8 +6196,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6199,7 +6206,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6209,7 +6216,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6219,7 +6226,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6229,7 +6236,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcCompositeCurve_CurveContinuous: @@ -6239,9 +6246,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6250,17 +6257,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6269,7 +6276,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6282,12 +6289,12 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x2.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6296,8 +6303,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6306,7 +6313,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x2.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6316,8 +6323,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6326,8 +6333,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6336,8 +6343,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -6346,8 +6353,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -6356,8 +6363,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -6366,8 +6373,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -6376,8 +6383,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6386,8 +6393,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6396,8 +6403,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6406,8 +6413,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6416,8 +6423,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6426,8 +6433,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6436,8 +6443,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -6446,8 +6453,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -6456,8 +6463,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6466,8 +6473,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -6476,8 +6483,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6486,8 +6493,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6496,8 +6503,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -6506,8 +6513,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -6516,8 +6523,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6526,8 +6533,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -6536,8 +6543,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -6546,8 +6553,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -6556,8 +6563,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6566,8 +6573,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6576,8 +6583,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -6589,8 +6596,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -6599,8 +6606,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -6609,8 +6616,8 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) @@ -6622,7 +6629,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x2.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x2.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyle_IdentifiableCurveStyle: @@ -6632,9 +6639,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -6644,7 +6651,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -6654,8 +6661,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -6664,8 +6671,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -6674,8 +6681,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6684,8 +6691,8 @@ class IfcDeepFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6694,8 +6701,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -6704,8 +6711,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -6714,11 +6721,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -6728,11 +6735,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDiscreteAccessory_CorrectPredefinedType: @@ -6742,8 +6749,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -6752,8 +6759,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -6762,8 +6769,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -6772,8 +6779,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -6782,8 +6789,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -6792,8 +6799,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -6802,8 +6809,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectStyleAssigned: @@ -6813,8 +6820,8 @@ class IfcDoor_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -6823,8 +6830,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -6834,8 +6841,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -6845,8 +6852,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -6856,8 +6863,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -6867,7 +6874,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x2.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x2.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -6876,7 +6883,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x2.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x2.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6885,8 +6892,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -6895,7 +6902,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -6904,7 +6911,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6913,8 +6920,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6923,8 +6930,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6933,8 +6940,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6943,8 +6950,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6953,8 +6960,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6963,8 +6970,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -6973,8 +6980,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -6983,8 +6990,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6993,8 +7000,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7003,9 +7010,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7017,7 +7024,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7027,8 +7034,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7037,8 +7044,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7047,8 +7054,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7057,8 +7064,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7067,8 +7074,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7077,8 +7084,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7087,8 +7094,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7097,8 +7104,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7107,8 +7114,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7117,8 +7124,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7127,8 +7134,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7137,8 +7144,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -7147,8 +7154,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7157,8 +7164,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7167,8 +7174,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -7177,8 +7184,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -7187,8 +7194,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -7197,8 +7204,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -7207,8 +7214,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -7217,8 +7224,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -7227,8 +7234,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -7237,7 +7244,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -7247,8 +7254,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -7257,8 +7264,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -7267,8 +7274,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -7277,8 +7284,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -7287,8 +7294,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7297,8 +7304,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -7307,8 +7314,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7317,8 +7324,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7327,8 +7334,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -7337,8 +7344,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -7347,9 +7354,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -7358,8 +7365,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -7368,9 +7375,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -7379,9 +7386,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -7391,7 +7398,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -7400,7 +7407,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -7409,7 +7416,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x2.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -7422,8 +7429,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -7432,8 +7439,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -7442,8 +7449,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -7452,8 +7459,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -7462,8 +7469,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7472,8 +7479,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: SCOPE = 'entity' @@ -7482,7 +7489,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -7491,7 +7498,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -7500,7 +7507,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x2.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x2.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -7509,7 +7516,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x2.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x2.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -7518,7 +7525,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -7527,8 +7534,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -7537,8 +7544,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -7547,8 +7554,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -7557,8 +7564,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -7567,8 +7574,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -7577,8 +7584,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -7587,8 +7594,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -7597,8 +7604,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFixedReferenceSweptAreaSolid_DirectrixBounded: SCOPE = 'entity' @@ -7607,9 +7614,9 @@ class IfcFixedReferenceSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x2.ifcconic', 'ifc4x2.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcFlowInstrument_CorrectPredefinedType: @@ -7619,8 +7626,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -7629,8 +7636,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7639,8 +7646,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -7649,8 +7656,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -7659,8 +7666,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -7669,8 +7676,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -7679,8 +7686,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7689,8 +7696,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7699,8 +7706,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -7709,8 +7716,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -7719,8 +7726,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -7729,8 +7736,8 @@ class IfcFurnitureType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7739,8 +7746,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7749,8 +7756,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7759,8 +7766,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -7769,7 +7776,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x2.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x2.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -7778,8 +7785,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -7788,7 +7795,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x2.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -7798,9 +7805,9 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedtargetview))) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -7809,23 +7816,23 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False def calc_IfcGeometricRepresentationSubContext_WorldCoordinateSystem(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -7834,12 +7841,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGridAxis_WR1: SCOPE = 'entity' @@ -7848,8 +7855,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -7858,9 +7865,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -7873,8 +7880,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -7883,8 +7890,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7893,8 +7900,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -7903,8 +7910,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -7913,8 +7920,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -7923,8 +7930,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -7933,8 +7940,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -7944,8 +7951,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcIShapeProfileDef_ValidFilletRadius: @@ -7955,11 +7962,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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 IfcIndexedPolyCurve_Consecutive: @@ -7969,7 +7976,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (sizeof(segments) == 0 or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -7979,8 +7986,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7989,8 +7996,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7999,8 +8006,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8009,7 +8016,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8018,7 +8025,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8027,8 +8034,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8037,8 +8044,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8047,8 +8054,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8057,9 +8064,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8069,8 +8076,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8079,8 +8086,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -8089,8 +8096,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -8099,8 +8106,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -8109,8 +8116,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -8119,8 +8126,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8129,8 +8136,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8139,8 +8146,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -8149,9 +8156,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -8160,8 +8167,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @@ -8171,7 +8178,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x2.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -8181,7 +8188,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -8194,7 +8201,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -8204,8 +8211,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8214,8 +8221,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8224,8 +8231,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -8234,8 +8241,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8244,8 +8251,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8254,8 +8261,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -8264,8 +8271,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -8274,8 +8281,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -8284,7 +8291,7 @@ class IfcMemberStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -8293,8 +8300,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -8306,8 +8313,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -8316,8 +8323,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -8326,8 +8333,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -8336,7 +8343,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -8345,7 +8352,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -8355,8 +8362,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -8365,8 +8372,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -8375,8 +8382,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -8385,8 +8392,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -8395,18 +8402,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x2.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -8415,8 +8422,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -8425,8 +8432,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -8435,8 +8442,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -8445,9 +8452,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -8465,8 +8472,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -8475,9 +8482,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -8487,9 +8494,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -8499,7 +8506,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -8509,7 +8516,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -8519,8 +8526,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -8529,8 +8536,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -8539,8 +8546,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -8549,8 +8556,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8559,8 +8566,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8569,8 +8576,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -8579,8 +8586,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -8589,8 +8596,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8599,8 +8606,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -8609,7 +8616,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -8619,7 +8626,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -8629,7 +8636,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_SizeOfPixelList: @@ -8639,9 +8646,9 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_getattr(self, 'Pixel', INDETERMINATE) assert (sizeof(pixel) == width * height) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -8651,12 +8658,12 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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 def calc_IfcPlacement_Dim(self): - location = getattr(self, 'Location', INDETERMINATE) - return getattr(location, 'Dim', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -8665,8 +8672,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -8675,8 +8682,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -8685,7 +8692,7 @@ class IfcPlateStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -8694,16 +8701,16 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_AllPointsSameDim: SCOPE = 'entity' @@ -8712,8 +8719,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -8722,8 +8729,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -8732,7 +8739,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x2.ifcpolyline', 'ifc4x2.ifccompositecurve']) == 1) is not False class IfcPolyline_SameDim: @@ -8742,8 +8749,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPositioningElement_HasPlacement: SCOPE = 'entity' @@ -8752,7 +8759,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -8761,13 +8768,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -8777,7 +8784,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x2.ifcshaperepresentation', 'ifc4x2.ifcgeometricrepresentationitem', 'ifc4x2.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -8787,7 +8794,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x2.ifcgeometricrepresentationitem', 'ifc4x2.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_HasName: @@ -8797,7 +8804,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedure_CorrectPredefinedType: SCOPE = 'entity' @@ -8806,8 +8813,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8816,8 +8823,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -8826,9 +8833,9 @@ class IfcProduct_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 'ifc4x2.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x2.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -8837,7 +8844,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x2.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_HasName: @@ -8847,7 +8854,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_CorrectContext: SCOPE = 'entity' @@ -8856,7 +8863,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x2.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x2.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -8865,7 +8872,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -8874,8 +8881,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: SCOPE = 'entity' @@ -8884,8 +8891,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -8895,8 +8902,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: @@ -8906,8 +8913,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -8917,8 +8924,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -8928,9 +8935,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -8939,7 +8946,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -8948,7 +8955,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -8957,7 +8964,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -8966,7 +8973,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -8976,7 +8983,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -8985,7 +8992,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -8995,8 +9002,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -9006,8 +9013,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -9016,8 +9023,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9026,8 +9033,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9036,8 +9043,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -9046,8 +9053,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -9056,8 +9063,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -9066,8 +9073,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9076,8 +9083,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProxy_WR1: SCOPE = 'entity' @@ -9086,7 +9093,7 @@ class IfcProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -9095,8 +9102,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -9105,8 +9112,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -9115,8 +9122,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -9125,7 +9132,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -9134,7 +9141,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -9144,7 +9151,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0.0) is not False class IfcQuantityLength_WR21: @@ -9154,7 +9161,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -9163,7 +9170,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -9173,7 +9180,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -9182,7 +9189,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -9192,7 +9199,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -9201,7 +9208,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -9211,7 +9218,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -9220,7 +9227,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRailing_CorrectPredefinedType: @@ -9230,8 +9237,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -9240,8 +9247,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9250,8 +9257,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -9260,8 +9267,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -9270,8 +9277,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -9280,8 +9287,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -9290,8 +9297,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -9300,8 +9307,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -9310,8 +9317,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -9320,8 +9327,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -9333,8 +9340,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -9343,8 +9350,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -9356,9 +9363,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidWallThickness: @@ -9368,8 +9375,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangleHollowProfileDef_ValidInnerRadius: SCOPE = 'entity' @@ -9378,9 +9385,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -9389,8 +9396,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -9399,8 +9406,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -9410,8 +9417,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -9421,10 +9428,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x2.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x2.ifcplane' in typeof(basissurface)) or 'ifc4x2.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -9434,9 +9441,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcingBar_CorrectPredefinedType: @@ -9446,8 +9453,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -9456,8 +9463,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_CorrectPredefinedType: SCOPE = 'entity' @@ -9466,8 +9473,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -9476,8 +9483,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMesh_CorrectPredefinedType: @@ -9487,8 +9494,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -9497,8 +9504,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_CorrectPredefinedType: SCOPE = 'entity' @@ -9507,8 +9514,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -9517,8 +9524,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcRelAggregates_NoSelfReference: @@ -9528,8 +9535,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssigns_WR1: @@ -9539,8 +9546,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -9550,8 +9557,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -9560,8 +9567,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -9570,8 +9577,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -9580,8 +9587,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -9590,8 +9597,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -9600,8 +9607,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -9610,7 +9617,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x2.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x2.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x2.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x2.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -9619,7 +9626,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x2.ifcelement', 'ifc4x2.ifcelementtype', 'ifc4x2.ifcwindowstyle', 'ifc4x2.ifcdoorstyle', 'ifc4x2.ifcstructuralmember', 'ifc4x2.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x2.ifcelement', 'ifc4x2.ifcelementtype', 'ifc4x2.ifcwindowstyle', 'ifc4x2.ifcdoorstyle', 'ifc4x2.ifcstructuralmember', 'ifc4x2.ifcport']) == 0]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -9628,8 +9635,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @@ -9639,7 +9646,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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 IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -9649,7 +9656,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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 IfcRelConnectsPorts_NoSelfReference: @@ -9659,8 +9666,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -9670,7 +9677,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x2.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -9680,8 +9687,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -9691,7 +9698,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x2.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x2.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -9700,8 +9707,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -9711,8 +9718,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -9722,8 +9729,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -9733,7 +9740,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x2.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x2.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -9743,8 +9750,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -9754,9 +9761,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -9765,9 +9772,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x2.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x2.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x2.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x2.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x2.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x2.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -9776,7 +9783,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -9786,7 +9793,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x2.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisStartInXY: @@ -9796,8 +9803,8 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: SCOPE = 'entity' @@ -9806,12 +9813,12 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', 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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -9820,7 +9827,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -9829,8 +9836,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -9839,8 +9846,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -9849,8 +9856,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -9859,11 +9866,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSiUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSiUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9872,8 +9879,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9882,8 +9889,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9892,8 +9899,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -9902,7 +9909,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -9911,7 +9918,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -9920,8 +9927,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -9930,8 +9937,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -9940,7 +9947,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -9950,8 +9957,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -9961,8 +9968,8 @@ class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @staticmethod def __call__(self): - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) - assert (sizeof([temp for temp in crosssectionpositions if exists(getattr(temp, 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(temp, 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -9971,8 +9978,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_ConsistentProfileTypes: @@ -9982,8 +9989,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_SpineCurveDim: SCOPE = 'entity' @@ -9992,8 +9999,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -10005,8 +10012,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -10015,8 +10022,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -10025,8 +10032,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10035,8 +10042,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10045,8 +10052,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10055,8 +10062,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -10065,8 +10072,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -10075,7 +10082,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x2.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x2.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -10084,7 +10091,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x2.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x2.ifcvertexpoint', 'ifc4x2.ifcedgecurve', 'ifc4x2.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False class IfcShapeRepresentation_HasRepresentationType: @@ -10094,7 +10101,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -10103,7 +10110,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -10112,7 +10119,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): return 3 @@ -10124,8 +10131,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -10134,8 +10141,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabElementedCase_HasDecomposition: SCOPE = 'entity' @@ -10144,7 +10151,7 @@ class IfcSlabElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcSlabStandardCase_HasMaterialLayerSetusage: SCOPE = 'entity' @@ -10153,7 +10160,7 @@ class IfcSlabStandardCase_HasMaterialLayerSetusage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -10162,8 +10169,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10172,8 +10179,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10182,8 +10189,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10192,8 +10199,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -10205,8 +10212,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -10215,8 +10222,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -10225,8 +10232,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -10235,8 +10242,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -10245,8 +10252,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10255,8 +10262,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -10265,7 +10272,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x2.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x2.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x2.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x2.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -10274,8 +10281,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -10284,8 +10291,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -10294,8 +10301,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -10304,8 +10311,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -10314,8 +10321,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -10324,8 +10331,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -10334,8 +10341,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -10344,8 +10351,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10354,8 +10361,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10364,8 +10371,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10374,8 +10381,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -10384,8 +10391,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_HasObjectType: SCOPE = 'entity' @@ -10394,8 +10401,8 @@ class IfcStructuralAnalysisModel_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -10404,8 +10411,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -10414,8 +10421,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -10424,8 +10431,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -10434,8 +10441,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -10444,8 +10451,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -10454,8 +10461,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -10464,7 +10471,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x2.ifcstructuralloadlinearforce', 'ifc4x2.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x2.ifcstructuralloadlinearforce', 'ifc4x2.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -10473,7 +10480,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -10482,7 +10489,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -10491,8 +10498,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -10502,10 +10509,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -10514,7 +10521,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x2.ifcstructuralloadplanarforce', 'ifc4x2.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x2.ifcstructuralloadplanarforce', 'ifc4x2.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -10523,7 +10530,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -10532,7 +10539,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x2.ifcstructuralloadsingleforce', 'ifc4x2.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x2.ifcstructuralloadsingleforce', 'ifc4x2.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -10541,7 +10548,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x2.ifcstructuralloadsingleforce', 'ifc4x2.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x2.ifcstructuralloadsingleforce', 'ifc4x2.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -10550,8 +10557,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -10560,8 +10567,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -10570,8 +10577,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -10580,8 +10587,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -10590,8 +10597,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -10600,7 +10607,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x2.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -10610,7 +10617,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x2.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x2.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -10619,8 +10626,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10629,8 +10636,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -10642,8 +10649,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -10652,7 +10659,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x2.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -10665,9 +10672,9 @@ class IfcSurfaceCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x2.ifcconic', 'ifc4x2.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSurfaceFeature_HasObjectType: @@ -10677,8 +10684,8 @@ class IfcSurfaceFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -10687,17 +10694,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: SCOPE = 'entity' @@ -10706,9 +10713,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceReinforcementArea_NonnegativeArea1: @@ -10718,7 +10725,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -10728,7 +10735,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -10738,7 +10745,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceStyle_MaxOneShading: @@ -10748,7 +10755,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -10757,7 +10764,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -10766,7 +10773,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -10775,7 +10782,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneExtDefined: SCOPE = 'entity' @@ -10784,7 +10791,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x2.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -10793,8 +10800,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixDim: SCOPE = 'entity' @@ -10803,8 +10810,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -10813,8 +10820,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolid_DirectrixBounded: @@ -10824,9 +10831,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x2.ifcconic', 'ifc4x2.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -10836,8 +10843,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -10846,7 +10853,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x2.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x2.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x2.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x2.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -10855,8 +10862,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10865,8 +10872,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10875,8 +10882,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10885,8 +10892,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10895,8 +10902,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -10905,8 +10912,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -10915,8 +10922,8 @@ class IfcSystemFurnitureElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -10925,8 +10932,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -10936,8 +10943,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -10947,8 +10954,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -10957,20 +10964,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -10979,8 +10986,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -10989,8 +10996,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -10999,8 +11006,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -11009,7 +11016,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -11018,8 +11025,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -11028,8 +11035,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -11038,12 +11045,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -11053,8 +11060,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -11063,8 +11070,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -11073,8 +11080,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -11083,8 +11090,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11093,8 +11100,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -11103,8 +11110,8 @@ class IfcTendonConduit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -11113,8 +11120,8 @@ class IfcTendonConduit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -11123,8 +11130,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -11133,8 +11140,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -11146,7 +11153,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x2.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -11156,7 +11163,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x2.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x2.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -11165,7 +11172,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x2.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x2.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -11174,7 +11181,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -11183,7 +11190,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -11192,8 +11199,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTransformer_CorrectPredefinedType: @@ -11203,8 +11210,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -11213,8 +11220,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctranformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctranformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -11223,8 +11230,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -11233,8 +11240,8 @@ class IfcTransportElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -11243,8 +11250,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -11253,11 +11260,11 @@ class IfcTransportElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -11267,7 +11274,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: SCOPE = 'entity' @@ -11276,7 +11283,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -11286,7 +11293,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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 IfcTrimmedCurve_NoTrimOfBoundedCurves: @@ -11296,7 +11303,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x2.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTubeBundle_CorrectPredefinedType: @@ -11306,8 +11313,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -11316,8 +11323,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -11326,8 +11333,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -11336,7 +11343,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -11345,7 +11352,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -11355,7 +11362,7 @@ class IfcTypeProduct_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 'ifc4x2.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x2.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -11364,8 +11371,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -11375,8 +11382,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -11386,7 +11393,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -11396,8 +11403,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -11406,8 +11413,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -11416,8 +11423,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -11426,8 +11433,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -11436,8 +11443,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -11446,8 +11453,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -11456,8 +11463,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -11466,8 +11473,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -11476,8 +11483,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -11486,12 +11493,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -11500,8 +11507,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -11510,8 +11517,8 @@ class IfcVibrationDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -11520,8 +11527,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -11530,8 +11537,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -11540,8 +11547,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11550,8 +11557,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVoidingFeature_HasObjectType: SCOPE = 'entity' @@ -11560,8 +11567,8 @@ class IfcVoidingFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -11570,8 +11577,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -11580,8 +11587,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallElementedCase_HasDecomposition: SCOPE = 'entity' @@ -11590,7 +11597,7 @@ class IfcWallElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -11599,7 +11606,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x2.ifcrelassociates.relatedobjects') if 'ifc4x2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x2.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -11608,8 +11615,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11618,8 +11625,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11628,8 +11635,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11638,8 +11645,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectStyleAssigned: SCOPE = 'entity' @@ -11648,8 +11655,8 @@ class IfcWindow_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x2.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -11658,8 +11665,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -11669,8 +11676,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -11680,8 +11687,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -11691,7 +11698,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x2.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x2.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -11700,7 +11707,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x2.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x2.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x2.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -11709,8 +11716,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -11719,8 +11726,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -11729,8 +11736,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -11739,8 +11746,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -11749,8 +11756,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -11760,19 +11767,19 @@ class IfcZone_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 ('ifc4x2.ifczone' in typeof(temp) or 'ifc4x2.ifcspace' in typeof(temp) or 'ifc4x2.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x2.ifczone' in typeof(temp) or 'ifc4x2.ifcspace' in typeof(temp) or 'ifc4x2.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -11782,11 +11789,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -11800,13 +11807,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -11824,7 +11831,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -11861,11 +11868,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -12045,7 +12052,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x2.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x2.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -12056,27 +12063,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x2.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x2.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x2.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x2.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x2.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x2.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x2.ifcproject' in typeof(temp)]) return count == 0 else: @@ -12088,26 +12095,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x2.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x2.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x2.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x2.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x2.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x2.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 'ifc4x2.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) + if 'ifc4x2.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x2.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -12116,17 +12123,17 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x2.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x2.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x2.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x2.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x2.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x2.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x2.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x2.ifcoffsetcurve3d' in typeof(curve): @@ -12140,13 +12147,13 @@ def IfcCurveDim(curve): if 'ifc4x2.ifcpcurve' in typeof(curve): return 3 if 'ifc4x2.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -12154,13 +12161,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSiUnit(n): @@ -12230,15 +12237,15 @@ def IfcDimensionsForSiUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -12247,36 +12254,36 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x2.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x2.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x2.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcListToArray(lis, low, u): @@ -12293,9 +12300,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -12313,10 +12320,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -12327,25 +12334,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x2.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x2.ifcvector' in typeof(arg): vec.Orientation = v @@ -12357,18 +12364,18 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointListDim(pointlist): @@ -12379,32 +12386,32 @@ def IfcPointListDim(pointlist): 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -12425,15 +12432,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x2.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -12449,71 +12456,71 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x2.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x2.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x2.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x2.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': - count = sizeof([temp for temp in items if 'ifc4x2.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x2.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x2.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x2.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x2.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 2]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': - count = sizeof([temp for temp in items if 'ifc4x2.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x2.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x2.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x2.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x2.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x2.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x2.ifcpoint', 'ifc4x2.ifccurve', 'ifc4x2.ifcgeometriccurveset', 'ifc4x2.ifcannotationfillarea', 'ifc4x2.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x2.ifcgeometricset' in typeof(temp) or 'ifc4x2.ifcpoint' in typeof(temp) or 'ifc4x2.ifccurve' in typeof(temp) or ('ifc4x2.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x2.ifcgeometriccurveset' in typeof(temp) or 'ifc4x2.ifcgeometricset' in typeof(temp) or 'ifc4x2.ifcpoint' in typeof(temp) or ('ifc4x2.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x2.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 'ifc4x2.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x2.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x2.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x2.ifctessellateditem', 'ifc4x2.ifcshellbasedsurfacemodel', 'ifc4x2.ifcfacebasedsurfacemodel', 'ifc4x2.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x2.ifctessellateditem', 'ifc4x2.ifcshellbasedsurfacemodel', 'ifc4x2.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x2.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x2.ifcextrudedareasolid', 'ifc4x2.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x2.ifcextrudedareasolidtapered', 'ifc4x2.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x2.ifcsweptareasolid', 'ifc4x2.ifcsweptdisksolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x2.ifcbooleanresult', 'ifc4x2.ifccsgprimitive3d', 'ifc4x2.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x2.ifccsgsolid', 'ifc4x2.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x2.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x2.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x2.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x2.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x2.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x2.ifcmappeditem' in typeof(temp)]) else: return None @@ -12521,9 +12528,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -12533,28 +12540,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x2.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x2.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x2.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x2.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x2.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x2.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x2.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x2.ifcopenshell' in typeof(temp) or 'ifc4x2.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -12565,7 +12572,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x2.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x2.ifcpropertysetdefinitionset' in typeof(definition): @@ -12578,7 +12585,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -12586,7 +12593,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x2.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -12594,41 +12601,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x2.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x2.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -12636,31 +12643,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x2.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x2.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py index 6271263953..9d2f638222 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,2425 +147,2425 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) +railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_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) +blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) +parabolicarc = express_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) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnnotationTypeEnum = enum_namespace() -asbuiltarea = getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -asbuiltpoint = getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -assumedarea = getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -assumedline = getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -assumedpoint = getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -non_physical_signal = getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -superelevationevent = getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -widthevent = getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -userdefined = getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) +asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) +asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) +assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) +assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) +assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) +non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) +superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) +widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) +userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +notdefined = express_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) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +unspecified = express_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) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +unspecified = express_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) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -free_movement = getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -guided_longitudinal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -notdefined = getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) +free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) +guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) +guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeDisplacementEnum, '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) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +notincludes = express_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) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +union = express_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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingSystemTypeEnum = enum_namespace() -erosionprevention = getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -fenestration = getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -prestressing = getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -reinforcing = getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -shading = getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) +outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +railwayline = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE) +railwaytrack = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE) +reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) +shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) +trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) +transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -transition = getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +junction = express_getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +transition = express_getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) +fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) +opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) +stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) +wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) +ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) +linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) +opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) +telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) +transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) +transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) +transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_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) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +notdefined = express_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) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) +bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) +chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) +screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) +userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) +ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) +core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) +filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) +pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) +protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +topping = express_getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_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) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) +elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +filler = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE) +flashing = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE) +insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) +lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) +panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) +pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) +point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) +railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) +railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) +rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) +rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) +soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) +tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) +distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) +monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) +overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_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) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, '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) +boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeOperationEnum = enum_namespace() -double_panel_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) -double_panel_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) -double_panel_lifting_vertical = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', INDETERMINATE) -double_panel_single_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) -double_panel_single_swing_opposite_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_panel_single_swing_opposite_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_panel_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_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_horizontal = getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', 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) +double_panel_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) +double_panel_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) +double_panel_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', INDETERMINATE) +double_panel_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) +double_panel_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_panel_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_panel_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SLIDING', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) +lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) +lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) +revolving_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', INDETERMINATE) +revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) +cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) +dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) +excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) +overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) +pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) +stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) +topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) +trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) +counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) +embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) +slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) +subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) +subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) +transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) +entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) +mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) +signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) +supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) +suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) +trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) +traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) +traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) +belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) +junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) +levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) +segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) +substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) +longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) +region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) +vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_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) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +vegetation = express_getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solid = express_getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE) +void = express_getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE) +water = express_getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE) +userdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_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) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) +crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) +dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) +fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) +userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +notdefined = express_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) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, '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) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_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) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) +userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_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) +barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) +breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) +canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) +drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) +floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) +hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) +jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) +launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) +marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) +navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) +port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) +quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) +revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) +shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) +shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) +shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) +slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) +waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) +waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) +userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) +anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) +approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) +belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) +berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) +chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) +cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) +copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) +core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) +crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) +gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) +gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) +highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) +landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) +leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) +lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) +manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) +navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) +protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) +shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) +storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) +vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) +waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) +weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) +userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) +railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) +basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) +basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) +e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) +gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) +masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) +mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) +mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) +packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) +remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) +remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) +service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) +subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) +userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) +linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) +magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) +mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) +vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) +userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) +buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) +userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, '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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) +rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) +userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +pset_materialdriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +pset_profiledriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +notdefined = express_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) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) +checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) +rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) +rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) +stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayPartTypeEnum = enum_namespace() -dilatationsuperstructure = getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -linesidestructure = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -linesidestructurepart = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -plaintracksuperstructure = getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) -superstructure = getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -trackstructure = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -turnoutsuperstructure = getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) +linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) +linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) +plaintracksuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) +trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) +turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayTypeEnum = enum_namespace() -userdefined = getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_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) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) +intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) +referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +physical = express_getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_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) +dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) +grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) +replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) +rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) +surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) +verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) +bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) +carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) +centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) +centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) +hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) +intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) +layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) +parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) +passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) +pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) +railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) +refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) +roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) +roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) +roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) +roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) +roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) +shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) +sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) +softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) +tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) +trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) +trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) +userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadTypeEnum = enum_namespace() -userdefined = getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +userdefined = express_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) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +tera = express_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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_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) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) +turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) +wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) +mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) +pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) +userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) +mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) +visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) +userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_number = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_weight = express_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) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readwritelocked = express_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) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) +linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) +pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) +rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) +symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +positive = express_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) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_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) +adjustment = express_getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +calibration = express_getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +emergency = express_getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE) +inspection = express_getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +safety = express_getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE) +shutdown = express_getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE) +testing = express_getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE) +troubleshooting = express_getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_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) +blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) +derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) +frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) +half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) +sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) +speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) +trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) +vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) +userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) +combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_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) +craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) +elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) +haulinggear = express_getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_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) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) +combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cargo = express_getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE) +rollingstock = express_getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) +vehicle = express_getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE) +vehicleair = express_getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE) +vehiclemarine = express_getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE) +vehicletracked = express_getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE) +vehiclewheeled = express_getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) +userdefined = express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +boundary = express_getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE) +clearance = express_getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE) +provisionforvoid = express_getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +userdefined = express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +notdefined = express_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) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, '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) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3', *args, **kwargs) @@ -5183,7 +5190,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -5264,7 +5271,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -5273,7 +5280,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -5282,7 +5289,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -5381,7 +5388,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -5390,7 +5397,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -5399,7 +5406,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -5408,8 +5415,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -5418,8 +5425,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -5428,8 +5435,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -5438,8 +5445,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -5448,8 +5455,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -5458,7 +5465,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -5467,8 +5474,8 @@ class IfcAdvancedBrepWithVoids_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.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -5477,7 +5484,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3.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.ifcline', 'ifc4x3.ifcconic', 'ifc4x3.ifcpolyline', 'ifc4x3.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3.ifcline', 'ifc4x3.ifcconic', 'ifc4x3.ifcpolyline', 'ifc4x3.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -5486,7 +5493,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3.ifcelementarysurface', 'ifc4x3.ifcsweptsurface', 'ifc4x3.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3.ifcelementarysurface', 'ifc4x3.ifcsweptsurface', 'ifc4x3.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -5495,7 +5502,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -5504,8 +5511,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -5514,8 +5521,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -5524,8 +5531,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -5534,8 +5541,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -5544,8 +5551,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -5554,8 +5561,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -5564,8 +5571,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -5574,8 +5581,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -5584,8 +5591,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -5594,8 +5601,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -5604,8 +5611,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -5614,8 +5621,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -5624,8 +5631,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5635,8 +5642,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5645,7 +5652,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5655,7 +5662,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5665,7 +5672,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x3.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x3.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5674,8 +5681,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5684,7 +5691,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5693,8 +5700,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5703,7 +5710,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x3.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -5713,9 +5720,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5725,9 +5732,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5737,9 +5744,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5749,9 +5756,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5761,8 +5768,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5771,8 +5778,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5781,8 +5788,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5791,8 +5798,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5801,7 +5808,7 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIsCP: SCOPE = 'entity' @@ -5810,10 +5817,10 @@ class IfcAxis1Placement_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_LocationIs2D: @@ -5823,7 +5830,7 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIsCP: SCOPE = 'entity' @@ -5832,7 +5839,7 @@ class IfcAxis2Placement2D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2Placement2D_RefDirIs2D: SCOPE = 'entity' @@ -5841,11 +5848,11 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_AxisAndRefDirProvision: @@ -5855,8 +5862,8 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False class IfcAxis2Placement3D_AxisIs3D: @@ -5866,8 +5873,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5876,9 +5883,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_LocationIs3D: SCOPE = 'entity' @@ -5887,7 +5894,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_LocationIsCP: SCOPE = 'entity' @@ -5896,7 +5903,7 @@ class IfcAxis2Placement3D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5905,12 +5912,12 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcAxis2PlacementLinear_WR1: @@ -5920,7 +5927,7 @@ class IfcAxis2PlacementLinear_WR1: @staticmethod def __call__(self): - assert ('ifc4x3.ifcpointbydistanceexpression' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3.ifcpointbydistanceexpression' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2PlacementLinear_WR2: SCOPE = 'entity' @@ -5929,9 +5936,9 @@ class IfcAxis2PlacementLinear_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcBSplineCurve_SameDim: SCOPE = 'entity' @@ -5940,16 +5947,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5959,11 +5966,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5973,26 +5980,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_CorrespondingULists: @@ -6002,8 +6009,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -6013,8 +6020,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -6024,10 +6031,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -6036,17 +6043,17 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -6056,8 +6063,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6066,8 +6073,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6076,8 +6083,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -6086,8 +6093,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -6096,8 +6103,8 @@ class IfcBearing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6106,8 +6113,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -6116,7 +6123,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBlobTexture_SupportedRasterFormat: @@ -6126,7 +6133,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBoiler_CorrectPredefinedType: SCOPE = 'entity' @@ -6135,8 +6142,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6145,8 +6152,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6155,8 +6162,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -6165,7 +6172,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x3.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x3.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x3.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -6175,7 +6182,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -6185,7 +6192,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x3.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanResult_FirstOperandClosed: @@ -6195,8 +6202,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x3.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x3.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SameDim: SCOPE = 'entity' @@ -6205,9 +6212,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -6216,12 +6223,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x3.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x3.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -6230,7 +6237,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -6242,7 +6249,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x3.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x3.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBridge_CorrectPredefinedType: SCOPE = 'entity' @@ -6251,8 +6258,8 @@ class IfcBridge_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBridgePart_CorrectPredefinedType: SCOPE = 'entity' @@ -6261,8 +6268,8 @@ class IfcBridgePart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -6271,8 +6278,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -6281,8 +6288,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -6291,8 +6298,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -6301,8 +6308,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -6311,8 +6318,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -6321,7 +6328,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6330,8 +6337,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6340,8 +6347,8 @@ class IfcBuildingSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuiltElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -6350,7 +6357,7 @@ class IfcBuiltElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuiltSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6359,8 +6366,8 @@ class IfcBuiltSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -6369,8 +6376,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -6379,8 +6386,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6389,8 +6396,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -6399,8 +6406,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -6410,10 +6417,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -6423,9 +6430,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -6435,8 +6442,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6445,8 +6452,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6455,8 +6462,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6465,8 +6472,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6475,8 +6482,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6485,8 +6492,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6495,8 +6502,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6505,8 +6512,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6515,8 +6522,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6525,8 +6532,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6535,8 +6542,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6545,8 +6552,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -6555,8 +6562,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6565,8 +6572,8 @@ class IfcCaissonFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -6575,8 +6582,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -6585,11 +6592,11 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) def calc_IfcCartesianPointList_Dim(self): @@ -6602,16 +6609,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -6620,7 +6627,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -6629,7 +6636,7 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -6638,10 +6645,10 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_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) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6650,12 +6657,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -6664,7 +6671,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -6673,7 +6680,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -6682,8 +6689,8 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -6692,11 +6699,11 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6705,7 +6712,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6715,16 +6722,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6733,8 +6740,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6743,8 +6750,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6753,8 +6760,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6763,8 +6770,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6773,8 +6780,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6783,8 +6790,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6793,8 +6800,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6803,8 +6810,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6813,8 +6820,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6823,8 +6830,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6833,8 +6840,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6843,8 +6850,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6853,8 +6860,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6863,8 +6870,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6873,8 +6880,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6883,8 +6890,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6893,7 +6900,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6903,7 +6910,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6913,7 +6920,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6923,7 +6930,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcCompositeCurve_CurveContinuous: @@ -6933,9 +6940,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6944,17 +6951,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6963,7 +6970,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6976,12 +6983,12 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x3.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6990,8 +6997,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -7000,7 +7007,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x3.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -7010,8 +7017,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7020,8 +7027,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7030,8 +7037,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -7040,8 +7047,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -7050,8 +7057,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -7060,8 +7067,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -7070,8 +7077,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7080,8 +7087,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7090,8 +7097,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7100,8 +7107,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7110,8 +7117,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7120,8 +7127,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7130,8 +7137,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -7140,8 +7147,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -7150,8 +7157,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7160,8 +7167,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7170,8 +7177,8 @@ class IfcConveyorSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7180,8 +7187,8 @@ class IfcConveyorSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcconveyorsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcconveyorsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcConveyorSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7190,8 +7197,8 @@ class IfcConveyorSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -7200,8 +7207,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -7210,8 +7217,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -7220,8 +7227,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -7230,8 +7237,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -7240,8 +7247,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7250,8 +7257,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCourse_CorrectPredefinedType: SCOPE = 'entity' @@ -7260,8 +7267,8 @@ class IfcCourse_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCourse_CorrectTypeAssigned: SCOPE = 'entity' @@ -7270,8 +7277,8 @@ class IfcCourse_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccoursetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccoursetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCourseType_CorrectPredefinedType: SCOPE = 'entity' @@ -7280,8 +7287,8 @@ class IfcCourseType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -7290,8 +7297,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -7300,8 +7307,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -7310,8 +7317,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7320,8 +7327,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7330,8 +7337,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -7343,8 +7350,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -7353,8 +7360,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -7363,15 +7370,15 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) def calc_IfcCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCurveStyle_IdentifiableCurveStyle: SCOPE = 'entity' @@ -7380,9 +7387,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyle_MeasureOfWidth: @@ -7392,7 +7399,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x3.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x3.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -7402,7 +7409,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -7412,8 +7419,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -7422,8 +7429,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -7432,8 +7439,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -7442,8 +7449,8 @@ class IfcDeepFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -7452,8 +7459,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -7462,8 +7469,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -7472,11 +7479,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -7486,11 +7493,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @@ -7500,9 +7507,9 @@ class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3.ifcconic', 'ifc4x3.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcDiscreteAccessory_CorrectPredefinedType: @@ -7512,8 +7519,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -7522,8 +7529,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -7532,8 +7539,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7542,8 +7549,8 @@ class IfcDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7552,8 +7559,8 @@ class IfcDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7562,8 +7569,8 @@ class IfcDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7572,8 +7579,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7582,8 +7589,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7592,8 +7599,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -7602,8 +7609,8 @@ class IfcDistributionSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -7612,8 +7619,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectPredefinedType: @@ -7623,8 +7630,8 @@ class IfcDoor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDoor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7633,8 +7640,8 @@ class IfcDoor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -7643,8 +7650,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -7654,8 +7661,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -7665,8 +7672,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -7676,8 +7683,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -7687,7 +7694,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -7696,7 +7703,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7705,8 +7712,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -7715,7 +7722,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -7724,7 +7731,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -7733,8 +7740,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7743,8 +7750,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7753,8 +7760,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7763,8 +7770,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7773,8 +7780,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7783,8 +7790,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -7793,8 +7800,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -7803,8 +7810,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7813,8 +7820,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEarthworksCut_CorrectPredefinedType: SCOPE = 'entity' @@ -7823,8 +7830,8 @@ class IfcEarthworksCut_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEarthworksFill_CorrectPredefinedType: SCOPE = 'entity' @@ -7833,8 +7840,8 @@ class IfcEarthworksFill_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7843,9 +7850,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7857,7 +7864,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7867,8 +7874,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7877,8 +7884,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7887,8 +7894,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7897,8 +7904,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7907,8 +7914,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7917,8 +7924,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7927,8 +7934,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7937,8 +7944,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7947,8 +7954,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7957,8 +7964,8 @@ class IfcElectricFlowTreatmentDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7967,8 +7974,8 @@ class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricflowtreatmentdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricflowtreatmentdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7977,8 +7984,8 @@ class IfcElectricFlowTreatmentDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7987,8 +7994,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7997,8 +8004,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8007,8 +8014,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -8017,8 +8024,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8027,8 +8034,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8037,8 +8044,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -8047,8 +8054,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -8057,8 +8064,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -8067,8 +8074,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -8077,8 +8084,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -8087,8 +8094,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -8097,8 +8104,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -8107,7 +8114,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -8117,8 +8124,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -8127,8 +8134,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -8137,8 +8144,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -8147,8 +8154,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -8157,8 +8164,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8167,8 +8174,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -8177,8 +8184,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -8187,8 +8194,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8197,8 +8204,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -8207,8 +8214,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -8217,9 +8224,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -8228,9 +8235,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -8239,8 +8246,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -8249,9 +8256,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -8261,7 +8268,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -8270,7 +8277,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -8279,7 +8286,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x3.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -8292,8 +8299,8 @@ class IfcFacilityPartCommon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectPredefinedType: SCOPE = 'entity' @@ -8302,8 +8309,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -8312,8 +8319,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -8322,8 +8329,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -8332,8 +8339,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8342,8 +8349,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8352,8 +8359,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElement_NotContained: SCOPE = 'entity' @@ -8362,7 +8369,7 @@ class IfcFeatureElement_NotContained: @staticmethod def __call__(self): - containedinstructure = getattr(self, 'ContainedInStructure', INDETERMINATE) + containedinstructure = express_getattr(self, 'ContainedInStructure', INDETERMINATE) assert (sizeof(containedinstructure) == 0) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: @@ -8372,7 +8379,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -8381,7 +8388,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -8390,7 +8397,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -8399,7 +8406,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -8408,7 +8415,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -8417,8 +8424,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -8427,8 +8434,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -8437,8 +8444,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8447,8 +8454,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8457,8 +8464,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8467,8 +8474,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8477,8 +8484,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8487,8 +8494,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectPredefinedType: SCOPE = 'entity' @@ -8497,8 +8504,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -8507,8 +8514,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8517,8 +8524,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -8527,8 +8534,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8537,8 +8544,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8547,8 +8554,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -8557,8 +8564,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8567,8 +8574,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8577,8 +8584,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -8587,8 +8594,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8597,8 +8604,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8607,8 +8614,8 @@ class IfcFurnitureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -8617,8 +8624,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -8627,8 +8634,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -8637,8 +8644,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -8647,7 +8654,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -8656,8 +8663,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -8666,7 +8673,7 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -8675,7 +8682,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x3.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -8685,25 +8692,25 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -8712,12 +8719,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGeotechnicalStratum_CorrectPredefinedType: SCOPE = 'entity' @@ -8726,8 +8733,8 @@ class IfcGeotechnicalStratum_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False def calc_IfcGradientCurve_RelativeElevation(self): return IfcGradient(self) @@ -8739,8 +8746,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -8749,9 +8756,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -8764,8 +8771,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -8774,8 +8781,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8784,8 +8791,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -8794,8 +8801,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -8804,8 +8811,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -8814,8 +8821,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFilletRadius: SCOPE = 'entity' @@ -8824,11 +8831,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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: @@ -8838,8 +8845,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -8849,8 +8856,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcImpactProtectionDevice_CorrectPredefinedType: @@ -8860,8 +8867,8 @@ class IfcImpactProtectionDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcImpactProtectionDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8870,8 +8877,8 @@ class IfcImpactProtectionDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcimpactprotectiondevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcimpactprotectiondevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcImpactProtectionDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8880,8 +8887,8 @@ class IfcImpactProtectionDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIndexedPolyCurve_Consecutive: SCOPE = 'entity' @@ -8890,7 +8897,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -8900,8 +8907,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8910,8 +8917,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8920,8 +8927,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8930,7 +8937,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8939,7 +8946,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8948,8 +8955,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8958,8 +8965,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8968,8 +8975,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8978,9 +8985,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8990,8 +8997,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9000,8 +9007,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -9010,8 +9017,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -9020,8 +9027,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -9030,8 +9037,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -9040,8 +9047,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -9050,8 +9057,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9060,8 +9067,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -9070,9 +9077,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLiquidTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9081,8 +9088,8 @@ class IfcLiquidTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLiquidTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9091,8 +9098,8 @@ class IfcLiquidTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcliquidterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcliquidterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLiquidTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9101,8 +9108,8 @@ class IfcLiquidTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -9111,8 +9118,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMarineFacility_CorrectPredefinedType: @@ -9122,8 +9129,8 @@ class IfcMarineFacility_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMarinePart_CorrectPredefinedType: SCOPE = 'entity' @@ -9132,8 +9139,8 @@ class IfcMarinePart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: SCOPE = 'entity' @@ -9142,7 +9149,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -9152,7 +9159,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -9165,7 +9172,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -9175,8 +9182,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -9185,8 +9192,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -9195,8 +9202,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9205,8 +9212,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9215,8 +9222,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9225,8 +9232,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -9235,8 +9242,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -9245,8 +9252,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -9255,8 +9262,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -9268,8 +9275,8 @@ class IfcMobileTelecommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -9278,8 +9285,8 @@ class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmobiletelecommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmobiletelecommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9288,8 +9295,8 @@ class IfcMobileTelecommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9298,8 +9305,8 @@ class IfcMooringDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9308,8 +9315,8 @@ class IfcMooringDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmooringdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmooringdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMooringDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9318,8 +9325,8 @@ class IfcMooringDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectPredefinedType: SCOPE = 'entity' @@ -9328,8 +9335,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -9338,8 +9345,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -9348,8 +9355,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -9358,7 +9365,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcNavigationElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9367,8 +9374,8 @@ class IfcNavigationElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcNavigationElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9377,8 +9384,8 @@ class IfcNavigationElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcnavigationelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcnavigationelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcNavigationElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9387,8 +9394,8 @@ class IfcNavigationElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -9397,7 +9404,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -9407,8 +9414,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -9417,8 +9424,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -9427,8 +9434,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -9437,8 +9444,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOpenCrossProfileDef_CorrectProfileType: SCOPE = 'entity' @@ -9447,7 +9454,7 @@ class IfcOpenCrossProfileDef_CorrectProfileType: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: SCOPE = 'entity' @@ -9456,8 +9463,8 @@ class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: @staticmethod def __call__(self): - widths = getattr(self, 'Widths', INDETERMINATE) - slopes = getattr(self, 'Slopes', INDETERMINATE) + widths = express_getattr(self, 'Widths', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) assert (sizeof(slopes) == sizeof(widths)) is not False class IfcOpenCrossProfileDef_CorrespondingTags: @@ -9467,8 +9474,8 @@ class IfcOpenCrossProfileDef_CorrespondingTags: @staticmethod def __call__(self): - slopes = getattr(self, 'Slopes', INDETERMINATE) - tags = getattr(self, 'Tags', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) + tags = express_getattr(self, 'Tags', INDETERMINATE) assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False class IfcOpeningElement_CorrectPredefinedType: @@ -9478,8 +9485,8 @@ class IfcOpeningElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -9488,18 +9495,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x3.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -9508,8 +9515,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -9518,8 +9525,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -9528,8 +9535,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -9538,9 +9545,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -9558,8 +9565,8 @@ class IfcPavement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPavement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9568,8 +9575,8 @@ class IfcPavement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpavementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpavementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPavementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9578,8 +9585,8 @@ class IfcPavementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPcurve_DimIs2D: SCOPE = 'entity' @@ -9588,8 +9595,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -9598,9 +9605,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -9610,9 +9617,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -9622,7 +9629,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -9632,7 +9639,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -9642,8 +9649,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -9652,8 +9659,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -9662,8 +9669,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -9672,8 +9679,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -9682,8 +9689,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9692,8 +9699,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -9702,8 +9709,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -9712,8 +9719,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -9722,8 +9729,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -9732,7 +9739,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -9742,7 +9749,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -9752,7 +9759,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -9762,7 +9769,7 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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: @@ -9772,14 +9779,14 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_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) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -9788,8 +9795,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -9798,8 +9805,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -9808,20 +9815,20 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPointByDistanceExpression_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_AllPointsSameDim: SCOPE = 'entity' @@ -9830,8 +9837,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -9840,8 +9847,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -9850,7 +9857,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x3.ifcpolyline', 'ifc4x3.ifccompositecurve', 'ifc4x3.ifcindexedpolycurve']) == 1) is not False class IfcPolyline_SameDim: @@ -9860,8 +9867,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolynomialCurve_CorrectPositionDim: SCOPE = 'entity' @@ -9870,9 +9877,9 @@ class IfcPolynomialCurve_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 + position = express_getattr(self, 'Position', INDETERMINATE) + coefficientsz = express_getattr(self, 'CoefficientsZ', INDETERMINATE) + assert (express_getattr(position, 'Dim', INDETERMINATE) == 2 and (not exists(coefficientsz)) or express_getattr(position, 'Dim', INDETERMINATE) == 3) is not False class IfcPolynomialCurve_ValidCoefficients: SCOPE = 'entity' @@ -9881,9 +9888,9 @@ class IfcPolynomialCurve_ValidCoefficients: @staticmethod def __call__(self): - coefficientsx = getattr(self, 'CoefficientsX', INDETERMINATE) - coefficientsy = getattr(self, 'CoefficientsY', INDETERMINATE) - coefficientsz = getattr(self, 'CoefficientsZ', INDETERMINATE) + coefficientsx = express_getattr(self, 'CoefficientsX', INDETERMINATE) + coefficientsy = express_getattr(self, 'CoefficientsY', INDETERMINATE) + coefficientsz = express_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: @@ -9893,7 +9900,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -9902,13 +9909,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -9918,7 +9925,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3.ifcshaperepresentation', 'ifc4x3.ifcgeometricrepresentationitem', 'ifc4x3.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -9928,7 +9935,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3.ifcgeometricrepresentationitem', 'ifc4x3.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_CorrectPredefinedType: @@ -9938,8 +9945,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedure_HasName: SCOPE = 'entity' @@ -9948,7 +9955,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9957,8 +9964,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -9967,9 +9974,9 @@ class IfcProduct_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.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -9978,7 +9985,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_CorrectContext: @@ -9988,7 +9995,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_HasName: SCOPE = 'entity' @@ -9997,7 +10004,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -10006,7 +10013,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -10015,8 +10022,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcProjectionElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10025,8 +10032,8 @@ class IfcProjectionElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: SCOPE = 'entity' @@ -10035,8 +10042,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: @@ -10046,8 +10053,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -10057,8 +10064,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -10068,8 +10075,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -10079,9 +10086,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -10090,7 +10097,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -10099,7 +10106,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -10108,7 +10115,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -10117,7 +10124,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -10127,7 +10134,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -10136,7 +10143,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -10146,8 +10153,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -10157,8 +10164,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -10167,8 +10174,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10177,8 +10184,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10187,8 +10194,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -10197,8 +10204,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -10207,8 +10214,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -10217,8 +10224,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10227,8 +10234,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -10237,8 +10244,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -10247,8 +10254,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -10257,8 +10264,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -10267,7 +10274,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -10276,7 +10283,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -10286,7 +10293,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0) is not False class IfcQuantityLength_WR21: @@ -10296,7 +10303,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -10305,7 +10312,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -10315,7 +10322,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -10324,7 +10331,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -10334,7 +10341,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -10343,7 +10350,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -10353,7 +10360,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -10362,7 +10369,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRail_CorrectPredefinedType: @@ -10372,8 +10379,8 @@ class IfcRail_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRail_CorrectTypeAssigned: SCOPE = 'entity' @@ -10382,8 +10389,8 @@ class IfcRail_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcrailtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcrailtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailType_CorrectPredefinedType: SCOPE = 'entity' @@ -10392,8 +10399,8 @@ class IfcRailType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailing_CorrectPredefinedType: SCOPE = 'entity' @@ -10402,8 +10409,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -10412,8 +10419,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -10422,8 +10429,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailway_CorrectPredefinedType: SCOPE = 'entity' @@ -10432,8 +10439,8 @@ class IfcRailway_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailway_HasObjectType: SCOPE = 'entity' @@ -10442,8 +10449,8 @@ class IfcRailway_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcRailwayPart_CorrectPredefinedType: SCOPE = 'entity' @@ -10452,8 +10459,8 @@ class IfcRailwayPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -10462,8 +10469,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -10472,8 +10479,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10482,8 +10489,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10492,8 +10499,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10502,8 +10509,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -10512,8 +10519,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -10522,8 +10529,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -10535,8 +10542,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -10545,8 +10552,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -10558,9 +10565,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidInnerRadius: @@ -10570,9 +10577,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -10581,8 +10588,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangleHollowProfileDef_ValidWallThickness: SCOPE = 'entity' @@ -10591,8 +10598,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -10601,8 +10608,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -10612,10 +10619,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x3.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x3.ifcplane' in typeof(basissurface)) or 'ifc4x3.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -10625,8 +10632,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -10636,9 +10643,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcedSoil_CorrectPredefinedType: @@ -10648,8 +10655,8 @@ class IfcReinforcedSoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectPredefinedType: SCOPE = 'entity' @@ -10658,8 +10665,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -10668,8 +10675,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10678,8 +10685,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingBarType_CorrectPredefinedType: @@ -10689,8 +10696,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectPredefinedType: SCOPE = 'entity' @@ -10699,8 +10706,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -10709,8 +10716,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10719,8 +10726,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMeshType_CorrectPredefinedType: @@ -10730,8 +10737,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRelAggregates_NoSelfReference: SCOPE = 'entity' @@ -10740,8 +10747,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssigns_WR1: @@ -10751,8 +10758,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -10762,8 +10769,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -10772,8 +10779,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -10782,8 +10789,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -10792,8 +10799,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -10802,8 +10809,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -10812,8 +10819,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -10822,7 +10829,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3.ifcelement', 'ifc4x3.ifcelementtype', 'ifc4x3.ifcwindowstyle', 'ifc4x3.ifcdoorstyle', 'ifc4x3.ifcstructuralmember', 'ifc4x3.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3.ifcelement', 'ifc4x3.ifcelementtype', 'ifc4x3.ifcwindowstyle', 'ifc4x3.ifcdoorstyle', 'ifc4x3.ifcstructuralmember', 'ifc4x3.ifcport']) == 0]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -10831,7 +10838,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -10840,8 +10847,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -10851,7 +10858,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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: @@ -10861,7 +10868,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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: @@ -10871,8 +10878,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -10882,7 +10889,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -10892,8 +10899,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -10903,7 +10910,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -10912,8 +10919,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -10923,8 +10930,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -10934,8 +10941,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -10945,7 +10952,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x3.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -10955,8 +10962,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -10966,9 +10973,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -10977,9 +10984,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -10988,7 +10995,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -10998,7 +11005,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x3.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: @@ -11008,8 +11015,8 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisStartInXY: SCOPE = 'entity' @@ -11018,12 +11025,12 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -11032,7 +11039,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoad_CorrectPredefinedType: SCOPE = 'entity' @@ -11041,8 +11048,8 @@ class IfcRoad_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoad_HasObjectType: SCOPE = 'entity' @@ -11051,8 +11058,8 @@ class IfcRoad_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcRoadPart_CorrectPredefinedType: SCOPE = 'entity' @@ -11061,8 +11068,8 @@ class IfcRoadPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -11071,8 +11078,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -11081,8 +11088,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -11091,8 +11098,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -11101,11 +11108,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSIUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSIUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11114,8 +11121,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11124,8 +11131,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11134,8 +11141,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -11144,7 +11151,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -11153,7 +11160,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -11162,8 +11169,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -11172,8 +11179,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -11182,7 +11189,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -11192,8 +11199,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -11203,8 +11210,8 @@ class IfcSectionedSolidHorizontal_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_ConsistentProfileTypes: SCOPE = 'entity' @@ -11213,8 +11220,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11223,8 +11230,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_SpineCurveDim: @@ -11234,8 +11241,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -11247,8 +11254,8 @@ class IfcSectionedSurface_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(temp, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)]) == 0) is not False class IfcSectionedSurface_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11257,8 +11264,8 @@ class IfcSectionedSurface_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSurface_DirectrixIs3D: @@ -11268,8 +11275,8 @@ class IfcSectionedSurface_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSurface_NoOffsets: SCOPE = 'entity' @@ -11278,8 +11285,8 @@ class IfcSectionedSurface_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLateral', INDETERMINATE)) or exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetVertical', INDETERMINATE)) or exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSurface_SectionsSameType: SCOPE = 'entity' @@ -11288,7 +11295,7 @@ class IfcSectionedSurface_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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 IfcSensor_CorrectPredefinedType: @@ -11298,8 +11305,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -11308,8 +11315,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11318,8 +11325,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11328,8 +11335,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11338,8 +11345,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11348,8 +11355,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -11358,8 +11365,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -11368,7 +11375,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x3.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x3.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -11377,7 +11384,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -11386,7 +11393,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationType: SCOPE = 'entity' @@ -11395,7 +11402,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -11404,7 +11411,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x3.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x3.ifcvertexpoint', 'ifc4x3.ifcedgecurve', 'ifc4x3.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): @@ -11417,8 +11424,8 @@ class IfcSign_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSign_CorrectTypeAssigned: SCOPE = 'entity' @@ -11427,8 +11434,8 @@ class IfcSign_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsigntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsigntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignType_CorrectPredefinedType: SCOPE = 'entity' @@ -11437,8 +11444,8 @@ class IfcSignType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSignal_CorrectPredefinedType: SCOPE = 'entity' @@ -11447,8 +11454,8 @@ class IfcSignal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSignal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11457,8 +11464,8 @@ class IfcSignal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsignaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsignaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11467,8 +11474,8 @@ class IfcSignalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSlab_CorrectPredefinedType: SCOPE = 'entity' @@ -11477,8 +11484,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -11487,8 +11494,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -11497,8 +11504,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11507,8 +11514,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11517,8 +11524,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11527,8 +11534,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -11540,8 +11547,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -11550,8 +11557,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -11560,8 +11567,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -11570,8 +11577,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -11580,8 +11587,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11590,8 +11597,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -11600,7 +11607,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -11609,8 +11616,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -11619,8 +11626,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -11629,8 +11636,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11639,8 +11646,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11649,8 +11656,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11659,8 +11666,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -11669,8 +11676,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -11679,8 +11686,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -11689,8 +11696,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -11699,8 +11706,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -11709,8 +11716,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -11719,8 +11726,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_CorrectPredefinedType: SCOPE = 'entity' @@ -11729,8 +11736,8 @@ class IfcStructuralAnalysisModel_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_HasObjectType: SCOPE = 'entity' @@ -11739,8 +11746,8 @@ class IfcStructuralAnalysisModel_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -11749,8 +11756,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11759,8 +11766,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -11769,8 +11776,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -11779,8 +11786,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -11789,8 +11796,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -11799,8 +11806,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -11809,7 +11816,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -11818,7 +11825,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3.ifcstructuralloadlinearforce', 'ifc4x3.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3.ifcstructuralloadlinearforce', 'ifc4x3.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -11827,7 +11834,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -11836,8 +11843,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -11847,10 +11854,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -11859,7 +11866,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -11868,7 +11875,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3.ifcstructuralloadplanarforce', 'ifc4x3.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3.ifcstructuralloadplanarforce', 'ifc4x3.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -11877,7 +11884,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3.ifcstructuralloadsingleforce', 'ifc4x3.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3.ifcstructuralloadsingleforce', 'ifc4x3.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -11886,7 +11893,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3.ifcstructuralloadsingleforce', 'ifc4x3.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3.ifcstructuralloadsingleforce', 'ifc4x3.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -11895,8 +11902,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -11905,8 +11912,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11915,8 +11922,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -11925,8 +11932,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -11935,8 +11942,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -11945,7 +11952,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x3.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -11955,7 +11962,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -11964,8 +11971,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11974,8 +11981,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -11987,8 +11994,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -11997,7 +12004,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x3.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -12010,8 +12017,8 @@ class IfcSurfaceFeature_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSurfaceFeature_HasObjectType: SCOPE = 'entity' @@ -12020,8 +12027,8 @@ class IfcSurfaceFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -12030,17 +12037,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_NonnegativeArea1: SCOPE = 'entity' @@ -12049,7 +12056,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -12059,7 +12066,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -12069,7 +12076,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @@ -12079,9 +12086,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceStyle_MaxOneExtDefined: @@ -12091,7 +12098,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -12100,7 +12107,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -12109,7 +12116,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneShading: SCOPE = 'entity' @@ -12118,7 +12125,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -12127,7 +12134,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -12136,8 +12143,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixBounded: SCOPE = 'entity' @@ -12146,9 +12153,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3.ifcconic', 'ifc4x3.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolid_DirectrixDim: @@ -12158,8 +12165,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -12168,8 +12175,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -12179,8 +12186,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -12189,7 +12196,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x3.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x3.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -12198,8 +12205,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -12208,8 +12215,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -12218,8 +12225,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -12228,8 +12235,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12238,8 +12245,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12248,8 +12255,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12258,8 +12265,8 @@ class IfcSystemFurnitureElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12268,8 +12275,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -12279,8 +12286,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -12290,8 +12297,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -12300,20 +12307,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -12322,8 +12329,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -12332,8 +12339,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -12342,8 +12349,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -12352,8 +12359,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -12362,7 +12369,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -12371,8 +12378,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -12381,12 +12388,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -12396,8 +12403,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -12406,8 +12413,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -12416,8 +12423,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -12426,8 +12433,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12436,8 +12443,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -12446,8 +12453,8 @@ class IfcTendonConduit_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, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -12456,8 +12463,8 @@ class IfcTendonConduit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -12466,8 +12473,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -12476,8 +12483,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -12489,7 +12496,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x3.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -12499,7 +12506,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x3.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x3.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -12508,7 +12515,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -12517,7 +12524,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -12526,7 +12533,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -12535,8 +12542,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTrackElement_CorrectPredefinedType: @@ -12546,8 +12553,8 @@ class IfcTrackElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTrackElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12556,8 +12563,8 @@ class IfcTrackElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctrackelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctrackelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTrackElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12566,8 +12573,8 @@ class IfcTrackElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransformer_CorrectPredefinedType: SCOPE = 'entity' @@ -12576,8 +12583,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -12586,8 +12593,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctransformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctransformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -12596,8 +12603,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12606,8 +12613,8 @@ class IfcTransportElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12616,8 +12623,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12626,11 +12633,11 @@ class IfcTransportElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -12640,7 +12647,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_NoTrimOfBoundedCurves: SCOPE = 'entity' @@ -12649,7 +12656,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x3.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: @@ -12659,7 +12666,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -12669,7 +12676,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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: @@ -12679,8 +12686,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12689,8 +12696,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12699,8 +12706,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -12709,7 +12716,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -12718,7 +12725,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -12728,7 +12735,7 @@ class IfcTypeProduct_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.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x3.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12737,8 +12744,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -12748,8 +12755,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -12759,7 +12766,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -12769,8 +12776,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12779,8 +12786,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12789,8 +12796,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -12799,8 +12806,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -12809,8 +12816,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -12819,8 +12826,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -12829,8 +12836,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -12839,8 +12846,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -12849,8 +12856,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -12859,12 +12866,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVehicle_CorrectPredefinedType: SCOPE = 'entity' @@ -12873,8 +12880,8 @@ class IfcVehicle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVehicle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12883,8 +12890,8 @@ class IfcVehicle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcvehicletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcvehicletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVehicleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12893,8 +12900,8 @@ class IfcVehicleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -12903,8 +12910,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -12913,8 +12920,8 @@ class IfcVibrationDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -12923,8 +12930,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -12933,8 +12940,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -12943,8 +12950,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12953,8 +12960,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVirtualElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12963,8 +12970,8 @@ class IfcVirtualElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVoidingFeature_CorrectPredefinedType: SCOPE = 'entity' @@ -12973,8 +12980,8 @@ class IfcVoidingFeature_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVoidingFeature_HasObjectType: SCOPE = 'entity' @@ -12983,8 +12990,8 @@ class IfcVoidingFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -12993,8 +13000,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -13003,8 +13010,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -13013,7 +13020,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3.ifcrelassociates.relatedobjects') if 'ifc4x3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3.ifcrelassociates.relatedobjects') if 'ifc4x3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -13022,8 +13029,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -13032,8 +13039,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -13042,8 +13049,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -13052,8 +13059,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectPredefinedType: SCOPE = 'entity' @@ -13062,8 +13069,8 @@ class IfcWindow_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWindow_CorrectTypeAssigned: SCOPE = 'entity' @@ -13072,8 +13079,8 @@ class IfcWindow_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -13082,8 +13089,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -13093,8 +13100,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -13104,8 +13111,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -13115,7 +13122,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -13124,7 +13131,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -13133,8 +13140,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -13143,8 +13150,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -13153,8 +13160,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -13163,8 +13170,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -13173,8 +13180,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -13184,19 +13191,19 @@ class IfcZone_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.ifczone' in typeof(temp) or 'ifc4x3.ifcspace' in typeof(temp) or 'ifc4x3.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x3.ifczone' in typeof(temp) or 'ifc4x3.ifcspace' in typeof(temp) or 'ifc4x3.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -13206,11 +13213,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -13224,13 +13231,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -13248,7 +13255,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -13285,11 +13292,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -13469,7 +13476,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x3.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x3.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -13480,27 +13487,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3.ifcproject' in typeof(temp)]) return count == 0 else: @@ -13512,26 +13519,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x3.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x3.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x3.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x3.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.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) + if 'ifc4x3.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x3.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13540,21 +13547,21 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x3.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x3.ifcgradientcurve' in typeof(curve): return 3 if 'ifc4x3.ifcsegmentedreferencecurve' in typeof(curve): return 3 if 'ifc4x3.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x3.ifcoffsetcurve3d' in typeof(curve): @@ -13564,19 +13571,19 @@ def IfcCurveDim(curve): if 'ifc4x3.ifccurvesegment2d' in typeof(curve): return 2 if 'ifc4x3.ifcpolynomialcurve' in typeof(curve): - if not exists(getattr(curve, 'CoefficientsZ', INDETERMINATE)) and getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: + if not exists(express_getattr(curve, 'CoefficientsZ', INDETERMINATE)) and express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: return 2 return 3 if 'ifc4x3.ifcpcurve' in typeof(curve): return 3 if 'ifc4x3.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -13584,13 +13591,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSIUnit(n): @@ -13660,15 +13667,15 @@ def IfcDimensionsForSIUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -13677,36 +13684,36 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x3.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x3.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x3.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcGradient(gradientcurve): @@ -13726,9 +13733,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -13746,10 +13753,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -13760,25 +13767,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x3.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x3.ifcvector' in typeof(arg): vec.Orientation = v @@ -13790,18 +13797,18 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointListDim(pointlist): @@ -13812,32 +13819,32 @@ def IfcPointListDim(pointlist): 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -13858,15 +13865,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x3.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -13882,75 +13889,75 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x3.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x3.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x3.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x3.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.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'segment': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x3.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x3.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'segment': count = sizeof([temp for temp in items if 'ifc4x3.ifcsegment' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x3.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x3.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.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x3.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x3.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedsurface': count = sizeof([temp for temp in items if 'ifc4x3.ifcsectionedsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x3.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x3.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x3.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x3.ifcpoint', 'ifc4x3.ifccurve', 'ifc4x3.ifcgeometriccurveset', 'ifc4x3.ifcannotationfillarea', 'ifc4x3.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x3.ifcgeometricset' in typeof(temp) or 'ifc4x3.ifcpoint' in typeof(temp) or 'ifc4x3.ifccurve' in typeof(temp) or ('ifc4x3.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x3.ifcgeometriccurveset' in typeof(temp) or 'ifc4x3.ifcgeometricset' in typeof(temp) or 'ifc4x3.ifcpoint' in typeof(temp) or ('ifc4x3.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x3.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.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x3.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x3.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3.ifctessellateditem', 'ifc4x3.ifcshellbasedsurfacemodel', 'ifc4x3.ifcfacebasedsurfacemodel', 'ifc4x3.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3.ifctessellateditem', 'ifc4x3.ifcshellbasedsurfacemodel', 'ifc4x3.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x3.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3.ifcextrudedareasolid', 'ifc4x3.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x3.ifcextrudedareasolidtapered', 'ifc4x3.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3.ifcsweptareasolid', 'ifc4x3.ifcsweptdisksolid', 'ifc4x3.ifcsectionedsolidhorizontal'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x3.ifcbooleanresult', 'ifc4x3.ifccsgprimitive3d', 'ifc4x3.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x3.ifccsgsolid', 'ifc4x3.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x3.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x3.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x3.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x3.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x3.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x3.ifcmappeditem' in typeof(temp)]) else: return None @@ -13958,9 +13965,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -13970,28 +13977,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x3.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x3.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x3.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x3.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x3.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x3.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x3.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x3.ifcopenshell' in typeof(temp) or 'ifc4x3.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -14002,7 +14009,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x3.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x3.ifcpropertysetdefinitionset' in typeof(definition): @@ -14015,7 +14022,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -14023,7 +14030,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x3.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -14031,41 +14038,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -14073,31 +14080,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py index 53ca078c98..2fcbb1f734 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,2363 +147,2363 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) +railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_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) +blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) +parabolicarc = express_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) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnnotationTypeEnum = enum_namespace() -asbuiltarea = getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -asbuiltpoint = getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -assumedarea = getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -assumedline = getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -assumedpoint = getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -non_physical_signal = getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -superelevationevent = getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -widthevent = getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -userdefined = getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) +asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) +asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) +assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) +assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) +assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) +non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) +superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) +widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) +userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +notdefined = express_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) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +unspecified = express_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) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +unspecified = express_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) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +notincludes = express_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) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +union = express_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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) +outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +railwayline = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE) +railwaytrack = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE) +reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) +shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) +trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) +transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +junction = express_getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +transition = express_getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) +fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) +opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) +stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) +wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) +ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) +linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) +opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) +telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) +transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) +transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) +transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_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) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +notdefined = express_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) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) +bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) +chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) +screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) +userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) +ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) +core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) +filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) +pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) +protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +topping = express_getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_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) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) +elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +filler = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE) +flashing = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE) +insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) +lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) +panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) +pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) +point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) +railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) +railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) +rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) +rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) +soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) +tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) +distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) +monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) +overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_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) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_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) +boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +double_door_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_LIFTING_VERTICAL', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) +lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) +lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) +revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) +revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) +cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) +dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) +excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) +overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) +pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) +stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) +topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) +trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) +counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) +embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) +slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) +subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) +subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) +transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) +entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) +mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) +signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) +supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) +suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) +trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) +traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) +traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) +belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) +junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) +levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) +segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) +substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) +longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) +region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) +vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_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) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +vegetation = express_getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solid = express_getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE) +void = express_getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE) +water = express_getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE) +userdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_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) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) +crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) +dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) +fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) +userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +notdefined = express_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) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKerbTypeEnum = enum_namespace() -userdefined = getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcKerbTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_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) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) +userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_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) +barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) +breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) +canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) +drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) +floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) +hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) +jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) +launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) +marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) +navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) +port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) +quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) +revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) +shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) +shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) +shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) +slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) +waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) +waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) +userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) +anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) +approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) +belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) +berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) +chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) +cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) +copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) +core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) +crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) +gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) +gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) +highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) +landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) +leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) +lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) +manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) +navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) +protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) +shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) +storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) +vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) +waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) +weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) +userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) +railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) +basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) +basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) +e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) +gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) +masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) +mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) +mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) +packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) +remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) +remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) +service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) +subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) +userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) +linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) +magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) +mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) +vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) +userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) +buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) +userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) +rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) +userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +pset_materialdriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +pset_profiledriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +notdefined = express_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) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) +checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) +rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) +rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) +stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayPartTypeEnum = enum_namespace() -dilatationsuperstructure = getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -linesidestructure = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -linesidestructurepart = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -plaintracksuperstructure = getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) -superstructure = getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -trackstructure = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -turnoutsuperstructure = getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) +linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) +linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) +plaintracksuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) +trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) +turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayTypeEnum = enum_namespace() -userdefined = getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_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) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) +intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) +referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +physical = express_getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_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) +dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) +grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) +replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) +rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) +surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) +verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) +bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) +carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) +centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) +centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) +hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) +intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) +layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) +parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) +passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) +pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) +railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) +refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) +roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) +roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) +roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) +roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) +roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) +shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) +sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) +softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) +tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) +trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) +trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) +userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadTypeEnum = enum_namespace() -userdefined = getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +userdefined = express_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) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +tera = express_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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_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) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) +turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) +wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) +mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) +pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) +userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) +mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) +visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) +userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_number = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_weight = express_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) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readwritelocked = express_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) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) +linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) +pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) +rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) +symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +positive = express_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) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_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) +adjustment = express_getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +calibration = express_getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +emergency = express_getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE) +inspection = express_getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +safety = express_getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE) +shutdown = express_getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE) +testing = express_getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE) +troubleshooting = express_getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_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) +blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) +derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) +frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) +half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) +sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) +speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) +trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) +vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) +userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) +combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_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) +craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) +elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) +haulinggear = express_getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_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) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) +combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cargo = express_getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE) +rollingstock = express_getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) +vehicle = express_getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE) +vehicleair = express_getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE) +vehiclemarine = express_getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE) +vehicletracked = express_getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE) +vehiclewheeled = express_getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) +userdefined = express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +boundary = express_getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE) +clearance = express_getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE) +provisionforvoid = express_getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +userdefined = express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +notdefined = express_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) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_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) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_ADD1', *args, **kwargs) @@ -5133,7 +5140,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -5214,7 +5221,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -5223,7 +5230,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -5232,7 +5239,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -5331,7 +5338,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -5340,7 +5347,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -5349,7 +5356,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -5358,8 +5365,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -5368,8 +5375,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -5378,8 +5385,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -5388,8 +5395,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -5398,8 +5405,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -5408,7 +5415,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_add1.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_add1.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -5417,8 +5424,8 @@ class IfcAdvancedBrepWithVoids_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_add1.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3_add1.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -5427,7 +5434,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_add1.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_add1.ifcline', 'ifc4x3_add1.ifcconic', 'ifc4x3_add1.ifcpolyline', 'ifc4x3_add1.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_add1.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3_add1.ifcline', 'ifc4x3_add1.ifcconic', 'ifc4x3_add1.ifcpolyline', 'ifc4x3_add1.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -5436,7 +5443,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add1.ifcelementarysurface', 'ifc4x3_add1.ifcsweptsurface', 'ifc4x3_add1.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add1.ifcelementarysurface', 'ifc4x3_add1.ifcsweptsurface', 'ifc4x3_add1.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -5445,7 +5452,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_add1.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_add1.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_add1.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_add1.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -5454,8 +5461,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -5464,8 +5471,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -5474,8 +5481,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -5484,8 +5491,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -5494,8 +5501,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -5504,8 +5511,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -5514,8 +5521,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -5524,8 +5531,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -5534,8 +5541,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -5544,8 +5551,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -5554,8 +5561,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -5564,8 +5571,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -5574,8 +5581,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5585,8 +5592,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5595,7 +5602,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_add1.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5605,7 +5612,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_add1.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5615,7 +5622,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x3_add1.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x3_add1.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5624,8 +5631,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5634,7 +5641,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5643,8 +5650,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5653,7 +5660,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x3_add1.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -5663,9 +5670,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5675,9 +5682,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5687,9 +5694,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5699,9 +5706,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5711,8 +5718,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5721,8 +5728,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5731,8 +5738,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5741,8 +5748,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5751,7 +5758,7 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIsCP: SCOPE = 'entity' @@ -5760,10 +5767,10 @@ class IfcAxis1Placement_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_add1.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_add1.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_LocationIs2D: @@ -5773,7 +5780,7 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIsCP: SCOPE = 'entity' @@ -5782,7 +5789,7 @@ class IfcAxis2Placement2D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_add1.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_add1.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2Placement2D_RefDirIs2D: SCOPE = 'entity' @@ -5791,11 +5798,11 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_AxisAndRefDirProvision: @@ -5805,8 +5812,8 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False class IfcAxis2Placement3D_AxisIs3D: @@ -5816,8 +5823,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5826,9 +5833,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_LocationIs3D: SCOPE = 'entity' @@ -5837,7 +5844,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_LocationIsCP: SCOPE = 'entity' @@ -5846,7 +5853,7 @@ class IfcAxis2Placement3D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_add1.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_add1.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5855,12 +5862,12 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcAxis2PlacementLinear_WR1: @@ -5870,7 +5877,7 @@ class IfcAxis2PlacementLinear_WR1: @staticmethod def __call__(self): - assert ('ifc4x3_add1.ifcpointbydistanceexpression' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_add1.ifcpointbydistanceexpression' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2PlacementLinear_WR2: SCOPE = 'entity' @@ -5879,9 +5886,9 @@ class IfcAxis2PlacementLinear_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcBSplineCurve_SameDim: SCOPE = 'entity' @@ -5890,16 +5897,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5909,11 +5916,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5923,26 +5930,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_CorrespondingULists: @@ -5952,8 +5959,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -5963,8 +5970,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5974,10 +5981,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5986,17 +5993,17 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -6006,8 +6013,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6016,8 +6023,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6026,8 +6033,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -6036,8 +6043,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -6046,8 +6053,8 @@ class IfcBearing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6056,8 +6063,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -6066,7 +6073,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBlobTexture_SupportedRasterFormat: @@ -6076,7 +6083,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBoiler_CorrectPredefinedType: SCOPE = 'entity' @@ -6085,8 +6092,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6095,8 +6102,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6105,8 +6112,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -6115,7 +6122,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x3_add1.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x3_add1.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x3_add1.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -6125,7 +6132,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -6135,7 +6142,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x3_add1.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanResult_FirstOperandClosed: @@ -6145,8 +6152,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x3_add1.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x3_add1.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SameDim: SCOPE = 'entity' @@ -6155,9 +6162,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -6166,12 +6173,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x3_add1.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x3_add1.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -6180,7 +6187,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -6192,7 +6199,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x3_add1.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x3_add1.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBridge_CorrectPredefinedType: SCOPE = 'entity' @@ -6201,8 +6208,8 @@ class IfcBridge_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBridgePart_CorrectPredefinedType: SCOPE = 'entity' @@ -6211,8 +6218,8 @@ class IfcBridgePart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -6221,8 +6228,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -6231,8 +6238,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -6241,8 +6248,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -6251,8 +6258,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -6261,8 +6268,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -6271,7 +6278,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6280,8 +6287,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6290,8 +6297,8 @@ class IfcBuildingSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuiltElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -6300,7 +6307,7 @@ class IfcBuiltElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_add1.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_add1.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuiltSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6309,8 +6316,8 @@ class IfcBuiltSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -6319,8 +6326,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -6329,8 +6336,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6339,8 +6346,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -6349,8 +6356,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -6360,10 +6367,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -6373,9 +6380,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -6385,8 +6392,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6395,8 +6402,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6405,8 +6412,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6415,8 +6422,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6425,8 +6432,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6435,8 +6442,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6445,8 +6452,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6455,8 +6462,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6465,8 +6472,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6475,8 +6482,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6485,8 +6492,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6495,8 +6502,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -6505,8 +6512,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6515,8 +6522,8 @@ class IfcCaissonFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -6525,8 +6532,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -6535,7 +6542,7 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPointList_Dim(self): @@ -6548,16 +6555,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -6566,7 +6573,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -6575,7 +6582,7 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -6584,10 +6591,10 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_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) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6596,12 +6603,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -6610,7 +6617,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -6619,7 +6626,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -6628,8 +6635,8 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -6638,11 +6645,11 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6651,7 +6658,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6661,16 +6668,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6679,8 +6686,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6689,8 +6696,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6699,8 +6706,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6709,8 +6716,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6719,8 +6726,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6729,8 +6736,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6739,8 +6746,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6749,8 +6756,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6759,8 +6766,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6769,8 +6776,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6779,8 +6786,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6789,8 +6796,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6799,8 +6806,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6809,8 +6816,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6819,8 +6826,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6829,8 +6836,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6839,7 +6846,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6849,7 +6856,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6859,7 +6866,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6869,7 +6876,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcCompositeCurve_CurveContinuous: @@ -6879,9 +6886,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6890,17 +6897,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6909,7 +6916,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6922,7 +6929,7 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x3_add1.ifcboundedcurve' in typeof(parentcurve)) is not False class IfcCompositeProfileDef_InvariantProfileType: @@ -6932,8 +6939,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6942,7 +6949,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x3_add1.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6952,8 +6959,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6962,8 +6969,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6972,8 +6979,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -6982,8 +6989,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -6992,8 +6999,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -7002,8 +7009,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -7012,8 +7019,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7022,8 +7029,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7032,8 +7039,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7042,8 +7049,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7052,8 +7059,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7062,8 +7069,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7072,8 +7079,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -7082,8 +7089,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -7092,8 +7099,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7102,8 +7109,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7112,8 +7119,8 @@ class IfcConveyorSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7122,8 +7129,8 @@ class IfcConveyorSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcconveyorsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcconveyorsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcConveyorSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7132,8 +7139,8 @@ class IfcConveyorSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -7142,8 +7149,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -7152,8 +7159,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -7162,8 +7169,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -7172,8 +7179,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -7182,8 +7189,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7192,8 +7199,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoordinateReferenceSystem_NameOrWKT: SCOPE = 'entity' @@ -7202,8 +7209,8 @@ class IfcCoordinateReferenceSystem_NameOrWKT: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - wellknowntext = getattr(self, 'WellKnownText', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + wellknowntext = express_getattr(self, 'WellKnownText', INDETERMINATE) assert (hiindex(wellknowntext) == 1 or exists(name)) is not False class IfcCourse_CorrectPredefinedType: @@ -7213,8 +7220,8 @@ class IfcCourse_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCourse_CorrectTypeAssigned: SCOPE = 'entity' @@ -7223,8 +7230,8 @@ class IfcCourse_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccoursetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccoursetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCourseType_CorrectPredefinedType: SCOPE = 'entity' @@ -7233,8 +7240,8 @@ class IfcCourseType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -7243,8 +7250,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -7253,8 +7260,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -7263,8 +7270,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7273,8 +7280,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7283,8 +7290,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -7296,8 +7303,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -7306,8 +7313,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -7316,8 +7323,8 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) @@ -7329,9 +7336,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyle_MeasureOfWidth: @@ -7341,7 +7348,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x3_add1.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x3_add1.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -7351,7 +7358,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -7361,8 +7368,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -7371,8 +7378,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -7381,8 +7388,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -7391,8 +7398,8 @@ class IfcDeepFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -7401,8 +7408,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -7411,8 +7418,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -7421,11 +7428,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -7435,11 +7442,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @@ -7449,9 +7456,9 @@ class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_add1.ifcconic', 'ifc4x3_add1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcDiscreteAccessory_CorrectPredefinedType: @@ -7461,8 +7468,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -7471,8 +7478,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -7481,8 +7488,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7491,8 +7498,8 @@ class IfcDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7501,8 +7508,8 @@ class IfcDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7511,8 +7518,8 @@ class IfcDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7521,8 +7528,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7531,8 +7538,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7541,8 +7548,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -7551,8 +7558,8 @@ class IfcDistributionSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -7561,8 +7568,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectPredefinedType: @@ -7572,8 +7579,8 @@ class IfcDoor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDoor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7582,8 +7589,8 @@ class IfcDoor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -7592,8 +7599,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -7603,8 +7610,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -7614,8 +7621,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -7625,8 +7632,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -7636,7 +7643,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add1.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add1.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -7645,7 +7652,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add1.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add1.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7654,8 +7661,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -7664,7 +7671,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -7673,7 +7680,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -7682,8 +7689,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7692,8 +7699,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7702,8 +7709,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7712,8 +7719,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7722,8 +7729,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7732,8 +7739,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -7742,8 +7749,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -7752,8 +7759,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7762,8 +7769,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEarthworksCut_CorrectPredefinedType: SCOPE = 'entity' @@ -7772,8 +7779,8 @@ class IfcEarthworksCut_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEarthworksFill_CorrectPredefinedType: SCOPE = 'entity' @@ -7782,8 +7789,8 @@ class IfcEarthworksFill_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7792,9 +7799,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7806,7 +7813,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7816,8 +7823,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7826,8 +7833,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7836,8 +7843,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7846,8 +7853,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7856,8 +7863,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7866,8 +7873,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7876,8 +7883,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7886,8 +7893,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7896,8 +7903,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7906,8 +7913,8 @@ class IfcElectricFlowTreatmentDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7916,8 +7923,8 @@ class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricflowtreatmentdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricflowtreatmentdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7926,8 +7933,8 @@ class IfcElectricFlowTreatmentDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7936,8 +7943,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7946,8 +7953,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7956,8 +7963,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -7966,8 +7973,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7976,8 +7983,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7986,8 +7993,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -7996,8 +8003,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -8006,8 +8013,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -8016,8 +8023,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -8026,8 +8033,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -8036,8 +8043,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -8046,8 +8053,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -8056,7 +8063,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -8066,8 +8073,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -8076,8 +8083,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -8086,8 +8093,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -8096,8 +8103,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -8106,8 +8113,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8116,8 +8123,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -8126,8 +8133,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -8136,8 +8143,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8146,8 +8153,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -8156,8 +8163,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -8166,9 +8173,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -8177,9 +8184,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -8188,8 +8195,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -8198,9 +8205,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -8210,7 +8217,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -8219,7 +8226,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -8228,7 +8235,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x3_add1.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -8241,8 +8248,8 @@ class IfcFacilityPartCommon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectPredefinedType: SCOPE = 'entity' @@ -8251,8 +8258,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -8261,8 +8268,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -8271,8 +8278,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -8281,8 +8288,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8291,8 +8298,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8301,8 +8308,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElement_NotContained: SCOPE = 'entity' @@ -8311,7 +8318,7 @@ class IfcFeatureElement_NotContained: @staticmethod def __call__(self): - containedinstructure = getattr(self, 'ContainedInStructure', INDETERMINATE) + containedinstructure = express_getattr(self, 'ContainedInStructure', INDETERMINATE) assert (sizeof(containedinstructure) == 0) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: @@ -8321,7 +8328,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -8330,7 +8337,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -8339,7 +8346,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -8348,7 +8355,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_add1.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_add1.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -8357,7 +8364,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_add1.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_add1.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -8366,8 +8373,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -8376,8 +8383,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -8386,8 +8393,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8396,8 +8403,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8406,8 +8413,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8416,8 +8423,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8426,8 +8433,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8436,8 +8443,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectPredefinedType: SCOPE = 'entity' @@ -8446,8 +8453,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -8456,8 +8463,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8466,8 +8473,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -8476,8 +8483,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8486,8 +8493,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8496,8 +8503,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -8506,8 +8513,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8516,8 +8523,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8526,8 +8533,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -8536,8 +8543,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8546,8 +8553,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8556,8 +8563,8 @@ class IfcFurnitureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicCRS_IsPlaneAngleUnit: SCOPE = 'entity' @@ -8566,8 +8573,8 @@ class IfcGeographicCRS_IsPlaneAngleUnit: @staticmethod def __call__(self): - unit = getattr(self, 'Unit', INDETERMINATE) - assert (not exists(unit) or getattr(unit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE)) is not False + unit = express_getattr(self, 'Unit', INDETERMINATE) + assert (not exists(unit) or express_getattr(unit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE)) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -8576,8 +8583,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -8586,8 +8593,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -8596,8 +8603,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -8606,7 +8613,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_add1.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_add1.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -8615,8 +8622,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -8625,7 +8632,7 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -8634,7 +8641,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x3_add1.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -8644,25 +8651,25 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -8671,12 +8678,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGeotechnicalStratum_CorrectPredefinedType: SCOPE = 'entity' @@ -8685,8 +8692,8 @@ class IfcGeotechnicalStratum_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGridAxis_WR1: SCOPE = 'entity' @@ -8695,8 +8702,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -8705,9 +8712,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -8720,8 +8727,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -8730,8 +8737,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8740,8 +8747,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -8750,8 +8757,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -8760,8 +8767,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -8770,8 +8777,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFilletRadius: SCOPE = 'entity' @@ -8780,11 +8787,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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: @@ -8794,8 +8801,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -8805,8 +8812,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcImpactProtectionDevice_CorrectPredefinedType: @@ -8816,8 +8823,8 @@ class IfcImpactProtectionDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcImpactProtectionDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8826,8 +8833,8 @@ class IfcImpactProtectionDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcimpactprotectiondevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcimpactprotectiondevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcImpactProtectionDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8836,8 +8843,8 @@ class IfcImpactProtectionDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIndexedPolyCurve_Consecutive: SCOPE = 'entity' @@ -8846,7 +8853,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -8856,8 +8863,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8866,8 +8873,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8876,8 +8883,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8886,7 +8893,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8895,7 +8902,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8904,8 +8911,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8914,8 +8921,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8924,8 +8931,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcKerb_CorrectPredefinedType: SCOPE = 'entity' @@ -8934,8 +8941,8 @@ class IfcKerb_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcKerb_CorrectTypeAssigned: SCOPE = 'entity' @@ -8944,8 +8951,8 @@ class IfcKerb_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifckerbtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifckerbtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcKerbType_CorrectPredefinedType: SCOPE = 'entity' @@ -8954,8 +8961,8 @@ class IfcKerbType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8964,9 +8971,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8976,8 +8983,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8986,8 +8993,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -8996,8 +9003,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -9006,8 +9013,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -9016,8 +9023,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -9026,8 +9033,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -9036,8 +9043,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9046,8 +9053,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -9056,9 +9063,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLiquidTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9067,8 +9074,8 @@ class IfcLiquidTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLiquidTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9077,8 +9084,8 @@ class IfcLiquidTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcliquidterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcliquidterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLiquidTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9087,8 +9094,8 @@ class IfcLiquidTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -9097,8 +9104,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMarineFacility_CorrectPredefinedType: @@ -9108,8 +9115,8 @@ class IfcMarineFacility_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMarinePart_CorrectPredefinedType: SCOPE = 'entity' @@ -9118,8 +9125,8 @@ class IfcMarinePart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: SCOPE = 'entity' @@ -9128,7 +9135,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_add1.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -9138,7 +9145,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -9151,7 +9158,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -9161,8 +9168,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -9171,8 +9178,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -9181,8 +9188,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9191,8 +9198,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9201,8 +9208,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9211,8 +9218,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -9221,8 +9228,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -9231,8 +9238,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -9241,8 +9248,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -9254,8 +9261,8 @@ class IfcMobileTelecommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -9264,8 +9271,8 @@ class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmobiletelecommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmobiletelecommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9274,8 +9281,8 @@ class IfcMobileTelecommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9284,8 +9291,8 @@ class IfcMooringDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9294,8 +9301,8 @@ class IfcMooringDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmooringdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmooringdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMooringDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9304,8 +9311,8 @@ class IfcMooringDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectPredefinedType: SCOPE = 'entity' @@ -9314,8 +9321,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -9324,8 +9331,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -9334,8 +9341,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -9344,7 +9351,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcNavigationElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9353,8 +9360,8 @@ class IfcNavigationElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcNavigationElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9363,8 +9370,8 @@ class IfcNavigationElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcnavigationelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcnavigationelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcNavigationElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9373,8 +9380,8 @@ class IfcNavigationElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -9383,7 +9390,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -9393,8 +9400,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -9403,8 +9410,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -9413,8 +9420,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -9423,8 +9430,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOpenCrossProfileDef_CorrectProfileType: SCOPE = 'entity' @@ -9433,7 +9440,7 @@ class IfcOpenCrossProfileDef_CorrectProfileType: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: SCOPE = 'entity' @@ -9442,8 +9449,8 @@ class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: @staticmethod def __call__(self): - widths = getattr(self, 'Widths', INDETERMINATE) - slopes = getattr(self, 'Slopes', INDETERMINATE) + widths = express_getattr(self, 'Widths', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) assert (sizeof(slopes) == sizeof(widths)) is not False class IfcOpenCrossProfileDef_CorrespondingTags: @@ -9453,8 +9460,8 @@ class IfcOpenCrossProfileDef_CorrespondingTags: @staticmethod def __call__(self): - slopes = getattr(self, 'Slopes', INDETERMINATE) - tags = getattr(self, 'Tags', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) + tags = express_getattr(self, 'Tags', INDETERMINATE) assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False class IfcOpeningElement_CorrectPredefinedType: @@ -9464,8 +9471,8 @@ class IfcOpeningElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -9474,18 +9481,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x3_add1.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -9494,8 +9501,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -9504,8 +9511,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -9514,8 +9521,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -9524,9 +9531,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -9544,8 +9551,8 @@ class IfcPavement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPavement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9554,8 +9561,8 @@ class IfcPavement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpavementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpavementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPavementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9564,8 +9571,8 @@ class IfcPavementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPcurve_DimIs2D: SCOPE = 'entity' @@ -9574,8 +9581,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -9584,9 +9591,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -9596,9 +9603,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -9608,7 +9615,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -9618,7 +9625,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -9628,8 +9635,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -9638,8 +9645,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -9648,8 +9655,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -9658,8 +9665,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -9668,8 +9675,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9678,8 +9685,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -9688,8 +9695,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -9698,8 +9705,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -9708,8 +9715,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -9718,7 +9725,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -9728,7 +9735,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -9738,7 +9745,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -9748,7 +9755,7 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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: @@ -9758,14 +9765,14 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_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) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -9774,8 +9781,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -9784,8 +9791,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -9794,8 +9801,8 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPoint_Dim(self): return IfcPointDim(self) @@ -9807,8 +9814,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -9817,8 +9824,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -9827,7 +9834,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x3_add1.ifcpolyline', 'ifc4x3_add1.ifccompositecurve', 'ifc4x3_add1.ifcindexedpolycurve']) == 1) is not False class IfcPolyline_SameDim: @@ -9837,8 +9844,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolynomialCurve_CorrectPositionDim: SCOPE = 'entity' @@ -9847,9 +9854,9 @@ class IfcPolynomialCurve_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 + position = express_getattr(self, 'Position', INDETERMINATE) + coefficientsz = express_getattr(self, 'CoefficientsZ', INDETERMINATE) + assert (express_getattr(position, 'Dim', INDETERMINATE) == 2 and (not exists(coefficientsz)) or express_getattr(position, 'Dim', INDETERMINATE) == 3) is not False class IfcPolynomialCurve_ValidCoefficients: SCOPE = 'entity' @@ -9858,9 +9865,9 @@ class IfcPolynomialCurve_ValidCoefficients: @staticmethod def __call__(self): - coefficientsx = getattr(self, 'CoefficientsX', INDETERMINATE) - coefficientsy = getattr(self, 'CoefficientsY', INDETERMINATE) - coefficientsz = getattr(self, 'CoefficientsZ', INDETERMINATE) + coefficientsx = express_getattr(self, 'CoefficientsX', INDETERMINATE) + coefficientsy = express_getattr(self, 'CoefficientsY', INDETERMINATE) + coefficientsz = express_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: @@ -9870,7 +9877,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -9879,13 +9886,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -9895,7 +9902,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_add1.ifcshaperepresentation', 'ifc4x3_add1.ifcgeometricrepresentationitem', 'ifc4x3_add1.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -9905,7 +9912,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_add1.ifcgeometricrepresentationitem', 'ifc4x3_add1.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_CorrectPredefinedType: @@ -9915,8 +9922,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedure_HasName: SCOPE = 'entity' @@ -9925,7 +9932,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9934,8 +9941,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -9944,9 +9951,9 @@ class IfcProduct_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_add1.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3_add1.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -9955,7 +9962,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_add1.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_CorrectContext: @@ -9965,7 +9972,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_add1.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_add1.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_HasName: SCOPE = 'entity' @@ -9974,7 +9981,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -9983,7 +9990,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -9992,8 +9999,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcProjectionElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10002,8 +10009,8 @@ class IfcProjectionElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: SCOPE = 'entity' @@ -10012,8 +10019,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: @@ -10023,8 +10030,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -10034,8 +10041,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -10045,8 +10052,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -10056,9 +10063,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -10067,7 +10074,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -10076,7 +10083,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -10085,7 +10092,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -10094,7 +10101,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -10104,7 +10111,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -10113,7 +10120,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -10123,8 +10130,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -10134,8 +10141,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -10144,8 +10151,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10154,8 +10161,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10164,8 +10171,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -10174,8 +10181,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -10184,8 +10191,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -10194,8 +10201,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10204,8 +10211,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -10214,8 +10221,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -10224,8 +10231,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -10234,8 +10241,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -10244,7 +10251,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -10253,7 +10260,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -10263,7 +10270,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0) is not False class IfcQuantityLength_WR21: @@ -10273,7 +10280,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -10282,7 +10289,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -10292,7 +10299,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -10301,7 +10308,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -10311,7 +10318,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -10320,7 +10327,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -10330,7 +10337,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -10339,7 +10346,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRail_CorrectPredefinedType: @@ -10349,8 +10356,8 @@ class IfcRail_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRail_CorrectTypeAssigned: SCOPE = 'entity' @@ -10359,8 +10366,8 @@ class IfcRail_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcrailtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcrailtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailType_CorrectPredefinedType: SCOPE = 'entity' @@ -10369,8 +10376,8 @@ class IfcRailType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailing_CorrectPredefinedType: SCOPE = 'entity' @@ -10379,8 +10386,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -10389,8 +10396,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -10399,8 +10406,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailway_CorrectPredefinedType: SCOPE = 'entity' @@ -10409,8 +10416,8 @@ class IfcRailway_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailwayPart_CorrectPredefinedType: SCOPE = 'entity' @@ -10419,8 +10426,8 @@ class IfcRailwayPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -10429,8 +10436,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -10439,8 +10446,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10449,8 +10456,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10459,8 +10466,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10469,8 +10476,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -10479,8 +10486,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -10489,8 +10496,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -10502,8 +10509,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -10512,8 +10519,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -10525,9 +10532,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidInnerRadius: @@ -10537,9 +10544,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -10548,8 +10555,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangleHollowProfileDef_ValidWallThickness: SCOPE = 'entity' @@ -10558,8 +10565,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -10568,8 +10575,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -10579,10 +10586,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x3_add1.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x3_add1.ifcplane' in typeof(basissurface)) or 'ifc4x3_add1.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -10592,8 +10599,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -10603,9 +10610,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcedSoil_CorrectPredefinedType: @@ -10615,8 +10622,8 @@ class IfcReinforcedSoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectPredefinedType: SCOPE = 'entity' @@ -10625,8 +10632,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -10635,8 +10642,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10645,8 +10652,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingBarType_CorrectPredefinedType: @@ -10656,8 +10663,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectPredefinedType: SCOPE = 'entity' @@ -10666,8 +10673,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -10676,8 +10683,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10686,8 +10693,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMeshType_CorrectPredefinedType: @@ -10697,8 +10704,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRelAggregates_NoSelfReference: SCOPE = 'entity' @@ -10707,8 +10714,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -10718,8 +10725,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -10728,8 +10735,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -10738,8 +10745,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -10748,8 +10755,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -10758,8 +10765,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -10768,8 +10775,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -10778,7 +10785,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_add1.ifcelement', 'ifc4x3_add1.ifcelementtype', 'ifc4x3_add1.ifcstructuralmember', 'ifc4x3_add1.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_add1.ifcelement', 'ifc4x3_add1.ifcelementtype', 'ifc4x3_add1.ifcstructuralmember', 'ifc4x3_add1.ifcport']) == 0]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -10787,7 +10794,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_add1.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_add1.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_add1.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_add1.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -10796,8 +10803,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -10807,7 +10814,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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: @@ -10817,7 +10824,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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: @@ -10827,8 +10834,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -10838,7 +10845,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_add1.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -10848,8 +10855,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -10859,7 +10866,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_add1.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_add1.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -10868,8 +10875,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -10879,8 +10886,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -10890,8 +10897,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -10901,7 +10908,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_add1.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x3_add1.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -10911,8 +10918,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -10922,9 +10929,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -10933,9 +10940,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_add1.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_add1.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_add1.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_add1.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_add1.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_add1.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -10944,7 +10951,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -10954,7 +10961,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x3_add1.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: @@ -10964,8 +10971,8 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisStartInXY: SCOPE = 'entity' @@ -10974,12 +10981,12 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert ('ifc4x3_add1.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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert ('ifc4x3_add1.ifccartesianpoint' in typeof(express_getattr(axis, 'Location', INDETERMINATE)) and express_getitem(express_getattr(express_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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -10988,7 +10995,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRigidOperation_SameCoordinateType: SCOPE = 'entity' @@ -10997,8 +11004,8 @@ class IfcRigidOperation_SameCoordinateType: @staticmethod def __call__(self): - firstcoordinate = getattr(self, 'FirstCoordinate', INDETERMINATE) - secondcoordinate = getattr(self, 'SecondCoordinate', INDETERMINATE) + firstcoordinate = express_getattr(self, 'FirstCoordinate', INDETERMINATE) + secondcoordinate = express_getattr(self, 'SecondCoordinate', INDETERMINATE) assert ('ifc4x3_add1.ifclengthmeasure' in typeof(firstcoordinate) and 'ifc4x3_add1.ifclengthmeasure' in typeof(secondcoordinate) or ('ifc4x3_add1.ifcplaneanglemeasure' in typeof(firstcoordinate) and 'ifc4x3_add1.ifcplaneanglemeasure' in typeof(secondcoordinate))) is not False class IfcRoad_CorrectPredefinedType: @@ -11008,8 +11015,8 @@ class IfcRoad_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoadPart_CorrectPredefinedType: SCOPE = 'entity' @@ -11018,8 +11025,8 @@ class IfcRoadPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -11028,8 +11035,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -11038,8 +11045,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -11048,8 +11055,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -11058,11 +11065,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSIUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSIUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11071,8 +11078,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11081,8 +11088,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11091,8 +11098,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -11101,7 +11108,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -11110,7 +11117,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -11119,8 +11126,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -11129,8 +11136,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -11139,7 +11146,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -11149,8 +11156,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -11160,8 +11167,8 @@ class IfcSectionedSolidHorizontal_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_ConsistentProfileTypes: SCOPE = 'entity' @@ -11170,8 +11177,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11180,8 +11187,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_SpineCurveDim: @@ -11191,8 +11198,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -11204,8 +11211,8 @@ class IfcSectionedSurface_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(temp, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)]) == 0) is not False class IfcSectionedSurface_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11214,8 +11221,8 @@ class IfcSectionedSurface_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSurface_DirectrixIs3D: @@ -11225,8 +11232,8 @@ class IfcSectionedSurface_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSurface_NoOffsets: SCOPE = 'entity' @@ -11235,8 +11242,8 @@ class IfcSectionedSurface_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLateral', INDETERMINATE)) or exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetVertical', INDETERMINATE)) or exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSurface_SectionsSameType: SCOPE = 'entity' @@ -11245,7 +11252,7 @@ class IfcSectionedSurface_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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): @@ -11258,8 +11265,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -11268,8 +11275,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11278,8 +11285,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11288,8 +11295,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11298,8 +11305,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11308,8 +11315,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -11318,8 +11325,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -11328,7 +11335,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x3_add1.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x3_add1.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -11337,7 +11344,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -11346,7 +11353,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationType: SCOPE = 'entity' @@ -11355,7 +11362,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -11364,7 +11371,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x3_add1.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x3_add1.ifcvertexpoint', 'ifc4x3_add1.ifcedgecurve', 'ifc4x3_add1.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): @@ -11377,8 +11384,8 @@ class IfcSign_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSign_CorrectTypeAssigned: SCOPE = 'entity' @@ -11387,8 +11394,8 @@ class IfcSign_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsigntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsigntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignType_CorrectPredefinedType: SCOPE = 'entity' @@ -11397,8 +11404,8 @@ class IfcSignType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSignal_CorrectPredefinedType: SCOPE = 'entity' @@ -11407,8 +11414,8 @@ class IfcSignal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSignal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11417,8 +11424,8 @@ class IfcSignal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsignaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsignaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11427,8 +11434,8 @@ class IfcSignalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSlab_CorrectPredefinedType: SCOPE = 'entity' @@ -11437,8 +11444,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -11447,8 +11454,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -11457,8 +11464,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11467,8 +11474,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11477,8 +11484,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11487,8 +11494,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -11500,8 +11507,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -11510,8 +11517,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -11520,8 +11527,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -11530,8 +11537,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -11540,8 +11547,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11550,8 +11557,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -11560,7 +11567,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_add1.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_add1.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_add1.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_add1.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_add1.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_add1.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -11569,8 +11576,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -11579,8 +11586,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -11589,8 +11596,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11599,8 +11606,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11609,8 +11616,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11619,8 +11626,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -11629,8 +11636,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -11639,8 +11646,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -11649,8 +11656,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -11659,8 +11666,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -11669,8 +11676,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -11679,8 +11686,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_CorrectPredefinedType: SCOPE = 'entity' @@ -11689,8 +11696,8 @@ class IfcStructuralAnalysisModel_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -11699,8 +11706,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11709,8 +11716,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -11719,8 +11726,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -11729,8 +11736,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -11739,8 +11746,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -11749,8 +11756,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -11759,7 +11766,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -11768,7 +11775,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add1.ifcstructuralloadlinearforce', 'ifc4x3_add1.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add1.ifcstructuralloadlinearforce', 'ifc4x3_add1.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -11777,7 +11784,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -11786,8 +11793,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -11797,10 +11804,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -11809,7 +11816,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -11818,7 +11825,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add1.ifcstructuralloadplanarforce', 'ifc4x3_add1.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add1.ifcstructuralloadplanarforce', 'ifc4x3_add1.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -11827,7 +11834,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add1.ifcstructuralloadsingleforce', 'ifc4x3_add1.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add1.ifcstructuralloadsingleforce', 'ifc4x3_add1.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -11836,7 +11843,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add1.ifcstructuralloadsingleforce', 'ifc4x3_add1.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add1.ifcstructuralloadsingleforce', 'ifc4x3_add1.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -11845,8 +11852,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -11855,8 +11862,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11865,8 +11872,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -11875,8 +11882,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -11885,8 +11892,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -11895,7 +11902,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x3_add1.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -11905,7 +11912,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_add1.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_add1.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -11914,8 +11921,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11924,8 +11931,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -11937,8 +11944,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -11947,7 +11954,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x3_add1.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -11960,8 +11967,8 @@ class IfcSurfaceFeature_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -11970,17 +11977,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_NonnegativeArea1: SCOPE = 'entity' @@ -11989,7 +11996,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -11999,7 +12006,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -12009,7 +12016,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @@ -12019,9 +12026,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceStyle_MaxOneExtDefined: @@ -12031,7 +12038,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -12040,7 +12047,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -12049,7 +12056,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneShading: SCOPE = 'entity' @@ -12058,7 +12065,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -12067,7 +12074,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add1.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -12076,8 +12083,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixBounded: SCOPE = 'entity' @@ -12086,9 +12093,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_add1.ifcconic', 'ifc4x3_add1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolid_DirectrixDim: @@ -12098,8 +12105,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -12108,8 +12115,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -12119,8 +12126,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -12129,7 +12136,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x3_add1.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_add1.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x3_add1.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_add1.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -12138,8 +12145,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -12148,8 +12155,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -12158,8 +12165,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -12168,8 +12175,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12178,8 +12185,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12188,8 +12195,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12198,8 +12205,8 @@ class IfcSystemFurnitureElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12208,8 +12215,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -12219,8 +12226,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -12230,8 +12237,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -12240,20 +12247,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -12262,8 +12269,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -12272,8 +12279,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -12282,8 +12289,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -12292,8 +12299,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -12302,7 +12309,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -12311,8 +12318,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -12321,12 +12328,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -12336,8 +12343,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -12346,8 +12353,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -12356,8 +12363,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -12366,8 +12373,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12376,8 +12383,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -12386,8 +12393,8 @@ class IfcTendonConduit_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, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -12396,8 +12403,8 @@ class IfcTendonConduit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -12406,8 +12413,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -12416,8 +12423,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -12429,7 +12436,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x3_add1.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -12439,7 +12446,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x3_add1.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x3_add1.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -12448,7 +12455,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_add1.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_add1.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -12457,7 +12464,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -12466,7 +12473,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -12475,8 +12482,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTrackElement_CorrectPredefinedType: @@ -12486,8 +12493,8 @@ class IfcTrackElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTrackElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12496,8 +12503,8 @@ class IfcTrackElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctrackelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctrackelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTrackElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12506,8 +12513,8 @@ class IfcTrackElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransformer_CorrectPredefinedType: SCOPE = 'entity' @@ -12516,8 +12523,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -12526,8 +12533,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctransformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctransformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -12536,8 +12543,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12546,8 +12553,8 @@ class IfcTransportElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12556,8 +12563,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12566,11 +12573,11 @@ class IfcTransportElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -12580,7 +12587,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_NoTrimOfBoundedCurves: SCOPE = 'entity' @@ -12589,7 +12596,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x3_add1.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: @@ -12599,7 +12606,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -12609,7 +12616,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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: @@ -12619,8 +12626,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12629,8 +12636,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12639,8 +12646,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -12649,7 +12656,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -12658,7 +12665,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -12668,7 +12675,7 @@ class IfcTypeProduct_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_add1.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x3_add1.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12677,8 +12684,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -12688,8 +12695,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -12699,7 +12706,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -12709,8 +12716,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12719,8 +12726,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12729,8 +12736,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -12739,8 +12746,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -12749,8 +12756,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -12759,8 +12766,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -12769,8 +12776,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -12779,8 +12786,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -12789,8 +12796,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -12799,12 +12806,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVehicle_CorrectPredefinedType: SCOPE = 'entity' @@ -12813,8 +12820,8 @@ class IfcVehicle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVehicle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12823,8 +12830,8 @@ class IfcVehicle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcvehicletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcvehicletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVehicleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12833,8 +12840,8 @@ class IfcVehicleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -12843,8 +12850,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -12853,8 +12860,8 @@ class IfcVibrationDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -12863,8 +12870,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -12873,8 +12880,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -12883,8 +12890,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12893,8 +12900,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVirtualElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12903,8 +12910,8 @@ class IfcVirtualElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVoidingFeature_CorrectPredefinedType: SCOPE = 'entity' @@ -12913,8 +12920,8 @@ class IfcVoidingFeature_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -12923,8 +12930,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -12933,8 +12940,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -12943,7 +12950,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_add1.ifcrelassociates.relatedobjects') if 'ifc4x3_add1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_add1.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_add1.ifcrelassociates.relatedobjects') if 'ifc4x3_add1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_add1.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -12952,8 +12959,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -12962,8 +12969,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -12972,8 +12979,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -12982,8 +12989,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectPredefinedType: SCOPE = 'entity' @@ -12992,8 +12999,8 @@ class IfcWindow_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWindow_CorrectTypeAssigned: SCOPE = 'entity' @@ -13002,8 +13009,8 @@ class IfcWindow_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add1.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -13012,8 +13019,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -13023,8 +13030,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -13034,8 +13041,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -13045,7 +13052,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add1.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add1.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -13054,7 +13061,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add1.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add1.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -13063,8 +13070,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -13073,8 +13080,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -13083,8 +13090,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -13093,8 +13100,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -13103,8 +13110,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -13114,19 +13121,19 @@ class IfcZone_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_add1.ifczone' in typeof(temp) or 'ifc4x3_add1.ifcspace' in typeof(temp) or 'ifc4x3_add1.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x3_add1.ifczone' in typeof(temp) or 'ifc4x3_add1.ifcspace' in typeof(temp) or 'ifc4x3_add1.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -13136,11 +13143,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -13154,13 +13161,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -13178,7 +13185,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -13215,11 +13222,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -13399,7 +13406,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x3_add1.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x3_add1.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -13412,26 +13419,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_add1.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_add1.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_add1.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_add1.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x3_add1.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x3_add1.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_add1.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) + if 'ifc4x3_add1.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x3_add1.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13440,21 +13447,21 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x3_add1.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add1.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add1.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add1.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x3_add1.ifcgradientcurve' in typeof(curve): return 3 if 'ifc4x3_add1.ifcsegmentedreferencecurve' in typeof(curve): return 3 if 'ifc4x3_add1.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add1.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add1.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x3_add1.ifcoffsetcurve3d' in typeof(curve): @@ -13464,19 +13471,19 @@ def IfcCurveDim(curve): if 'ifc4x3_add1.ifccurvesegment2d' in typeof(curve): return 2 if 'ifc4x3_add1.ifcpolynomialcurve' in typeof(curve): - if not exists(getattr(curve, 'CoefficientsZ', INDETERMINATE)) and getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: + if not exists(express_getattr(curve, 'CoefficientsZ', INDETERMINATE)) and express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: return 2 return 3 if 'ifc4x3_add1.ifcpcurve' in typeof(curve): return 3 if 'ifc4x3_add1.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -13484,13 +13491,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSIUnit(n): @@ -13560,15 +13567,15 @@ def IfcDimensionsForSIUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -13577,42 +13584,42 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x3_add1.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x3_add1.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x3_add1.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - if 'ifc4x3_add1.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_add1.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)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + if 'ifc4x3_add1.ifccurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + if 'ifc4x3_add1.ifccompositecurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - if 'ifc4x3_add1.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_add1.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)) + if 'ifc4x3_add1.ifccurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + if 'ifc4x3_add1.ifccompositecurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcListToArray(lis, low, u): @@ -13629,9 +13636,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -13649,10 +13656,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -13663,25 +13670,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x3_add1.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x3_add1.ifcvector' in typeof(arg): vec.Orientation = v @@ -13693,29 +13700,29 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointDim(point): if 'ifc4x3_add1.ifccartesianpoint' in typeof(point): - return hiindex(getattr(point, 'Coordinates', INDETERMINATE)) + return hiindex(express_getattr(point, 'Coordinates', INDETERMINATE)) if 'ifc4x3_add1.ifcpointbydistanceexpression' in typeof(point): - return getattr(getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add1.ifcpointoncurve' in typeof(point): - return getattr(getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add1.ifcpointonsurface' in typeof(point): - return getattr(getattr(point, 'BasisSurface', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisSurface', INDETERMINATE), 'Dim', INDETERMINATE) return None def IfcPointListDim(pointlist): @@ -13726,32 +13733,32 @@ def IfcPointListDim(pointlist): 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) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -13772,15 +13779,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x3_add1.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -13796,82 +13803,82 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcSegmentDim(segment): if 'ifc4x3_add1.ifccurvesegment' in typeof(segment): - return getattr(getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add1.ifccompositecurvesegment' in typeof(segment): - return getattr(getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) return None def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x3_add1.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_add1.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'segment': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x3_add1.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x3_add1.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'segment': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcsegment' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x3_add1.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_add1.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedsurface': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcsectionedsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x3_add1.ifcpoint', 'ifc4x3_add1.ifccurve', 'ifc4x3_add1.ifcgeometriccurveset', 'ifc4x3_add1.ifcannotationfillarea', 'ifc4x3_add1.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcgeometricset' in typeof(temp) or 'ifc4x3_add1.ifcpoint' in typeof(temp) or 'ifc4x3_add1.ifccurve' in typeof(temp) or ('ifc4x3_add1.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcgeometriccurveset' in typeof(temp) or 'ifc4x3_add1.ifcgeometricset' in typeof(temp) or 'ifc4x3_add1.ifcpoint' in typeof(temp) or ('ifc4x3_add1.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x3_add1.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_add1.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x3_add1.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_add1.ifctessellateditem', 'ifc4x3_add1.ifcshellbasedsurfacemodel', 'ifc4x3_add1.ifcfacebasedsurfacemodel', 'ifc4x3_add1.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_add1.ifctessellateditem', 'ifc4x3_add1.ifcshellbasedsurfacemodel', 'ifc4x3_add1.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_add1.ifcextrudedareasolid', 'ifc4x3_add1.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x3_add1.ifcextrudedareasolidtapered', 'ifc4x3_add1.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_add1.ifcsweptareasolid', 'ifc4x3_add1.ifcsweptdisksolid', 'ifc4x3_add1.ifcsectionedsolidhorizontal'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x3_add1.ifcbooleanresult', 'ifc4x3_add1.ifccsgprimitive3d', 'ifc4x3_add1.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x3_add1.ifccsgsolid', 'ifc4x3_add1.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcmappeditem' in typeof(temp)]) else: return None @@ -13879,9 +13886,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -13891,28 +13898,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x3_add1.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x3_add1.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x3_add1.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x3_add1.ifcopenshell' in typeof(temp) or 'ifc4x3_add1.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -13923,7 +13930,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x3_add1.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x3_add1.ifcpropertysetdefinitionset' in typeof(definition): @@ -13936,7 +13943,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -13944,7 +13951,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x3_add1.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -13952,41 +13959,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_add1.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_add1.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13994,31 +14001,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_add1.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_add1.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py index 2b09aad1cf..5e6f27dd99 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,2367 +147,2367 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) +railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_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) +blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) +parabolicarc = express_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) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +contourline = express_getattr(IfcAnnotationTypeEnum, 'CONTOURLINE', INDETERMINATE) +dimension = express_getattr(IfcAnnotationTypeEnum, 'DIMENSION', INDETERMINATE) +isobar = express_getattr(IfcAnnotationTypeEnum, 'ISOBAR', INDETERMINATE) +isolux = express_getattr(IfcAnnotationTypeEnum, 'ISOLUX', INDETERMINATE) +isotherm = express_getattr(IfcAnnotationTypeEnum, 'ISOTHERM', INDETERMINATE) +leader = express_getattr(IfcAnnotationTypeEnum, 'LEADER', INDETERMINATE) +survey = express_getattr(IfcAnnotationTypeEnum, 'SURVEY', INDETERMINATE) +symbol = express_getattr(IfcAnnotationTypeEnum, 'SYMBOL', INDETERMINATE) +text = express_getattr(IfcAnnotationTypeEnum, 'TEXT', INDETERMINATE) +userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +modulo = express_getattr(IfcArithmeticOperatorEnum, 'MODULO', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +notdefined = express_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) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +unspecified = express_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) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +unspecified = express_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) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +notincludes = express_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) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +union = express_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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) +outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +railwayline = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE) +railwaytrack = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE) +reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) +shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) +trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) +transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +junction = express_getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +transition = express_getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) +fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) +opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) +stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) +wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) +ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) +linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) +opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) +telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) +transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) +transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) +transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_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) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +notdefined = express_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) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) +bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) +chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) +screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) +userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) +ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) +core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) +filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) +pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) +protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +topping = express_getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_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) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) +elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +filler = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE) +flashing = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE) +insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) +lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) +panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) +pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) +point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) +railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) +railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) +rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) +rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) +soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) +tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) +distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) +monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) +overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_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) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_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) +boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +double_door_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_LIFTING_VERTICAL', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) +lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) +lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) +revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) +revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) +cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) +dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) +excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) +overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) +pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) +stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) +topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) +trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) +counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) +embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) +slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) +subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) +subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) +transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) +entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) +mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) +signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) +supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) +suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) +trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) +traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) +traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) +belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) +junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) +levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) +segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) +substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) +longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) +region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) +vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_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) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +vegetation = express_getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solid = express_getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE) +void = express_getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE) +water = express_getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE) +userdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_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) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) +crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) +dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) +fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) +userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +notdefined = express_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) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKerbTypeEnum = enum_namespace() -userdefined = getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcKerbTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_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) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) +userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_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) +barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) +breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) +canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) +drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) +floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) +hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) +jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) +launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) +marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) +navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) +port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) +quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) +revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) +shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) +shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) +shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) +slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) +waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) +waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) +userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) +anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) +approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) +belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) +berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) +chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) +cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) +copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) +core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) +crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) +gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) +gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) +highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) +landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) +leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) +lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) +manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) +navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) +protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) +shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) +storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) +vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) +waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) +weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) +userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) +railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) +basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) +basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) +e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) +gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) +masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) +mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) +mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) +packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) +remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) +remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) +service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) +subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) +userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) +linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) +magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) +mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) +vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) +userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) +buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) +userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) +rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) +userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +pset_materialdriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +pset_profiledriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +notdefined = express_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) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) +checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) +rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) +rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) +stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abovetrack = express_getattr(IfcRailwayPartTypeEnum, 'ABOVETRACK', INDETERMINATE) +dilationtrack = express_getattr(IfcRailwayPartTypeEnum, 'DILATIONTRACK', INDETERMINATE) +lineside = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDE', INDETERMINATE) +linesidepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDEPART', INDETERMINATE) +plaintrack = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACK', INDETERMINATE) +substructure = express_getattr(IfcRailwayPartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +track = express_getattr(IfcRailwayPartTypeEnum, 'TRACK', INDETERMINATE) +trackpart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKPART', INDETERMINATE) +turnouttrack = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTTRACK', INDETERMINATE) +userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayTypeEnum = enum_namespace() -userdefined = getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_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) +boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) +intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) +referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +superelevationevent = express_getattr(IfcReferentTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) +widthevent = express_getattr(IfcReferentTypeEnum, 'WIDTHEVENT', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +physical = express_getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_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) +dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) +grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) +replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) +rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) +surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) +verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) +bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) +carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) +centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) +centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) +hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) +intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) +layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) +parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) +passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) +pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) +railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) +refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) +roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) +roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) +roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) +roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) +roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) +shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) +sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) +softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) +tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) +trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) +trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) +userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadTypeEnum = enum_namespace() -userdefined = getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +userdefined = express_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) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +tera = express_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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_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) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) +turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) +wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) +mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) +pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) +userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) +mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) +visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) +userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_number = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_weight = express_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) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readwritelocked = express_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) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) +linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) +pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) +rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) +symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +positive = express_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) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_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) +adjustment = express_getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +calibration = express_getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +emergency = express_getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE) +inspection = express_getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +safety = express_getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE) +shutdown = express_getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE) +testing = express_getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE) +troubleshooting = express_getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_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) +blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) +derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) +frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) +half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) +sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) +speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) +trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) +vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) +userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) +combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_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) +craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) +elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) +haulinggear = express_getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_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) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) +combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cargo = express_getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE) +rollingstock = express_getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) +vehicle = express_getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE) +vehicleair = express_getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE) +vehiclemarine = express_getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE) +vehicletracked = express_getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE) +vehiclewheeled = express_getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) +userdefined = express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +boundary = express_getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE) +clearance = express_getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE) +provisionforvoid = express_getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +userdefined = express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +notdefined = express_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) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_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) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_ADD2', *args, **kwargs) @@ -5137,7 +5144,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -5218,7 +5225,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -5227,7 +5234,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -5236,7 +5243,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -5335,7 +5342,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -5344,7 +5351,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -5353,7 +5360,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -5362,8 +5369,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -5372,8 +5379,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -5382,8 +5389,8 @@ class IfcActuator_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -5392,8 +5399,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -5402,8 +5409,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -5412,7 +5419,7 @@ class IfcAdvancedBrep_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 + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_add2.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -5421,8 +5428,8 @@ class IfcAdvancedBrepWithVoids_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 + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3_add2.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -5431,7 +5438,7 @@ class IfcAdvancedFace_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 + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_add2.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3_add2.ifcline', 'ifc4x3_add2.ifcconic', 'ifc4x3_add2.ifcpolyline', 'ifc4x3_add2.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -5440,7 +5447,7 @@ class IfcAdvancedFace_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 + assert (sizeof(['ifc4x3_add2.ifcelementarysurface', 'ifc4x3_add2.ifcsweptsurface', 'ifc4x3_add2.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -5449,7 +5456,7 @@ class IfcAdvancedFace_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 + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_add2.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_add2.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -5458,8 +5465,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -5468,8 +5475,8 @@ class IfcAirTerminal_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -5478,8 +5485,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -5488,8 +5495,8 @@ class IfcAirTerminalBox_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -5498,8 +5505,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -5508,8 +5515,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -5518,8 +5525,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -5528,8 +5535,8 @@ class IfcAirToAirHeatRecovery_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -5538,8 +5545,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -5548,8 +5555,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -5558,8 +5565,8 @@ class IfcAlarm_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -5568,8 +5575,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -5578,8 +5585,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5589,8 +5596,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5599,7 +5606,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_add2.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5609,7 +5616,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_add2.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5619,7 +5626,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x3_add2.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x3_add2.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5628,8 +5635,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5638,7 +5645,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5647,8 +5654,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5657,7 +5664,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_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: @@ -5667,9 +5674,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5679,9 +5686,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5691,9 +5698,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5703,9 +5710,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5715,8 +5722,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5725,8 +5732,8 @@ class IfcAudioVisualAppliance_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5735,8 +5742,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5745,8 +5752,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5755,7 +5762,7 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIsCP: SCOPE = 'entity' @@ -5764,10 +5771,10 @@ class IfcAxis1Placement_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_add2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_add2.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_LocationIs2D: @@ -5777,7 +5784,7 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIsCP: SCOPE = 'entity' @@ -5786,7 +5793,7 @@ class IfcAxis2Placement2D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_add2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_add2.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2Placement2D_RefDirIs2D: SCOPE = 'entity' @@ -5795,11 +5802,11 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_AxisAndRefDirProvision: @@ -5809,8 +5816,8 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False class IfcAxis2Placement3D_AxisIs3D: @@ -5820,8 +5827,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5830,9 +5837,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_LocationIs3D: SCOPE = 'entity' @@ -5841,7 +5848,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_LocationIsCP: SCOPE = 'entity' @@ -5850,7 +5857,7 @@ class IfcAxis2Placement3D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_add2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_add2.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5859,12 +5866,12 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcAxis2PlacementLinear_WR1: @@ -5874,7 +5881,7 @@ class IfcAxis2PlacementLinear_WR1: @staticmethod def __call__(self): - assert ('ifc4x3_add2.ifcpointbydistanceexpression' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_add2.ifcpointbydistanceexpression' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2PlacementLinear_WR2: SCOPE = 'entity' @@ -5883,9 +5890,9 @@ class IfcAxis2PlacementLinear_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcBSplineCurve_SameDim: SCOPE = 'entity' @@ -5894,16 +5901,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5913,11 +5920,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5927,26 +5934,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_CorrespondingULists: @@ -5956,8 +5963,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -5967,8 +5974,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5978,10 +5985,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5990,17 +5997,17 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -6010,8 +6017,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6020,8 +6027,8 @@ class IfcBeam_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6030,8 +6037,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -6040,8 +6047,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -6050,8 +6057,8 @@ class IfcBearing_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6060,8 +6067,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -6070,7 +6077,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBlobTexture_SupportedRasterFormat: @@ -6080,7 +6087,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBoiler_CorrectPredefinedType: SCOPE = 'entity' @@ -6089,8 +6096,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6099,8 +6106,8 @@ class IfcBoiler_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6109,8 +6116,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -6119,7 +6126,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_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: @@ -6129,7 +6136,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -6139,7 +6146,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x3_add2.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanResult_FirstOperandClosed: @@ -6149,8 +6156,8 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x3_add2.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SameDim: SCOPE = 'entity' @@ -6159,9 +6166,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -6170,12 +6177,12 @@ class IfcBooleanResult_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 + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x3_add2.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -6184,7 +6191,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -6196,7 +6203,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x3_add2.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x3_add2.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBridge_CorrectPredefinedType: SCOPE = 'entity' @@ -6205,8 +6212,8 @@ class IfcBridge_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBridgePart_CorrectPredefinedType: SCOPE = 'entity' @@ -6215,8 +6222,8 @@ class IfcBridgePart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -6225,8 +6232,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -6235,8 +6242,8 @@ class IfcBuildingElementPart_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -6245,8 +6252,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -6255,8 +6262,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -6265,8 +6272,8 @@ class IfcBuildingElementProxy_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -6275,7 +6282,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6284,8 +6291,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6294,8 +6301,8 @@ class IfcBuildingSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuiltElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -6304,7 +6311,7 @@ class IfcBuiltElement_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 + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_add2.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuiltSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6313,8 +6320,8 @@ class IfcBuiltSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -6323,8 +6330,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -6333,8 +6340,8 @@ class IfcBurner_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6343,8 +6350,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -6353,8 +6360,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -6364,10 +6371,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -6377,9 +6384,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -6389,8 +6396,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6399,8 +6406,8 @@ class IfcCableCarrierFitting_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6409,8 +6416,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6419,8 +6426,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6429,8 +6436,8 @@ class IfcCableCarrierSegment_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6439,8 +6446,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6449,8 +6456,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6459,8 +6466,8 @@ class IfcCableFitting_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6469,8 +6476,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6479,8 +6486,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6489,8 +6496,8 @@ class IfcCableSegment_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6499,8 +6506,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -6509,8 +6516,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6519,8 +6526,8 @@ class IfcCaissonFoundation_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -6529,8 +6536,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -6539,7 +6546,7 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPointList_Dim(self): @@ -6552,16 +6559,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -6570,7 +6577,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -6579,7 +6586,7 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -6588,10 +6595,10 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_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) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6600,12 +6607,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -6614,7 +6621,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -6623,7 +6630,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -6632,8 +6639,8 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -6642,11 +6649,11 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6655,7 +6662,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6665,16 +6672,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6683,8 +6690,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6693,8 +6700,8 @@ class IfcChiller_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6703,8 +6710,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6713,8 +6720,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6723,8 +6730,8 @@ class IfcChimney_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6733,8 +6740,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6743,8 +6750,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6753,8 +6760,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6763,8 +6770,8 @@ class IfcCoil_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6773,8 +6780,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6783,8 +6790,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6793,8 +6800,8 @@ class IfcColumn_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6803,8 +6810,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6813,8 +6820,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6823,8 +6830,8 @@ class IfcCommunicationsAppliance_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6833,8 +6840,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6843,7 +6850,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6853,7 +6860,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6863,7 +6870,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6873,7 +6880,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcCompositeCurve_CurveContinuous: @@ -6883,9 +6890,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6894,17 +6901,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6913,7 +6920,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6926,7 +6933,7 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x3_add2.ifcboundedcurve' in typeof(parentcurve)) is not False class IfcCompositeProfileDef_InvariantProfileType: @@ -6936,8 +6943,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6946,7 +6953,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_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: @@ -6956,8 +6963,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6966,8 +6973,8 @@ class IfcCompressor_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6976,8 +6983,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -6986,8 +6993,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -6996,8 +7003,8 @@ class IfcCondenser_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -7006,8 +7013,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -7016,8 +7023,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7026,8 +7033,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7036,8 +7043,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7046,8 +7053,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7056,8 +7063,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7066,8 +7073,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7076,8 +7083,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -7086,8 +7093,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -7096,8 +7103,8 @@ class IfcController_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7106,8 +7113,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7116,8 +7123,8 @@ class IfcConveyorSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7126,8 +7133,8 @@ class IfcConveyorSegment_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcconveyorsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcConveyorSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7136,8 +7143,8 @@ class IfcConveyorSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -7146,8 +7153,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -7156,8 +7163,8 @@ class IfcCooledBeam_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -7166,8 +7173,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -7176,8 +7183,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -7186,8 +7193,8 @@ class IfcCoolingTower_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7196,8 +7203,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoordinateReferenceSystem_NameOrWKT: SCOPE = 'entity' @@ -7206,8 +7213,8 @@ class IfcCoordinateReferenceSystem_NameOrWKT: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - wellknowntext = getattr(self, 'WellKnownText', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + wellknowntext = express_getattr(self, 'WellKnownText', INDETERMINATE) assert (hiindex(wellknowntext) == 1 or exists(name)) is not False class IfcCourse_CorrectPredefinedType: @@ -7217,8 +7224,8 @@ class IfcCourse_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCourse_CorrectTypeAssigned: SCOPE = 'entity' @@ -7227,8 +7234,8 @@ class IfcCourse_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccoursetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCourseType_CorrectPredefinedType: SCOPE = 'entity' @@ -7237,8 +7244,8 @@ class IfcCourseType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -7247,8 +7254,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -7257,8 +7264,8 @@ class IfcCovering_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -7267,8 +7274,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7277,8 +7284,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7287,8 +7294,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -7300,8 +7307,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -7310,8 +7317,8 @@ class IfcCurtainWall_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -7320,8 +7327,8 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) @@ -7333,9 +7340,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyle_MeasureOfWidth: @@ -7345,7 +7352,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_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: @@ -7355,7 +7362,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -7365,8 +7372,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -7375,8 +7382,8 @@ class IfcDamper_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -7385,8 +7392,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -7395,8 +7402,8 @@ class IfcDeepFoundation_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -7405,8 +7412,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -7415,8 +7422,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -7425,11 +7432,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -7439,11 +7446,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @@ -7453,9 +7460,9 @@ class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_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: @@ -7465,8 +7472,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -7475,8 +7482,8 @@ class IfcDiscreteAccessory_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -7485,8 +7492,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7495,8 +7502,8 @@ class IfcDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7505,8 +7512,8 @@ class IfcDistributionBoard_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7515,8 +7522,8 @@ class IfcDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7525,8 +7532,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7535,8 +7542,8 @@ class IfcDistributionChamberElement_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7545,8 +7552,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -7555,8 +7562,8 @@ class IfcDistributionSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -7565,8 +7572,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectPredefinedType: @@ -7576,8 +7583,8 @@ class IfcDoor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDoor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7586,8 +7593,8 @@ class IfcDoor_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -7596,8 +7603,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -7607,8 +7614,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -7618,8 +7625,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -7629,8 +7636,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -7640,7 +7647,7 @@ class IfcDoorLiningProperties_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 + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add2.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -7649,7 +7656,7 @@ class IfcDoorPanelProperties_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 + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add2.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7658,8 +7665,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -7668,7 +7675,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -7677,7 +7684,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -7686,8 +7693,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7696,8 +7703,8 @@ class IfcDuctFitting_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7706,8 +7713,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7716,8 +7723,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7726,8 +7733,8 @@ class IfcDuctSegment_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7736,8 +7743,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -7746,8 +7753,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -7756,8 +7763,8 @@ class IfcDuctSilencer_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7766,8 +7773,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEarthworksCut_CorrectPredefinedType: SCOPE = 'entity' @@ -7776,8 +7783,8 @@ class IfcEarthworksCut_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEarthworksFill_CorrectPredefinedType: SCOPE = 'entity' @@ -7786,8 +7793,8 @@ class IfcEarthworksFill_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7796,9 +7803,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7810,7 +7817,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7820,8 +7827,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7830,8 +7837,8 @@ class IfcElectricAppliance_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7840,8 +7847,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7850,8 +7857,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7860,8 +7867,8 @@ class IfcElectricDistributionBoard_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7870,8 +7877,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7880,8 +7887,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7890,8 +7897,8 @@ class IfcElectricFlowStorageDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7900,8 +7907,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7910,8 +7917,8 @@ class IfcElectricFlowTreatmentDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7920,8 +7927,8 @@ class IfcElectricFlowTreatmentDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricflowtreatmentdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7930,8 +7937,8 @@ class IfcElectricFlowTreatmentDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7940,8 +7947,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7950,8 +7957,8 @@ class IfcElectricGenerator_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7960,8 +7967,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -7970,8 +7977,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7980,8 +7987,8 @@ class IfcElectricMotor_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7990,8 +7997,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -8000,8 +8007,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -8010,8 +8017,8 @@ class IfcElectricTimeControl_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -8020,8 +8027,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -8030,8 +8037,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -8040,8 +8047,8 @@ class IfcElementAssembly_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -8050,8 +8057,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -8060,7 +8067,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -8070,8 +8077,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -8080,8 +8087,8 @@ class IfcEngine_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -8090,8 +8097,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -8100,8 +8107,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -8110,8 +8117,8 @@ class IfcEvaporativeCooler_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8120,8 +8127,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -8130,8 +8137,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -8140,8 +8147,8 @@ class IfcEvaporator_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8150,8 +8157,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -8160,8 +8167,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -8170,9 +8177,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -8181,9 +8188,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -8192,8 +8199,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -8202,9 +8209,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -8214,7 +8221,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -8223,7 +8230,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -8232,7 +8239,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_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): @@ -8245,8 +8252,8 @@ class IfcFacilityPartCommon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectPredefinedType: SCOPE = 'entity' @@ -8255,8 +8262,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -8265,8 +8272,8 @@ class IfcFan_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -8275,8 +8282,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -8285,8 +8292,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8295,8 +8302,8 @@ class IfcFastener_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8305,8 +8312,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElement_NotContained: SCOPE = 'entity' @@ -8315,7 +8322,7 @@ class IfcFeatureElement_NotContained: @staticmethod def __call__(self): - containedinstructure = getattr(self, 'ContainedInStructure', INDETERMINATE) + containedinstructure = express_getattr(self, 'ContainedInStructure', INDETERMINATE) assert (sizeof(containedinstructure) == 0) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: @@ -8325,7 +8332,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -8334,7 +8341,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -8343,7 +8350,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -8352,7 +8359,7 @@ class IfcFillAreaStyle_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 + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_add2.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -8361,7 +8368,7 @@ class IfcFillAreaStyle_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 + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_add2.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -8370,8 +8377,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -8380,8 +8387,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -8390,8 +8397,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8400,8 +8407,8 @@ class IfcFilter_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8410,8 +8417,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8420,8 +8427,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8430,8 +8437,8 @@ class IfcFireSuppressionTerminal_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8440,8 +8447,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectPredefinedType: SCOPE = 'entity' @@ -8450,8 +8457,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -8460,8 +8467,8 @@ class IfcFlowInstrument_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8470,8 +8477,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -8480,8 +8487,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8490,8 +8497,8 @@ class IfcFlowMeter_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8500,8 +8507,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -8510,8 +8517,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8520,8 +8527,8 @@ class IfcFooting_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8530,8 +8537,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -8540,8 +8547,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8550,8 +8557,8 @@ class IfcFurniture_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8560,8 +8567,8 @@ class IfcFurnitureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicCRS_AngleUnitIsPlaneAngle: SCOPE = 'entity' @@ -8570,7 +8577,7 @@ class IfcGeographicCRS_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 + assert (not exists(express_getattr(self, 'AngleUnit', INDETERMINATE)) or express_getattr(express_getattr(self, 'AngleUnit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE)) is not False class IfcGeographicCRS_HeightUnitIsLength: SCOPE = 'entity' @@ -8579,7 +8586,7 @@ class IfcGeographicCRS_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 + assert (not exists(express_getattr(self, 'HeightUnit', INDETERMINATE)) or express_getattr(express_getattr(self, 'HeightUnit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -8588,8 +8595,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -8598,8 +8605,8 @@ class IfcGeographicElement_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -8608,8 +8615,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -8618,7 +8625,7 @@ class IfcGeometricCurveSet_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 + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_add2.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -8627,8 +8634,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -8637,7 +8644,7 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -8646,7 +8653,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x3_add2.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -8656,25 +8663,25 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -8683,12 +8690,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGeotechnicalStratum_CorrectPredefinedType: SCOPE = 'entity' @@ -8697,8 +8704,8 @@ class IfcGeotechnicalStratum_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGridAxis_WR1: SCOPE = 'entity' @@ -8707,8 +8714,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -8717,9 +8724,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -8732,8 +8739,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -8742,8 +8749,8 @@ class IfcHeatExchanger_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8752,8 +8759,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -8762,8 +8769,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -8772,8 +8779,8 @@ class IfcHumidifier_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -8782,8 +8789,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFilletRadius: SCOPE = 'entity' @@ -8792,11 +8799,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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: @@ -8806,8 +8813,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -8817,8 +8824,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcImpactProtectionDevice_CorrectPredefinedType: @@ -8828,8 +8835,8 @@ class IfcImpactProtectionDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcImpactProtectionDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8838,8 +8845,8 @@ class IfcImpactProtectionDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcimpactprotectiondevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcImpactProtectionDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8848,8 +8855,8 @@ class IfcImpactProtectionDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIndexedPolyCurve_Consecutive: SCOPE = 'entity' @@ -8858,7 +8865,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -8868,8 +8875,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8878,8 +8885,8 @@ class IfcInterceptor_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8888,8 +8895,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8898,7 +8905,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8907,7 +8914,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8916,8 +8923,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8926,8 +8933,8 @@ class IfcJunctionBox_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8936,8 +8943,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcKerb_CorrectPredefinedType: SCOPE = 'entity' @@ -8946,8 +8953,8 @@ class IfcKerb_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcKerb_CorrectTypeAssigned: SCOPE = 'entity' @@ -8956,8 +8963,8 @@ class IfcKerb_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifckerbtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcKerbType_CorrectPredefinedType: SCOPE = 'entity' @@ -8966,8 +8973,8 @@ class IfcKerbType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8976,9 +8983,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8988,8 +8995,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8998,8 +9005,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -9008,8 +9015,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -9018,8 +9025,8 @@ class IfcLamp_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -9028,8 +9035,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -9038,8 +9045,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -9048,8 +9055,8 @@ class IfcLightFixture_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9058,8 +9065,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -9068,9 +9075,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLiquidTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9079,8 +9086,8 @@ class IfcLiquidTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLiquidTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9089,8 +9096,8 @@ class IfcLiquidTerminal_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcliquidterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLiquidTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9099,8 +9106,8 @@ class IfcLiquidTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -9109,8 +9116,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMapConversion_TargetCRSOnlyProjected: @@ -9120,7 +9127,7 @@ class IfcMapConversion_TargetCRSOnlyProjected: @staticmethod def __call__(self): - assert ('ifc4x3_add2.ifcprojectedcrs' in typeof(getattr(self, 'TargetCRS', INDETERMINATE))) is not False + assert ('ifc4x3_add2.ifcprojectedcrs' in typeof(express_getattr(self, 'TargetCRS', INDETERMINATE))) is not False class IfcMarineFacility_CorrectPredefinedType: SCOPE = 'entity' @@ -9129,8 +9136,8 @@ class IfcMarineFacility_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMarinePart_CorrectPredefinedType: SCOPE = 'entity' @@ -9139,8 +9146,8 @@ class IfcMarinePart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: SCOPE = 'entity' @@ -9149,7 +9156,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_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: @@ -9159,7 +9166,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -9172,7 +9179,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -9182,8 +9189,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -9192,8 +9199,8 @@ class IfcMechanicalFastener_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -9202,8 +9209,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9212,8 +9219,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9222,8 +9229,8 @@ class IfcMedicalDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9232,8 +9239,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -9242,8 +9249,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -9252,8 +9259,8 @@ class IfcMember_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -9262,8 +9269,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -9275,8 +9282,8 @@ class IfcMobileTelecommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -9285,8 +9292,8 @@ class IfcMobileTelecommunicationsAppliance_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmobiletelecommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9295,8 +9302,8 @@ class IfcMobileTelecommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9305,8 +9312,8 @@ class IfcMooringDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9315,8 +9322,8 @@ class IfcMooringDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmooringdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMooringDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9325,8 +9332,8 @@ class IfcMooringDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectPredefinedType: SCOPE = 'entity' @@ -9335,8 +9342,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -9345,8 +9352,8 @@ class IfcMotorConnection_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -9355,8 +9362,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -9365,7 +9372,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcNavigationElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9374,8 +9381,8 @@ class IfcNavigationElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcNavigationElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9384,8 +9391,8 @@ class IfcNavigationElement_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcnavigationelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcNavigationElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9394,8 +9401,8 @@ class IfcNavigationElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -9404,7 +9411,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -9414,8 +9421,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -9424,8 +9431,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -9434,8 +9441,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -9444,8 +9451,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOpenCrossProfileDef_CorrectProfileType: SCOPE = 'entity' @@ -9454,7 +9461,7 @@ class IfcOpenCrossProfileDef_CorrectProfileType: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: SCOPE = 'entity' @@ -9463,8 +9470,8 @@ class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: @staticmethod def __call__(self): - widths = getattr(self, 'Widths', INDETERMINATE) - slopes = getattr(self, 'Slopes', INDETERMINATE) + widths = express_getattr(self, 'Widths', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) assert (sizeof(slopes) == sizeof(widths)) is not False class IfcOpenCrossProfileDef_CorrespondingTags: @@ -9474,8 +9481,8 @@ class IfcOpenCrossProfileDef_CorrespondingTags: @staticmethod def __call__(self): - slopes = getattr(self, 'Slopes', INDETERMINATE) - tags = getattr(self, 'Tags', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) + tags = express_getattr(self, 'Tags', INDETERMINATE) assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False class IfcOpeningElement_CorrectPredefinedType: @@ -9485,8 +9492,8 @@ class IfcOpeningElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -9495,18 +9502,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -9515,8 +9522,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -9525,8 +9532,8 @@ class IfcOutlet_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -9535,8 +9542,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -9545,9 +9552,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -9565,8 +9572,8 @@ class IfcPavement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPavement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9575,8 +9582,8 @@ class IfcPavement_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpavementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPavementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9585,8 +9592,8 @@ class IfcPavementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPcurve_DimIs2D: SCOPE = 'entity' @@ -9595,8 +9602,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -9605,9 +9612,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -9617,9 +9624,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -9629,7 +9636,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -9639,7 +9646,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -9649,8 +9656,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -9659,8 +9666,8 @@ class IfcPile_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -9669,8 +9676,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -9679,8 +9686,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -9689,8 +9696,8 @@ class IfcPipeFitting_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9699,8 +9706,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -9709,8 +9716,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -9719,8 +9726,8 @@ class IfcPipeSegment_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -9729,8 +9736,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -9739,7 +9746,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -9749,7 +9756,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -9759,7 +9766,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -9769,7 +9776,7 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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: @@ -9779,14 +9786,14 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_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) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -9795,8 +9802,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -9805,8 +9812,8 @@ class IfcPlate_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -9815,8 +9822,8 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPoint_Dim(self): return IfcPointDim(self) @@ -9828,8 +9835,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -9838,8 +9845,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -9848,7 +9855,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x3_add2.ifcpolyline', 'ifc4x3_add2.ifccompositecurve', 'ifc4x3_add2.ifcindexedpolycurve']) == 1) is not False class IfcPolyline_SameDim: @@ -9858,8 +9865,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolynomialCurve_CorrectPositionDim: SCOPE = 'entity' @@ -9868,9 +9875,9 @@ class IfcPolynomialCurve_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 + position = express_getattr(self, 'Position', INDETERMINATE) + coefficientsz = express_getattr(self, 'CoefficientsZ', INDETERMINATE) + assert (express_getattr(position, 'Dim', INDETERMINATE) == 2 and (not exists(coefficientsz)) or express_getattr(position, 'Dim', INDETERMINATE) == 3) is not False class IfcPolynomialCurve_ValidCoefficients: SCOPE = 'entity' @@ -9879,9 +9886,9 @@ class IfcPolynomialCurve_ValidCoefficients: @staticmethod def __call__(self): - coefficientsx = getattr(self, 'CoefficientsX', INDETERMINATE) - coefficientsy = getattr(self, 'CoefficientsY', INDETERMINATE) - coefficientsz = getattr(self, 'CoefficientsZ', INDETERMINATE) + coefficientsx = express_getattr(self, 'CoefficientsX', INDETERMINATE) + coefficientsy = express_getattr(self, 'CoefficientsY', INDETERMINATE) + coefficientsz = express_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: @@ -9891,7 +9898,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -9900,13 +9907,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -9916,7 +9923,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_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: @@ -9926,7 +9933,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_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: @@ -9936,8 +9943,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedure_HasName: SCOPE = 'entity' @@ -9946,7 +9953,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9955,8 +9962,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -9965,9 +9972,9 @@ class IfcProduct_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 + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3_add2.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -9976,7 +9983,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_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: @@ -9986,7 +9993,7 @@ class IfcProject_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 + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_add2.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_HasName: SCOPE = 'entity' @@ -9995,7 +10002,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -10004,7 +10011,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_MapUnitIsLength: SCOPE = 'entity' @@ -10013,7 +10020,7 @@ class IfcProjectedCRS_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 + assert (not exists(express_getattr(self, 'MapUnit', INDETERMINATE)) or express_getattr(express_getattr(self, 'MapUnit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcProjectionElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10022,8 +10029,8 @@ class IfcProjectionElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: SCOPE = 'entity' @@ -10032,8 +10039,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: @@ -10043,8 +10050,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -10054,8 +10061,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -10065,8 +10072,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -10076,9 +10083,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -10087,7 +10094,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -10096,7 +10103,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -10105,7 +10112,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -10114,7 +10121,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -10124,7 +10131,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -10133,7 +10140,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -10143,8 +10150,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -10154,8 +10161,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -10164,8 +10171,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10174,8 +10181,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10184,8 +10191,8 @@ class IfcProtectiveDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -10194,8 +10201,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -10204,8 +10211,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -10214,8 +10221,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10224,8 +10231,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -10234,8 +10241,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -10244,8 +10251,8 @@ class IfcPump_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -10254,8 +10261,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -10264,7 +10271,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -10273,7 +10280,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -10283,7 +10290,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0) is not False class IfcQuantityLength_WR21: @@ -10293,7 +10300,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -10302,7 +10309,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -10312,7 +10319,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -10321,7 +10328,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -10331,7 +10338,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -10340,7 +10347,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -10350,7 +10357,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -10359,7 +10366,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRail_CorrectPredefinedType: @@ -10369,8 +10376,8 @@ class IfcRail_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRail_CorrectTypeAssigned: SCOPE = 'entity' @@ -10379,8 +10386,8 @@ class IfcRail_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcrailtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailType_CorrectPredefinedType: SCOPE = 'entity' @@ -10389,8 +10396,8 @@ class IfcRailType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailing_CorrectPredefinedType: SCOPE = 'entity' @@ -10399,8 +10406,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -10409,8 +10416,8 @@ class IfcRailing_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -10419,8 +10426,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailway_CorrectPredefinedType: SCOPE = 'entity' @@ -10429,8 +10436,8 @@ class IfcRailway_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailwayPart_CorrectPredefinedType: SCOPE = 'entity' @@ -10439,8 +10446,8 @@ class IfcRailwayPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -10449,8 +10456,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -10459,8 +10466,8 @@ class IfcRamp_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10469,8 +10476,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10479,8 +10486,8 @@ class IfcRampFlight_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10489,8 +10496,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -10499,8 +10506,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -10509,8 +10516,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -10522,8 +10529,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -10532,8 +10539,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -10545,9 +10552,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidInnerRadius: @@ -10557,9 +10564,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -10568,8 +10575,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangleHollowProfileDef_ValidWallThickness: SCOPE = 'entity' @@ -10578,8 +10585,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -10588,8 +10595,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -10599,10 +10606,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_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: @@ -10612,8 +10619,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -10623,9 +10630,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcedSoil_CorrectPredefinedType: @@ -10635,8 +10642,8 @@ class IfcReinforcedSoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectPredefinedType: SCOPE = 'entity' @@ -10645,8 +10652,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -10655,8 +10662,8 @@ class IfcReinforcingBar_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10665,8 +10672,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingBarType_CorrectPredefinedType: @@ -10676,8 +10683,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectPredefinedType: SCOPE = 'entity' @@ -10686,8 +10693,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -10696,8 +10703,8 @@ class IfcReinforcingMesh_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10706,8 +10713,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMeshType_CorrectPredefinedType: @@ -10717,8 +10724,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRelAggregates_NoSelfReference: SCOPE = 'entity' @@ -10727,8 +10734,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -10738,8 +10745,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -10748,8 +10755,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -10758,8 +10765,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -10768,8 +10775,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -10778,8 +10785,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -10788,8 +10795,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -10798,7 +10805,7 @@ class IfcRelAssociatesMaterial_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 + assert (sizeof([temp for temp in express_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' @@ -10807,7 +10814,7 @@ class IfcRelAssociatesMaterial_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 + assert (sizeof([temp for temp in express_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' @@ -10816,8 +10823,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -10827,7 +10834,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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: @@ -10837,7 +10844,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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: @@ -10847,8 +10854,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -10858,7 +10865,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_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: @@ -10868,8 +10875,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -10879,7 +10886,7 @@ class IfcRelDefinesByProperties_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 + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_add2.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -10888,8 +10895,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -10899,8 +10906,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -10910,8 +10917,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -10921,7 +10928,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_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: @@ -10931,8 +10938,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -10942,9 +10949,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -10953,9 +10960,9 @@ class IfcRelSpaceBoundary_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 + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_add2.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_add2.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_add2.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -10964,7 +10971,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -10974,7 +10981,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x3_add2.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: @@ -10984,8 +10991,8 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisStartInXY: SCOPE = 'entity' @@ -10994,12 +11001,12 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert ('ifc4x3_add2.ifccartesianpoint' in typeof(express_getattr(axis, 'Location', INDETERMINATE)) and express_getitem(express_getattr(express_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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -11008,7 +11015,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRigidOperation_SameCoordinateType: SCOPE = 'entity' @@ -11017,8 +11024,8 @@ class IfcRigidOperation_SameCoordinateType: @staticmethod def __call__(self): - firstcoordinate = getattr(self, 'FirstCoordinate', INDETERMINATE) - secondcoordinate = getattr(self, 'SecondCoordinate', INDETERMINATE) + firstcoordinate = express_getattr(self, 'FirstCoordinate', INDETERMINATE) + secondcoordinate = express_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: @@ -11028,8 +11035,8 @@ class IfcRoad_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoadPart_CorrectPredefinedType: SCOPE = 'entity' @@ -11038,8 +11045,8 @@ class IfcRoadPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -11048,8 +11055,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -11058,8 +11065,8 @@ class IfcRoof_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -11068,8 +11075,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -11078,11 +11085,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSIUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSIUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11091,8 +11098,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11101,8 +11108,8 @@ class IfcSanitaryTerminal_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11111,8 +11118,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -11121,7 +11128,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -11130,7 +11137,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -11139,8 +11146,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -11149,8 +11156,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -11159,7 +11166,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -11169,8 +11176,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -11180,8 +11187,8 @@ class IfcSectionedSolidHorizontal_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_ConsistentProfileTypes: SCOPE = 'entity' @@ -11190,8 +11197,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11200,8 +11207,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_SpineCurveDim: @@ -11211,8 +11218,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -11224,8 +11231,8 @@ class IfcSectionedSurface_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(temp, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)]) != 0) is not False class IfcSectionedSurface_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11234,8 +11241,8 @@ class IfcSectionedSurface_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSurface_DirectrixIs3D: @@ -11245,8 +11252,8 @@ class IfcSectionedSurface_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSurface_NoOffsets: SCOPE = 'entity' @@ -11255,8 +11262,8 @@ class IfcSectionedSurface_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLateral', INDETERMINATE)) or exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetVertical', INDETERMINATE)) or exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSurface_SectionsSameType: SCOPE = 'entity' @@ -11265,7 +11272,7 @@ class IfcSectionedSurface_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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): @@ -11278,8 +11285,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -11288,8 +11295,8 @@ class IfcSensor_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11298,8 +11305,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11308,8 +11315,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11318,8 +11325,8 @@ class IfcShadingDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11328,8 +11335,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -11338,8 +11345,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -11348,7 +11355,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x3_add2.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x3_add2.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -11357,7 +11364,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -11366,7 +11373,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationType: SCOPE = 'entity' @@ -11375,7 +11382,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -11384,7 +11391,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_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): @@ -11397,8 +11404,8 @@ class IfcSign_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSign_CorrectTypeAssigned: SCOPE = 'entity' @@ -11407,8 +11414,8 @@ class IfcSign_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsigntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignType_CorrectPredefinedType: SCOPE = 'entity' @@ -11417,8 +11424,8 @@ class IfcSignType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSignal_CorrectPredefinedType: SCOPE = 'entity' @@ -11427,8 +11434,8 @@ class IfcSignal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSignal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11437,8 +11444,8 @@ class IfcSignal_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsignaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11447,8 +11454,8 @@ class IfcSignalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSlab_CorrectPredefinedType: SCOPE = 'entity' @@ -11457,8 +11464,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -11467,8 +11474,8 @@ class IfcSlab_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -11477,8 +11484,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11487,8 +11494,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11497,8 +11504,8 @@ class IfcSolarDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11507,8 +11514,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -11520,8 +11527,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -11530,8 +11537,8 @@ class IfcSpace_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -11540,8 +11547,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -11550,8 +11557,8 @@ class IfcSpaceHeater_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -11560,8 +11567,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11570,8 +11577,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -11580,7 +11587,7 @@ class IfcSpatialStructureElement_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 + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_add2.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_add2.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_add2.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -11589,8 +11596,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -11599,8 +11606,8 @@ class IfcSpatialZone_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -11609,8 +11616,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11619,8 +11626,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11629,8 +11636,8 @@ class IfcStackTerminal_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11639,8 +11646,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -11649,8 +11656,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -11659,8 +11666,8 @@ class IfcStair_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -11669,8 +11676,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -11679,8 +11686,8 @@ class IfcStairFlight_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -11689,8 +11696,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -11699,8 +11706,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_CorrectPredefinedType: SCOPE = 'entity' @@ -11709,8 +11716,8 @@ class IfcStructuralAnalysisModel_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -11719,8 +11726,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11729,8 +11736,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -11739,8 +11746,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -11749,8 +11756,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -11759,8 +11766,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -11769,8 +11776,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -11779,7 +11786,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -11788,7 +11795,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add2.ifcstructuralloadlinearforce', 'ifc4x3_add2.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add2.ifcstructuralloadlinearforce', 'ifc4x3_add2.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -11797,7 +11804,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -11806,8 +11813,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -11817,10 +11824,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -11829,7 +11836,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -11838,7 +11845,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add2.ifcstructuralloadplanarforce', 'ifc4x3_add2.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add2.ifcstructuralloadplanarforce', 'ifc4x3_add2.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -11847,7 +11854,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add2.ifcstructuralloadsingleforce', 'ifc4x3_add2.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add2.ifcstructuralloadsingleforce', 'ifc4x3_add2.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -11856,7 +11863,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_add2.ifcstructuralloadsingleforce', 'ifc4x3_add2.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_add2.ifcstructuralloadsingleforce', 'ifc4x3_add2.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -11865,8 +11872,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -11875,8 +11882,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11885,8 +11892,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -11895,8 +11902,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -11905,8 +11912,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -11915,7 +11922,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x3_add2.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -11925,7 +11932,7 @@ class IfcStyledRepresentation_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 + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_add2.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -11934,8 +11941,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11944,8 +11951,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -11957,8 +11964,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -11967,7 +11974,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x3_add2.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -11980,8 +11987,8 @@ class IfcSurfaceFeature_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -11990,17 +11997,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_NonnegativeArea1: SCOPE = 'entity' @@ -12009,7 +12016,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -12019,7 +12026,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -12029,7 +12036,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @@ -12039,9 +12046,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceStyle_MaxOneExtDefined: @@ -12051,7 +12058,7 @@ class IfcSurfaceStyle_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 + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -12060,7 +12067,7 @@ class IfcSurfaceStyle_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 + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -12069,7 +12076,7 @@ class IfcSurfaceStyle_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 + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneShading: SCOPE = 'entity' @@ -12078,7 +12085,7 @@ class IfcSurfaceStyle_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 + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -12087,7 +12094,7 @@ class IfcSurfaceStyle_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 + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_add2.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -12096,8 +12103,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixBounded: SCOPE = 'entity' @@ -12106,9 +12113,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_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: @@ -12118,8 +12125,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -12128,8 +12135,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -12139,8 +12146,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -12149,7 +12156,7 @@ class IfcSweptDiskSolidPolygonal_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 + assert ('ifc4x3_add2.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_add2.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -12158,8 +12165,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -12168,8 +12175,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -12178,8 +12185,8 @@ class IfcSwitchingDevice_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -12188,8 +12195,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12198,8 +12205,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12208,8 +12215,8 @@ class IfcSystemFurnitureElement_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12218,8 +12225,8 @@ class IfcSystemFurnitureElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12228,8 +12235,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -12239,8 +12246,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -12250,8 +12257,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -12260,20 +12267,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -12282,8 +12289,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -12292,8 +12299,8 @@ class IfcTank_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -12302,8 +12309,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -12312,8 +12319,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -12322,7 +12329,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -12331,8 +12338,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -12341,12 +12348,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -12356,8 +12363,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -12366,8 +12373,8 @@ class IfcTendon_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -12376,8 +12383,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -12386,8 +12393,8 @@ class IfcTendonAnchor_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12396,8 +12403,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -12406,8 +12413,8 @@ class IfcTendonConduit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -12416,8 +12423,8 @@ class IfcTendonConduit_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -12426,8 +12433,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -12436,8 +12443,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -12449,7 +12456,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x3_add2.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -12459,7 +12466,7 @@ class IfcTextStyleFontModel_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 + assert ('ifc4x3_add2.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -12468,7 +12475,7 @@ class IfcTopologyRepresentation_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 + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_add2.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -12477,7 +12484,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -12486,7 +12493,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -12495,8 +12502,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTrackElement_CorrectPredefinedType: @@ -12506,8 +12513,8 @@ class IfcTrackElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTrackElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12516,8 +12523,8 @@ class IfcTrackElement_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctrackelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTrackElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12526,8 +12533,8 @@ class IfcTrackElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransformer_CorrectPredefinedType: SCOPE = 'entity' @@ -12536,8 +12543,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -12546,8 +12553,8 @@ class IfcTransformer_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctransformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -12556,8 +12563,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12566,8 +12573,8 @@ class IfcTransportElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12576,8 +12583,8 @@ class IfcTransportElement_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12586,11 +12593,11 @@ class IfcTransportElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -12600,7 +12607,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_NoTrimOfBoundedCurves: SCOPE = 'entity' @@ -12609,7 +12616,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x3_add2.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: @@ -12619,7 +12626,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -12629,7 +12636,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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: @@ -12639,8 +12646,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12649,8 +12656,8 @@ class IfcTubeBundle_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12659,8 +12666,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -12669,7 +12676,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -12678,7 +12685,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -12688,7 +12695,7 @@ class IfcTypeProduct_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 + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_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' @@ -12697,8 +12704,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -12708,8 +12715,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -12719,7 +12726,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -12729,8 +12736,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12739,8 +12746,8 @@ class IfcUnitaryControlElement_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12749,8 +12756,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -12759,8 +12766,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -12769,8 +12776,8 @@ class IfcUnitaryEquipment_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -12779,8 +12786,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -12789,8 +12796,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -12799,8 +12806,8 @@ class IfcValve_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -12809,8 +12816,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -12819,12 +12826,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVehicle_CorrectPredefinedType: SCOPE = 'entity' @@ -12833,8 +12840,8 @@ class IfcVehicle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVehicle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12843,8 +12850,8 @@ class IfcVehicle_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcvehicletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVehicleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12853,8 +12860,8 @@ class IfcVehicleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -12863,8 +12870,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -12873,8 +12880,8 @@ class IfcVibrationDamper_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -12883,8 +12890,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -12893,8 +12900,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -12903,8 +12910,8 @@ class IfcVibrationIsolator_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12913,8 +12920,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVirtualElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12923,8 +12930,8 @@ class IfcVirtualElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVoidingFeature_CorrectPredefinedType: SCOPE = 'entity' @@ -12933,8 +12940,8 @@ class IfcVoidingFeature_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -12943,8 +12950,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -12953,8 +12960,8 @@ class IfcWall_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -12963,7 +12970,7 @@ class IfcWallStandardCase_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 + 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(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -12972,8 +12979,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -12982,8 +12989,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -12992,8 +12999,8 @@ class IfcWasteTerminal_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -13002,8 +13009,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectPredefinedType: SCOPE = 'entity' @@ -13012,8 +13019,8 @@ class IfcWindow_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWindow_CorrectTypeAssigned: SCOPE = 'entity' @@ -13022,8 +13029,8 @@ class IfcWindow_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 + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_add2.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -13032,8 +13039,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -13043,8 +13050,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -13054,8 +13061,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -13065,7 +13072,7 @@ class IfcWindowLiningProperties_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 + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add2.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -13074,7 +13081,7 @@ class IfcWindowPanelProperties_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 + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_add2.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -13083,8 +13090,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -13093,8 +13100,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -13103,8 +13110,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -13113,8 +13120,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -13123,8 +13130,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -13134,19 +13141,19 @@ class IfcZone_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 + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_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') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -13156,11 +13163,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -13174,13 +13181,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -13198,7 +13205,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -13235,11 +13242,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -13419,7 +13426,7 @@ def IfcCorrectLocalPlacement(axisplacement, 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: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -13432,26 +13439,26 @@ def IfcCorrectUnitAssignment(units): 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))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_add2.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_add2.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_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) + if 'ifc4x3_add2.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_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 express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13460,21 +13467,21 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x3_add2.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add2.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_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) + return express_getattr(express_getitem(express_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)) + return IfcCurveDim(express_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) + return express_getattr(express_getitem(express_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) + return express_getattr(express_getitem(express_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): @@ -13484,21 +13491,21 @@ def IfcCurveDim(curve): 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: + if not exists(express_getattr(curve, 'CoefficientsZ', INDETERMINATE)) and express_getattr(express_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) + return express_getattr(express_getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add2.ifcspiral' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -13506,13 +13513,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSIUnit(n): @@ -13582,15 +13589,15 @@ def IfcDimensionsForSIUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -13599,42 +13606,42 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_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)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x3_add2.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_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)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + if 'ifc4x3_add2.ifccurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + if 'ifc4x3_add2.ifccompositecurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_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)) + if 'ifc4x3_add2.ifccurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + if 'ifc4x3_add2.ifccompositecurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcListToArray(lis, low, u): @@ -13651,9 +13658,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -13671,10 +13678,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -13685,25 +13692,25 @@ def IfcNormalise(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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x3_add2.ifcvector' in typeof(arg): vec.Orientation = v @@ -13715,29 +13722,29 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_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)) + return hiindex(express_getattr(point, 'Coordinates', INDETERMINATE)) if 'ifc4x3_add2.ifcpointbydistanceexpression' in typeof(point): - return getattr(getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add2.ifcpointoncurve' in typeof(point): - return getattr(getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add2.ifcpointonsurface' in typeof(point): - return getattr(getattr(point, 'BasisSurface', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisSurface', INDETERMINATE), 'Dim', INDETERMINATE) return None def IfcPointListDim(pointlist): @@ -13748,32 +13755,32 @@ def IfcPointListDim(pointlist): 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) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -13794,15 +13801,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x3_add2.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -13818,82 +13825,82 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcSegmentDim(segment): if 'ifc4x3_add2.ifccurvesegment' in typeof(segment): - return getattr(getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_add2.ifccompositecurvesegment' in typeof(segment): - return getattr(getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) return None def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_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': + elif express_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': + elif express_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': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x3_add2.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x3_add2.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_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': + elif express_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': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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: + if sizeof([temp for temp in express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x3_add2.ifcmappeditem' in typeof(temp)]) else: return None @@ -13901,9 +13908,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -13913,28 +13920,28 @@ 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) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x3_add2.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_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': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -13945,7 +13952,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_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): @@ -13958,7 +13965,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -13966,7 +13973,7 @@ def IfcUniquePropertySetNames(properties): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -13974,41 +13981,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_add2.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_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) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -14016,31 +14023,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_add2.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_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) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py index e4488d8c2e..13e34ec4f8 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,2339 +147,2339 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionTypeEnum = enum_namespace() -permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAddressTypeEnum = enum_namespace() -office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -railwaycrocodile = getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) +railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnnotationTypeEnum = enum_namespace() -assumedpoint = getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -asbuiltarea = getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -non_physical_signal = getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -assumedline = getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -widthevent = getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -assumedarea = getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -superelevationevent = getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -asbuiltpoint = getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -userdefined = getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) +asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) +asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) +non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) +assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) +widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) +assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) +superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) +asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) +userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', 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) -speaker = getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -railway_communication_terminal = getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) -userdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +railway_communication_terminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBSplineCurveForm = enum_namespace() -polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) IfcBSplineSurfaceForm = enum_namespace() -plane_surf = getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) IfcBeamTypeEnum = enum_namespace() -beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) +guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) +guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) +free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeEnum = enum_namespace() -cylindrical = getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBenchmarkEnum = enum_namespace() -greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) IfcBoilerTypeEnum = enum_namespace() -water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', 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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -safetycage = getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) +safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -reinforcing = getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -erosionprevention = getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -userdefined = getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) +prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuiltSystemTypeEnum = enum_namespace() -reinforcing = getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -mooring = getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -trackcircuit = getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -erosionprevention = getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -foundation = getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -shading = getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -fenestration = getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -mooringsystem = getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) -transport = getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -prestressing = getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) +mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) +outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) +erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) +fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +mooringsystem = express_getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) +transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -cablebracket = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -catenarywire = getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -dropper = getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) +catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) +dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableFittingTypeEnum = enum_namespace() -connector = getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -fanout = getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -userdefined = getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -contactwiresegment = getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', 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) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) +fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) +fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) +opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) +stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) +wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCaissonFoundationTypeEnum = enum_namespace() -well = getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChangeActionEnum = enum_namespace() -nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) IfcChillerTypeEnum = enum_namespace() -aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcColumnTypeEnum = enum_namespace() -column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -automaton = getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -intelligent_peripheral = getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) -ip_network_equipment = getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) -optical_network_unit = getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', 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) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) +intelligent_peripheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) +ip_network_equipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) +optical_network_unit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', INDETERMINATE) +telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) +telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) +transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) +transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) +transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) IfcCompressorTypeEnum = enum_namespace() -dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConnectionTypeEnum = enum_namespace() -atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConstraintEnum = enum_namespace() -hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -notdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcControllerTypeEnum = enum_namespace() -floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConveyorSegmentTypeEnum = enum_namespace() -chuteconveyor = getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -beltconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -screwconveyor = getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -bucketconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -userdefined = getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) +beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) +screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) +bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) +userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostScheduleTypeEnum = enum_namespace() -budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCourseTypeEnum = enum_namespace() -armour = getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -filter = getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -ballastbed = getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -pavement = getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) +filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) +ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) +core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) +pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) +protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoveringTypeEnum = enum_namespace() -ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -birdprotection = getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -cablearranger = getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -insulator = getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -tensioningequipment = getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -railpad = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -slidingchair = getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -panel_strengthening = getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -railbrace = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -elastic_cushion = getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -soundabsorption = getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -rail_lubrication = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -rail_mechanical_equipment = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -userdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) +cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) +insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) +lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) +tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) +railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) +slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) +panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) +railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) +elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) +soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) +rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) +rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionBoardTypeEnum = enum_namespace() -switchboard = getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -consumerunit = getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -motorcontrolcentre = getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -distributionframe = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -distributionboard = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -userdefined = getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) +distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionSystemEnum = enum_namespace() -airconditioning = getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', 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) -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) -municipalsolidwaste = getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = getattr(IfcDistributionSystemEnum, 'REFRIGERATION', 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) -catenary_system = getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -overhead_contactline_system = getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -return_circuit = getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -userdefined = getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) +overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) +return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentConfidentialityEnum = enum_namespace() -public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentStatusEnum = enum_namespace() -draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorPanelOperationEnum = enum_namespace() -swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeEnum = enum_namespace() -door = getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -boom_barrier = getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -turnstile = getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) +turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', 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_swing_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', 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) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEarthworksCutTypeEnum = enum_namespace() -trench = getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -dredging = getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -topsoilremoval = getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -stepexcavation = getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -pavementmilling = getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -cut = getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -base_excavation = getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -userdefined = getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) +dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) +excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) +overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) +topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) +stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) +pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) +cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) +base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEarthworksFillTypeEnum = enum_namespace() -backfill = getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -subgrade = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -embankment = getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -transitionsection = getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -subgradebed = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -slopefill = getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -userdefined = getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) +counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) +subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) +embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) +transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) +subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) +slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -freestandingwaterheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', 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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -capacitor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -compensator = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -inductor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -recharger = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) +compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) +inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) +recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementAssemblyTypeEnum = enum_namespace() -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) -girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -mast = getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -signalassembly = getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -grid = getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -shelter = getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -supportingassembly = getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -traction_switching_assembly = getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -trackpanel = getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -turnoutpanel = getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -dilatationpanel = getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -rail_mechanical_equipment_assembly = getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -entranceworks = getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -sumpbuster = getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -traffic_calming_device = getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) +signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) +grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) +shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) +supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) +suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) +traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) +trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) +turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) +dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) +rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) +entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) +sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) +traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTriggerTypeEnum = enum_namespace() -eventrule = getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTypeEnum = enum_namespace() -startevent = getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcExternalSpatialElementTypeEnum = enum_namespace() -external = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFacilityPartCommonTypeEnum = enum_namespace() -segment = getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -aboveground = getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -junction = getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -belowground = getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -substructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -terminal = getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -superstructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) +aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) +junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) +levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) +belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) +substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) +superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFacilityUsageEnum = enum_namespace() -lateral = getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -region = getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -longitudinal = getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -userdefined = getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) +region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) +vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) +longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', 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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowDirectionEnum = enum_namespace() -source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -combined = getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -voltmeter = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -userdefined = getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) +voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFurnitureTypeEnum = enum_namespace() -chair = getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -technicalcabinet = getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeographicElementTypeEnum = enum_namespace() -terrain = getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeometricProjectionEnum = enum_namespace() -graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_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) -elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) IfcGridTypeEnum = enum_namespace() -rectangular = getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHumidifierTypeEnum = enum_namespace() -steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcImpactProtectionDeviceTypeEnum = enum_namespace() -crashcushion = getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -bumper = getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -userdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) +dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) +fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) +bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) +userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcInternalOrExternalEnum = enum_namespace() -internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) IfcInventoryTypeEnum = enum_namespace() -assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKnotType = enum_namespace() -uniform_knots = getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcLightFixtureTypeEnum = enum_namespace() -pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLiquidTerminalTypeEnum = enum_namespace() -loadingarm = getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -hosereel = getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -userdefined = getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) +hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLoadGroupTypeEnum = enum_namespace() -load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLogicalOperatorEnum = enum_namespace() -logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) IfcMarineFacilityTypeEnum = enum_namespace() -canal = getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -waterwayshiplift = getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -embankment = getattr(IfcMarineFacilityTypeEnum, 'EMBANKMENT', INDETERMINATE) -launchrecovery = getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -hydrolift = getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -shipyard = getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -shiplift = getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -port = getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -floatingdock = getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -navigationalchannel = getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -breakwater = getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -drydock = getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -jetty = getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -shiplock = getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -barrierbeach = getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -slipway = getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -userdefined = getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) +waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) +embankment = express_getattr(IfcMarineFacilityTypeEnum, 'EMBANKMENT', INDETERMINATE) +launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) +marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) +hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) +shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) +shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) +port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) +quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) +floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) +navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) +breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) +drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) +jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) +shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) +barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) +slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) +waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) +userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMarinePartTypeEnum = enum_namespace() -crest = getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -manufacturing = getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -lowwaterline = getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -core = getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -waterfield = getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -cill_level = getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -berthingstructure = getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -copelevel = getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -chamber = getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -storage = getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) -approachchannel = getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -vehicleservicing = getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -shiptransfer = getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -gatehead = getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -belowwaterline = getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -weatherside = getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -landfield = getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -protection = getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -leewardside = getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -abovewaterline = getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -navigationalarea = getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -highwaterline = getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -userdefined = getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) +manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) +lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) +core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) +waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) +cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) +berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) +copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) +chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) +storage = express_getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) +approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) +vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) +shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) +gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) +gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) +belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) +weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) +landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) +protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) +leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) +abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) +anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) +navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) +highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) +userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -railjoint = getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -railfastening = getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -chain = getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -rope = getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -userdefined = getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) +railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) +chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) +rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMemberTypeEnum = enum_namespace() -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) -stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -structuralcable = getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -tiebar = getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) +tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -e_utran_node_b = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -remote_radio_unit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) -accesspoint = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basetransceiverstation = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -remoteunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -basebandunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -masterunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -userdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) +remote_radio_unit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) +accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) +basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) +remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) +basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) +masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) +userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMooringDeviceTypeEnum = enum_namespace() -linetensioner = getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -bollard = getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -userdefined = getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) +magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) +mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) +vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) +bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) +userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) +buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) +userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcNullStyle = enum_namespace() -null = getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, '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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcPileTypeEnum = enum_namespace() -bored = getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPipeSegmentTypeEnum = enum_namespace() -culvert = getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPlateTypeEnum = enum_namespace() -curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', 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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -anti_arcing_device = getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -sparkgap = getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -voltagelimiter = getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) +sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) +voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailTypeEnum = enum_namespace() -rackrail = getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -blade = getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -guardrail = getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -stockrail = getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -checkrail = getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -rail = getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -userdefined = getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) +blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) +guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) +stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) +checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) +rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailingTypeEnum = enum_namespace() -handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayPartTypeEnum = enum_namespace() -trackstructure = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -linesidestructurepart = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -dilatationsuperstructure = getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -plaintracksupestructure = getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) -linesidestructure = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -superstructure = getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -turnoutsuperstructure = getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) +trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) +linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) +dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) +plaintracksupestructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) +linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampFlightTypeEnum = enum_namespace() -straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampTypeEnum = enum_namespace() -straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRecurrenceTypeEnum = enum_namespace() -daily = getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) IfcReferentTypeEnum = enum_namespace() -kilopoint = getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -referencemarker = getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcedSoilTypeEnum = enum_namespace() -surchargepreloaded = getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -dynamicallycompacted = getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -replaced = getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -grouted = getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -userdefined = getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) +verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) +dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) +replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) +rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) +grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarRoleEnum = enum_namespace() -main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) -stud = getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadPartTypeEnum = enum_namespace() -roadsidepart = getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -bus_stop = getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -hardshoulder = getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -passingbay = getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -roadwayplateau = getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roadside = getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -refugeisland = getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -tollplaza = getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -centralreserve = getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -sidewalk = getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -parkingbay = getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -railwaycrossing = getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -pedestrian_crossing = getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -softshoulder = getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -bicyclecrossing = getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -centralisland = getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -shoulder = getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -trafficlane = getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -roadsegment = getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roundabout = getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -layby = getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -carriageway = getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -trafficisland = getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -userdefined = getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) +bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) +hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) +intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) +passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) +roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) +roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) +refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) +tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) +centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) +sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) +parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) +railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) +pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) +softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) +bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) +centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) +shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) +trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) +roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) +roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) +layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) +carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) +trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) +userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoleEnum = enum_namespace() -supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) IfcRoofTypeEnum = enum_namespace() -flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSIPrefix = enum_namespace() -exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +atto = express_getattr(IfcSIPrefix, 'ATTO', 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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', 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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) IfcSensorTypeEnum = enum_namespace() -cosensor = getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', 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) -phsensor = getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -earthquakesensor = getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -foreignobjectdetectionsensor = getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -obstaclesensor = getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -rainsensor = getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -snowdepthsensor = getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -trainsensor = getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) +foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) +obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) +rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) +snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) +trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) +turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) +wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSequenceEnum = enum_namespace() -start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSignTypeEnum = enum_namespace() -marker = getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -pictoral = getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -mirror = getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -userdefined = getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) +pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) +mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) +userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSignalTypeEnum = enum_namespace() -visual = getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -audio = getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -userdefined = getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) +audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) +mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) +userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) IfcSlabTypeEnum = enum_namespace() -floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceTypeEnum = enum_namespace() -space = getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpatialZoneTypeEnum = enum_namespace() -construction = getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -reservation = getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -userdefined = getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairFlightTypeEnum = enum_namespace() -straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairTypeEnum = enum_namespace() -straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -ladder = getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStateEnum = enum_namespace() -readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -pavementsurfacemarking = getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -symbolmarking = getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -nonskidsurfacing = getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -rumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -transverserumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -userdefined = getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) +linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) +pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) +symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) +nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) +rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) +transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', 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) -selectorswitch = getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -relay = getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -start_and_stop_equipment = getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) +start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -subrack = getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -userdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -pressurevessel = getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -oilretentiontray = getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -userdefined = getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskTypeEnum = enum_namespace() -attendance = getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = getattr(IfcTaskTypeEnum, 'DISPOSAL', 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) -userdefined = getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTendonConduitTypeEnum = enum_namespace() -duct = getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTextPath = enum_namespace() -left = getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = getattr(IfcTextPath, 'UP', INDETERMINATE) -down = getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = express_getattr(IfcTextPath, 'DOWN', 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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrackElementTypeEnum = enum_namespace() -trackendofalignment = getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -blockingdevice = getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -vehiclestop = getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -sleeper = getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -half_set_of_blades = getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -speedregulator = getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -derailer = getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -userdefined = getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) +blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) +vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) +sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) +half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) +speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) +derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) +frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) +userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransformerTypeEnum = enum_namespace() -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) -chopper = getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) +combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransitionCode = enum_namespace() -discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) IfcTransitionCurveType = enum_namespace() -biquadraticparabola = getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) -clothoidcurve = getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) -cosinecurve = getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) -cubicparabola = getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) -sinecurve = getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) +biquadraticparabola = express_getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) +blosscurve = express_getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) +clothoidcurve = express_getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) +cosinecurve = express_getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) +cubicparabola = express_getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) +sinecurve = express_getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) IfcTransportElementFixedTypeEnum = enum_namespace() -elevator = getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = express_getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +craneway = express_getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransportElementNonFixedTypeEnum = enum_namespace() -vehicle = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) -vehicletracked = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -rollingstock = getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehiclewheeled = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -vehicleair = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) -cargo = getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) -vehiclemarine = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -userdefined = getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +vehicle = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) +vehicletracked = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) +rollingstock = express_getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) +vehiclewheeled = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) +vehicleair = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) +cargo = express_getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) +vehiclemarine = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -combined = getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', 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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWallTypeEnum = enum_namespace() -movable = getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -wavewall = getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelPositionEnum = enum_namespace() -left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypeEnum = enum_namespace() -window = getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_RC1', *args, **kwargs) @@ -5118,7 +5125,7 @@ class IfcBoxAlignment_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 + assert (express_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 +5206,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -5208,7 +5215,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -5217,7 +5224,7 @@ class IfcFontWeight_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 + assert (express_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 +5323,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -5325,7 +5332,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -5334,7 +5341,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -5343,8 +5350,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -5353,8 +5360,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -5363,8 +5370,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -5373,8 +5380,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -5383,8 +5390,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -5393,7 +5400,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc1.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc1.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -5402,8 +5409,8 @@ class IfcAdvancedBrepWithVoids_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_rc1.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc1.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -5412,7 +5419,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc1.ifcelementarysurface', 'ifc4x3_rc1.ifcsweptsurface', 'ifc4x3_rc1.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc1.ifcelementarysurface', 'ifc4x3_rc1.ifcsweptsurface', 'ifc4x3_rc1.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -5421,7 +5428,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc1.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_rc1.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc1.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_rc1.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -5430,7 +5437,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc1.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_rc1.ifcline', 'ifc4x3_rc1.ifcconic', 'ifc4x3_rc1.ifcpolyline', 'ifc4x3_rc1.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc1.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3_rc1.ifcline', 'ifc4x3_rc1.ifcconic', 'ifc4x3_rc1.ifcpolyline', 'ifc4x3_rc1.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -5439,8 +5446,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -5449,8 +5456,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -5459,8 +5466,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -5469,8 +5476,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -5479,8 +5486,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -5489,8 +5496,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -5499,8 +5506,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -5509,8 +5516,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -5519,8 +5526,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -5529,8 +5536,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -5539,8 +5546,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -5549,8 +5556,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -5559,8 +5566,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5570,8 +5577,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5580,7 +5587,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_rc1.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5590,7 +5597,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_rc1.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5600,7 +5607,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x3_rc1.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x3_rc1.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5609,8 +5616,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5619,7 +5626,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5628,8 +5635,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5638,7 +5645,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x3_rc1.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5648,9 +5655,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5660,9 +5667,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -5672,9 +5679,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5684,9 +5691,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5696,8 +5703,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5706,8 +5713,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5716,8 +5723,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5726,8 +5733,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5736,10 +5743,10 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_RefDirIs2D: @@ -5749,8 +5756,8 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIs2D: SCOPE = 'entity' @@ -5759,10 +5766,10 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_LocationIs3D: @@ -5772,7 +5779,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisIs3D: SCOPE = 'entity' @@ -5781,8 +5788,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5791,8 +5798,8 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5801,9 +5808,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_AxisAndRefDirProvision: SCOPE = 'entity' @@ -5812,13 +5819,13 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcBSplineCurve_SameDim: @@ -5828,16 +5835,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5847,11 +5854,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5861,26 +5868,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5890,10 +5897,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5902,10 +5909,10 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False class IfcBSplineSurfaceWithKnots_CorrespondingULists: SCOPE = 'entity' @@ -5914,8 +5921,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -5925,16 +5932,16 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -5944,8 +5951,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -5954,8 +5961,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -5964,7 +5971,7 @@ class IfcBeamStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -5973,8 +5980,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -5983,8 +5990,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -5993,8 +6000,8 @@ class IfcBearing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6003,8 +6010,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_SupportedRasterFormat: SCOPE = 'entity' @@ -6013,7 +6020,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -6022,7 +6029,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBoiler_CorrectPredefinedType: @@ -6032,8 +6039,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6042,8 +6049,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6052,8 +6059,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -6062,7 +6069,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x3_rc1.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x3_rc1.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x3_rc1.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -6072,7 +6079,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x3_rc1.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -6082,7 +6089,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanResult_SameDim: @@ -6092,9 +6099,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_FirstOperandClosed: SCOPE = 'entity' @@ -6103,8 +6110,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x3_rc1.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x3_rc1.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -6113,12 +6120,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x3_rc1.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x3_rc1.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -6127,7 +6134,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -6139,7 +6146,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x3_rc1.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x3_rc1.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -6148,8 +6155,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -6158,8 +6165,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -6168,8 +6175,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -6178,7 +6185,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -6187,8 +6194,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -6197,8 +6204,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6207,8 +6214,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuiltElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -6217,7 +6224,7 @@ class IfcBuiltElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuiltSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6226,8 +6233,8 @@ class IfcBuiltSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -6236,8 +6243,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -6246,8 +6253,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6256,8 +6263,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -6266,8 +6273,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -6277,10 +6284,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -6290,9 +6297,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -6302,8 +6309,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6312,8 +6319,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6322,8 +6329,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6332,8 +6339,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6342,8 +6349,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6352,8 +6359,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6362,8 +6369,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6372,8 +6379,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6382,8 +6389,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6392,8 +6399,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6402,8 +6409,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6412,8 +6419,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -6422,8 +6429,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6432,8 +6439,8 @@ class IfcCaissonFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -6442,8 +6449,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -6452,11 +6459,11 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) def calc_IfcCartesianPointList_Dim(self): @@ -6469,16 +6476,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -6487,7 +6494,7 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -6496,7 +6503,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -6505,10 +6512,10 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcCartesianTransformationOperator2D_U(self): - return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6517,12 +6524,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -6531,7 +6538,7 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -6540,7 +6547,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -6549,7 +6556,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -6558,12 +6565,12 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, '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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6572,7 +6579,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6582,16 +6589,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6600,8 +6607,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6610,8 +6617,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6620,8 +6627,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6630,8 +6637,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6640,8 +6647,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6650,8 +6657,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6660,8 +6667,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6670,8 +6677,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6680,8 +6687,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6690,8 +6697,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6700,8 +6707,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6710,8 +6717,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -6720,7 +6727,7 @@ class IfcColumnStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6729,8 +6736,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6739,8 +6746,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6749,8 +6756,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6759,8 +6766,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6769,7 +6776,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6779,7 +6786,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6789,7 +6796,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6799,7 +6806,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcCompositeCurve_CurveContinuous: @@ -6809,9 +6816,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6820,17 +6827,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6839,7 +6846,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6852,12 +6859,12 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x3_rc1.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6866,8 +6873,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6876,7 +6883,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x3_rc1.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6886,8 +6893,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6896,8 +6903,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6906,8 +6913,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -6916,8 +6923,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -6926,8 +6933,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -6936,8 +6943,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -6946,8 +6953,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6956,8 +6963,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6966,8 +6973,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6976,8 +6983,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6986,8 +6993,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -6996,8 +7003,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7006,8 +7013,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -7016,8 +7023,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -7026,8 +7033,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7036,8 +7043,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7046,8 +7053,8 @@ class IfcConveyorSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7056,8 +7063,8 @@ class IfcConveyorSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcconveyorsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcconveyorsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcConveyorSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7066,8 +7073,8 @@ class IfcConveyorSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -7076,8 +7083,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -7086,8 +7093,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -7096,8 +7103,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -7106,8 +7113,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -7116,8 +7123,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7126,8 +7133,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCourse_CorrectPredefinedType: SCOPE = 'entity' @@ -7136,8 +7143,8 @@ class IfcCourse_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCourse_CorrectTypeAssigned: SCOPE = 'entity' @@ -7146,8 +7153,8 @@ class IfcCourse_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccoursetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccoursetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCourseType_CorrectPredefinedType: SCOPE = 'entity' @@ -7156,8 +7163,8 @@ class IfcCourseType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -7166,8 +7173,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -7176,8 +7183,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -7186,8 +7193,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7196,8 +7203,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7206,8 +7213,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -7219,8 +7226,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -7229,8 +7236,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -7239,8 +7246,8 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) @@ -7252,7 +7259,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x3_rc1.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x3_rc1.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyle_IdentifiableCurveStyle: @@ -7262,9 +7269,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -7274,7 +7281,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -7284,8 +7291,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -7294,8 +7301,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -7304,8 +7311,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -7314,8 +7321,8 @@ class IfcDeepFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -7324,8 +7331,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -7334,8 +7341,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -7344,11 +7351,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -7358,11 +7365,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @@ -7372,9 +7379,9 @@ class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_rc1.ifcconic', 'ifc4x3_rc1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcDiscreteAccessory_CorrectPredefinedType: @@ -7384,8 +7391,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -7394,8 +7401,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -7404,8 +7411,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7414,8 +7421,8 @@ class IfcDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7424,8 +7431,8 @@ class IfcDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7434,8 +7441,8 @@ class IfcDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7444,8 +7451,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7454,8 +7461,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7464,8 +7471,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -7474,8 +7481,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectStyleAssigned: @@ -7485,8 +7492,8 @@ class IfcDoor_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -7495,8 +7502,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -7506,8 +7513,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -7517,8 +7524,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -7528,8 +7535,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -7539,7 +7546,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc1.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc1.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -7548,7 +7555,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc1.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc1.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7557,8 +7564,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -7567,7 +7574,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -7576,7 +7583,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -7585,8 +7592,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7595,8 +7602,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7605,8 +7612,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7615,8 +7622,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7625,8 +7632,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7635,8 +7642,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -7645,8 +7652,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -7655,8 +7662,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7665,8 +7672,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEarthworksCut_CorrectPredefinedType: SCOPE = 'entity' @@ -7675,8 +7682,8 @@ class IfcEarthworksCut_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEarthworksFill_CorrectPredefinedType: SCOPE = 'entity' @@ -7685,8 +7692,8 @@ class IfcEarthworksFill_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7695,9 +7702,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7709,7 +7716,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7719,8 +7726,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7729,8 +7736,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7739,8 +7746,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7749,8 +7756,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7759,8 +7766,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7769,8 +7776,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7779,8 +7786,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7789,8 +7796,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7799,8 +7806,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7809,8 +7816,8 @@ class IfcElectricFlowTreatmentDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7819,8 +7826,8 @@ class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricflowtreatmentdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricflowtreatmentdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7829,8 +7836,8 @@ class IfcElectricFlowTreatmentDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7839,8 +7846,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7849,8 +7856,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7859,8 +7866,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -7869,8 +7876,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7879,8 +7886,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7889,8 +7896,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -7899,8 +7906,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -7909,8 +7916,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -7919,8 +7926,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -7929,8 +7936,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -7939,8 +7946,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -7949,8 +7956,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -7959,7 +7966,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -7969,8 +7976,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -7979,8 +7986,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -7989,8 +7996,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -7999,8 +8006,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -8009,8 +8016,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8019,8 +8026,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -8029,8 +8036,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -8039,8 +8046,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8049,8 +8056,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -8059,8 +8066,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -8069,9 +8076,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -8080,8 +8087,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -8090,9 +8097,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -8101,9 +8108,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -8113,7 +8120,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -8122,7 +8129,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -8131,7 +8138,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x3_rc1.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -8144,8 +8151,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -8154,8 +8161,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -8164,8 +8171,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -8174,8 +8181,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8184,8 +8191,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8194,8 +8201,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: SCOPE = 'entity' @@ -8204,7 +8211,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -8213,7 +8220,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -8222,7 +8229,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc1.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc1.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -8231,7 +8238,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc1.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc1.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -8240,7 +8247,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -8249,8 +8256,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -8259,8 +8266,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -8269,8 +8276,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8279,8 +8286,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8289,8 +8296,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8299,8 +8306,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8309,8 +8316,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8319,8 +8326,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectPredefinedType: SCOPE = 'entity' @@ -8329,8 +8336,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -8339,8 +8346,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8349,8 +8356,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -8359,8 +8366,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8369,8 +8376,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8379,8 +8386,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -8389,8 +8396,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8399,8 +8406,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8409,8 +8416,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -8419,8 +8426,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8429,8 +8436,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8439,8 +8446,8 @@ class IfcFurnitureType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -8449,8 +8456,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -8459,8 +8466,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -8469,8 +8476,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -8479,7 +8486,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_rc1.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_rc1.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -8488,8 +8495,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -8498,7 +8505,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x3_rc1.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -8508,9 +8515,9 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedtargetview))) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -8519,23 +8526,23 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False def calc_IfcGeometricRepresentationSubContext_WorldCoordinateSystem(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -8544,12 +8551,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGridAxis_WR1: SCOPE = 'entity' @@ -8558,8 +8565,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -8568,9 +8575,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -8583,8 +8590,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -8593,8 +8600,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8603,8 +8610,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -8613,8 +8620,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -8623,8 +8630,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -8633,8 +8640,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -8643,8 +8650,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -8654,8 +8661,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcIShapeProfileDef_ValidFilletRadius: @@ -8665,11 +8672,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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 IfcImpactProtectionDevice_CorrectPredefinedType: @@ -8679,8 +8686,8 @@ class IfcImpactProtectionDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcImpactProtectionDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8689,8 +8696,8 @@ class IfcImpactProtectionDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcimpactprotectiondevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcimpactprotectiondevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcImpactProtectionDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8699,8 +8706,8 @@ class IfcImpactProtectionDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIndexedPolyCurve_Consecutive: SCOPE = 'entity' @@ -8709,7 +8716,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -8719,8 +8726,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8729,8 +8736,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8739,8 +8746,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8749,7 +8756,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8758,7 +8765,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8767,8 +8774,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8777,8 +8784,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8787,8 +8794,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8797,9 +8804,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8809,8 +8816,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8819,8 +8826,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -8829,8 +8836,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -8839,8 +8846,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -8849,8 +8856,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -8859,8 +8866,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8869,8 +8876,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8879,8 +8886,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -8889,9 +8896,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLiquidTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8900,8 +8907,8 @@ class IfcLiquidTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLiquidTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8910,8 +8917,8 @@ class IfcLiquidTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcliquidterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcliquidterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLiquidTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8920,8 +8927,8 @@ class IfcLiquidTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -8930,8 +8937,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMarineFacility_CorrectPredefinedType: @@ -8941,8 +8948,8 @@ class IfcMarineFacility_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: SCOPE = 'entity' @@ -8951,7 +8958,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_rc1.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -8961,7 +8968,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -8974,7 +8981,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -8984,8 +8991,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8994,8 +9001,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -9004,8 +9011,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9014,8 +9021,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9024,8 +9031,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9034,8 +9041,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -9044,8 +9051,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -9054,8 +9061,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -9064,7 +9071,7 @@ class IfcMemberStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -9073,8 +9080,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -9086,8 +9093,8 @@ class IfcMobileTelecommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -9096,8 +9103,8 @@ class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmobiletelecommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmobiletelecommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9106,8 +9113,8 @@ class IfcMobileTelecommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9116,8 +9123,8 @@ class IfcMooringDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9126,8 +9133,8 @@ class IfcMooringDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmooringdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmooringdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMooringDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9136,8 +9143,8 @@ class IfcMooringDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectPredefinedType: SCOPE = 'entity' @@ -9146,8 +9153,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -9156,8 +9163,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -9166,8 +9173,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -9176,7 +9183,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcNavigationElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9185,8 +9192,8 @@ class IfcNavigationElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcNavigationElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9195,8 +9202,8 @@ class IfcNavigationElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcnavigationelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcnavigationelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcNavigationElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9205,8 +9212,8 @@ class IfcNavigationElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -9215,7 +9222,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -9225,8 +9232,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -9235,8 +9242,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -9245,8 +9252,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -9255,8 +9262,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOpenCrossProfileDef_CorrectProfileType: SCOPE = 'entity' @@ -9265,7 +9272,7 @@ class IfcOpenCrossProfileDef_CorrectProfileType: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: SCOPE = 'entity' @@ -9274,8 +9281,8 @@ class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: @staticmethod def __call__(self): - widths = getattr(self, 'Widths', INDETERMINATE) - slopes = getattr(self, 'Slopes', INDETERMINATE) + widths = express_getattr(self, 'Widths', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) assert (sizeof(slopes) == sizeof(widths)) is not False class IfcOpenCrossProfileDef_CorrespondingTags: @@ -9285,8 +9292,8 @@ class IfcOpenCrossProfileDef_CorrespondingTags: @staticmethod def __call__(self): - slopes = getattr(self, 'Slopes', INDETERMINATE) - tags = getattr(self, 'Tags', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) + tags = express_getattr(self, 'Tags', INDETERMINATE) assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False class IfcOrientedEdge_EdgeElementNotOriented: @@ -9296,18 +9303,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x3_rc1.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -9316,8 +9323,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -9326,8 +9333,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -9336,8 +9343,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -9346,9 +9353,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -9366,8 +9373,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -9376,9 +9383,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -9388,9 +9395,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -9400,7 +9407,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -9410,7 +9417,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -9420,8 +9427,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -9430,8 +9437,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -9440,8 +9447,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -9450,8 +9457,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -9460,8 +9467,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9470,8 +9477,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -9480,8 +9487,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -9490,8 +9497,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -9500,8 +9507,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -9510,7 +9517,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -9520,7 +9527,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -9530,7 +9537,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_SizeOfPixelList: @@ -9540,9 +9547,9 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_getattr(self, 'Pixel', INDETERMINATE) assert (sizeof(pixel) == width * height) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -9552,12 +9559,12 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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 def calc_IfcPlacement_Dim(self): - location = getattr(self, 'Location', INDETERMINATE) - return getattr(location, 'Dim', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -9566,8 +9573,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -9576,8 +9583,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -9586,7 +9593,7 @@ class IfcPlateStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -9595,16 +9602,16 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_AllPointsSameDim: SCOPE = 'entity' @@ -9613,8 +9620,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -9623,8 +9630,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -9633,7 +9640,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x3_rc1.ifcpolyline', 'ifc4x3_rc1.ifccompositecurve']) == 1) is not False class IfcPolyline_SameDim: @@ -9643,8 +9650,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPositioningElement_HasPlacement: SCOPE = 'entity' @@ -9653,7 +9660,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -9662,13 +9669,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -9678,7 +9685,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_rc1.ifcshaperepresentation', 'ifc4x3_rc1.ifcgeometricrepresentationitem', 'ifc4x3_rc1.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -9688,7 +9695,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_rc1.ifcgeometricrepresentationitem', 'ifc4x3_rc1.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_HasName: @@ -9698,7 +9705,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedure_CorrectPredefinedType: SCOPE = 'entity' @@ -9707,8 +9714,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9717,8 +9724,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -9727,9 +9734,9 @@ class IfcProduct_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_rc1.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3_rc1.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -9738,7 +9745,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_rc1.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_HasName: @@ -9748,7 +9755,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_CorrectContext: SCOPE = 'entity' @@ -9757,7 +9764,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_rc1.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_rc1.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -9766,7 +9773,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -9775,8 +9782,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: SCOPE = 'entity' @@ -9785,8 +9792,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -9796,8 +9803,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: @@ -9807,8 +9814,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -9818,8 +9825,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -9829,9 +9836,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -9840,7 +9847,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -9849,7 +9856,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -9858,7 +9865,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -9867,7 +9874,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -9877,7 +9884,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -9886,7 +9893,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -9896,8 +9903,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -9907,8 +9914,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -9917,8 +9924,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9927,8 +9934,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9937,8 +9944,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -9947,8 +9954,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -9957,8 +9964,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -9967,8 +9974,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9977,8 +9984,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProxy_WR1: SCOPE = 'entity' @@ -9987,7 +9994,7 @@ class IfcProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -9996,8 +10003,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -10006,8 +10013,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -10016,8 +10023,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -10026,7 +10033,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -10035,7 +10042,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -10045,7 +10052,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0.0) is not False class IfcQuantityLength_WR21: @@ -10055,7 +10062,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -10064,7 +10071,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -10074,7 +10081,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -10083,7 +10090,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -10093,7 +10100,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -10102,7 +10109,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -10112,7 +10119,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -10121,7 +10128,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRail_CorrectPredefinedType: @@ -10131,8 +10138,8 @@ class IfcRail_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRail_CorrectTypeAssigned: SCOPE = 'entity' @@ -10141,8 +10148,8 @@ class IfcRail_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcrailtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcrailtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailType_CorrectPredefinedType: SCOPE = 'entity' @@ -10151,8 +10158,8 @@ class IfcRailType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailing_CorrectPredefinedType: SCOPE = 'entity' @@ -10161,8 +10168,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -10171,8 +10178,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -10181,8 +10188,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -10191,8 +10198,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -10201,8 +10208,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10211,8 +10218,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10221,8 +10228,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10231,8 +10238,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -10241,8 +10248,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -10251,8 +10258,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -10264,8 +10271,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -10274,8 +10281,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -10287,9 +10294,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidWallThickness: @@ -10299,8 +10306,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangleHollowProfileDef_ValidInnerRadius: SCOPE = 'entity' @@ -10309,9 +10316,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -10320,8 +10327,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -10330,8 +10337,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -10341,8 +10348,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -10352,10 +10359,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x3_rc1.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x3_rc1.ifcplane' in typeof(basissurface)) or 'ifc4x3_rc1.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -10365,9 +10372,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcedSoil_CorrectPredefinedType: @@ -10377,8 +10384,8 @@ class IfcReinforcedSoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectPredefinedType: SCOPE = 'entity' @@ -10387,8 +10394,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -10397,8 +10404,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_CorrectPredefinedType: SCOPE = 'entity' @@ -10407,8 +10414,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10417,8 +10424,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMesh_CorrectPredefinedType: @@ -10428,8 +10435,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -10438,8 +10445,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_CorrectPredefinedType: SCOPE = 'entity' @@ -10448,8 +10455,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10458,8 +10465,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcRelAggregates_NoSelfReference: @@ -10469,8 +10476,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssigns_WR1: @@ -10480,8 +10487,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -10491,8 +10498,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -10501,8 +10508,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -10511,8 +10518,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -10521,8 +10528,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -10531,8 +10538,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -10541,8 +10548,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -10551,7 +10558,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc1.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_rc1.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc1.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_rc1.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -10560,7 +10567,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_rc1.ifcelement', 'ifc4x3_rc1.ifcelementtype', 'ifc4x3_rc1.ifcwindowstyle', 'ifc4x3_rc1.ifcdoorstyle', 'ifc4x3_rc1.ifcstructuralmember', 'ifc4x3_rc1.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_rc1.ifcelement', 'ifc4x3_rc1.ifcelementtype', 'ifc4x3_rc1.ifcwindowstyle', 'ifc4x3_rc1.ifcdoorstyle', 'ifc4x3_rc1.ifcstructuralmember', 'ifc4x3_rc1.ifcport']) == 0]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -10569,8 +10576,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @@ -10580,7 +10587,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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 IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -10590,7 +10597,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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 IfcRelConnectsPorts_NoSelfReference: @@ -10600,8 +10607,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -10611,7 +10618,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_rc1.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -10621,8 +10628,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -10632,7 +10639,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc1.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc1.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -10641,8 +10648,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -10652,8 +10659,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -10663,8 +10670,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -10674,7 +10681,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_rc1.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x3_rc1.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -10684,8 +10691,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -10695,9 +10702,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -10706,9 +10713,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_rc1.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_rc1.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_rc1.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_rc1.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_rc1.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_rc1.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -10717,7 +10724,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -10727,7 +10734,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x3_rc1.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisStartInXY: @@ -10737,8 +10744,8 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: SCOPE = 'entity' @@ -10747,12 +10754,12 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', 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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -10761,7 +10768,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -10770,8 +10777,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -10780,8 +10787,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -10790,8 +10797,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -10800,11 +10807,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSiUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSiUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -10813,8 +10820,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -10823,8 +10830,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -10833,8 +10840,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -10843,7 +10850,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -10852,7 +10859,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -10861,8 +10868,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -10871,8 +10878,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -10881,7 +10888,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -10891,8 +10898,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -10902,8 +10909,8 @@ class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @staticmethod def __call__(self): - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) - assert (sizeof([temp for temp in crosssectionpositions if exists(getattr(temp, 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(temp, 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -10912,8 +10919,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_ConsistentProfileTypes: @@ -10923,8 +10930,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_SpineCurveDim: SCOPE = 'entity' @@ -10933,8 +10940,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -10946,8 +10953,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -10956,8 +10963,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -10966,8 +10973,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10976,8 +10983,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10986,8 +10993,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10996,8 +11003,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -11006,8 +11013,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -11016,7 +11023,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x3_rc1.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x3_rc1.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -11025,7 +11032,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x3_rc1.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x3_rc1.ifcvertexpoint', 'ifc4x3_rc1.ifcedgecurve', 'ifc4x3_rc1.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False class IfcShapeRepresentation_HasRepresentationType: @@ -11035,7 +11042,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -11044,7 +11051,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -11053,7 +11060,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): return 3 @@ -11065,8 +11072,8 @@ class IfcSign_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSign_CorrectTypeAssigned: SCOPE = 'entity' @@ -11075,8 +11082,8 @@ class IfcSign_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsigntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsigntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignType_CorrectPredefinedType: SCOPE = 'entity' @@ -11085,8 +11092,8 @@ class IfcSignType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSignal_CorrectPredefinedType: SCOPE = 'entity' @@ -11095,8 +11102,8 @@ class IfcSignal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSignal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11105,8 +11112,8 @@ class IfcSignal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsignaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsignaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11115,8 +11122,8 @@ class IfcSignalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSlab_CorrectPredefinedType: SCOPE = 'entity' @@ -11125,8 +11132,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -11135,8 +11142,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabElementedCase_HasDecomposition: SCOPE = 'entity' @@ -11145,7 +11152,7 @@ class IfcSlabElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcSlabStandardCase_HasMaterialLayerSetusage: SCOPE = 'entity' @@ -11154,7 +11161,7 @@ class IfcSlabStandardCase_HasMaterialLayerSetusage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -11163,8 +11170,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11173,8 +11180,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11183,8 +11190,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11193,8 +11200,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -11206,8 +11213,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -11216,8 +11223,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -11226,8 +11233,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -11236,8 +11243,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -11246,8 +11253,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11256,8 +11263,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -11266,7 +11273,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_rc1.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_rc1.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_rc1.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_rc1.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -11275,8 +11282,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -11285,8 +11292,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -11295,8 +11302,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11305,8 +11312,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11315,8 +11322,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11325,8 +11332,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -11335,8 +11342,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -11345,8 +11352,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -11355,8 +11362,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -11365,8 +11372,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -11375,8 +11382,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -11385,8 +11392,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_HasObjectType: SCOPE = 'entity' @@ -11395,8 +11402,8 @@ class IfcStructuralAnalysisModel_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11405,8 +11412,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -11415,8 +11422,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -11425,8 +11432,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -11435,8 +11442,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -11445,8 +11452,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -11455,8 +11462,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -11465,7 +11472,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc1.ifcstructuralloadlinearforce', 'ifc4x3_rc1.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc1.ifcstructuralloadlinearforce', 'ifc4x3_rc1.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -11474,7 +11481,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -11483,7 +11490,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -11492,8 +11499,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -11503,10 +11510,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -11515,7 +11522,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc1.ifcstructuralloadplanarforce', 'ifc4x3_rc1.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc1.ifcstructuralloadplanarforce', 'ifc4x3_rc1.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -11524,7 +11531,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -11533,7 +11540,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc1.ifcstructuralloadsingleforce', 'ifc4x3_rc1.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc1.ifcstructuralloadsingleforce', 'ifc4x3_rc1.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -11542,7 +11549,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc1.ifcstructuralloadsingleforce', 'ifc4x3_rc1.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc1.ifcstructuralloadsingleforce', 'ifc4x3_rc1.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -11551,8 +11558,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11561,8 +11568,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -11571,8 +11578,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -11581,8 +11588,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -11591,8 +11598,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -11601,7 +11608,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x3_rc1.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -11611,7 +11618,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc1.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc1.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -11620,8 +11627,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11630,8 +11637,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -11643,8 +11650,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -11653,7 +11660,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x3_rc1.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -11666,8 +11673,8 @@ class IfcSurfaceFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -11676,17 +11683,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: SCOPE = 'entity' @@ -11695,9 +11702,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceReinforcementArea_NonnegativeArea1: @@ -11707,7 +11714,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -11717,7 +11724,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -11727,7 +11734,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceStyle_MaxOneShading: @@ -11737,7 +11744,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -11746,7 +11753,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -11755,7 +11762,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -11764,7 +11771,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneExtDefined: SCOPE = 'entity' @@ -11773,7 +11780,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc1.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -11782,8 +11789,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixDim: SCOPE = 'entity' @@ -11792,8 +11799,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -11802,8 +11809,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolid_DirectrixBounded: @@ -11813,9 +11820,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_rc1.ifcconic', 'ifc4x3_rc1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -11825,8 +11832,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -11835,7 +11842,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x3_rc1.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_rc1.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x3_rc1.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_rc1.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -11844,8 +11851,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11854,8 +11861,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11864,8 +11871,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11874,8 +11881,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -11884,8 +11891,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -11894,8 +11901,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -11904,8 +11911,8 @@ class IfcSystemFurnitureElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -11914,8 +11921,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -11925,8 +11932,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -11936,8 +11943,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -11946,20 +11953,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -11968,8 +11975,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -11978,8 +11985,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -11988,8 +11995,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -11998,7 +12005,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -12007,8 +12014,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -12017,8 +12024,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -12027,12 +12034,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -12042,8 +12049,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -12052,8 +12059,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -12062,8 +12069,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -12072,8 +12079,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12082,8 +12089,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -12092,8 +12099,8 @@ class IfcTendonConduit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -12102,8 +12109,8 @@ class IfcTendonConduit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -12112,8 +12119,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -12122,8 +12129,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -12135,7 +12142,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x3_rc1.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -12145,7 +12152,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x3_rc1.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x3_rc1.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -12154,7 +12161,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc1.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc1.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -12163,7 +12170,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -12172,7 +12179,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -12181,8 +12188,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTrackElement_CorrectPredefinedType: @@ -12192,8 +12199,8 @@ class IfcTrackElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTrackElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12202,8 +12209,8 @@ class IfcTrackElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctrackelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctrackelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTrackElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12212,8 +12219,8 @@ class IfcTrackElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransformer_CorrectPredefinedType: SCOPE = 'entity' @@ -12222,8 +12229,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -12232,8 +12239,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctranformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctranformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -12242,8 +12249,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12252,8 +12259,8 @@ class IfcTransportElement_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or (predefinedtype != getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or (predefinedtype != express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12262,8 +12269,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12272,11 +12279,11 @@ class IfcTransportElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or ((predefinedtype == getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or ((predefinedtype == express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -12286,7 +12293,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: SCOPE = 'entity' @@ -12295,7 +12302,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -12305,7 +12312,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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 IfcTrimmedCurve_NoTrimOfBoundedCurves: @@ -12315,7 +12322,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x3_rc1.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTubeBundle_CorrectPredefinedType: @@ -12325,8 +12332,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12335,8 +12342,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12345,8 +12352,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -12355,7 +12362,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -12364,7 +12371,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -12374,7 +12381,7 @@ class IfcTypeProduct_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_rc1.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x3_rc1.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12383,8 +12390,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -12394,8 +12401,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -12405,7 +12412,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -12415,8 +12422,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12425,8 +12432,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12435,8 +12442,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -12445,8 +12452,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -12455,8 +12462,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -12465,8 +12472,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -12475,8 +12482,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -12485,8 +12492,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -12495,8 +12502,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -12505,12 +12512,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -12519,8 +12526,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -12529,8 +12536,8 @@ class IfcVibrationDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -12539,8 +12546,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -12549,8 +12556,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -12559,8 +12566,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12569,8 +12576,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVoidingFeature_HasObjectType: SCOPE = 'entity' @@ -12579,8 +12586,8 @@ class IfcVoidingFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -12589,8 +12596,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -12599,8 +12606,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallElementedCase_HasDecomposition: SCOPE = 'entity' @@ -12609,7 +12616,7 @@ class IfcWallElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -12618,7 +12625,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc1.ifcrelassociates.relatedobjects') if 'ifc4x3_rc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc1.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -12627,8 +12634,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -12637,8 +12644,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -12647,8 +12654,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -12657,8 +12664,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectStyleAssigned: SCOPE = 'entity' @@ -12667,8 +12674,8 @@ class IfcWindow_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc1.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -12677,8 +12684,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -12688,8 +12695,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -12699,8 +12706,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -12710,7 +12717,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc1.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc1.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -12719,7 +12726,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc1.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc1.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc1.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -12728,8 +12735,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -12738,8 +12745,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -12748,8 +12755,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -12758,8 +12765,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12768,8 +12775,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -12779,19 +12786,19 @@ class IfcZone_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_rc1.ifczone' in typeof(temp) or 'ifc4x3_rc1.ifcspace' in typeof(temp) or 'ifc4x3_rc1.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x3_rc1.ifczone' in typeof(temp) or 'ifc4x3_rc1.ifcspace' in typeof(temp) or 'ifc4x3_rc1.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -12801,11 +12808,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -12819,13 +12826,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -12843,7 +12850,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -12880,11 +12887,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -13064,7 +13071,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x3_rc1.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x3_rc1.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -13075,27 +13082,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc1.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc1.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc1.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc1.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc1.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc1.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc1.ifcproject' in typeof(temp)]) return count == 0 else: @@ -13107,26 +13114,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc1.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc1.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc1.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc1.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc1.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x3_rc1.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_rc1.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) + if 'ifc4x3_rc1.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x3_rc1.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13135,17 +13142,17 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x3_rc1.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc1.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc1.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc1.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x3_rc1.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc1.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc1.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x3_rc1.ifcoffsetcurve3d' in typeof(curve): @@ -13159,13 +13166,13 @@ def IfcCurveDim(curve): if 'ifc4x3_rc1.ifcpcurve' in typeof(curve): return 3 if 'ifc4x3_rc1.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -13173,13 +13180,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSiUnit(n): @@ -13249,15 +13256,15 @@ def IfcDimensionsForSiUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -13266,36 +13273,36 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x3_rc1.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x3_rc1.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x3_rc1.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcListToArray(lis, low, u): @@ -13312,9 +13319,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -13332,10 +13339,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -13346,25 +13353,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x3_rc1.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x3_rc1.ifcvector' in typeof(arg): vec.Orientation = v @@ -13376,18 +13383,18 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointListDim(pointlist): @@ -13398,32 +13405,32 @@ def IfcPointListDim(pointlist): 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -13444,15 +13451,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x3_rc1.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -13468,71 +13475,71 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x3_rc1.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_rc1.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x3_rc1.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_rc1.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x3_rc1.ifcpoint', 'ifc4x3_rc1.ifccurve', 'ifc4x3_rc1.ifcgeometriccurveset', 'ifc4x3_rc1.ifcannotationfillarea', 'ifc4x3_rc1.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcgeometricset' in typeof(temp) or 'ifc4x3_rc1.ifcpoint' in typeof(temp) or 'ifc4x3_rc1.ifccurve' in typeof(temp) or ('ifc4x3_rc1.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcgeometriccurveset' in typeof(temp) or 'ifc4x3_rc1.ifcgeometricset' in typeof(temp) or 'ifc4x3_rc1.ifcpoint' in typeof(temp) or ('ifc4x3_rc1.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x3_rc1.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_rc1.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x3_rc1.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc1.ifctessellateditem', 'ifc4x3_rc1.ifcshellbasedsurfacemodel', 'ifc4x3_rc1.ifcfacebasedsurfacemodel', 'ifc4x3_rc1.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc1.ifctessellateditem', 'ifc4x3_rc1.ifcshellbasedsurfacemodel', 'ifc4x3_rc1.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc1.ifcextrudedareasolid', 'ifc4x3_rc1.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x3_rc1.ifcextrudedareasolidtapered', 'ifc4x3_rc1.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc1.ifcsweptareasolid', 'ifc4x3_rc1.ifcsweptdisksolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc1.ifcbooleanresult', 'ifc4x3_rc1.ifccsgprimitive3d', 'ifc4x3_rc1.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc1.ifccsgsolid', 'ifc4x3_rc1.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcmappeditem' in typeof(temp)]) else: return None @@ -13540,9 +13547,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -13552,28 +13559,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x3_rc1.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x3_rc1.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x3_rc1.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x3_rc1.ifcopenshell' in typeof(temp) or 'ifc4x3_rc1.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -13584,7 +13591,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x3_rc1.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x3_rc1.ifcpropertysetdefinitionset' in typeof(definition): @@ -13597,7 +13604,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -13605,7 +13612,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x3_rc1.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -13613,41 +13620,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_rc1.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_rc1.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13655,31 +13662,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_rc1.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_rc1.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py index 7b8fa6f30b..516271085a 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,2362 +147,2362 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionTypeEnum = enum_namespace() -permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAddressTypeEnum = enum_namespace() -office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -railwaycrocodile = getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) +railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAlignmentCantSegmentTypeEnum = enum_namespace() -constantcant = getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -lineartransition = getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -biquadraticparabola = getattr(IfcAlignmentCantSegmentTypeEnum, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cosinecurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) +lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) +biquadraticparabola = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BIQUADRATICPARABOLA', INDETERMINATE) +blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -line = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -circulararc = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cubicspiral = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBICSPIRAL', INDETERMINATE) -biquadraticparabola = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cosinecurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +cubicspiral = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBICSPIRAL', INDETERMINATE) +biquadraticparabola = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BIQUADRATICPARABOLA', INDETERMINATE) +blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -constantgradient = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -circulararc = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -parabolicarc = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) -clothoid = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnnotationTypeEnum = enum_namespace() -assumedpoint = getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -asbuiltarea = getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -non_physical_signal = getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -assumedline = getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -widthevent = getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -assumedarea = getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -superelevationevent = getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -asbuiltpoint = getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -userdefined = getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) +asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) +asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) +non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) +assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) +widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) +assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) +superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) +asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) +userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', 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) -speaker = getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -railway_communication_terminal = getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) -userdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +railway_communication_terminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBSplineCurveForm = enum_namespace() -polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) IfcBSplineSurfaceForm = enum_namespace() -plane_surf = getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) IfcBeamTypeEnum = enum_namespace() -beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) +guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) +guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) +free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeEnum = enum_namespace() -cylindrical = getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBenchmarkEnum = enum_namespace() -greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) IfcBoilerTypeEnum = enum_namespace() -water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', 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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -safetycage = getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) +safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -reinforcing = getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -erosionprevention = getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -userdefined = getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) +prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuiltSystemTypeEnum = enum_namespace() -reinforcing = getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -mooring = getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -trackcircuit = getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -erosionprevention = getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -foundation = getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -shading = getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -fenestration = getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -mooringsystem = getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) -transport = getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -prestressing = getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) +mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) +outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) +erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) +fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +mooringsystem = express_getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) +transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -cablebracket = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -catenarywire = getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -dropper = getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) +catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) +dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableFittingTypeEnum = enum_namespace() -connector = getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -fanout = getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -userdefined = getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -contactwiresegment = getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', 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) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) +fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) +fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) +opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) +stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) +wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCaissonFoundationTypeEnum = enum_namespace() -well = getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChangeActionEnum = enum_namespace() -nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) IfcChillerTypeEnum = enum_namespace() -aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcColumnTypeEnum = enum_namespace() -column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -automaton = getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -intelligent_peripheral = getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) -ip_network_equipment = getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) -optical_network_unit = getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', 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) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) +intelligent_peripheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) +ip_network_equipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) +optical_network_unit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', INDETERMINATE) +telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) +telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) +transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) +transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) +transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) IfcCompressorTypeEnum = enum_namespace() -dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConnectionTypeEnum = enum_namespace() -atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConstraintEnum = enum_namespace() -hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -notdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcControllerTypeEnum = enum_namespace() -floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConveyorSegmentTypeEnum = enum_namespace() -chuteconveyor = getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -beltconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -screwconveyor = getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -bucketconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -userdefined = getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) +beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) +screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) +bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) +userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostScheduleTypeEnum = enum_namespace() -budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCourseTypeEnum = enum_namespace() -armour = getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -filter = getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -ballastbed = getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -pavement = getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) +filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) +ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) +core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) +pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) +protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoveringTypeEnum = enum_namespace() -ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -birdprotection = getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -cablearranger = getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -insulator = getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -tensioningequipment = getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -railpad = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -slidingchair = getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -panel_strengthening = getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -railbrace = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -elastic_cushion = getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -soundabsorption = getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -rail_lubrication = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -rail_mechanical_equipment = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -userdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) +cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) +insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) +lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) +tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) +railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) +slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) +panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) +railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) +elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) +soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) +rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) +rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionBoardTypeEnum = enum_namespace() -switchboard = getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -consumerunit = getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -motorcontrolcentre = getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -distributionframe = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -distributionboard = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -userdefined = getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) +distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionSystemEnum = enum_namespace() -airconditioning = getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', 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) -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) -municipalsolidwaste = getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = getattr(IfcDistributionSystemEnum, 'REFRIGERATION', 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) -catenary_system = getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -overhead_contactline_system = getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -return_circuit = getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -userdefined = getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) +overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) +return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentConfidentialityEnum = enum_namespace() -public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentStatusEnum = enum_namespace() -draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorPanelOperationEnum = enum_namespace() -swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeEnum = enum_namespace() -door = getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -boom_barrier = getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -turnstile = getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) +turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', 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_swing_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', 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) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEarthworksCutTypeEnum = enum_namespace() -trench = getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -dredging = getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -topsoilremoval = getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -stepexcavation = getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -pavementmilling = getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -cut = getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -base_excavation = getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -userdefined = getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) +dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) +excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) +overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) +topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) +stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) +pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) +cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) +base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEarthworksFillTypeEnum = enum_namespace() -backfill = getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -subgrade = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -embankment = getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -transitionsection = getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -subgradebed = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -slopefill = getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -userdefined = getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) +counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) +subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) +embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) +transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) +subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) +slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -freestandingwaterheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', 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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -capacitor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -compensator = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -inductor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -recharger = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) +compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) +inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) +recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementAssemblyTypeEnum = enum_namespace() -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) -girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -mast = getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -signalassembly = getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -grid = getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -shelter = getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -supportingassembly = getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -traction_switching_assembly = getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -trackpanel = getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -turnoutpanel = getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -dilatationpanel = getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -rail_mechanical_equipment_assembly = getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -entranceworks = getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -sumpbuster = getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -traffic_calming_device = getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) +signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) +grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) +shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) +supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) +suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) +traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) +trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) +turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) +dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) +rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) +entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) +sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) +traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTriggerTypeEnum = enum_namespace() -eventrule = getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTypeEnum = enum_namespace() -startevent = getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcExternalSpatialElementTypeEnum = enum_namespace() -external = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFacilityPartCommonTypeEnum = enum_namespace() -segment = getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -aboveground = getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -junction = getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -belowground = getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -substructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -terminal = getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -superstructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) +aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) +junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) +levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) +belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) +substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) +superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFacilityUsageEnum = enum_namespace() -lateral = getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -region = getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -longitudinal = getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -userdefined = getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) +region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) +vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) +longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', 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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowDirectionEnum = enum_namespace() -source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -combined = getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -voltmeter = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -userdefined = getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) +voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFurnitureTypeEnum = enum_namespace() -chair = getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -technicalcabinet = getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeographicElementTypeEnum = enum_namespace() -terrain = getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeometricProjectionEnum = enum_namespace() -graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_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) -elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) IfcGridTypeEnum = enum_namespace() -rectangular = getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHumidifierTypeEnum = enum_namespace() -steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcImpactProtectionDeviceTypeEnum = enum_namespace() -crashcushion = getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -bumper = getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -userdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) +dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) +fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) +bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) +userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcInternalOrExternalEnum = enum_namespace() -internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) IfcInventoryTypeEnum = enum_namespace() -assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKnotType = enum_namespace() -uniform_knots = getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcLightFixtureTypeEnum = enum_namespace() -pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLiquidTerminalTypeEnum = enum_namespace() -loadingarm = getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -hosereel = getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -userdefined = getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) +hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLoadGroupTypeEnum = enum_namespace() -load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLogicalOperatorEnum = enum_namespace() -logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) IfcMarineFacilityTypeEnum = enum_namespace() -canal = getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -waterwayshiplift = getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -embankment = getattr(IfcMarineFacilityTypeEnum, 'EMBANKMENT', INDETERMINATE) -launchrecovery = getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -hydrolift = getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -shipyard = getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -shiplift = getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -port = getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -floatingdock = getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -navigationalchannel = getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -breakwater = getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -drydock = getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -jetty = getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -shiplock = getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -barrierbeach = getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -slipway = getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -userdefined = getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) +waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) +embankment = express_getattr(IfcMarineFacilityTypeEnum, 'EMBANKMENT', INDETERMINATE) +launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) +marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) +hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) +shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) +shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) +port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) +quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) +floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) +navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) +breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) +drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) +jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) +shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) +barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) +slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) +waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) +userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMarinePartTypeEnum = enum_namespace() -crest = getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -manufacturing = getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -lowwaterline = getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -core = getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -waterfield = getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -cill_level = getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -berthingstructure = getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -copelevel = getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -chamber = getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -storage = getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) -approachchannel = getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -vehicleservicing = getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -shiptransfer = getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -gatehead = getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -belowwaterline = getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -weatherside = getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -landfield = getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -protection = getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -leewardside = getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -abovewaterline = getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -navigationalarea = getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -highwaterline = getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -userdefined = getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) +manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) +lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) +core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) +waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) +cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) +berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) +copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) +chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) +storage = express_getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) +approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) +vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) +shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) +gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) +gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) +belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) +weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) +landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) +protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) +leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) +abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) +anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) +navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) +highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) +userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -railjoint = getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -railfastening = getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -chain = getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -rope = getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -userdefined = getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) +railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) +chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) +rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMemberTypeEnum = enum_namespace() -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) -stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -structuralcable = getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -tiebar = getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) +tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -e_utran_node_b = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -remote_radio_unit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) -accesspoint = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basetransceiverstation = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -remoteunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -basebandunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -masterunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -userdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) +remote_radio_unit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) +accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) +basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) +remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) +basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) +masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) +userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMooringDeviceTypeEnum = enum_namespace() -linetensioner = getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -bollard = getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -userdefined = getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) +magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) +mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) +vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) +bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) +userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) +buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) +userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcNullStyle = enum_namespace() -null = getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, '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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcPileTypeEnum = enum_namespace() -bored = getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPipeSegmentTypeEnum = enum_namespace() -culvert = getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPlateTypeEnum = enum_namespace() -curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', 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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -anti_arcing_device = getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -sparkgap = getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -voltagelimiter = getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) +sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) +voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailTypeEnum = enum_namespace() -rackrail = getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -blade = getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -guardrail = getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -stockrail = getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -checkrail = getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -rail = getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -userdefined = getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) +blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) +guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) +stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) +checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) +rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailingTypeEnum = enum_namespace() -handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayPartTypeEnum = enum_namespace() -trackstructure = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -linesidestructurepart = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -dilatationsuperstructure = getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -plaintracksupestructure = getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) -linesidestructure = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -superstructure = getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -turnoutsuperstructure = getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) +trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) +linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) +dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) +plaintracksupestructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) +linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampFlightTypeEnum = enum_namespace() -straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampTypeEnum = enum_namespace() -straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRecurrenceTypeEnum = enum_namespace() -daily = getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) IfcReferentTypeEnum = enum_namespace() -kilopoint = getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -referencemarker = getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcedSoilTypeEnum = enum_namespace() -surchargepreloaded = getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -dynamicallycompacted = getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -replaced = getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -grouted = getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -userdefined = getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) +verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) +dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) +replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) +rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) +grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarRoleEnum = enum_namespace() -main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) -stud = getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadPartTypeEnum = enum_namespace() -roadsidepart = getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -bus_stop = getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -hardshoulder = getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -passingbay = getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -roadwayplateau = getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roadside = getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -refugeisland = getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -tollplaza = getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -centralreserve = getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -sidewalk = getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -parkingbay = getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -railwaycrossing = getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -pedestrian_crossing = getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -softshoulder = getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -bicyclecrossing = getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -centralisland = getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -shoulder = getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -trafficlane = getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -roadsegment = getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roundabout = getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -layby = getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -carriageway = getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -trafficisland = getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -userdefined = getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) +bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) +hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) +intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) +passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) +roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) +roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) +refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) +tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) +centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) +sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) +parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) +railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) +pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) +softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) +bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) +centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) +shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) +trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) +roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) +roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) +layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) +carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) +trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) +userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoleEnum = enum_namespace() -supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) IfcRoofTypeEnum = enum_namespace() -flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSIPrefix = enum_namespace() -exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +atto = express_getattr(IfcSIPrefix, 'ATTO', 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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', 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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) IfcSensorTypeEnum = enum_namespace() -cosensor = getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', 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) -phsensor = getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -earthquakesensor = getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -foreignobjectdetectionsensor = getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -obstaclesensor = getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -rainsensor = getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -snowdepthsensor = getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -trainsensor = getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) +foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) +obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) +rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) +snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) +trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) +turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) +wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSequenceEnum = enum_namespace() -start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSignTypeEnum = enum_namespace() -marker = getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -pictoral = getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -mirror = getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -userdefined = getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) +pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) +mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) +userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSignalTypeEnum = enum_namespace() -visual = getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -audio = getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -userdefined = getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) +audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) +mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) +userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) IfcSlabTypeEnum = enum_namespace() -floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceTypeEnum = enum_namespace() -space = getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpatialZoneTypeEnum = enum_namespace() -construction = getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -reservation = getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -userdefined = getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairFlightTypeEnum = enum_namespace() -straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairTypeEnum = enum_namespace() -straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -ladder = getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStateEnum = enum_namespace() -readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -pavementsurfacemarking = getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -symbolmarking = getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -nonskidsurfacing = getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -rumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -transverserumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -userdefined = getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) +linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) +pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) +symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) +nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) +rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) +transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', 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) -selectorswitch = getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -relay = getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -start_and_stop_equipment = getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) +start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -subrack = getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -userdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -pressurevessel = getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -oilretentiontray = getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -userdefined = getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskTypeEnum = enum_namespace() -attendance = getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = getattr(IfcTaskTypeEnum, 'DISPOSAL', 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) -userdefined = getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTendonConduitTypeEnum = enum_namespace() -duct = getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTextPath = enum_namespace() -left = getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = getattr(IfcTextPath, 'UP', INDETERMINATE) -down = getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = express_getattr(IfcTextPath, 'DOWN', 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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrackElementTypeEnum = enum_namespace() -trackendofalignment = getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -blockingdevice = getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -vehiclestop = getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -sleeper = getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -half_set_of_blades = getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -speedregulator = getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -derailer = getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -userdefined = getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) +blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) +vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) +sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) +half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) +speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) +derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) +frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) +userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransformerTypeEnum = enum_namespace() -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) -chopper = getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) +combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransitionCode = enum_namespace() -discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) IfcTransitionCurveType = enum_namespace() -biquadraticparabola = getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) -clothoidcurve = getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) -cosinecurve = getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) -cubicparabola = getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) -sinecurve = getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) +biquadraticparabola = express_getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) +blosscurve = express_getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) +clothoidcurve = express_getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) +cosinecurve = express_getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) +cubicparabola = express_getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) +sinecurve = express_getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) IfcTransportElementFixedTypeEnum = enum_namespace() -elevator = getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = express_getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +craneway = express_getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransportElementNonFixedTypeEnum = enum_namespace() -vehicle = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) -vehicletracked = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -rollingstock = getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehiclewheeled = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -vehicleair = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) -cargo = getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) -vehiclemarine = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -userdefined = getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +vehicle = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) +vehicletracked = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) +rollingstock = express_getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) +vehiclewheeled = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) +vehicleair = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) +cargo = express_getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) +vehiclemarine = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -combined = getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', 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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWallTypeEnum = enum_namespace() -movable = getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -wavewall = getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelPositionEnum = enum_namespace() -left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypeEnum = enum_namespace() -window = getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_RC2', *args, **kwargs) @@ -5159,7 +5166,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -5240,7 +5247,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -5249,7 +5256,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -5258,7 +5265,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -5357,7 +5364,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -5366,7 +5373,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -5375,7 +5382,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -5384,8 +5391,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -5394,8 +5401,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -5404,8 +5411,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -5414,8 +5421,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -5424,8 +5431,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -5434,7 +5441,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc2.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc2.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -5443,8 +5450,8 @@ class IfcAdvancedBrepWithVoids_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_rc2.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc2.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -5453,7 +5460,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc2.ifcelementarysurface', 'ifc4x3_rc2.ifcsweptsurface', 'ifc4x3_rc2.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc2.ifcelementarysurface', 'ifc4x3_rc2.ifcsweptsurface', 'ifc4x3_rc2.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -5462,7 +5469,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc2.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_rc2.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc2.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_rc2.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -5471,7 +5478,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc2.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_rc2.ifcline', 'ifc4x3_rc2.ifcconic', 'ifc4x3_rc2.ifcpolyline', 'ifc4x3_rc2.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc2.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3_rc2.ifcline', 'ifc4x3_rc2.ifcconic', 'ifc4x3_rc2.ifcpolyline', 'ifc4x3_rc2.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -5480,8 +5487,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -5490,8 +5497,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -5500,8 +5507,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -5510,8 +5517,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -5520,8 +5527,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -5530,8 +5537,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -5540,8 +5547,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -5550,8 +5557,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -5560,8 +5567,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -5570,8 +5577,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -5580,8 +5587,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -5590,8 +5597,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -5600,8 +5607,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5611,8 +5618,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5621,7 +5628,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_rc2.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5631,7 +5638,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_rc2.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5641,7 +5648,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x3_rc2.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x3_rc2.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5650,8 +5657,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5660,7 +5667,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5669,8 +5676,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5679,7 +5686,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x3_rc2.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5689,9 +5696,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5701,9 +5708,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -5713,9 +5720,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5725,9 +5732,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5737,8 +5744,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5747,8 +5754,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5757,8 +5764,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5767,8 +5774,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5777,7 +5784,7 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIsCP: SCOPE = 'entity' @@ -5786,10 +5793,10 @@ class IfcAxis1Placement_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc2.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_RefDirIs2D: @@ -5799,8 +5806,8 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIs2D: SCOPE = 'entity' @@ -5809,7 +5816,7 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIsCP: SCOPE = 'entity' @@ -5818,10 +5825,10 @@ class IfcAxis2Placement2D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc2.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_LocationIs3D: @@ -5831,7 +5838,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisIs3D: SCOPE = 'entity' @@ -5840,8 +5847,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5850,8 +5857,8 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5860,9 +5867,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_AxisAndRefDirProvision: SCOPE = 'entity' @@ -5871,8 +5878,8 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False class IfcAxis2Placement3D_LocationIsCP: @@ -5882,11 +5889,11 @@ class IfcAxis2Placement3D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc2.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc2.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcAxis2PlacementLinear_WR1: @@ -5896,7 +5903,7 @@ class IfcAxis2PlacementLinear_WR1: @staticmethod def __call__(self): - assert ('ifc4x3_rc2.ifcpointbydistanceexpression' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc2.ifcpointbydistanceexpression' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2PlacementLinear_WR2: SCOPE = 'entity' @@ -5905,9 +5912,9 @@ class IfcAxis2PlacementLinear_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcBSplineCurve_SameDim: SCOPE = 'entity' @@ -5916,16 +5923,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5935,11 +5942,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5949,26 +5956,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5978,10 +5985,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5990,10 +5997,10 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False class IfcBSplineSurfaceWithKnots_CorrespondingULists: SCOPE = 'entity' @@ -6002,8 +6009,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -6013,16 +6020,16 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -6032,8 +6039,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6042,8 +6049,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -6052,7 +6059,7 @@ class IfcBeamStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6061,8 +6068,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -6071,8 +6078,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -6081,8 +6088,8 @@ class IfcBearing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6091,8 +6098,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_SupportedRasterFormat: SCOPE = 'entity' @@ -6101,7 +6108,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -6110,7 +6117,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBoiler_CorrectPredefinedType: @@ -6120,8 +6127,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6130,8 +6137,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6140,8 +6147,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -6150,7 +6157,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x3_rc2.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x3_rc2.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x3_rc2.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -6160,7 +6167,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x3_rc2.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -6170,7 +6177,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanResult_SameDim: @@ -6180,9 +6187,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_FirstOperandClosed: SCOPE = 'entity' @@ -6191,8 +6198,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x3_rc2.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x3_rc2.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -6201,12 +6208,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x3_rc2.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x3_rc2.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -6215,7 +6222,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -6227,7 +6234,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x3_rc2.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x3_rc2.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -6236,8 +6243,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -6246,8 +6253,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -6256,8 +6263,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -6266,7 +6273,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -6275,8 +6282,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -6285,8 +6292,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6295,8 +6302,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuiltElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -6305,7 +6312,7 @@ class IfcBuiltElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuiltSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6314,8 +6321,8 @@ class IfcBuiltSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -6324,8 +6331,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -6334,8 +6341,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6344,8 +6351,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -6354,8 +6361,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -6365,10 +6372,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -6378,9 +6385,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -6390,8 +6397,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6400,8 +6407,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6410,8 +6417,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6420,8 +6427,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6430,8 +6437,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6440,8 +6447,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6450,8 +6457,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6460,8 +6467,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6470,8 +6477,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6480,8 +6487,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6490,8 +6497,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6500,8 +6507,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -6510,8 +6517,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6520,8 +6527,8 @@ class IfcCaissonFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -6530,8 +6537,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -6540,11 +6547,11 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) def calc_IfcCartesianPointList_Dim(self): @@ -6557,16 +6564,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -6575,7 +6582,7 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -6584,7 +6591,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -6593,10 +6600,10 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcCartesianTransformationOperator2D_U(self): - return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6605,12 +6612,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -6619,7 +6626,7 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -6628,7 +6635,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -6637,7 +6644,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -6646,12 +6653,12 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, '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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6660,7 +6667,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6670,16 +6677,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6688,8 +6695,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6698,8 +6705,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6708,8 +6715,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6718,8 +6725,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6728,8 +6735,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6738,8 +6745,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6748,8 +6755,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6758,8 +6765,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6768,8 +6775,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6778,8 +6785,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6788,8 +6795,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6798,8 +6805,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -6808,7 +6815,7 @@ class IfcColumnStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6817,8 +6824,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6827,8 +6834,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6837,8 +6844,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6847,8 +6854,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6857,7 +6864,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6867,7 +6874,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6877,7 +6884,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6887,7 +6894,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcCompositeCurve_CurveContinuous: @@ -6897,9 +6904,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6908,17 +6915,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6927,7 +6934,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6940,12 +6947,12 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x3_rc2.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6954,8 +6961,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6964,7 +6971,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x3_rc2.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6974,8 +6981,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6984,8 +6991,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6994,8 +7001,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -7004,8 +7011,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -7014,8 +7021,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -7024,8 +7031,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -7034,8 +7041,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7044,8 +7051,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7054,8 +7061,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7064,8 +7071,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7074,8 +7081,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7084,8 +7091,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7094,8 +7101,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -7104,8 +7111,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -7114,8 +7121,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7124,8 +7131,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7134,8 +7141,8 @@ class IfcConveyorSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7144,8 +7151,8 @@ class IfcConveyorSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcconveyorsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcconveyorsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcConveyorSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7154,8 +7161,8 @@ class IfcConveyorSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -7164,8 +7171,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -7174,8 +7181,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -7184,8 +7191,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -7194,8 +7201,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -7204,8 +7211,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7214,8 +7221,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCourse_CorrectPredefinedType: SCOPE = 'entity' @@ -7224,8 +7231,8 @@ class IfcCourse_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCourse_CorrectTypeAssigned: SCOPE = 'entity' @@ -7234,8 +7241,8 @@ class IfcCourse_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccoursetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccoursetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCourseType_CorrectPredefinedType: SCOPE = 'entity' @@ -7244,8 +7251,8 @@ class IfcCourseType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -7254,8 +7261,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -7264,8 +7271,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -7274,8 +7281,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7284,8 +7291,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7294,8 +7301,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -7307,8 +7314,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -7317,8 +7324,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -7327,8 +7334,8 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) @@ -7340,7 +7347,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x3_rc2.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x3_rc2.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyle_IdentifiableCurveStyle: @@ -7350,9 +7357,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -7362,7 +7369,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -7372,8 +7379,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -7382,8 +7389,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -7392,8 +7399,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -7402,8 +7409,8 @@ class IfcDeepFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -7412,8 +7419,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -7422,8 +7429,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -7432,11 +7439,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -7446,11 +7453,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @@ -7460,9 +7467,9 @@ class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_rc2.ifcconic', 'ifc4x3_rc2.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcDiscreteAccessory_CorrectPredefinedType: @@ -7472,8 +7479,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -7482,8 +7489,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -7492,8 +7499,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7502,8 +7509,8 @@ class IfcDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7512,8 +7519,8 @@ class IfcDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7522,8 +7529,8 @@ class IfcDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7532,8 +7539,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7542,8 +7549,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7552,8 +7559,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -7562,8 +7569,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectStyleAssigned: @@ -7573,8 +7580,8 @@ class IfcDoor_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -7583,8 +7590,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -7594,8 +7601,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -7605,8 +7612,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -7616,8 +7623,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -7627,7 +7634,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc2.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc2.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -7636,7 +7643,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc2.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc2.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7645,8 +7652,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -7655,7 +7662,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -7664,7 +7671,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -7673,8 +7680,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7683,8 +7690,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7693,8 +7700,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7703,8 +7710,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7713,8 +7720,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7723,8 +7730,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -7733,8 +7740,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -7743,8 +7750,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7753,8 +7760,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEarthworksCut_CorrectPredefinedType: SCOPE = 'entity' @@ -7763,8 +7770,8 @@ class IfcEarthworksCut_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEarthworksFill_CorrectPredefinedType: SCOPE = 'entity' @@ -7773,8 +7780,8 @@ class IfcEarthworksFill_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7783,9 +7790,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7797,7 +7804,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7807,8 +7814,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7817,8 +7824,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7827,8 +7834,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7837,8 +7844,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7847,8 +7854,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7857,8 +7864,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7867,8 +7874,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7877,8 +7884,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7887,8 +7894,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7897,8 +7904,8 @@ class IfcElectricFlowTreatmentDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7907,8 +7914,8 @@ class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricflowtreatmentdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricflowtreatmentdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7917,8 +7924,8 @@ class IfcElectricFlowTreatmentDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7927,8 +7934,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7937,8 +7944,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7947,8 +7954,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -7957,8 +7964,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7967,8 +7974,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7977,8 +7984,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -7987,8 +7994,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -7997,8 +8004,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -8007,8 +8014,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -8017,8 +8024,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -8027,8 +8034,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -8037,8 +8044,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -8047,7 +8054,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -8057,8 +8064,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -8067,8 +8074,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -8077,8 +8084,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -8087,8 +8094,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -8097,8 +8104,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8107,8 +8114,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -8117,8 +8124,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -8127,8 +8134,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8137,8 +8144,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -8147,8 +8154,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -8157,9 +8164,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -8168,8 +8175,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -8178,9 +8185,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -8189,9 +8196,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -8201,7 +8208,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -8210,7 +8217,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -8219,7 +8226,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x3_rc2.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -8232,8 +8239,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -8242,8 +8249,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -8252,8 +8259,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -8262,8 +8269,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8272,8 +8279,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8282,8 +8289,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: SCOPE = 'entity' @@ -8292,7 +8299,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -8301,7 +8308,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -8310,7 +8317,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc2.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc2.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -8319,7 +8326,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc2.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc2.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -8328,7 +8335,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -8337,8 +8344,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -8347,8 +8354,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -8357,8 +8364,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8367,8 +8374,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8377,8 +8384,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8387,8 +8394,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8397,8 +8404,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8407,8 +8414,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectPredefinedType: SCOPE = 'entity' @@ -8417,8 +8424,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -8427,8 +8434,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8437,8 +8444,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -8447,8 +8454,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8457,8 +8464,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8467,8 +8474,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -8477,8 +8484,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8487,8 +8494,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8497,8 +8504,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -8507,8 +8514,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8517,8 +8524,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8527,8 +8534,8 @@ class IfcFurnitureType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -8537,8 +8544,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -8547,8 +8554,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -8557,8 +8564,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -8567,7 +8574,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_rc2.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_rc2.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -8576,8 +8583,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -8586,7 +8593,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x3_rc2.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -8596,9 +8603,9 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedtargetview))) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -8607,23 +8614,23 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False def calc_IfcGeometricRepresentationSubContext_WorldCoordinateSystem(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -8632,12 +8639,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) def calc_IfcGradientCurve_Height(self): return IfcGradient(self) @@ -8649,8 +8656,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -8659,9 +8666,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -8674,8 +8681,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -8684,8 +8691,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8694,8 +8701,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -8704,8 +8711,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -8714,8 +8721,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -8724,8 +8731,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -8734,8 +8741,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -8745,8 +8752,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcIShapeProfileDef_ValidFilletRadius: @@ -8756,11 +8763,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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 IfcImpactProtectionDevice_CorrectPredefinedType: @@ -8770,8 +8777,8 @@ class IfcImpactProtectionDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcImpactProtectionDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8780,8 +8787,8 @@ class IfcImpactProtectionDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcimpactprotectiondevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcimpactprotectiondevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcImpactProtectionDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8790,8 +8797,8 @@ class IfcImpactProtectionDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIndexedPolyCurve_Consecutive: SCOPE = 'entity' @@ -8800,7 +8807,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -8810,8 +8817,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8820,8 +8827,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8830,8 +8837,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8840,7 +8847,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8849,7 +8856,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8858,8 +8865,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8868,8 +8875,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8878,8 +8885,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8888,9 +8895,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8900,8 +8907,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8910,8 +8917,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -8920,8 +8927,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -8930,8 +8937,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -8940,8 +8947,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -8950,8 +8957,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8960,8 +8967,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8970,8 +8977,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -8980,9 +8987,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLiquidTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8991,8 +8998,8 @@ class IfcLiquidTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLiquidTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9001,8 +9008,8 @@ class IfcLiquidTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcliquidterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcliquidterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLiquidTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9011,8 +9018,8 @@ class IfcLiquidTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -9021,8 +9028,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMarineFacility_CorrectPredefinedType: @@ -9032,8 +9039,8 @@ class IfcMarineFacility_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: SCOPE = 'entity' @@ -9042,7 +9049,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_rc2.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -9052,7 +9059,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -9065,7 +9072,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -9075,8 +9082,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -9085,8 +9092,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -9095,8 +9102,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9105,8 +9112,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9115,8 +9122,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9125,8 +9132,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -9135,8 +9142,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -9145,8 +9152,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -9155,7 +9162,7 @@ class IfcMemberStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -9164,8 +9171,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -9177,8 +9184,8 @@ class IfcMobileTelecommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -9187,8 +9194,8 @@ class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmobiletelecommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmobiletelecommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9197,8 +9204,8 @@ class IfcMobileTelecommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9207,8 +9214,8 @@ class IfcMooringDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9217,8 +9224,8 @@ class IfcMooringDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmooringdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmooringdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMooringDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9227,8 +9234,8 @@ class IfcMooringDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectPredefinedType: SCOPE = 'entity' @@ -9237,8 +9244,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -9247,8 +9254,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -9257,8 +9264,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -9267,7 +9274,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcNavigationElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9276,8 +9283,8 @@ class IfcNavigationElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcNavigationElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9286,8 +9293,8 @@ class IfcNavigationElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcnavigationelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcnavigationelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcNavigationElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9296,8 +9303,8 @@ class IfcNavigationElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -9306,7 +9313,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -9316,8 +9323,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -9326,8 +9333,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -9336,8 +9343,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -9346,8 +9353,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOpenCrossProfileDef_CorrectProfileType: SCOPE = 'entity' @@ -9356,7 +9363,7 @@ class IfcOpenCrossProfileDef_CorrectProfileType: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: SCOPE = 'entity' @@ -9365,8 +9372,8 @@ class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: @staticmethod def __call__(self): - widths = getattr(self, 'Widths', INDETERMINATE) - slopes = getattr(self, 'Slopes', INDETERMINATE) + widths = express_getattr(self, 'Widths', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) assert (sizeof(slopes) == sizeof(widths)) is not False class IfcOpenCrossProfileDef_CorrespondingTags: @@ -9376,8 +9383,8 @@ class IfcOpenCrossProfileDef_CorrespondingTags: @staticmethod def __call__(self): - slopes = getattr(self, 'Slopes', INDETERMINATE) - tags = getattr(self, 'Tags', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) + tags = express_getattr(self, 'Tags', INDETERMINATE) assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False class IfcOrientedEdge_EdgeElementNotOriented: @@ -9387,18 +9394,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x3_rc2.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -9407,8 +9414,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -9417,8 +9424,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -9427,8 +9434,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -9437,9 +9444,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -9457,8 +9464,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -9467,9 +9474,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -9479,9 +9486,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -9491,7 +9498,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -9501,7 +9508,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -9511,8 +9518,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -9521,8 +9528,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -9531,8 +9538,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -9541,8 +9548,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -9551,8 +9558,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9561,8 +9568,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -9571,8 +9578,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -9581,8 +9588,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -9591,8 +9598,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -9601,7 +9608,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -9611,7 +9618,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -9621,7 +9628,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_SizeOfPixelList: @@ -9631,9 +9638,9 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_getattr(self, 'Pixel', INDETERMINATE) assert (sizeof(pixel) == width * height) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -9643,12 +9650,12 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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 def calc_IfcPlacement_Dim(self): - location = getattr(self, 'Location', INDETERMINATE) - return getattr(location, 'Dim', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -9657,8 +9664,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -9667,8 +9674,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -9677,7 +9684,7 @@ class IfcPlateStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -9686,20 +9693,20 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPointByDistanceExpression_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_AllPointsSameDim: SCOPE = 'entity' @@ -9708,8 +9715,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -9718,8 +9725,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -9728,7 +9735,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x3_rc2.ifcpolyline', 'ifc4x3_rc2.ifccompositecurve']) == 1) is not False class IfcPolyline_SameDim: @@ -9738,8 +9745,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPositioningElement_HasPlacement: SCOPE = 'entity' @@ -9748,7 +9755,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -9757,13 +9764,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -9773,7 +9780,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_rc2.ifcshaperepresentation', 'ifc4x3_rc2.ifcgeometricrepresentationitem', 'ifc4x3_rc2.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -9783,7 +9790,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_rc2.ifcgeometricrepresentationitem', 'ifc4x3_rc2.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_HasName: @@ -9793,7 +9800,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedure_CorrectPredefinedType: SCOPE = 'entity' @@ -9802,8 +9809,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9812,8 +9819,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -9822,9 +9829,9 @@ class IfcProduct_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_rc2.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3_rc2.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -9833,7 +9840,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_rc2.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_HasName: @@ -9843,7 +9850,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_CorrectContext: SCOPE = 'entity' @@ -9852,7 +9859,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_rc2.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_rc2.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -9861,7 +9868,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -9870,8 +9877,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: SCOPE = 'entity' @@ -9880,8 +9887,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -9891,8 +9898,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: @@ -9902,8 +9909,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -9913,8 +9920,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -9924,9 +9931,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -9935,7 +9942,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -9944,7 +9951,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -9953,7 +9960,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -9962,7 +9969,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -9972,7 +9979,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -9981,7 +9988,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -9991,8 +9998,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -10002,8 +10009,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -10012,8 +10019,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10022,8 +10029,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10032,8 +10039,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -10042,8 +10049,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -10052,8 +10059,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -10062,8 +10069,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10072,8 +10079,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProxy_WR1: SCOPE = 'entity' @@ -10082,7 +10089,7 @@ class IfcProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -10091,8 +10098,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -10101,8 +10108,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -10111,8 +10118,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -10121,7 +10128,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -10130,7 +10137,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -10140,7 +10147,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0.0) is not False class IfcQuantityLength_WR21: @@ -10150,7 +10157,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -10159,7 +10166,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -10169,7 +10176,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -10178,7 +10185,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -10188,7 +10195,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -10197,7 +10204,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -10207,7 +10214,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -10216,7 +10223,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRail_CorrectPredefinedType: @@ -10226,8 +10233,8 @@ class IfcRail_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRail_CorrectTypeAssigned: SCOPE = 'entity' @@ -10236,8 +10243,8 @@ class IfcRail_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcrailtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcrailtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailType_CorrectPredefinedType: SCOPE = 'entity' @@ -10246,8 +10253,8 @@ class IfcRailType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailing_CorrectPredefinedType: SCOPE = 'entity' @@ -10256,8 +10263,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -10266,8 +10273,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -10276,8 +10283,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -10286,8 +10293,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -10296,8 +10303,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10306,8 +10313,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10316,8 +10323,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10326,8 +10333,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -10336,8 +10343,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -10346,8 +10353,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -10359,8 +10366,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -10369,8 +10376,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -10382,9 +10389,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidWallThickness: @@ -10394,8 +10401,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangleHollowProfileDef_ValidInnerRadius: SCOPE = 'entity' @@ -10404,9 +10411,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -10415,8 +10422,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -10425,8 +10432,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -10436,8 +10443,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -10447,10 +10454,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x3_rc2.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x3_rc2.ifcplane' in typeof(basissurface)) or 'ifc4x3_rc2.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -10460,9 +10467,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcedSoil_CorrectPredefinedType: @@ -10472,8 +10479,8 @@ class IfcReinforcedSoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectPredefinedType: SCOPE = 'entity' @@ -10482,8 +10489,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -10492,8 +10499,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_CorrectPredefinedType: SCOPE = 'entity' @@ -10502,8 +10509,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10512,8 +10519,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMesh_CorrectPredefinedType: @@ -10523,8 +10530,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -10533,8 +10540,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_CorrectPredefinedType: SCOPE = 'entity' @@ -10543,8 +10550,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10553,8 +10560,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcRelAggregates_NoSelfReference: @@ -10564,8 +10571,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssigns_WR1: @@ -10575,8 +10582,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -10586,8 +10593,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -10596,8 +10603,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -10606,8 +10613,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -10616,8 +10623,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -10626,8 +10633,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -10636,8 +10643,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -10646,7 +10653,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc2.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_rc2.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc2.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_rc2.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -10655,7 +10662,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_rc2.ifcelement', 'ifc4x3_rc2.ifcelementtype', 'ifc4x3_rc2.ifcwindowstyle', 'ifc4x3_rc2.ifcdoorstyle', 'ifc4x3_rc2.ifcstructuralmember', 'ifc4x3_rc2.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_rc2.ifcelement', 'ifc4x3_rc2.ifcelementtype', 'ifc4x3_rc2.ifcwindowstyle', 'ifc4x3_rc2.ifcdoorstyle', 'ifc4x3_rc2.ifcstructuralmember', 'ifc4x3_rc2.ifcport']) == 0]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -10664,8 +10671,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @@ -10675,7 +10682,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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 IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -10685,7 +10692,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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 IfcRelConnectsPorts_NoSelfReference: @@ -10695,8 +10702,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -10706,7 +10713,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_rc2.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -10716,8 +10723,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -10727,7 +10734,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc2.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc2.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -10736,8 +10743,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -10747,8 +10754,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -10758,8 +10765,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -10769,7 +10776,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_rc2.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x3_rc2.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -10779,8 +10786,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -10790,9 +10797,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -10801,9 +10808,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_rc2.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_rc2.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_rc2.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_rc2.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_rc2.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_rc2.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -10812,7 +10819,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -10822,7 +10829,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x3_rc2.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisStartInXY: @@ -10832,8 +10839,8 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: SCOPE = 'entity' @@ -10842,12 +10849,12 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', 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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -10856,7 +10863,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -10865,8 +10872,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -10875,8 +10882,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -10885,8 +10892,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -10895,11 +10902,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSiUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSiUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -10908,8 +10915,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -10918,8 +10925,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -10928,8 +10935,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -10938,7 +10945,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -10947,7 +10954,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -10956,8 +10963,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -10966,8 +10973,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -10976,7 +10983,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -10986,8 +10993,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -10997,8 +11004,8 @@ class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @staticmethod def __call__(self): - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) - assert (sizeof([temp for temp in crosssectionpositions if exists(getattr(temp, 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(temp, 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11007,8 +11014,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_ConsistentProfileTypes: @@ -11018,8 +11025,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_SpineCurveDim: SCOPE = 'entity' @@ -11028,8 +11035,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -11041,8 +11048,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -11051,8 +11058,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11061,8 +11068,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11071,8 +11078,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11081,8 +11088,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11091,8 +11098,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -11101,8 +11108,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -11111,7 +11118,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x3_rc2.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x3_rc2.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -11120,7 +11127,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x3_rc2.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x3_rc2.ifcvertexpoint', 'ifc4x3_rc2.ifcedgecurve', 'ifc4x3_rc2.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False class IfcShapeRepresentation_HasRepresentationType: @@ -11130,7 +11137,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -11139,7 +11146,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -11148,7 +11155,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): return 3 @@ -11160,8 +11167,8 @@ class IfcSign_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSign_CorrectTypeAssigned: SCOPE = 'entity' @@ -11170,8 +11177,8 @@ class IfcSign_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsigntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsigntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignType_CorrectPredefinedType: SCOPE = 'entity' @@ -11180,8 +11187,8 @@ class IfcSignType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSignal_CorrectPredefinedType: SCOPE = 'entity' @@ -11190,8 +11197,8 @@ class IfcSignal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSignal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11200,8 +11207,8 @@ class IfcSignal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsignaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsignaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11210,8 +11217,8 @@ class IfcSignalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSlab_CorrectPredefinedType: SCOPE = 'entity' @@ -11220,8 +11227,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -11230,8 +11237,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabElementedCase_HasDecomposition: SCOPE = 'entity' @@ -11240,7 +11247,7 @@ class IfcSlabElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcSlabStandardCase_HasMaterialLayerSetusage: SCOPE = 'entity' @@ -11249,7 +11256,7 @@ class IfcSlabStandardCase_HasMaterialLayerSetusage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -11258,8 +11265,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11268,8 +11275,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11278,8 +11285,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11288,8 +11295,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -11301,8 +11308,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -11311,8 +11318,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -11321,8 +11328,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -11331,8 +11338,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -11341,8 +11348,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11351,8 +11358,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -11361,7 +11368,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_rc2.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_rc2.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_rc2.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_rc2.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -11370,8 +11377,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -11380,8 +11387,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -11390,8 +11397,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11400,8 +11407,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11410,8 +11417,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11420,8 +11427,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -11430,8 +11437,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -11440,8 +11447,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -11450,8 +11457,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -11460,8 +11467,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -11470,8 +11477,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -11480,8 +11487,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_HasObjectType: SCOPE = 'entity' @@ -11490,8 +11497,8 @@ class IfcStructuralAnalysisModel_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11500,8 +11507,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -11510,8 +11517,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -11520,8 +11527,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -11530,8 +11537,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -11540,8 +11547,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -11550,8 +11557,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -11560,7 +11567,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc2.ifcstructuralloadlinearforce', 'ifc4x3_rc2.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc2.ifcstructuralloadlinearforce', 'ifc4x3_rc2.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -11569,7 +11576,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -11578,7 +11585,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -11587,8 +11594,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -11598,10 +11605,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -11610,7 +11617,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc2.ifcstructuralloadplanarforce', 'ifc4x3_rc2.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc2.ifcstructuralloadplanarforce', 'ifc4x3_rc2.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -11619,7 +11626,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -11628,7 +11635,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc2.ifcstructuralloadsingleforce', 'ifc4x3_rc2.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc2.ifcstructuralloadsingleforce', 'ifc4x3_rc2.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -11637,7 +11644,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc2.ifcstructuralloadsingleforce', 'ifc4x3_rc2.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc2.ifcstructuralloadsingleforce', 'ifc4x3_rc2.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -11646,8 +11653,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11656,8 +11663,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -11666,8 +11673,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -11676,8 +11683,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -11686,8 +11693,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -11696,7 +11703,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x3_rc2.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -11706,7 +11713,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc2.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc2.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -11715,8 +11722,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11725,8 +11732,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -11738,8 +11745,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -11748,7 +11755,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x3_rc2.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -11761,8 +11768,8 @@ class IfcSurfaceFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -11771,17 +11778,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: SCOPE = 'entity' @@ -11790,9 +11797,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceReinforcementArea_NonnegativeArea1: @@ -11802,7 +11809,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -11812,7 +11819,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -11822,7 +11829,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceStyle_MaxOneShading: @@ -11832,7 +11839,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -11841,7 +11848,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -11850,7 +11857,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -11859,7 +11866,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneExtDefined: SCOPE = 'entity' @@ -11868,7 +11875,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc2.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -11877,8 +11884,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixDim: SCOPE = 'entity' @@ -11887,8 +11894,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -11897,8 +11904,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolid_DirectrixBounded: @@ -11908,9 +11915,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_rc2.ifcconic', 'ifc4x3_rc2.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -11920,8 +11927,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -11930,7 +11937,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x3_rc2.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_rc2.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x3_rc2.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_rc2.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -11939,8 +11946,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11949,8 +11956,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11959,8 +11966,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11969,8 +11976,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -11979,8 +11986,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -11989,8 +11996,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -11999,8 +12006,8 @@ class IfcSystemFurnitureElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12009,8 +12016,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -12020,8 +12027,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -12031,8 +12038,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -12041,20 +12048,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -12063,8 +12070,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -12073,8 +12080,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -12083,8 +12090,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -12093,7 +12100,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -12102,8 +12109,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -12112,8 +12119,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -12122,12 +12129,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -12137,8 +12144,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -12147,8 +12154,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -12157,8 +12164,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -12167,8 +12174,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12177,8 +12184,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -12187,8 +12194,8 @@ class IfcTendonConduit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -12197,8 +12204,8 @@ class IfcTendonConduit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -12207,8 +12214,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -12217,8 +12224,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -12230,7 +12237,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x3_rc2.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -12240,7 +12247,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x3_rc2.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x3_rc2.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -12249,7 +12256,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc2.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc2.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -12258,7 +12265,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -12267,7 +12274,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -12276,8 +12283,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTrackElement_CorrectPredefinedType: @@ -12287,8 +12294,8 @@ class IfcTrackElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTrackElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12297,8 +12304,8 @@ class IfcTrackElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctrackelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctrackelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTrackElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12307,8 +12314,8 @@ class IfcTrackElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransformer_CorrectPredefinedType: SCOPE = 'entity' @@ -12317,8 +12324,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -12327,8 +12334,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctranformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctranformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -12337,8 +12344,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12347,8 +12354,8 @@ class IfcTransportElement_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or (predefinedtype != getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or (predefinedtype != express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12357,8 +12364,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12367,11 +12374,11 @@ class IfcTransportElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or ((predefinedtype == getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or ((predefinedtype == express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -12381,7 +12388,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: SCOPE = 'entity' @@ -12390,7 +12397,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -12400,7 +12407,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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 IfcTrimmedCurve_NoTrimOfBoundedCurves: @@ -12410,7 +12417,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x3_rc2.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTubeBundle_CorrectPredefinedType: @@ -12420,8 +12427,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12430,8 +12437,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12440,8 +12447,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -12450,7 +12457,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -12459,7 +12466,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -12469,7 +12476,7 @@ class IfcTypeProduct_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_rc2.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x3_rc2.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12478,8 +12485,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -12489,8 +12496,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -12500,7 +12507,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -12510,8 +12517,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12520,8 +12527,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12530,8 +12537,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -12540,8 +12547,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -12550,8 +12557,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -12560,8 +12567,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -12570,8 +12577,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -12580,8 +12587,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -12590,8 +12597,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -12600,12 +12607,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -12614,8 +12621,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -12624,8 +12631,8 @@ class IfcVibrationDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -12634,8 +12641,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -12644,8 +12651,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -12654,8 +12661,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12664,8 +12671,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVoidingFeature_HasObjectType: SCOPE = 'entity' @@ -12674,8 +12681,8 @@ class IfcVoidingFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -12684,8 +12691,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -12694,8 +12701,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallElementedCase_HasDecomposition: SCOPE = 'entity' @@ -12704,7 +12711,7 @@ class IfcWallElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -12713,7 +12720,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc2.ifcrelassociates.relatedobjects') if 'ifc4x3_rc2.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc2.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -12722,8 +12729,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -12732,8 +12739,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -12742,8 +12749,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -12752,8 +12759,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectStyleAssigned: SCOPE = 'entity' @@ -12762,8 +12769,8 @@ class IfcWindow_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc2.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -12772,8 +12779,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -12783,8 +12790,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -12794,8 +12801,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -12805,7 +12812,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc2.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc2.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -12814,7 +12821,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc2.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc2.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc2.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -12823,8 +12830,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -12833,8 +12840,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -12843,8 +12850,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -12853,8 +12860,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12863,8 +12870,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -12874,19 +12881,19 @@ class IfcZone_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_rc2.ifczone' in typeof(temp) or 'ifc4x3_rc2.ifcspace' in typeof(temp) or 'ifc4x3_rc2.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x3_rc2.ifczone' in typeof(temp) or 'ifc4x3_rc2.ifcspace' in typeof(temp) or 'ifc4x3_rc2.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -12896,11 +12903,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -12914,13 +12921,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -12938,7 +12945,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -12975,11 +12982,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -13159,7 +13166,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x3_rc2.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x3_rc2.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -13170,27 +13177,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc2.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc2.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc2.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc2.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc2.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc2.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc2.ifcproject' in typeof(temp)]) return count == 0 else: @@ -13202,26 +13209,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc2.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc2.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc2.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc2.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc2.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x3_rc2.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_rc2.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) + if 'ifc4x3_rc2.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x3_rc2.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13230,17 +13237,17 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x3_rc2.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc2.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc2.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc2.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x3_rc2.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc2.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc2.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x3_rc2.ifcoffsetcurve3d' in typeof(curve): @@ -13258,13 +13265,13 @@ def IfcCurveDim(curve): if 'ifc4x3_rc2.ifcpcurve' in typeof(curve): return 3 if 'ifc4x3_rc2.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -13272,13 +13279,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSiUnit(n): @@ -13348,15 +13355,15 @@ def IfcDimensionsForSiUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -13365,36 +13372,36 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x3_rc2.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x3_rc2.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x3_rc2.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcGradient(gradientcurve): @@ -13414,9 +13421,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -13434,10 +13441,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -13448,25 +13455,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x3_rc2.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x3_rc2.ifcvector' in typeof(arg): vec.Orientation = v @@ -13478,18 +13485,18 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointListDim(pointlist): @@ -13500,32 +13507,32 @@ def IfcPointListDim(pointlist): 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -13546,15 +13553,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x3_rc2.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -13570,71 +13577,71 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x3_rc2.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_rc2.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x3_rc2.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_rc2.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x3_rc2.ifcpoint', 'ifc4x3_rc2.ifccurve', 'ifc4x3_rc2.ifcgeometriccurveset', 'ifc4x3_rc2.ifcannotationfillarea', 'ifc4x3_rc2.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcgeometricset' in typeof(temp) or 'ifc4x3_rc2.ifcpoint' in typeof(temp) or 'ifc4x3_rc2.ifccurve' in typeof(temp) or ('ifc4x3_rc2.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcgeometriccurveset' in typeof(temp) or 'ifc4x3_rc2.ifcgeometricset' in typeof(temp) or 'ifc4x3_rc2.ifcpoint' in typeof(temp) or ('ifc4x3_rc2.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x3_rc2.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_rc2.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x3_rc2.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc2.ifctessellateditem', 'ifc4x3_rc2.ifcshellbasedsurfacemodel', 'ifc4x3_rc2.ifcfacebasedsurfacemodel', 'ifc4x3_rc2.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc2.ifctessellateditem', 'ifc4x3_rc2.ifcshellbasedsurfacemodel', 'ifc4x3_rc2.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc2.ifcextrudedareasolid', 'ifc4x3_rc2.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x3_rc2.ifcextrudedareasolidtapered', 'ifc4x3_rc2.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc2.ifcsweptareasolid', 'ifc4x3_rc2.ifcsweptdisksolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc2.ifcbooleanresult', 'ifc4x3_rc2.ifccsgprimitive3d', 'ifc4x3_rc2.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc2.ifccsgsolid', 'ifc4x3_rc2.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcmappeditem' in typeof(temp)]) else: return None @@ -13642,9 +13649,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -13654,28 +13661,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x3_rc2.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x3_rc2.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x3_rc2.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x3_rc2.ifcopenshell' in typeof(temp) or 'ifc4x3_rc2.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -13686,7 +13693,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x3_rc2.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x3_rc2.ifcpropertysetdefinitionset' in typeof(definition): @@ -13699,7 +13706,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -13707,7 +13714,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x3_rc2.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -13715,41 +13722,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_rc2.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_rc2.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13757,31 +13764,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_rc2.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_rc2.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py index 787b376787..02c8a5a37d 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,2375 +147,2375 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionTypeEnum = enum_namespace() -permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAddressTypeEnum = enum_namespace() -office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -railwaycrocodile = getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) +railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAlignmentCantSegmentTypeEnum = enum_namespace() -constantcant = getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -lineartransition = getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -helmertcurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -blosscurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cosinecurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) +lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -line = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -circulararc = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cubic = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) -helmertcurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -blosscurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cubicspiral = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBICSPIRAL', INDETERMINATE) -cosinecurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +cubicspiral = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBICSPIRAL', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -constantgradient = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -circulararc = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -parabolicarc = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) -clothoid = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnnotationTypeEnum = enum_namespace() -assumedpoint = getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -asbuiltarea = getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -non_physical_signal = getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -assumedline = getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -widthevent = getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -assumedarea = getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -superelevationevent = getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -asbuiltpoint = getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -userdefined = getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) +asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) +asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) +non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) +assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) +widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) +assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) +superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) +asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) +userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', 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) -speaker = getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -railway_communication_terminal = getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) -userdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +railway_communication_terminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBSplineCurveForm = enum_namespace() -polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) IfcBSplineSurfaceForm = enum_namespace() -plane_surf = getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) IfcBeamTypeEnum = enum_namespace() -beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) +guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) +guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) +free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeEnum = enum_namespace() -cylindrical = getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBenchmarkEnum = enum_namespace() -greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) IfcBoilerTypeEnum = enum_namespace() -water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', 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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -safetycage = getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) +safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -reinforcing = getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -erosionprevention = getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -userdefined = getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) +prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuiltSystemTypeEnum = enum_namespace() -reinforcing = getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -mooring = getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -trackcircuit = getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -erosionprevention = getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -foundation = getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -shading = getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -fenestration = getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -mooringsystem = getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) -transport = getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -prestressing = getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) +mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) +outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) +erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) +fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +mooringsystem = express_getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) +transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -cablebracket = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -catenarywire = getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -dropper = getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) +catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) +dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableFittingTypeEnum = enum_namespace() -connector = getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -fanout = getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -userdefined = getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -contactwiresegment = getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', 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) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) +fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) +fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) +opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) +stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) +wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCaissonFoundationTypeEnum = enum_namespace() -well = getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChangeActionEnum = enum_namespace() -nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) IfcChillerTypeEnum = enum_namespace() -aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcColumnTypeEnum = enum_namespace() -column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -automaton = getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -intelligent_peripheral = getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) -ip_network_equipment = getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) -optical_network_unit = getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', 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) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) +intelligent_peripheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) +ip_network_equipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) +optical_network_unit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', INDETERMINATE) +telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) +telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) +transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) +transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) +transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) IfcCompressorTypeEnum = enum_namespace() -dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConnectionTypeEnum = enum_namespace() -atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConstraintEnum = enum_namespace() -hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -notdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcControllerTypeEnum = enum_namespace() -floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConveyorSegmentTypeEnum = enum_namespace() -chuteconveyor = getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -beltconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -screwconveyor = getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -bucketconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -userdefined = getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) +beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) +screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) +bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) +userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostScheduleTypeEnum = enum_namespace() -budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCourseTypeEnum = enum_namespace() -armour = getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -filter = getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -ballastbed = getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -pavement = getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) +filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) +ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) +core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) +pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) +protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoveringTypeEnum = enum_namespace() -ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -cablearranger = getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -insulator = getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -tensioningequipment = getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -railpad = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -slidingchair = getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -rail_lubrication = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -panel_strengthening = getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -railbrace = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -elastic_cushion = getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -soundabsorption = getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -pointmachinemountingdevice = getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) -point_machine_locking_device = getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) -rail_mechanical_equipment = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -birdprotection = getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -userdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) +insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) +lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) +tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) +railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) +slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) +rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) +panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) +railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) +elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) +soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) +pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) +point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) +rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) +birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionBoardTypeEnum = enum_namespace() -switchboard = getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -consumerunit = getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -motorcontrolcentre = getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -distributionframe = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -distributionboard = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -userdefined = getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) +distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionSystemEnum = enum_namespace() -airconditioning = getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', 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) -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) -municipalsolidwaste = getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = getattr(IfcDistributionSystemEnum, 'REFRIGERATION', 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) -catenary_system = getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -overhead_contactline_system = getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -return_circuit = getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -userdefined = getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) +overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) +return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentConfidentialityEnum = enum_namespace() -public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentStatusEnum = enum_namespace() -draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorPanelOperationEnum = enum_namespace() -swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeEnum = enum_namespace() -door = getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -boom_barrier = getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -turnstile = getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) +turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_panel_single_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) -double_panel_single_swing_opposite_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_panel_single_swing_opposite_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_panel_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_panel_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_panel_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) -revolving_horizontal = getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', INDETERMINATE) -rollingup = getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -double_panel_lifting_vertical = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', 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_vertical = getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) -userdefined = getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_panel_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) +double_panel_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_panel_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_panel_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_panel_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_panel_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) +revolving_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +double_panel_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', INDETERMINATE) +lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) +lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) +lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) +revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEarthworksCutTypeEnum = enum_namespace() -trench = getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -dredging = getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -topsoilremoval = getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -stepexcavation = getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -pavementmilling = getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -cut = getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -base_excavation = getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -userdefined = getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) +dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) +excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) +overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) +topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) +stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) +pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) +cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) +base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEarthworksFillTypeEnum = enum_namespace() -backfill = getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -subgrade = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -embankment = getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -transitionsection = getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -subgradebed = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -slopefill = getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -userdefined = getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) +counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) +subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) +embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) +transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) +subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) +slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -freestandingwaterheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', 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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -capacitor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -compensator = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -inductor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -recharger = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) +compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) +inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) +recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementAssemblyTypeEnum = enum_namespace() -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) -girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -mast = getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -signalassembly = getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -grid = getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -shelter = getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -supportingassembly = getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -traction_switching_assembly = getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -trackpanel = getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -turnoutpanel = getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -dilatationpanel = getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -rail_mechanical_equipment_assembly = getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -entranceworks = getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -sumpbuster = getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -traffic_calming_device = getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) +signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) +grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) +shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) +supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) +suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) +traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) +trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) +turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) +dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) +rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) +entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) +sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) +traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTriggerTypeEnum = enum_namespace() -eventrule = getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTypeEnum = enum_namespace() -startevent = getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcExternalSpatialElementTypeEnum = enum_namespace() -external = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFacilityPartCommonTypeEnum = enum_namespace() -segment = getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -aboveground = getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -junction = getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -belowground = getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -substructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -terminal = getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -superstructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) +aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) +junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) +levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) +belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) +substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) +superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFacilityUsageEnum = enum_namespace() -lateral = getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -region = getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -longitudinal = getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -userdefined = getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) +region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) +vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) +longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -firemonitor = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) -userdefined = getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowDirectionEnum = enum_namespace() -source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -combined = getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -voltmeter = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -userdefined = getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) +voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFurnitureTypeEnum = enum_namespace() -chair = getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -technicalcabinet = getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeographicElementTypeEnum = enum_namespace() -terrain = getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeometricProjectionEnum = enum_namespace() -graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_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) -elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) IfcGridTypeEnum = enum_namespace() -rectangular = getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHumidifierTypeEnum = enum_namespace() -steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcImpactProtectionDeviceTypeEnum = enum_namespace() -crashcushion = getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -bumper = getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -userdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) +dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) +fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) +bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) +userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcInternalOrExternalEnum = enum_namespace() -internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) IfcInventoryTypeEnum = enum_namespace() -assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKnotType = enum_namespace() -uniform_knots = getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcLightFixtureTypeEnum = enum_namespace() -pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLiquidTerminalTypeEnum = enum_namespace() -loadingarm = getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -hosereel = getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -userdefined = getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) +hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLoadGroupTypeEnum = enum_namespace() -load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLogicalOperatorEnum = enum_namespace() -logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) IfcMarineFacilityTypeEnum = enum_namespace() -canal = getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -waterwayshiplift = getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -revetment = getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) -launchrecovery = getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -hydrolift = getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -shipyard = getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -shiplift = getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -port = getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -floatingdock = getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -navigationalchannel = getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -breakwater = getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -drydock = getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -jetty = getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -shiplock = getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -barrierbeach = getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -slipway = getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -userdefined = getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) +waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) +revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) +launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) +marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) +hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) +shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) +shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) +port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) +quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) +floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) +navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) +breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) +drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) +jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) +shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) +barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) +slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) +waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) +userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMarinePartTypeEnum = enum_namespace() -crest = getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -manufacturing = getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -lowwaterline = getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -core = getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -waterfield = getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -cill_level = getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -berthingstructure = getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -copelevel = getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -chamber = getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -storage = getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) -approachchannel = getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -vehicleservicing = getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -shiptransfer = getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -gatehead = getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -belowwaterline = getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -weatherside = getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -landfield = getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -protection = getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -leewardside = getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -abovewaterline = getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -navigationalarea = getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -highwaterline = getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -userdefined = getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) +manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) +lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) +core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) +waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) +cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) +berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) +copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) +chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) +storage = express_getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) +approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) +vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) +shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) +gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) +gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) +belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) +weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) +landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) +protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) +leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) +abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) +anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) +navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) +highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) +userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -railjoint = getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -railfastening = getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -chain = getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -rope = getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -userdefined = getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) +railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) +chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) +rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMemberTypeEnum = enum_namespace() -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) -stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -structuralcable = getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -tiebar = getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) +tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -e_utran_node_b = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -remote_radio_unit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) -accesspoint = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basetransceiverstation = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -remoteunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -basebandunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -masterunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -userdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) +remote_radio_unit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) +accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) +basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) +remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) +basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) +masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) +userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMooringDeviceTypeEnum = enum_namespace() -linetensioner = getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -bollard = getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -userdefined = getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) +magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) +mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) +vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) +bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) +userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) +buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) +userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, '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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) +rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) +userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcPileTypeEnum = enum_namespace() -bored = getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPipeSegmentTypeEnum = enum_namespace() -culvert = getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPlateTypeEnum = enum_namespace() -curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', 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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -anti_arcing_device = getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -sparkgap = getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -voltagelimiter = getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) +sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) +voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailTypeEnum = enum_namespace() -rackrail = getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -blade = getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -guardrail = getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -stockrail = getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -checkrail = getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -rail = getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -userdefined = getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) +blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) +guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) +stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) +checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) +rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailingTypeEnum = enum_namespace() -handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayPartTypeEnum = enum_namespace() -trackstructure = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -linesidestructurepart = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -dilatationsuperstructure = getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -plaintracksupestructure = getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) -linesidestructure = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -superstructure = getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -turnoutsuperstructure = getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) +trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) +linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) +dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) +plaintracksupestructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) +linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayTypeEnum = enum_namespace() -userdefined = getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampFlightTypeEnum = enum_namespace() -straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampTypeEnum = enum_namespace() -straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRecurrenceTypeEnum = enum_namespace() -daily = getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) IfcReferentTypeEnum = enum_namespace() -kilopoint = getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -referencemarker = getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcedSoilTypeEnum = enum_namespace() -surchargepreloaded = getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -dynamicallycompacted = getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -replaced = getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -grouted = getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -userdefined = getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) +verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) +dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) +replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) +rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) +grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarRoleEnum = enum_namespace() -main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) -stud = getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadPartTypeEnum = enum_namespace() -roadsidepart = getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -bus_stop = getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -hardshoulder = getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -passingbay = getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -roadwayplateau = getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roadside = getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -refugeisland = getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -tollplaza = getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -centralreserve = getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -sidewalk = getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -parkingbay = getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -railwaycrossing = getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -pedestrian_crossing = getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -softshoulder = getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -bicyclecrossing = getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -centralisland = getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -shoulder = getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -trafficlane = getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -roadsegment = getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roundabout = getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -layby = getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -carriageway = getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -trafficisland = getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -userdefined = getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) +bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) +hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) +intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) +passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) +roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) +roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) +refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) +tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) +centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) +sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) +parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) +railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) +pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) +softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) +bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) +centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) +shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) +trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) +roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) +roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) +layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) +carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) +trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) +userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadTypeEnum = enum_namespace() -userdefined = getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoleEnum = enum_namespace() -supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) IfcRoofTypeEnum = enum_namespace() -flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSIPrefix = enum_namespace() -exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +atto = express_getattr(IfcSIPrefix, 'ATTO', 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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', 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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) IfcSensorTypeEnum = enum_namespace() -cosensor = getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', 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) -phsensor = getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -earthquakesensor = getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -foreignobjectdetectionsensor = getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -obstaclesensor = getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -rainsensor = getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -snowdepthsensor = getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -trainsensor = getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) +foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) +obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) +rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) +snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) +trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) +turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) +wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSequenceEnum = enum_namespace() -start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSignTypeEnum = enum_namespace() -marker = getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -pictoral = getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -mirror = getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -userdefined = getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) +pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) +mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) +userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSignalTypeEnum = enum_namespace() -visual = getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -audio = getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -userdefined = getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) +audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) +mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) +userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) IfcSlabTypeEnum = enum_namespace() -floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceTypeEnum = enum_namespace() -space = getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -berth = getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) -userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpatialZoneTypeEnum = enum_namespace() -construction = getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -reservation = getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -userdefined = getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairFlightTypeEnum = enum_namespace() -straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairTypeEnum = enum_namespace() -straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -ladder = getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStateEnum = enum_namespace() -readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -pavementsurfacemarking = getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -symbolmarking = getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -nonskidsurfacing = getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -rumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -transverserumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -userdefined = getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) +linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) +pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) +symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) +nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) +rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) +transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', 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) -selectorswitch = getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -relay = getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -start_and_stop_equipment = getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) +start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -subrack = getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -userdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -pressurevessel = getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -oilretentiontray = getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -userdefined = getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskTypeEnum = enum_namespace() -attendance = getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = getattr(IfcTaskTypeEnum, 'DISPOSAL', 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) -userdefined = getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTendonConduitTypeEnum = enum_namespace() -duct = getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTextPath = enum_namespace() -left = getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = getattr(IfcTextPath, 'UP', INDETERMINATE) -down = getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = express_getattr(IfcTextPath, 'DOWN', 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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrackElementTypeEnum = enum_namespace() -trackendofalignment = getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -blockingdevice = getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -vehiclestop = getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -sleeper = getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -half_set_of_blades = getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -speedregulator = getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -derailer = getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -userdefined = getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) +blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) +vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) +sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) +half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) +speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) +derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) +frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) +userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransformerTypeEnum = enum_namespace() -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) -chopper = getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) +combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransitionCode = enum_namespace() -discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) IfcTransportElementFixedTypeEnum = enum_namespace() -elevator = getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -haulinggear = getattr(IfcTransportElementFixedTypeEnum, 'HAULINGGEAR', INDETERMINATE) -userdefined = getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = express_getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +craneway = express_getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +haulinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'HAULINGGEAR', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransportElementNonFixedTypeEnum = enum_namespace() -vehicle = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) -vehicletracked = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -rollingstock = getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehiclewheeled = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -vehicleair = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) -cargo = getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) -vehiclemarine = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -userdefined = getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +vehicle = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) +vehicletracked = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) +rollingstock = express_getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) +vehiclewheeled = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) +vehicleair = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) +cargo = express_getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) +vehiclemarine = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -combined = getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', 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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWallTypeEnum = enum_namespace() -movable = getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -wavewall = getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelPositionEnum = enum_namespace() -left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypeEnum = enum_namespace() -window = getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_RC3', *args, **kwargs) @@ -5148,7 +5155,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -5229,7 +5236,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -5238,7 +5245,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -5247,7 +5254,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -5346,7 +5353,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -5355,7 +5362,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -5364,7 +5371,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -5373,8 +5380,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -5383,8 +5390,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -5393,8 +5400,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -5403,8 +5410,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -5413,8 +5420,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -5423,7 +5430,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc3.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc3.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -5432,8 +5439,8 @@ class IfcAdvancedBrepWithVoids_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_rc3.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc3.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -5442,7 +5449,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc3.ifcelementarysurface', 'ifc4x3_rc3.ifcsweptsurface', 'ifc4x3_rc3.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc3.ifcelementarysurface', 'ifc4x3_rc3.ifcsweptsurface', 'ifc4x3_rc3.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -5451,7 +5458,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc3.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_rc3.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc3.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_rc3.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -5460,7 +5467,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc3.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_rc3.ifcline', 'ifc4x3_rc3.ifcconic', 'ifc4x3_rc3.ifcpolyline', 'ifc4x3_rc3.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc3.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3_rc3.ifcline', 'ifc4x3_rc3.ifcconic', 'ifc4x3_rc3.ifcpolyline', 'ifc4x3_rc3.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -5469,8 +5476,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -5479,8 +5486,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -5489,8 +5496,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -5499,8 +5506,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -5509,8 +5516,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -5519,8 +5526,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -5529,8 +5536,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -5539,8 +5546,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -5549,8 +5556,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -5559,8 +5566,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -5569,8 +5576,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -5579,8 +5586,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -5589,8 +5596,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5600,8 +5607,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5610,7 +5617,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_rc3.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5620,7 +5627,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_rc3.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5630,7 +5637,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x3_rc3.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x3_rc3.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5639,8 +5646,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5649,7 +5656,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5658,8 +5665,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5668,7 +5675,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x3_rc3.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5678,9 +5685,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5690,9 +5697,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -5702,9 +5709,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5714,9 +5721,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5726,8 +5733,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5736,8 +5743,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5746,8 +5753,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5756,8 +5763,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5766,7 +5773,7 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIsCP: SCOPE = 'entity' @@ -5775,10 +5782,10 @@ class IfcAxis1Placement_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc3.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc3.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_RefDirIs2D: @@ -5788,8 +5795,8 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIs2D: SCOPE = 'entity' @@ -5798,7 +5805,7 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIsCP: SCOPE = 'entity' @@ -5807,10 +5814,10 @@ class IfcAxis2Placement2D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc3.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc3.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_LocationIs3D: @@ -5820,7 +5827,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisIs3D: SCOPE = 'entity' @@ -5829,8 +5836,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5839,8 +5846,8 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5849,9 +5856,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_AxisAndRefDirProvision: SCOPE = 'entity' @@ -5860,8 +5867,8 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False class IfcAxis2Placement3D_LocationIsCP: @@ -5871,11 +5878,11 @@ class IfcAxis2Placement3D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc3.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc3.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcAxis2PlacementLinear_WR1: @@ -5885,7 +5892,7 @@ class IfcAxis2PlacementLinear_WR1: @staticmethod def __call__(self): - assert ('ifc4x3_rc3.ifcpointbydistanceexpression' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc3.ifcpointbydistanceexpression' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2PlacementLinear_WR2: SCOPE = 'entity' @@ -5894,9 +5901,9 @@ class IfcAxis2PlacementLinear_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcBSplineCurve_SameDim: SCOPE = 'entity' @@ -5905,16 +5912,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5924,11 +5931,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5938,26 +5945,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5967,10 +5974,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5979,10 +5986,10 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False class IfcBSplineSurfaceWithKnots_CorrespondingULists: SCOPE = 'entity' @@ -5991,8 +5998,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -6002,16 +6009,16 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -6021,8 +6028,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6031,8 +6038,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -6041,7 +6048,7 @@ class IfcBeamStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6050,8 +6057,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -6060,8 +6067,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -6070,8 +6077,8 @@ class IfcBearing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6080,8 +6087,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_SupportedRasterFormat: SCOPE = 'entity' @@ -6090,7 +6097,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -6099,7 +6106,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBoiler_CorrectPredefinedType: @@ -6109,8 +6116,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6119,8 +6126,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6129,8 +6136,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -6139,7 +6146,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x3_rc3.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x3_rc3.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x3_rc3.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -6149,7 +6156,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x3_rc3.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -6159,7 +6166,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanResult_SameDim: @@ -6169,9 +6176,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_FirstOperandClosed: SCOPE = 'entity' @@ -6180,8 +6187,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x3_rc3.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x3_rc3.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -6190,12 +6197,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x3_rc3.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x3_rc3.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -6204,7 +6211,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -6216,7 +6223,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x3_rc3.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x3_rc3.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBridge_CorrectPredefinedType: SCOPE = 'entity' @@ -6225,8 +6232,8 @@ class IfcBridge_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -6235,8 +6242,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -6245,8 +6252,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -6255,8 +6262,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -6265,7 +6272,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -6274,8 +6281,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -6284,8 +6291,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6294,8 +6301,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuiltElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -6304,7 +6311,7 @@ class IfcBuiltElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuiltSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6313,8 +6320,8 @@ class IfcBuiltSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -6323,8 +6330,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -6333,8 +6340,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6343,8 +6350,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -6353,8 +6360,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -6364,10 +6371,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -6377,9 +6384,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -6389,8 +6396,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6399,8 +6406,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6409,8 +6416,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6419,8 +6426,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6429,8 +6436,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6439,8 +6446,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6449,8 +6456,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6459,8 +6466,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6469,8 +6476,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6479,8 +6486,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6489,8 +6496,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6499,8 +6506,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -6509,8 +6516,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6519,8 +6526,8 @@ class IfcCaissonFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -6529,8 +6536,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -6539,11 +6546,11 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) def calc_IfcCartesianPointList_Dim(self): @@ -6556,16 +6563,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -6574,7 +6581,7 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -6583,7 +6590,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -6592,10 +6599,10 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcCartesianTransformationOperator2D_U(self): - return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6604,12 +6611,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -6618,7 +6625,7 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -6627,7 +6634,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -6636,7 +6643,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -6645,12 +6652,12 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, '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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6659,7 +6666,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6669,16 +6676,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6687,8 +6694,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6697,8 +6704,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6707,8 +6714,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6717,8 +6724,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6727,8 +6734,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6737,8 +6744,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6747,8 +6754,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6757,8 +6764,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6767,8 +6774,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6777,8 +6784,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6787,8 +6794,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6797,8 +6804,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -6807,7 +6814,7 @@ class IfcColumnStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6816,8 +6823,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6826,8 +6833,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6836,8 +6843,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6846,8 +6853,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6856,7 +6863,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6866,7 +6873,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6876,7 +6883,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6886,7 +6893,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcCompositeCurve_CurveContinuous: @@ -6896,9 +6903,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6907,17 +6914,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6926,7 +6933,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6939,12 +6946,12 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x3_rc3.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6953,8 +6960,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6963,7 +6970,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x3_rc3.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6973,8 +6980,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6983,8 +6990,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6993,8 +7000,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -7003,8 +7010,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -7013,8 +7020,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -7023,8 +7030,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -7033,8 +7040,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7043,8 +7050,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7053,8 +7060,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7063,8 +7070,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7073,8 +7080,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7083,8 +7090,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7093,8 +7100,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -7103,8 +7110,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -7113,8 +7120,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7123,8 +7130,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7133,8 +7140,8 @@ class IfcConveyorSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7143,8 +7150,8 @@ class IfcConveyorSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcconveyorsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcconveyorsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcConveyorSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7153,8 +7160,8 @@ class IfcConveyorSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -7163,8 +7170,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -7173,8 +7180,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -7183,8 +7190,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -7193,8 +7200,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -7203,8 +7210,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7213,8 +7220,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCourse_CorrectPredefinedType: SCOPE = 'entity' @@ -7223,8 +7230,8 @@ class IfcCourse_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCourse_CorrectTypeAssigned: SCOPE = 'entity' @@ -7233,8 +7240,8 @@ class IfcCourse_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccoursetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccoursetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCourseType_CorrectPredefinedType: SCOPE = 'entity' @@ -7243,8 +7250,8 @@ class IfcCourseType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -7253,8 +7260,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -7263,8 +7270,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -7273,8 +7280,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7283,8 +7290,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7293,8 +7300,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -7306,8 +7313,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -7316,8 +7323,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -7326,15 +7333,15 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) def calc_IfcCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCurveStyle_MeasureOfWidth: SCOPE = 'entity' @@ -7343,7 +7350,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x3_rc3.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x3_rc3.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyle_IdentifiableCurveStyle: @@ -7353,9 +7360,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -7365,7 +7372,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -7375,8 +7382,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -7385,8 +7392,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -7395,8 +7402,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -7405,8 +7412,8 @@ class IfcDeepFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -7415,8 +7422,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -7425,8 +7432,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -7435,11 +7442,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -7449,11 +7456,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @@ -7463,9 +7470,9 @@ class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_rc3.ifcconic', 'ifc4x3_rc3.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcDiscreteAccessory_CorrectPredefinedType: @@ -7475,8 +7482,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -7485,8 +7492,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -7495,8 +7502,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7505,8 +7512,8 @@ class IfcDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7515,8 +7522,8 @@ class IfcDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7525,8 +7532,8 @@ class IfcDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7535,8 +7542,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7545,8 +7552,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7555,8 +7562,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -7565,8 +7572,8 @@ class IfcDistributionSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -7575,8 +7582,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectStyleAssigned: @@ -7586,8 +7593,8 @@ class IfcDoor_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoor_CorrectPredefinedType: SCOPE = 'entity' @@ -7596,8 +7603,8 @@ class IfcDoor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDoor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7606,8 +7613,8 @@ class IfcDoor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -7616,8 +7623,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -7627,8 +7634,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -7638,8 +7645,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -7649,8 +7656,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -7660,7 +7667,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc3.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc3.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -7669,7 +7676,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc3.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc3.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7678,8 +7685,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -7688,7 +7695,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -7697,7 +7704,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -7706,8 +7713,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7716,8 +7723,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7726,8 +7733,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7736,8 +7743,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7746,8 +7753,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7756,8 +7763,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -7766,8 +7773,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -7776,8 +7783,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7786,8 +7793,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEarthworksCut_CorrectPredefinedType: SCOPE = 'entity' @@ -7796,8 +7803,8 @@ class IfcEarthworksCut_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEarthworksFill_CorrectPredefinedType: SCOPE = 'entity' @@ -7806,8 +7813,8 @@ class IfcEarthworksFill_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7816,9 +7823,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7830,7 +7837,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7840,8 +7847,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7850,8 +7857,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7860,8 +7867,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7870,8 +7877,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7880,8 +7887,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7890,8 +7897,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7900,8 +7907,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7910,8 +7917,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7920,8 +7927,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7930,8 +7937,8 @@ class IfcElectricFlowTreatmentDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7940,8 +7947,8 @@ class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricflowtreatmentdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricflowtreatmentdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7950,8 +7957,8 @@ class IfcElectricFlowTreatmentDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7960,8 +7967,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7970,8 +7977,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7980,8 +7987,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -7990,8 +7997,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8000,8 +8007,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8010,8 +8017,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -8020,8 +8027,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -8030,8 +8037,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -8040,8 +8047,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -8050,8 +8057,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -8060,8 +8067,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -8070,8 +8077,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -8080,7 +8087,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -8090,8 +8097,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -8100,8 +8107,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -8110,8 +8117,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -8120,8 +8127,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -8130,8 +8137,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8140,8 +8147,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -8150,8 +8157,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -8160,8 +8167,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8170,8 +8177,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -8180,8 +8187,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -8190,9 +8197,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -8201,8 +8208,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -8211,9 +8218,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -8222,9 +8229,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -8234,7 +8241,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -8243,7 +8250,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -8252,7 +8259,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x3_rc3.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -8265,8 +8272,8 @@ class IfcFacilityPart_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert ((predefinedtype != getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype != getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)) or (predefinedtype != getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE))) or ((predefinedtype == getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)) or (predefinedtype == getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE))) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert ((predefinedtype != express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype != express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)) or (predefinedtype != express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE))) or ((predefinedtype == express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)) or (predefinedtype == express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE))) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectPredefinedType: SCOPE = 'entity' @@ -8275,8 +8282,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -8285,8 +8292,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -8295,8 +8302,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -8305,8 +8312,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8315,8 +8322,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8325,8 +8332,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElement_NotContained: SCOPE = 'entity' @@ -8335,7 +8342,7 @@ class IfcFeatureElement_NotContained: @staticmethod def __call__(self): - containedinstructure = getattr(self, 'ContainedInStructure', INDETERMINATE) + containedinstructure = express_getattr(self, 'ContainedInStructure', INDETERMINATE) assert (sizeof(containedinstructure) == 0) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: @@ -8345,7 +8352,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -8354,7 +8361,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -8363,7 +8370,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc3.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc3.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -8372,7 +8379,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc3.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc3.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -8381,7 +8388,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -8390,8 +8397,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -8400,8 +8407,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -8410,8 +8417,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8420,8 +8427,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8430,8 +8437,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8440,8 +8447,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8450,8 +8457,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8460,8 +8467,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectPredefinedType: SCOPE = 'entity' @@ -8470,8 +8477,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -8480,8 +8487,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8490,8 +8497,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -8500,8 +8507,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8510,8 +8517,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8520,8 +8527,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -8530,8 +8537,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8540,8 +8547,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8550,8 +8557,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -8560,8 +8567,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8570,8 +8577,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8580,8 +8587,8 @@ class IfcFurnitureType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -8590,8 +8597,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -8600,8 +8607,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -8610,8 +8617,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -8620,7 +8627,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_rc3.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_rc3.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -8629,8 +8636,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -8639,7 +8646,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x3_rc3.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -8649,9 +8656,9 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedtargetview))) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -8660,23 +8667,23 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False def calc_IfcGeometricRepresentationSubContext_WorldCoordinateSystem(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -8685,12 +8692,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) def calc_IfcGradientCurve_RelativeElevation(self): return IfcGradient(self) @@ -8702,8 +8709,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -8712,9 +8719,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -8727,8 +8734,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -8737,8 +8744,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8747,8 +8754,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -8757,8 +8764,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -8767,8 +8774,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -8777,8 +8784,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -8787,8 +8794,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -8798,8 +8805,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcIShapeProfileDef_ValidFilletRadius: @@ -8809,11 +8816,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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 IfcImpactProtectionDevice_CorrectPredefinedType: @@ -8823,8 +8830,8 @@ class IfcImpactProtectionDevice_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or (predefinedtype != getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or (predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcImpactProtectionDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8833,8 +8840,8 @@ class IfcImpactProtectionDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcimpactprotectiondevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcimpactprotectiondevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcImpactProtectionDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8843,8 +8850,8 @@ class IfcImpactProtectionDeviceType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert ((predefinedtype != getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert ((predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcIndexedPolyCurve_Consecutive: SCOPE = 'entity' @@ -8853,7 +8860,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -8863,8 +8870,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8873,8 +8880,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8883,8 +8890,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8893,7 +8900,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8902,7 +8909,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8911,8 +8918,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8921,8 +8928,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8931,8 +8938,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8941,9 +8948,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8953,8 +8960,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8963,8 +8970,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -8973,8 +8980,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -8983,8 +8990,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -8993,8 +9000,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -9003,8 +9010,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -9013,8 +9020,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9023,8 +9030,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -9033,9 +9040,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLiquidTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9044,8 +9051,8 @@ class IfcLiquidTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLiquidTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9054,8 +9061,8 @@ class IfcLiquidTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcliquidterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcliquidterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLiquidTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9064,8 +9071,8 @@ class IfcLiquidTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -9074,8 +9081,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMarineFacility_CorrectPredefinedType: @@ -9085,8 +9092,8 @@ class IfcMarineFacility_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: SCOPE = 'entity' @@ -9095,7 +9102,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_rc3.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -9105,7 +9112,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -9118,7 +9125,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -9128,8 +9135,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -9138,8 +9145,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -9148,8 +9155,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9158,8 +9165,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9168,8 +9175,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9178,8 +9185,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -9188,8 +9195,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -9198,8 +9205,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -9208,7 +9215,7 @@ class IfcMemberStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -9217,8 +9224,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -9230,8 +9237,8 @@ class IfcMobileTelecommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -9240,8 +9247,8 @@ class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmobiletelecommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmobiletelecommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9250,8 +9257,8 @@ class IfcMobileTelecommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9260,8 +9267,8 @@ class IfcMooringDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9270,8 +9277,8 @@ class IfcMooringDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmooringdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmooringdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMooringDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9280,8 +9287,8 @@ class IfcMooringDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectPredefinedType: SCOPE = 'entity' @@ -9290,8 +9297,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -9300,8 +9307,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -9310,8 +9317,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -9320,7 +9327,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcNavigationElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9329,8 +9336,8 @@ class IfcNavigationElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcNavigationElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9339,8 +9346,8 @@ class IfcNavigationElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcnavigationelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcnavigationelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcNavigationElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9349,8 +9356,8 @@ class IfcNavigationElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -9359,7 +9366,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -9369,8 +9376,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -9379,8 +9386,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -9389,8 +9396,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -9399,8 +9406,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOpenCrossProfileDef_CorrectProfileType: SCOPE = 'entity' @@ -9409,7 +9416,7 @@ class IfcOpenCrossProfileDef_CorrectProfileType: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: SCOPE = 'entity' @@ -9418,8 +9425,8 @@ class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: @staticmethod def __call__(self): - widths = getattr(self, 'Widths', INDETERMINATE) - slopes = getattr(self, 'Slopes', INDETERMINATE) + widths = express_getattr(self, 'Widths', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) assert (sizeof(slopes) == sizeof(widths)) is not False class IfcOpenCrossProfileDef_CorrespondingTags: @@ -9429,8 +9436,8 @@ class IfcOpenCrossProfileDef_CorrespondingTags: @staticmethod def __call__(self): - slopes = getattr(self, 'Slopes', INDETERMINATE) - tags = getattr(self, 'Tags', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) + tags = express_getattr(self, 'Tags', INDETERMINATE) assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False class IfcOpeningElement_CorrectPredefinedType: @@ -9440,8 +9447,8 @@ class IfcOpeningElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -9450,18 +9457,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x3_rc3.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -9470,8 +9477,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -9480,8 +9487,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -9490,8 +9497,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -9500,9 +9507,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -9520,8 +9527,8 @@ class IfcPavement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPavement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9530,8 +9537,8 @@ class IfcPavement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpavementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpavementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPavementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9540,8 +9547,8 @@ class IfcPavementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPcurve_DimIs2D: SCOPE = 'entity' @@ -9550,8 +9557,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -9560,9 +9567,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -9572,9 +9579,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -9584,7 +9591,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -9594,7 +9601,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -9604,8 +9611,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -9614,8 +9621,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -9624,8 +9631,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -9634,8 +9641,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -9644,8 +9651,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9654,8 +9661,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -9664,8 +9671,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -9674,8 +9681,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -9684,8 +9691,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -9694,7 +9701,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -9704,7 +9711,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -9714,7 +9721,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_SizeOfPixelList: @@ -9724,9 +9731,9 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_getattr(self, 'Pixel', INDETERMINATE) assert (sizeof(pixel) == width * height) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -9736,12 +9743,12 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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 def calc_IfcPlacement_Dim(self): - location = getattr(self, 'Location', INDETERMINATE) - return getattr(location, 'Dim', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -9750,8 +9757,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -9760,8 +9767,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -9770,7 +9777,7 @@ class IfcPlateStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -9779,20 +9786,20 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPointByDistanceExpression_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_AllPointsSameDim: SCOPE = 'entity' @@ -9801,8 +9808,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -9811,8 +9818,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -9821,7 +9828,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x3_rc3.ifcpolyline', 'ifc4x3_rc3.ifccompositecurve']) == 1) is not False class IfcPolyline_SameDim: @@ -9831,8 +9838,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolynomialCurve_ValidCoefficients: SCOPE = 'entity' @@ -9841,9 +9848,9 @@ class IfcPolynomialCurve_ValidCoefficients: @staticmethod def __call__(self): - coefficientsx = getattr(self, 'CoefficientsX', INDETERMINATE) - coefficientsy = getattr(self, 'CoefficientsY', INDETERMINATE) - coefficientsz = getattr(self, 'CoefficientsZ', INDETERMINATE) + coefficientsx = express_getattr(self, 'CoefficientsX', INDETERMINATE) + coefficientsy = express_getattr(self, 'CoefficientsY', INDETERMINATE) + coefficientsz = express_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 IfcPolynomialCurve_CorrectPositionDim: @@ -9853,9 +9860,9 @@ class IfcPolynomialCurve_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 + position = express_getattr(self, 'Position', INDETERMINATE) + coefficientsz = express_getattr(self, 'CoefficientsZ', INDETERMINATE) + assert (express_getattr(position, 'Dim', INDETERMINATE) == 2 and (not exists(coefficientsz)) or express_getattr(position, 'Dim', INDETERMINATE) == 3) is not False class IfcPositioningElement_HasPlacement: SCOPE = 'entity' @@ -9864,7 +9871,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -9873,13 +9880,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -9889,7 +9896,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_rc3.ifcshaperepresentation', 'ifc4x3_rc3.ifcgeometricrepresentationitem', 'ifc4x3_rc3.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -9899,7 +9906,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_rc3.ifcgeometricrepresentationitem', 'ifc4x3_rc3.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_HasName: @@ -9909,7 +9916,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedure_CorrectPredefinedType: SCOPE = 'entity' @@ -9918,8 +9925,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9928,8 +9935,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -9938,9 +9945,9 @@ class IfcProduct_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_rc3.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3_rc3.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -9949,7 +9956,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_rc3.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_HasName: @@ -9959,7 +9966,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_CorrectContext: SCOPE = 'entity' @@ -9968,7 +9975,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_rc3.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_rc3.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -9977,7 +9984,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -9986,8 +9993,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcProjectionElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9996,8 +10003,8 @@ class IfcProjectionElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: SCOPE = 'entity' @@ -10006,8 +10013,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -10017,8 +10024,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: @@ -10028,8 +10035,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -10039,8 +10046,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -10050,9 +10057,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -10061,7 +10068,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -10070,7 +10077,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -10079,7 +10086,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -10088,7 +10095,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -10098,7 +10105,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -10107,7 +10114,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -10117,8 +10124,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -10128,8 +10135,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -10138,8 +10145,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10148,8 +10155,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10158,8 +10165,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -10168,8 +10175,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -10178,8 +10185,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -10188,8 +10195,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10198,8 +10205,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProxy_WR1: SCOPE = 'entity' @@ -10208,7 +10215,7 @@ class IfcProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -10217,8 +10224,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -10227,8 +10234,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -10237,8 +10244,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -10247,7 +10254,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -10256,7 +10263,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -10266,7 +10273,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0.0) is not False class IfcQuantityLength_WR21: @@ -10276,7 +10283,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -10285,7 +10292,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -10295,7 +10302,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -10304,7 +10311,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -10314,7 +10321,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -10323,7 +10330,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -10333,7 +10340,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -10342,7 +10349,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRail_CorrectPredefinedType: @@ -10352,8 +10359,8 @@ class IfcRail_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRail_CorrectTypeAssigned: SCOPE = 'entity' @@ -10362,8 +10369,8 @@ class IfcRail_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcrailtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcrailtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailType_CorrectPredefinedType: SCOPE = 'entity' @@ -10372,8 +10379,8 @@ class IfcRailType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailing_CorrectPredefinedType: SCOPE = 'entity' @@ -10382,8 +10389,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -10392,8 +10399,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -10402,8 +10409,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailway_HasObjectType: SCOPE = 'entity' @@ -10412,8 +10419,8 @@ class IfcRailway_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -10422,8 +10429,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -10432,8 +10439,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10442,8 +10449,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10452,8 +10459,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10462,8 +10469,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -10472,8 +10479,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -10482,8 +10489,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -10495,8 +10502,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -10505,8 +10512,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -10518,9 +10525,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidWallThickness: @@ -10530,8 +10537,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangleHollowProfileDef_ValidInnerRadius: SCOPE = 'entity' @@ -10540,9 +10547,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -10551,8 +10558,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -10561,8 +10568,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -10572,8 +10579,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -10583,10 +10590,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x3_rc3.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x3_rc3.ifcplane' in typeof(basissurface)) or 'ifc4x3_rc3.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -10596,9 +10603,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcedSoil_CorrectPredefinedType: @@ -10608,8 +10615,8 @@ class IfcReinforcedSoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectPredefinedType: SCOPE = 'entity' @@ -10618,8 +10625,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -10628,8 +10635,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_CorrectPredefinedType: SCOPE = 'entity' @@ -10638,8 +10645,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10648,8 +10655,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMesh_CorrectPredefinedType: @@ -10659,8 +10666,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -10669,8 +10676,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_CorrectPredefinedType: SCOPE = 'entity' @@ -10679,8 +10686,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10689,8 +10696,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcRelAggregates_NoSelfReference: @@ -10700,8 +10707,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssigns_WR1: @@ -10711,8 +10718,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -10722,8 +10729,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -10732,8 +10739,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -10742,8 +10749,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -10752,8 +10759,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -10762,8 +10769,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -10772,8 +10779,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -10782,7 +10789,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc3.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_rc3.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc3.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_rc3.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -10791,7 +10798,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_rc3.ifcelement', 'ifc4x3_rc3.ifcelementtype', 'ifc4x3_rc3.ifcwindowstyle', 'ifc4x3_rc3.ifcdoorstyle', 'ifc4x3_rc3.ifcstructuralmember', 'ifc4x3_rc3.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_rc3.ifcelement', 'ifc4x3_rc3.ifcelementtype', 'ifc4x3_rc3.ifcwindowstyle', 'ifc4x3_rc3.ifcdoorstyle', 'ifc4x3_rc3.ifcstructuralmember', 'ifc4x3_rc3.ifcport']) == 0]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -10800,8 +10807,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @@ -10811,7 +10818,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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 IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -10821,7 +10828,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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 IfcRelConnectsPorts_NoSelfReference: @@ -10831,8 +10838,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -10842,7 +10849,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_rc3.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -10852,8 +10859,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -10863,7 +10870,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc3.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc3.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -10872,8 +10879,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -10883,8 +10890,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -10894,8 +10901,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -10905,7 +10912,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_rc3.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x3_rc3.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -10915,8 +10922,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -10926,9 +10933,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -10937,9 +10944,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_rc3.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_rc3.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_rc3.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_rc3.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_rc3.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_rc3.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -10948,7 +10955,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -10958,7 +10965,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x3_rc3.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisStartInXY: @@ -10968,8 +10975,8 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: SCOPE = 'entity' @@ -10978,12 +10985,12 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', 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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -10992,7 +10999,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoad_HasObjectType: SCOPE = 'entity' @@ -11001,8 +11008,8 @@ class IfcRoad_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -11011,8 +11018,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -11021,8 +11028,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -11031,8 +11038,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -11041,11 +11048,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSiUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSiUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11054,8 +11061,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11064,8 +11071,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11074,8 +11081,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -11084,7 +11091,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -11093,7 +11100,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -11102,8 +11109,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -11112,8 +11119,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -11122,7 +11129,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -11132,8 +11139,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -11143,8 +11150,8 @@ class IfcSectionedSolidHorizontal_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11153,8 +11160,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_ConsistentProfileTypes: @@ -11164,8 +11171,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_SpineCurveDim: SCOPE = 'entity' @@ -11174,8 +11181,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -11187,8 +11194,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -11197,8 +11204,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11207,8 +11214,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11217,8 +11224,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11227,8 +11234,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11237,8 +11244,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -11247,8 +11254,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -11257,7 +11264,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x3_rc3.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x3_rc3.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -11266,7 +11273,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x3_rc3.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x3_rc3.ifcvertexpoint', 'ifc4x3_rc3.ifcedgecurve', 'ifc4x3_rc3.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False class IfcShapeRepresentation_HasRepresentationType: @@ -11276,7 +11283,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -11285,7 +11292,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -11294,7 +11301,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): return 3 @@ -11306,8 +11313,8 @@ class IfcSign_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSign_CorrectTypeAssigned: SCOPE = 'entity' @@ -11316,8 +11323,8 @@ class IfcSign_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsigntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsigntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignType_CorrectPredefinedType: SCOPE = 'entity' @@ -11326,8 +11333,8 @@ class IfcSignType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSignal_CorrectPredefinedType: SCOPE = 'entity' @@ -11336,8 +11343,8 @@ class IfcSignal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSignal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11346,8 +11353,8 @@ class IfcSignal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsignaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsignaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11356,8 +11363,8 @@ class IfcSignalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSlab_CorrectPredefinedType: SCOPE = 'entity' @@ -11366,8 +11373,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -11376,8 +11383,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabElementedCase_HasDecomposition: SCOPE = 'entity' @@ -11386,7 +11393,7 @@ class IfcSlabElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcSlabStandardCase_HasMaterialLayerSetusage: SCOPE = 'entity' @@ -11395,7 +11402,7 @@ class IfcSlabStandardCase_HasMaterialLayerSetusage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -11404,8 +11411,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11414,8 +11421,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11424,8 +11431,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11434,8 +11441,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -11447,8 +11454,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -11457,8 +11464,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -11467,8 +11474,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -11477,8 +11484,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -11487,8 +11494,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11497,8 +11504,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -11507,7 +11514,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_rc3.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_rc3.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_rc3.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_rc3.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -11516,8 +11523,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -11526,8 +11533,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -11536,8 +11543,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11546,8 +11553,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11556,8 +11563,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11566,8 +11573,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -11576,8 +11583,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -11586,8 +11593,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -11596,8 +11603,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -11606,8 +11613,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -11616,8 +11623,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -11626,8 +11633,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_HasObjectType: SCOPE = 'entity' @@ -11636,8 +11643,8 @@ class IfcStructuralAnalysisModel_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralAnalysisModel_CorrectPredefinedType: SCOPE = 'entity' @@ -11646,8 +11653,8 @@ class IfcStructuralAnalysisModel_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11656,8 +11663,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -11666,8 +11673,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -11676,8 +11683,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -11686,8 +11693,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -11696,8 +11703,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -11706,8 +11713,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -11716,7 +11723,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc3.ifcstructuralloadlinearforce', 'ifc4x3_rc3.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc3.ifcstructuralloadlinearforce', 'ifc4x3_rc3.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -11725,7 +11732,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -11734,7 +11741,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -11743,8 +11750,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -11754,10 +11761,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -11766,7 +11773,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc3.ifcstructuralloadplanarforce', 'ifc4x3_rc3.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc3.ifcstructuralloadplanarforce', 'ifc4x3_rc3.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -11775,7 +11782,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -11784,7 +11791,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc3.ifcstructuralloadsingleforce', 'ifc4x3_rc3.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc3.ifcstructuralloadsingleforce', 'ifc4x3_rc3.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -11793,7 +11800,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc3.ifcstructuralloadsingleforce', 'ifc4x3_rc3.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc3.ifcstructuralloadsingleforce', 'ifc4x3_rc3.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -11802,8 +11809,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11812,8 +11819,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -11822,8 +11829,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -11832,8 +11839,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -11842,8 +11849,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -11852,7 +11859,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x3_rc3.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -11862,7 +11869,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc3.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc3.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -11871,8 +11878,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11881,8 +11888,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -11894,8 +11901,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -11904,7 +11911,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x3_rc3.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -11917,8 +11924,8 @@ class IfcSurfaceFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -11927,17 +11934,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: SCOPE = 'entity' @@ -11946,9 +11953,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceReinforcementArea_NonnegativeArea1: @@ -11958,7 +11965,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -11968,7 +11975,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -11978,7 +11985,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceStyle_MaxOneShading: @@ -11988,7 +11995,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -11997,7 +12004,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -12006,7 +12013,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -12015,7 +12022,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneExtDefined: SCOPE = 'entity' @@ -12024,7 +12031,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc3.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -12033,8 +12040,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixDim: SCOPE = 'entity' @@ -12043,8 +12050,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -12053,8 +12060,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolid_DirectrixBounded: @@ -12064,9 +12071,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_rc3.ifcconic', 'ifc4x3_rc3.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -12076,8 +12083,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -12086,7 +12093,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x3_rc3.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_rc3.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x3_rc3.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_rc3.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -12095,8 +12102,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -12105,8 +12112,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -12115,8 +12122,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -12125,8 +12132,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12135,8 +12142,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12145,8 +12152,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12155,8 +12162,8 @@ class IfcSystemFurnitureElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12165,8 +12172,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -12176,8 +12183,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -12187,8 +12194,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -12197,20 +12204,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -12219,8 +12226,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -12229,8 +12236,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -12239,8 +12246,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -12249,7 +12256,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -12258,8 +12265,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -12268,8 +12275,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -12278,12 +12285,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -12293,8 +12300,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -12303,8 +12310,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -12313,8 +12320,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -12323,8 +12330,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12333,8 +12340,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -12343,8 +12350,8 @@ class IfcTendonConduit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -12353,8 +12360,8 @@ class IfcTendonConduit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -12363,8 +12370,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -12373,8 +12380,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -12386,7 +12393,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x3_rc3.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -12396,7 +12403,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x3_rc3.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x3_rc3.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -12405,7 +12412,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc3.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc3.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -12414,7 +12421,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -12423,7 +12430,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -12432,8 +12439,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTrackElement_CorrectPredefinedType: @@ -12443,8 +12450,8 @@ class IfcTrackElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTrackElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12453,8 +12460,8 @@ class IfcTrackElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctrackelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctrackelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTrackElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12463,8 +12470,8 @@ class IfcTrackElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransformer_CorrectPredefinedType: SCOPE = 'entity' @@ -12473,8 +12480,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -12483,8 +12490,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctranformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctranformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -12493,8 +12500,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12503,8 +12510,8 @@ class IfcTransportElement_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or (predefinedtype != getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or (predefinedtype != express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12513,8 +12520,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12523,11 +12530,11 @@ class IfcTransportElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE))))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE))))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -12537,7 +12544,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: SCOPE = 'entity' @@ -12546,7 +12553,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -12556,7 +12563,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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 IfcTrimmedCurve_NoTrimOfBoundedCurves: @@ -12566,7 +12573,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x3_rc3.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTubeBundle_CorrectPredefinedType: @@ -12576,8 +12583,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12586,8 +12593,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12596,8 +12603,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -12606,7 +12613,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -12615,7 +12622,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -12625,7 +12632,7 @@ class IfcTypeProduct_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_rc3.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x3_rc3.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12634,8 +12641,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -12645,8 +12652,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -12656,7 +12663,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -12666,8 +12673,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12676,8 +12683,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12686,8 +12693,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -12696,8 +12703,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -12706,8 +12713,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -12716,8 +12723,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -12726,8 +12733,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -12736,8 +12743,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -12746,8 +12753,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -12756,12 +12763,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -12770,8 +12777,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -12780,8 +12787,8 @@ class IfcVibrationDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -12790,8 +12797,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -12800,8 +12807,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -12810,8 +12817,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12820,8 +12827,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVoidingFeature_HasObjectType: SCOPE = 'entity' @@ -12830,8 +12837,8 @@ class IfcVoidingFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -12840,8 +12847,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -12850,8 +12857,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallElementedCase_HasDecomposition: SCOPE = 'entity' @@ -12860,7 +12867,7 @@ class IfcWallElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -12869,7 +12876,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc3.ifcrelassociates.relatedobjects') if 'ifc4x3_rc3.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc3.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -12878,8 +12885,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -12888,8 +12895,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -12898,8 +12905,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -12908,8 +12915,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectStyleAssigned: SCOPE = 'entity' @@ -12918,8 +12925,8 @@ class IfcWindow_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindow_CorrectPredefinedType: SCOPE = 'entity' @@ -12928,8 +12935,8 @@ class IfcWindow_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWindow_CorrectTypeAssigned: SCOPE = 'entity' @@ -12938,8 +12945,8 @@ class IfcWindow_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc3.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -12948,8 +12955,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -12959,8 +12966,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -12970,8 +12977,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -12981,7 +12988,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc3.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc3.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -12990,7 +12997,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc3.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc3.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc3.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -12999,8 +13006,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -13009,8 +13016,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -13019,8 +13026,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -13029,8 +13036,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -13039,8 +13046,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -13050,19 +13057,19 @@ class IfcZone_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_rc3.ifczone' in typeof(temp) or 'ifc4x3_rc3.ifcspace' in typeof(temp) or 'ifc4x3_rc3.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x3_rc3.ifczone' in typeof(temp) or 'ifc4x3_rc3.ifcspace' in typeof(temp) or 'ifc4x3_rc3.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -13072,11 +13079,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -13090,13 +13097,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -13114,7 +13121,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -13151,11 +13158,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -13335,7 +13342,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x3_rc3.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x3_rc3.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -13346,27 +13353,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc3.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc3.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc3.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc3.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc3.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc3.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc3.ifcproject' in typeof(temp)]) return count == 0 else: @@ -13378,26 +13385,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc3.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc3.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc3.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc3.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc3.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x3_rc3.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_rc3.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) + if 'ifc4x3_rc3.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x3_rc3.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13406,21 +13413,21 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x3_rc3.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc3.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc3.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc3.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x3_rc3.ifcgradientcurve' in typeof(curve): return 3 if 'ifc4x3_rc3.ifcsegmentedreferencecurve' in typeof(curve): return 3 if 'ifc4x3_rc3.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc3.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc3.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x3_rc3.ifcoffsetcurve3d' in typeof(curve): @@ -13430,19 +13437,19 @@ def IfcCurveDim(curve): if 'ifc4x3_rc3.ifccurvesegment2d' in typeof(curve): return 2 if 'ifc4x3_rc3.ifcpolynomialcurve' in typeof(curve): - if not exists(getattr(curve, 'CoefficientsZ', INDETERMINATE)) and getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: + if not exists(express_getattr(curve, 'CoefficientsZ', INDETERMINATE)) and express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: return 2 return 3 if 'ifc4x3_rc3.ifcpcurve' in typeof(curve): return 3 if 'ifc4x3_rc3.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -13450,13 +13457,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSiUnit(n): @@ -13526,15 +13533,15 @@ def IfcDimensionsForSiUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -13543,36 +13550,36 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x3_rc3.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x3_rc3.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x3_rc3.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcGradient(gradientcurve): @@ -13592,9 +13599,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -13612,10 +13619,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -13626,25 +13633,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x3_rc3.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x3_rc3.ifcvector' in typeof(arg): vec.Orientation = v @@ -13656,18 +13663,18 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointListDim(pointlist): @@ -13678,32 +13685,32 @@ def IfcPointListDim(pointlist): 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -13724,15 +13731,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x3_rc3.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -13748,71 +13755,71 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x3_rc3.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_rc3.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x3_rc3.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_rc3.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x3_rc3.ifcpoint', 'ifc4x3_rc3.ifccurve', 'ifc4x3_rc3.ifcgeometriccurveset', 'ifc4x3_rc3.ifcannotationfillarea', 'ifc4x3_rc3.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcgeometricset' in typeof(temp) or 'ifc4x3_rc3.ifcpoint' in typeof(temp) or 'ifc4x3_rc3.ifccurve' in typeof(temp) or ('ifc4x3_rc3.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcgeometriccurveset' in typeof(temp) or 'ifc4x3_rc3.ifcgeometricset' in typeof(temp) or 'ifc4x3_rc3.ifcpoint' in typeof(temp) or ('ifc4x3_rc3.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x3_rc3.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_rc3.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x3_rc3.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc3.ifctessellateditem', 'ifc4x3_rc3.ifcshellbasedsurfacemodel', 'ifc4x3_rc3.ifcfacebasedsurfacemodel', 'ifc4x3_rc3.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc3.ifctessellateditem', 'ifc4x3_rc3.ifcshellbasedsurfacemodel', 'ifc4x3_rc3.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc3.ifcextrudedareasolid', 'ifc4x3_rc3.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x3_rc3.ifcextrudedareasolidtapered', 'ifc4x3_rc3.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc3.ifcsweptareasolid', 'ifc4x3_rc3.ifcsweptdisksolid', 'ifc4x3_rc3.ifcsectionedsolidhorizontal'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc3.ifcbooleanresult', 'ifc4x3_rc3.ifccsgprimitive3d', 'ifc4x3_rc3.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc3.ifccsgsolid', 'ifc4x3_rc3.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcmappeditem' in typeof(temp)]) else: return None @@ -13820,9 +13827,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -13832,28 +13839,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x3_rc3.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x3_rc3.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x3_rc3.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x3_rc3.ifcopenshell' in typeof(temp) or 'ifc4x3_rc3.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -13864,7 +13871,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x3_rc3.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x3_rc3.ifcpropertysetdefinitionset' in typeof(definition): @@ -13877,7 +13884,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -13885,7 +13892,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x3_rc3.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -13893,41 +13900,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_rc3.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_rc3.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13935,31 +13942,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_rc3.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_rc3.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py index ac69924453..c83c75b94a 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,2394 +147,2394 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcActionTypeEnum = enum_namespace() -permanent_g = getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAddressTypeEnum = enum_namespace() -office = getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -siren = getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -railwaycrocodile = getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -userdefined = getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) +railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -line = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -circulararc = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cubic = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) -helmertcurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -blosscurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cosinecurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -constantgradient = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -circulararc = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -parabolicarc = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) -clothoid = getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnnotationTypeEnum = enum_namespace() -assumedpoint = getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -asbuiltarea = getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -non_physical_signal = getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -assumedline = getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -widthevent = getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -assumedarea = getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -superelevationevent = getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -asbuiltpoint = getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -userdefined = getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) +asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) +asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) +non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) +assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) +widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) +assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) +superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) +asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) +userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', 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) -speaker = getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -communicationterminal = getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) -recordingequipment = getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) -userdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) +recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBSplineCurveForm = enum_namespace() -polyline_form = getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) IfcBSplineSurfaceForm = enum_namespace() -plane_surf = getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) IfcBeamTypeEnum = enum_namespace() -beam = getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) +guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) +guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) +free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) IfcBearingTypeEnum = enum_namespace() -cylindrical = getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBenchmarkEnum = enum_namespace() -greaterthan = getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) IfcBoilerTypeEnum = enum_namespace() -water = getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', 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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -safetycage = getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) +safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -reinforcing = getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -erosionprevention = getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -userdefined = getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) +prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBuiltSystemTypeEnum = enum_namespace() -reinforcing = getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -mooring = getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -trackcircuit = getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -erosionprevention = getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -foundation = getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -shading = getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -fenestration = getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -transport = getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -prestressing = getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) +mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) +outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) +erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) +fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -cablebracket = getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -catenarywire = getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -dropper = getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) +catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) +dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableFittingTypeEnum = enum_namespace() -connector = getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -fanout = getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -userdefined = getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -contactwiresegment = getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', 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) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) +fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) +fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) +opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) +stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) +wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCaissonFoundationTypeEnum = enum_namespace() -well = getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChangeActionEnum = enum_namespace() -nochange = getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) IfcChillerTypeEnum = enum_namespace() -aircooled = getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcColumnTypeEnum = enum_namespace() -column = getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -automaton = getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -intelligentperipheral = getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) -ipnetworkequipment = getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) -opticalnetworkunit = getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', 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) -opticallineterminal = getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) -linesideelectronicunit = getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) -radioblockcenter = getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) -userdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) +intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) +ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) +opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) +telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) +telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) +transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) +transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) +transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) +opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) +linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) +radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) IfcCompressorTypeEnum = enum_namespace() -dynamic = getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConnectionTypeEnum = enum_namespace() -atpath = getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConstraintEnum = enum_namespace() -hard = getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -notdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcControllerTypeEnum = enum_namespace() -floating = getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcConveyorSegmentTypeEnum = enum_namespace() -chuteconveyor = getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -beltconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -screwconveyor = getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -bucketconveyor = getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -userdefined = getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) +beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) +screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) +bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) +userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostScheduleTypeEnum = enum_namespace() -budget = getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCourseTypeEnum = enum_namespace() -armour = getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -filter = getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -ballastbed = getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -pavement = getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) +filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) +ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) +core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) +pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) +protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCoveringTypeEnum = enum_namespace() -ceiling = getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -cablearranger = getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -insulator = getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -tensioningequipment = getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -railpad = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -slidingchair = getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -rail_lubrication = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -panel_strengthening = getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -railbrace = getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -elastic_cushion = getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -soundabsorption = getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -pointmachinemountingdevice = getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) -point_machine_locking_device = getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) -rail_mechanical_equipment = getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -birdprotection = getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -userdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) +insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) +lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) +tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) +railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) +slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) +rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) +panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) +railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) +elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) +soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) +pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) +point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) +rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) +birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionBoardTypeEnum = enum_namespace() -switchboard = getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -consumerunit = getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -motorcontrolcentre = getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -distributionframe = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -distributionboard = getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -dispatchingboard = getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) -userdefined = getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) +distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) +userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDistributionSystemEnum = enum_namespace() -airconditioning = getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', 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) -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) -municipalsolidwaste = getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = getattr(IfcDistributionSystemEnum, 'REFRIGERATION', 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) -catenary_system = getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -overhead_contactline_system = getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -return_circuit = getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -fixedtransmissionnetwork = getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) -operationaltelephonysystem = getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) -mobilenetwork = getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) -monitoringsystem = getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) -userdefined = getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) +overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) +return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) +fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) +operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) +mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) +monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentConfidentialityEnum = enum_namespace() -public = getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) IfcDocumentStatusEnum = enum_namespace() -draft = getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorPanelOperationEnum = enum_namespace() -swinging = getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) +plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) +userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeEnum = enum_namespace() -door = getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -boom_barrier = getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -turnstile = getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) +turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_panel_single_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) -double_panel_single_swing_opposite_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_panel_single_swing_opposite_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_panel_double_swing = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_panel_sliding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SLIDING', INDETERMINATE) -folding_to_left = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_panel_folding = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) -revolving_horizontal = getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', INDETERMINATE) -rollingup = getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -double_panel_lifting_vertical = getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', 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_vertical = getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) -userdefined = getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +double_panel_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) +double_panel_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_panel_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +double_panel_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +double_panel_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SLIDING', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +double_panel_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) +revolving_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +double_panel_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', INDETERMINATE) +lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) +lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) +lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) +revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEarthworksCutTypeEnum = enum_namespace() -trench = getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -dredging = getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -topsoilremoval = getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -stepexcavation = getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -pavementmilling = getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -cut = getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -base_excavation = getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -userdefined = getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) +dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) +excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) +overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) +topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) +stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) +pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) +cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) +base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEarthworksFillTypeEnum = enum_namespace() -backfill = getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -subgrade = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -embankment = getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -transitionsection = getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -subgradebed = getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -slopefill = getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -userdefined = getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) +counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) +subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) +embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) +transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) +subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) +slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -freestandingwaterheater = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', 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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -capacitor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -compensator = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -inductor = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -recharger = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) +compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) +inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) +recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementAssemblyTypeEnum = enum_namespace() -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) -girder = getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -mast = getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -signalassembly = getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -grid = getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -shelter = getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -supportingassembly = getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -traction_switching_assembly = getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -trackpanel = getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -turnoutpanel = getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -dilatationpanel = getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -rail_mechanical_equipment_assembly = getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -entranceworks = getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -sumpbuster = getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -traffic_calming_device = getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -userdefined = getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) +signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) +grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) +shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) +supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) +suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) +traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) +trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) +turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) +dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) +rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) +entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) +sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) +traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTriggerTypeEnum = enum_namespace() -eventrule = getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcEventTypeEnum = enum_namespace() -startevent = getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcExternalSpatialElementTypeEnum = enum_namespace() -external = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFacilityPartCommonTypeEnum = enum_namespace() -segment = getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -aboveground = getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -junction = getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -belowground = getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -substructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -terminal = getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -superstructure = getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) +aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) +junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) +levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) +belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) +substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) +superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFacilityUsageEnum = enum_namespace() -lateral = getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -region = getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -longitudinal = getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -userdefined = getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) +region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) +vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) +longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -firemonitor = getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) -userdefined = getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowDirectionEnum = enum_namespace() -source = getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -combined = getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -voltmeter = getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -userdefined = getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) +voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcFurnitureTypeEnum = enum_namespace() -chair = getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -technicalcabinet = getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeographicElementTypeEnum = enum_namespace() -terrain = getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGeometricProjectionEnum = enum_namespace() -graph_view = getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = getattr(IfcGeometricProjectionEnum, 'SKETCH_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) -elevation_view = getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) IfcGridTypeEnum = enum_namespace() -rectangular = getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcHumidifierTypeEnum = enum_namespace() -steaminjection = getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcImpactProtectionDeviceTypeEnum = enum_namespace() -crashcushion = getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -bumper = getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -userdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) +dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) +fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) +bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) +userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcInternalOrExternalEnum = enum_namespace() -internal = getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) IfcInventoryTypeEnum = enum_namespace() -assetinventory = getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKnotType = enum_namespace() -uniform_knots = getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) IfcLightFixtureTypeEnum = enum_namespace() -pointsource = getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLiquidTerminalTypeEnum = enum_namespace() -loadingarm = getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -hosereel = getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -userdefined = getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) +hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLoadGroupTypeEnum = enum_namespace() -load_group = getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLogicalOperatorEnum = enum_namespace() -logicaland = getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) IfcMarineFacilityTypeEnum = enum_namespace() -canal = getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -waterwayshiplift = getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -revetment = getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) -launchrecovery = getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -hydrolift = getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -shipyard = getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -shiplift = getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -port = getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -floatingdock = getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -navigationalchannel = getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -breakwater = getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -drydock = getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -jetty = getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -shiplock = getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -barrierbeach = getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -slipway = getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -userdefined = getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) +waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) +revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) +launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) +marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) +hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) +shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) +shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) +port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) +quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) +floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) +navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) +breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) +drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) +jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) +shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) +barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) +slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) +waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) +userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMarinePartTypeEnum = enum_namespace() -crest = getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -manufacturing = getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -lowwaterline = getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -core = getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -waterfield = getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -cill_level = getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -berthingstructure = getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -copelevel = getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -chamber = getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -storagearea = getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) -approachchannel = getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -vehicleservicing = getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -shiptransfer = getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -gatehead = getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -belowwaterline = getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -weatherside = getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -landfield = getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -protection = getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -leewardside = getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -abovewaterline = getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -navigationalarea = getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -highwaterline = getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -userdefined = getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) +manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) +lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) +core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) +waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) +cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) +berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) +copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) +chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) +storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) +approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) +vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) +shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) +gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) +gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) +belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) +weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) +landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) +protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) +leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) +abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) +anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) +navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) +highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) +userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -railjoint = getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -railfastening = getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -chain = getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -rope = getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -userdefined = getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) +railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) +chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) +rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMemberTypeEnum = enum_namespace() -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) -stringer = getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -structuralcable = getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -tiebar = getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) +tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -e_utran_node_b = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -remoteradiounit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) -accesspoint = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basetransceiverstation = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -remoteunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -basebandunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -masterunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -gateway_gprs_support_node = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) -subscriberserver = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) -mobileswitchingcenter = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) -mscserver = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) -packetcontrolunit = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) -service_gprs_support_node = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) -userdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) +remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) +accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) +basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) +remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) +basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) +masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) +gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) +subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) +mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) +mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) +packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) +service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) +userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcMooringDeviceTypeEnum = enum_namespace() -linetensioner = getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -bollard = getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -userdefined = getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) +magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) +mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) +vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) +bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) +userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) +buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) +userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcObjectTypeEnum = enum_namespace() -product = getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) +process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) +control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) +resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) +actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) +group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) +project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) +notdefined = express_getattr(IfcObjectTypeEnum, '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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) +rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) +userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcPileTypeEnum = enum_namespace() -bored = getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPipeSegmentTypeEnum = enum_namespace() -culvert = getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPlateTypeEnum = enum_namespace() -curtain_panel = getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', 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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -anti_arcing_device = getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -sparkgap = getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -voltagelimiter = getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) +sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) +voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailTypeEnum = enum_namespace() -rackrail = getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -blade = getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -guardrail = getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -stockrail = getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -checkrail = getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -rail = getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -userdefined = getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) +blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) +guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) +stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) +checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) +rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailingTypeEnum = enum_namespace() -handrail = getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -userdefined = getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayPartTypeEnum = enum_namespace() -trackstructure = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -linesidestructurepart = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -dilatationsuperstructure = getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -plaintracksupestructure = getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) -linesidestructure = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -superstructure = getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -turnoutsuperstructure = getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) +trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) +linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) +dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) +plaintracksupestructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) +linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayTypeEnum = enum_namespace() -userdefined = getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampFlightTypeEnum = enum_namespace() -straight = getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRampTypeEnum = enum_namespace() -straight_run_ramp = getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRecurrenceTypeEnum = enum_namespace() -daily = getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) IfcReferentTypeEnum = enum_namespace() -kilopoint = getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -referencemarker = getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -landmark = getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) -boundary = getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) -intersection = getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) -position = getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) +landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) +boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) +intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) +position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -plastic = getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcedSoilTypeEnum = enum_namespace() -surchargepreloaded = getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -dynamicallycompacted = getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -replaced = getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -grouted = getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -userdefined = getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) +verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) +dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) +replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) +rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) +grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarRoleEnum = enum_namespace() -main = getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) -stud = getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadPartTypeEnum = enum_namespace() -roadsidepart = getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -bus_stop = getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -hardshoulder = getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -passingbay = getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -roadwayplateau = getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roadside = getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -refugeisland = getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -tollplaza = getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -centralreserve = getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -sidewalk = getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -parkingbay = getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -railwaycrossing = getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -pedestrian_crossing = getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -softshoulder = getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -bicyclecrossing = getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -centralisland = getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -shoulder = getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -trafficlane = getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -roadsegment = getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roundabout = getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -layby = getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -carriageway = getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -trafficisland = getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -userdefined = getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) +bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) +hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) +intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) +passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) +roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) +roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) +refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) +tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) +centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) +sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) +parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) +railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) +pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) +softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) +bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) +centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) +shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) +trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) +roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) +roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) +layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) +carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) +trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) +userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadTypeEnum = enum_namespace() -userdefined = getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoleEnum = enum_namespace() -supplier = getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) IfcRoofTypeEnum = enum_namespace() -flat_roof = getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSIPrefix = enum_namespace() -exa = getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +atto = express_getattr(IfcSIPrefix, 'ATTO', 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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', 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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) IfcSensorTypeEnum = enum_namespace() -cosensor = getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = getattr(IfcSensorTypeEnum, 'FLOWSENSOR', 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) -phsensor = getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -earthquakesensor = getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -foreignobjectdetectionsensor = getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -obstaclesensor = getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -rainsensor = getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -snowdepthsensor = getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -trainsensor = getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -userdefined = getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) +foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) +obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) +rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) +snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) +trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) +turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) +wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSequenceEnum = enum_namespace() -start_start = getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSignTypeEnum = enum_namespace() -marker = getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -pictoral = getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -mirror = getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -userdefined = getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) +pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) +mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) +userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSignalTypeEnum = enum_namespace() -visual = getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -audio = getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -userdefined = getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) +audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) +mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) +userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) IfcSlabTypeEnum = enum_namespace() -floor = getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -userdefined = getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpaceTypeEnum = enum_namespace() -space = getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -berth = getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) -userdefined = getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSpatialZoneTypeEnum = enum_namespace() -construction = getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -reservation = getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -interference = getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) -userdefined = getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) +interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairFlightTypeEnum = enum_namespace() -straight = getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStairTypeEnum = enum_namespace() -straight_run_stair = getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -ladder = getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -userdefined = getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStateEnum = enum_namespace() -readwrite = getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -pavementsurfacemarking = getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -symbolmarking = getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -nonskidsurfacing = getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -rumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -transverserumblestrip = getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -userdefined = getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) +linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) +pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) +symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) +nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) +rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) +transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', 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) -selectorswitch = getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -relay = getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -start_and_stop_equipment = getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -userdefined = getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) +start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -subrack = getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -userdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -pressurevessel = getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -oilretentiontray = getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -userdefined = getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskTypeEnum = enum_namespace() -attendance = getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = getattr(IfcTaskTypeEnum, 'DISPOSAL', 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) -userdefined = getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTendonConduitTypeEnum = enum_namespace() -duct = getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTextPath = enum_namespace() -left = getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = getattr(IfcTextPath, 'UP', INDETERMINATE) -down = getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = express_getattr(IfcTextPath, 'DOWN', 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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrackElementTypeEnum = enum_namespace() -trackendofalignment = getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -blockingdevice = getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -vehiclestop = getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -sleeper = getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -half_set_of_blades = getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -speedregulator = getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -derailer = getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -userdefined = getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) +blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) +vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) +sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) +half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) +speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) +derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) +frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) +userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransformerTypeEnum = enum_namespace() -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) -chopper = getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) +combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransitionCode = enum_namespace() -discontinuous = getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) IfcTransportElementFixedTypeEnum = enum_namespace() -elevator = getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -haulinggear = getattr(IfcTransportElementFixedTypeEnum, 'HAULINGGEAR', INDETERMINATE) -userdefined = getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = express_getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +craneway = express_getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +haulinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'HAULINGGEAR', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTransportElementNonFixedTypeEnum = enum_namespace() -vehicle = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) -vehicletracked = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -rollingstock = getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehiclewheeled = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -vehicleair = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) -cargo = getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) -vehiclemarine = getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -userdefined = getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +vehicle = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) +vehicletracked = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) +rollingstock = express_getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) +vehiclewheeled = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) +vehicleair = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) +cargo = express_getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) +vehiclemarine = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -combined = getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -basestationcontroller = getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) -userdefined = getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) +basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) -drawoffcock = getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', 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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWallTypeEnum = enum_namespace() -movable = getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -wavewall = getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowPanelPositionEnum = enum_namespace() -left = getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) +high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) +steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) +wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) +aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) +plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) +other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowStyleOperationEnum = enum_namespace() -single_panel = getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypeEnum = enum_namespace() -window = getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_RC4', *args, **kwargs) @@ -5164,7 +5171,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -5245,7 +5252,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -5254,7 +5261,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -5263,7 +5270,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -5362,7 +5369,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -5371,7 +5378,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -5380,7 +5387,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -5389,8 +5396,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -5399,8 +5406,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -5409,8 +5416,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -5419,8 +5426,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -5429,8 +5436,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -5439,7 +5446,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc4.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc4.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -5448,8 +5455,8 @@ class IfcAdvancedBrepWithVoids_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_rc4.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3_rc4.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -5458,7 +5465,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc4.ifcelementarysurface', 'ifc4x3_rc4.ifcsweptsurface', 'ifc4x3_rc4.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc4.ifcelementarysurface', 'ifc4x3_rc4.ifcsweptsurface', 'ifc4x3_rc4.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -5467,7 +5474,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc4.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_rc4.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc4.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_rc4.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -5476,7 +5483,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc4.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_rc4.ifcline', 'ifc4x3_rc4.ifcconic', 'ifc4x3_rc4.ifcpolyline', 'ifc4x3_rc4.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_rc4.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3_rc4.ifcline', 'ifc4x3_rc4.ifcconic', 'ifc4x3_rc4.ifcpolyline', 'ifc4x3_rc4.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -5485,8 +5492,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -5495,8 +5502,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -5505,8 +5512,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -5515,8 +5522,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -5525,8 +5532,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -5535,8 +5542,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -5545,8 +5552,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -5555,8 +5562,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -5565,8 +5572,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -5575,8 +5582,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -5585,8 +5592,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -5595,8 +5602,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -5605,8 +5612,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5616,8 +5623,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5626,7 +5633,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_rc4.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5636,7 +5643,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_rc4.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5646,7 +5653,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x3_rc4.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x3_rc4.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5655,8 +5662,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5665,7 +5672,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5674,8 +5681,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5684,7 +5691,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x3_rc4.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5694,9 +5701,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5706,9 +5713,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -5718,9 +5725,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5730,9 +5737,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5742,8 +5749,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5752,8 +5759,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5762,8 +5769,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5772,8 +5779,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5782,7 +5789,7 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIsCP: SCOPE = 'entity' @@ -5791,10 +5798,10 @@ class IfcAxis1Placement_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc4.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc4.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_RefDirIs2D: @@ -5804,8 +5811,8 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIs2D: SCOPE = 'entity' @@ -5814,7 +5821,7 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIsCP: SCOPE = 'entity' @@ -5823,10 +5830,10 @@ class IfcAxis2Placement2D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc4.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc4.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_LocationIs3D: @@ -5836,7 +5843,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisIs3D: SCOPE = 'entity' @@ -5845,8 +5852,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5855,8 +5862,8 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5865,9 +5872,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_AxisAndRefDirProvision: SCOPE = 'entity' @@ -5876,8 +5883,8 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False class IfcAxis2Placement3D_LocationIsCP: @@ -5887,11 +5894,11 @@ class IfcAxis2Placement3D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_rc4.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc4.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcAxis2PlacementLinear_WR1: @@ -5901,7 +5908,7 @@ class IfcAxis2PlacementLinear_WR1: @staticmethod def __call__(self): - assert ('ifc4x3_rc4.ifcpointbydistanceexpression' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_rc4.ifcpointbydistanceexpression' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2PlacementLinear_WR2: SCOPE = 'entity' @@ -5910,9 +5917,9 @@ class IfcAxis2PlacementLinear_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcBSplineCurve_SameDim: SCOPE = 'entity' @@ -5921,16 +5928,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5940,11 +5947,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5954,26 +5961,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5983,10 +5990,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5995,10 +6002,10 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False class IfcBSplineSurfaceWithKnots_CorrespondingULists: SCOPE = 'entity' @@ -6007,8 +6014,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -6018,16 +6025,16 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -6037,8 +6044,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6047,8 +6054,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -6057,7 +6064,7 @@ class IfcBeamStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6066,8 +6073,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -6076,8 +6083,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -6086,8 +6093,8 @@ class IfcBearing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6096,8 +6103,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_SupportedRasterFormat: SCOPE = 'entity' @@ -6106,7 +6113,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -6115,7 +6122,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBoiler_CorrectPredefinedType: @@ -6125,8 +6132,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6135,8 +6142,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6145,8 +6152,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -6155,7 +6162,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x3_rc4.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x3_rc4.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x3_rc4.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -6165,7 +6172,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x3_rc4.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -6175,7 +6182,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanResult_SameDim: @@ -6185,9 +6192,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_FirstOperandClosed: SCOPE = 'entity' @@ -6196,8 +6203,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x3_rc4.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x3_rc4.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -6206,12 +6213,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x3_rc4.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x3_rc4.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -6220,7 +6227,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -6232,7 +6239,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x3_rc4.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x3_rc4.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBridge_CorrectPredefinedType: SCOPE = 'entity' @@ -6241,8 +6248,8 @@ class IfcBridge_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -6251,8 +6258,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -6261,8 +6268,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -6271,8 +6278,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -6281,7 +6288,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -6290,8 +6297,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -6300,8 +6307,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6310,8 +6317,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuiltElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -6320,7 +6327,7 @@ class IfcBuiltElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuiltSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6329,8 +6336,8 @@ class IfcBuiltSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -6339,8 +6346,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -6349,8 +6356,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6359,8 +6366,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -6369,8 +6376,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -6380,10 +6387,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -6393,9 +6400,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -6405,8 +6412,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6415,8 +6422,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6425,8 +6432,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6435,8 +6442,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6445,8 +6452,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6455,8 +6462,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6465,8 +6472,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6475,8 +6482,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6485,8 +6492,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6495,8 +6502,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6505,8 +6512,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6515,8 +6522,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -6525,8 +6532,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6535,8 +6542,8 @@ class IfcCaissonFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -6545,8 +6552,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -6555,11 +6562,11 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPoint_Dim(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) return hiindex(coordinates) def calc_IfcCartesianPointList_Dim(self): @@ -6572,16 +6579,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -6590,7 +6597,7 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -6599,7 +6606,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -6608,10 +6615,10 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False def calc_IfcCartesianTransformationOperator2D_U(self): - return IfcBaseAxis(2, getattr(self, 'Axis1', INDETERMINATE), getattr(self, 'Axis2', INDETERMINATE), None) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6620,12 +6627,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -6634,7 +6641,7 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(self, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -6643,7 +6650,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -6652,7 +6659,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -6661,12 +6668,12 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, '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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6675,7 +6682,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6685,16 +6692,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6703,8 +6710,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6713,8 +6720,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6723,8 +6730,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6733,8 +6740,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6743,8 +6750,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6753,8 +6760,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6763,8 +6770,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6773,8 +6780,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6783,8 +6790,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6793,8 +6800,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6803,8 +6810,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6813,8 +6820,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -6823,7 +6830,7 @@ class IfcColumnStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6832,8 +6839,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6842,8 +6849,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6852,8 +6859,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6862,8 +6869,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6872,7 +6879,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6882,7 +6889,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6892,7 +6899,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6902,7 +6909,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcCompositeCurve_CurveContinuous: @@ -6912,9 +6919,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6923,17 +6930,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6942,7 +6949,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6955,12 +6962,12 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x3_rc4.ifcboundedcurve' in typeof(parentcurve)) is not False def calc_IfcCompositeCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCompositeProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -6969,8 +6976,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6979,7 +6986,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x3_rc4.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6989,8 +6996,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6999,8 +7006,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7009,8 +7016,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -7019,8 +7026,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -7029,8 +7036,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -7039,8 +7046,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -7049,8 +7056,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7059,8 +7066,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7069,8 +7076,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7079,8 +7086,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7089,8 +7096,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7099,8 +7106,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7109,8 +7116,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -7119,8 +7126,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -7129,8 +7136,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7139,8 +7146,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7149,8 +7156,8 @@ class IfcConveyorSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7159,8 +7166,8 @@ class IfcConveyorSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcconveyorsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcconveyorsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcConveyorSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7169,8 +7176,8 @@ class IfcConveyorSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -7179,8 +7186,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -7189,8 +7196,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -7199,8 +7206,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -7209,8 +7216,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -7219,8 +7226,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7229,8 +7236,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCourse_CorrectPredefinedType: SCOPE = 'entity' @@ -7239,8 +7246,8 @@ class IfcCourse_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCourse_CorrectTypeAssigned: SCOPE = 'entity' @@ -7249,8 +7256,8 @@ class IfcCourse_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccoursetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccoursetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCourseType_CorrectPredefinedType: SCOPE = 'entity' @@ -7259,8 +7266,8 @@ class IfcCourseType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -7269,8 +7276,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -7279,8 +7286,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -7289,8 +7296,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7299,8 +7306,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7309,8 +7316,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -7322,8 +7329,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -7332,8 +7339,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -7342,15 +7349,15 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) def calc_IfcCurveSegment_Dim(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) - return getattr(parentcurve, 'Dim', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) + return express_getattr(parentcurve, 'Dim', INDETERMINATE) class IfcCurveStyle_MeasureOfWidth: SCOPE = 'entity' @@ -7359,7 +7366,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x3_rc4.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x3_rc4.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyle_IdentifiableCurveStyle: @@ -7369,9 +7376,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -7381,7 +7388,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -7391,8 +7398,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -7401,8 +7408,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -7411,8 +7418,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -7421,8 +7428,8 @@ class IfcDeepFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -7431,8 +7438,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -7441,8 +7448,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -7451,11 +7458,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -7465,11 +7472,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @@ -7479,9 +7486,9 @@ class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_rc4.ifcconic', 'ifc4x3_rc4.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcDiscreteAccessory_CorrectPredefinedType: @@ -7491,8 +7498,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -7501,8 +7508,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -7511,8 +7518,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7521,8 +7528,8 @@ class IfcDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7531,8 +7538,8 @@ class IfcDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7541,8 +7548,8 @@ class IfcDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7551,8 +7558,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7561,8 +7568,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7571,8 +7578,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -7581,8 +7588,8 @@ class IfcDistributionSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -7591,8 +7598,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectStyleAssigned: @@ -7602,8 +7609,8 @@ class IfcDoor_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoor_CorrectPredefinedType: SCOPE = 'entity' @@ -7612,8 +7619,8 @@ class IfcDoor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDoor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7622,8 +7629,8 @@ class IfcDoor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -7632,8 +7639,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -7643,8 +7650,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -7654,8 +7661,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -7665,8 +7672,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -7676,7 +7683,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc4.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc4.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -7685,7 +7692,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc4.ifcdoorstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc4.ifcdoorstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7694,8 +7701,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -7704,7 +7711,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -7713,7 +7720,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -7722,8 +7729,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7732,8 +7739,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7742,8 +7749,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7752,8 +7759,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7762,8 +7769,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7772,8 +7779,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -7782,8 +7789,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -7792,8 +7799,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7802,8 +7809,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEarthworksCut_CorrectPredefinedType: SCOPE = 'entity' @@ -7812,8 +7819,8 @@ class IfcEarthworksCut_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEarthworksFill_CorrectPredefinedType: SCOPE = 'entity' @@ -7822,8 +7829,8 @@ class IfcEarthworksFill_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7832,9 +7839,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7846,7 +7853,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7856,8 +7863,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7866,8 +7873,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7876,8 +7883,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7886,8 +7893,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7896,8 +7903,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7906,8 +7913,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7916,8 +7923,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7926,8 +7933,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7936,8 +7943,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7946,8 +7953,8 @@ class IfcElectricFlowTreatmentDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7956,8 +7963,8 @@ class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricflowtreatmentdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricflowtreatmentdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7966,8 +7973,8 @@ class IfcElectricFlowTreatmentDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7976,8 +7983,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7986,8 +7993,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7996,8 +8003,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -8006,8 +8013,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8016,8 +8023,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8026,8 +8033,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -8036,8 +8043,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -8046,8 +8053,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -8056,8 +8063,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -8066,8 +8073,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -8076,8 +8083,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -8086,8 +8093,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -8096,7 +8103,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -8106,8 +8113,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -8116,8 +8123,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -8126,8 +8133,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -8136,8 +8143,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -8146,8 +8153,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8156,8 +8163,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -8166,8 +8173,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -8176,8 +8183,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8186,8 +8193,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -8196,8 +8203,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -8206,9 +8213,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -8217,8 +8224,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -8227,9 +8234,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -8238,9 +8245,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -8250,7 +8257,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -8259,7 +8266,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -8268,7 +8275,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x3_rc4.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -8281,8 +8288,8 @@ class IfcFacilityPart_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert ((predefinedtype != getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype != getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)) or (predefinedtype != getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE))) or ((predefinedtype == getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)) or (predefinedtype == getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE))) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert ((predefinedtype != express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype != express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)) or (predefinedtype != express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE))) or ((predefinedtype == express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE)) or (predefinedtype == express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE))) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectPredefinedType: SCOPE = 'entity' @@ -8291,8 +8298,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -8301,8 +8308,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -8311,8 +8318,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -8321,8 +8328,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8331,8 +8338,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8341,8 +8348,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElement_NotContained: SCOPE = 'entity' @@ -8351,7 +8358,7 @@ class IfcFeatureElement_NotContained: @staticmethod def __call__(self): - containedinstructure = getattr(self, 'ContainedInStructure', INDETERMINATE) + containedinstructure = express_getattr(self, 'ContainedInStructure', INDETERMINATE) assert (sizeof(containedinstructure) == 0) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: @@ -8361,7 +8368,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -8370,7 +8377,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -8379,7 +8386,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc4.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc4.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -8388,7 +8395,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc4.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_rc4.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -8397,7 +8404,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -8406,8 +8413,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -8416,8 +8423,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -8426,8 +8433,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8436,8 +8443,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8446,8 +8453,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8456,8 +8463,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8466,8 +8473,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8476,8 +8483,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectPredefinedType: SCOPE = 'entity' @@ -8486,8 +8493,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -8496,8 +8503,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8506,8 +8513,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -8516,8 +8523,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8526,8 +8533,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8536,8 +8543,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -8546,8 +8553,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8556,8 +8563,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8566,8 +8573,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -8576,8 +8583,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8586,8 +8593,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8596,8 +8603,8 @@ class IfcFurnitureType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -8606,8 +8613,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -8616,8 +8623,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -8626,8 +8633,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -8636,7 +8643,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_rc4.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_rc4.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -8645,8 +8652,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -8655,7 +8662,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x3_rc4.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -8665,9 +8672,9 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedtargetview))) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -8676,23 +8683,23 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False def calc_IfcGeometricRepresentationSubContext_WorldCoordinateSystem(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -8701,12 +8708,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) def calc_IfcGradientCurve_RelativeElevation(self): return IfcGradient(self) @@ -8718,8 +8725,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -8728,9 +8735,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -8743,8 +8750,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -8753,8 +8760,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8763,8 +8770,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -8773,8 +8780,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -8783,8 +8790,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -8793,8 +8800,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -8803,8 +8810,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -8814,8 +8821,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcIShapeProfileDef_ValidFilletRadius: @@ -8825,11 +8832,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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 IfcImpactProtectionDevice_CorrectPredefinedType: @@ -8839,8 +8846,8 @@ class IfcImpactProtectionDevice_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or (predefinedtype != getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or (predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcImpactProtectionDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8849,8 +8856,8 @@ class IfcImpactProtectionDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcimpactprotectiondevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcimpactprotectiondevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcImpactProtectionDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8859,8 +8866,8 @@ class IfcImpactProtectionDeviceType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert ((predefinedtype != getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert ((predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcIndexedPolyCurve_Consecutive: SCOPE = 'entity' @@ -8869,7 +8876,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -8879,8 +8886,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8889,8 +8896,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8899,8 +8906,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8909,7 +8916,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8918,7 +8925,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8927,8 +8934,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8937,8 +8944,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8947,8 +8954,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8957,9 +8964,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8969,8 +8976,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8979,8 +8986,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -8989,8 +8996,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -8999,8 +9006,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -9009,8 +9016,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -9019,8 +9026,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -9029,8 +9036,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9039,8 +9046,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -9049,9 +9056,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLiquidTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9060,8 +9067,8 @@ class IfcLiquidTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLiquidTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9070,8 +9077,8 @@ class IfcLiquidTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcliquidterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcliquidterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLiquidTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9080,8 +9087,8 @@ class IfcLiquidTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -9090,8 +9097,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMarineFacility_CorrectPredefinedType: @@ -9101,8 +9108,8 @@ class IfcMarineFacility_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: SCOPE = 'entity' @@ -9111,7 +9118,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_rc4.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -9121,7 +9128,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -9134,7 +9141,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -9144,8 +9151,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -9154,8 +9161,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -9164,8 +9171,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9174,8 +9181,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9184,8 +9191,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9194,8 +9201,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -9204,8 +9211,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -9214,8 +9221,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberStandardCase_HasMaterialProfileSetUsage: SCOPE = 'entity' @@ -9224,7 +9231,7 @@ class IfcMemberStandardCase_HasMaterialProfileSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmaterialprofilesetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmaterialprofilesetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -9233,8 +9240,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -9246,8 +9253,8 @@ class IfcMobileTelecommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -9256,8 +9263,8 @@ class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmobiletelecommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmobiletelecommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9266,8 +9273,8 @@ class IfcMobileTelecommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9276,8 +9283,8 @@ class IfcMooringDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9286,8 +9293,8 @@ class IfcMooringDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmooringdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmooringdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMooringDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9296,8 +9303,8 @@ class IfcMooringDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectPredefinedType: SCOPE = 'entity' @@ -9306,8 +9313,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -9316,8 +9323,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -9326,8 +9333,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -9336,7 +9343,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcNavigationElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9345,8 +9352,8 @@ class IfcNavigationElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcNavigationElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9355,8 +9362,8 @@ class IfcNavigationElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcnavigationelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcnavigationelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcNavigationElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9365,8 +9372,8 @@ class IfcNavigationElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -9375,7 +9382,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -9385,8 +9392,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -9395,8 +9402,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -9405,8 +9412,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -9415,8 +9422,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOpenCrossProfileDef_CorrectProfileType: SCOPE = 'entity' @@ -9425,7 +9432,7 @@ class IfcOpenCrossProfileDef_CorrectProfileType: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: SCOPE = 'entity' @@ -9434,8 +9441,8 @@ class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: @staticmethod def __call__(self): - widths = getattr(self, 'Widths', INDETERMINATE) - slopes = getattr(self, 'Slopes', INDETERMINATE) + widths = express_getattr(self, 'Widths', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) assert (sizeof(slopes) == sizeof(widths)) is not False class IfcOpenCrossProfileDef_CorrespondingTags: @@ -9445,8 +9452,8 @@ class IfcOpenCrossProfileDef_CorrespondingTags: @staticmethod def __call__(self): - slopes = getattr(self, 'Slopes', INDETERMINATE) - tags = getattr(self, 'Tags', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) + tags = express_getattr(self, 'Tags', INDETERMINATE) assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False class IfcOpeningElement_CorrectPredefinedType: @@ -9456,8 +9463,8 @@ class IfcOpeningElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -9466,18 +9473,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x3_rc4.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -9486,8 +9493,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -9496,8 +9503,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -9506,8 +9513,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -9516,9 +9523,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -9536,8 +9543,8 @@ class IfcPavement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPavement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9546,8 +9553,8 @@ class IfcPavement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpavementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpavementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPavementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9556,8 +9563,8 @@ class IfcPavementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPcurve_DimIs2D: SCOPE = 'entity' @@ -9566,8 +9573,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -9576,9 +9583,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -9588,9 +9595,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -9600,7 +9607,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -9610,7 +9617,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -9620,8 +9627,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -9630,8 +9637,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -9640,8 +9647,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -9650,8 +9657,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -9660,8 +9667,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9670,8 +9677,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -9680,8 +9687,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -9690,8 +9697,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -9700,8 +9707,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -9710,7 +9717,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -9720,7 +9727,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -9730,7 +9737,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_SizeOfPixelList: @@ -9740,9 +9747,9 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_getattr(self, 'Pixel', INDETERMINATE) assert (sizeof(pixel) == width * height) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -9752,12 +9759,12 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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 def calc_IfcPlacement_Dim(self): - location = getattr(self, 'Location', INDETERMINATE) - return getattr(location, 'Dim', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -9766,8 +9773,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -9776,8 +9783,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -9786,7 +9793,7 @@ class IfcPlateStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -9795,20 +9802,20 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPointByDistanceExpression_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnCurve_Dim(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - return getattr(basiscurve, 'Dim', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + return express_getattr(basiscurve, 'Dim', INDETERMINATE) def calc_IfcPointOnSurface_Dim(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) - return getattr(basissurface, 'Dim', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + return express_getattr(basissurface, 'Dim', INDETERMINATE) class IfcPolyLoop_AllPointsSameDim: SCOPE = 'entity' @@ -9817,8 +9824,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -9827,8 +9834,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -9837,7 +9844,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x3_rc4.ifcpolyline', 'ifc4x3_rc4.ifccompositecurve']) == 1) is not False class IfcPolyline_SameDim: @@ -9847,8 +9854,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolynomialCurve_ValidCoefficients: SCOPE = 'entity' @@ -9857,9 +9864,9 @@ class IfcPolynomialCurve_ValidCoefficients: @staticmethod def __call__(self): - coefficientsx = getattr(self, 'CoefficientsX', INDETERMINATE) - coefficientsy = getattr(self, 'CoefficientsY', INDETERMINATE) - coefficientsz = getattr(self, 'CoefficientsZ', INDETERMINATE) + coefficientsx = express_getattr(self, 'CoefficientsX', INDETERMINATE) + coefficientsy = express_getattr(self, 'CoefficientsY', INDETERMINATE) + coefficientsz = express_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 IfcPolynomialCurve_CorrectPositionDim: @@ -9869,9 +9876,9 @@ class IfcPolynomialCurve_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 + position = express_getattr(self, 'Position', INDETERMINATE) + coefficientsz = express_getattr(self, 'CoefficientsZ', INDETERMINATE) + assert (express_getattr(position, 'Dim', INDETERMINATE) == 2 and (not exists(coefficientsz)) or express_getattr(position, 'Dim', INDETERMINATE) == 3) is not False class IfcPositioningElement_HasPlacement: SCOPE = 'entity' @@ -9880,7 +9887,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -9889,13 +9896,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -9905,7 +9912,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_rc4.ifcshaperepresentation', 'ifc4x3_rc4.ifcgeometricrepresentationitem', 'ifc4x3_rc4.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -9915,7 +9922,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_rc4.ifcgeometricrepresentationitem', 'ifc4x3_rc4.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_HasName: @@ -9925,7 +9932,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedure_CorrectPredefinedType: SCOPE = 'entity' @@ -9934,8 +9941,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9944,8 +9951,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -9954,9 +9961,9 @@ class IfcProduct_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_rc4.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3_rc4.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -9965,7 +9972,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_rc4.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_HasName: @@ -9975,7 +9982,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_CorrectContext: SCOPE = 'entity' @@ -9984,7 +9991,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_rc4.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_rc4.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -9993,7 +10000,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -10002,8 +10009,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcProjectionElement_CorrectPredefinedType: SCOPE = 'entity' @@ -10012,8 +10019,8 @@ class IfcProjectionElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: SCOPE = 'entity' @@ -10022,8 +10029,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -10033,8 +10040,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: @@ -10044,8 +10051,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -10055,8 +10062,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -10066,9 +10073,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -10077,7 +10084,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -10086,7 +10093,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -10095,7 +10102,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -10104,7 +10111,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -10114,7 +10121,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -10123,7 +10130,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -10133,8 +10140,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -10144,8 +10151,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -10154,8 +10161,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10164,8 +10171,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10174,8 +10181,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -10184,8 +10191,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -10194,8 +10201,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -10204,8 +10211,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10214,8 +10221,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProxy_WR1: SCOPE = 'entity' @@ -10224,7 +10231,7 @@ class IfcProxy_WR1: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -10233,8 +10240,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -10243,8 +10250,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -10253,8 +10260,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -10263,7 +10270,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -10272,7 +10279,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -10282,7 +10289,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0.0) is not False class IfcQuantityLength_WR21: @@ -10292,7 +10299,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -10301,7 +10308,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -10311,7 +10318,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -10320,7 +10327,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -10330,7 +10337,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -10339,7 +10346,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -10349,7 +10356,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -10358,7 +10365,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRail_CorrectPredefinedType: @@ -10368,8 +10375,8 @@ class IfcRail_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRail_CorrectTypeAssigned: SCOPE = 'entity' @@ -10378,8 +10385,8 @@ class IfcRail_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcrailtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcrailtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailType_CorrectPredefinedType: SCOPE = 'entity' @@ -10388,8 +10395,8 @@ class IfcRailType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailing_CorrectPredefinedType: SCOPE = 'entity' @@ -10398,8 +10405,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -10408,8 +10415,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -10418,8 +10425,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailway_HasObjectType: SCOPE = 'entity' @@ -10428,8 +10435,8 @@ class IfcRailway_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -10438,8 +10445,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -10448,8 +10455,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10458,8 +10465,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10468,8 +10475,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10478,8 +10485,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -10488,8 +10495,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -10498,8 +10505,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -10511,8 +10518,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -10521,8 +10528,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -10534,9 +10541,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidWallThickness: @@ -10546,8 +10553,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangleHollowProfileDef_ValidInnerRadius: SCOPE = 'entity' @@ -10556,9 +10563,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -10567,8 +10574,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -10577,8 +10584,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -10588,8 +10595,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -10599,10 +10606,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x3_rc4.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x3_rc4.ifcplane' in typeof(basissurface)) or 'ifc4x3_rc4.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -10612,9 +10619,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcedSoil_CorrectPredefinedType: @@ -10624,8 +10631,8 @@ class IfcReinforcedSoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectPredefinedType: SCOPE = 'entity' @@ -10634,8 +10641,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -10644,8 +10651,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_CorrectPredefinedType: SCOPE = 'entity' @@ -10654,8 +10661,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10664,8 +10671,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMesh_CorrectPredefinedType: @@ -10675,8 +10682,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -10685,8 +10692,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_CorrectPredefinedType: SCOPE = 'entity' @@ -10695,8 +10702,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10705,8 +10712,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcRelAggregates_NoSelfReference: @@ -10716,8 +10723,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssigns_WR1: @@ -10727,8 +10734,8 @@ class IfcRelAssigns_WR1: @staticmethod def __call__(self): - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) - relatedobjectstype = getattr(self, 'RelatedObjectsType', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) + relatedobjectstype = express_getattr(self, 'RelatedObjectsType', INDETERMINATE) assert IfcCorrectObjectAssignment(relatedobjectstype, relatedobjects) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -10738,8 +10745,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -10748,8 +10755,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -10758,8 +10765,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -10768,8 +10775,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -10778,8 +10785,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -10788,8 +10795,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -10798,7 +10805,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc4.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_rc4.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc4.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_rc4.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -10807,7 +10814,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_rc4.ifcelement', 'ifc4x3_rc4.ifcelementtype', 'ifc4x3_rc4.ifcwindowstyle', 'ifc4x3_rc4.ifcdoorstyle', 'ifc4x3_rc4.ifcstructuralmember', 'ifc4x3_rc4.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_rc4.ifcelement', 'ifc4x3_rc4.ifcelementtype', 'ifc4x3_rc4.ifcwindowstyle', 'ifc4x3_rc4.ifcdoorstyle', 'ifc4x3_rc4.ifcstructuralmember', 'ifc4x3_rc4.ifcport']) == 0]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -10816,8 +10823,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @@ -10827,7 +10834,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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 IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -10837,7 +10844,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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 IfcRelConnectsPorts_NoSelfReference: @@ -10847,8 +10854,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -10858,7 +10865,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_rc4.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -10868,8 +10875,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -10879,7 +10886,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc4.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_rc4.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -10888,8 +10895,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -10899,8 +10906,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -10910,8 +10917,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -10921,7 +10928,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_rc4.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x3_rc4.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -10931,8 +10938,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -10942,9 +10949,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -10953,9 +10960,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_rc4.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_rc4.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_rc4.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_rc4.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_rc4.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_rc4.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -10964,7 +10971,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -10974,7 +10981,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x3_rc4.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisStartInXY: @@ -10984,8 +10991,8 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (express_getitem(getattr(getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Location', INDETERMINATE), 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: SCOPE = 'entity' @@ -10994,12 +11001,12 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', 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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -11008,7 +11015,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoad_HasObjectType: SCOPE = 'entity' @@ -11017,8 +11024,8 @@ class IfcRoad_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -11027,8 +11034,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -11037,8 +11044,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -11047,8 +11054,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -11057,11 +11064,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSiUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSiUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11070,8 +11077,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11080,8 +11087,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11090,8 +11097,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -11100,7 +11107,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -11109,7 +11116,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -11118,8 +11125,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -11128,8 +11135,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -11138,7 +11145,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -11148,8 +11155,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -11159,8 +11166,8 @@ class IfcSectionedSolidHorizontal_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11169,8 +11176,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_ConsistentProfileTypes: @@ -11180,8 +11187,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_SpineCurveDim: SCOPE = 'entity' @@ -11190,8 +11197,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -11203,8 +11210,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -11213,8 +11220,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11223,8 +11230,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11233,8 +11240,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11243,8 +11250,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11253,8 +11260,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -11263,8 +11270,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -11273,7 +11280,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x3_rc4.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x3_rc4.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -11282,7 +11289,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x3_rc4.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x3_rc4.ifcvertexpoint', 'ifc4x3_rc4.ifcedgecurve', 'ifc4x3_rc4.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False class IfcShapeRepresentation_HasRepresentationType: @@ -11292,7 +11299,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -11301,7 +11308,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -11310,7 +11317,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): return 3 @@ -11322,8 +11329,8 @@ class IfcSign_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSign_CorrectTypeAssigned: SCOPE = 'entity' @@ -11332,8 +11339,8 @@ class IfcSign_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsigntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsigntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignType_CorrectPredefinedType: SCOPE = 'entity' @@ -11342,8 +11349,8 @@ class IfcSignType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSignal_CorrectPredefinedType: SCOPE = 'entity' @@ -11352,8 +11359,8 @@ class IfcSignal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSignal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11362,8 +11369,8 @@ class IfcSignal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsignaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsignaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11372,8 +11379,8 @@ class IfcSignalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSlab_CorrectPredefinedType: SCOPE = 'entity' @@ -11382,8 +11389,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -11392,8 +11399,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabElementedCase_HasDecomposition: SCOPE = 'entity' @@ -11402,7 +11409,7 @@ class IfcSlabElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcSlabStandardCase_HasMaterialLayerSetusage: SCOPE = 'entity' @@ -11411,7 +11418,7 @@ class IfcSlabStandardCase_HasMaterialLayerSetusage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -11420,8 +11427,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11430,8 +11437,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11440,8 +11447,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11450,8 +11457,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -11463,8 +11470,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -11473,8 +11480,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -11483,8 +11490,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -11493,8 +11500,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -11503,8 +11510,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11513,8 +11520,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -11523,7 +11530,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_rc4.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_rc4.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_rc4.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_rc4.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -11532,8 +11539,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -11542,8 +11549,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -11552,8 +11559,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11562,8 +11569,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11572,8 +11579,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11582,8 +11589,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -11592,8 +11599,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -11602,8 +11609,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -11612,8 +11619,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -11622,8 +11629,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -11632,8 +11639,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -11642,8 +11649,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_HasObjectType: SCOPE = 'entity' @@ -11652,8 +11659,8 @@ class IfcStructuralAnalysisModel_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralAnalysisModel_CorrectPredefinedType: SCOPE = 'entity' @@ -11662,8 +11669,8 @@ class IfcStructuralAnalysisModel_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11672,8 +11679,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -11682,8 +11689,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -11692,8 +11699,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -11702,8 +11709,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -11712,8 +11719,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -11722,8 +11729,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -11732,7 +11739,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc4.ifcstructuralloadlinearforce', 'ifc4x3_rc4.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc4.ifcstructuralloadlinearforce', 'ifc4x3_rc4.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -11741,7 +11748,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -11750,7 +11757,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -11759,8 +11766,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -11770,10 +11777,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -11782,7 +11789,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc4.ifcstructuralloadplanarforce', 'ifc4x3_rc4.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc4.ifcstructuralloadplanarforce', 'ifc4x3_rc4.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -11791,7 +11798,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -11800,7 +11807,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc4.ifcstructuralloadsingleforce', 'ifc4x3_rc4.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc4.ifcstructuralloadsingleforce', 'ifc4x3_rc4.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -11809,7 +11816,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_rc4.ifcstructuralloadsingleforce', 'ifc4x3_rc4.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_rc4.ifcstructuralloadsingleforce', 'ifc4x3_rc4.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -11818,8 +11825,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11828,8 +11835,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -11838,8 +11845,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -11848,8 +11855,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -11858,8 +11865,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -11868,7 +11875,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x3_rc4.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -11878,7 +11885,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc4.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc4.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -11887,8 +11894,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11897,8 +11904,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -11910,8 +11917,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -11920,7 +11927,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x3_rc4.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -11933,8 +11940,8 @@ class IfcSurfaceFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -11943,17 +11950,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: SCOPE = 'entity' @@ -11962,9 +11969,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceReinforcementArea_NonnegativeArea1: @@ -11974,7 +11981,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -11984,7 +11991,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -11994,7 +12001,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceStyle_MaxOneShading: @@ -12004,7 +12011,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -12013,7 +12020,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -12022,7 +12029,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -12031,7 +12038,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneExtDefined: SCOPE = 'entity' @@ -12040,7 +12047,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_rc4.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -12049,8 +12056,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixDim: SCOPE = 'entity' @@ -12059,8 +12066,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -12069,8 +12076,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolid_DirectrixBounded: @@ -12080,9 +12087,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_rc4.ifcconic', 'ifc4x3_rc4.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -12092,8 +12099,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -12102,7 +12109,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x3_rc4.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_rc4.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x3_rc4.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_rc4.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -12111,8 +12118,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -12121,8 +12128,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -12131,8 +12138,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -12141,8 +12148,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12151,8 +12158,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12161,8 +12168,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12171,8 +12178,8 @@ class IfcSystemFurnitureElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12181,8 +12188,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -12192,8 +12199,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -12203,8 +12210,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -12213,20 +12220,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -12235,8 +12242,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -12245,8 +12252,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -12255,8 +12262,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -12265,7 +12272,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -12274,8 +12281,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -12284,8 +12291,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -12294,12 +12301,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -12309,8 +12316,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -12319,8 +12326,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -12329,8 +12336,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -12339,8 +12346,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12349,8 +12356,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -12359,8 +12366,8 @@ class IfcTendonConduit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -12369,8 +12376,8 @@ class IfcTendonConduit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -12379,8 +12386,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -12389,8 +12396,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -12402,7 +12409,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x3_rc4.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -12412,7 +12419,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x3_rc4.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x3_rc4.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -12421,7 +12428,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc4.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_rc4.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -12430,7 +12437,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -12439,7 +12446,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -12448,8 +12455,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTrackElement_CorrectPredefinedType: @@ -12459,8 +12466,8 @@ class IfcTrackElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTrackElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12469,8 +12476,8 @@ class IfcTrackElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctrackelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctrackelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTrackElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12479,8 +12486,8 @@ class IfcTrackElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransformer_CorrectPredefinedType: SCOPE = 'entity' @@ -12489,8 +12496,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -12499,8 +12506,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctranformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctranformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -12509,8 +12516,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12519,8 +12526,8 @@ class IfcTransportElement_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or (predefinedtype != getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(getattr(self, 'ElementType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or (predefinedtype != express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) or ((predefinedtype == express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or predefinedtype == express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE)) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12529,8 +12536,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12539,11 +12546,11 @@ class IfcTransportElementType_CorrectPredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(getattr(self, 'ElementType', INDETERMINATE))))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and predefinedtype != express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE))))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -12553,7 +12560,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: SCOPE = 'entity' @@ -12562,7 +12569,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -12572,7 +12579,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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 IfcTrimmedCurve_NoTrimOfBoundedCurves: @@ -12582,7 +12589,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x3_rc4.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTubeBundle_CorrectPredefinedType: @@ -12592,8 +12599,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12602,8 +12609,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12612,8 +12619,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -12622,7 +12629,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -12631,7 +12638,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -12641,7 +12648,7 @@ class IfcTypeProduct_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_rc4.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x3_rc4.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12650,8 +12657,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -12661,8 +12668,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -12672,7 +12679,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -12682,8 +12689,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12692,8 +12699,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12702,8 +12709,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -12712,8 +12719,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -12722,8 +12729,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -12732,8 +12739,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -12742,8 +12749,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -12752,8 +12759,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -12762,8 +12769,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -12772,12 +12779,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -12786,8 +12793,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -12796,8 +12803,8 @@ class IfcVibrationDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -12806,8 +12813,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -12816,8 +12823,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -12826,8 +12833,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12836,8 +12843,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVoidingFeature_HasObjectType: SCOPE = 'entity' @@ -12846,8 +12853,8 @@ class IfcVoidingFeature_HasObjectType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (not exists(predefinedtype) or predefinedtype != getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(getattr(self, 'ObjectType', INDETERMINATE))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -12856,8 +12863,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -12866,8 +12873,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallElementedCase_HasDecomposition: SCOPE = 'entity' @@ -12876,7 +12883,7 @@ class IfcWallElementedCase_HasDecomposition: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False + assert (hiindex(express_getattr(self, 'IsDecomposedBy', INDETERMINATE)) > 0) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -12885,7 +12892,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_rc4.ifcrelassociates.relatedobjects') if 'ifc4x3_rc4.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_rc4.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -12894,8 +12901,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -12904,8 +12911,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -12914,8 +12921,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -12924,8 +12931,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectStyleAssigned: SCOPE = 'entity' @@ -12934,8 +12941,8 @@ class IfcWindow_CorrectStyleAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindow_CorrectPredefinedType: SCOPE = 'entity' @@ -12944,8 +12951,8 @@ class IfcWindow_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWindow_CorrectTypeAssigned: SCOPE = 'entity' @@ -12954,8 +12961,8 @@ class IfcWindow_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_rc4.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -12964,8 +12971,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -12975,8 +12982,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -12986,8 +12993,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -12997,7 +13004,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc4.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc4.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -13006,7 +13013,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc4.ifcwindowstyle' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_rc4.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or 'ifc4x3_rc4.ifcwindowstyle' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -13015,8 +13022,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -13025,8 +13032,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -13035,8 +13042,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -13045,8 +13052,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -13055,8 +13062,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -13066,19 +13073,19 @@ class IfcZone_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_rc4.ifczone' in typeof(temp) or 'ifc4x3_rc4.ifcspace' in typeof(temp) or 'ifc4x3_rc4.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x3_rc4.ifczone' in typeof(temp) or 'ifc4x3_rc4.ifcspace' in typeof(temp) or 'ifc4x3_rc4.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -13088,11 +13095,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -13106,13 +13113,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -13130,7 +13137,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -13167,11 +13174,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -13351,7 +13358,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x3_rc4.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x3_rc4.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -13362,27 +13369,27 @@ def IfcCorrectObjectAssignment(constraint, objects): count = 0 if not exists(constraint): return True - if constraint == getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): + if constraint == express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE): return True - elif constraint == getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc4.ifcproduct' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc4.ifcprocess' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc4.ifccontrol' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc4.ifcresource' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc4.ifcactor' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc4.ifcgroup' in typeof(temp)]) return count == 0 - elif constraint == getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): + elif constraint == express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE): count = sizeof([temp for temp in objects if not 'ifc4x3_rc4.ifcproject' in typeof(temp)]) return count == 0 else: @@ -13394,26 +13401,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc4.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc4.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc4.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc4.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x3_rc4.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x3_rc4.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_rc4.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) + if 'ifc4x3_rc4.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x3_rc4.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13422,21 +13429,21 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x3_rc4.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc4.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc4.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc4.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x3_rc4.ifcgradientcurve' in typeof(curve): return 3 if 'ifc4x3_rc4.ifcsegmentedreferencecurve' in typeof(curve): return 3 if 'ifc4x3_rc4.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc4.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_rc4.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x3_rc4.ifcoffsetcurve3d' in typeof(curve): @@ -13446,19 +13453,19 @@ def IfcCurveDim(curve): if 'ifc4x3_rc4.ifccurvesegment2d' in typeof(curve): return 2 if 'ifc4x3_rc4.ifcpolynomialcurve' in typeof(curve): - if not exists(getattr(curve, 'CoefficientsZ', INDETERMINATE)) and getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: + if not exists(express_getattr(curve, 'CoefficientsZ', INDETERMINATE)) and express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: return 2 return 3 if 'ifc4x3_rc4.ifcpcurve' in typeof(curve): return 3 if 'ifc4x3_rc4.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -13466,13 +13473,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSiUnit(n): @@ -13542,15 +13549,15 @@ def IfcDimensionsForSiUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -13559,36 +13566,36 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x3_rc4.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x3_rc4.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x3_rc4.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - surfs = IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - surfs = surfs * IfcGetBasisSurface(getattr(express_getitem(getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcGradient(gradientcurve): @@ -13608,9 +13615,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -13628,10 +13635,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -13642,25 +13649,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x3_rc4.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x3_rc4.ifcvector' in typeof(arg): vec.Orientation = v @@ -13672,18 +13679,18 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointListDim(pointlist): @@ -13694,32 +13701,32 @@ def IfcPointListDim(pointlist): 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(ap1, 'Location', INDETERMINATE), epsilon) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_getattr(ap1, '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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -13740,15 +13747,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x3_rc4.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -13764,71 +13771,71 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x3_rc4.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_rc4.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x3_rc4.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_rc4.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x3_rc4.ifcpoint', 'ifc4x3_rc4.ifccurve', 'ifc4x3_rc4.ifcgeometriccurveset', 'ifc4x3_rc4.ifcannotationfillarea', 'ifc4x3_rc4.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcgeometricset' in typeof(temp) or 'ifc4x3_rc4.ifcpoint' in typeof(temp) or 'ifc4x3_rc4.ifccurve' in typeof(temp) or ('ifc4x3_rc4.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcgeometriccurveset' in typeof(temp) or 'ifc4x3_rc4.ifcgeometricset' in typeof(temp) or 'ifc4x3_rc4.ifcpoint' in typeof(temp) or ('ifc4x3_rc4.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x3_rc4.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_rc4.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x3_rc4.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc4.ifctessellateditem', 'ifc4x3_rc4.ifcshellbasedsurfacemodel', 'ifc4x3_rc4.ifcfacebasedsurfacemodel', 'ifc4x3_rc4.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc4.ifctessellateditem', 'ifc4x3_rc4.ifcshellbasedsurfacemodel', 'ifc4x3_rc4.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc4.ifcextrudedareasolid', 'ifc4x3_rc4.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x3_rc4.ifcextrudedareasolidtapered', 'ifc4x3_rc4.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc4.ifcsweptareasolid', 'ifc4x3_rc4.ifcsweptdisksolid', 'ifc4x3_rc4.ifcsectionedsolidhorizontal'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc4.ifcbooleanresult', 'ifc4x3_rc4.ifccsgprimitive3d', 'ifc4x3_rc4.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x3_rc4.ifccsgsolid', 'ifc4x3_rc4.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcmappeditem' in typeof(temp)]) else: return None @@ -13836,9 +13843,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -13848,28 +13855,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x3_rc4.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x3_rc4.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x3_rc4.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x3_rc4.ifcopenshell' in typeof(temp) or 'ifc4x3_rc4.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -13880,7 +13887,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x3_rc4.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x3_rc4.ifcpropertysetdefinitionset' in typeof(definition): @@ -13893,7 +13900,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -13901,7 +13908,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x3_rc4.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -13909,41 +13916,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_rc4.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_rc4.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13951,31 +13958,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_rc4.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_rc4.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py index b607cf8b3a..ec18f39a93 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py @@ -80,6 +80,13 @@ def express_getitem(aggr, idx, default): return aggr[idx] except IndexError as e: return None + +def express_getattr(aggr, name, default): + v = getattr(aggr, name, default) + if v is None: + return default + else: + return v EXPRESS_ONE_BASED_INDEXING = 1 def typeof(inst): @@ -140,2363 +147,2363 @@ INDETERMINATE = indeterminate_type() class enum_namespace: def __getattr__(self, k): - return getattr(k, 'upper', INDETERMINATE)() + return express_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) +email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) +fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) +phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) +post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) +verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) +userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) +buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) +completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) +creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) +current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) +dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) +earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) +erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) +fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) +ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) +impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) +impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) +lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) +live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) +prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) +propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) +rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) +settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) +shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) +snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) +system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) +temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) +transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) +wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) +wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) +userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) +permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) +variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) +userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) +handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) +hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) +pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) +thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) +userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) +home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) +office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_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) +constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) +variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) +variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) +grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) +louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) +register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) +userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) +fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) +fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) +heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) +rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) +runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) +thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) +thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) +twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) +userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) +breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) +light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) +manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) +railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) +railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) +siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) +whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) +userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_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) +blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) +circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) +cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) +helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) +line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) +sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) +viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) IfcAlignmentTypeEnum = enum_namespace() -userdefined = getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) +clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) +parabolicarc = express_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) +in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) +loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) +out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) +full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) +second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) +third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) +userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcAnnotationTypeEnum = enum_namespace() -asbuiltarea = getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -asbuiltpoint = getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -assumedarea = getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -assumedline = getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -assumedpoint = getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -non_physical_signal = getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -superelevationevent = getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -widthevent = getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -userdefined = getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) +asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) +asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) +assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) +assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) +assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) +non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) +superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) +widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) +userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcArithmeticOperatorEnum = enum_namespace() -add = getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) +divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) +multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) +subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) IfcAssemblyPlaceEnum = enum_namespace() -factory = getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -site = getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -notdefined = getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) +site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) +notdefined = express_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) +amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) +camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) +communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) +display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) +microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) +player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) +projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) +receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) +recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) +speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) +switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) +telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) +tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) +userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) +elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) +hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) +parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) +polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) +unspecified = express_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) +conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) +cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) +generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) +plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) +quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) +ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) +spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) +surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) +surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) +toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) +unspecified = express_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) +beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) +cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) +diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) +edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) +girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) +hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) +hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) +joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) +lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) +piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) +spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) +t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) +userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) +disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) +elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) +guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) +pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) +rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) +roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) +spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) +userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) +greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) +greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) +includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) +includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) +lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) +lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) +notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +notincludes = express_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) +steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) +water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) +userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBooleanOperator = enum_namespace() -difference = getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) -intersection = getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -union = getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) +union = express_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) +abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) +deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) +deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) +foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) +pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) +pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) +pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) +substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) +cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) +cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) +culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) +framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) +girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) +suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) +truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) +userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) +armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) +insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) +precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) +safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) +partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) +provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) +provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) +transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) +fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) +foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) +loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) +mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) +outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) +prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) +railwayline = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE) +railwaytrack = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE) +reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) +shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) +trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) +transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) +userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcBurnerTypeEnum = enum_namespace() -userdefined = getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) +junction = express_getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE) +reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) +tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) +transition = express_getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) +cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) +cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) +cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) +catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) +conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) +dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) +userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) +fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) +junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) +transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) +cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) +conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) +contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) +coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) +fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) +fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) +opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) +stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) +wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) +well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) +userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) +deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) +modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) +nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) +heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) +watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) +userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcChimneyTypeEnum = enum_namespace() -userdefined = getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) +electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) +gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) +hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) +steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) +watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) +waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) +userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) +pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) +pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) +pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) +standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) +userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) +automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) +computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) +fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) +gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) +intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) +ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) +linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) +modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) +networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) +networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) +networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) +opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) +opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) +printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) +radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) +repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) +router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) +scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) +telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) +telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) +transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) +transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) +transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) +q_complex = express_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) +booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) +dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) +hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) +opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) +reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) +rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) +rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) +rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) +scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) +semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) +singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) +singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) +trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) +twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) +weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) +userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) +evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) +watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) +watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) +watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) +watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) +watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) +userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) +atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) +atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) +notdefined = express_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) +advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) +hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) +soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) +userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) +earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) +erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) +heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) +paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) +pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) +transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) +userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) +concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) +fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) +gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) +masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) +metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) +plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) +wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) +userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) +formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) +userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) +multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) +programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) +proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) +twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) +userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) +bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) +chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) +screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) +userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) +passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) +userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) +mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) +naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) +userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCostItemTypeEnum = enum_namespace() -userdefined = getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) +costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) +estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) +pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) +scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) +tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) +unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) +userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) +ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) +core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) +filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) +pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) +protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) +userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) +cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) +coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) +flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) +insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) +membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) +molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) +roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) +skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) +sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) +topping = express_getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE) +wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) +userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) +site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) +userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcCurtainWallTypeEnum = enum_namespace() -userdefined = getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) +log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) +log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) +notdefined = express_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) +backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) +balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) +blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) +controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) +firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) +firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) +fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) +gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) +gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) +reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) +smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) +userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) +predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) +simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) +userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) +angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) +areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) +compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) +curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) +dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) +heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) +heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) +integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) +ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) +isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) +kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) +linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) +linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) +linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) +linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) +luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) +massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) +massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) +massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) +modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) +modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) +modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) +moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) +molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) +momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) +phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) +planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) +rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) +rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) +rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) +sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) +sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) +shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) +soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) +soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) +soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) +soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) +specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) +temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) +temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) +thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) +thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) +thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) +thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) +thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) +torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) +vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) +volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) +warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) +warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) +userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) IfcDirectionSenseEnum = enum_namespace() -negative = getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) -positive = getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = express_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) +anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) +birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) +bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) +cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) +elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) +expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) +filler = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE) +flashing = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE) +insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) +lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) +panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) +pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) +point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) +railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) +railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) +rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) +rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) +shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) +slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) +soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) +tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) +userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) +distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) +inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) +inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) +manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) +meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) +sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) +trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) +valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) +userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) +cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) +duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) +pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) +wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) +userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) +audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) +catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) +chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) +chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) +communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) +compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) +condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) +control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) +conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) +data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) +disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) +domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) +domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) +drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) +earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) +electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) +electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) +exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) +fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) +fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) +fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) +gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) +hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) +heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) +lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) +lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) +mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) +monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) +municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) +oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) +operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) +operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) +overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) +powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) +rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) +refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) +return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) +security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) +sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) +signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) +stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) +telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) +tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) +vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) +vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) +ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) +wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) +watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) +userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) +personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) +public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) +restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) +userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) +final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) +finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) +revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) +notdefined = express_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) +double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) +fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) +folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) +revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) +rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) +sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) +swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) +userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) +notdefined = express_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) +boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) +door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) +gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) +trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) +turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) +double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) +double_door_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_LIFTING_VERTICAL', INDETERMINATE) +double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) +double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) +double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) +double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) +double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) +double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) +folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) +folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) +lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) +lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) +lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) +revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) +revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) +rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) +single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) +single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) +sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) +sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) +swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) +swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) +userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) +rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) +round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) +userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) +cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) +dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) +excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) +overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) +pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) +stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) +topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) +trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) +counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) +embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) +slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) +subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) +subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) +transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) +userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) +electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) +freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) +freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) +freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) +freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) +freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) +fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) +handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) +kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) +microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) +photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) +refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) +tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) +vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) +washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) +userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) +distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) +motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) +switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) +userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) +capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) +capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) +compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) +harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) +inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) +inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) +recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) +ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) +userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) +enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) +standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) +userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) +induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) +polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) +reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) +synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) +userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) +timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) +timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) +userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) +accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) +arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) +beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) +braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) +cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) +deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) +dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) +entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) +girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) +grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) +mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) +pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) +pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) +rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) +reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) +rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) +shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) +signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) +slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) +sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) +supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) +suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) +trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) +traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) +traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) +truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) +turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) +userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcElementCompositionEnum = enum_namespace() -complex = getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) +element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) +partial = express_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) +externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) +internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) +userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) +directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) +directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) +directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) +directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) +indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) +indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) +indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) +indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) +directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) +directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) +directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) +floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) +shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) +userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) +eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) +eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) +eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) +userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) +intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) +startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) +userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) +external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) +userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) +belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) +junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) +levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) +segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) +substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) +longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) +region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) +vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) +centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) +centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) +centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) +propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) +tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) +vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) +userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) +mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) +weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) +userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) +compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) +odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) +oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) +strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) +waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) +userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) +firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) +firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) +hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) +sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) +userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) +source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) +sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) +notdefined = express_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) +ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) +combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) +frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) +phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) +powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) +pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) +thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) +voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) +voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) +voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) +userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) +gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) +oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) +watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) +userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) +footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) +pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) +pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) +strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) +userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) +chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) +desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) +filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) +shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) +sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) +table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) +technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) +userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) +terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) +vegetation = express_getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE) +userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) +graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) +model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) +plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) +reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) +section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) +sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) +userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solid = express_getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE) +void = express_getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE) +water = express_getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE) +userdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcGlobalOrLocalEnum = enum_namespace() -global_coords = getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) +local_coords = express_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) +irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) +radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) +rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) +triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) +userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) +shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) +turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) +userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) +adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) +adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) +adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) +adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) +adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) +adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) +assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) +assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) +assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) +assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) +assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) +steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) +userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) +crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) +dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) +fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) +userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) +grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) +oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) +petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) +userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) +external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) +external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) +external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) +internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) +notdefined = express_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) +assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) +furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) +spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) +userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) +power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) +userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcKerbTypeEnum = enum_namespace() -userdefined = getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcKerbTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) +quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) +uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) +unspecified = express_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) +administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) +carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) +cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) +concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) +drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) +electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) +finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) +flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) +general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) +hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) +landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) +masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) +painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) +paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) +plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) +roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) +sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) +steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) +surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) +userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) +halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) +highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) +metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) +oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) +tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcLayerSetDirectionEnum = enum_namespace() -axis1 = getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) +axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) +axis3 = express_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) +type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) +type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) +type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) +notdefined = express_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) +compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) +fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) +highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) +highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) +lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) +lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) +lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) +mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) +metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) +tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) +notdefined = express_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) +directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) +pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) +securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) +userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) +loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) +userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) +load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) +load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) +userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) +logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) +logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicalxor = express_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) +barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) +breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) +canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) +drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) +floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) +hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) +jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) +launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) +marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) +navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) +port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) +quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) +revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) +shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) +shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) +shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) +slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) +waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) +waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) +userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) +anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) +approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) +belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) +berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) +chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) +cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) +copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) +core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) +crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) +gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) +gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) +highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) +landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) +leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) +lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) +manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) +navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) +protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) +shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) +storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) +vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) +waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) +weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) +userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) +bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) +chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) +coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) +dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) +nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) +nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) +railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) +railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) +rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) +rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) +screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) +shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) +staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) +studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) +userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) +feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) +oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) +oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) +vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) +userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) +brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) +chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) +collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) +member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) +mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) +plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) +post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) +purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) +rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) +stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) +stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) +stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) +structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) +strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) +stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) +suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) +suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) +tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) +userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) +basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) +basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) +e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) +gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) +masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) +mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) +mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) +packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) +remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) +remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) +service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) +subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) +userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) +linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) +magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) +mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) +vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) +userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) +coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) +directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) +userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) +buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) +userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) +codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) +designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) +external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) +healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) +mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) +modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) +parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) +requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) +specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) +triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) +userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) +assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) +lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) +lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) +lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) +owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) +tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) +userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) +recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) +userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) +communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) +dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) +poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) +telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) +userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) +rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) +userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) +louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) +screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) +userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) +building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) +work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcPhysicalOrVirtualEnum = enum_namespace() -physical = getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) +virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) +notdefined = express_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) +cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) +composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) +precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) +prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) +userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) +cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) +driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) +friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) +jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) +support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) +userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) +connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) +entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) +exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) +junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) +obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) +transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) +userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) +flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) +gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) +rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) +spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) +userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) +cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) +curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) +flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) +gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) +sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) +splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) +stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) +web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) +userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) +pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) +pcurve_s2 = express_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) +advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) +advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) +advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) +calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) +diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) +shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) +userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProfileTypeEnum = enum_namespace() -area = getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) -curve = getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = express_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) +changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) +maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) +moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) +purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) +workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) +userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) +true_length = express_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) +blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) +deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) +userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +pset_materialdriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE) +pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) +pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) +pset_profiledriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE) +pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) +pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) +qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) +qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) +qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) +notdefined = express_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) +electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) +electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) +residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) +thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) +circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) +earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) +earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) +fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) +residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) +residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) +sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) +varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) +voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) +userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) +endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) +splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) +submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) +sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) +verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) +verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) +userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) +checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) +guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) +rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) +rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) +stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) +fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) +guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) +handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) +userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayPartTypeEnum = enum_namespace() -dilatationsuperstructure = getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -linesidestructure = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -linesidestructurepart = getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -plaintracksuperstructure = getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) -superstructure = getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -trackstructure = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -turnoutsuperstructure = getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) +linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) +linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) +plaintracksuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) +superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) +trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) +trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) +turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) +userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRailwayTypeEnum = enum_namespace() -userdefined = getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) +straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) +quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) +spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) +straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) +two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) +two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) +userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) +by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) +daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) +monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) +monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) +weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) +yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) +yearly_by_position = express_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) -userdefined = getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) +intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) +kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) +landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) +milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) +position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) +referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) +station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) +userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) +flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) +glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) +matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) +metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) +mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) +phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) +physical = express_getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE) +plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) +strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) +notdefined = express_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) +dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) +grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) +replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) +rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) +surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) +verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) +textured = express_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) +anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) +edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) +ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) +main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) +punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) +ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) +shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) +spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) +stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) +bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) +carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) +centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) +centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) +hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) +intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) +layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) +parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) +passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) +pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) +railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) +refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) +roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) +roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) +roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) +roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) +roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) +shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) +sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) +softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) +tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) +trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) +trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) +userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcRoadTypeEnum = enum_namespace() -userdefined = getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) +buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) +buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) +civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) +client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) +commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) +constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) +consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) +contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) +costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) +electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) +engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) +facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) +fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) +manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) +mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) +owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) +projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) +reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) +structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) +subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) +supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) +userdefined = express_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) +barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) +butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) +dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) +flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) +freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) +gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) +gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) +hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) +hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) +mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) +pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) +rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) +shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) +userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) +deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) +deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) +exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) +femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) +giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) +hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) +kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) +mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) +micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) +milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) +nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) +peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) +pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) +tera = express_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) +ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) +becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) +candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) +coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) +cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) +degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) +farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) +gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) +gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) +henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) +hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) +joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) +kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) +lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) +lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) +metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) +mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) +newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) +ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) +pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) +radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) +second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) +siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) +sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) +square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) +steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) +tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) +volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) +watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) +weber = express_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) +bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) +bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) +cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) +sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) +shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) +sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) +toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) +urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) +washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) +wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) +userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSectionTypeEnum = enum_namespace() -tapered = getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) -uniform = getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = express_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) +co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) +conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) +contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) +cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) +earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) +firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) +flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) +foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) +frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) +gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) +heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) +humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) +identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) +ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) +levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) +lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) +moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) +movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) +obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) +phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) +pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) +radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) +radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) +rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) +smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) +snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) +soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) +temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) +trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) +turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) +wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) +windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) +userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) +finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) +start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) +start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) +userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) +jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) +shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) +userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) +mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) +pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) +userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) +mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) +visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) +userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) +p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) +p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) +p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) +p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) +p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) +q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) +q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) +q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) +q_number = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE) +q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) +q_weight = express_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) +approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) +baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) +floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) +landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) +paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) +roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) +sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) +trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) +wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) +userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) +solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) +userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) +radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) +userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) +external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) +gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) +internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) +parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) +space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) +userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) +firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) +interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) +lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) +occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) +reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) +security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) +thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) +transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) +ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) +userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) +cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) +rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) +userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) +freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) +spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) +straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) +winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) +userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) +double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) +half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) +half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) +ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) +quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) +quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) +spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) +straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) +three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) +three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) +two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) +two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) +two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) +two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) +userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) +readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) +readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) +readwritelocked = express_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) +const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) +discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) +equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) +linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) +parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) +polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) +sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) +compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) +pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) +rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) +tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) +userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) +const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) +discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) +isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) +membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) +shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) +userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) +work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) +userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) +hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) +linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) +mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) +nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) +pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) +rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) +symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) +tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) +transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) +treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) +userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcSurfaceSide = enum_namespace() -both = getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) -negative = getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -positive = getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) +positive = express_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) +contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) +dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) +emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) +keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) +momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) +relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) +selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) +starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) +start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) +switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) +toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) +userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) +subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) +worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) +userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) +breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) +expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) +feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) +oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) +pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) +storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) +vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) +userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTaskDurationEnum = enum_namespace() -elapsedtime = getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) +worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) +notdefined = express_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) +adjustment = express_getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE) +attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) +calibration = express_getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE) +construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) +demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) +dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) +disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) +emergency = express_getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE) +inspection = express_getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE) +installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) +logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) +maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) +move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) +operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) +removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) +renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) +safety = express_getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE) +shutdown = express_getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE) +startup = express_getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE) +testing = express_getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE) +troubleshooting = express_getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE) +userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) +fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) +tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) +userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) +diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) +duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) +grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) +trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) +userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) +coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) +strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) +wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) +userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) +right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) +up = express_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) +continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) +discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) +discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) +piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) +piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) +piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) +notdefined = express_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) +blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) +derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) +frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) +half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) +sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) +speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) +trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) +vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) +userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) +combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) +current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) +frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) +inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) +rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) +voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) +userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) +contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) +contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = express_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) +craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) +elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) +escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) +haulinggear = express_getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE) +liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) +movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) +userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) IfcTrimmingPreference = enum_namespace() -cartesian = getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) +parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) +unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) IfcTubeBundleTypeEnum = enum_namespace() -finned = getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) +userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) +amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) +areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) +doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) +electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) +electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) +electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) +electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) +electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) +electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) +energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) +forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) +frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) +illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) +inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) +lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) +luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) +luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) +magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) +magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) +massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) +planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) +powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) +pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) +radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) +solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) +thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) +timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) +volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) +userdefined = express_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) +alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) +basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) +combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) +controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) +gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) +humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) +indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) +mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) +thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) +weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) +airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) +dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) +rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) +splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) +userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) +antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) +changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) +check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) +commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) +diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) +doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) +doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) +drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) +faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) +flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) +gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) +gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) +isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) +mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) +pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) +pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) +regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) +safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) +steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) +stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) +userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +cargo = express_getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE) +rollingstock = express_getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) +vehicle = express_getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE) +vehicleair = express_getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE) +vehiclemarine = express_getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE) +vehicletracked = express_getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE) +vehiclewheeled = express_getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) +userdefined = express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) +bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) +friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) +rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) +shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) +viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) +userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) +compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) +spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) +userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +boundary = express_getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE) +clearance = express_getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE) +provisionforvoid = express_getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) +userdefined = express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) +cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) +edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) +hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) +miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) +notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) +userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) +movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) +parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) +partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) +plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) +polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) +retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) +shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) +solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) +standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) +wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) +userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) +floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) +gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) +gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) +roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) +wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) +wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) +userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) +fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) +otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) +pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) +pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) +removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) +sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) +sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) +slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) +slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) +tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) +tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) +tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) +notdefined = express_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) +bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) +left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) +middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) +right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) +top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) +notdefined = express_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) +lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) +skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) +window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) +double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) +single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) +triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) +triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) +triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) +triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) +triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) +triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) +userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) +secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) +thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) +userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_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) +actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) +baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) +planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) +userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) +notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_TC1', *args, **kwargs) @@ -5121,7 +5128,7 @@ class IfcBoxAlignment_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 + assert (express_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' @@ -5202,7 +5209,7 @@ class IfcFontStyle_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'italic', 'oblique']) is not False class IfcFontVariant_WR1: SCOPE = 'type' @@ -5211,7 +5218,7 @@ class IfcFontVariant_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['normal', 'small-caps']) is not False class IfcFontWeight_WR1: SCOPE = 'type' @@ -5220,7 +5227,7 @@ class IfcFontWeight_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 + assert (express_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' @@ -5319,7 +5326,7 @@ class IfcTextAlignment_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['left', 'right', 'center', 'justify']) is not False class IfcTextDecoration_WR1: SCOPE = 'type' @@ -5328,7 +5335,7 @@ class IfcTextDecoration_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['none', 'underline', 'overline', 'line-through', 'blink']) is not False class IfcTextTransformation_WR1: SCOPE = 'type' @@ -5337,7 +5344,7 @@ class IfcTextTransformation_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False + assert (express_getattr(self, 'lower', INDETERMINATE)() in ['capitalize', 'uppercase', 'lowercase', 'none']) is not False class IfcActorRole_WR1: SCOPE = 'entity' @@ -5346,8 +5353,8 @@ class IfcActorRole_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 + role = express_getattr(self, 'Role', INDETERMINATE) + assert (role != express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) or (role == express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedRole', INDETERMINATE)))) is not False class IfcActuator_CorrectPredefinedType: SCOPE = 'entity' @@ -5356,8 +5363,8 @@ class IfcActuator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcActuator_CorrectTypeAssigned: SCOPE = 'entity' @@ -5366,8 +5373,8 @@ class IfcActuator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcactuatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcactuatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcActuatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -5376,8 +5383,8 @@ class IfcActuatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAddress_WR1: SCOPE = 'entity' @@ -5386,8 +5393,8 @@ class IfcAddress_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 + purpose = express_getattr(self, 'Purpose', INDETERMINATE) + assert (not exists(purpose) or (purpose != express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) or (purpose == express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedPurpose', INDETERMINATE))))) is not False class IfcAdvancedBrep_HasAdvancedFaces: SCOPE = 'entity' @@ -5396,7 +5403,7 @@ class IfcAdvancedBrep_HasAdvancedFaces: @staticmethod def __call__(self): - assert (sizeof([afs for afs in getattr(getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_tc1.ifcadvancedface' in typeof(afs)]) == 0) is not False + assert (sizeof([afs for afs in express_getattr(express_getattr(self, 'Outer', INDETERMINATE), 'CfsFaces', INDETERMINATE) if not 'ifc4x3_tc1.ifcadvancedface' in typeof(afs)]) == 0) is not False class IfcAdvancedBrepWithVoids_VoidsHaveAdvancedFaces: SCOPE = 'entity' @@ -5405,8 +5412,8 @@ class IfcAdvancedBrepWithVoids_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_tc1.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False + voids = express_getattr(self, 'Voids', INDETERMINATE) + assert (sizeof([vsh for vsh in voids if sizeof([afs for afs in express_getattr(vsh, 'CfsFaces', INDETERMINATE) if not 'ifc4x3_tc1.ifcadvancedface' in typeof(afs)]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableEdgeCurves: SCOPE = 'entity' @@ -5415,7 +5422,7 @@ class IfcAdvancedFace_ApplicableEdgeCurves: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_tc1.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_tc1.ifcline', 'ifc4x3_tc1.ifcconic', 'ifc4x3_tc1.ifcpolyline', 'ifc4x3_tc1.ifcbsplinecurve'] * typeof(getattr(getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_tc1.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not sizeof(['ifc4x3_tc1.ifcline', 'ifc4x3_tc1.ifcconic', 'ifc4x3_tc1.ifcpolyline', 'ifc4x3_tc1.ifcbsplinecurve'] * typeof(express_getattr(express_getattr(oe, 'EdgeElement', INDETERMINATE), 'EdgeGeometry', INDETERMINATE))) == 1]) == 0]) == 0) is not False class IfcAdvancedFace_ApplicableSurface: SCOPE = 'entity' @@ -5424,7 +5431,7 @@ class IfcAdvancedFace_ApplicableSurface: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_tc1.ifcelementarysurface', 'ifc4x3_tc1.ifcsweptsurface', 'ifc4x3_tc1.ifcbsplinesurface'] * typeof(getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_tc1.ifcelementarysurface', 'ifc4x3_tc1.ifcsweptsurface', 'ifc4x3_tc1.ifcbsplinesurface'] * typeof(express_getattr(self, 'FaceSurface', INDETERMINATE))) == 1) is not False class IfcAdvancedFace_RequiresEdgeCurve: SCOPE = 'entity' @@ -5433,7 +5440,7 @@ class IfcAdvancedFace_RequiresEdgeCurve: @staticmethod def __call__(self): - assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_tc1.ifcedgeloop' in typeof(getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in getattr(getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_tc1.ifcedgecurve' in typeof(getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False + assert (sizeof([elpfbnds for elpfbnds in [bnds for bnds in express_getattr(self, 'Bounds', INDETERMINATE) if 'ifc4x3_tc1.ifcedgeloop' in typeof(express_getattr(bnds, 'Bound', INDETERMINATE))] if not sizeof([oe for oe in express_getattr(express_getattr(elpfbnds, 'Bound', INDETERMINATE), 'EdgeList', INDETERMINATE) if not 'ifc4x3_tc1.ifcedgecurve' in typeof(express_getattr(oe, 'EdgeElement', INDETERMINATE))]) == 0]) == 0) is not False class IfcAirTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -5442,8 +5449,8 @@ class IfcAirTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -5452,8 +5459,8 @@ class IfcAirTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcairterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcairterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBox_CorrectPredefinedType: SCOPE = 'entity' @@ -5462,8 +5469,8 @@ class IfcAirTerminalBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirTerminalBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -5472,8 +5479,8 @@ class IfcAirTerminalBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcairterminalboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcairterminalboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirTerminalBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -5482,8 +5489,8 @@ class IfcAirTerminalBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -5492,8 +5499,8 @@ class IfcAirTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectPredefinedType: SCOPE = 'entity' @@ -5502,8 +5509,8 @@ class IfcAirToAirHeatRecovery_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAirToAirHeatRecovery_CorrectTypeAssigned: SCOPE = 'entity' @@ -5512,8 +5519,8 @@ class IfcAirToAirHeatRecovery_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcairtoairheatrecoverytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcairtoairheatrecoverytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAirToAirHeatRecoveryType_CorrectPredefinedType: SCOPE = 'entity' @@ -5522,8 +5529,8 @@ class IfcAirToAirHeatRecoveryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAlarm_CorrectPredefinedType: SCOPE = 'entity' @@ -5532,8 +5539,8 @@ class IfcAlarm_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAlarm_CorrectTypeAssigned: SCOPE = 'entity' @@ -5542,8 +5549,8 @@ class IfcAlarm_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcalarmtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcalarmtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAlarmType_CorrectPredefinedType: SCOPE = 'entity' @@ -5552,8 +5559,8 @@ class IfcAlarmType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcApproval_HasIdentifierOrName: SCOPE = 'entity' @@ -5562,8 +5569,8 @@ class IfcApproval_HasIdentifierOrName: @staticmethod def __call__(self): - identifier = getattr(self, 'Identifier', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + identifier = express_getattr(self, 'Identifier', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identifier) or exists(name)) is not False class IfcArbitraryClosedProfileDef_WR1: @@ -5573,8 +5580,8 @@ class IfcArbitraryClosedProfileDef_WR1: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) - assert (getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) + assert (express_getattr(outercurve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryClosedProfileDef_WR2: SCOPE = 'entity' @@ -5583,7 +5590,7 @@ class IfcArbitraryClosedProfileDef_WR2: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_tc1.ifcline' in typeof(outercurve)) is not False class IfcArbitraryClosedProfileDef_WR3: @@ -5593,7 +5600,7 @@ class IfcArbitraryClosedProfileDef_WR3: @staticmethod def __call__(self): - outercurve = getattr(self, 'OuterCurve', INDETERMINATE) + outercurve = express_getattr(self, 'OuterCurve', INDETERMINATE) assert (not 'ifc4x3_tc1.ifcoffsetcurve2d' in typeof(outercurve)) is not False class IfcArbitraryOpenProfileDef_WR11: @@ -5603,7 +5610,7 @@ class IfcArbitraryOpenProfileDef_WR11: @staticmethod def __call__(self): - assert ('ifc4x3_tc1.ifccenterlineprofiledef' in typeof(self) or getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert ('ifc4x3_tc1.ifccenterlineprofiledef' in typeof(self) or express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcArbitraryOpenProfileDef_WR12: SCOPE = 'entity' @@ -5612,8 +5619,8 @@ class IfcArbitraryOpenProfileDef_WR12: @staticmethod def __call__(self): - curve = getattr(self, 'Curve', INDETERMINATE) - assert (getattr(curve, 'Dim', INDETERMINATE) == 2) is not False + curve = express_getattr(self, 'Curve', INDETERMINATE) + assert (express_getattr(curve, 'Dim', INDETERMINATE) == 2) is not False class IfcArbitraryProfileDefWithVoids_WR1: SCOPE = 'entity' @@ -5622,7 +5629,7 @@ class IfcArbitraryProfileDefWithVoids_WR1: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == area) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == area) is not False class IfcArbitraryProfileDefWithVoids_WR2: SCOPE = 'entity' @@ -5631,8 +5638,8 @@ class IfcArbitraryProfileDefWithVoids_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 + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) + assert (sizeof([temp for temp in innercurves if express_getattr(temp, 'Dim', INDETERMINATE) != 2]) == 0) is not False class IfcArbitraryProfileDefWithVoids_WR3: SCOPE = 'entity' @@ -5641,7 +5648,7 @@ class IfcArbitraryProfileDefWithVoids_WR3: @staticmethod def __call__(self): - innercurves = getattr(self, 'InnerCurves', INDETERMINATE) + innercurves = express_getattr(self, 'InnerCurves', INDETERMINATE) assert (sizeof([temp for temp in innercurves if 'ifc4x3_tc1.ifcline' in typeof(temp)]) == 0) is not False class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @@ -5651,9 +5658,9 @@ class IfcAsymmetricIShapeProfileDef_ValidBottomFilletRadius: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - bottomflangefilletradius = getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + bottomflangefilletradius = express_getattr(self, 'BottomFlangeFilletRadius', INDETERMINATE) assert (not exists(bottomflangefilletradius) or bottomflangefilletradius <= (bottomflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @@ -5663,9 +5670,9 @@ class IfcAsymmetricIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - bottomflangethickness = getattr(self, 'BottomFlangeThickness', INDETERMINATE) - topflangethickness = getattr(self, 'TopFlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + bottomflangethickness = express_getattr(self, 'BottomFlangeThickness', INDETERMINATE) + topflangethickness = express_getattr(self, 'TopFlangeThickness', INDETERMINATE) assert (not exists(topflangethickness) or bottomflangethickness + topflangethickness < overalldepth) is not False class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @@ -5675,9 +5682,9 @@ class IfcAsymmetricIShapeProfileDef_ValidTopFilletRadius: @staticmethod def __call__(self): - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) - topflangefilletradius = getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) + topflangefilletradius = express_getattr(self, 'TopFlangeFilletRadius', INDETERMINATE) assert (not exists(topflangefilletradius) or topflangefilletradius <= (topflangewidth - webthickness) / 2.0) is not False class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @@ -5687,9 +5694,9 @@ class IfcAsymmetricIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - bottomflangewidth = getattr(self, 'BottomFlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) - topflangewidth = getattr(self, 'TopFlangeWidth', INDETERMINATE) + bottomflangewidth = express_getattr(self, 'BottomFlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + topflangewidth = express_getattr(self, 'TopFlangeWidth', INDETERMINATE) assert (webthickness < bottomflangewidth and webthickness < topflangewidth) is not False class IfcAudioVisualAppliance_CorrectPredefinedType: @@ -5699,8 +5706,8 @@ class IfcAudioVisualAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcAudioVisualAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -5709,8 +5716,8 @@ class IfcAudioVisualAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcaudiovisualappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcaudiovisualappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcAudioVisualApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -5719,8 +5726,8 @@ class IfcAudioVisualApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcAxis1Placement_AxisIs3D: SCOPE = 'entity' @@ -5729,8 +5736,8 @@ class IfcAxis1Placement_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIs3D: SCOPE = 'entity' @@ -5739,7 +5746,7 @@ class IfcAxis1Placement_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis1Placement_LocationIsCP: SCOPE = 'entity' @@ -5748,10 +5755,10 @@ class IfcAxis1Placement_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_tc1.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_tc1.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False def calc_IfcAxis1Placement_Z(self): - axis = getattr(self, 'Axis', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) return nvl(IfcNormalise(axis), IfcDirection(DirectionRatios=[0.0, 0.0, 1.0])) class IfcAxis2Placement2D_LocationIs2D: @@ -5761,7 +5768,7 @@ class IfcAxis2Placement2D_LocationIs2D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcAxis2Placement2D_LocationIsCP: SCOPE = 'entity' @@ -5770,7 +5777,7 @@ class IfcAxis2Placement2D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_tc1.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_tc1.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2Placement2D_RefDirIs2D: SCOPE = 'entity' @@ -5779,11 +5786,11 @@ class IfcAxis2Placement2D_RefDirIs2D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 2) is not False def calc_IfcAxis2Placement2D_P(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuild2Axes(refdirection) class IfcAxis2Placement3D_AxisAndRefDirProvision: @@ -5793,8 +5800,8 @@ class IfcAxis2Placement3D_AxisAndRefDirProvision: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) assert (not exists(axis) ^ exists(refdirection)) is not False class IfcAxis2Placement3D_AxisIs3D: @@ -5804,8 +5811,8 @@ class IfcAxis2Placement3D_AxisIs3D: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert (not exists(axis) or getattr(axis, 'Dim', INDETERMINATE) == 3) is not False + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (not exists(axis) or express_getattr(axis, 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_AxisToRefDirPosition: SCOPE = 'entity' @@ -5814,9 +5821,9 @@ class IfcAxis2Placement3D_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcAxis2Placement3D_LocationIs3D: SCOPE = 'entity' @@ -5825,7 +5832,7 @@ class IfcAxis2Placement3D_LocationIs3D: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (express_getattr(express_getattr(self, 'Location', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcAxis2Placement3D_LocationIsCP: SCOPE = 'entity' @@ -5834,7 +5841,7 @@ class IfcAxis2Placement3D_LocationIsCP: @staticmethod def __call__(self): - assert ('ifc4x3_tc1.ifccartesianpoint' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_tc1.ifccartesianpoint' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2Placement3D_RefDirIs3D: SCOPE = 'entity' @@ -5843,12 +5850,12 @@ class IfcAxis2Placement3D_RefDirIs3D: @staticmethod def __call__(self): - refdirection = getattr(self, 'RefDirection', INDETERMINATE) - assert (not exists(refdirection) or getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(refdirection) or express_getattr(refdirection, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcAxis2Placement3D_P(self): - axis = getattr(self, 'Axis', INDETERMINATE) - refdirection = getattr(self, 'RefDirection', INDETERMINATE) + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) return IfcBuildAxes(axis, refdirection) class IfcAxis2PlacementLinear_WR1: @@ -5858,7 +5865,7 @@ class IfcAxis2PlacementLinear_WR1: @staticmethod def __call__(self): - assert ('ifc4x3_tc1.ifcpointbydistanceexpression' in typeof(getattr(self, 'Location', INDETERMINATE))) is not False + assert ('ifc4x3_tc1.ifcpointbydistanceexpression' in typeof(express_getattr(self, 'Location', INDETERMINATE))) is not False class IfcAxis2PlacementLinear_WR2: SCOPE = 'entity' @@ -5867,9 +5874,9 @@ class IfcAxis2PlacementLinear_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + refdirection = express_getattr(self, 'RefDirection', INDETERMINATE) + assert (not exists(axis) or not exists(refdirection) or express_getattr(IfcCrossProduct(axis, refdirection), 'Magnitude', INDETERMINATE) > 0.0) is not False class IfcBSplineCurve_SameDim: SCOPE = 'entity' @@ -5878,16 +5885,16 @@ class IfcBSplineCurve_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 + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + assert (sizeof([temp for temp in controlpointslist if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineCurve_ControlPoints(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) - upperindexoncontrolpoints = getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) return IfcListToArray(controlpointslist, 0, upperindexoncontrolpoints) class IfcBSplineCurveWithKnots_ConsistentBSpline: @@ -5897,11 +5904,11 @@ class IfcBSplineCurveWithKnots_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) + degree = express_getattr(self, 'Degree', INDETERMINATE) + upperindexoncontrolpoints = express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert IfcConstraintsParamBSpline(degree, upperindexonknots, upperindexoncontrolpoints, knotmultiplicities, knots) is not False class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @@ -5911,26 +5918,26 @@ class IfcBSplineCurveWithKnots_CorrespondingKnotLists: @staticmethod def __call__(self): - knotmultiplicities = getattr(self, 'KnotMultiplicities', INDETERMINATE) - upperindexonknots = getattr(self, 'UpperIndexOnKnots', INDETERMINATE) + knotmultiplicities = express_getattr(self, 'KnotMultiplicities', INDETERMINATE) + upperindexonknots = express_getattr(self, 'UpperIndexOnKnots', INDETERMINATE) assert (sizeof(knotmultiplicities) == upperindexonknots) is not False def calc_IfcBSplineCurveWithKnots_UpperIndexOnKnots(self): - knots = getattr(self, 'Knots', INDETERMINATE) + knots = express_getattr(self, 'Knots', INDETERMINATE) return sizeof(knots) def calc_IfcBSplineSurface_UUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) return sizeof(controlpointslist) - 1 def calc_IfcBSplineSurface_VUpper(self): - controlpointslist = getattr(self, 'ControlPointsList', INDETERMINATE) + controlpointslist = express_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) + controlpointslist = express_getattr(self, 'ControlPointsList', INDETERMINATE) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) return IfcMakeArrayOfArray(controlpointslist, 0, uupper, 0, vupper) class IfcBSplineSurfaceWithKnots_CorrespondingULists: @@ -5940,8 +5947,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingULists: @staticmethod def __call__(self): - umultiplicities = getattr(self, 'UMultiplicities', INDETERMINATE) - knotuupper = getattr(self, 'KnotUUpper', INDETERMINATE) + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) assert (sizeof(umultiplicities) == knotuupper) is not False class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @@ -5951,8 +5958,8 @@ class IfcBSplineSurfaceWithKnots_CorrespondingVLists: @staticmethod def __call__(self): - vmultiplicities = getattr(self, 'VMultiplicities', INDETERMINATE) - knotvupper = getattr(self, 'KnotVUpper', INDETERMINATE) + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) assert (sizeof(vmultiplicities) == knotvupper) is not False class IfcBSplineSurfaceWithKnots_UDirectionConstraints: @@ -5962,10 +5969,10 @@ class IfcBSplineSurfaceWithKnots_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 + umultiplicities = express_getattr(self, 'UMultiplicities', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) + knotuupper = express_getattr(self, 'KnotUUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'UDegree', INDETERMINATE), knotuupper, express_getattr(self, 'UUpper', INDETERMINATE), umultiplicities, uknots) is not False class IfcBSplineSurfaceWithKnots_VDirectionConstraints: SCOPE = 'entity' @@ -5974,17 +5981,17 @@ class IfcBSplineSurfaceWithKnots_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 + vmultiplicities = express_getattr(self, 'VMultiplicities', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) + knotvupper = express_getattr(self, 'KnotVUpper', INDETERMINATE) + assert IfcConstraintsParamBSpline(express_getattr(self, 'VDegree', INDETERMINATE), knotvupper, express_getattr(self, 'VUpper', INDETERMINATE), vmultiplicities, vknots) is not False def calc_IfcBSplineSurfaceWithKnots_KnotVUpper(self): - vknots = getattr(self, 'VKnots', INDETERMINATE) + vknots = express_getattr(self, 'VKnots', INDETERMINATE) return sizeof(vknots) def calc_IfcBSplineSurfaceWithKnots_KnotUUpper(self): - uknots = getattr(self, 'UKnots', INDETERMINATE) + uknots = express_getattr(self, 'UKnots', INDETERMINATE) return sizeof(uknots) class IfcBeam_CorrectPredefinedType: @@ -5994,8 +6001,8 @@ class IfcBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -6004,8 +6011,8 @@ class IfcBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -6014,8 +6021,8 @@ class IfcBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBearing_CorrectPredefinedType: SCOPE = 'entity' @@ -6024,8 +6031,8 @@ class IfcBearing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBearing_CorrectTypeAssigned: SCOPE = 'entity' @@ -6034,8 +6041,8 @@ class IfcBearing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcbearingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcbearingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBearingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6044,8 +6051,8 @@ class IfcBearingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBlobTexture_RasterCodeByteStream: SCOPE = 'entity' @@ -6054,7 +6061,7 @@ class IfcBlobTexture_RasterCodeByteStream: @staticmethod def __call__(self): - rastercode = getattr(self, 'RasterCode', INDETERMINATE) + rastercode = express_getattr(self, 'RasterCode', INDETERMINATE) assert (blength(rastercode) % 8 == 0) is not False class IfcBlobTexture_SupportedRasterFormat: @@ -6064,7 +6071,7 @@ class IfcBlobTexture_SupportedRasterFormat: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False + assert (express_getattr(express_getattr(self, 'RasterFormat', INDETERMINATE), 'lower', INDETERMINATE)() in ['bmp', 'jpg', 'gif', 'png']) is not False class IfcBoiler_CorrectPredefinedType: SCOPE = 'entity' @@ -6073,8 +6080,8 @@ class IfcBoiler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBoiler_CorrectTypeAssigned: SCOPE = 'entity' @@ -6083,8 +6090,8 @@ class IfcBoiler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcboilertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcboilertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBoilerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6093,8 +6100,8 @@ class IfcBoilerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBooleanClippingResult_FirstOperandType: SCOPE = 'entity' @@ -6103,7 +6110,7 @@ class IfcBooleanClippingResult_FirstOperandType: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) assert ('ifc4x3_tc1.ifcsweptareasolid' in typeof(firstoperand) or 'ifc4x3_tc1.ifcsweptdiscsolid' in typeof(firstoperand) or 'ifc4x3_tc1.ifcbooleanclippingresult' in typeof(firstoperand)) is not False class IfcBooleanClippingResult_OperatorType: @@ -6113,7 +6120,7 @@ class IfcBooleanClippingResult_OperatorType: @staticmethod def __call__(self): - operator = getattr(self, 'Operator', INDETERMINATE) + operator = express_getattr(self, 'Operator', INDETERMINATE) assert (operator == difference) is not False class IfcBooleanClippingResult_SecondOperandType: @@ -6123,7 +6130,7 @@ class IfcBooleanClippingResult_SecondOperandType: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) assert ('ifc4x3_tc1.ifchalfspacesolid' in typeof(secondoperand)) is not False class IfcBooleanResult_FirstOperandClosed: @@ -6133,8 +6140,8 @@ class IfcBooleanResult_FirstOperandClosed: @staticmethod def __call__(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - assert (not 'ifc4x3_tc1.ifctessellatedfaceset' in typeof(firstoperand) or (exists(getattr(firstoperand, 'Closed', INDETERMINATE)) and getattr(firstoperand, 'Closed', INDETERMINATE))) is not False + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + assert (not 'ifc4x3_tc1.ifctessellatedfaceset' in typeof(firstoperand) or (exists(express_getattr(firstoperand, 'Closed', INDETERMINATE)) and express_getattr(firstoperand, 'Closed', INDETERMINATE))) is not False class IfcBooleanResult_SameDim: SCOPE = 'entity' @@ -6143,9 +6150,9 @@ class IfcBooleanResult_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 + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (express_getattr(firstoperand, 'Dim', INDETERMINATE) == express_getattr(secondoperand, 'Dim', INDETERMINATE)) is not False class IfcBooleanResult_SecondOperandClosed: SCOPE = 'entity' @@ -6154,12 +6161,12 @@ class IfcBooleanResult_SecondOperandClosed: @staticmethod def __call__(self): - secondoperand = getattr(self, 'SecondOperand', INDETERMINATE) - assert (not 'ifc4x3_tc1.ifctessellatedfaceset' in typeof(secondoperand) or (exists(getattr(secondoperand, 'Closed', INDETERMINATE)) and getattr(secondoperand, 'Closed', INDETERMINATE))) is not False + secondoperand = express_getattr(self, 'SecondOperand', INDETERMINATE) + assert (not 'ifc4x3_tc1.ifctessellatedfaceset' in typeof(secondoperand) or (exists(express_getattr(secondoperand, 'Closed', INDETERMINATE)) and express_getattr(secondoperand, 'Closed', INDETERMINATE))) is not False def calc_IfcBooleanResult_Dim(self): - firstoperand = getattr(self, 'FirstOperand', INDETERMINATE) - return getattr(firstoperand, 'Dim', INDETERMINATE) + firstoperand = express_getattr(self, 'FirstOperand', INDETERMINATE) + return express_getattr(firstoperand, 'Dim', INDETERMINATE) class IfcBoundaryCurve_IsClosed: SCOPE = 'entity' @@ -6168,7 +6175,7 @@ class IfcBoundaryCurve_IsClosed: @staticmethod def __call__(self): - assert getattr(self, 'ClosedCurve', INDETERMINATE) is not False + assert express_getattr(self, 'ClosedCurve', INDETERMINATE) is not False def calc_IfcBoundingBox_Dim(self): return 3 @@ -6180,7 +6187,7 @@ class IfcBoxedHalfSpace_UnboundedSurface: @staticmethod def __call__(self): - assert (not 'ifc4x3_tc1.ifccurveboundedplane' in typeof(getattr(self, 'BaseSurface', INDETERMINATE))) is not False + assert (not 'ifc4x3_tc1.ifccurveboundedplane' in typeof(express_getattr(self, 'BaseSurface', INDETERMINATE))) is not False class IfcBridge_CorrectPredefinedType: SCOPE = 'entity' @@ -6189,8 +6196,8 @@ class IfcBridge_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBridgePart_CorrectPredefinedType: SCOPE = 'entity' @@ -6199,8 +6206,8 @@ class IfcBridgePart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectPredefinedType: SCOPE = 'entity' @@ -6209,8 +6216,8 @@ class IfcBuildingElementPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementPart_CorrectTypeAssigned: SCOPE = 'entity' @@ -6219,8 +6226,8 @@ class IfcBuildingElementPart_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcbuildingelementparttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcbuildingelementparttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementPartType_CorrectPredefinedType: SCOPE = 'entity' @@ -6229,8 +6236,8 @@ class IfcBuildingElementPartType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectPredefinedType: SCOPE = 'entity' @@ -6239,8 +6246,8 @@ class IfcBuildingElementProxy_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuildingElementProxy_CorrectTypeAssigned: SCOPE = 'entity' @@ -6249,8 +6256,8 @@ class IfcBuildingElementProxy_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcbuildingelementproxytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcbuildingelementproxytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBuildingElementProxy_HasObjectName: SCOPE = 'entity' @@ -6259,7 +6266,7 @@ class IfcBuildingElementProxy_HasObjectName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcBuildingElementProxyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6268,8 +6275,8 @@ class IfcBuildingElementProxyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcBuildingSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6278,8 +6285,8 @@ class IfcBuildingSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBuiltElement_MaxOneMaterialAssociation: SCOPE = 'entity' @@ -6288,7 +6295,7 @@ class IfcBuiltElement_MaxOneMaterialAssociation: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_tc1.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False + assert (sizeof([temp for temp in express_getattr(self, 'HasAssociations', INDETERMINATE) if 'ifc4x3_tc1.ifcrelassociatesmaterial' in typeof(temp)]) <= 1) is not False class IfcBuiltSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -6297,8 +6304,8 @@ class IfcBuiltSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectPredefinedType: SCOPE = 'entity' @@ -6307,8 +6314,8 @@ class IfcBurner_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcBurner_CorrectTypeAssigned: SCOPE = 'entity' @@ -6317,8 +6324,8 @@ class IfcBurner_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcburnertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcburnertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcBurnerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6327,8 +6334,8 @@ class IfcBurnerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCShapeProfileDef_ValidGirth: SCOPE = 'entity' @@ -6337,8 +6344,8 @@ class IfcCShapeProfileDef_ValidGirth: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - girth = getattr(self, 'Girth', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + girth = express_getattr(self, 'Girth', INDETERMINATE) assert (girth < depth / 2.0) is not False class IfcCShapeProfileDef_ValidInternalFilletRadius: @@ -6348,10 +6355,10 @@ class IfcCShapeProfileDef_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) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + internalfilletradius = express_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: @@ -6361,9 +6368,9 @@ class IfcCShapeProfileDef_ValidWallThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) assert (wallthickness < width / 2.0 and wallthickness < depth / 2.0) is not False class IfcCableCarrierFitting_CorrectPredefinedType: @@ -6373,8 +6380,8 @@ class IfcCableCarrierFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6383,8 +6390,8 @@ class IfcCableCarrierFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccablecarrierfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccablecarrierfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6393,8 +6400,8 @@ class IfcCableCarrierFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6403,8 +6410,8 @@ class IfcCableCarrierSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableCarrierSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6413,8 +6420,8 @@ class IfcCableCarrierSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccablecarriersegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccablecarriersegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableCarrierSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6423,8 +6430,8 @@ class IfcCableCarrierSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -6433,8 +6440,8 @@ class IfcCableFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -6443,8 +6450,8 @@ class IfcCableFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccablefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccablefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -6453,8 +6460,8 @@ class IfcCableFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -6463,8 +6470,8 @@ class IfcCableSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCableSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -6473,8 +6480,8 @@ class IfcCableSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccablesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccablesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCableSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -6483,8 +6490,8 @@ class IfcCableSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectPredefinedType: SCOPE = 'entity' @@ -6493,8 +6500,8 @@ class IfcCaissonFoundation_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCaissonFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -6503,8 +6510,8 @@ class IfcCaissonFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccaissonfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccaissonfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCaissonFoundationType_CorrectPredefinedType: SCOPE = 'entity' @@ -6513,8 +6520,8 @@ class IfcCaissonFoundationType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCartesianPoint_CP2Dor3D: SCOPE = 'entity' @@ -6523,7 +6530,7 @@ class IfcCartesianPoint_CP2Dor3D: @staticmethod def __call__(self): - coordinates = getattr(self, 'Coordinates', INDETERMINATE) + coordinates = express_getattr(self, 'Coordinates', INDETERMINATE) assert (hiindex(coordinates) >= 2) is not False def calc_IfcCartesianPointList_Dim(self): @@ -6536,16 +6543,16 @@ class IfcCartesianTransformationOperator_ScaleGreaterZero: @staticmethod def __call__(self): - scl = getattr(self, 'Scl', INDETERMINATE) + scl = express_getattr(self, 'Scl', INDETERMINATE) assert (scl > 0.0) is not False def calc_IfcCartesianTransformationOperator_Scl(self): - scale = getattr(self, 'Scale', INDETERMINATE) + scale = express_getattr(self, 'Scale', INDETERMINATE) return nvl(scale, 1.0) def calc_IfcCartesianTransformationOperator_Dim(self): - localorigin = getattr(self, 'LocalOrigin', INDETERMINATE) - return getattr(localorigin, 'Dim', INDETERMINATE) + localorigin = express_getattr(self, 'LocalOrigin', INDETERMINATE) + return express_getattr(localorigin, 'Dim', INDETERMINATE) class IfcCartesianTransformationOperator2D_Axis1Is2D: SCOPE = 'entity' @@ -6554,7 +6561,7 @@ class IfcCartesianTransformationOperator2D_Axis1Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_Axis2Is2D: SCOPE = 'entity' @@ -6563,7 +6570,7 @@ class IfcCartesianTransformationOperator2D_Axis2Is2D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 2) is not False class IfcCartesianTransformationOperator2D_DimEqual2: SCOPE = 'entity' @@ -6572,10 +6579,10 @@ class IfcCartesianTransformationOperator2D_DimEqual2: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 2) is not False + assert (express_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) + return IfcBaseAxis(2, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), None) class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6584,12 +6591,12 @@ class IfcCartesianTransformationOperator2DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) class IfcCartesianTransformationOperator3D_Axis1Is3D: SCOPE = 'entity' @@ -6598,7 +6605,7 @@ class IfcCartesianTransformationOperator3D_Axis1Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis1', INDETERMINATE)) or getattr(getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis1', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis1', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis2Is3D: SCOPE = 'entity' @@ -6607,7 +6614,7 @@ class IfcCartesianTransformationOperator3D_Axis2Is3D: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'Axis2', INDETERMINATE)) or getattr(getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False + assert (not exists(express_getattr(self, 'Axis2', INDETERMINATE)) or express_getattr(express_getattr(self, 'Axis2', INDETERMINATE), 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_Axis3Is3D: SCOPE = 'entity' @@ -6616,8 +6623,8 @@ class IfcCartesianTransformationOperator3D_Axis3Is3D: @staticmethod def __call__(self): - axis3 = getattr(self, 'Axis3', INDETERMINATE) - assert (not exists(axis3) or getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + assert (not exists(axis3) or express_getattr(axis3, 'Dim', INDETERMINATE) == 3) is not False class IfcCartesianTransformationOperator3D_DimIs3D: SCOPE = 'entity' @@ -6626,11 +6633,11 @@ class IfcCartesianTransformationOperator3D_DimIs3D: @staticmethod def __call__(self): - assert (getattr(self, 'Dim', INDETERMINATE) == 3) is not False + assert (express_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) + axis3 = express_getattr(self, 'Axis3', INDETERMINATE) + return IfcBaseAxis(3, express_getattr(self, 'Axis1', INDETERMINATE), express_getattr(self, 'Axis2', INDETERMINATE), axis3) class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: SCOPE = 'entity' @@ -6639,7 +6646,7 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale2GreaterZero: @staticmethod def __call__(self): - scl2 = getattr(self, 'Scl2', INDETERMINATE) + scl2 = express_getattr(self, 'Scl2', INDETERMINATE) assert (scl2 > 0.0) is not False class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @@ -6649,16 +6656,16 @@ class IfcCartesianTransformationOperator3DnonUniform_Scale3GreaterZero: @staticmethod def __call__(self): - scl3 = getattr(self, 'Scl3', INDETERMINATE) + scl3 = express_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)) + scale2 = express_getattr(self, 'Scale2', INDETERMINATE) + return nvl(scale2, express_getattr(self, 'Scl', INDETERMINATE)) def calc_IfcCartesianTransformationOperator3DnonUniform_Scl3(self): - scale3 = getattr(self, 'Scale3', INDETERMINATE) - return nvl(scale3, getattr(self, 'Scl', INDETERMINATE)) + scale3 = express_getattr(self, 'Scale3', INDETERMINATE) + return nvl(scale3, express_getattr(self, 'Scl', INDETERMINATE)) class IfcChiller_CorrectPredefinedType: SCOPE = 'entity' @@ -6667,8 +6674,8 @@ class IfcChiller_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChiller_CorrectTypeAssigned: SCOPE = 'entity' @@ -6677,8 +6684,8 @@ class IfcChiller_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcchillertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcchillertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChillerType_CorrectPredefinedType: SCOPE = 'entity' @@ -6687,8 +6694,8 @@ class IfcChillerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcChimney_CorrectPredefinedType: SCOPE = 'entity' @@ -6697,8 +6704,8 @@ class IfcChimney_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcChimney_CorrectTypeAssigned: SCOPE = 'entity' @@ -6707,8 +6714,8 @@ class IfcChimney_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcchimneytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcchimneytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcChimneyType_CorrectPredefinedType: SCOPE = 'entity' @@ -6717,8 +6724,8 @@ class IfcChimneyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCircleHollowProfileDef_WR1: SCOPE = 'entity' @@ -6727,8 +6734,8 @@ class IfcCircleHollowProfileDef_WR1: @staticmethod def __call__(self): - wallthickness = getattr(self, 'WallThickness', INDETERMINATE) - assert (wallthickness < getattr(self, 'Radius', INDETERMINATE)) is not False + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcCoil_CorrectPredefinedType: SCOPE = 'entity' @@ -6737,8 +6744,8 @@ class IfcCoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoil_CorrectTypeAssigned: SCOPE = 'entity' @@ -6747,8 +6754,8 @@ class IfcCoil_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccoiltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccoiltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoilType_CorrectPredefinedType: SCOPE = 'entity' @@ -6757,8 +6764,8 @@ class IfcCoilType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcColumn_CorrectPredefinedType: SCOPE = 'entity' @@ -6767,8 +6774,8 @@ class IfcColumn_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcColumn_CorrectTypeAssigned: SCOPE = 'entity' @@ -6777,8 +6784,8 @@ class IfcColumn_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccolumntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccolumntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcColumnType_CorrectPredefinedType: SCOPE = 'entity' @@ -6787,8 +6794,8 @@ class IfcColumnType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectPredefinedType: SCOPE = 'entity' @@ -6797,8 +6804,8 @@ class IfcCommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -6807,8 +6814,8 @@ class IfcCommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -6817,8 +6824,8 @@ class IfcCommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcComplexProperty_WR21: SCOPE = 'entity' @@ -6827,7 +6834,7 @@ class IfcComplexProperty_WR21: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert (sizeof([temp for temp in hasproperties if self == temp]) == 0) is not False class IfcComplexProperty_WR22: @@ -6837,7 +6844,7 @@ class IfcComplexProperty_WR22: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcComplexPropertyTemplate_NoSelfReference: @@ -6847,7 +6854,7 @@ class IfcComplexPropertyTemplate_NoSelfReference: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert (sizeof([temp for temp in haspropertytemplates if self == temp]) == 0) is not False class IfcComplexPropertyTemplate_UniquePropertyNames: @@ -6857,7 +6864,7 @@ class IfcComplexPropertyTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcCompositeCurve_CurveContinuous: @@ -6867,9 +6874,9 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + closedcurve = express_getattr(self, 'ClosedCurve', INDETERMINATE) + assert (not closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 1 or (closedcurve and sizeof([temp for temp in segments if express_getattr(temp, 'Transition', INDETERMINATE) == discontinuous]) == 0)) is not False class IfcCompositeCurve_SameDim: SCOPE = 'entity' @@ -6878,17 +6885,17 @@ class IfcCompositeCurve_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + assert (sizeof([temp for temp in segments if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + segments = express_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 + segments = express_getattr(self, 'Segments', INDETERMINATE) + nsegments = express_getattr(self, 'NSegments', INDETERMINATE) + return express_getattr(express_getitem(segments, nsegments - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Transition', INDETERMINATE) != discontinuous class IfcCompositeCurveOnSurface_SameSurface: SCOPE = 'entity' @@ -6897,7 +6904,7 @@ class IfcCompositeCurveOnSurface_SameSurface: @staticmethod def __call__(self): - basissurface = getattr(self, 'BasisSurface', INDETERMINATE) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) assert (sizeof(basissurface) > 0) is not False def calc_IfcCompositeCurveOnSurface_BasisSurface(self): @@ -6910,7 +6917,7 @@ class IfcCompositeCurveSegment_ParentIsBoundedCurve: @staticmethod def __call__(self): - parentcurve = getattr(self, 'ParentCurve', INDETERMINATE) + parentcurve = express_getattr(self, 'ParentCurve', INDETERMINATE) assert ('ifc4x3_tc1.ifcboundedcurve' in typeof(parentcurve)) is not False class IfcCompositeProfileDef_InvariantProfileType: @@ -6920,8 +6927,8 @@ class IfcCompositeProfileDef_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 + profiles = express_getattr(self, 'Profiles', INDETERMINATE) + assert (sizeof([temp for temp in profiles if express_getattr(temp, 'ProfileType', INDETERMINATE) != express_getattr(express_getitem(profiles, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcCompositeProfileDef_NoRecursion: SCOPE = 'entity' @@ -6930,7 +6937,7 @@ class IfcCompositeProfileDef_NoRecursion: @staticmethod def __call__(self): - profiles = getattr(self, 'Profiles', INDETERMINATE) + profiles = express_getattr(self, 'Profiles', INDETERMINATE) assert (sizeof([temp for temp in profiles if 'ifc4x3_tc1.ifccompositeprofiledef' in typeof(temp)]) == 0) is not False class IfcCompressor_CorrectPredefinedType: @@ -6940,8 +6947,8 @@ class IfcCompressor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCompressor_CorrectTypeAssigned: SCOPE = 'entity' @@ -6950,8 +6957,8 @@ class IfcCompressor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccompressortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccompressortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCompressorType_CorrectPredefinedType: SCOPE = 'entity' @@ -6960,8 +6967,8 @@ class IfcCompressorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCondenser_CorrectPredefinedType: SCOPE = 'entity' @@ -6970,8 +6977,8 @@ class IfcCondenser_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCondenser_CorrectTypeAssigned: SCOPE = 'entity' @@ -6980,8 +6987,8 @@ class IfcCondenser_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccondensertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccondensertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCondenserType_CorrectPredefinedType: SCOPE = 'entity' @@ -6990,8 +6997,8 @@ class IfcCondenserType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConstraint_WR11: SCOPE = 'entity' @@ -7000,8 +7007,8 @@ class IfcConstraint_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 + constraintgrade = express_getattr(self, 'ConstraintGrade', INDETERMINATE) + assert (constraintgrade != express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) or (constraintgrade == express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedGrade', INDETERMINATE)))) is not False class IfcConstructionEquipmentResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7010,8 +7017,8 @@ class IfcConstructionEquipmentResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionEquipmentResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7020,8 +7027,8 @@ class IfcConstructionEquipmentResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionMaterialResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7030,8 +7037,8 @@ class IfcConstructionMaterialResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionMaterialResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7040,8 +7047,8 @@ class IfcConstructionMaterialResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcConstructionProductResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7050,8 +7057,8 @@ class IfcConstructionProductResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConstructionProductResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7060,8 +7067,8 @@ class IfcConstructionProductResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcController_CorrectPredefinedType: SCOPE = 'entity' @@ -7070,8 +7077,8 @@ class IfcController_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcController_CorrectTypeAssigned: SCOPE = 'entity' @@ -7080,8 +7087,8 @@ class IfcController_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccontrollertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccontrollertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcControllerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7090,8 +7097,8 @@ class IfcControllerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7100,8 +7107,8 @@ class IfcConveyorSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcConveyorSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7110,8 +7117,8 @@ class IfcConveyorSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcconveyorsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcconveyorsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcConveyorSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7120,8 +7127,8 @@ class IfcConveyorSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectPredefinedType: SCOPE = 'entity' @@ -7130,8 +7137,8 @@ class IfcCooledBeam_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCooledBeam_CorrectTypeAssigned: SCOPE = 'entity' @@ -7140,8 +7147,8 @@ class IfcCooledBeam_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccooledbeamtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccooledbeamtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCooledBeamType_CorrectPredefinedType: SCOPE = 'entity' @@ -7150,8 +7157,8 @@ class IfcCooledBeamType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectPredefinedType: SCOPE = 'entity' @@ -7160,8 +7167,8 @@ class IfcCoolingTower_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCoolingTower_CorrectTypeAssigned: SCOPE = 'entity' @@ -7170,8 +7177,8 @@ class IfcCoolingTower_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccoolingtowertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccoolingtowertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoolingTowerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7180,8 +7187,8 @@ class IfcCoolingTowerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCourse_CorrectPredefinedType: SCOPE = 'entity' @@ -7190,8 +7197,8 @@ class IfcCourse_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCourse_CorrectTypeAssigned: SCOPE = 'entity' @@ -7200,8 +7207,8 @@ class IfcCourse_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccoursetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccoursetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCourseType_CorrectPredefinedType: SCOPE = 'entity' @@ -7210,8 +7217,8 @@ class IfcCourseType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCovering_CorrectPredefinedType: SCOPE = 'entity' @@ -7220,8 +7227,8 @@ class IfcCovering_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCovering_CorrectTypeAssigned: SCOPE = 'entity' @@ -7230,8 +7237,8 @@ class IfcCovering_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccoveringtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccoveringtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCoveringType_CorrectPredefinedType: SCOPE = 'entity' @@ -7240,8 +7247,8 @@ class IfcCoveringType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcCrewResource_CorrectPredefinedType: SCOPE = 'entity' @@ -7250,8 +7257,8 @@ class IfcCrewResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCrewResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7260,8 +7267,8 @@ class IfcCrewResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcCsgPrimitive3D_Dim(self): return 3 @@ -7273,8 +7280,8 @@ class IfcCurtainWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcCurtainWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -7283,8 +7290,8 @@ class IfcCurtainWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccurtainwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifccurtainwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcCurtainWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -7293,8 +7300,8 @@ class IfcCurtainWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcCurve_Dim(self): return IfcCurveDim(self) @@ -7306,9 +7313,9 @@ class IfcCurveStyle_IdentifiableCurveStyle: @staticmethod def __call__(self): - curvefont = getattr(self, 'CurveFont', INDETERMINATE) - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) - curvecolour = getattr(self, 'CurveColour', INDETERMINATE) + curvefont = express_getattr(self, 'CurveFont', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) + curvecolour = express_getattr(self, 'CurveColour', INDETERMINATE) assert (exists(curvefont) or exists(curvewidth) or exists(curvecolour)) is not False class IfcCurveStyle_MeasureOfWidth: @@ -7318,7 +7325,7 @@ class IfcCurveStyle_MeasureOfWidth: @staticmethod def __call__(self): - curvewidth = getattr(self, 'CurveWidth', INDETERMINATE) + curvewidth = express_getattr(self, 'CurveWidth', INDETERMINATE) assert (not exists(curvewidth) or 'ifc4x3_tc1.ifcpositivelengthmeasure' in typeof(curvewidth) or ('ifc4x3_tc1.ifcdescriptivemeasure' in typeof(curvewidth) and curvewidth == 'bylayer')) is not False class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @@ -7328,7 +7335,7 @@ class IfcCurveStyleFontPattern_VisibleLengthGreaterEqualZero: @staticmethod def __call__(self): - visiblesegmentlength = getattr(self, 'VisibleSegmentLength', INDETERMINATE) + visiblesegmentlength = express_getattr(self, 'VisibleSegmentLength', INDETERMINATE) assert (visiblesegmentlength >= 0.0) is not False class IfcDamper_CorrectPredefinedType: @@ -7338,8 +7345,8 @@ class IfcDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -7348,8 +7355,8 @@ class IfcDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -7358,8 +7365,8 @@ class IfcDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDeepFoundation_CorrectTypeAssigned: SCOPE = 'entity' @@ -7368,8 +7375,8 @@ class IfcDeepFoundation_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdeepfoundationtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdeepfoundationtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDerivedProfileDef_InvariantProfileType: SCOPE = 'entity' @@ -7378,8 +7385,8 @@ class IfcDerivedProfileDef_InvariantProfileType: @staticmethod def __call__(self): - parentprofile = getattr(self, 'ParentProfile', INDETERMINATE) - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False + parentprofile = express_getattr(self, 'ParentProfile', INDETERMINATE) + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(parentprofile, 'ProfileType', INDETERMINATE)) is not False class IfcDerivedUnit_WR1: SCOPE = 'entity' @@ -7388,8 +7395,8 @@ class IfcDerivedUnit_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof(elements) > 1 or (sizeof(elements) == 1 and express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) != 1)) is not False class IfcDerivedUnit_WR2: SCOPE = 'entity' @@ -7398,11 +7405,11 @@ class IfcDerivedUnit_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 + unittype = express_getattr(self, 'UnitType', INDETERMINATE) + assert (unittype != express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) or (unittype == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedType', INDETERMINATE)))) is not False def calc_IfcDerivedUnit_Dimensions(self): - elements = getattr(self, 'Elements', INDETERMINATE) + elements = express_getattr(self, 'Elements', INDETERMINATE) return IfcDeriveDimensionalExponents(elements) class IfcDirection_MagnitudeGreaterZero: @@ -7412,11 +7419,11 @@ class IfcDirection_MagnitudeGreaterZero: @staticmethod def __call__(self): - directionratios = getattr(self, 'DirectionRatios', INDETERMINATE) + directionratios = express_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) + directionratios = express_getattr(self, 'DirectionRatios', INDETERMINATE) return hiindex(directionratios) class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @@ -7426,9 +7433,9 @@ class IfcDirectrixCurveSweptAreaSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_tc1.ifcconic', 'ifc4x3_tc1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcDiscreteAccessory_CorrectPredefinedType: @@ -7438,8 +7445,8 @@ class IfcDiscreteAccessory_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDiscreteAccessory_CorrectTypeAssigned: SCOPE = 'entity' @@ -7448,8 +7455,8 @@ class IfcDiscreteAccessory_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdiscreteaccessorytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdiscreteaccessorytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDiscreteAccessoryType_CorrectPredefinedType: SCOPE = 'entity' @@ -7458,8 +7465,8 @@ class IfcDiscreteAccessoryType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7468,8 +7475,8 @@ class IfcDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7478,8 +7485,8 @@ class IfcDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7488,8 +7495,8 @@ class IfcDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectPredefinedType: SCOPE = 'entity' @@ -7498,8 +7505,8 @@ class IfcDistributionChamberElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDistributionChamberElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -7508,8 +7515,8 @@ class IfcDistributionChamberElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdistributionchamberelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdistributionchamberelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDistributionChamberElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -7518,8 +7525,8 @@ class IfcDistributionChamberElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDistributionSystem_CorrectPredefinedType: SCOPE = 'entity' @@ -7528,8 +7535,8 @@ class IfcDistributionSystem_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDocumentReference_WR1: SCOPE = 'entity' @@ -7538,8 +7545,8 @@ class IfcDocumentReference_WR1: @staticmethod def __call__(self): - name = getattr(self, 'Name', INDETERMINATE) - referenceddocument = getattr(self, 'ReferencedDocument', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) + referenceddocument = express_getattr(self, 'ReferencedDocument', INDETERMINATE) assert exists(name) ^ exists(referenceddocument) is not False class IfcDoor_CorrectPredefinedType: @@ -7549,8 +7556,8 @@ class IfcDoor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDoor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7559,8 +7566,8 @@ class IfcDoor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdoortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcdoortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDoorLiningProperties_WR31: SCOPE = 'entity' @@ -7569,8 +7576,8 @@ class IfcDoorLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcDoorLiningProperties_WR32: @@ -7580,8 +7587,8 @@ class IfcDoorLiningProperties_WR32: @staticmethod def __call__(self): - thresholddepth = getattr(self, 'ThresholdDepth', INDETERMINATE) - thresholdthickness = getattr(self, 'ThresholdThickness', INDETERMINATE) + thresholddepth = express_getattr(self, 'ThresholdDepth', INDETERMINATE) + thresholdthickness = express_getattr(self, 'ThresholdThickness', INDETERMINATE) assert (not (exists(thresholddepth) and (not exists(thresholdthickness)))) is not False class IfcDoorLiningProperties_WR33: @@ -7591,8 +7598,8 @@ class IfcDoorLiningProperties_WR33: @staticmethod def __call__(self): - transomthickness = getattr(self, 'TransomThickness', INDETERMINATE) - transomoffset = getattr(self, 'TransomOffset', INDETERMINATE) + transomthickness = express_getattr(self, 'TransomThickness', INDETERMINATE) + transomoffset = express_getattr(self, 'TransomOffset', INDETERMINATE) assert (exists(transomoffset) and exists(transomthickness)) ^ (not exists(transomoffset) and (not exists(transomthickness))) is not False class IfcDoorLiningProperties_WR34: @@ -7602,8 +7609,8 @@ class IfcDoorLiningProperties_WR34: @staticmethod def __call__(self): - casingthickness = getattr(self, 'CasingThickness', INDETERMINATE) - casingdepth = getattr(self, 'CasingDepth', INDETERMINATE) + casingthickness = express_getattr(self, 'CasingThickness', INDETERMINATE) + casingdepth = express_getattr(self, 'CasingDepth', INDETERMINATE) assert (exists(casingdepth) and exists(casingthickness)) ^ (not exists(casingdepth) and (not exists(casingthickness))) is not False class IfcDoorLiningProperties_WR35: @@ -7613,7 +7620,7 @@ class IfcDoorLiningProperties_WR35: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_tc1.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_tc1.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcDoorPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -7622,7 +7629,7 @@ class IfcDoorPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_tc1.ifcdoortype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_tc1.ifcdoortype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcDoorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7631,8 +7638,8 @@ class IfcDoorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDraughtingPreDefinedColour_PreDefinedColourNames: SCOPE = 'entity' @@ -7641,7 +7648,7 @@ class IfcDraughtingPreDefinedColour_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 + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', 'white', 'bylayer']) is not False class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: SCOPE = 'entity' @@ -7650,7 +7657,7 @@ class IfcDraughtingPreDefinedCurveFont_PreDefinedCurveFontNames: @staticmethod def __call__(self): - assert (getattr(getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False + assert (express_getattr(express_getattr(self, 'Name', INDETERMINATE), 'lower', INDETERMINATE)() in ['continuous', 'chain', 'chaindoubledash', 'dashed', 'dotted', 'bylayer']) is not False class IfcDuctFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -7659,8 +7666,8 @@ class IfcDuctFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -7669,8 +7676,8 @@ class IfcDuctFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcductfittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcductfittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -7679,8 +7686,8 @@ class IfcDuctFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -7689,8 +7696,8 @@ class IfcDuctSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -7699,8 +7706,8 @@ class IfcDuctSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcductsegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcductsegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -7709,8 +7716,8 @@ class IfcDuctSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectPredefinedType: SCOPE = 'entity' @@ -7719,8 +7726,8 @@ class IfcDuctSilencer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcDuctSilencer_CorrectTypeAssigned: SCOPE = 'entity' @@ -7729,8 +7736,8 @@ class IfcDuctSilencer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcductsilencertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcductsilencertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcDuctSilencerType_CorrectPredefinedType: SCOPE = 'entity' @@ -7739,8 +7746,8 @@ class IfcDuctSilencerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEarthworksCut_CorrectPredefinedType: SCOPE = 'entity' @@ -7749,8 +7756,8 @@ class IfcEarthworksCut_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEarthworksFill_CorrectPredefinedType: SCOPE = 'entity' @@ -7759,8 +7766,8 @@ class IfcEarthworksFill_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEdgeLoop_IsClosed: SCOPE = 'entity' @@ -7769,9 +7776,9 @@ class IfcEdgeLoop_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 + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) + ne = express_getattr(self, 'Ne', INDETERMINATE) + assert (express_getattr(express_getitem(edgelist, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) == express_getattr(express_getitem(edgelist, ne - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE)) is not False class IfcEdgeLoop_IsContinuous: SCOPE = 'entity' @@ -7783,7 +7790,7 @@ class IfcEdgeLoop_IsContinuous: assert IfcLoopHeadToTail(self) is not False def calc_IfcEdgeLoop_Ne(self): - edgelist = getattr(self, 'EdgeList', INDETERMINATE) + edgelist = express_getattr(self, 'EdgeList', INDETERMINATE) return sizeof(edgelist) class IfcElectricAppliance_CorrectPredefinedType: @@ -7793,8 +7800,8 @@ class IfcElectricAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -7803,8 +7810,8 @@ class IfcElectricAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7813,8 +7820,8 @@ class IfcElectricApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectPredefinedType: SCOPE = 'entity' @@ -7823,8 +7830,8 @@ class IfcElectricDistributionBoard_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricDistributionBoard_CorrectTypeAssigned: SCOPE = 'entity' @@ -7833,8 +7840,8 @@ class IfcElectricDistributionBoard_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricdistributionboardtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricdistributionboardtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricDistributionBoardType_CorrectPredefinedType: SCOPE = 'entity' @@ -7843,8 +7850,8 @@ class IfcElectricDistributionBoardType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7853,8 +7860,8 @@ class IfcElectricFlowStorageDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowStorageDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7863,8 +7870,8 @@ class IfcElectricFlowStorageDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricflowstoragedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricflowstoragedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowStorageDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7873,8 +7880,8 @@ class IfcElectricFlowStorageDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -7883,8 +7890,8 @@ class IfcElectricFlowTreatmentDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -7893,8 +7900,8 @@ class IfcElectricFlowTreatmentDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricflowtreatmentdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricflowtreatmentdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricFlowTreatmentDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -7903,8 +7910,8 @@ class IfcElectricFlowTreatmentDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectPredefinedType: SCOPE = 'entity' @@ -7913,8 +7920,8 @@ class IfcElectricGenerator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricGenerator_CorrectTypeAssigned: SCOPE = 'entity' @@ -7923,8 +7930,8 @@ class IfcElectricGenerator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricgeneratortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricgeneratortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricGeneratorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7933,8 +7940,8 @@ class IfcElectricGeneratorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectPredefinedType: SCOPE = 'entity' @@ -7943,8 +7950,8 @@ class IfcElectricMotor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricMotor_CorrectTypeAssigned: SCOPE = 'entity' @@ -7953,8 +7960,8 @@ class IfcElectricMotor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricmotortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectricmotortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricMotorType_CorrectPredefinedType: SCOPE = 'entity' @@ -7963,8 +7970,8 @@ class IfcElectricMotorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectPredefinedType: SCOPE = 'entity' @@ -7973,8 +7980,8 @@ class IfcElectricTimeControl_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElectricTimeControl_CorrectTypeAssigned: SCOPE = 'entity' @@ -7983,8 +7990,8 @@ class IfcElectricTimeControl_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectrictimecontroltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelectrictimecontroltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElectricTimeControlType_CorrectPredefinedType: SCOPE = 'entity' @@ -7993,8 +8000,8 @@ class IfcElectricTimeControlType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectPredefinedType: SCOPE = 'entity' @@ -8003,8 +8010,8 @@ class IfcElementAssembly_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcElementAssembly_CorrectTypeAssigned: SCOPE = 'entity' @@ -8013,8 +8020,8 @@ class IfcElementAssembly_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelementassemblytype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcelementassemblytype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcElementAssemblyType_CorrectPredefinedType: SCOPE = 'entity' @@ -8023,8 +8030,8 @@ class IfcElementAssemblyType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcElementQuantity_UniqueQuantityNames: SCOPE = 'entity' @@ -8033,7 +8040,7 @@ class IfcElementQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - quantities = getattr(self, 'Quantities', INDETERMINATE) + quantities = express_getattr(self, 'Quantities', INDETERMINATE) assert IfcUniqueQuantityNames(quantities) is not False class IfcEngine_CorrectPredefinedType: @@ -8043,8 +8050,8 @@ class IfcEngine_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEngine_CorrectTypeAssigned: SCOPE = 'entity' @@ -8053,8 +8060,8 @@ class IfcEngine_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcenginetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcenginetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEngineType_CorrectPredefinedType: SCOPE = 'entity' @@ -8063,8 +8070,8 @@ class IfcEngineType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectPredefinedType: SCOPE = 'entity' @@ -8073,8 +8080,8 @@ class IfcEvaporativeCooler_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporativeCooler_CorrectTypeAssigned: SCOPE = 'entity' @@ -8083,8 +8090,8 @@ class IfcEvaporativeCooler_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcevaporativecoolertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcevaporativecoolertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporativeCoolerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8093,8 +8100,8 @@ class IfcEvaporativeCoolerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectPredefinedType: SCOPE = 'entity' @@ -8103,8 +8110,8 @@ class IfcEvaporator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvaporator_CorrectTypeAssigned: SCOPE = 'entity' @@ -8113,8 +8120,8 @@ class IfcEvaporator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcevaporatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcevaporatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcEvaporatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8123,8 +8130,8 @@ class IfcEvaporatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcEvent_CorrectPredefinedType: SCOPE = 'entity' @@ -8133,8 +8140,8 @@ class IfcEvent_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcEvent_CorrectTypeAssigned: SCOPE = 'entity' @@ -8143,9 +8150,9 @@ class IfcEvent_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (not exists(eventtriggertype) or eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectEventTriggerType: SCOPE = 'entity' @@ -8154,9 +8161,9 @@ class IfcEventType_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 + eventtriggertype = express_getattr(self, 'EventTriggerType', INDETERMINATE) + userdefinedeventtriggertype = express_getattr(self, 'UserDefinedEventTriggerType', INDETERMINATE) + assert (eventtriggertype != express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) or (eventtriggertype == express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedeventtriggertype))) is not False class IfcEventType_CorrectPredefinedType: SCOPE = 'entity' @@ -8165,8 +8172,8 @@ class IfcEventType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcExternalReference_WR1: SCOPE = 'entity' @@ -8175,9 +8182,9 @@ class IfcExternalReference_WR1: @staticmethod def __call__(self): - location = getattr(self, 'Location', INDETERMINATE) - identification = getattr(self, 'Identification', INDETERMINATE) - name = getattr(self, 'Name', INDETERMINATE) + location = express_getattr(self, 'Location', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + name = express_getattr(self, 'Name', INDETERMINATE) assert (exists(identification) or exists(location) or exists(name)) is not False class IfcExtrudedAreaSolid_ValidExtrusionDirection: @@ -8187,7 +8194,7 @@ class IfcExtrudedAreaSolid_ValidExtrusionDirection: @staticmethod def __call__(self): - assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False + assert (IfcDotProduct(IfcDirection(DirectionRatios=[0.0, 0.0, 1.0]), express_getattr(self, 'ExtrudedDirection', INDETERMINATE)) != 0.0) is not False class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -8196,7 +8203,7 @@ class IfcExtrudedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcFace_HasOuterBound: SCOPE = 'entity' @@ -8205,7 +8212,7 @@ class IfcFace_HasOuterBound: @staticmethod def __call__(self): - bounds = getattr(self, 'Bounds', INDETERMINATE) + bounds = express_getattr(self, 'Bounds', INDETERMINATE) assert (sizeof([temp for temp in bounds if 'ifc4x3_tc1.ifcfaceouterbound' in typeof(temp)]) <= 1) is not False def calc_IfcFaceBasedSurfaceModel_Dim(self): @@ -8218,8 +8225,8 @@ class IfcFacilityPartCommon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectPredefinedType: SCOPE = 'entity' @@ -8228,8 +8235,8 @@ class IfcFan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFan_CorrectTypeAssigned: SCOPE = 'entity' @@ -8238,8 +8245,8 @@ class IfcFan_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfantype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfantype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFanType_CorrectPredefinedType: SCOPE = 'entity' @@ -8248,8 +8255,8 @@ class IfcFanType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFastener_CorrectPredefinedType: SCOPE = 'entity' @@ -8258,8 +8265,8 @@ class IfcFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -8268,8 +8275,8 @@ class IfcFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8278,8 +8285,8 @@ class IfcFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFeatureElement_NotContained: SCOPE = 'entity' @@ -8288,7 +8295,7 @@ class IfcFeatureElement_NotContained: @staticmethod def __call__(self): - containedinstructure = getattr(self, 'ContainedInStructure', INDETERMINATE) + containedinstructure = express_getattr(self, 'ContainedInStructure', INDETERMINATE) assert (sizeof(containedinstructure) == 0) is not False class IfcFeatureElementSubtraction_HasNoSubtraction: @@ -8298,7 +8305,7 @@ class IfcFeatureElementSubtraction_HasNoSubtraction: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasOpenings', INDETERMINATE)) == 0) is not False class IfcFeatureElementSubtraction_IsNotFilling: SCOPE = 'entity' @@ -8307,7 +8314,7 @@ class IfcFeatureElementSubtraction_IsNotFilling: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'FillsVoids', INDETERMINATE)) == 0) is not False class IfcFillAreaStyle_ConsistentHatchStyleDef: SCOPE = 'entity' @@ -8316,7 +8323,7 @@ class IfcFillAreaStyle_ConsistentHatchStyleDef: @staticmethod def __call__(self): - assert IfcCorrectFillAreaStyle(getattr(self, 'FillStyles', INDETERMINATE)) is not False + assert IfcCorrectFillAreaStyle(express_getattr(self, 'FillStyles', INDETERMINATE)) is not False class IfcFillAreaStyle_MaxOneColour: SCOPE = 'entity' @@ -8325,7 +8332,7 @@ class IfcFillAreaStyle_MaxOneColour: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_tc1.ifccolour' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_tc1.ifccolour' in typeof(style)]) <= 1) is not False class IfcFillAreaStyle_MaxOneExtHatchStyle: SCOPE = 'entity' @@ -8334,7 +8341,7 @@ class IfcFillAreaStyle_MaxOneExtHatchStyle: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_tc1.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'FillStyles', INDETERMINATE) if 'ifc4x3_tc1.ifcexternallydefinedhatchstyle' in typeof(style)]) <= 1) is not False class IfcFillAreaStyleHatching_PatternStart2D: SCOPE = 'entity' @@ -8343,8 +8350,8 @@ class IfcFillAreaStyleHatching_PatternStart2D: @staticmethod def __call__(self): - patternstart = getattr(self, 'PatternStart', INDETERMINATE) - assert (not exists(patternstart) or getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False + patternstart = express_getattr(self, 'PatternStart', INDETERMINATE) + assert (not exists(patternstart) or express_getattr(patternstart, 'Dim', INDETERMINATE) == 2) is not False class IfcFillAreaStyleHatching_RefHatchLine2D: SCOPE = 'entity' @@ -8353,8 +8360,8 @@ class IfcFillAreaStyleHatching_RefHatchLine2D: @staticmethod def __call__(self): - pointofreferencehatchline = getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) - assert (not exists(pointofreferencehatchline) or getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False + pointofreferencehatchline = express_getattr(self, 'PointOfReferenceHatchLine', INDETERMINATE) + assert (not exists(pointofreferencehatchline) or express_getattr(pointofreferencehatchline, 'Dim', INDETERMINATE) == 2) is not False class IfcFilter_CorrectPredefinedType: SCOPE = 'entity' @@ -8363,8 +8370,8 @@ class IfcFilter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFilter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8373,8 +8380,8 @@ class IfcFilter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfiltertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfiltertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFilterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8383,8 +8390,8 @@ class IfcFilterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -8393,8 +8400,8 @@ class IfcFireSuppressionTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFireSuppressionTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -8403,8 +8410,8 @@ class IfcFireSuppressionTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfiresuppressionterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfiresuppressionterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFireSuppressionTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -8413,8 +8420,8 @@ class IfcFireSuppressionTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectPredefinedType: SCOPE = 'entity' @@ -8423,8 +8430,8 @@ class IfcFlowInstrument_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowInstrument_CorrectTypeAssigned: SCOPE = 'entity' @@ -8433,8 +8440,8 @@ class IfcFlowInstrument_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcflowinstrumenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcflowinstrumenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowInstrumentType_CorrectPredefinedType: SCOPE = 'entity' @@ -8443,8 +8450,8 @@ class IfcFlowInstrumentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectPredefinedType: SCOPE = 'entity' @@ -8453,8 +8460,8 @@ class IfcFlowMeter_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFlowMeter_CorrectTypeAssigned: SCOPE = 'entity' @@ -8463,8 +8470,8 @@ class IfcFlowMeter_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcflowmetertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcflowmetertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFlowMeterType_CorrectPredefinedType: SCOPE = 'entity' @@ -8473,8 +8480,8 @@ class IfcFlowMeterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFooting_CorrectPredefinedType: SCOPE = 'entity' @@ -8483,8 +8490,8 @@ class IfcFooting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFooting_CorrectTypeAssigned: SCOPE = 'entity' @@ -8493,8 +8500,8 @@ class IfcFooting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfootingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfootingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFootingType_CorrectPredefinedType: SCOPE = 'entity' @@ -8503,8 +8510,8 @@ class IfcFootingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcFurniture_CorrectPredefinedType: SCOPE = 'entity' @@ -8513,8 +8520,8 @@ class IfcFurniture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcFurniture_CorrectTypeAssigned: SCOPE = 'entity' @@ -8523,8 +8530,8 @@ class IfcFurniture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfurnituretype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcfurnituretype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcFurnitureType_CorrectPredefinedType: SCOPE = 'entity' @@ -8533,8 +8540,8 @@ class IfcFurnitureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectPredefinedType: SCOPE = 'entity' @@ -8543,8 +8550,8 @@ class IfcGeographicElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGeographicElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -8553,8 +8560,8 @@ class IfcGeographicElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcgeographicelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcgeographicelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcGeographicElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -8563,8 +8570,8 @@ class IfcGeographicElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcGeometricCurveSet_NoSurfaces: SCOPE = 'entity' @@ -8573,7 +8580,7 @@ class IfcGeometricCurveSet_NoSurfaces: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_tc1.ifcsurface' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Elements', INDETERMINATE) if 'ifc4x3_tc1.ifcsurface' in typeof(temp)]) == 0) is not False class IfcGeometricRepresentationContext_North2D: SCOPE = 'entity' @@ -8582,8 +8589,8 @@ class IfcGeometricRepresentationContext_North2D: @staticmethod def __call__(self): - truenorth = getattr(self, 'TrueNorth', INDETERMINATE) - assert (not exists(truenorth) or hiindex(getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False + truenorth = express_getattr(self, 'TrueNorth', INDETERMINATE) + assert (not exists(truenorth) or hiindex(express_getattr(truenorth, 'DirectionRatios', INDETERMINATE)) == 2) is not False class IfcGeometricRepresentationSubContext_NoCoordOperation: SCOPE = 'entity' @@ -8592,7 +8599,7 @@ class IfcGeometricRepresentationSubContext_NoCoordOperation: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'HasCoordinateOperation', INDETERMINATE)) == 0) is not False class IfcGeometricRepresentationSubContext_ParentNoSub: SCOPE = 'entity' @@ -8601,7 +8608,7 @@ class IfcGeometricRepresentationSubContext_ParentNoSub: @staticmethod def __call__(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) assert (not 'ifc4x3_tc1.ifcgeometricrepresentationsubcontext' in typeof(parentcontext)) is not False class IfcGeometricRepresentationSubContext_UserTargetProvided: @@ -8611,25 +8618,25 @@ class IfcGeometricRepresentationSubContext_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 + targetview = express_getattr(self, 'TargetView', INDETERMINATE) + userdefinedtargetview = express_getattr(self, 'UserDefinedTargetView', INDETERMINATE) + assert (targetview != express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) or (targetview == express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_getattr(parentcontext, 'WorldCoordinateSystem', INDETERMINATE) def calc_IfcGeometricRepresentationSubContext_CoordinateSpaceDimension(self): - parentcontext = getattr(self, 'ParentContext', INDETERMINATE) - return getattr(parentcontext, 'CoordinateSpaceDimension', INDETERMINATE) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return express_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))) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'TrueNorth', INDETERMINATE), IfcConvertDirectionInto2D(express_getitem(express_getattr(express_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) + parentcontext = express_getattr(self, 'ParentContext', INDETERMINATE) + return nvl(express_getattr(parentcontext, 'Precision', INDETERMINATE), 1) class IfcGeometricSet_ConsistentDim: SCOPE = 'entity' @@ -8638,12 +8645,12 @@ class IfcGeometricSet_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 + elements = express_getattr(self, 'Elements', INDETERMINATE) + assert (sizeof([temp for temp in elements if express_getattr(temp, 'Dim', INDETERMINATE) != express_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) + elements = express_getattr(self, 'Elements', INDETERMINATE) + return express_getattr(express_getitem(elements, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) class IfcGeotechnicalStratum_CorrectPredefinedType: SCOPE = 'entity' @@ -8652,8 +8659,8 @@ class IfcGeotechnicalStratum_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcGridAxis_WR1: SCOPE = 'entity' @@ -8662,8 +8669,8 @@ class IfcGridAxis_WR1: @staticmethod def __call__(self): - axiscurve = getattr(self, 'AxisCurve', INDETERMINATE) - assert (getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False + axiscurve = express_getattr(self, 'AxisCurve', INDETERMINATE) + assert (express_getattr(axiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcGridAxis_WR2: SCOPE = 'entity' @@ -8672,9 +8679,9 @@ class IfcGridAxis_WR2: @staticmethod def __call__(self): - partofw = getattr(self, 'PartOfW', INDETERMINATE) - partofv = getattr(self, 'PartOfV', INDETERMINATE) - partofu = getattr(self, 'PartOfU', INDETERMINATE) + partofw = express_getattr(self, 'PartOfW', INDETERMINATE) + partofv = express_getattr(self, 'PartOfV', INDETERMINATE) + partofu = express_getattr(self, 'PartOfU', INDETERMINATE) assert (sizeof(partofu) == 1) ^ (sizeof(partofv) == 1) ^ (sizeof(partofw) == 1) is not False def calc_IfcHalfSpaceSolid_Dim(self): @@ -8687,8 +8694,8 @@ class IfcHeatExchanger_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHeatExchanger_CorrectTypeAssigned: SCOPE = 'entity' @@ -8697,8 +8704,8 @@ class IfcHeatExchanger_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcheatexchangertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcheatexchangertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHeatExchangerType_CorrectPredefinedType: SCOPE = 'entity' @@ -8707,8 +8714,8 @@ class IfcHeatExchangerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectPredefinedType: SCOPE = 'entity' @@ -8717,8 +8724,8 @@ class IfcHumidifier_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcHumidifier_CorrectTypeAssigned: SCOPE = 'entity' @@ -8727,8 +8734,8 @@ class IfcHumidifier_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifchumidifiertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifchumidifiertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcHumidifierType_CorrectPredefinedType: SCOPE = 'entity' @@ -8737,8 +8744,8 @@ class IfcHumidifierType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIShapeProfileDef_ValidFilletRadius: SCOPE = 'entity' @@ -8747,11 +8754,11 @@ class IfcIShapeProfileDef_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) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) + filletradius = express_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: @@ -8761,8 +8768,8 @@ class IfcIShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - overalldepth = getattr(self, 'OverallDepth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + overalldepth = express_getattr(self, 'OverallDepth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (2.0 * flangethickness < overalldepth) is not False class IfcIShapeProfileDef_ValidWebThickness: @@ -8772,8 +8779,8 @@ class IfcIShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - overallwidth = getattr(self, 'OverallWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + overallwidth = express_getattr(self, 'OverallWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < overallwidth) is not False class IfcImpactProtectionDevice_CorrectPredefinedType: @@ -8783,8 +8790,8 @@ class IfcImpactProtectionDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcImpactProtectionDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -8793,8 +8800,8 @@ class IfcImpactProtectionDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcimpactprotectiondevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcimpactprotectiondevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcImpactProtectionDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8803,8 +8810,8 @@ class IfcImpactProtectionDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIndexedPolyCurve_Consecutive: SCOPE = 'entity' @@ -8813,7 +8820,7 @@ class IfcIndexedPolyCurve_Consecutive: @staticmethod def __call__(self): - segments = getattr(self, 'Segments', INDETERMINATE) + segments = express_getattr(self, 'Segments', INDETERMINATE) assert (not exists(segments) or IfcConsecutiveSegments(segments)) is not False class IfcInterceptor_CorrectPredefinedType: @@ -8823,8 +8830,8 @@ class IfcInterceptor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcInterceptor_CorrectTypeAssigned: SCOPE = 'entity' @@ -8833,8 +8840,8 @@ class IfcInterceptor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcinterceptortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcinterceptortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcInterceptorType_CorrectPredefinedType: SCOPE = 'entity' @@ -8843,8 +8850,8 @@ class IfcInterceptorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcIntersectionCurve_DistinctSurfaces: SCOPE = 'entity' @@ -8853,7 +8860,7 @@ class IfcIntersectionCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) != IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcIntersectionCurve_TwoPCurves: SCOPE = 'entity' @@ -8862,7 +8869,7 @@ class IfcIntersectionCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcJunctionBox_CorrectPredefinedType: SCOPE = 'entity' @@ -8871,8 +8878,8 @@ class IfcJunctionBox_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcJunctionBox_CorrectTypeAssigned: SCOPE = 'entity' @@ -8881,8 +8888,8 @@ class IfcJunctionBox_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcjunctionboxtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcjunctionboxtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcJunctionBoxType_CorrectPredefinedType: SCOPE = 'entity' @@ -8891,8 +8898,8 @@ class IfcJunctionBoxType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcKerb_CorrectPredefinedType: SCOPE = 'entity' @@ -8901,8 +8908,8 @@ class IfcKerb_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcKerb_CorrectTypeAssigned: SCOPE = 'entity' @@ -8911,8 +8918,8 @@ class IfcKerb_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifckerbtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifckerbtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcKerbType_CorrectPredefinedType: SCOPE = 'entity' @@ -8921,8 +8928,8 @@ class IfcKerbType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLShapeProfileDef_ValidThickness: SCOPE = 'entity' @@ -8931,9 +8938,9 @@ class IfcLShapeProfileDef_ValidThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - width = getattr(self, 'Width', INDETERMINATE) - thickness = getattr(self, 'Thickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + thickness = express_getattr(self, 'Thickness', INDETERMINATE) assert (thickness < depth and (not exists(width) or thickness < width)) is not False class IfcLaborResource_CorrectPredefinedType: @@ -8943,8 +8950,8 @@ class IfcLaborResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLaborResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -8953,8 +8960,8 @@ class IfcLaborResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False class IfcLamp_CorrectPredefinedType: SCOPE = 'entity' @@ -8963,8 +8970,8 @@ class IfcLamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -8973,8 +8980,8 @@ class IfcLamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifclamptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifclamptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLampType_CorrectPredefinedType: SCOPE = 'entity' @@ -8983,8 +8990,8 @@ class IfcLampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectPredefinedType: SCOPE = 'entity' @@ -8993,8 +9000,8 @@ class IfcLightFixture_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLightFixture_CorrectTypeAssigned: SCOPE = 'entity' @@ -9003,8 +9010,8 @@ class IfcLightFixture_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifclightfixturetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifclightfixturetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLightFixtureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9013,8 +9020,8 @@ class IfcLightFixtureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLine_SameDim: SCOPE = 'entity' @@ -9023,9 +9030,9 @@ class IfcLine_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 + pnt = express_getattr(self, 'Pnt', INDETERMINATE) + dir = express_getattr(self, 'Dir', INDETERMINATE) + assert (express_getattr(dir, 'Dim', INDETERMINATE) == express_getattr(pnt, 'Dim', INDETERMINATE)) is not False class IfcLiquidTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -9034,8 +9041,8 @@ class IfcLiquidTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcLiquidTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -9044,8 +9051,8 @@ class IfcLiquidTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcliquidterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcliquidterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcLiquidTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -9054,8 +9061,8 @@ class IfcLiquidTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcLocalPlacement_WR21: SCOPE = 'entity' @@ -9064,8 +9071,8 @@ class IfcLocalPlacement_WR21: @staticmethod def __call__(self): - placementrelto = getattr(self, 'PlacementRelTo', INDETERMINATE) - relativeplacement = getattr(self, 'RelativePlacement', INDETERMINATE) + placementrelto = express_getattr(self, 'PlacementRelTo', INDETERMINATE) + relativeplacement = express_getattr(self, 'RelativePlacement', INDETERMINATE) assert IfcCorrectLocalPlacement(relativeplacement, placementrelto) is not False class IfcMarineFacility_CorrectPredefinedType: @@ -9075,8 +9082,8 @@ class IfcMarineFacility_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMarinePart_CorrectPredefinedType: SCOPE = 'entity' @@ -9085,8 +9092,8 @@ class IfcMarinePart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: SCOPE = 'entity' @@ -9095,7 +9102,7 @@ class IfcMaterialDefinitionRepresentation_OnlyStyledRepresentations: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_tc1.ifcstyledrepresentation' in typeof(temp)]) == 0) is not False class IfcMaterialLayer_NormalizedPriority: @@ -9105,7 +9112,7 @@ class IfcMaterialLayer_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False def calc_IfcMaterialLayerSet_TotalThickness(self): @@ -9118,7 +9125,7 @@ class IfcMaterialProfile_NormalizedPriority: @staticmethod def __call__(self): - priority = getattr(self, 'Priority', INDETERMINATE) + priority = express_getattr(self, 'Priority', INDETERMINATE) assert (not exists(priority) or 0 <= priority <= 100) is not False class IfcMechanicalFastener_CorrectPredefinedType: @@ -9128,8 +9135,8 @@ class IfcMechanicalFastener_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMechanicalFastener_CorrectTypeAssigned: SCOPE = 'entity' @@ -9138,8 +9145,8 @@ class IfcMechanicalFastener_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmechanicalfastenertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmechanicalfastenertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMechanicalFastenerType_CorrectPredefinedType: SCOPE = 'entity' @@ -9148,8 +9155,8 @@ class IfcMechanicalFastenerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9158,8 +9165,8 @@ class IfcMedicalDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMedicalDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9168,8 +9175,8 @@ class IfcMedicalDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmedicaldevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmedicaldevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMedicalDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9178,8 +9185,8 @@ class IfcMedicalDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMember_CorrectPredefinedType: SCOPE = 'entity' @@ -9188,8 +9195,8 @@ class IfcMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMember_CorrectTypeAssigned: SCOPE = 'entity' @@ -9198,8 +9205,8 @@ class IfcMember_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmembertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmembertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMemberType_CorrectPredefinedType: SCOPE = 'entity' @@ -9208,8 +9215,8 @@ class IfcMemberType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_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) @@ -9221,8 +9228,8 @@ class IfcMobileTelecommunicationsAppliance_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: SCOPE = 'entity' @@ -9231,8 +9238,8 @@ class IfcMobileTelecommunicationsAppliance_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmobiletelecommunicationsappliancetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmobiletelecommunicationsappliancetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMobileTelecommunicationsApplianceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9241,8 +9248,8 @@ class IfcMobileTelecommunicationsApplianceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -9251,8 +9258,8 @@ class IfcMooringDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMooringDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -9261,8 +9268,8 @@ class IfcMooringDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmooringdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmooringdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMooringDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -9271,8 +9278,8 @@ class IfcMooringDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectPredefinedType: SCOPE = 'entity' @@ -9281,8 +9288,8 @@ class IfcMotorConnection_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcMotorConnection_CorrectTypeAssigned: SCOPE = 'entity' @@ -9291,8 +9298,8 @@ class IfcMotorConnection_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmotorconnectiontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcmotorconnectiontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcMotorConnectionType_CorrectPredefinedType: SCOPE = 'entity' @@ -9301,8 +9308,8 @@ class IfcMotorConnectionType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcNamedUnit_WR1: SCOPE = 'entity' @@ -9311,7 +9318,7 @@ class IfcNamedUnit_WR1: @staticmethod def __call__(self): - assert IfcCorrectDimensions(getattr(self, 'UnitType', INDETERMINATE), getattr(self, 'Dimensions', INDETERMINATE)) is not False + assert IfcCorrectDimensions(express_getattr(self, 'UnitType', INDETERMINATE), express_getattr(self, 'Dimensions', INDETERMINATE)) is not False class IfcNavigationElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9320,8 +9327,8 @@ class IfcNavigationElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcNavigationElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9330,8 +9337,8 @@ class IfcNavigationElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcnavigationelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcnavigationelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcNavigationElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9340,8 +9347,8 @@ class IfcNavigationElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcObject_UniquePropertySetNames: SCOPE = 'entity' @@ -9350,7 +9357,7 @@ class IfcObject_UniquePropertySetNames: @staticmethod def __call__(self): - isdefinedby = getattr(self, 'IsDefinedBy', INDETERMINATE) + isdefinedby = express_getattr(self, 'IsDefinedBy', INDETERMINATE) assert (sizeof(isdefinedby) == 0 or IfcUniqueDefinitionNames(isdefinedby)) is not False class IfcObjective_WR21: @@ -9360,8 +9367,8 @@ class IfcObjective_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 + objectivequalifier = express_getattr(self, 'ObjectiveQualifier', INDETERMINATE) + assert (objectivequalifier != express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) or (objectivequalifier == express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'UserDefinedQualifier', INDETERMINATE)))) is not False class IfcOccupant_WR31: SCOPE = 'entity' @@ -9370,8 +9377,8 @@ class IfcOccupant_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not predefinedtype == express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcOffsetCurve2D_DimIs2D: SCOPE = 'entity' @@ -9380,8 +9387,8 @@ class IfcOffsetCurve2D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 2) is not False class IfcOffsetCurve3D_DimIs2D: SCOPE = 'entity' @@ -9390,8 +9397,8 @@ class IfcOffsetCurve3D_DimIs2D: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) - assert (getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) + assert (express_getattr(basiscurve, 'Dim', INDETERMINATE) == 3) is not False class IfcOpenCrossProfileDef_CorrectProfileType: SCOPE = 'entity' @@ -9400,7 +9407,7 @@ class IfcOpenCrossProfileDef_CorrectProfileType: @staticmethod def __call__(self): - assert (getattr(self, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False + assert (express_getattr(self, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)) is not False class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: SCOPE = 'entity' @@ -9409,8 +9416,8 @@ class IfcOpenCrossProfileDef_CorrespondingSlopeWidths: @staticmethod def __call__(self): - widths = getattr(self, 'Widths', INDETERMINATE) - slopes = getattr(self, 'Slopes', INDETERMINATE) + widths = express_getattr(self, 'Widths', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) assert (sizeof(slopes) == sizeof(widths)) is not False class IfcOpenCrossProfileDef_CorrespondingTags: @@ -9420,8 +9427,8 @@ class IfcOpenCrossProfileDef_CorrespondingTags: @staticmethod def __call__(self): - slopes = getattr(self, 'Slopes', INDETERMINATE) - tags = getattr(self, 'Tags', INDETERMINATE) + slopes = express_getattr(self, 'Slopes', INDETERMINATE) + tags = express_getattr(self, 'Tags', INDETERMINATE) assert (not exists(tags) or sizeof(tags) == sizeof(slopes) + 1) is not False class IfcOpeningElement_CorrectPredefinedType: @@ -9431,8 +9438,8 @@ class IfcOpeningElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOrientedEdge_EdgeElementNotOriented: SCOPE = 'entity' @@ -9441,18 +9448,18 @@ class IfcOrientedEdge_EdgeElementNotOriented: @staticmethod def __call__(self): - edgeelement = getattr(self, 'EdgeElement', INDETERMINATE) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) assert (not 'ifc4x3_tc1.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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeStart', INDETERMINATE), express_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)) + edgeelement = express_getattr(self, 'EdgeElement', INDETERMINATE) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return IfcBooleanChoose(orientation, express_getattr(edgeelement, 'EdgeEnd', INDETERMINATE), express_getattr(edgeelement, 'EdgeStart', INDETERMINATE)) class IfcOutlet_CorrectPredefinedType: SCOPE = 'entity' @@ -9461,8 +9468,8 @@ class IfcOutlet_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcOutlet_CorrectTypeAssigned: SCOPE = 'entity' @@ -9471,8 +9478,8 @@ class IfcOutlet_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcoutlettype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcoutlettype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcOutletType_CorrectPredefinedType: SCOPE = 'entity' @@ -9481,8 +9488,8 @@ class IfcOutletType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcOwnerHistory_CorrectChangeAction: SCOPE = 'entity' @@ -9491,9 +9498,9 @@ class IfcOwnerHistory_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 + changeaction = express_getattr(self, 'ChangeAction', INDETERMINATE) + lastmodifieddate = express_getattr(self, 'LastModifiedDate', INDETERMINATE) + assert (exists(lastmodifieddate) or (not exists(lastmodifieddate) and (not exists(changeaction))) or (not exists(lastmodifieddate) and exists(changeaction) and (changeaction == express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) or changeaction == express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE)))) is not False class IfcPath_IsContinuous: SCOPE = 'entity' @@ -9511,8 +9518,8 @@ class IfcPavement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPavement_CorrectTypeAssigned: SCOPE = 'entity' @@ -9521,8 +9528,8 @@ class IfcPavement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpavementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpavementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPavementType_CorrectPredefinedType: SCOPE = 'entity' @@ -9531,8 +9538,8 @@ class IfcPavementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPcurve_DimIs2D: SCOPE = 'entity' @@ -9541,8 +9548,8 @@ class IfcPcurve_DimIs2D: @staticmethod def __call__(self): - referencecurve = getattr(self, 'ReferenceCurve', INDETERMINATE) - assert (getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False + referencecurve = express_getattr(self, 'ReferenceCurve', INDETERMINATE) + assert (express_getattr(referencecurve, 'Dim', INDETERMINATE) == 2) is not False class IfcPerson_IdentifiablePerson: SCOPE = 'entity' @@ -9551,9 +9558,9 @@ class IfcPerson_IdentifiablePerson: @staticmethod def __call__(self): - identification = getattr(self, 'Identification', INDETERMINATE) - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) + identification = express_getattr(self, 'Identification', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) assert (exists(identification) or exists(familyname) or exists(givenname)) is not False class IfcPerson_ValidSetOfNames: @@ -9563,9 +9570,9 @@ class IfcPerson_ValidSetOfNames: @staticmethod def __call__(self): - familyname = getattr(self, 'FamilyName', INDETERMINATE) - givenname = getattr(self, 'GivenName', INDETERMINATE) - middlenames = getattr(self, 'MiddleNames', INDETERMINATE) + familyname = express_getattr(self, 'FamilyName', INDETERMINATE) + givenname = express_getattr(self, 'GivenName', INDETERMINATE) + middlenames = express_getattr(self, 'MiddleNames', INDETERMINATE) assert (not exists(middlenames) or exists(familyname) or exists(givenname)) is not False class IfcPhysicalComplexQuantity_NoSelfReference: @@ -9575,7 +9582,7 @@ class IfcPhysicalComplexQuantity_NoSelfReference: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert (sizeof([temp for temp in hasquantities if self == temp]) == 0) is not False class IfcPhysicalComplexQuantity_UniqueQuantityNames: @@ -9585,7 +9592,7 @@ class IfcPhysicalComplexQuantity_UniqueQuantityNames: @staticmethod def __call__(self): - hasquantities = getattr(self, 'HasQuantities', INDETERMINATE) + hasquantities = express_getattr(self, 'HasQuantities', INDETERMINATE) assert IfcUniqueQuantityNames(hasquantities) is not False class IfcPile_CorrectPredefinedType: @@ -9595,8 +9602,8 @@ class IfcPile_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPile_CorrectTypeAssigned: SCOPE = 'entity' @@ -9605,8 +9612,8 @@ class IfcPile_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpiletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpiletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPileType_CorrectPredefinedType: SCOPE = 'entity' @@ -9615,8 +9622,8 @@ class IfcPileType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectPredefinedType: SCOPE = 'entity' @@ -9625,8 +9632,8 @@ class IfcPipeFitting_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeFitting_CorrectTypeAssigned: SCOPE = 'entity' @@ -9635,8 +9642,8 @@ class IfcPipeFitting_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpipefittingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpipefittingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeFittingType_CorrectPredefinedType: SCOPE = 'entity' @@ -9645,8 +9652,8 @@ class IfcPipeFittingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectPredefinedType: SCOPE = 'entity' @@ -9655,8 +9662,8 @@ class IfcPipeSegment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPipeSegment_CorrectTypeAssigned: SCOPE = 'entity' @@ -9665,8 +9672,8 @@ class IfcPipeSegment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpipesegmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpipesegmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPipeSegmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -9675,8 +9682,8 @@ class IfcPipeSegmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPixelTexture_MinPixelInS: SCOPE = 'entity' @@ -9685,7 +9692,7 @@ class IfcPixelTexture_MinPixelInS: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) assert (width >= 1) is not False class IfcPixelTexture_MinPixelInT: @@ -9695,7 +9702,7 @@ class IfcPixelTexture_MinPixelInT: @staticmethod def __call__(self): - height = getattr(self, 'Height', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) assert (height >= 1) is not False class IfcPixelTexture_NumberOfColours: @@ -9705,7 +9712,7 @@ class IfcPixelTexture_NumberOfColours: @staticmethod def __call__(self): - colourcomponents = getattr(self, 'ColourComponents', INDETERMINATE) + colourcomponents = express_getattr(self, 'ColourComponents', INDETERMINATE) assert (1 <= colourcomponents <= 4) is not False class IfcPixelTexture_PixelAsByteAndSameLength: @@ -9715,7 +9722,7 @@ class IfcPixelTexture_PixelAsByteAndSameLength: @staticmethod def __call__(self): - pixel = getattr(self, 'Pixel', INDETERMINATE) + pixel = express_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: @@ -9725,14 +9732,14 @@ class IfcPixelTexture_SizeOfPixelList: @staticmethod def __call__(self): - width = getattr(self, 'Width', INDETERMINATE) - height = getattr(self, 'Height', INDETERMINATE) - pixel = getattr(self, 'Pixel', INDETERMINATE) + width = express_getattr(self, 'Width', INDETERMINATE) + height = express_getattr(self, 'Height', INDETERMINATE) + pixel = express_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) + location = express_getattr(self, 'Location', INDETERMINATE) + return express_getattr(location, 'Dim', INDETERMINATE) class IfcPlate_CorrectPredefinedType: SCOPE = 'entity' @@ -9741,8 +9748,8 @@ class IfcPlate_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPlate_CorrectTypeAssigned: SCOPE = 'entity' @@ -9751,8 +9758,8 @@ class IfcPlate_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcplatetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcplatetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPlateType_CorrectPredefinedType: SCOPE = 'entity' @@ -9761,8 +9768,8 @@ class IfcPlateType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcPoint_Dim(self): return IfcPointDim(self) @@ -9774,8 +9781,8 @@ class IfcPolyLoop_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 + polygon = express_getattr(self, 'Polygon', INDETERMINATE) + assert (sizeof([temp for temp in polygon if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(polygon, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolygonalBoundedHalfSpace_BoundaryDim: SCOPE = 'entity' @@ -9784,8 +9791,8 @@ class IfcPolygonalBoundedHalfSpace_BoundaryDim: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) - assert (getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) + assert (express_getattr(polygonalboundary, 'Dim', INDETERMINATE) == 2) is not False class IfcPolygonalBoundedHalfSpace_BoundaryType: SCOPE = 'entity' @@ -9794,7 +9801,7 @@ class IfcPolygonalBoundedHalfSpace_BoundaryType: @staticmethod def __call__(self): - polygonalboundary = getattr(self, 'PolygonalBoundary', INDETERMINATE) + polygonalboundary = express_getattr(self, 'PolygonalBoundary', INDETERMINATE) assert (sizeof(typeof(polygonalboundary) * ['ifc4x3_tc1.ifcpolyline', 'ifc4x3_tc1.ifccompositecurve', 'ifc4x3_tc1.ifcindexedpolycurve']) == 1) is not False class IfcPolyline_SameDim: @@ -9804,8 +9811,8 @@ class IfcPolyline_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 + points = express_getattr(self, 'Points', INDETERMINATE) + assert (sizeof([temp for temp in points if express_getattr(temp, 'Dim', INDETERMINATE) != express_getattr(express_getitem(points, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE)]) == 0) is not False class IfcPolynomialCurve_CorrectPositionDim: SCOPE = 'entity' @@ -9814,9 +9821,9 @@ class IfcPolynomialCurve_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 + position = express_getattr(self, 'Position', INDETERMINATE) + coefficientsz = express_getattr(self, 'CoefficientsZ', INDETERMINATE) + assert (express_getattr(position, 'Dim', INDETERMINATE) == 2 and (not exists(coefficientsz)) or express_getattr(position, 'Dim', INDETERMINATE) == 3) is not False class IfcPolynomialCurve_ValidCoefficients: SCOPE = 'entity' @@ -9825,9 +9832,9 @@ class IfcPolynomialCurve_ValidCoefficients: @staticmethod def __call__(self): - coefficientsx = getattr(self, 'CoefficientsX', INDETERMINATE) - coefficientsy = getattr(self, 'CoefficientsY', INDETERMINATE) - coefficientsz = getattr(self, 'CoefficientsZ', INDETERMINATE) + coefficientsx = express_getattr(self, 'CoefficientsX', INDETERMINATE) + coefficientsy = express_getattr(self, 'CoefficientsY', INDETERMINATE) + coefficientsz = express_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: @@ -9837,7 +9844,7 @@ class IfcPositioningElement_HasPlacement: @staticmethod def __call__(self): - assert exists(getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'ObjectPlacement', INDETERMINATE)) is not False class IfcPostalAddress_WR1: SCOPE = 'entity' @@ -9846,13 +9853,13 @@ class IfcPostalAddress_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) + internallocation = express_getattr(self, 'InternalLocation', INDETERMINATE) + addresslines = express_getattr(self, 'AddressLines', INDETERMINATE) + postalbox = express_getattr(self, 'PostalBox', INDETERMINATE) + town = express_getattr(self, 'Town', INDETERMINATE) + region = express_getattr(self, 'Region', INDETERMINATE) + postalcode = express_getattr(self, 'PostalCode', INDETERMINATE) + country = express_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: @@ -9862,7 +9869,7 @@ class IfcPresentationLayerAssignment_ApplicableItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_tc1.ifcshaperepresentation', 'ifc4x3_tc1.ifcgeometricrepresentationitem', 'ifc4x3_tc1.ifcmappeditem']) == 1]) == sizeof(assigneditems)) is not False class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @@ -9872,7 +9879,7 @@ class IfcPresentationLayerWithStyle_ApplicableOnlyToItems: @staticmethod def __call__(self): - assigneditems = getattr(self, 'AssignedItems', INDETERMINATE) + assigneditems = express_getattr(self, 'AssignedItems', INDETERMINATE) assert (sizeof([temp for temp in assigneditems if sizeof(typeof(temp) * ['ifc4x3_tc1.ifcgeometricrepresentationitem', 'ifc4x3_tc1.ifcmappeditem']) >= 1]) == sizeof(assigneditems)) is not False class IfcProcedure_CorrectPredefinedType: @@ -9882,8 +9889,8 @@ class IfcProcedure_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProcedure_HasName: SCOPE = 'entity' @@ -9892,7 +9899,7 @@ class IfcProcedure_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProcedureType_CorrectPredefinedType: SCOPE = 'entity' @@ -9901,8 +9908,8 @@ class IfcProcedureType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcProduct_PlacementForShapeRepresentation: SCOPE = 'entity' @@ -9911,9 +9918,9 @@ class IfcProduct_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_tc1.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False + objectplacement = express_getattr(self, 'ObjectPlacement', INDETERMINATE) + representation = express_getattr(self, 'Representation', INDETERMINATE) + assert (exists(representation) and exists(objectplacement) or (exists(representation) and sizeof([temp for temp in express_getattr(representation, 'Representations', INDETERMINATE) if 'ifc4x3_tc1.ifcshaperepresentation' in typeof(temp)]) == 0) or (not exists(representation))) is not False class IfcProductDefinitionShape_OnlyShapeModel: SCOPE = 'entity' @@ -9922,7 +9929,7 @@ class IfcProductDefinitionShape_OnlyShapeModel: @staticmethod def __call__(self): - representations = getattr(self, 'Representations', INDETERMINATE) + representations = express_getattr(self, 'Representations', INDETERMINATE) assert (sizeof([temp for temp in representations if not 'ifc4x3_tc1.ifcshapemodel' in typeof(temp)]) == 0) is not False class IfcProject_CorrectContext: @@ -9932,7 +9939,7 @@ class IfcProject_CorrectContext: @staticmethod def __call__(self): - assert (not exists(getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_tc1.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False + assert (not exists(express_getattr(self, 'RepresentationContexts', INDETERMINATE)) or sizeof([temp for temp in express_getattr(self, 'RepresentationContexts', INDETERMINATE) if 'ifc4x3_tc1.ifcgeometricrepresentationsubcontext' in typeof(temp)]) == 0) is not False class IfcProject_HasName: SCOPE = 'entity' @@ -9941,7 +9948,7 @@ class IfcProject_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcProject_NoDecomposition: SCOPE = 'entity' @@ -9950,7 +9957,7 @@ class IfcProject_NoDecomposition: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False + assert (sizeof(express_getattr(self, 'Decomposes', INDETERMINATE)) == 0) is not False class IfcProjectedCRS_IsLengthUnit: SCOPE = 'entity' @@ -9959,8 +9966,8 @@ class IfcProjectedCRS_IsLengthUnit: @staticmethod def __call__(self): - mapunit = getattr(self, 'MapUnit', INDETERMINATE) - assert (not exists(mapunit) or getattr(mapunit, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False + mapunit = express_getattr(self, 'MapUnit', INDETERMINATE) + assert (not exists(mapunit) or express_getattr(mapunit, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcProjectionElement_CorrectPredefinedType: SCOPE = 'entity' @@ -9969,8 +9976,8 @@ class IfcProjectionElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPropertyBoundedValue_SameUnitLowerSet: SCOPE = 'entity' @@ -9979,8 +9986,8 @@ class IfcPropertyBoundedValue_SameUnitLowerSet: @staticmethod def __call__(self): - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(lowerboundvalue) or not exists(setpointvalue) or typeof(lowerboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperLower: @@ -9990,8 +9997,8 @@ class IfcPropertyBoundedValue_SameUnitUpperLower: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - lowerboundvalue = getattr(self, 'LowerBoundValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + lowerboundvalue = express_getattr(self, 'LowerBoundValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(lowerboundvalue) or typeof(upperboundvalue) == typeof(lowerboundvalue)) is not False class IfcPropertyBoundedValue_SameUnitUpperSet: @@ -10001,8 +10008,8 @@ class IfcPropertyBoundedValue_SameUnitUpperSet: @staticmethod def __call__(self): - upperboundvalue = getattr(self, 'UpperBoundValue', INDETERMINATE) - setpointvalue = getattr(self, 'SetPointValue', INDETERMINATE) + upperboundvalue = express_getattr(self, 'UpperBoundValue', INDETERMINATE) + setpointvalue = express_getattr(self, 'SetPointValue', INDETERMINATE) assert (not exists(upperboundvalue) or not exists(setpointvalue) or typeof(upperboundvalue) == typeof(setpointvalue)) is not False class IfcPropertyDependencyRelationship_NoSelfReference: @@ -10012,8 +10019,8 @@ class IfcPropertyDependencyRelationship_NoSelfReference: @staticmethod def __call__(self): - dependingproperty = getattr(self, 'DependingProperty', INDETERMINATE) - dependantproperty = getattr(self, 'DependantProperty', INDETERMINATE) + dependingproperty = express_getattr(self, 'DependingProperty', INDETERMINATE) + dependantproperty = express_getattr(self, 'DependantProperty', INDETERMINATE) assert (dependingproperty != dependantproperty) is not False class IfcPropertyEnumeratedValue_WR21: @@ -10023,9 +10030,9 @@ class IfcPropertyEnumeratedValue_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 + enumerationvalues = express_getattr(self, 'EnumerationValues', INDETERMINATE) + enumerationreference = express_getattr(self, 'EnumerationReference', INDETERMINATE) + assert (not exists(enumerationreference) or not exists(enumerationvalues) or sizeof([temp for temp in enumerationvalues if temp in express_getattr(enumerationreference, 'EnumerationValues', INDETERMINATE)]) == sizeof(enumerationvalues)) is not False class IfcPropertyEnumeration_WR01: SCOPE = 'entity' @@ -10034,7 +10041,7 @@ class IfcPropertyEnumeration_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 + assert (sizeof([temp for temp in express_getattr(self, 'EnumerationValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'EnumerationValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertyListValue_WR31: SCOPE = 'entity' @@ -10043,7 +10050,7 @@ class IfcPropertyListValue_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 + assert (sizeof([temp for temp in express_getattr(self, 'ListValues', INDETERMINATE) if not typeof(express_getitem(express_getattr(self, 'ListValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == typeof(temp)]) == 0) is not False class IfcPropertySet_ExistsName: SCOPE = 'entity' @@ -10052,7 +10059,7 @@ class IfcPropertySet_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySet_UniquePropertyNames: SCOPE = 'entity' @@ -10061,7 +10068,7 @@ class IfcPropertySet_UniquePropertyNames: @staticmethod def __call__(self): - hasproperties = getattr(self, 'HasProperties', INDETERMINATE) + hasproperties = express_getattr(self, 'HasProperties', INDETERMINATE) assert IfcUniquePropertyName(hasproperties) is not False class IfcPropertySetTemplate_ExistsName: @@ -10071,7 +10078,7 @@ class IfcPropertySetTemplate_ExistsName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcPropertySetTemplate_UniquePropertyNames: SCOPE = 'entity' @@ -10080,7 +10087,7 @@ class IfcPropertySetTemplate_UniquePropertyNames: @staticmethod def __call__(self): - haspropertytemplates = getattr(self, 'HasPropertyTemplates', INDETERMINATE) + haspropertytemplates = express_getattr(self, 'HasPropertyTemplates', INDETERMINATE) assert IfcUniquePropertyTemplateNames(haspropertytemplates) is not False class IfcPropertyTableValue_WR21: @@ -10090,8 +10097,8 @@ class IfcPropertyTableValue_WR21: @staticmethod def __call__(self): - definingvalues = getattr(self, 'DefiningValues', INDETERMINATE) - definedvalues = getattr(self, 'DefinedValues', INDETERMINATE) + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) assert (not exists(definingvalues) and (not exists(definedvalues)) or sizeof(definingvalues) == sizeof(definedvalues)) is not False class IfcPropertyTableValue_WR22: @@ -10101,8 +10108,8 @@ class IfcPropertyTableValue_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 + definingvalues = express_getattr(self, 'DefiningValues', INDETERMINATE) + assert (not exists(definingvalues) or sizeof([temp for temp in express_getattr(self, 'DefiningValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefiningValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcPropertyTableValue_WR23: SCOPE = 'entity' @@ -10111,8 +10118,8 @@ class IfcPropertyTableValue_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 + definedvalues = express_getattr(self, 'DefinedValues', INDETERMINATE) + assert (not exists(definedvalues) or sizeof([temp for temp in express_getattr(self, 'DefinedValues', INDETERMINATE) if typeof(temp) != typeof(express_getitem(express_getattr(self, 'DefinedValues', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))]) == 0) is not False class IfcProtectiveDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -10121,8 +10128,8 @@ class IfcProtectiveDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -10131,8 +10138,8 @@ class IfcProtectiveDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcprotectivedevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcprotectivedevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectPredefinedType: SCOPE = 'entity' @@ -10141,8 +10148,8 @@ class IfcProtectiveDeviceTrippingUnit_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: SCOPE = 'entity' @@ -10151,8 +10158,8 @@ class IfcProtectiveDeviceTrippingUnit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcprotectivedevicetrippingunittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcprotectivedevicetrippingunittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcProtectiveDeviceTrippingUnitType_CorrectPredefinedType: SCOPE = 'entity' @@ -10161,8 +10168,8 @@ class IfcProtectiveDeviceTrippingUnitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcProtectiveDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -10171,8 +10178,8 @@ class IfcProtectiveDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcPump_CorrectPredefinedType: SCOPE = 'entity' @@ -10181,8 +10188,8 @@ class IfcPump_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcPump_CorrectTypeAssigned: SCOPE = 'entity' @@ -10191,8 +10198,8 @@ class IfcPump_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpumptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcpumptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcPumpType_CorrectPredefinedType: SCOPE = 'entity' @@ -10201,8 +10208,8 @@ class IfcPumpType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcQuantityArea_WR21: SCOPE = 'entity' @@ -10211,7 +10218,7 @@ class IfcQuantityArea_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE)) is not False class IfcQuantityArea_WR22: SCOPE = 'entity' @@ -10220,7 +10227,7 @@ class IfcQuantityArea_WR22: @staticmethod def __call__(self): - areavalue = getattr(self, 'AreaValue', INDETERMINATE) + areavalue = express_getattr(self, 'AreaValue', INDETERMINATE) assert (areavalue >= 0.0) is not False class IfcQuantityCount_WR21: @@ -10230,7 +10237,7 @@ class IfcQuantityCount_WR21: @staticmethod def __call__(self): - countvalue = getattr(self, 'CountValue', INDETERMINATE) + countvalue = express_getattr(self, 'CountValue', INDETERMINATE) assert (countvalue >= 0) is not False class IfcQuantityLength_WR21: @@ -10240,7 +10247,7 @@ class IfcQuantityLength_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE)) is not False class IfcQuantityLength_WR22: SCOPE = 'entity' @@ -10249,7 +10256,7 @@ class IfcQuantityLength_WR22: @staticmethod def __call__(self): - lengthvalue = getattr(self, 'LengthValue', INDETERMINATE) + lengthvalue = express_getattr(self, 'LengthValue', INDETERMINATE) assert (lengthvalue >= 0.0) is not False class IfcQuantityTime_WR21: @@ -10259,7 +10266,7 @@ class IfcQuantityTime_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE)) is not False class IfcQuantityTime_WR22: SCOPE = 'entity' @@ -10268,7 +10275,7 @@ class IfcQuantityTime_WR22: @staticmethod def __call__(self): - timevalue = getattr(self, 'TimeValue', INDETERMINATE) + timevalue = express_getattr(self, 'TimeValue', INDETERMINATE) assert (timevalue >= 0.0) is not False class IfcQuantityVolume_WR21: @@ -10278,7 +10285,7 @@ class IfcQuantityVolume_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE)) is not False class IfcQuantityVolume_WR22: SCOPE = 'entity' @@ -10287,7 +10294,7 @@ class IfcQuantityVolume_WR22: @staticmethod def __call__(self): - volumevalue = getattr(self, 'VolumeValue', INDETERMINATE) + volumevalue = express_getattr(self, 'VolumeValue', INDETERMINATE) assert (volumevalue >= 0.0) is not False class IfcQuantityWeight_WR21: @@ -10297,7 +10304,7 @@ class IfcQuantityWeight_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 + assert (not exists(express_getattr(self, 'Unit', INDETERMINATE)) or express_getattr(express_getattr(self, 'Unit', INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE)) is not False class IfcQuantityWeight_WR22: SCOPE = 'entity' @@ -10306,7 +10313,7 @@ class IfcQuantityWeight_WR22: @staticmethod def __call__(self): - weightvalue = getattr(self, 'WeightValue', INDETERMINATE) + weightvalue = express_getattr(self, 'WeightValue', INDETERMINATE) assert (weightvalue >= 0.0) is not False class IfcRail_CorrectPredefinedType: @@ -10316,8 +10323,8 @@ class IfcRail_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRail_CorrectTypeAssigned: SCOPE = 'entity' @@ -10326,8 +10333,8 @@ class IfcRail_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcrailtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcrailtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailType_CorrectPredefinedType: SCOPE = 'entity' @@ -10336,8 +10343,8 @@ class IfcRailType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailing_CorrectPredefinedType: SCOPE = 'entity' @@ -10346,8 +10353,8 @@ class IfcRailing_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailing_CorrectTypeAssigned: SCOPE = 'entity' @@ -10356,8 +10363,8 @@ class IfcRailing_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcrailingtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcrailingtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRailingType_CorrectPredefinedType: SCOPE = 'entity' @@ -10366,8 +10373,8 @@ class IfcRailingType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRailway_CorrectPredefinedType: SCOPE = 'entity' @@ -10376,8 +10383,8 @@ class IfcRailway_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRailwayPart_CorrectPredefinedType: SCOPE = 'entity' @@ -10386,8 +10393,8 @@ class IfcRailwayPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectPredefinedType: SCOPE = 'entity' @@ -10396,8 +10403,8 @@ class IfcRamp_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRamp_CorrectTypeAssigned: SCOPE = 'entity' @@ -10406,8 +10413,8 @@ class IfcRamp_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcramptype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcramptype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -10416,8 +10423,8 @@ class IfcRampFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRampFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -10426,8 +10433,8 @@ class IfcRampFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcrampflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcrampflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRampFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -10436,8 +10443,8 @@ class IfcRampFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRampType_CorrectPredefinedType: SCOPE = 'entity' @@ -10446,8 +10453,8 @@ class IfcRampType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: SCOPE = 'entity' @@ -10456,8 +10463,8 @@ class IfcRationalBSplineCurveWithKnots_SameNumOfWeightsAndPoints: @staticmethod def __call__(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - assert (sizeof(weightsdata) == sizeof(getattr(self, 'ControlPointsList', INDETERMINATE))) is not False + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE))) is not False class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: SCOPE = 'entity' @@ -10469,8 +10476,8 @@ class IfcRationalBSplineCurveWithKnots_WeightsGreaterZero: assert IfcCurveWeightsPositive(self) is not False def calc_IfcRationalBSplineCurveWithKnots_Weights(self): - weightsdata = getattr(self, 'WeightsData', INDETERMINATE) - return IfcListToArray(weightsdata, 0, getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + return IfcListToArray(weightsdata, 0, express_getattr(self, 'UpperIndexOnControlPoints', INDETERMINATE)) class IfcRationalBSplineSurfaceWithKnots_CorrespondingWeightsDataLists: SCOPE = 'entity' @@ -10479,8 +10486,8 @@ class IfcRationalBSplineSurfaceWithKnots_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 + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) + assert (sizeof(weightsdata) == sizeof(express_getattr(self, 'ControlPointsList', INDETERMINATE)) and sizeof(express_getitem(weightsdata, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == sizeof(express_getitem(express_getattr(self, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: SCOPE = 'entity' @@ -10492,9 +10499,9 @@ class IfcRationalBSplineSurfaceWithKnots_WeightValuesGreaterZero: 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) + uupper = express_getattr(self, 'UUpper', INDETERMINATE) + vupper = express_getattr(self, 'VUpper', INDETERMINATE) + weightsdata = express_getattr(self, 'WeightsData', INDETERMINATE) return IfcMakeArrayOfArray(weightsdata, 0, uupper, 0, vupper) class IfcRectangleHollowProfileDef_ValidInnerRadius: @@ -10504,9 +10511,9 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + innerfilletradius = express_getattr(self, 'InnerFilletRadius', INDETERMINATE) + assert (not exists(innerfilletradius) or (innerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 - wallthickness and innerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0 - wallthickness)) is not False class IfcRectangleHollowProfileDef_ValidOuterRadius: SCOPE = 'entity' @@ -10515,8 +10522,8 @@ class IfcRectangleHollowProfileDef_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 + outerfilletradius = express_getattr(self, 'OuterFilletRadius', INDETERMINATE) + assert (not exists(outerfilletradius) or (outerfilletradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and outerfilletradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0)) is not False class IfcRectangleHollowProfileDef_ValidWallThickness: SCOPE = 'entity' @@ -10525,8 +10532,8 @@ class IfcRectangleHollowProfileDef_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 + wallthickness = express_getattr(self, 'WallThickness', INDETERMINATE) + assert (wallthickness < express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and wallthickness < express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False class IfcRectangularTrimmedSurface_U1AndU2Different: SCOPE = 'entity' @@ -10535,8 +10542,8 @@ class IfcRectangularTrimmedSurface_U1AndU2Different: @staticmethod def __call__(self): - u1 = getattr(self, 'U1', INDETERMINATE) - u2 = getattr(self, 'U2', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) assert (u1 != u2) is not False class IfcRectangularTrimmedSurface_UsenseCompatible: @@ -10546,10 +10553,10 @@ class IfcRectangularTrimmedSurface_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) + basissurface = express_getattr(self, 'BasisSurface', INDETERMINATE) + u1 = express_getattr(self, 'U1', INDETERMINATE) + u2 = express_getattr(self, 'U2', INDETERMINATE) + usense = express_getattr(self, 'Usense', INDETERMINATE) assert ('ifc4x3_tc1.ifcelementarysurface' in typeof(basissurface) and (not 'ifc4x3_tc1.ifcplane' in typeof(basissurface)) or 'ifc4x3_tc1.ifcsurfaceofrevolution' in typeof(basissurface) or usense == (u2 > u1)) is not False class IfcRectangularTrimmedSurface_V1AndV2Different: @@ -10559,8 +10566,8 @@ class IfcRectangularTrimmedSurface_V1AndV2Different: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) assert (v1 != v2) is not False class IfcRectangularTrimmedSurface_VsenseCompatible: @@ -10570,9 +10577,9 @@ class IfcRectangularTrimmedSurface_VsenseCompatible: @staticmethod def __call__(self): - v1 = getattr(self, 'V1', INDETERMINATE) - v2 = getattr(self, 'V2', INDETERMINATE) - vsense = getattr(self, 'Vsense', INDETERMINATE) + v1 = express_getattr(self, 'V1', INDETERMINATE) + v2 = express_getattr(self, 'V2', INDETERMINATE) + vsense = express_getattr(self, 'Vsense', INDETERMINATE) assert (vsense == (v2 > v1)) is not False class IfcReinforcedSoil_CorrectPredefinedType: @@ -10582,8 +10589,8 @@ class IfcReinforcedSoil_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectPredefinedType: SCOPE = 'entity' @@ -10592,8 +10599,8 @@ class IfcReinforcingBar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingBar_CorrectTypeAssigned: SCOPE = 'entity' @@ -10602,8 +10609,8 @@ class IfcReinforcingBar_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcreinforcingbartype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcreinforcingbartype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingBarType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10612,8 +10619,8 @@ class IfcReinforcingBarType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingBarType_CorrectPredefinedType: @@ -10623,8 +10630,8 @@ class IfcReinforcingBarType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectPredefinedType: SCOPE = 'entity' @@ -10633,8 +10640,8 @@ class IfcReinforcingMesh_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcReinforcingMesh_CorrectTypeAssigned: SCOPE = 'entity' @@ -10643,8 +10650,8 @@ class IfcReinforcingMesh_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcreinforcingmeshtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcreinforcingmeshtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcReinforcingMeshType_BendingShapeCodeProvided: SCOPE = 'entity' @@ -10653,8 +10660,8 @@ class IfcReinforcingMeshType_BendingShapeCodeProvided: @staticmethod def __call__(self): - bendingshapecode = getattr(self, 'BendingShapeCode', INDETERMINATE) - bendingparameters = getattr(self, 'BendingParameters', INDETERMINATE) + bendingshapecode = express_getattr(self, 'BendingShapeCode', INDETERMINATE) + bendingparameters = express_getattr(self, 'BendingParameters', INDETERMINATE) assert (not exists(bendingparameters) or exists(bendingshapecode)) is not False class IfcReinforcingMeshType_CorrectPredefinedType: @@ -10664,8 +10671,8 @@ class IfcReinforcingMeshType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRelAggregates_NoSelfReference: SCOPE = 'entity' @@ -10674,8 +10681,8 @@ class IfcRelAggregates_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelAssignsToActor_NoSelfReference: @@ -10685,8 +10692,8 @@ class IfcRelAssignsToActor_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 + relatingactor = express_getattr(self, 'RelatingActor', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingactor == temp]) == 0) is not False class IfcRelAssignsToControl_NoSelfReference: SCOPE = 'entity' @@ -10695,8 +10702,8 @@ class IfcRelAssignsToControl_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 + relatingcontrol = express_getattr(self, 'RelatingControl', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingcontrol == temp]) == 0) is not False class IfcRelAssignsToGroup_NoSelfReference: SCOPE = 'entity' @@ -10705,8 +10712,8 @@ class IfcRelAssignsToGroup_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 + relatinggroup = express_getattr(self, 'RelatingGroup', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatinggroup == temp]) == 0) is not False class IfcRelAssignsToProcess_NoSelfReference: SCOPE = 'entity' @@ -10715,8 +10722,8 @@ class IfcRelAssignsToProcess_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 + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingprocess == temp]) == 0) is not False class IfcRelAssignsToProduct_NoSelfReference: SCOPE = 'entity' @@ -10725,8 +10732,8 @@ class IfcRelAssignsToProduct_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 + relatingproduct = express_getattr(self, 'RelatingProduct', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingproduct == temp]) == 0) is not False class IfcRelAssignsToResource_NoSelfReference: SCOPE = 'entity' @@ -10735,8 +10742,8 @@ class IfcRelAssignsToResource_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 + relatingresource = express_getattr(self, 'RelatingResource', INDETERMINATE) + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if relatingresource == temp]) == 0) is not False class IfcRelAssociatesMaterial_AllowedElements: SCOPE = 'entity' @@ -10745,7 +10752,7 @@ class IfcRelAssociatesMaterial_AllowedElements: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_tc1.ifcelement', 'ifc4x3_tc1.ifcelementtype', 'ifc4x3_tc1.ifcstructuralmember', 'ifc4x3_tc1.ifcport']) == 0]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if sizeof(typeof(temp) * ['ifc4x3_tc1.ifcelement', 'ifc4x3_tc1.ifcelementtype', 'ifc4x3_tc1.ifcstructuralmember', 'ifc4x3_tc1.ifcport']) == 0]) == 0) is not False class IfcRelAssociatesMaterial_NoVoidElement: SCOPE = 'entity' @@ -10754,7 +10761,7 @@ class IfcRelAssociatesMaterial_NoVoidElement: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_tc1.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_tc1.ifcvirtualelement' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_tc1.ifcfeatureelementsubtraction' in typeof(temp) or 'ifc4x3_tc1.ifcvirtualelement' in typeof(temp)]) == 0) is not False class IfcRelConnectsElements_NoSelfReference: SCOPE = 'entity' @@ -10763,8 +10770,8 @@ class IfcRelConnectsElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @@ -10774,7 +10781,7 @@ class IfcRelConnectsPathElements_NormalizedRelatedPriorities: @staticmethod def __call__(self): - relatedpriorities = getattr(self, 'RelatedPriorities', INDETERMINATE) + relatedpriorities = express_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: @@ -10784,7 +10791,7 @@ class IfcRelConnectsPathElements_NormalizedRelatingPriorities: @staticmethod def __call__(self): - relatingpriorities = getattr(self, 'RelatingPriorities', INDETERMINATE) + relatingpriorities = express_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: @@ -10794,8 +10801,8 @@ class IfcRelConnectsPorts_NoSelfReference: @staticmethod def __call__(self): - relatingport = getattr(self, 'RelatingPort', INDETERMINATE) - relatedport = getattr(self, 'RelatedPort', INDETERMINATE) + relatingport = express_getattr(self, 'RelatingPort', INDETERMINATE) + relatedport = express_getattr(self, 'RelatedPort', INDETERMINATE) assert (relatingport != relatedport) is not False class IfcRelContainedInSpatialStructure_WR31: @@ -10805,7 +10812,7 @@ class IfcRelContainedInSpatialStructure_WR31: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_tc1.ifcspatialstructureelement' in typeof(temp)]) == 0) is not False class IfcRelDeclares_NoSelfReference: @@ -10815,8 +10822,8 @@ class IfcRelDeclares_NoSelfReference: @staticmethod def __call__(self): - relatingcontext = getattr(self, 'RelatingContext', INDETERMINATE) - relateddefinitions = getattr(self, 'RelatedDefinitions', INDETERMINATE) + relatingcontext = express_getattr(self, 'RelatingContext', INDETERMINATE) + relateddefinitions = express_getattr(self, 'RelatedDefinitions', INDETERMINATE) assert (sizeof([temp for temp in relateddefinitions if relatingcontext == temp]) == 0) is not False class IfcRelDefinesByProperties_NoRelatedTypeObject: @@ -10826,7 +10833,7 @@ class IfcRelDefinesByProperties_NoRelatedTypeObject: @staticmethod def __call__(self): - assert (sizeof([types for types in getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_tc1.ifctypeobject' in typeof(types)]) == 0) is not False + assert (sizeof([types for types in express_getattr(self, 'RelatedObjects', INDETERMINATE) if 'ifc4x3_tc1.ifctypeobject' in typeof(types)]) == 0) is not False class IfcRelInterferesElements_NoSelfReference: SCOPE = 'entity' @@ -10835,8 +10842,8 @@ class IfcRelInterferesElements_NoSelfReference: @staticmethod def __call__(self): - relatingelement = getattr(self, 'RelatingElement', INDETERMINATE) - relatedelement = getattr(self, 'RelatedElement', INDETERMINATE) + relatingelement = express_getattr(self, 'RelatingElement', INDETERMINATE) + relatedelement = express_getattr(self, 'RelatedElement', INDETERMINATE) assert (relatingelement != relatedelement) is not False class IfcRelNests_NoSelfReference: @@ -10846,8 +10853,8 @@ class IfcRelNests_NoSelfReference: @staticmethod def __call__(self): - relatingobject = getattr(self, 'RelatingObject', INDETERMINATE) - relatedobjects = getattr(self, 'RelatedObjects', INDETERMINATE) + relatingobject = express_getattr(self, 'RelatingObject', INDETERMINATE) + relatedobjects = express_getattr(self, 'RelatedObjects', INDETERMINATE) assert (sizeof([temp for temp in relatedobjects if relatingobject == temp]) == 0) is not False class IfcRelPositions_NoSelfReference: @@ -10857,8 +10864,8 @@ class IfcRelPositions_NoSelfReference: @staticmethod def __call__(self): - relatingpositioningelement = getattr(self, 'RelatingPositioningElement', INDETERMINATE) - relatedproducts = getattr(self, 'RelatedProducts', INDETERMINATE) + relatingpositioningelement = express_getattr(self, 'RelatingPositioningElement', INDETERMINATE) + relatedproducts = express_getattr(self, 'RelatedProducts', INDETERMINATE) assert (sizeof([temp for temp in relatedproducts if relatingpositioningelement == temp]) == 0) is not False class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @@ -10868,7 +10875,7 @@ class IfcRelReferencedInSpatialStructure_AllowedRelatedElements: @staticmethod def __call__(self): - relatedelements = getattr(self, 'RelatedElements', INDETERMINATE) + relatedelements = express_getattr(self, 'RelatedElements', INDETERMINATE) assert (sizeof([temp for temp in relatedelements if 'ifc4x3_tc1.ifcspatialstructureelement' in typeof(temp) and (not 'ifc4x3_tc1.ifcspace' in typeof(temp))]) == 0) is not False class IfcRelSequence_AvoidInconsistentSequence: @@ -10878,8 +10885,8 @@ class IfcRelSequence_AvoidInconsistentSequence: @staticmethod def __call__(self): - relatingprocess = getattr(self, 'RelatingProcess', INDETERMINATE) - relatedprocess = getattr(self, 'RelatedProcess', INDETERMINATE) + relatingprocess = express_getattr(self, 'RelatingProcess', INDETERMINATE) + relatedprocess = express_getattr(self, 'RelatedProcess', INDETERMINATE) assert (relatingprocess != relatedprocess) is not False class IfcRelSequence_CorrectSequenceType: @@ -10889,9 +10896,9 @@ class IfcRelSequence_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 + sequencetype = express_getattr(self, 'SequenceType', INDETERMINATE) + userdefinedsequencetype = express_getattr(self, 'UserDefinedSequenceType', INDETERMINATE) + assert (sequencetype != express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) or (sequencetype == express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) and exists(userdefinedsequencetype))) is not False class IfcRelSpaceBoundary_CorrectPhysOrVirt: SCOPE = 'entity' @@ -10900,9 +10907,9 @@ class IfcRelSpaceBoundary_CorrectPhysOrVirt: @staticmethod def __call__(self): - relatedbuildingelement = getattr(self, 'RelatedBuildingElement', INDETERMINATE) - physicalorvirtualboundary = getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) - assert (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_tc1.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_tc1.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_tc1.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False + relatedbuildingelement = express_getattr(self, 'RelatedBuildingElement', INDETERMINATE) + physicalorvirtualboundary = express_getattr(self, 'PhysicalOrVirtualBoundary', INDETERMINATE) + assert (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Physical', INDETERMINATE) and (not 'ifc4x3_tc1.ifcvirtualelement' in typeof(relatedbuildingelement)) or (physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'Virtual', INDETERMINATE) and ('ifc4x3_tc1.ifcvirtualelement' in typeof(relatedbuildingelement) or 'ifc4x3_tc1.ifcopeningelement' in typeof(relatedbuildingelement))) or physicalorvirtualboundary == express_getattr(IfcPhysicalOrVirtualEnum, 'NotDefined', INDETERMINATE)) is not False class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: SCOPE = 'entity' @@ -10911,7 +10918,7 @@ class IfcReparametrisedCompositeCurveSegment_PositiveLengthParameter: @staticmethod def __call__(self): - paramlength = getattr(self, 'ParamLength', INDETERMINATE) + paramlength = express_getattr(self, 'ParamLength', INDETERMINATE) assert (paramlength > 0.0) is not False class IfcRepresentationMap_ApplicableMappedRepr: @@ -10921,7 +10928,7 @@ class IfcRepresentationMap_ApplicableMappedRepr: @staticmethod def __call__(self): - mappedrepresentation = getattr(self, 'MappedRepresentation', INDETERMINATE) + mappedrepresentation = express_getattr(self, 'MappedRepresentation', INDETERMINATE) assert ('ifc4x3_tc1.ifcshapemodel' in typeof(mappedrepresentation)) is not False class IfcRevolvedAreaSolid_AxisDirectionInXY: @@ -10931,8 +10938,8 @@ class IfcRevolvedAreaSolid_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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert (express_getitem(express_getattr(express_getattr(axis, 'Z', INDETERMINATE), 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) == 0.0) is not False class IfcRevolvedAreaSolid_AxisStartInXY: SCOPE = 'entity' @@ -10941,12 +10948,12 @@ class IfcRevolvedAreaSolid_AxisStartInXY: @staticmethod def __call__(self): - axis = getattr(self, 'Axis', INDETERMINATE) - assert ('ifc4x3_tc1.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 + axis = express_getattr(self, 'Axis', INDETERMINATE) + assert ('ifc4x3_tc1.ifccartesianpoint' in typeof(express_getattr(axis, 'Location', INDETERMINATE)) and express_getitem(express_getattr(express_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)) + axis = express_getattr(self, 'Axis', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axis, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axis, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: SCOPE = 'entity' @@ -10955,7 +10962,7 @@ class IfcRevolvedAreaSolidTapered_CorrectProfileAssignment: @staticmethod def __call__(self): - assert IfcTaperedSweptAreaProfiles(getattr(self, 'SweptArea', INDETERMINATE), getattr(self, 'EndSweptArea', INDETERMINATE)) is not False + assert IfcTaperedSweptAreaProfiles(express_getattr(self, 'SweptArea', INDETERMINATE), express_getattr(self, 'EndSweptArea', INDETERMINATE)) is not False class IfcRoad_CorrectPredefinedType: SCOPE = 'entity' @@ -10964,8 +10971,8 @@ class IfcRoad_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoadPart_CorrectPredefinedType: SCOPE = 'entity' @@ -10974,8 +10981,8 @@ class IfcRoadPart_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectPredefinedType: SCOPE = 'entity' @@ -10984,8 +10991,8 @@ class IfcRoof_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcRoof_CorrectTypeAssigned: SCOPE = 'entity' @@ -10994,8 +11001,8 @@ class IfcRoof_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcrooftype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcrooftype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcRoofType_CorrectPredefinedType: SCOPE = 'entity' @@ -11004,8 +11011,8 @@ class IfcRoofType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcRoundedRectangleProfileDef_ValidRadius: SCOPE = 'entity' @@ -11014,11 +11021,11 @@ class IfcRoundedRectangleProfileDef_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 + roundingradius = express_getattr(self, 'RoundingRadius', INDETERMINATE) + assert (roundingradius <= express_getattr(self, 'XDim', INDETERMINATE) / 2.0 and roundingradius <= express_getattr(self, 'YDim', INDETERMINATE) / 2.0) is not False def calc_IfcSIUnit_Dimensions(self): - return IfcDimensionsForSIUnit(getattr(self, 'Name', INDETERMINATE)) + return IfcDimensionsForSIUnit(express_getattr(self, 'Name', INDETERMINATE)) class IfcSanitaryTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11027,8 +11034,8 @@ class IfcSanitaryTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSanitaryTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11037,8 +11044,8 @@ class IfcSanitaryTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsanitaryterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsanitaryterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSanitaryTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11047,8 +11054,8 @@ class IfcSanitaryTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSeamCurve_SameSurface: SCOPE = 'entity' @@ -11057,7 +11064,7 @@ class IfcSeamCurve_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 + assert (IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) == IfcAssociatedSurface(express_getitem(express_getattr(self, 'AssociatedGeometry', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcSeamCurve_TwoPCurves: SCOPE = 'entity' @@ -11066,7 +11073,7 @@ class IfcSeamCurve_TwoPCurves: @staticmethod def __call__(self): - assert (sizeof(getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False + assert (sizeof(express_getattr(self, 'AssociatedGeometry', INDETERMINATE)) == 2) is not False class IfcSectionedSolid_ConsistentProfileTypes: SCOPE = 'entity' @@ -11075,8 +11082,8 @@ class IfcSectionedSolid_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSolid_DirectrixIs3D: SCOPE = 'entity' @@ -11085,8 +11092,8 @@ class IfcSectionedSolid_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSolid_SectionsSameType: SCOPE = 'entity' @@ -11095,7 +11102,7 @@ class IfcSectionedSolid_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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: @@ -11105,8 +11112,8 @@ class IfcSectionedSolidHorizontal_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSolidHorizontal_NoLongitudinalOffsets: @@ -11116,8 +11123,8 @@ class IfcSectionedSolidHorizontal_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSpine_ConsistentProfileTypes: SCOPE = 'entity' @@ -11126,8 +11133,8 @@ class IfcSectionedSpine_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(express_getitem(crosssections, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ProfileType', INDETERMINATE) != express_getattr(temp, 'ProfileType', INDETERMINATE)]) == 0) is not False class IfcSectionedSpine_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11136,8 +11143,8 @@ class IfcSectionedSpine_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSpine_SpineCurveDim: @@ -11147,8 +11154,8 @@ class IfcSectionedSpine_SpineCurveDim: @staticmethod def __call__(self): - spinecurve = getattr(self, 'SpineCurve', INDETERMINATE) - assert (getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False + spinecurve = express_getattr(self, 'SpineCurve', INDETERMINATE) + assert (express_getattr(spinecurve, 'Dim', INDETERMINATE) == 3) is not False def calc_IfcSectionedSpine_Dim(self): return 3 @@ -11160,8 +11167,8 @@ class IfcSectionedSurface_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 + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) + assert (sizeof([temp for temp in crosssections if express_getattr(temp, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE)]) == 0) is not False class IfcSectionedSurface_CorrespondingSectionPositions: SCOPE = 'entity' @@ -11170,8 +11177,8 @@ class IfcSectionedSurface_CorrespondingSectionPositions: @staticmethod def __call__(self): - crosssectionpositions = getattr(self, 'CrossSectionPositions', INDETERMINATE) - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + crosssections = express_getattr(self, 'CrossSections', INDETERMINATE) assert (sizeof(crosssections) == sizeof(crosssectionpositions)) is not False class IfcSectionedSurface_DirectrixIs3D: @@ -11181,8 +11188,8 @@ class IfcSectionedSurface_DirectrixIs3D: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSectionedSurface_NoOffsets: SCOPE = 'entity' @@ -11191,8 +11198,8 @@ class IfcSectionedSurface_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 + crosssectionpositions = express_getattr(self, 'CrossSectionPositions', INDETERMINATE) + assert (sizeof([temp for temp in crosssectionpositions if exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLateral', INDETERMINATE)) or exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetVertical', INDETERMINATE)) or exists(express_getattr(express_getattr(temp, 'Location', INDETERMINATE), 'OffsetLongitudinal', INDETERMINATE))]) == 0) is not False class IfcSectionedSurface_SectionsSameType: SCOPE = 'entity' @@ -11201,7 +11208,7 @@ class IfcSectionedSurface_SectionsSameType: @staticmethod def __call__(self): - crosssections = getattr(self, 'CrossSections', INDETERMINATE) + crosssections = express_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): @@ -11214,8 +11221,8 @@ class IfcSensor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSensor_CorrectTypeAssigned: SCOPE = 'entity' @@ -11224,8 +11231,8 @@ class IfcSensor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsensortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsensortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSensorType_CorrectPredefinedType: SCOPE = 'entity' @@ -11234,8 +11241,8 @@ class IfcSensorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11244,8 +11251,8 @@ class IfcShadingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcShadingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11254,8 +11261,8 @@ class IfcShadingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcshadingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcshadingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcShadingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11264,8 +11271,8 @@ class IfcShadingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcShapeModel_WR11: SCOPE = 'entity' @@ -11274,8 +11281,8 @@ class IfcShapeModel_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 + ofshapeaspect = express_getattr(self, 'OfShapeAspect', INDETERMINATE) + assert (sizeof(express_getattr(self, 'OfProductRepresentation', INDETERMINATE)) == 1) ^ (sizeof(express_getattr(self, 'RepresentationMap', INDETERMINATE)) == 1) ^ (sizeof(ofshapeaspect) == 1) is not False class IfcShapeRepresentation_CorrectContext: SCOPE = 'entity' @@ -11284,7 +11291,7 @@ class IfcShapeRepresentation_CorrectContext: @staticmethod def __call__(self): - assert ('ifc4x3_tc1.ifcgeometricrepresentationcontext' in typeof(getattr(self, 'ContextOfItems', INDETERMINATE))) is not False + assert ('ifc4x3_tc1.ifcgeometricrepresentationcontext' in typeof(express_getattr(self, 'ContextOfItems', INDETERMINATE))) is not False class IfcShapeRepresentation_CorrectItemsForType: SCOPE = 'entity' @@ -11293,7 +11300,7 @@ class IfcShapeRepresentation_CorrectItemsForType: @staticmethod def __call__(self): - assert IfcShapeRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcShapeRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationIdentifier: SCOPE = 'entity' @@ -11302,7 +11309,7 @@ class IfcShapeRepresentation_HasRepresentationIdentifier: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationIdentifier', INDETERMINATE)) is not False class IfcShapeRepresentation_HasRepresentationType: SCOPE = 'entity' @@ -11311,7 +11318,7 @@ class IfcShapeRepresentation_HasRepresentationType: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcShapeRepresentation_NoTopologicalItem: SCOPE = 'entity' @@ -11320,7 +11327,7 @@ class IfcShapeRepresentation_NoTopologicalItem: @staticmethod def __call__(self): - items = getattr(self, 'Items', INDETERMINATE) + items = express_getattr(self, 'Items', INDETERMINATE) assert (sizeof([temp for temp in items if 'ifc4x3_tc1.ifctopologicalrepresentationitem' in typeof(temp) and (not sizeof(['ifc4x3_tc1.ifcvertexpoint', 'ifc4x3_tc1.ifcedgecurve', 'ifc4x3_tc1.ifcfacesurface'] * typeof(temp)) == 1)]) == 0) is not False def calc_IfcShellBasedSurfaceModel_Dim(self): @@ -11333,8 +11340,8 @@ class IfcSign_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSign_CorrectTypeAssigned: SCOPE = 'entity' @@ -11343,8 +11350,8 @@ class IfcSign_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsigntype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsigntype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignType_CorrectPredefinedType: SCOPE = 'entity' @@ -11353,8 +11360,8 @@ class IfcSignType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSignal_CorrectPredefinedType: SCOPE = 'entity' @@ -11363,8 +11370,8 @@ class IfcSignal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSignal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11373,8 +11380,8 @@ class IfcSignal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsignaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsignaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSignalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11383,8 +11390,8 @@ class IfcSignalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSlab_CorrectPredefinedType: SCOPE = 'entity' @@ -11393,8 +11400,8 @@ class IfcSlab_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSlab_CorrectTypeAssigned: SCOPE = 'entity' @@ -11403,8 +11410,8 @@ class IfcSlab_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcslabtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcslabtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSlabType_CorrectPredefinedType: SCOPE = 'entity' @@ -11413,8 +11420,8 @@ class IfcSlabType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -11423,8 +11430,8 @@ class IfcSolarDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSolarDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -11433,8 +11440,8 @@ class IfcSolarDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsolardevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsolardevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSolarDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11443,8 +11450,8 @@ class IfcSolarDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcSolidModel_Dim(self): return 3 @@ -11456,8 +11463,8 @@ class IfcSpace_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpace_CorrectTypeAssigned: SCOPE = 'entity' @@ -11466,8 +11473,8 @@ class IfcSpace_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcspacetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcspacetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeater_CorrectPredefinedType: SCOPE = 'entity' @@ -11476,8 +11483,8 @@ class IfcSpaceHeater_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpaceHeater_CorrectTypeAssigned: SCOPE = 'entity' @@ -11486,8 +11493,8 @@ class IfcSpaceHeater_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcspaceheatertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcspaceheatertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpaceHeaterType_CorrectPredefinedType: SCOPE = 'entity' @@ -11496,8 +11503,8 @@ class IfcSpaceHeaterType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpaceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11506,8 +11513,8 @@ class IfcSpaceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSpatialStructureElement_WR41: SCOPE = 'entity' @@ -11516,7 +11523,7 @@ class IfcSpatialStructureElement_WR41: @staticmethod def __call__(self): - assert (hiindex(getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_tc1.ifcrelaggregates' in typeof(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_tc1.ifcproject' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_tc1.ifcspatialstructureelement' in typeof(getattr(express_getitem(getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False + assert (hiindex(express_getattr(self, 'Decomposes', INDETERMINATE)) == 1 and 'ifc4x3_tc1.ifcrelaggregates' in typeof(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and ('ifc4x3_tc1.ifcproject' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)) or 'ifc4x3_tc1.ifcspatialstructureelement' in typeof(express_getattr(express_getitem(express_getattr(self, 'Decomposes', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingObject', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectPredefinedType: SCOPE = 'entity' @@ -11525,8 +11532,8 @@ class IfcSpatialZone_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSpatialZone_CorrectTypeAssigned: SCOPE = 'entity' @@ -11535,8 +11542,8 @@ class IfcSpatialZone_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcspatialzonetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcspatialzonetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSpatialZoneType_CorrectPredefinedType: SCOPE = 'entity' @@ -11545,8 +11552,8 @@ class IfcSpatialZoneType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -11555,8 +11562,8 @@ class IfcStackTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStackTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -11565,8 +11572,8 @@ class IfcStackTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcstackterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcstackterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStackTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -11575,8 +11582,8 @@ class IfcStackTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStair_CorrectPredefinedType: SCOPE = 'entity' @@ -11585,8 +11592,8 @@ class IfcStair_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStair_CorrectTypeAssigned: SCOPE = 'entity' @@ -11595,8 +11602,8 @@ class IfcStair_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcstairtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcstairtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlight_CorrectPredefinedType: SCOPE = 'entity' @@ -11605,8 +11612,8 @@ class IfcStairFlight_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStairFlight_CorrectTypeAssigned: SCOPE = 'entity' @@ -11615,8 +11622,8 @@ class IfcStairFlight_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcstairflighttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcstairflighttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcStairFlightType_CorrectPredefinedType: SCOPE = 'entity' @@ -11625,8 +11632,8 @@ class IfcStairFlightType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStairType_CorrectPredefinedType: SCOPE = 'entity' @@ -11635,8 +11642,8 @@ class IfcStairType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcStructuralAnalysisModel_CorrectPredefinedType: SCOPE = 'entity' @@ -11645,8 +11652,8 @@ class IfcStructuralAnalysisModel_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcStructuralCurveAction_HasObjectType: SCOPE = 'entity' @@ -11655,8 +11662,8 @@ class IfcStructuralCurveAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11665,8 +11672,8 @@ class IfcStructuralCurveAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralCurveAction_SuitablePredefinedType: SCOPE = 'entity' @@ -11675,8 +11682,8 @@ class IfcStructuralCurveAction_SuitablePredefinedType: @staticmethod def __call__(self): - predefinedtype = getattr(self, 'PredefinedType', INDETERMINATE) - assert (predefinedtype != getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE)) is not False class IfcStructuralCurveMember_HasObjectType: SCOPE = 'entity' @@ -11685,8 +11692,8 @@ class IfcStructuralCurveMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_HasObjectType: SCOPE = 'entity' @@ -11695,8 +11702,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralCurveReaction_SuitablePredefinedType: SCOPE = 'entity' @@ -11705,8 +11712,8 @@ class IfcStructuralCurveReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) and predefinedtype != express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE)) is not False class IfcStructuralLinearAction_ConstPredefinedType: SCOPE = 'entity' @@ -11715,7 +11722,7 @@ class IfcStructuralLinearAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralLinearAction_SuitableLoadType: SCOPE = 'entity' @@ -11724,7 +11731,7 @@ class IfcStructuralLinearAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_tc1.ifcstructuralloadlinearforce', 'ifc4x3_tc1.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_tc1.ifcstructuralloadlinearforce', 'ifc4x3_tc1.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralLoadCase_IsLoadCasePredefinedType: SCOPE = 'entity' @@ -11733,7 +11740,7 @@ class IfcStructuralLoadCase_IsLoadCasePredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE)) is not False class IfcStructuralLoadConfiguration_ValidListSize: SCOPE = 'entity' @@ -11742,8 +11749,8 @@ class IfcStructuralLoadConfiguration_ValidListSize: @staticmethod def __call__(self): - values = getattr(self, 'Values', INDETERMINATE) - locations = getattr(self, 'Locations', INDETERMINATE) + values = express_getattr(self, 'Values', INDETERMINATE) + locations = express_getattr(self, 'Locations', INDETERMINATE) assert (not exists(locations) or sizeof(locations) == sizeof(values)) is not False class IfcStructuralLoadGroup_HasObjectType: @@ -11753,10 +11760,10 @@ class IfcStructuralLoadGroup_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + actiontype = express_getattr(self, 'ActionType', INDETERMINATE) + actionsource = express_getattr(self, 'ActionSource', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) and actiontype != express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) and (actionsource != express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE)) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralPlanarAction_ConstPredefinedType: SCOPE = 'entity' @@ -11765,7 +11772,7 @@ class IfcStructuralPlanarAction_ConstPredefinedType: @staticmethod def __call__(self): - assert (getattr(self, 'PredefinedType', INDETERMINATE) == getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False + assert (express_getattr(self, 'PredefinedType', INDETERMINATE) == express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE)) is not False class IfcStructuralPlanarAction_SuitableLoadType: SCOPE = 'entity' @@ -11774,7 +11781,7 @@ class IfcStructuralPlanarAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_tc1.ifcstructuralloadplanarforce', 'ifc4x3_tc1.ifcstructuralloadtemperature'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_tc1.ifcstructuralloadplanarforce', 'ifc4x3_tc1.ifcstructuralloadtemperature'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointAction_SuitableLoadType: SCOPE = 'entity' @@ -11783,7 +11790,7 @@ class IfcStructuralPointAction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_tc1.ifcstructuralloadsingleforce', 'ifc4x3_tc1.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_tc1.ifcstructuralloadsingleforce', 'ifc4x3_tc1.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralPointReaction_SuitableLoadType: SCOPE = 'entity' @@ -11792,7 +11799,7 @@ class IfcStructuralPointReaction_SuitableLoadType: @staticmethod def __call__(self): - assert (sizeof(['ifc4x3_tc1.ifcstructuralloadsingleforce', 'ifc4x3_tc1.ifcstructuralloadsingledisplacement'] * typeof(getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False + assert (sizeof(['ifc4x3_tc1.ifcstructuralloadsingleforce', 'ifc4x3_tc1.ifcstructuralloadsingledisplacement'] * typeof(express_getattr(self, 'AppliedLoad', INDETERMINATE))) == 1) is not False class IfcStructuralResultGroup_HasObjectType: SCOPE = 'entity' @@ -11801,8 +11808,8 @@ class IfcStructuralResultGroup_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 + theorytype = express_getattr(self, 'TheoryType', INDETERMINATE) + assert (theorytype != express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_HasObjectType: SCOPE = 'entity' @@ -11811,8 +11818,8 @@ class IfcStructuralSurfaceAction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceAction_ProjectedIsGlobal: SCOPE = 'entity' @@ -11821,8 +11828,8 @@ class IfcStructuralSurfaceAction_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 + projectedortrue = express_getattr(self, 'ProjectedOrTrue', INDETERMINATE) + assert (not exists(projectedortrue) or (projectedortrue != projected_length or express_getattr(self, 'GlobalOrLocal', INDETERMINATE) == global_coords)) is not False class IfcStructuralSurfaceMember_HasObjectType: SCOPE = 'entity' @@ -11831,8 +11838,8 @@ class IfcStructuralSurfaceMember_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStructuralSurfaceReaction_HasPredefinedType: SCOPE = 'entity' @@ -11841,8 +11848,8 @@ class IfcStructuralSurfaceReaction_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) or exists(express_getattr(self, 'ObjectType', INDETERMINATE))) is not False class IfcStyledItem_ApplicableItem: SCOPE = 'entity' @@ -11851,7 +11858,7 @@ class IfcStyledItem_ApplicableItem: @staticmethod def __call__(self): - item = getattr(self, 'Item', INDETERMINATE) + item = express_getattr(self, 'Item', INDETERMINATE) assert (not 'ifc4x3_tc1.ifcstyleditem' in typeof(item)) is not False class IfcStyledRepresentation_OnlyStyledItems: @@ -11861,7 +11868,7 @@ class IfcStyledRepresentation_OnlyStyledItems: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_tc1.ifcstyleditem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_tc1.ifcstyleditem' in typeof(temp)]) == 0) is not False class IfcSubContractResource_CorrectPredefinedType: SCOPE = 'entity' @@ -11870,8 +11877,8 @@ class IfcSubContractResource_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSubContractResourceType_CorrectPredefinedType: SCOPE = 'entity' @@ -11880,8 +11887,8 @@ class IfcSubContractResourceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ResourceType', INDETERMINATE)))) is not False def calc_IfcSurface_Dim(self): return 3 @@ -11893,8 +11900,8 @@ class IfcSurfaceCurve_CurveIs3D: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) - assert (getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) + assert (express_getattr(curve3d, 'Dim', INDETERMINATE) == 3) is not False class IfcSurfaceCurve_CurveIsNotPcurve: SCOPE = 'entity' @@ -11903,7 +11910,7 @@ class IfcSurfaceCurve_CurveIsNotPcurve: @staticmethod def __call__(self): - curve3d = getattr(self, 'Curve3D', INDETERMINATE) + curve3d = express_getattr(self, 'Curve3D', INDETERMINATE) assert (not 'ifc4x3_tc1.ifcpcurve' in typeof(curve3d)) is not False def calc_IfcSurfaceCurve_BasisSurface(self): @@ -11916,8 +11923,8 @@ class IfcSurfaceFeature_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: SCOPE = 'entity' @@ -11926,17 +11933,17 @@ class IfcSurfaceOfLinearExtrusion_DepthGreaterZero: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) + depth = express_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) + extrudeddirection = express_getattr(self, 'ExtrudedDirection', INDETERMINATE) + depth = express_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)) + axisposition = express_getattr(self, 'AxisPosition', INDETERMINATE) + return IfcLine(Pnt=express_getattr(axisposition, 'Location', INDETERMINATE), Dir=IfcVector(Orientation=express_getattr(axisposition, 'Z', INDETERMINATE), Magnitude=1.0)) class IfcSurfaceReinforcementArea_NonnegativeArea1: SCOPE = 'entity' @@ -11945,7 +11952,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea1: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement1 = express_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: @@ -11955,7 +11962,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea2: @staticmethod def __call__(self): - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + surfacereinforcement2 = express_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: @@ -11965,7 +11972,7 @@ class IfcSurfaceReinforcementArea_NonnegativeArea3: @staticmethod def __call__(self): - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (not exists(shearreinforcement) or shearreinforcement >= 0.0) is not False class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @@ -11975,9 +11982,9 @@ class IfcSurfaceReinforcementArea_SurfaceAndOrShearAreaSpecified: @staticmethod def __call__(self): - surfacereinforcement1 = getattr(self, 'SurfaceReinforcement1', INDETERMINATE) - surfacereinforcement2 = getattr(self, 'SurfaceReinforcement2', INDETERMINATE) - shearreinforcement = getattr(self, 'ShearReinforcement', INDETERMINATE) + surfacereinforcement1 = express_getattr(self, 'SurfaceReinforcement1', INDETERMINATE) + surfacereinforcement2 = express_getattr(self, 'SurfaceReinforcement2', INDETERMINATE) + shearreinforcement = express_getattr(self, 'ShearReinforcement', INDETERMINATE) assert (exists(surfacereinforcement1) or exists(surfacereinforcement2) or exists(shearreinforcement)) is not False class IfcSurfaceStyle_MaxOneExtDefined: @@ -11987,7 +11994,7 @@ class IfcSurfaceStyle_MaxOneExtDefined: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcexternallydefinedsurfacestyle' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneLighting: SCOPE = 'entity' @@ -11996,7 +12003,7 @@ class IfcSurfaceStyle_MaxOneLighting: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcsurfacestylelighting' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneRefraction: SCOPE = 'entity' @@ -12005,7 +12012,7 @@ class IfcSurfaceStyle_MaxOneRefraction: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcsurfacestylerefraction' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneShading: SCOPE = 'entity' @@ -12014,7 +12021,7 @@ class IfcSurfaceStyle_MaxOneShading: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcsurfacestyleshading' in typeof(style)]) <= 1) is not False class IfcSurfaceStyle_MaxOneTextures: SCOPE = 'entity' @@ -12023,7 +12030,7 @@ class IfcSurfaceStyle_MaxOneTextures: @staticmethod def __call__(self): - assert (sizeof([style for style in getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False + assert (sizeof([style for style in express_getattr(self, 'Styles', INDETERMINATE) if 'ifc4x3_tc1.ifcsurfacestylewithtextures' in typeof(style)]) <= 1) is not False class IfcSweptAreaSolid_SweptAreaType: SCOPE = 'entity' @@ -12032,8 +12039,8 @@ class IfcSweptAreaSolid_SweptAreaType: @staticmethod def __call__(self): - sweptarea = getattr(self, 'SweptArea', INDETERMINATE) - assert (getattr(sweptarea, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False + sweptarea = express_getattr(self, 'SweptArea', INDETERMINATE) + assert (express_getattr(sweptarea, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Area', INDETERMINATE)) is not False class IfcSweptDiskSolid_DirectrixBounded: SCOPE = 'entity' @@ -12042,9 +12049,9 @@ class IfcSweptDiskSolid_DirectrixBounded: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - startparam = getattr(self, 'StartParam', INDETERMINATE) - endparam = getattr(self, 'EndParam', INDETERMINATE) + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + startparam = express_getattr(self, 'StartParam', INDETERMINATE) + endparam = express_getattr(self, 'EndParam', INDETERMINATE) assert (exists(startparam) and exists(endparam) or sizeof(['ifc4x3_tc1.ifcconic', 'ifc4x3_tc1.ifcboundedcurve'] * typeof(directrix)) == 1) is not False class IfcSweptDiskSolid_DirectrixDim: @@ -12054,8 +12061,8 @@ class IfcSweptDiskSolid_DirectrixDim: @staticmethod def __call__(self): - directrix = getattr(self, 'Directrix', INDETERMINATE) - assert (getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False + directrix = express_getattr(self, 'Directrix', INDETERMINATE) + assert (express_getattr(directrix, 'Dim', INDETERMINATE) == 3) is not False class IfcSweptDiskSolid_InnerRadiusSize: SCOPE = 'entity' @@ -12064,8 +12071,8 @@ class IfcSweptDiskSolid_InnerRadiusSize: @staticmethod def __call__(self): - radius = getattr(self, 'Radius', INDETERMINATE) - innerradius = getattr(self, 'InnerRadius', INDETERMINATE) + radius = express_getattr(self, 'Radius', INDETERMINATE) + innerradius = express_getattr(self, 'InnerRadius', INDETERMINATE) assert (not exists(innerradius) or radius > innerradius) is not False class IfcSweptDiskSolidPolygonal_CorrectRadii: @@ -12075,8 +12082,8 @@ class IfcSweptDiskSolidPolygonal_CorrectRadii: @staticmethod def __call__(self): - filletradius = getattr(self, 'FilletRadius', INDETERMINATE) - assert (not exists(filletradius) or filletradius >= getattr(self, 'Radius', INDETERMINATE)) is not False + filletradius = express_getattr(self, 'FilletRadius', INDETERMINATE) + assert (not exists(filletradius) or filletradius >= express_getattr(self, 'Radius', INDETERMINATE)) is not False class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: SCOPE = 'entity' @@ -12085,7 +12092,7 @@ class IfcSweptDiskSolidPolygonal_DirectrixIsPolyline: @staticmethod def __call__(self): - assert ('ifc4x3_tc1.ifcpolyline' in typeof(getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_tc1.ifcindexedpolycurve' in typeof(getattr(self, 'Directrix', INDETERMINATE)) and (not exists(getattr(getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False + assert ('ifc4x3_tc1.ifcpolyline' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) or ('ifc4x3_tc1.ifcindexedpolycurve' in typeof(express_getattr(self, 'Directrix', INDETERMINATE)) and (not exists(express_getattr(express_getattr(self, 'Directrix', INDETERMINATE), 'Segments', INDETERMINATE))))) is not False class IfcSweptSurface_SweptCurveType: SCOPE = 'entity' @@ -12094,8 +12101,8 @@ class IfcSweptSurface_SweptCurveType: @staticmethod def __call__(self): - sweptcurve = getattr(self, 'SweptCurve', INDETERMINATE) - assert (getattr(sweptcurve, 'ProfileType', INDETERMINATE) == getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False + sweptcurve = express_getattr(self, 'SweptCurve', INDETERMINATE) + assert (express_getattr(sweptcurve, 'ProfileType', INDETERMINATE) == express_getattr(IfcProfileTypeEnum, 'Curve', INDETERMINATE)) is not False class IfcSwitchingDevice_CorrectPredefinedType: SCOPE = 'entity' @@ -12104,8 +12111,8 @@ class IfcSwitchingDevice_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSwitchingDevice_CorrectTypeAssigned: SCOPE = 'entity' @@ -12114,8 +12121,8 @@ class IfcSwitchingDevice_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcswitchingdevicetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcswitchingdevicetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSwitchingDeviceType_CorrectPredefinedType: SCOPE = 'entity' @@ -12124,8 +12131,8 @@ class IfcSwitchingDeviceType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12134,8 +12141,8 @@ class IfcSystemFurnitureElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcSystemFurnitureElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12144,8 +12151,8 @@ class IfcSystemFurnitureElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsystemfurnitureelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcsystemfurnitureelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcSystemFurnitureElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12154,8 +12161,8 @@ class IfcSystemFurnitureElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12164,8 +12171,8 @@ class IfcTShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth) is not False class IfcTShapeProfileDef_ValidWebThickness: @@ -12175,8 +12182,8 @@ class IfcTShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcTable_WR1: @@ -12186,8 +12193,8 @@ class IfcTable_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 + rows = express_getattr(self, 'Rows', INDETERMINATE) + assert (sizeof([temp for temp in rows if hiindex(express_getattr(temp, 'RowCells', INDETERMINATE)) != hiindex(express_getattr(express_getitem(rows, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RowCells', INDETERMINATE))]) == 0) is not False class IfcTable_WR2: SCOPE = 'entity' @@ -12196,20 +12203,20 @@ class IfcTable_WR2: @staticmethod def __call__(self): - numberofheadings = getattr(self, 'NumberOfHeadings', INDETERMINATE) + numberofheadings = express_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)) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return hiindex(express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if express_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)]) + rows = express_getattr(self, 'Rows', INDETERMINATE) + return sizeof([temp for temp in rows if not express_getattr(temp, 'IsHeading', INDETERMINATE)]) class IfcTank_CorrectPredefinedType: SCOPE = 'entity' @@ -12218,8 +12225,8 @@ class IfcTank_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTank_CorrectTypeAssigned: SCOPE = 'entity' @@ -12228,8 +12235,8 @@ class IfcTank_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctanktype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctanktype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTankType_CorrectPredefinedType: SCOPE = 'entity' @@ -12238,8 +12245,8 @@ class IfcTankType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTask_CorrectPredefinedType: SCOPE = 'entity' @@ -12248,8 +12255,8 @@ class IfcTask_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTask_HasName: SCOPE = 'entity' @@ -12258,7 +12265,7 @@ class IfcTask_HasName: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTaskType_CorrectPredefinedType: SCOPE = 'entity' @@ -12267,8 +12274,8 @@ class IfcTaskType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ProcessType', INDETERMINATE)))) is not False class IfcTelecomAddress_MinimumDataProvided: SCOPE = 'entity' @@ -12277,12 +12284,12 @@ class IfcTelecomAddress_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) + telephonenumbers = express_getattr(self, 'TelephoneNumbers', INDETERMINATE) + facsimilenumbers = express_getattr(self, 'FacsimileNumbers', INDETERMINATE) + pagernumber = express_getattr(self, 'PagerNumber', INDETERMINATE) + electronicmailaddresses = express_getattr(self, 'ElectronicMailAddresses', INDETERMINATE) + wwwhomepageurl = express_getattr(self, 'WWWHomePageURL', INDETERMINATE) + messagingids = express_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: @@ -12292,8 +12299,8 @@ class IfcTendon_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendon_CorrectTypeAssigned: SCOPE = 'entity' @@ -12302,8 +12309,8 @@ class IfcTendon_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctendontype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctendontype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchor_CorrectPredefinedType: SCOPE = 'entity' @@ -12312,8 +12319,8 @@ class IfcTendonAnchor_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonAnchor_CorrectTypeAssigned: SCOPE = 'entity' @@ -12322,8 +12329,8 @@ class IfcTendonAnchor_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctendonanchortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctendonanchortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonAnchorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12332,8 +12339,8 @@ class IfcTendonAnchorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectPredefinedType: SCOPE = 'entity' @@ -12342,8 +12349,8 @@ class IfcTendonConduit_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, 'ObjectType', INDETERMINATE)))) is not False + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTendonConduit_CorrectTypeAssigned: SCOPE = 'entity' @@ -12352,8 +12359,8 @@ class IfcTendonConduit_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctendonconduittype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctendonconduittype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTendonConduitType_CorrectPredefinedType: SCOPE = 'entity' @@ -12362,8 +12369,8 @@ class IfcTendonConduitType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTendonType_CorrectPredefinedType: SCOPE = 'entity' @@ -12372,8 +12379,8 @@ class IfcTendonType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTessellatedFaceSet_Dim(self): return 3 @@ -12385,7 +12392,7 @@ class IfcTextLiteralWithExtent_WR31: @staticmethod def __call__(self): - extent = getattr(self, 'Extent', INDETERMINATE) + extent = express_getattr(self, 'Extent', INDETERMINATE) assert (not 'ifc4x3_tc1.ifcplanarbox' in typeof(extent)) is not False class IfcTextStyleFontModel_MeasureOfFontSize: @@ -12395,7 +12402,7 @@ class IfcTextStyleFontModel_MeasureOfFontSize: @staticmethod def __call__(self): - assert ('ifc4x3_tc1.ifclengthmeasure' in typeof(getattr(self, 'FontSize', INDETERMINATE)) and getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False + assert ('ifc4x3_tc1.ifclengthmeasure' in typeof(express_getattr(self, 'FontSize', INDETERMINATE)) and express_getattr(self, 'FontSize', INDETERMINATE) > 0.0) is not False class IfcTopologyRepresentation_WR21: SCOPE = 'entity' @@ -12404,7 +12411,7 @@ class IfcTopologyRepresentation_WR21: @staticmethod def __call__(self): - assert (sizeof([temp for temp in getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_tc1.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False + assert (sizeof([temp for temp in express_getattr(self, 'Items', INDETERMINATE) if not 'ifc4x3_tc1.ifctopologicalrepresentationitem' in typeof(temp)]) == 0) is not False class IfcTopologyRepresentation_WR22: SCOPE = 'entity' @@ -12413,7 +12420,7 @@ class IfcTopologyRepresentation_WR22: @staticmethod def __call__(self): - assert exists(getattr(self, 'RepresentationType', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'RepresentationType', INDETERMINATE)) is not False class IfcTopologyRepresentation_WR23: SCOPE = 'entity' @@ -12422,7 +12429,7 @@ class IfcTopologyRepresentation_WR23: @staticmethod def __call__(self): - assert IfcTopologyRepresentationTypes(getattr(self, 'RepresentationType', INDETERMINATE), getattr(self, 'Items', INDETERMINATE)) is not False + assert IfcTopologyRepresentationTypes(express_getattr(self, 'RepresentationType', INDETERMINATE), express_getattr(self, 'Items', INDETERMINATE)) is not False class IfcToroidalSurface_MajorLargerMinor: SCOPE = 'entity' @@ -12431,8 +12438,8 @@ class IfcToroidalSurface_MajorLargerMinor: @staticmethod def __call__(self): - majorradius = getattr(self, 'MajorRadius', INDETERMINATE) - minorradius = getattr(self, 'MinorRadius', INDETERMINATE) + majorradius = express_getattr(self, 'MajorRadius', INDETERMINATE) + minorradius = express_getattr(self, 'MinorRadius', INDETERMINATE) assert (minorradius < majorradius) is not False class IfcTrackElement_CorrectPredefinedType: @@ -12442,8 +12449,8 @@ class IfcTrackElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTrackElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12452,8 +12459,8 @@ class IfcTrackElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctrackelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctrackelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTrackElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12462,8 +12469,8 @@ class IfcTrackElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransformer_CorrectPredefinedType: SCOPE = 'entity' @@ -12472,8 +12479,8 @@ class IfcTransformer_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransformer_CorrectTypeAssigned: SCOPE = 'entity' @@ -12482,8 +12489,8 @@ class IfcTransformer_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctransformertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctransformertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransformerType_CorrectPredefinedType: SCOPE = 'entity' @@ -12492,8 +12499,8 @@ class IfcTransformerType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12502,8 +12509,8 @@ class IfcTransportElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTransportElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12512,8 +12519,8 @@ class IfcTransportElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctransportelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctransportelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTransportElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12522,11 +12529,11 @@ class IfcTransportElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False def calc_IfcTriangulatedFaceSet_NumberOfTriangles(self): - coordindex = getattr(self, 'CoordIndex', INDETERMINATE) + coordindex = express_getattr(self, 'CoordIndex', INDETERMINATE) return sizeof(coordindex) class IfcTriangulatedIrregularNetwork_NotClosed: @@ -12536,7 +12543,7 @@ class IfcTriangulatedIrregularNetwork_NotClosed: @staticmethod def __call__(self): - assert (getattr(self, 'Closed', INDETERMINATE) == False) is not False + assert (express_getattr(self, 'Closed', INDETERMINATE) == False) is not False class IfcTrimmedCurve_NoTrimOfBoundedCurves: SCOPE = 'entity' @@ -12545,7 +12552,7 @@ class IfcTrimmedCurve_NoTrimOfBoundedCurves: @staticmethod def __call__(self): - basiscurve = getattr(self, 'BasisCurve', INDETERMINATE) + basiscurve = express_getattr(self, 'BasisCurve', INDETERMINATE) assert (not 'ifc4x3_tc1.ifcboundedcurve' in typeof(basiscurve)) is not False class IfcTrimmedCurve_Trim1ValuesConsistent: @@ -12555,7 +12562,7 @@ class IfcTrimmedCurve_Trim1ValuesConsistent: @staticmethod def __call__(self): - trim1 = getattr(self, 'Trim1', INDETERMINATE) + trim1 = express_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: @@ -12565,7 +12572,7 @@ class IfcTrimmedCurve_Trim2ValuesConsistent: @staticmethod def __call__(self): - trim2 = getattr(self, 'Trim2', INDETERMINATE) + trim2 = express_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: @@ -12575,8 +12582,8 @@ class IfcTubeBundle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcTubeBundle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12585,8 +12592,8 @@ class IfcTubeBundle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctubebundletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifctubebundletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcTubeBundleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12595,8 +12602,8 @@ class IfcTubeBundleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcTypeObject_NameRequired: SCOPE = 'entity' @@ -12605,7 +12612,7 @@ class IfcTypeObject_NameRequired: @staticmethod def __call__(self): - assert exists(getattr(self, 'Name', INDETERMINATE)) is not False + assert exists(express_getattr(self, 'Name', INDETERMINATE)) is not False class IfcTypeObject_UniquePropertySetNames: SCOPE = 'entity' @@ -12614,7 +12621,7 @@ class IfcTypeObject_UniquePropertySetNames: @staticmethod def __call__(self): - haspropertysets = getattr(self, 'HasPropertySets', INDETERMINATE) + haspropertysets = express_getattr(self, 'HasPropertySets', INDETERMINATE) assert (not exists(haspropertysets) or IfcUniquePropertySetNames(haspropertysets)) is not False class IfcTypeProduct_ApplicableOccurrence: @@ -12624,7 +12631,7 @@ class IfcTypeProduct_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_tc1.ifcproduct' in typeof(temp)]) == 0) is not False + assert (not exists(lambda : express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'Types', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not 'ifc4x3_tc1.ifcproduct' in typeof(temp)]) == 0) is not False class IfcUShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -12633,8 +12640,8 @@ class IfcUShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcUShapeProfileDef_ValidWebThickness: @@ -12644,8 +12651,8 @@ class IfcUShapeProfileDef_ValidWebThickness: @staticmethod def __call__(self): - flangewidth = getattr(self, 'FlangeWidth', INDETERMINATE) - webthickness = getattr(self, 'WebThickness', INDETERMINATE) + flangewidth = express_getattr(self, 'FlangeWidth', INDETERMINATE) + webthickness = express_getattr(self, 'WebThickness', INDETERMINATE) assert (webthickness < flangewidth) is not False class IfcUnitAssignment_WR01: @@ -12655,7 +12662,7 @@ class IfcUnitAssignment_WR01: @staticmethod def __call__(self): - units = getattr(self, 'Units', INDETERMINATE) + units = express_getattr(self, 'Units', INDETERMINATE) assert IfcCorrectUnitAssignment(units) is not False class IfcUnitaryControlElement_CorrectPredefinedType: @@ -12665,8 +12672,8 @@ class IfcUnitaryControlElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryControlElement_CorrectTypeAssigned: SCOPE = 'entity' @@ -12675,8 +12682,8 @@ class IfcUnitaryControlElement_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcunitarycontrolelementtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcunitarycontrolelementtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryControlElementType_CorrectPredefinedType: SCOPE = 'entity' @@ -12685,8 +12692,8 @@ class IfcUnitaryControlElementType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectPredefinedType: SCOPE = 'entity' @@ -12695,8 +12702,8 @@ class IfcUnitaryEquipment_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcUnitaryEquipment_CorrectTypeAssigned: SCOPE = 'entity' @@ -12705,8 +12712,8 @@ class IfcUnitaryEquipment_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcunitaryequipmenttype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcunitaryequipmenttype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcUnitaryEquipmentType_CorrectPredefinedType: SCOPE = 'entity' @@ -12715,8 +12722,8 @@ class IfcUnitaryEquipmentType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcValve_CorrectPredefinedType: SCOPE = 'entity' @@ -12725,8 +12732,8 @@ class IfcValve_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcValve_CorrectTypeAssigned: SCOPE = 'entity' @@ -12735,8 +12742,8 @@ class IfcValve_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcvalvetype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcvalvetype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcValveType_CorrectPredefinedType: SCOPE = 'entity' @@ -12745,8 +12752,8 @@ class IfcValveType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVector_MagGreaterOrEqualZero: SCOPE = 'entity' @@ -12755,12 +12762,12 @@ class IfcVector_MagGreaterOrEqualZero: @staticmethod def __call__(self): - magnitude = getattr(self, 'Magnitude', INDETERMINATE) + magnitude = express_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) + orientation = express_getattr(self, 'Orientation', INDETERMINATE) + return express_getattr(orientation, 'Dim', INDETERMINATE) class IfcVehicle_CorrectPredefinedType: SCOPE = 'entity' @@ -12769,8 +12776,8 @@ class IfcVehicle_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVehicle_CorrectTypeAssigned: SCOPE = 'entity' @@ -12779,8 +12786,8 @@ class IfcVehicle_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcvehicletype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcvehicletype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVehicleType_CorrectPredefinedType: SCOPE = 'entity' @@ -12789,8 +12796,8 @@ class IfcVehicleType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectPredefinedType: SCOPE = 'entity' @@ -12799,8 +12806,8 @@ class IfcVibrationDamper_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationDamper_CorrectTypeAssigned: SCOPE = 'entity' @@ -12809,8 +12816,8 @@ class IfcVibrationDamper_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcvibrationdampertype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcvibrationdampertype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationDamperType_CorrectPredefinedType: SCOPE = 'entity' @@ -12819,8 +12826,8 @@ class IfcVibrationDamperType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectPredefinedType: SCOPE = 'entity' @@ -12829,8 +12836,8 @@ class IfcVibrationIsolator_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVibrationIsolator_CorrectTypeAssigned: SCOPE = 'entity' @@ -12839,8 +12846,8 @@ class IfcVibrationIsolator_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcvibrationisolatortype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcvibrationisolatortype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcVibrationIsolatorType_CorrectPredefinedType: SCOPE = 'entity' @@ -12849,8 +12856,8 @@ class IfcVibrationIsolatorType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcVirtualElement_CorrectPredefinedType: SCOPE = 'entity' @@ -12859,8 +12866,8 @@ class IfcVirtualElement_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcVoidingFeature_CorrectPredefinedType: SCOPE = 'entity' @@ -12869,8 +12876,8 @@ class IfcVoidingFeature_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectPredefinedType: SCOPE = 'entity' @@ -12879,8 +12886,8 @@ class IfcWall_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWall_CorrectTypeAssigned: SCOPE = 'entity' @@ -12889,8 +12896,8 @@ class IfcWall_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcwalltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcwalltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWallStandardCase_HasMaterialLayerSetUsage: SCOPE = 'entity' @@ -12899,7 +12906,7 @@ class IfcWallStandardCase_HasMaterialLayerSetUsage: @staticmethod def __call__(self): - assert (sizeof([temp for temp in usedin(self, 'ifc4x3_tc1.ifcrelassociates.relatedobjects') if 'ifc4x3_tc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_tc1.ifcmateriallayersetusage' in typeof(getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False + assert (sizeof([temp for temp in usedin(self, 'ifc4x3_tc1.ifcrelassociates.relatedobjects') if 'ifc4x3_tc1.ifcrelassociatesmaterial' in typeof(temp) and 'ifc4x3_tc1.ifcmateriallayersetusage' in typeof(express_getattr(temp, 'RelatingMaterial', INDETERMINATE))]) == 1) is not False class IfcWallType_CorrectPredefinedType: SCOPE = 'entity' @@ -12908,8 +12915,8 @@ class IfcWallType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectPredefinedType: SCOPE = 'entity' @@ -12918,8 +12925,8 @@ class IfcWasteTerminal_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWasteTerminal_CorrectTypeAssigned: SCOPE = 'entity' @@ -12928,8 +12935,8 @@ class IfcWasteTerminal_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcwasteterminaltype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcwasteterminaltype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWasteTerminalType_CorrectPredefinedType: SCOPE = 'entity' @@ -12938,8 +12945,8 @@ class IfcWasteTerminalType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWindow_CorrectPredefinedType: SCOPE = 'entity' @@ -12948,8 +12955,8 @@ class IfcWindow_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWindow_CorrectTypeAssigned: SCOPE = 'entity' @@ -12958,8 +12965,8 @@ class IfcWindow_CorrectTypeAssigned: @staticmethod def __call__(self): - istypedby = getattr(self, 'IsTypedBy', INDETERMINATE) - assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcwindowtype' in typeof(getattr(express_getitem(getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False + istypedby = express_getattr(self, 'IsTypedBy', INDETERMINATE) + assert (sizeof(istypedby) == 0 or 'ifc4x3_tc1.ifcwindowtype' in typeof(express_getattr(express_getitem(express_getattr(self, 'IsTypedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingType', INDETERMINATE))) is not False class IfcWindowLiningProperties_WR31: SCOPE = 'entity' @@ -12968,8 +12975,8 @@ class IfcWindowLiningProperties_WR31: @staticmethod def __call__(self): - liningdepth = getattr(self, 'LiningDepth', INDETERMINATE) - liningthickness = getattr(self, 'LiningThickness', INDETERMINATE) + liningdepth = express_getattr(self, 'LiningDepth', INDETERMINATE) + liningthickness = express_getattr(self, 'LiningThickness', INDETERMINATE) assert (not (exists(liningdepth) and (not exists(liningthickness)))) is not False class IfcWindowLiningProperties_WR32: @@ -12979,8 +12986,8 @@ class IfcWindowLiningProperties_WR32: @staticmethod def __call__(self): - firsttransomoffset = getattr(self, 'FirstTransomOffset', INDETERMINATE) - secondtransomoffset = getattr(self, 'SecondTransomOffset', INDETERMINATE) + firsttransomoffset = express_getattr(self, 'FirstTransomOffset', INDETERMINATE) + secondtransomoffset = express_getattr(self, 'SecondTransomOffset', INDETERMINATE) assert (not (not exists(firsttransomoffset) and exists(secondtransomoffset))) is not False class IfcWindowLiningProperties_WR33: @@ -12990,8 +12997,8 @@ class IfcWindowLiningProperties_WR33: @staticmethod def __call__(self): - firstmullionoffset = getattr(self, 'FirstMullionOffset', INDETERMINATE) - secondmullionoffset = getattr(self, 'SecondMullionOffset', INDETERMINATE) + firstmullionoffset = express_getattr(self, 'FirstMullionOffset', INDETERMINATE) + secondmullionoffset = express_getattr(self, 'SecondMullionOffset', INDETERMINATE) assert (not (not exists(firstmullionoffset) and exists(secondmullionoffset))) is not False class IfcWindowLiningProperties_WR34: @@ -13001,7 +13008,7 @@ class IfcWindowLiningProperties_WR34: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_tc1.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_tc1.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcWindowPanelProperties_ApplicableToType: SCOPE = 'entity' @@ -13010,7 +13017,7 @@ class IfcWindowPanelProperties_ApplicableToType: @staticmethod def __call__(self): - assert (exists(lambda : express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_tc1.ifcwindowtype' in typeof(express_getitem(getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False + assert (exists(lambda : express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and 'ifc4x3_tc1.ifcwindowtype' in typeof(express_getitem(express_getattr(self, 'DefinesType', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE))) is not False class IfcWindowType_CorrectPredefinedType: SCOPE = 'entity' @@ -13019,8 +13026,8 @@ class IfcWindowType_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (predefinedtype != express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ElementType', INDETERMINATE)))) is not False class IfcWorkCalendar_CorrectPredefinedType: SCOPE = 'entity' @@ -13029,8 +13036,8 @@ class IfcWorkCalendar_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkPlan_CorrectPredefinedType: SCOPE = 'entity' @@ -13039,8 +13046,8 @@ class IfcWorkPlan_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcWorkSchedule_CorrectPredefinedType: SCOPE = 'entity' @@ -13049,8 +13056,8 @@ class IfcWorkSchedule_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 + predefinedtype = express_getattr(self, 'PredefinedType', INDETERMINATE) + assert (not exists(predefinedtype) or predefinedtype != express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) or (predefinedtype == express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) and exists(express_getattr(self, 'ObjectType', INDETERMINATE)))) is not False class IfcZShapeProfileDef_ValidFlangeThickness: SCOPE = 'entity' @@ -13059,8 +13066,8 @@ class IfcZShapeProfileDef_ValidFlangeThickness: @staticmethod def __call__(self): - depth = getattr(self, 'Depth', INDETERMINATE) - flangethickness = getattr(self, 'FlangeThickness', INDETERMINATE) + depth = express_getattr(self, 'Depth', INDETERMINATE) + flangethickness = express_getattr(self, 'FlangeThickness', INDETERMINATE) assert (flangethickness < depth / 2.0) is not False class IfcZone_WR1: @@ -13070,19 +13077,19 @@ class IfcZone_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_tc1.ifczone' in typeof(temp) or 'ifc4x3_tc1.ifcspace' in typeof(temp) or 'ifc4x3_tc1.ifcspatialzone' in typeof(temp))]) == 0) is not False + assert (sizeof(express_getattr(self, 'IsGroupedBy', INDETERMINATE)) == 0 or sizeof([temp for temp in express_getattr(express_getitem(express_getattr(self, 'IsGroupedBy', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatedObjects', INDETERMINATE) if not ('ifc4x3_tc1.ifczone' in typeof(temp) or 'ifc4x3_tc1.ifcspace' in typeof(temp) or 'ifc4x3_tc1.ifcspatialzone' in typeof(temp))]) == 0) is not False class IfcRepresentationContextSameWCS: SCOPE = 'file' @staticmethod def __call__(file): - IfcGeometricRepresentationContext = getattr(file, 'by_type', INDETERMINATE)('IfcGeometricRepresentationContext') + IfcGeometricRepresentationContext = express_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 express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE) != express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE): + isdifferent = not IfcSameValidPrecision(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) or not IfcSameAxis2Placement(express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'WorldCoordinateSystem', INDETERMINATE), express_getattr(express_getitem(IfcGeometricRepresentationContext, 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Precision', INDETERMINATE)) if isdifferent == True: break assert (isdifferent == False) is not False @@ -13092,11 +13099,11 @@ class IfcSingleProjectInstance: @staticmethod def __call__(file): - IfcProject = getattr(file, 'by_type', INDETERMINATE)('IfcProject') + IfcProject = express_getattr(file, 'by_type', INDETERMINATE)('IfcProject') assert (sizeof(IfcProject) <= 1) is not False def IfcAssociatedSurface(arg): - surf = getattr(arg, 'BasisSurface', INDETERMINATE) + surf = express_getattr(arg, 'BasisSurface', INDETERMINATE) return surf def IfcBaseAxis(dim, axis1, axis2, axis3): @@ -13110,13 +13117,13 @@ def IfcBaseAxis(dim, axis1, axis2, axis3): 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) + u[2 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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) + u[1 - EXPRESS_ONE_BASED_INDEXING].DirectionRatios[1 - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_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(express_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 @@ -13134,7 +13141,7 @@ def IfcBuild2Axes(refdirection): 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] + return [d2, express_getattr(IfcNormalise(IfcCrossProduct(d1, d2)), 'Orientation', INDETERMINATE), d1] def IfcConsecutiveSegments(segments): result = True @@ -13171,11 +13178,11 @@ def IfcConstraintsParamBSpline(degree, upknots, upcp, knotmult, knots): 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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[1 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_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) + temp = list(express_getattr(direction2d, 'DirectionRatios', INDETERMINATE)) + temp[2 - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(direction, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) direction2d.DirectionRatios = temp return direction2d @@ -13355,7 +13362,7 @@ def IfcCorrectLocalPlacement(axisplacement, relplacement): if 'ifc4x3_tc1.ifcaxis2placement2d' in typeof(axisplacement): return True if 'ifc4x3_tc1.ifcaxis2placement3d' in typeof(axisplacement): - if getattr(getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: + if express_getattr(express_getattr(relplacement, 'RelativePlacement', INDETERMINATE), 'Dim', INDETERMINATE) == 3: return True else: return False @@ -13368,26 +13375,26 @@ def IfcCorrectUnitAssignment(units): monetaryunitnumber = 0 namedunitnames = express_set([]) derivedunitnames = express_set([]) - namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_tc1.ifcnamedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) - derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_tc1.ifcderivedunit' in typeof(temp) and (not getattr(temp, 'UnitType', INDETERMINATE) == getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) + namedunitnumber = sizeof([temp for temp in units if 'ifc4x3_tc1.ifcnamedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE))]) + derivedunitnumber = sizeof([temp for temp in units if 'ifc4x3_tc1.ifcderivedunit' in typeof(temp) and (not express_getattr(temp, 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE))]) monetaryunitnumber = sizeof([temp for temp in units if 'ifc4x3_tc1.ifcmonetaryunit' in typeof(temp)]) for i in range(1, sizeof(units) + 1): - if 'ifc4x3_tc1.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_tc1.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) + if 'ifc4x3_tc1.ifcnamedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE)): + namedunitnames = namedunitnames + express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) + if 'ifc4x3_tc1.ifcderivedunit' in typeof(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) and (not express_getattr(express_getitem(units, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'UnitType', INDETERMINATE) == express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE)): + derivedunitnames = derivedunitnames + express_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): + if (not exists(arg1) or express_getattr(arg1, 'Dim', INDETERMINATE) == 2) or (not exists(arg2) or express_getattr(arg2, 'Dim', INDETERMINATE) == 2): return None else: - v1 = getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) - v2 = getattr(IfcNormalise(arg2), 'DirectionRatios', INDETERMINATE) + v1 = express_getattr(IfcNormalise(arg1), 'DirectionRatios', INDETERMINATE) + v2 = express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13396,21 +13403,21 @@ def IfcCrossProduct(arg1, arg2): def IfcCurveDim(curve): if 'ifc4x3_tc1.ifcline' in typeof(curve): - return getattr(getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Pnt', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_tc1.ifcconic' in typeof(curve): - return getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_tc1.ifcpolyline' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Points', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_tc1.ifctrimmedcurve' in typeof(curve): - return IfcCurveDim(getattr(curve, 'BasisCurve', INDETERMINATE)) + return IfcCurveDim(express_getattr(curve, 'BasisCurve', INDETERMINATE)) if 'ifc4x3_tc1.ifcgradientcurve' in typeof(curve): return 3 if 'ifc4x3_tc1.ifcsegmentedreferencecurve' in typeof(curve): return 3 if 'ifc4x3_tc1.ifccompositecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_tc1.ifcbsplinecurve' in typeof(curve): - return getattr(express_getitem(getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getitem(express_getattr(curve, 'ControlPointsList', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_tc1.ifcoffsetcurve2d' in typeof(curve): return 2 if 'ifc4x3_tc1.ifcoffsetcurve3d' in typeof(curve): @@ -13420,19 +13427,19 @@ def IfcCurveDim(curve): if 'ifc4x3_tc1.ifccurvesegment2d' in typeof(curve): return 2 if 'ifc4x3_tc1.ifcpolynomialcurve' in typeof(curve): - if not exists(getattr(curve, 'CoefficientsZ', INDETERMINATE)) and getattr(getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: + if not exists(express_getattr(curve, 'CoefficientsZ', INDETERMINATE)) and express_getattr(express_getattr(curve, 'Position', INDETERMINATE), 'Dim', INDETERMINATE) == 2: return 2 return 3 if 'ifc4x3_tc1.ifcpcurve' in typeof(curve): return 3 if 'ifc4x3_tc1.ifcindexedpolycurve' in typeof(curve): - return getattr(getattr(curve, 'Points', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(curve, 'Points', 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: + for i in range(0, express_getattr(b, 'UpperIndexOnControlPoints', INDETERMINATE) + 1): + if express_getitem(express_getattr(b, 'Weights', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) <= 0.0: result = False return result return result @@ -13440,13 +13447,13 @@ def IfcCurveWeightsPositive(b): 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) + result.LengthExponent = express_getattr(result, 'LengthExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LengthExponent', INDETERMINATE) + result.MassExponent = express_getattr(result, 'MassExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'MassExponent', INDETERMINATE) + result.TimeExponent = express_getattr(result, 'TimeExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'TimeExponent', INDETERMINATE) + result.ElectricCurrentExponent = express_getattr(result, 'ElectricCurrentExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ElectricCurrentExponent', INDETERMINATE) + result.ThermodynamicTemperatureExponent = express_getattr(result, 'ThermodynamicTemperatureExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'ThermodynamicTemperatureExponent', INDETERMINATE) + result.AmountOfSubstanceExponent = express_getattr(result, 'AmountOfSubstanceExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'AmountOfSubstanceExponent', INDETERMINATE) + result.LuminousIntensityExponent = express_getattr(result, 'LuminousIntensityExponent', INDETERMINATE) + express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Exponent', INDETERMINATE) * express_getattr(express_getattr(express_getattr(express_getitem(unitelements, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Unit', INDETERMINATE), 'Dimensions', INDETERMINATE), 'LuminousIntensityExponent', INDETERMINATE) return result def IfcDimensionsForSIUnit(n): @@ -13516,15 +13523,15 @@ def IfcDimensionsForSIUnit(n): def IfcDotProduct(arg1, arg2): if not exists(arg1) or not exists(arg2): scalar = None - elif getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + elif express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): scalar = None else: vec1 = IfcNormalise(arg1) vec2 = IfcNormalise(arg2) - ndim = getattr(arg1, 'Dim', INDETERMINATE) + ndim = express_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) + scalar = scalar + express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(vec2, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) return scalar def IfcFirstProjAxis(zaxis, arg): @@ -13533,42 +13540,42 @@ def IfcFirstProjAxis(zaxis, arg): else: z = IfcNormalise(zaxis) if not exists(arg): - if getattr(z, 'DirectionRatios', INDETERMINATE) != [1.0, 0.0, 0.0]: + if express_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: + if express_getattr(arg, 'Dim', INDETERMINATE) != 3: return None - if getattr(IfcCrossProduct(arg, z), 'Magnitude', INDETERMINATE) == 0.0: + if express_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 = express_getattr(IfcVectorDifference(v, xvec), 'Orientation', INDETERMINATE) xaxis = IfcNormalise(xaxis) return xaxis def IfcGetBasisSurface(c): surfs = [] if 'ifc4x3_tc1.ifcpcurve' in typeof(c): - surfs = [getattr(c, 'BasisSurface', INDETERMINATE)] + surfs = [express_getattr(c, 'BasisSurface', INDETERMINATE)] elif 'ifc4x3_tc1.ifcsurfacecurve' in typeof(c): - n = sizeof(getattr(c, 'AssociatedGeometry', INDETERMINATE)) + n = sizeof(express_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)) + surfs = surfs + IfcAssociatedSurface(express_getitem(express_getattr(c, 'AssociatedGeometry', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)) if 'ifc4x3_tc1.ifccompositecurveonsurface' in typeof(c): - n = sizeof(getattr(c, 'Segments', INDETERMINATE)) - if 'ifc4x3_tc1.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_tc1.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)) + n = sizeof(express_getattr(c, 'Segments', INDETERMINATE)) + if 'ifc4x3_tc1.ifccurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + if 'ifc4x3_tc1.ifccompositecurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) if n > 1: for i in range(2, n + 1): - if 'ifc4x3_tc1.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_tc1.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)) + if 'ifc4x3_tc1.ifccurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) + if 'ifc4x3_tc1.ifccompositecurvesegment' in typeof(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE)): + surfs = surfs * IfcGetBasisSurface(express_getattr(express_getitem(express_getattr(c, 'Segments', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'ParentCurve', INDETERMINATE)) return surfs def IfcListToArray(lis, low, u): @@ -13585,9 +13592,9 @@ def IfcListToArray(lis, low, u): def IfcLoopHeadToTail(aloop): p = True - n = sizeof(getattr(aloop, 'EdgeList', INDETERMINATE)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(aloop, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): @@ -13605,10 +13612,10 @@ def IfcMakeArrayOfArray(lis, low1, u1, low2, u2): 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) + max = express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) + if sizeof(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) > 1: + for i in range(2, hiindex(express_getattr(layerset, 'MaterialLayers', INDETERMINATE)) + 1): + max = max + express_getattr(express_getitem(express_getattr(layerset, 'MaterialLayers', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'LayerThickness', INDETERMINATE) return max def IfcNormalise(arg): @@ -13619,25 +13626,25 @@ def IfcNormalise(arg): return None else: if 'ifc4x3_tc1.ifcvector' in typeof(arg): - ndim = getattr(arg, 'Dim', INDETERMINATE) - v.DirectionRatios = getattr(getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) - vec.Magnitude = getattr(arg, 'Magnitude', INDETERMINATE) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_getattr(express_getattr(arg, 'Orientation', INDETERMINATE), 'DirectionRatios', INDETERMINATE) + vec.Magnitude = express_getattr(arg, 'Magnitude', INDETERMINATE) vec.Orientation = v - if getattr(arg, 'Magnitude', INDETERMINATE) == 0.0: + if express_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) + ndim = express_getattr(arg, 'Dim', INDETERMINATE) + v.DirectionRatios = express_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) + mag = mag + express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_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 + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) / mag v.DirectionRatios = temp if 'ifc4x3_tc1.ifcvector' in typeof(arg): vec.Orientation = v @@ -13649,29 +13656,29 @@ def IfcNormalise(arg): return result def IfcOrthogonalComplement(vec): - if not exists(vec) or getattr(vec, 'Dim', INDETERMINATE) != 2: + if not exists(vec) or express_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)]) + result = IfcDirection(DirectionRatios=[-express_getitem(express_getattr(vec, 'DirectionRatios', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_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)) + n = sizeof(express_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) + p = p and express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeEnd', INDETERMINATE) == express_getattr(express_getitem(express_getattr(apath, 'EdgeList', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'EdgeStart', INDETERMINATE) return p def IfcPointDim(point): if 'ifc4x3_tc1.ifccartesianpoint' in typeof(point): - return hiindex(getattr(point, 'Coordinates', INDETERMINATE)) + return hiindex(express_getattr(point, 'Coordinates', INDETERMINATE)) if 'ifc4x3_tc1.ifcpointbydistanceexpression' in typeof(point): - return getattr(getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_tc1.ifcpointoncurve' in typeof(point): - return getattr(getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_tc1.ifcpointonsurface' in typeof(point): - return getattr(getattr(point, 'BasisSurface', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(point, 'BasisSurface', INDETERMINATE), 'Dim', INDETERMINATE) return None def IfcPointListDim(pointlist): @@ -13682,32 +13689,32 @@ def IfcPointListDim(pointlist): 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) + return IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameDirection(express_getitem(express_getattr(ap1, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), express_getitem(express_getattr(ap2, 'P', INDETERMINATE), 2 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), epsilon) and IfcSameCartesianPoint(express_getattr(ap1, 'Location', INDETERMINATE), express_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) + cp1x = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp1y = express_getitem(express_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) + cp2x = express_getitem(express_getattr(cp2, 'Coordinates', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + cp2y = express_getitem(express_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) + if sizeof(express_getattr(cp1, 'Coordinates', INDETERMINATE)) > 2: + cp1z = express_getitem(express_getattr(cp1, 'Coordinates', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(cp2, 'Coordinates', INDETERMINATE)) > 2: + cp2z = express_getitem(express_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) + dir1x = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir1y = express_getitem(express_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) + dir2x = express_getitem(express_getattr(dir2, 'DirectionRatios', INDETERMINATE), 1 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + dir2y = express_getitem(express_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) + if sizeof(express_getattr(dir1, 'DirectionRatios', INDETERMINATE)) > 2: + dir1z = express_getitem(express_getattr(dir1, 'DirectionRatios', INDETERMINATE), 3 - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + if sizeof(express_getattr(dir2, 'DirectionRatios', INDETERMINATE)) > 2: + dir2z = express_getitem(express_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): @@ -13728,15 +13735,15 @@ def IfcScalarTimesVector(scalar, vec): return None else: if 'ifc4x3_tc1.ifcvector' in typeof(vec): - v = getattr(vec, 'Orientation', INDETERMINATE) - mag = scalar * getattr(vec, 'Magnitude', INDETERMINATE) + v = express_getattr(vec, 'Orientation', INDETERMINATE) + mag = scalar * express_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) + for i in range(1, sizeof(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + 1): + temp = list(express_getattr(v, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = -express_getitem(express_getattr(v, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) v.DirectionRatios = temp mag = -mag result = IfcVector(Orientation=IfcNormalise(v), Magnitude=mag) @@ -13752,82 +13759,82 @@ def IfcSecondProjAxis(zaxis, xaxis, arg): temp = IfcScalarTimesVector(IfcDotProduct(v, xaxis), xaxis) yaxis = IfcVectorDifference(yaxis, temp) yaxis = IfcNormalise(yaxis) - return getattr(yaxis, 'Orientation', INDETERMINATE) + return express_getattr(yaxis, 'Orientation', INDETERMINATE) def IfcSegmentDim(segment): if 'ifc4x3_tc1.ifccurvesegment' in typeof(segment): - return getattr(getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) if 'ifc4x3_tc1.ifccompositecurvesegment' in typeof(segment): - return getattr(getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) + return express_getattr(express_getattr(segment, 'ParentCurve', INDETERMINATE), 'Dim', INDETERMINATE) return None def IfcShapeRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'point': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'point': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcpoint' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'pointcloud': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifccartesianpointlist3d' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifccurve' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': - count = sizeof([temp for temp in items if 'ifc4x3_tc1.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_tc1.ifccurve' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'segment': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve2d': + count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'curve3d': + count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifccurve' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'segment': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcsegment' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': - count = sizeof([temp for temp in items if 'ifc4x3_tc1.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_tc1.ifcsurface' in typeof(temp) and getattr(temp, 'Dim', INDETERMINATE) == 3]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface2d': + count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 2]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surface3d': + count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcsurface' in typeof(temp) and express_getattr(temp, 'Dim', INDETERMINATE) == 3]) + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedsurface': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcsectionedsurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'fillarea': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcannotationfillarea' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'text': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'text': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifctextliteral' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsurface': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcbsplinesurface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'annotation2d': count = sizeof([temp for temp in items if sizeof(typeof(temp) * ['ifc4x3_tc1.ifcpoint', 'ifc4x3_tc1.ifccurve', 'ifc4x3_tc1.ifcgeometriccurveset', 'ifc4x3_tc1.ifcannotationfillarea', 'ifc4x3_tc1.ifctextliteral']) == 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometricset': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcgeometricset' in typeof(temp) or 'ifc4x3_tc1.ifcpoint' in typeof(temp) or 'ifc4x3_tc1.ifccurve' in typeof(temp) or ('ifc4x3_tc1.ifcsurface' in typeof(temp))]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'geometriccurveset': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcgeometriccurveset' in typeof(temp) or 'ifc4x3_tc1.ifcgeometricset' in typeof(temp) or 'ifc4x3_tc1.ifcpoint' in typeof(temp) or ('ifc4x3_tc1.ifccurve' in typeof(temp))]) for i in range(1, hiindex(items) + 1): if 'ifc4x3_tc1.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_tc1.ifcsurface' in typeof(temp)]) > 0: + if sizeof([temp for temp in express_getattr(express_getitem(items, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Elements', INDETERMINATE) if 'ifc4x3_tc1.ifcsurface' in typeof(temp)]) > 0: count = count - 1 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'tessellation': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifctessellateditem' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfaceorsolidmodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_tc1.ifctessellateditem', 'ifc4x3_tc1.ifcshellbasedsurfacemodel', 'ifc4x3_tc1.ifcfacebasedsurfacemodel', 'ifc4x3_tc1.ifcsolidmodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'surfacemodel': count = sizeof([temp for temp in items if sizeof(['ifc4x3_tc1.ifctessellateditem', 'ifc4x3_tc1.ifcshellbasedsurfacemodel', 'ifc4x3_tc1.ifcfacebasedsurfacemodel'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'solidmodel': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcsolidmodel' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_tc1.ifcextrudedareasolid', 'ifc4x3_tc1.ifcrevolvedareasolid'] * typeof(temp)) >= 1 and sizeof(['ifc4x3_tc1.ifcextrudedareasolidtapered', 'ifc4x3_tc1.ifcrevolvedareasolidtapered'] * typeof(temp)) == 0]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedsweptsolid': count = sizeof([temp for temp in items if sizeof(['ifc4x3_tc1.ifcsweptareasolid', 'ifc4x3_tc1.ifcsweptdisksolid', 'ifc4x3_tc1.ifcsectionedsolidhorizontal'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'csg': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'csg': count = sizeof([temp for temp in items if sizeof(['ifc4x3_tc1.ifcbooleanresult', 'ifc4x3_tc1.ifccsgprimitive3d', 'ifc4x3_tc1.ifccsgsolid'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'clipping': count = sizeof([temp for temp in items if sizeof(['ifc4x3_tc1.ifccsgsolid', 'ifc4x3_tc1.ifcbooleanclippingresult'] * typeof(temp)) >= 1]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'brep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'brep': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcfacetedbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'advancedbrep': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcmanifoldsolidbrep' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'boundingbox': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcboundingbox' in typeof(temp)]) if sizeof(items) > 1: count = 0 - elif getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'sectionedspine': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcsectionedspine' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'lightsource': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifclightsource' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'mappedrepresentation': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcmappeditem' in typeof(temp)]) else: return None @@ -13835,9 +13842,9 @@ def IfcShapeRepresentationTypes(reptype, 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): + weights = express_getattr(b, 'Weights', INDETERMINATE) + for i in range(0, express_getattr(b, 'UUpper', INDETERMINATE) + 1): + for j in range(0, express_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 @@ -13847,28 +13854,28 @@ def IfcTaperedSweptAreaProfiles(startarea, endarea): result = False if 'ifc4x3_tc1.ifcparameterizedprofiledef' in typeof(startarea): if 'ifc4x3_tc1.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = typeof(startarea) == typeof(endarea) elif 'ifc4x3_tc1.ifcderivedprofiledef' in typeof(endarea): - result = startarea == getattr(endarea, 'ParentProfile', INDETERMINATE) + result = startarea == express_getattr(endarea, 'ParentProfile', INDETERMINATE) else: result = False return result def IfcTopologyRepresentationTypes(reptype, items): count = 0 - if getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': + if express_getattr(reptype, 'lower', INDETERMINATE)() == 'vertex': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcvertex' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'edge': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'edge': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcedge' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'path': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'path': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcpath' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'face': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'face': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcface' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'shell': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'shell': count = sizeof([temp for temp in items if 'ifc4x3_tc1.ifcopenshell' in typeof(temp) or 'ifc4x3_tc1.ifcclosedshell' in typeof(temp)]) - elif getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': + elif express_getattr(reptype, 'lower', INDETERMINATE)() == 'undefined': return True else: return None @@ -13879,7 +13886,7 @@ def IfcUniqueDefinitionNames(relations): 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) + definition = express_getattr(express_getitem(relations, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'RelatingPropertyDefinition', INDETERMINATE) if 'ifc4x3_tc1.ifcpropertysetdefinition' in typeof(definition): properties = properties + definition elif 'ifc4x3_tc1.ifcpropertysetdefinitionset' in typeof(definition): @@ -13892,7 +13899,7 @@ def IfcUniqueDefinitionNames(relations): 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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) return sizeof(names) == sizeof(properties) def IfcUniquePropertySetNames(properties): @@ -13900,7 +13907,7 @@ def IfcUniquePropertySetNames(properties): unnamed = 0 for i in range(1, hiindex(properties) + 1): if 'ifc4x3_tc1.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) + names = names + express_getattr(express_getitem(properties, i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE), 'Name', INDETERMINATE) else: unnamed = unnamed + 1 return sizeof(names) + unnamed == sizeof(properties) @@ -13908,41 +13915,41 @@ def IfcUniquePropertySetNames(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) + names = names + express_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) + names = names + express_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): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_tc1.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_tc1.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) - mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: @@ -13950,31 +13957,31 @@ def IfcVectorDifference(arg1, arg2): return result def IfcVectorSum(arg1, arg2): - if (not exists(arg1) or not exists(arg2)) or getattr(arg1, 'Dim', INDETERMINATE) != getattr(arg2, 'Dim', INDETERMINATE): + if (not exists(arg1) or not exists(arg2)) or express_getattr(arg1, 'Dim', INDETERMINATE) != express_getattr(arg2, 'Dim', INDETERMINATE): return None else: if 'ifc4x3_tc1.ifcvector' in typeof(arg1): - mag1 = getattr(arg1, 'Magnitude', INDETERMINATE) - vec1 = getattr(arg1, 'Orientation', INDETERMINATE) + mag1 = express_getattr(arg1, 'Magnitude', INDETERMINATE) + vec1 = express_getattr(arg1, 'Orientation', INDETERMINATE) else: mag1 = 1.0 vec1 = arg1 if 'ifc4x3_tc1.ifcvector' in typeof(arg2): - mag2 = getattr(arg2, 'Magnitude', INDETERMINATE) - vec2 = getattr(arg2, 'Orientation', INDETERMINATE) + mag2 = express_getattr(arg2, 'Magnitude', INDETERMINATE) + vec2 = express_getattr(arg2, 'Orientation', INDETERMINATE) else: mag2 = 1.0 vec2 = arg2 vec1 = IfcNormalise(vec1) vec2 = IfcNormalise(vec2) - ndim = sizeof(getattr(vec1, 'DirectionRatios', INDETERMINATE)) + ndim = sizeof(express_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) + temp = list(express_getattr(res, 'DirectionRatios', INDETERMINATE)) + temp[i - EXPRESS_ONE_BASED_INDEXING] = mag1 * express_getitem(express_getattr(vec1, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) + mag2 * express_getitem(express_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) + mag = mag + express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) * express_getitem(express_getattr(res, 'DirectionRatios', INDETERMINATE), i - EXPRESS_ONE_BASED_INDEXING, INDETERMINATE) if mag > 0.0: result = IfcVector(Orientation=res, Magnitude=sqrt(mag)) else: From 9f8a4d25b58141c59e198535e5c0b4ac5cd60150 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 25 Dec 2025 12:21:12 +0500 Subject: [PATCH 435/657] cmake export - fix issue finding `zstd` config on Windows --- cmake/CMakeLists.txt | 1 + cmake/IfcOpenShellConfig.cmake.in | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 43b9ba8913..9e88026ac7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -242,6 +242,7 @@ if(WITH_ROCKSDB) # find it's zstd dependency on Windows. # Only do it on Windows, otherwise it might create problems as # findzstd and zstd-config target names do not match. + # https://github.com/facebook/rocksdb/pull/13975 if(WIN32) set(TEMP CMAKE_FIND_PACKAGE_PREFER_CONFIG) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) diff --git a/cmake/IfcOpenShellConfig.cmake.in b/cmake/IfcOpenShellConfig.cmake.in index 414066668d..95df6180f9 100644 --- a/cmake/IfcOpenShellConfig.cmake.in +++ b/cmake/IfcOpenShellConfig.cmake.in @@ -19,7 +19,20 @@ find_dependency(Eigen3 CONFIG) if(IFCOPENSHELL_WITH_ROCKSDB) find_dependency(zstd CONFIG) + + # Temporaily mess with CMAKE_FIND_PACKAGE_PREFER_CONFIG to help RocksDB + # find it's zstd dependency on Windows. + # Only do it on Windows, otherwise it might create problems as + # findzstd and zstd-config target names do not match. + # https://github.com/facebook/rocksdb/pull/13975 + if(WIN32) + set(TEMP CMAKE_FIND_PACKAGE_PREFER_CONFIG) + set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) + endif() find_dependency(RocksDB CONFIG) + if(WIN32) + set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ${TEMP}) + endif() endif() if(IFCOPENSHELL_IFCXML) From 05f7ffcbccdcce0a17654089225e3fbe4417ff15 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 25 Dec 2025 18:32:03 -0600 Subject: [PATCH 436/657] fix #6682: avoid applying styles directly to geometry when inherited from material When duplicating elements, skip assign_body_styles if the element's constituent materials already have style representations. This prevents creating redundant IfcStyledItem entities on the geometry when styles should be inherited from the material definition. --- src/bonsai/bonsai/core/root.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/core/root.py b/src/bonsai/bonsai/core/root.py index d43c20a343..957298c044 100644 --- a/src/bonsai/bonsai/core/root.py +++ b/src/bonsai/bonsai/core/root.py @@ -18,6 +18,7 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional +import ifcopenshell.util.element if TYPE_CHECKING: import bpy @@ -53,11 +54,32 @@ def copy_class( geometry.copy_data_links(data, copied_entities) geometry.change_object_data(obj, data, is_global=True) geometry.rename_object(data, geometry.get_representation_name(ifc.get_entity(data))) - root.assign_body_styles(new, obj) + # Only assign styles if element doesn't get them from material + if not _has_material_styles(ifc, new): + root.assign_body_styles(new, obj) collector.assign(obj) return new +def _has_material_styles(ifc: type[tool.Ifc], element: ifcopenshell.entity_instance) -> bool: + """Check if element has styles defined through its material. + + Returns True if any constituent material has a style representation, + which means styles should NOT be applied directly to the geometry. + """ + materials = ifcopenshell.util.element.get_materials(element) + + if not materials: + return False + + # Check if any of the constituent materials have styles + for material in materials: + if hasattr(material, 'HasRepresentation') and material.HasRepresentation: + return True + + return False + + def assign_class( ifc: type[tool.Ifc], collector: type[tool.Collector], From 96fe9b5398e26f6d53c3e7e0dadd4dfc67acf514 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 25 Dec 2025 19:05:30 -0600 Subject: [PATCH 437/657] Use hide_set() for IfcSpaces instead of hide_viewport Moves IfcSpace hiding from collection assignment to after scene addition, allowing hide_set() to work properly once objects are in the view layer. Fixes RuntimeError during IFC import. --- src/bonsai/bonsai/bim/import_ifc.py | 8 ++++++++ src/bonsai/bonsai/tool/collector.py | 6 ++---- src/bonsai/bonsai/tool/spatial.py | 8 ++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 05bcbed01a..7669edbd14 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -290,6 +290,7 @@ class IfcImporter: self.profile_code("Load linked models") self.add_project_to_scene() self.profile_code("Add project to scene") + self.hide_ifc_spaces() if self.ifc_import_settings.should_clean_mesh and len(self.file.by_type("IfcElement")) < 1000: self.clean_mesh() self.profile_code("Mesh cleaning") @@ -1286,6 +1287,13 @@ class IfcImporter: properties={"Aggregate_Index": aggregate_index, "Name": name}, ) + def hide_ifc_spaces(self): + """Hide IfcSpace objects after they've been added to the scene.""" + for ifc_definition_id, obj in self.added_data.items(): + if isinstance(obj, bpy.types.Object): + element = self.file.by_id(ifc_definition_id) + if element.is_a("IfcSpace"): + obj.hide_set(True) class IfcImportSettings: """ diff --git a/src/bonsai/bonsai/tool/collector.py b/src/bonsai/bonsai/tool/collector.py index 65d5ae49bd..e91c52d3d0 100644 --- a/src/bonsai/bonsai/tool/collector.py +++ b/src/bonsai/bonsai/tool/collector.py @@ -52,12 +52,12 @@ class Collector(bonsai.core.tool.Collector): tool.Geometry.lock_object(obj) element = (element.PartOfU or element.PartOfV or element.PartOfW)[0] if not tool.Spatial.get_grid_props().is_visible: - obj.hide_viewport = True + obj.hide_set(True) elif element.is_a("IfcGrid"): if tool.Geometry.is_locked(element): tool.Geometry.lock_object(obj) if not tool.Spatial.get_grid_props().is_visible: - obj.hide_viewport = True + obj.hide_set(True) if element.is_a("IfcProject"): if tool.Geometry.is_locked(element): @@ -73,8 +73,6 @@ class Collector(bonsai.core.tool.Collector): tool.Geometry.lock_object(obj) collection = cls._create_project_child_collection("IfcSpace") cls.link_collection_object_safe(collection, obj) - if not tool.Spatial.get_spatial_props().is_visible: - obj.hide_viewport = True elif element.is_a("IfcStructuralItem"): collection = cls._create_project_child_collection("IfcStructuralItem") cls.link_collection_object_safe(collection, obj) diff --git a/src/bonsai/bonsai/tool/spatial.py b/src/bonsai/bonsai/tool/spatial.py index a177a237e8..6ca29343e9 100644 --- a/src/bonsai/bonsai/tool/spatial.py +++ b/src/bonsai/bonsai/tool/spatial.py @@ -1213,18 +1213,18 @@ class Spatial(bonsai.core.tool.Spatial): for element in elements: if obj := tool.Ifc.get_object(element): if obj.hide_viewport is True and is_visible: - obj.hide_viewport = False + obj.hide_set(False) elif obj.hide_viewport is False and not is_visible: - obj.hide_viewport = True + obj.hide_set(True) @classmethod def set_grid_visibility(cls, is_visible: bool) -> None: for element in tool.Ifc.get().by_type("IfcGrid") + tool.Ifc.get().by_type("IfcGridAxis"): if obj := tool.Ifc.get_object(element): if obj.hide_viewport is True and is_visible: - obj.hide_viewport = False + obj.hide_set(False) elif obj.hide_viewport is False and not is_visible: - obj.hide_viewport = True + obj.hide_set(True) @classmethod def toggle_spaces_visibility_wired_and_textured(cls, spaces: list[ifcopenshell.entity_instance]) -> None: From 19534e225f0a2d585352baa7b9cbd4e2752930f0 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 25 Dec 2025 19:29:57 -0600 Subject: [PATCH 438/657] Fix #6661: Have `update_drawing_name` function update the camera object's name in Blender, as well. --- src/bonsai/bonsai/core/drawing.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index fd721cd4be..407bb19cb0 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -397,6 +397,12 @@ def update_drawing_name( ) -> None: if drawing_tool.get_name(drawing) != name: ifc.run("attribute.edit_attributes", product=drawing, attributes={"Name": name}) + + # Update the camera object name + camera = ifc.get_object(drawing) + if camera and camera.name != name: + camera.name = name + group = drawing_tool.get_drawing_group(drawing) if drawing_tool.get_name(group) != name: ifc.run("attribute.edit_attributes", product=group, attributes={"Name": name}) From bc6209ad91dbb0c09d011f25b0ecb130629410fb Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 25 Dec 2025 21:18:22 -0600 Subject: [PATCH 439/657] Fix #7372: Increase almost_zero tolerance to handle matrix transformation precision Changed tolerance from 1e-5 to 1e-4 to account for floating-point errors introduced by matrix transformations. Fixes section annotations being incorrectly excluded from drawings when they should be visible. --- src/bonsai/bonsai/bim/module/drawing/helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/helper.py b/src/bonsai/bonsai/bim/module/drawing/helper.py index 3943e8fd2f..01a78aad11 100644 --- a/src/bonsai/bonsai/bim/module/drawing/helper.py +++ b/src/bonsai/bonsai/bim/module/drawing/helper.py @@ -507,7 +507,7 @@ def ortho_view_frame( def almost_zero(v): - return abs(v) < 1e-5 + return abs(v) < 1e-4 def clip_segment(bounds, segm): From 7fcdec0a4c16c5943c0478725b9349558fb330c7 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 27 Dec 2025 09:23:33 -0600 Subject: [PATCH 440/657] extending a2a5780d59df97bfe31fdd41947b66253b65dcc3: Reuse opening if mapped. --- src/bonsai/bonsai/bim/module/model/opening.py | 100 ++++++++++++++---- 1 file changed, 78 insertions(+), 22 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index 962cec8bc2..b1f91a6398 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -133,6 +133,7 @@ class FilledOpeningGenerator: existing_opening_occurrence = self.get_existing_opening_occurrence_if_any(filling) + # CREATE THE OPENING FIRST opening = ifcopenshell.api.root.create_entity( tool.Ifc.get(), ifc_class="IfcOpeningElement", @@ -146,25 +147,31 @@ class FilledOpeningGenerator: is_si=True, ) + # NOW HANDLE REPRESENTATION + # Variables to track if we should reuse a mapped representation + reuse_mapped_representation = False + existing_mapping_source = None + representation = None + if existing_opening_occurrence: representation = ifcopenshell.util.representation.get_representation( existing_opening_occurrence, "Model", "Body", "MODEL_VIEW" ) assert representation - # Check if mapped representation - preserve it + # Check if mapped representation - PRESERVE the mapping structure if ( representation.RepresentationType == "MappedRepresentation" and len(representation.Items) == 1 and representation.Items[0].is_a("IfcMappedItem") ): - source_rep = representation.Items[0].MappingSource.MappedRepresentation - representation = ifcopenshell.util.element.copy_deep( - tool.Ifc.get(), source_rep, exclude=["IfcGeometricRepresentationContext"] - ) + # Store the existing RepresentationMap to reuse it + existing_mapping_source = representation.Items[0].MappingSource + reuse_mapped_representation = True else: representation = ifcopenshell.util.representation.resolve_representation(representation) - else: + + if not reuse_mapped_representation: # Check for library template before generating from filling template_rep = self.get_opening_template_from_type(filling) @@ -175,9 +182,34 @@ class FilledOpeningGenerator: filling, filling_obj, opening_thickness_si=opening_thickness_si ) - mapped_representation = ifcopenshell.api.geometry.map_representation( - tool.Ifc.get(), representation=representation - ) + # Create mapped representation + if reuse_mapped_representation: + # Reuse the existing RepresentationMap - don't create a new one! + context = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") + new_mapped_item = tool.Ifc.get().create_entity( + "IfcMappedItem", + MappingSource=existing_mapping_source, + MappingTarget=tool.Ifc.get().create_entity( + "IfcCartesianTransformationOperator3D", + Axis1=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(1., 0., 0.)), + Axis2=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0., 1., 0.)), + LocalOrigin=tool.Ifc.get().create_entity("IfcCartesianPoint", Coordinates=(0., 0., 0.)), + Scale=1., + Axis3=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0., 0., 1.)) + ) + ) + mapped_representation = tool.Ifc.get().create_entity( + "IfcShapeRepresentation", + ContextOfItems=context, + RepresentationIdentifier="Body", + RepresentationType="MappedRepresentation", + Items=[new_mapped_item] + ) + else: + mapped_representation = ifcopenshell.api.geometry.map_representation( + tool.Ifc.get(), representation=representation + ) + ifcopenshell.api.geometry.assign_representation( tool.Ifc.get(), product=opening, representation=mapped_representation ) @@ -249,12 +281,14 @@ class FilledOpeningGenerator: existing_opening_occurrence = self.get_existing_opening_occurrence_if_any(filling) # Priority order for choosing representation: - # 1. Existing occurrence with Tessellation (best quality) + # 1. Existing occurrence with MappedRepresentation (preserve mapping!) # 2. Library template with Tessellation # 3. Preserved representation from old opening (maintain user's work) # 4. Generate from filling (last resort) representation_to_use = None + reuse_mapped_representation = False + existing_mapping_source = None if existing_opening_occurrence: representation = ifcopenshell.util.representation.get_representation( @@ -267,24 +301,21 @@ class FilledOpeningGenerator: and len(representation.Items) == 1 and representation.Items[0].is_a("IfcMappedItem") ): - source_rep = representation.Items[0].MappingSource.MappedRepresentation - # Prefer Tessellation from existing occurrence over preserved representation - if source_rep.RepresentationType == "Tessellation": - representation_to_use = ifcopenshell.util.element.copy_deep( - tool.Ifc.get(), source_rep, exclude=["IfcGeometricRepresentationContext"] - ) + # PRESERVE the mapped structure - reuse the same RepresentationMap + existing_mapping_source = representation.Items[0].MappingSource + reuse_mapped_representation = True else: representation_to_use = ifcopenshell.util.representation.resolve_representation(representation) - if not representation_to_use: + if not representation_to_use and not reuse_mapped_representation: template_rep = self.get_opening_template_from_type(filling) if template_rep and template_rep.RepresentationType == "Tessellation": representation_to_use = template_rep - if not representation_to_use and preserved_representation: + if not representation_to_use and not reuse_mapped_representation and preserved_representation: representation_to_use = preserved_representation - if not representation_to_use: + if not representation_to_use and not reuse_mapped_representation: opening_obj = tool.Ifc.get_object(opening) if opening_obj: tool.Ifc.unlink(element=opening) @@ -293,9 +324,34 @@ class FilledOpeningGenerator: filling_obj = tool.Ifc.get_object(filling) representation_to_use = self.generate_opening_from_filling(filling, filling_obj) - mapped_representation = ifcopenshell.api.geometry.map_representation( - tool.Ifc.get(), representation=representation_to_use - ) + # Create the mapped representation + if reuse_mapped_representation: + # Reuse existing RepresentationMap - don't create a new one! + context = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") + new_mapped_item = tool.Ifc.get().create_entity( + "IfcMappedItem", + MappingSource=existing_mapping_source, + MappingTarget=tool.Ifc.get().create_entity( + "IfcCartesianTransformationOperator3D", + Axis1=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(1., 0., 0.)), + Axis2=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0., 1., 0.)), + LocalOrigin=tool.Ifc.get().create_entity("IfcCartesianPoint", Coordinates=(0., 0., 0.)), + Scale=1., + Axis3=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0., 0., 1.)) + ) + ) + mapped_representation = tool.Ifc.get().create_entity( + "IfcShapeRepresentation", + ContextOfItems=context, + RepresentationIdentifier="Body", + RepresentationType="MappedRepresentation", + Items=[new_mapped_item] + ) + else: + mapped_representation = ifcopenshell.api.geometry.map_representation( + tool.Ifc.get(), representation=representation_to_use + ) + ifcopenshell.api.geometry.assign_representation( tool.Ifc.get(), product=opening, representation=mapped_representation ) From d69b4927a21fbd623be852827195cf67b756c1a0 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 27 Dec 2025 09:59:47 -0600 Subject: [PATCH 441/657] Fix: Add window to shader editor context override The copy_node_graph() method checks for a "window" key in the context override, but get_shader_editor_context() wasn't providing it. This caused the function to return early, preventing external styles from loading. Updated get_shader_editor_context() to include the window when the screen differs from the current context, following the same pattern used in get_viewport_context(). --- src/bonsai/bonsai/tool/blender.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 505bde2b2d..97b161a11b 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -382,17 +382,22 @@ class Blender(bonsai.core.tool.Blender): assert isinstance(space, bpy.types.SpaceNodeEditor) if space.tree_type == "ShaderNodeTree": context_override = {"area": area, "space": space, "screen": screen} + + # Add window if screen differs from current context + context = bpy.context + if context and context.screen != screen: + window = next( + (w for w in context.window_manager.windows if w.screen == screen), + None + ) + if window: + context_override["window"] = window + return context_override @classmethod def copy_node_graph(cls, material_to: bpy.types.Material, material_from: bpy.types.Material) -> None: temp_override = cls.get_shader_editor_context() - if ( - not temp_override - or any(k not in temp_override for k in ("area", "space", "screen")) - or temp_override.get("window") is None - ): - return shader_editor = temp_override["space"] # remove all nodes from the current material From 315b8b7112d77c134c5d7d07150c1b9c8a9b707e Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sat, 27 Dec 2025 20:58:19 +0100 Subject: [PATCH 442/657] Fix: LoadBlendMetadataAndIFC by using load_handler --- src/bonsai/bonsai/bim/__init__.py | 1 - .../bonsai/bim/module/project/__init__.py | 1 + .../bonsai/bim/module/project/operator.py | 39 +++++++++++++++++++ src/bonsai/bonsai/bim/operator.py | 30 -------------- 4 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 29be20faf4..785d7eac66 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -115,7 +115,6 @@ classes = [ operator.EditBlenderCollection, operator.FileAssociate, operator.FileUnassociate, - operator.LoadBlendMetadataAndIFC, operator.OpenPath, operator.OpenUpstream, operator.OpenUri, diff --git a/src/bonsai/bonsai/bim/module/project/__init__.py b/src/bonsai/bonsai/bim/module/project/__init__.py index 6db688185c..26961b8c64 100644 --- a/src/bonsai/bonsai/bim/module/project/__init__.py +++ b/src/bonsai/bonsai/bim/module/project/__init__.py @@ -68,6 +68,7 @@ classes = ( operator.UnassignLibraryDeclaration, operator.UnlinkIfc, operator.UnloadLink, + operator.LoadBlendMetadataAndIFC, workspace.ExploreHotkey, prop.LibraryBreadcrumb, prop.LibraryElement, diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 64d6877757..c0dd8c70c1 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -3127,3 +3127,42 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): tool.Blender.update_viewport() return {"FINISHED"} + +class LoadBlendMetadataAndIFC(bpy.types.Operator): + bl_idname = "bim.load_blend_metadata_and_ifc" + bl_label = "Load Blend Metadata and IFC" + bl_options = {"REGISTER", "UNDO"} + filepath: bpy.props.StringProperty(name="IFC File Path", default="") + + def execute(self, context): + ifc_file = self.filepath + if not ifc_file: + props = tool.Blender.get_bim_props() + ifc_file = getattr(props, "ifc_file", None) + + if not ifc_file: + self.report({"WARNING"}, "No IFC file path set.") + return {"CANCELLED"} + + suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix + if ifc_file.lower().endswith(".ifc"): + metadata_path = ifc_file[:-4] + suffix + else: + metadata_path = ifc_file + suffix + + # Define a handler to load the IFC project after the blend file is loaded and context is restored + @persistent + def load_handler(*args): + bpy.app.handlers.load_post.remove(load_handler) + # After loading metadata, clear blend warning (no geometry loaded yet) + props = tool.Blender.get_bim_props() + props.has_blend_warning = False + # Load the IFC file into the current session (preserve layout) + bpy.ops.bim.load_project(filepath=ifc_file, should_start_fresh_session=False) + # Disable editing styles + bpy.ops.bim.disable_editing_styles() + self.report({"INFO"}, f"Loaded metadata and IFC: {metadata_path}, {ifc_file}") + + bpy.app.handlers.load_post.append(load_handler) + bpy.ops.wm.open_mainfile(filepath=metadata_path) + return {"FINISHED"} \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 0b7dcd917e..d8c1cab7d1 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -364,36 +364,6 @@ bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') return {"FINISHED"} -class LoadBlendMetadataAndIFC(bpy.types.Operator): - bl_idname = "bim.load_blend_metadata_and_ifc" - bl_label = "Load Blend Metadata and IFC" - bl_options = {"REGISTER", "UNDO"} - filepath: bpy.props.StringProperty(name="IFC File Path", default="") - - def execute(self, context): - ifc_file = self.filepath - if not ifc_file: - props = tool.Blender.get_bim_props() - ifc_file = getattr(props, "ifc_file", None) - - if not ifc_file: - self.report({"WARNING"}, "No IFC file path set.") - return {"CANCELLED"} - - suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix - if ifc_file.lower().endswith(".ifc"): - metadata_path = ifc_file[:-4] + suffix - else: - metadata_path = ifc_file + suffix - # Open the metadata blend file - bpy.ops.wm.open_mainfile(filepath=metadata_path) - # After loading metadata, clear blend warning (no geometry loaded yet) - props = tool.Blender.get_bim_props() - props.has_blend_warning = False - # Load the IFC file into the current session (preserve layout) - bpy.ops.bim.load_project(filepath=ifc_file, should_start_fresh_session=False) - self.report({"INFO"}, f"Loaded metadata and IFC: {metadata_path}, {ifc_file}") - return {"FINISHED"} # TODO: Unused operator. From c0f240379cef47fea9a067208adaa0bb3c108ce7 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 29 Dec 2025 19:17:30 +0100 Subject: [PATCH 443/657] Update formatting expression evaluation to include element context --- src/bonsai/bonsai/bim/module/drawing/data.py | 12 +++++------- src/bonsai/bonsai/tool/drawing.py | 7 +------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/data.py b/src/bonsai/bonsai/bim/module/drawing/data.py index 1b3d1255a1..4941e7f51c 100644 --- a/src/bonsai/bonsai/bim/module/drawing/data.py +++ b/src/bonsai/bonsai/bim/module/drawing/data.py @@ -365,13 +365,11 @@ class DecoratorData: for literal in literals: literal_value = literal.Literal - try: - current_value = cls.evaluate_formatting_expressions(literal_value) - current_value = tool.Drawing.replace_text_literal_variables(current_value, product) + eval_value = cls.evaluate_formatting_expressions(literal_value, product) + current_value = tool.Drawing.replace_text_literal_variables(eval_value, product) except Exception: current_value = literal_value - literal_data = { "Literal": literal_value, "BoxAlignment": literal.BoxAlignment, @@ -404,14 +402,14 @@ class DecoratorData: return element @classmethod - def evaluate_formatting_expressions(cls, text: str) -> str: - """Evaluate formatting expressions wrapped in backticks using ifcopenshell.util.selector.format""" + def evaluate_formatting_expressions(cls, text: str, element=None) -> str: + """Evaluate formatting expressions wrapped in backticks using ifcopenshell.util.selector.format, always passing element context""" import re def evaluate_expression(match): try: expression = match.group(1) - result = ifcopenshell.util.selector.format(expression) + result = ifcopenshell.util.selector.format(expression, element) return str(result) except Exception as e: return match.group(0) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index b687134afc..3f1c6de28d 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -2119,17 +2119,12 @@ class Drawing(bonsai.core.tool.Drawing): for command in re.findall("``.*?``", text): original_command = command - for variable in re.findall("{{.*?}}", command): - value = ifcopenshell.util.selector.get_element_value(product, variable[2:-2]) - value = '"' + str(value).replace('"', '\\"') + '"' - command = command.replace(variable, value) - # Defensive: skip if command[2:-2] is None or 'None' command_content = command[2:-2] if command_content is None or str(command_content).strip().lower() == "none": text = text.replace(original_command, "") else: try: - text = text.replace(original_command, ifcopenshell.util.selector.format(command_content)) + text = text.replace(original_command, ifcopenshell.util.selector.format(command_content, product)) except Exception: text = text.replace(original_command, "") for variable in re.findall("{{.*?}}", text): From 99b162f712bdb7d387d38624c574643bcf30c6fc Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Wed, 31 Dec 2025 07:43:34 -0600 Subject: [PATCH 444/657] Fix #7519: Hide depth attribute in Item Mode for elements with material layer sets When editing representation items for elements with IfcMaterialLayerSetUsage (LAYER2/LAYER3), the depth attribute is now hidden from the UI as it should not be modified at the item level for these parametric elements. The check is performed by accessing the parent element through the representation_obj property in geometry props and checking its material usage type. --- src/bonsai/bonsai/bim/module/model/workspace.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 30acee46e3..08ac200359 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -399,6 +399,16 @@ class EditItemUI: assert obj mesh_props = tool.Geometry.get_mesh_props(obj.data) + + # Get the parent element from representation_obj to check for layer set usage + has_layer_set_usage = False + props = tool.Geometry.get_geometry_props() + if props.representation_obj: + parent_element = tool.Ifc.get_entity(props.representation_obj) + if parent_element: + material_usage = tool.Model.get_usage_type(parent_element) + has_layer_set_usage = material_usage in ("LAYER2", "LAYER3") + if AuthoringData.data["is_representation_item_swept_solid"]: # TODO: support EndSweptArea for IfcRevolvedAreaSolidTapered, # will need to add second attribute for this. @@ -412,8 +422,12 @@ class EditItemUI: op.profile_id = int(mesh_props.item_profile) for item_attribute in mesh_props.item_attributes: + # Skip depth attribute for objects with layer set usage + if has_layer_set_usage and item_attribute.name.lower() == "depth": + continue row = cls.layout.row() draw_attribute(item_attribute, cls.layout) + if len(mesh_props.item_attributes) or AuthoringData.data["is_representation_item_swept_solid"]: row = cls.layout.row() row.operator("bim.update_item_attributes", icon="FILE_REFRESH", text="") From 93de429e03312435f94f80b75847b4ddd6f3a8ff Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Wed, 31 Dec 2025 07:52:19 -0600 Subject: [PATCH 445/657] Previous commit should only apply to LAYER3 objects, since extrusion depth still works for LAYER2 objects. --- src/bonsai/bonsai/bim/module/model/workspace.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 08ac200359..be02f3f4c8 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -407,7 +407,7 @@ class EditItemUI: parent_element = tool.Ifc.get_entity(props.representation_obj) if parent_element: material_usage = tool.Model.get_usage_type(parent_element) - has_layer_set_usage = material_usage in ("LAYER2", "LAYER3") + has_layer_set_usage = material_usage == "LAYER3" if AuthoringData.data["is_representation_item_swept_solid"]: # TODO: support EndSweptArea for IfcRevolvedAreaSolidTapered, @@ -422,7 +422,7 @@ class EditItemUI: op.profile_id = int(mesh_props.item_profile) for item_attribute in mesh_props.item_attributes: - # Skip depth attribute for objects with layer set usage + # Skip depth attribute for LAYER3 objects with layer set usage if has_layer_set_usage and item_attribute.name.lower() == "depth": continue row = cls.layout.row() From 9bac66a01baae521338e0b6845f6ce63aebad854 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sat, 3 Jan 2026 17:53:59 +0000 Subject: [PATCH 446/657] Fix for python 3.14 "In some versions of Python, instances of classes may have an __annotations__ attribute. However, this is not supported functionality. If you need the annotations of an instance, you can use type() to access its class" https://docs.python.org/3/howto/annotations.html --- src/bonsai/bonsai/bim/helper.py | 6 +++++- src/bonsai/bonsai/tool/blender.py | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index 3b3dd502e4..e76b512de3 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -428,7 +428,11 @@ def get_enum_items( else: annotations_data = data - prop = annotations_data.__annotations__[prop_name] + try: + annotations = annotations_data.__annotations__ + except AttributeError: + annotations = type(annotations_data).__annotations__ + prop = annotations[prop_name] items = prop.keywords.get("items") if items is None: return diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 97b161a11b..09bfcf29cc 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -742,7 +742,11 @@ class Blender(bonsai.core.tool.Blender): # Yes, accessing items through annotations is a bit hacky # but it's the only way to get the dynamic enum items # besides providing them to get_enum_safe explicitly. - prop_keywords = props.__annotations__[prop_name].keywords + try: + annotations = props.__annotations__ + except AttributeError: + annotations = type(props).__annotations__ + prop_keywords = annotations[prop_name].keywords items = prop_keywords.get("items") if items is None: return None From c20ed44a0f8dc668d2a7bc64c144c0ba64c3ca55 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sat, 3 Jan 2026 21:58:05 +0000 Subject: [PATCH 447/657] More python 3.14 fixes, see 9bac66a --- src/bonsai/bonsai/bim/ui.py | 18 +++++++++++++++--- src/bonsai/bonsai/tool/snap.py | 12 ++++++++++-- src/bonsai/test/bim/test_feature.py | 12 ++++++++++-- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index e9ab0b446c..82d387e53d 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -837,7 +837,11 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): gizmo_prop_names = {p.attr_name for p in GizmoDoorEdition.dimension_gizmo_props} # Add special gizmos not in dimension_gizmo_props gizmo_prop_names.update(("swing_arc", "flip_arc")) - for prop in door_gizmos.__annotations__: + try: + annotations = door_gizmos.__annotations__ + except AttributeError: + annotations = type(door_gizmos).__annotations__ + for prop in annotations: if prop in gizmo_prop_names: layout.prop(door_gizmos, prop) @@ -846,7 +850,11 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): window_gizmos = self.gizmos.window gizmo_prop_names = {p.attr_name for p in GizmoWindowEdition.dimension_gizmo_props} - for prop in window_gizmos.__annotations__: + try: + annotations = window_gizmos.__annotations__ + except AttributeError: + annotations = type(window_gizmos).__annotations__ + for prop in annotations: if prop in gizmo_prop_names: layout.prop(window_gizmos, prop) @@ -857,7 +865,11 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): gizmo_prop_names = {p.attr_name for p in GizmoStairEdition.dimension_gizmo_props} # Add special gizmos not in dimension_gizmo_props special_gizmo_names = {"lock", "plus", "minus", "cycle"} - for prop in stair_gizmos.__annotations__: + try: + annotations = stair_gizmos.__annotations__ + except AttributeError: + annotations = type(stair_gizmos).__annotations__ + for prop in annotations: if prop in gizmo_prop_names or prop in special_gizmo_names: layout.prop(stair_gizmos, prop) diff --git a/src/bonsai/bonsai/tool/snap.py b/src/bonsai/bonsai/tool/snap.py index 04ec6c538d..0e6fe06f9e 100644 --- a/src/bonsai/bonsai/tool/snap.py +++ b/src/bonsai/bonsai/tool/snap.py @@ -553,7 +553,11 @@ class Snap(bonsai.core.tool.Snap): def filter_snapping_points_by_type(snapping_points): options = ["Plane", "Axis"] props = tool.Snap.get_snap_props() - for prop in props.__annotations__.keys(): + try: + annotations = props.__annotations__ + except AttributeError: + annotations = type(props).__annotations__ + for prop in annotations.keys(): if getattr(props, prop): options.append(props.rna_type.properties[prop].name) @@ -563,7 +567,11 @@ class Snap(bonsai.core.tool.Snap): def filter_snapping_points_by_group(detected_snaps): options = ["Wireframe", "Axis", "Plane"] props = tool.Snap.get_snap_groups() - for prop in props.__annotations__.keys(): + try: + annotations = props.__annotations__ + except AttributeError: + annotations = type(props).__annotations__ + for prop in annotations.keys(): if getattr(props, prop): options.append(props.rna_type.properties[prop].name) filtered_groups = [group for group in detected_snaps if group["group"] in options] diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index fa5ccb36d0..64d7e7cb27 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -96,7 +96,11 @@ class PanelSpy: def __getattr__(self, attr: str) -> PanelSpy | Any: self.spied_attr = attr - if annotation := self.blender_panel.__annotations__.get(attr, None): + try: + annotations = self.blender_panel.__annotations__ + except AttributeError: + annotations = type(self.blender_panel).__annotations__ + if annotation := annotations.get(attr, None): return annotation.keywords.get("default", None) # An operator property if attr == "layout": return self @@ -136,7 +140,11 @@ class PanelSpy: prop_type = props.bl_rna.properties[name].type enum_items = [] if prop_type == "ENUM": - prop_keywords = props.__annotations__[name].keywords + try: + annotations = props.__annotations__ + except AttributeError: + annotations = type(props).__annotations__ + prop_keywords = annotations[name].keywords items = prop_keywords.get("items") if items is not None: if isinstance(items, (list, tuple)): From 56861b9403c7b63d005feb3fe9bbd980c8d0e3cf Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 3 Jan 2026 16:04:58 -0600 Subject: [PATCH 448/657] fix #7153: Include IfcSpatialElementTypes in `purge_unused_objects(object_type='TYPE')` --- src/bonsai/bonsai/tool/type.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/type.py b/src/bonsai/bonsai/tool/type.py index dab53ee14f..6c98e8bb59 100644 --- a/src/bonsai/bonsai/tool/type.py +++ b/src/bonsai/bonsai/tool/type.py @@ -74,7 +74,7 @@ class Type(bonsai.core.tool.Type): def get_model_types(cls) -> list[ifcopenshell.entity_instance]: ifc_file = tool.Ifc.get() types = ifc_file.by_type("IfcElementType") - # exclude IfcSpatialElementType + types += ifc_file.by_type("IfcSpatialElementType") types += ifc_file.by_type("IfcTypeProduct", include_subtypes=False) if not tool.Ifc.get_schema().startswith("IFC4X3"): types += ifc_file.by_type("IfcWindowStyle") From 4874f7770b9c0ffa30022855cc611fe6f3c7d9fd Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 3 Jan 2026 16:52:10 -0600 Subject: [PATCH 449/657] Closes #3764: When switching an instance to a different beam type, preserve the CardinalPoint. --- src/bonsai/bonsai/core/type.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/core/type.py b/src/bonsai/bonsai/core/type.py index 226f00c461..7926c53ff1 100644 --- a/src/bonsai/bonsai/core/type.py +++ b/src/bonsai/bonsai/core/type.py @@ -19,6 +19,7 @@ from __future__ import annotations import bonsai.core.geometry from typing import TYPE_CHECKING, Optional +import ifcopenshell.util.element if TYPE_CHECKING: import bpy @@ -32,14 +33,34 @@ def assign_type( element: ifcopenshell.entity_instance, type: ifcopenshell.entity_instance, ) -> None: + + + # Get the instance's current CardinalPoint before type assignment + instance_cardinal_point = None + instance_material = ifcopenshell.util.element.get_material(element) + if instance_material and instance_material.is_a("IfcMaterialProfileSetUsage"): + instance_cardinal_point = instance_material.CardinalPoint + ifc.run("type.assign_type", related_objects=[element], relating_type=type) obj = ifc.get_object(element) + if type_tool.has_material_usage(element): - pass # for now, representation regeneration handled by API listeners + # Restore the instance's CardinalPoint to the new material usage + if instance_cardinal_point is not None: + new_instance_material = ifcopenshell.util.element.get_material(element) + if new_instance_material and new_instance_material.is_a("IfcMaterialProfileSetUsage"): + if new_instance_material.CardinalPoint != instance_cardinal_point: + new_instance_material.CardinalPoint = instance_cardinal_point + + # Force representation regeneration + from bonsai.bim.module.model.profile import DumbProfileRecalculator + DumbProfileRecalculator().recalculate([obj]) + # for now, representation regeneration handled by API listeners else: type_data = type_tool.get_object_data(ifc.get_object(type)) if type_data: type_tool.change_object_data(obj, type_data, is_global=False) + type_tool.disable_editing(obj) From cb081910833758e7d3c224ee2ac7bf094fc97309 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 3 Jan 2026 18:10:21 -0600 Subject: [PATCH 450/657] close #3451: support comma-separated stylesheet paths Enable multiple CSS files in stylesheet_path using comma separation. Files are loaded in order with natural CSS cascading behavior. Example: "base.css, overrides.css" --- .../bonsai/bim/module/drawing/svgwriter.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py index 2d8c4e60cf..d7ddd0b9f7 100644 --- a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py +++ b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py @@ -257,14 +257,16 @@ class SvgWriter: self.height = self.raw_height * self.svg_scale def add_stylesheet(self): - path = self.resource_paths["Stylesheet"] - if not path: + paths = self.resource_paths["Stylesheet"] + if not paths: return - if not os.path.exists(path): - print(f"WARNING. Couldn't find stylesheet for the drawing by the path: {path}") - return - with open(path, "r") as stylesheet: - self.svg.defs.add(self.svg.style(stylesheet.read())) + path_list = [p.strip() for p in paths.split(',')] + for path in path_list: + if not os.path.exists(path): + print(f"WARNING. Couldn't find stylesheet for the drawing by the path: {path}") + continue + with open(path, "r") as stylesheet: + self.svg.defs.add(self.svg.style(stylesheet.read())) def add_markers(self): path = self.resource_paths["Markers"] From db623f4e734217ba6dbe0e5f802d1da91580197f Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sun, 4 Jan 2026 10:12:16 +0000 Subject: [PATCH 451/657] api.project.append_asset Material Layer orphan fix Fixes typo introduced in b4740b6 where `element in MATERIAL_SETS` should have been `element.is_a() in MATERIAL_SETS`. This resulted in deduplication of layersets, but not of the layers themselves. --- .../ifcopenshell/api/project/append_asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py index c3f55d6795..630e346130 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py @@ -264,7 +264,7 @@ class Usecase: name = element.Name return next((e for e in self.file.by_type("IfcMaterial") if e.Name == name), None) - elif element in MATERIAL_SETS: + elif element.is_a() in MATERIAL_SETS: ifc_class = element.is_a() name_attr = "LayerSetName" if ifc_class == "IfcMaterialLayerSet" else "Name" material_set_name = getattr(element, name_attr) From a17b0604e1a9653a6af25236eb88c6c80ff7dfed Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sun, 4 Jan 2026 11:36:05 +0000 Subject: [PATCH 452/657] api.project.append_asset deduplicate material sets When appending a wall type and a slab type in turn, if their material layer sets have the same name then the slab type would have a wall construction. Now the material sets are compared before reusing an existing material set. --- .../ifcopenshell/api/project/append_asset.py | 70 +++++++++++++++++-- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py index 630e346130..893b32cc02 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py @@ -243,6 +243,59 @@ class Usecase: except RuntimeError: return None + def material_sets_are_equal(self, set1: ifcopenshell.entity_instance, set2: ifcopenshell.entity_instance) -> bool: + """Check if two material sets are structurally equivalent.""" + if set1.is_a() != set2.is_a(): + return False + + ifc_class = set1.is_a() + + if ifc_class == "IfcMaterialLayerSet": + layers1 = set1.MaterialLayers or [] + layers2 = set2.MaterialLayers or [] + if len(layers1) != len(layers2): + return False + for l1, l2 in zip(layers1, layers2): + if (l1.Material is None) != (l2.Material is None): + return False + if l1.Material and l1.Material.Name != l2.Material.Name: + return False + if l1.LayerThickness != l2.LayerThickness: + return False + + elif ifc_class == "IfcMaterialConstituentSet": + constituents1 = set1.MaterialConstituents or [] + constituents2 = set2.MaterialConstituents or [] + if len(constituents1) != len(constituents2): + return False + for c1, c2 in zip(constituents1, constituents2): + if (c1.Material is None) != (c2.Material is None): + return False + if c1.Material and c1.Material.Name != c2.Material.Name: + return False + if c1.Name != c2.Name: + return False + + elif ifc_class == "IfcMaterialProfileSet": + profiles1 = set1.MaterialProfiles or [] + profiles2 = set2.MaterialProfiles or [] + if len(profiles1) != len(profiles2): + return False + for p1, p2 in zip(profiles1, profiles2): + if (p1.Material is None) != (p2.Material is None): + return False + if p1.Material and p1.Material.Name != p2.Material.Name: + return False + if (p1.Profile is None) != (p2.Profile is None): + return False + if p1.Profile: + profile_name1 = getattr(p1.Profile, "ProfileName", None) + profile_name2 = getattr(p2.Profile, "ProfileName", None) + if profile_name1 != profile_name2: + return False + + return True + def get_existing_element(self, element: ifcopenshell.entity_instance) -> Union[ifcopenshell.entity_instance, None]: """Get existing element for a library element. @@ -270,7 +323,11 @@ class Usecase: material_set_name = getattr(element, name_attr) if material_set_name is None: return - return next((e for e in self.file.by_type(ifc_class) if getattr(e, name_attr) == material_set_name), None) + for candidate in self.file.by_type(ifc_class): + if getattr(candidate, name_attr) == material_set_name: + if self.material_sets_are_equal(element, candidate): + return candidate + return None elif element.is_a("IfcProfileDef"): profile_name = element.ProfileName @@ -665,12 +722,11 @@ class Usecase: name_attr = "LayerSetName" if ifc_class == "IfcMaterialLayerSet" else "Name" material_set_name = getattr(element, name_attr) if material_set_name is not None: - existing_material_set = next( - (e for e in ifc_file.by_type(ifc_class) if getattr(e, name_attr) == material_set_name), None - ) - if existing_material_set is not None: - reuse_identities[element_identity] = existing_material_set - return existing_material_set + for candidate in ifc_file.by_type(ifc_class): + if getattr(candidate, name_attr) == material_set_name: + if self.material_sets_are_equal(element, candidate): + reuse_identities[element_identity] = candidate + return candidate elif element.is_a("IfcPresentationStyle"): style_name = element.Name From 831c3190cc5f06dbb53b0faa8876112d28990fdf Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 4 Jan 2026 13:15:39 -0600 Subject: [PATCH 453/657] Fix #7531: Add BBIM_MaterialLayer pset for custom offset persistence and UI improvements This commit introduces a new BBIM_MaterialLayer property set to persist custom material layer offset settings in IFC files, along with significant UI improvements for material editing. Features Added: - New BBIM_MaterialLayer pset with properties: - UseCustomOffset (bool): Toggle for custom offset - CustomOffset (float): Offset value in SI units - CustomWallReference (str): Wall reference point (EXTERIOR/CENTER/INTERIOR) - CustomSlabReference (str): Slab reference point (TOP/MIDDLE/BOTTOM) Tool Updates (tool.py): - Added save_custom_offset_to_pset(): Saves custom offset from UI props to pset - Added load_custom_offset_from_pset(): Loads custom offset from pset to UI props - Updated get_material_layer_custom_offset(): Reads from pset when props unavailable Operator Updates (operator.py): - EnableEditingAssignedMaterial: Loads custom offset from pset on edit start - EditAssignedMaterial: Saves custom offset to pset on edit completion - Fixed KeyError for CardinalPoint in material constituent sets Data Layer (data.py): - Added bbim_material_layer_pset() to ObjectMaterialData for caching pset data - Improves performance by avoiding repeated IFC queries during UI drawing UI Improvements (ui.py): - Added custom offset display in both editable and read-only material UIs - Added OffsetFromReferenceLine display in read-only UI - Implemented dynamic headers based on material type (Layers/Profiles/Constituents) - Improved visual hierarchy with consistent boxing and indentation - Aligned editable and read-only UI layouts for consistency - Fixed layer set boundary labels (Top/Bottom for slabs, Interior/Exterior for walls) - Reorganized "Add Material" section into material layers box Bug Fixes: - Fixed format_distance() to correctly handle negative imperial values (e.g., -0.5' now displays as "-0' - 6"" instead of "0' - -6"") This allows users to set custom material layer offsets that persist in the IFC file and remain available across sessions, with clear visual feedback in both editing and viewing modes. --- .../bonsai/bim/module/drawing/helper.py | 10 +- src/bonsai/bonsai/bim/module/material/data.py | 33 ++++ .../bonsai/bim/module/material/operator.py | 10 +- src/bonsai/bonsai/bim/module/material/ui.py | 182 +++++++++++++----- src/bonsai/bonsai/tool/model.py | 122 ++++++++++-- 5 files changed, 287 insertions(+), 70 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/helper.py b/src/bonsai/bonsai/bim/module/drawing/helper.py index 01a78aad11..4d99d6c91b 100644 --- a/src/bonsai/bonsai/bim/module/drawing/helper.py +++ b/src/bonsai/bonsai/bim/module/drawing/helper.py @@ -313,15 +313,13 @@ def format_distance( if not feet and not add_inches: tx_dist += str(feet) + "'" - # Add "0' - " when we have inches but no feet - # But only add " - " separator if we actually have inches to show if not feet and add_inches: - tx_dist += "0' - " + if value < 0: + tx_dist += "-0' - " + else: + tx_dist += "0' - " elif feet and add_inches: tx_dist += " - " - - if not feet and value < 0: - tx_dist += "-" if add_inches: if feet == 0 and inches == 0 and not frac: # Special case: exactly zero, show "0" diff --git a/src/bonsai/bonsai/bim/module/material/data.py b/src/bonsai/bonsai/bim/module/material/data.py index efe79c1731..3df1506fdc 100644 --- a/src/bonsai/bonsai/bim/module/material/data.py +++ b/src/bonsai/bonsai/bim/module/material/data.py @@ -176,6 +176,7 @@ class ObjectMaterialData: cls.data["active_material_constituents"] = cls.active_material_constituents() # after material_name and type_material cls.data["is_type_material_overridden"] = cls.is_type_material_overridden() + cls.data["bbim_material_layer_pset"] = cls.bbim_material_layer_pset() cls.is_loaded = True @@ -426,3 +427,35 @@ class ObjectMaterialData: # so we check occurrence material explicitly occurrence_material = ifcopenshell.util.element.get_material(cls.element, should_inherit=False) return bool(occurrence_material) + + @classmethod + def bbim_material_layer_pset(cls) -> Union[dict[str, Any], None]: + """Load BBIM_MaterialLayer pset data for display in UI.""" + if not cls.element: + return None + + pset_data = ifcopenshell.util.element.get_pset(cls.element, "BBIM_MaterialLayer") + if not pset_data or not pset_data.get("UseCustomOffset", False): + return None + + # Keep offset in SI units - format_distance will handle conversion + custom_offset_si = pset_data.get("CustomOffset", 0.0) + + # Get the appropriate reference based on usage type + usage_type = tool.Model.get_usage_type(cls.element) + custom_reference = None + reference_label = None + + if usage_type == "LAYER2": + custom_reference = pset_data.get("CustomWallReference", "") + reference_label = "Wall Reference" + elif usage_type == "LAYER3": + custom_reference = pset_data.get("CustomSlabReference", "") + reference_label = "Slab Reference" + + return { + "use_custom_offset": pset_data.get("UseCustomOffset", False), + "custom_offset": custom_offset_si, # Store in SI units + "custom_reference": custom_reference, + "reference_label": reference_label, + } \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/module/material/operator.py b/src/bonsai/bonsai/bim/module/material/operator.py index eef35d519c..e8243ccf1e 100644 --- a/src/bonsai/bonsai/bim/module/material/operator.py +++ b/src/bonsai/bonsai/bim/module/material/operator.py @@ -509,6 +509,10 @@ class EnableEditingAssignedMaterial(bpy.types.Operator): bonsai.bim.helper.import_attributes(material[0], props.material_set_attributes) else: bonsai.bim.helper.import_attributes(material, props.material_set_attributes) + + # Load custom offset from BBIM_MaterialLayer pset + tool.Model.load_custom_offset_from_pset(element, obj) + return {"FINISHED"} def import_attributes_callback( @@ -621,13 +625,17 @@ class EditAssignedMaterial(bpy.types.Operator, tool.Ifc.Operator): obj_material_usage.ReferenceExtent = material.ReferenceExtent layer_sets_to_regenerate.add(obj_material_usage.ForLayerSet) + + # Save custom offset to BBIM_MaterialLayer pset + tool.Model.save_custom_offset_to_pset(obj_element, obj) for layer_set in layer_sets_to_regenerate: wall.DumbWallPlaner().regenerate_from_layer_set(layer_set) slab.DumbSlabPlaner().regenerate_from_layer_set(layer_set) if material_set_usage.is_a("IfcMaterialProfileSetUsage"): - attributes["CardinalPoint"] = int(attributes["CardinalPoint"]) + if "CardinalPoint" in attributes: + attributes["CardinalPoint"] = int(attributes["CardinalPoint"]) ifcopenshell.api.material.edit_profile_usage( self.file, usage=material_set_usage, diff --git a/src/bonsai/bonsai/bim/module/material/ui.py b/src/bonsai/bonsai/bim/module/material/ui.py index 5c1b7d05b2..969661885a 100644 --- a/src/bonsai/bonsai/bim/module/material/ui.py +++ b/src/bonsai/bonsai/bim/module/material/ui.py @@ -20,6 +20,8 @@ from __future__ import annotations import bonsai.bim.helper import bonsai.tool as tool import bpy +import ifcopenshell.util.element +import ifcopenshell.util.unit from bpy.types import Panel, UIList from bonsai.bim.helper import draw_attributes from bonsai.bim.helper import prop_with_search @@ -228,31 +230,47 @@ class BIM_PT_object_material(Panel): self.draw_read_only_set_ui() def draw_editable_set_ui(self): - bonsai.bim.helper.draw_attributes(self.props.material_set_attributes, self.layout) - bonsai.bim.helper.draw_attributes(self.props.material_set_usage_attributes, self.layout) + # Material Set Attributes Section + row = self.layout.row(align=True) + box = row.box() + + bonsai.bim.helper.draw_attributes(self.props.material_set_attributes, box) + bonsai.bim.helper.draw_attributes(self.props.material_set_usage_attributes, box) + # Custom Offset Section self.draw_custom_offset() - if ObjectMaterialData.data["set_item_name"] == "profile" and not self.mprops.profiles: - row = self.layout.row(align=True) - row.label(text="No Profiles Available") - row.operator("bim.add_profile_def", icon="ADD", text="") - else: - layout = self.layout - layout.separator() - layout.separator() - row = self.layout.row(align=True) - if ObjectMaterialData.data["set_item_name"] == "profile": - prop_with_search(row, self.mprops, "profiles", icon="ITALIC", text="") - prop_with_search(row, self.props, "material", icon="MATERIAL", text="") - op = row.operator(f"bim.add_{ObjectMaterialData.data['set_item_name']}", icon="ADD", text="") - setattr(op, f"{ObjectMaterialData.data['set_item_name']}_set", ObjectMaterialData.data["set"]["id"]) + + # Dynamic header based on material set type + set_item_name = ObjectMaterialData.data["set_item_name"] + header_map = { + "layer": "Material Layers", + "profile": "Material Profiles", + "constituent": "Material Constituents", + "list_item": "Material List Items" + } + header_text = header_map.get(set_item_name, "Material Items") + self.layout.label(text=header_text) total_items = len(ObjectMaterialData.data["set_items"]) - layout = self.layout - box = layout.box() + row = self.layout.row(align=True) + box = row.box() + + # Add Material Section (at the top of this box) + if ObjectMaterialData.data["set_item_name"] == "profile" and not self.mprops.profiles: + box_row = box.row(align=True) + box_row.label(text="No Profiles Available") + box_row.operator("bim.add_profile_def", icon="ADD", text="") + else: + box_row = box.row(align=True) + if ObjectMaterialData.data["set_item_name"] == "profile": + prop_with_search(box_row, self.mprops, "profiles", icon="ITALIC", text="") + prop_with_search(box_row, self.props, "material", icon="MATERIAL", text="") + op = box_row.operator(f"bim.add_{ObjectMaterialData.data['set_item_name']}", icon="ADD", text="") + setattr(op, f"{ObjectMaterialData.data['set_item_name']}_set", ObjectMaterialData.data["set"]["id"]) + active_object = bpy.context.active_object - self.layerset_bounds(box, active_object, location="Top_Exterior") + self.layerset_bounds(box, active_object, location="Top_Interior") if not ObjectMaterialData.data["set_items"]: row = box.row() @@ -269,7 +287,7 @@ class BIM_PT_object_material(Panel): else: self.draw_read_only_set_item_ui(box, set_item) - self.layerset_bounds(box, active_object, location="Bottom_Interior") + self.layerset_bounds(box, active_object, location="Bottom_Exterior") def draw_editable_set_item_profile_ui(self, box, set_item): # box = self.layout.box() @@ -335,29 +353,98 @@ class BIM_PT_object_material(Panel): setattr(op, f"{ObjectMaterialData.data['set_item_name']}_index", set_item["index"]) def draw_read_only_set_ui(self): + # Material Set Information Section + row = self.layout.row(align=True) + box = row.box() + if ObjectMaterialData.data["material_class"] != "IfcMaterialList": - row = self.layout.row(align=True) + box_row = box.row(align=True) set_name = ObjectMaterialData.data["set"]["name"] - row.label(text="Name") - row.label(text=set_name) + box_row.label(text="Name") + box_row.label(text=set_name) if value := ObjectMaterialData.data["set"]["description"]: - row = self.layout.row(align=True) - row.label(text="Description") - row.label(text=value) + box_row = box.row(align=True) + box_row.label(text="Description") + box_row.label(text=value) if ObjectMaterialData.data["material_class"] == "IfcMaterialProfileSetUsage": if value := ObjectMaterialData.data["set_usage"].get("cardinal_point"): - row = self.layout.row(align=True) - row.label(text="Cardinal Point") - row.label(text=value) + box_row = box.row(align=True) + box_row.label(text="Cardinal Point") + box_row.label(text=value) if ObjectMaterialData.data["total_thickness"]: - row = self.layout.row(align=True) - row.label(text="Total Thickness*") - row.label(text=ObjectMaterialData.data["total_thickness"]) + box_row = box.row(align=True) + box_row.label(text="Total Thickness*") + box_row.label(text=ObjectMaterialData.data["total_thickness"]) - box = self.layout.box() + # Display OffsetFromReferenceLine for layer sets + if "Layer" in ObjectMaterialData.data["material_class"]: + obj = bpy.context.active_object + if obj: + element = tool.Ifc.get_entity(obj) + if element: + material = ifcopenshell.util.element.get_material(element) + if material and material.is_a("IfcMaterialLayerSetUsage"): + offset_value = material.OffsetFromReferenceLine + # Format the offset value + unit_system = bpy.context.scene.unit_settings.system + prefs = tool.Blender.get_addon_preferences() + precision = None + if unit_system == "IMPERIAL": + precision = prefs.doc.imperial_precision + from bonsai.bim.module.drawing.helper import format_distance + formatted_offset = format_distance( + offset_value, precision=precision, suppress_zero_inches=True, in_unit_length=True + ) + box_row = box.row(align=True) + box_row.label(text="Offset From Reference Line") + box_row.label(text=formatted_offset) + + # BBIM_MaterialLayer Pset Section + if pset_data := ObjectMaterialData.data.get("bbim_material_layer_pset"): + self.layout.label(text="BBIM_MaterialLayer Pset") + + row = self.layout.row(align=True) + box = row.box() + + # Custom Offset value - format using format_distance + unit_system = bpy.context.scene.unit_settings.system + prefs = tool.Blender.get_addon_preferences() + precision = None + if unit_system == "IMPERIAL": + precision = prefs.doc.imperial_precision + from bonsai.bim.module.drawing.helper import format_distance + formatted_custom_offset = format_distance( + pset_data['custom_offset'], precision=precision, suppress_zero_inches=True, in_unit_length=True + ) + box_row = box.row(align=True) + box_row.label(text="Custom Offset") + box_row.label(text=formatted_custom_offset) + + # Reference (if exists) + if pset_data["custom_reference"]: + box_row = box.row(align=True) + box_row.label(text=pset_data["reference_label"]) + box_row.label(text=pset_data["custom_reference"]) + + # Dynamic header based on material set type + set_item_name = ObjectMaterialData.data.get("set_item_name") + if set_item_name: + header_map = { + "layer": "Material Layers", + "profile": "Material Profiles", + "constituent": "Material Constituents", + "list_item": "Material List Items" + } + header_text = header_map.get(set_item_name, "Material Items") + else: + header_text = "Materials" + + self.layout.label(text=header_text) + row = self.layout.row(align=True) + box = row.box() active_object = bpy.context.active_object self.layerset_bounds(box, active_object, location="Top_Interior") @@ -403,20 +490,27 @@ class BIM_PT_object_material(Panel): set_usage = ObjectMaterialData.data.get("set_usage", {}) layer_set_direction = set_usage.get("layer_set_direction") if layer_set_direction: - box = self.layout.box() - row = box.row(align=True) - row.prop(self.props, "use_custom_offset", text="Use Custom Offset") - row = box.row(align=True) + row = self.layout.row(align=True) + row.label(text="BBIM_MaterialLayer Pset") + + # Add indentation with a row that has a separator + row = self.layout.row(align=True) + # row.separator(factor=2.0) # Adjust factor for more/less indent + + box = row.box() + box_row = box.row(align=True) + box_row.prop(self.props, "use_custom_offset", text="Use Custom Offset") + box_row = box.row(align=True) if layer_set_direction == "AXIS2": - row.prop(self.props, "custom_wall_reference", text="Reference") - row.enabled = self.props.use_custom_offset + box_row.prop(self.props, "custom_wall_reference", text="Reference") + box_row.enabled = self.props.use_custom_offset if layer_set_direction == "AXIS3": - row.prop(self.props, "custom_slab_reference", text="Reference") - row.enabled = self.props.use_custom_offset + box_row.prop(self.props, "custom_slab_reference", text="Reference") + box_row.enabled = self.props.use_custom_offset - row = box.row(align=True) - row.prop(self.props, "custom_offset", text="Custom Offset") - row.enabled = self.props.use_custom_offset + box_row = box.row(align=True) + box_row.prop(self.props, "custom_offset", text="Custom Offset") + box_row.enabled = self.props.use_custom_offset class BIM_UL_materials(UIList): diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index bfe8d6b020..2250cbe9c0 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -620,6 +620,72 @@ class Model(bonsai.core.tool.Model): if not openings[i].obj: openings.remove(i) + + @classmethod + def save_custom_offset_to_pset(cls, element: ifcopenshell.entity_instance, obj: bpy.types.Object) -> None: + """Save custom offset settings to BBIM_MaterialLayer pset.""" + props = tool.Material.get_object_material_props(obj) + + if not props.use_custom_offset: + # Remove pset if custom offset is disabled + pset = ifcopenshell.util.element.get_pset(element, "BBIM_MaterialLayer") + if pset: + pset_entity = tool.Ifc.get().by_id(pset["id"]) + ifcopenshell.api.pset.remove_pset(tool.Ifc.get(), product=element, pset=pset_entity) + return + + # Determine which reference to save based on usage type + usage_type = tool.Model.get_usage_type(element) + custom_wall_reference = None + custom_slab_reference = None + + if usage_type == "LAYER2": + custom_wall_reference = props.custom_wall_reference + elif usage_type == "LAYER3": + custom_slab_reference = props.custom_slab_reference + + # Get or create pset + pset_data = ifcopenshell.util.element.get_pset(element, "BBIM_MaterialLayer") + if pset_data: + pset = tool.Ifc.get().by_id(pset_data["id"]) + else: + pset = ifcopenshell.api.pset.add_pset(tool.Ifc.get(), product=element, name="BBIM_MaterialLayer") + + # Save properties (store in SI units) + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + properties = { + "UseCustomOffset": props.use_custom_offset, + "CustomOffset": props.custom_offset / unit_scale, + "CustomWallReference": custom_wall_reference if custom_wall_reference else "", + "CustomSlabReference": custom_slab_reference if custom_slab_reference else "", + } + ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties=properties) + + @classmethod + def load_custom_offset_from_pset(cls, element: ifcopenshell.entity_instance, obj: bpy.types.Object) -> None: + """Load custom offset settings from BBIM_MaterialLayer pset.""" + pset = ifcopenshell.util.element.get_pset(element, "BBIM_MaterialLayer") + if not pset: + return + + props = tool.Material.get_object_material_props(obj) + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + + # Load properties + props.use_custom_offset = pset.get("UseCustomOffset", False) + props.custom_offset = pset.get("CustomOffset", 0.0) * unit_scale # Convert from SI + + # Load the appropriate reference based on usage type + usage_type = tool.Model.get_usage_type(element) + if usage_type == "LAYER2": + custom_wall_ref = pset.get("CustomWallReference", "") + if custom_wall_ref: + props.custom_wall_reference = custom_wall_ref + elif usage_type == "LAYER3": + custom_slab_ref = pset.get("CustomSlabReference", "") + if custom_slab_ref: + props.custom_slab_reference = custom_slab_ref + class MaterialLayerParameters(TypedDict): """Float values are in project units.""" @@ -652,13 +718,33 @@ class Model(bonsai.core.tool.Model): ) @classmethod - def get_material_layer_custom_offset(cls, element: ifcopenshell.entity_instance, obj) -> MaterialLayerParameters: + def get_material_layer_custom_offset(cls, element: ifcopenshell.entity_instance, obj: bpy.types.Object) -> Optional[float]: + """Get custom offset value, reading from pset if props are not set.""" unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) layer_params = tool.Model.get_material_layer_parameters(element) layer_offset = layer_params["offset"] thickness = layer_params["thickness"] / unit_scale props = tool.Material.get_object_material_props(obj) - if props.use_custom_offset: + + # Try to load from pset if not already in props + if not props.use_custom_offset: + pset = ifcopenshell.util.element.get_pset(element, "BBIM_MaterialLayer") + if pset and pset.get("UseCustomOffset", False): + # Load from pset + custom_offset = pset.get("CustomOffset", 0.0) + usage_type = tool.Model.get_usage_type(element) + + if usage_type == "LAYER2": + custom_offset_reference = pset.get("CustomWallReference", "CENTER") + elif usage_type == "LAYER3": + custom_offset_reference = pset.get("CustomSlabReference", "MIDDLE") + else: + return None + else: + return None + else: + # Use current props + custom_offset = props.custom_offset / unit_scale if tool.Model.get_usage_type(element) == "LAYER2": custom_offset_reference = props.custom_wall_reference elif tool.Model.get_usage_type(element) == "LAYER3": @@ -666,24 +752,22 @@ class Model(bonsai.core.tool.Model): else: return None - custom_offset = props.custom_offset - direction_sense = layer_params["direction_sense"] - if direction_sense == "POSITIVE" and custom_offset_reference in {"INTERIOR", "TOP"}: - layer_offset = custom_offset - thickness * unit_scale - if direction_sense == "POSITIVE" and custom_offset_reference in {"CENTER", "MIDDLE"}: - layer_offset = custom_offset - (thickness / 2) * unit_scale - if (direction_sense == "POSITIVE" and custom_offset_reference in {"EXTERIOR", "BOTTOM"}) or ( - direction_sense == "NEGATIVE" and custom_offset_reference in {"EXTERIOR", "TOP"} - ): - layer_offset = custom_offset - if direction_sense == "NEGATIVE" and custom_offset_reference in {"CENTER", "MIDDLE"}: - layer_offset = custom_offset + (thickness / 2) * unit_scale - if direction_sense == "NEGATIVE" and custom_offset_reference in {"INTERIOR", "BOTTOM"}: - layer_offset = custom_offset + thickness * unit_scale + direction_sense = layer_params["direction_sense"] + + if direction_sense == "POSITIVE" and custom_offset_reference in {"INTERIOR", "TOP"}: + layer_offset = custom_offset - thickness * unit_scale + if direction_sense == "POSITIVE" and custom_offset_reference in {"CENTER", "MIDDLE"}: + layer_offset = custom_offset - (thickness / 2) * unit_scale + if (direction_sense == "POSITIVE" and custom_offset_reference in {"EXTERIOR", "BOTTOM"}) or ( + direction_sense == "NEGATIVE" and custom_offset_reference in {"EXTERIOR", "TOP"} + ): + layer_offset = custom_offset + if direction_sense == "NEGATIVE" and custom_offset_reference in {"CENTER", "MIDDLE"}: + layer_offset = custom_offset + (thickness / 2) * unit_scale + if direction_sense == "NEGATIVE" and custom_offset_reference in {"INTERIOR", "BOTTOM"}: + layer_offset = custom_offset + thickness * unit_scale - return layer_offset / unit_scale - - return None + return layer_offset / unit_scale @classmethod def get_booleans( From 321878e1bb5e51aef24a4fcc28f8a5fc3cf3ae01 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 6 Jan 2026 22:14:08 +0100 Subject: [PATCH 454/657] Add Ifc Document information element to decide if blend metadata info should be used in this project file --- .../bonsai/bim/module/project/operator.py | 63 +++++++++++++++---- src/bonsai/bonsai/bim/module/project/prop.py | 6 ++ src/bonsai/bonsai/bim/module/project/ui.py | 6 +- src/bonsai/bonsai/tool/project.py | 57 +++++++++++++++++ 4 files changed, 116 insertions(+), 16 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index c0dd8c70c1..a549f7d69e 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -1062,18 +1062,34 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): and not self.is_advanced ): filepath = self.get_filepath() - suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix - if str(filepath).lower().endswith(".ifc"): - metadata_path = Path(str(filepath)[:-4] + suffix) - else: - metadata_path = Path(str(filepath) + suffix) - if metadata_path.exists() and metadata_path.is_file(): - try: - bpy.ops.bim.load_blend_metadata_and_ifc(filepath=filepath) - self.report({"INFO"}, f"Loaded metadata file: {metadata_path.name}") - return {"FINISHED"} - except Exception as e: - self.report({"WARNING"}, f"Failed to load metadata file, using regular load: {e}") + + # First, load the IFC file temporarily to check for metadata document + temp_ifc = None + has_metadata_doc = False + try: + temp_ifc = ifcopenshell.open(str(filepath)) + for doc in temp_ifc.by_type("IfcDocumentInformation"): + if getattr(doc, "Scope", None) == "BLEND_METADATA": + has_metadata_doc = True + break + except: + pass + finally: + temp_ifc = None + + if has_metadata_doc: + suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix + if str(filepath).lower().endswith(".ifc"): + metadata_path = Path(str(filepath)[:-4] + suffix) + else: + metadata_path = Path(str(filepath) + suffix) + if metadata_path.exists() and metadata_path.is_file(): + try: + bpy.ops.bim.load_blend_metadata_and_ifc(filepath=filepath) + self.report({"INFO"}, f"Loaded metadata file: {metadata_path.name}") + return {"FINISHED"} + except Exception as e: + self.report({"WARNING"}, f"Failed to load metadata file, using regular load: {e}") @persistent def load_handler(*args): @@ -1121,6 +1137,10 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): props.is_loading = True props.total_elements = len(tool.Ifc.get().by_type("IfcElement")) props.use_relative_project_path = self.use_relative_path + + metadata_doc = tool.Project.get_metadata_document_information() + props.should_save_metadata_for_this_file = metadata_doc is not None + tool.Blender.register_toolbar() tool.Project.add_recent_ifc_project(self.get_filepath_abs()) @@ -1749,6 +1769,22 @@ class ExportIFC(bpy.types.Operator, ExportHelper): settings.json_version = self.json_version settings.json_compact = self.json_compact + pprops = tool.Project.get_project_props() + if tool.Blender.get_addon_preferences().save_metadata_blend_file and pprops.should_save_metadata_for_this_file: + suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix + if output_file.lower().endswith(".ifc"): + metadata_filename = os.path.basename(output_file)[:-4] + suffix + else: + metadata_filename = os.path.basename(output_file) + suffix + + if not tool.Project.get_metadata_document_information(): + tool.Project.create_metadata_document_information(metadata_filename) + else: + tool.Project.update_metadata_document_information(metadata_filename) + else: + if not pprops.should_save_metadata_for_this_file: + tool.Project.remove_metadata_document_information() + ifc_exporter = export_ifc.IfcExporter(settings) print("Starting export") settings.logger.info("Starting export") @@ -1765,7 +1801,8 @@ class ExportIFC(bpy.types.Operator, ExportHelper): tool.Ifc.set_path(output_file) bim_props.is_dirty = False - if tool.Blender.get_addon_preferences().save_metadata_blend_file: + pprops = tool.Project.get_project_props() + if tool.Blender.get_addon_preferences().save_metadata_blend_file and pprops.should_save_metadata_for_this_file: try: bpy.ops.bim.save_blend_metadata_file() suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix diff --git a/src/bonsai/bonsai/bim/module/project/prop.py b/src/bonsai/bonsai/bim/module/project/prop.py index 2cbdeb6e7b..8983c927c9 100644 --- a/src/bonsai/bonsai/bim/module/project/prop.py +++ b/src/bonsai/bonsai/bim/module/project/prop.py @@ -411,6 +411,11 @@ class BIMProjectProperties(PropertyGroup): ) use_relative_project_path: BoolProperty(name="Use Relative Project Path", default=False) + should_save_metadata_for_this_file: BoolProperty( + name="Save Session Data for This File", + description="Enable saving session data (window layout, settings) to a metadata blend file for this specific IFC file", + default=False, + ) queried_obj: bpy.props.PointerProperty(type=bpy.types.Object) queried_obj_root: bpy.props.PointerProperty(type=bpy.types.Object) clipping_planes: bpy.props.CollectionProperty(type=ObjProperty) @@ -504,6 +509,7 @@ class BIMProjectProperties(PropertyGroup): parent_library: str use_relative_project_path: bool + should_save_metadata_for_this_file: bool queried_obj: Union[bpy.types.Object, None] queried_obj_root: Union[bpy.types.Object, None] clipping_planes: bpy.types.bpy_prop_collection_idprop[ObjProperty] diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 5d4f3f695b..1a6f727b20 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -338,9 +338,9 @@ class BIM_PT_project(Panel): else: metadata_filename = os.path.basename(props.ifc_file) + suffix row = self.layout.row(align=True) - col = row.column() - col.enabled = False - col.label(text=f"Saving session data to: {metadata_filename}") + row.use_property_split = False + pprops = tool.Project.get_project_props() + row.prop(pprops, "should_save_metadata_for_this_file", text=f"Save session data to: {metadata_filename}") class BIM_PT_new_project_wizard(Panel): diff --git a/src/bonsai/bonsai/tool/project.py b/src/bonsai/bonsai/tool/project.py index 0bfb4b00c1..fec4f6a42b 100644 --- a/src/bonsai/bonsai/tool/project.py +++ b/src/bonsai/bonsai/tool/project.py @@ -513,3 +513,60 @@ class Project(bonsai.core.tool.Project): if tmp.exists(): shutil.rmtree(tmp) bpy.ops.bim.save_project(filepath=cls.TEMP_PROJECT_PATH.__str__(), should_save_as=True) + + @classmethod + def get_metadata_document_information(cls) -> Optional[ifcopenshell.entity_instance]: + ifc_file = tool.Ifc.get() + if not ifc_file: + return None + for doc in ifc_file.by_type("IfcDocumentInformation"): + if getattr(doc, "Scope", None) == "BLEND_METADATA": + return doc + return None + + @classmethod + def create_metadata_document_information(cls, metadata_filename: str) -> ifcopenshell.entity_instance: + ifc_file = tool.Ifc.get() + if not ifc_file: + raise Exception("No IFC file loaded") + + doc = tool.Ifc.run("document.add_information", parent=None) + + if ifc_file.schema == "IFC2X3": + tool.Ifc.run("document.edit_information", information=doc, attributes={ + "DocumentId": "BLEND_METADATA", + "Name": "Blend Metadata", + "Scope": "BLEND_METADATA", + "Description": "References to blend metadata file for this IFC project", + "Location": metadata_filename + }) + else: + tool.Ifc.run("document.edit_information", information=doc, attributes={ + "Identification": "BLEND_METADATA", + "Name": "Blend Metadata", + "Scope": "BLEND_METADATA", + "Description": "References to blend metadata file for this IFC project", + "Location": metadata_filename + }) + + return doc + + @classmethod + def update_metadata_document_information(cls, metadata_filename: str) -> None: + doc = cls.get_metadata_document_information() + if not doc: + return + + ifc_file = tool.Ifc.get() + if not ifc_file: + return + + tool.Ifc.run("document.edit_information", information=doc, attributes={ + "Location": metadata_filename + }) + + @classmethod + def remove_metadata_document_information(cls) -> None: + doc = cls.get_metadata_document_information() + if doc: + tool.Ifc.run("document.remove_information", information=doc) From e9eca5e3f2579d2117b2787b0a7ea9a1018a05ba Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Wed, 7 Jan 2026 09:08:12 -0600 Subject: [PATCH 455/657] If feet is negative, inches should also be negative (subtractive) --- src/bonsai/bonsai/tool/unit.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index c982c43523..dbfcc3cd3e 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -166,6 +166,11 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t break if inches is None: inches = 0 + + # If feet is negative, inches should also be negative (subtractive) + if feet < 0: + inches = -inches + # Convert to meters total_meters = (feet * 0.3048) + (inches * 0.0254) return total_meters From a460e29473622c75685eedf6a2f531dc9aff1905 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 8 Jan 2026 09:41:29 -0600 Subject: [PATCH 456/657] retain current selection in `bim.select_similar_type` --- src/bonsai/bonsai/bim/module/type/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index c078d66f67..ce70f59231 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -239,7 +239,7 @@ class SelectSimilarType(bpy.types.Operator): for related_object in objects: relating_type = ifcopenshell.util.element.get_type(tool.Ifc.get_entity(related_object)) if not relating_type: - related_object.select_set(False) + # Keep objects without a type selected (retain current selection) continue relating_types.add(relating_type) From 628a76e487458b5e7a08a7a5f2bace1859eacb7c Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 9 Jan 2026 02:02:43 +0100 Subject: [PATCH 457/657] Simplified handling of Ports in MEP --- .../bonsai/bim/module/system/__init__.py | 3 + .../bonsai/bim/module/system/operator.py | 96 +++++++++- src/bonsai/bonsai/bim/module/system/prop.py | 60 +++++- src/bonsai/bonsai/bim/module/system/ui.py | 175 ++++++++++++------ src/bonsai/bonsai/core/system.py | 5 +- src/bonsai/bonsai/tool/system.py | 26 +++ 6 files changed, 300 insertions(+), 65 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/__init__.py b/src/bonsai/bonsai/bim/module/system/__init__.py index 92782ae6fe..4c805f282d 100644 --- a/src/bonsai/bonsai/bim/module/system/__init__.py +++ b/src/bonsai/bonsai/bim/module/system/__init__.py @@ -21,11 +21,13 @@ from . import ui, prop, operator, decorator classes = ( operator.AddPort, + operator.AddRelatedPortConnection, operator.AddSystem, operator.AddZone, operator.AssignSystem, operator.AssignUnassignFlowControl, operator.ConnectPort, + operator.CycleFlowDirection, operator.DisableEditingSystem, operator.DisableEditingZone, operator.DisableSystemEditingUI, @@ -43,6 +45,7 @@ classes = ( operator.RemoveZone, operator.SelectSystemProducts, operator.SetFlowDirection, + operator.ShowPortFlowError, operator.ShowPorts, operator.UnassignSystem, operator.UnloadZones, diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index add214c09d..9084f1a6b8 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -217,7 +217,7 @@ class HidePorts(bpy.types.Operator, tool.Ifc.Operator): class AddPort(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.add_port" - bl_description = "Add port at current cursor position" + bl_description = "Add USERDEFINED port at current cursor position" bl_label = "Add Port" bl_options = {"REGISTER", "UNDO"} @@ -249,6 +249,42 @@ class ConnectPort(bpy.types.Operator, tool.Ifc.Operator): core.connect_port(tool.Ifc, port1=tool.Ifc.get_entity(obj1), port2=tool.Ifc.get_entity(obj2)) +class AddRelatedPortConnection(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.add_related_port_connection" + bl_label = "Connect Port" + bl_description = "Click to select a port to connect to" + bl_options = {"REGISTER", "UNDO"} + + element_id: bpy.props.IntProperty(default=0, options={"SKIP_SAVE"}) + + def invoke(self, context, event): + if self.element_id == 0: + self.report({'ERROR'}, "No port specified") + return {'CANCELLED'} + context.window_manager.modal_handler_add(self) + return {'RUNNING_MODAL'} + + def modal(self, context, event): + if event.type == 'LEFTMOUSE' and event.value == 'PRESS': + if context.active_object: + target_element = tool.Ifc.get_entity(context.active_object) + if target_element and target_element.is_a("IfcDistributionPort"): + source_element = tool.Ifc.get().by_id(self.element_id) + core.connect_port(tool.Ifc, port1=source_element, port2=target_element) + self.report({'INFO'}, "Ports connected") + return {'FINISHED'} + else: + self.report({'WARNING'}, "Selected object is not a port") + return {'RUNNING_MODAL'} + elif event.type in {'RIGHTMOUSE', 'ESC'}: + self.report({'INFO'}, "Cancelled") + return {'CANCELLED'} + return {'RUNNING_MODAL'} + + def _execute(self, context): + return {'CANCELLED'} + + class DisconnectPort(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.disconnect_port" bl_label = "Disconnect Ports" @@ -256,6 +292,9 @@ class DisconnectPort(bpy.types.Operator, tool.Ifc.Operator): element_id: bpy.props.IntProperty(default=0, options={"SKIP_SAVE"}) + def invoke(self, context, event): + return context.window_manager.invoke_confirm(self, event) + def _execute(self, context): if self.element_id != 0: element = tool.Ifc.get().by_id(self.element_id) @@ -379,6 +418,61 @@ class SetFlowDirection(bpy.types.Operator, tool.Ifc.Operator): return {"CANCELLED"} +class CycleFlowDirection(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.cycle_flow_direction" + bl_label = "Cycle Flow Direction" + bl_options = {"REGISTER", "UNDO"} + port_id: bpy.props.IntProperty() + + @classmethod + def description(cls, context, operator): + try: + port = tool.Ifc.get().by_id(operator.port_id) + if port and port.is_a("IfcDistributionPort"): + current_direction = port.FlowDirection or "NOTDEFINED" + return f"Current flow direction: {current_direction}. Click to cycle: SOURCE → SINK → SOURCEANDSINK → NOTDEFINED" + except: + pass + return "Cycle through flow directions: SOURCE → SINK → SOURCEANDSINK → NOTDEFINED → SOURCE..." + + def _execute(self, context): + port = tool.Ifc.get().by_id(self.port_id) + if not port or not port.is_a("IfcDistributionPort"): + return {"CANCELLED"} + + current_direction = port.FlowDirection or "NOTDEFINED" + flow_cycle = ["SOURCE", "SINK", "SOURCEANDSINK", "NOTDEFINED"] + + try: + current_index = flow_cycle.index(current_direction) + next_direction = flow_cycle[(current_index + 1) % len(flow_cycle)] + except ValueError: + next_direction = "SOURCE" + + tool.Ifc.run("attribute.edit_attributes", product=port, attributes={"FlowDirection": next_direction}) + + PortData.is_loaded = False + + return {"FINISHED"} + + +class ShowPortFlowError(bpy.types.Operator): + bl_idname = "bim.show_port_flow_error" + bl_label = "" + bl_options = {"REGISTER"} + port_flow: bpy.props.StringProperty() + connected_flow: bpy.props.StringProperty() + + @classmethod + def description(cls, context, operator): + if operator.port_flow and operator.connected_flow: + return f"Semantic error: Incompatible flow directions ({operator.port_flow} connected to {operator.connected_flow})" + return "Semantic error: Incompatible flow directions" + + def execute(self, context): + return {"FINISHED"} + + class LoadZones(bpy.types.Operator): bl_idname = "bim.load_zones" bl_label = "Load Zones" diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index a603446c9f..6b82d650af 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -19,7 +19,8 @@ import bpy import bonsai.bim.handler import bonsai.tool as tool -from bonsai.bim.module.system.data import SystemData +import bonsai.core.system as core +from bonsai.bim.module.system.data import SystemData, PortData import bonsai.bim.module.system.decorator as decorator from bonsai.bim.prop import StrProperty, Attribute from bpy.types import PropertyGroup @@ -92,6 +93,56 @@ def toggle_decorations(self: "BIMSystemProperties", context: bpy.types.Context) decorator.SystemDecorator.uninstall() +def is_port_available_for_connection(self: "BIMSystemProperties", obj: bpy.types.Object) -> bool: + element = tool.Ifc.get_entity(obj) + if not element or not element.is_a("IfcDistributionPort"): + return False + connected_port = tool.System.get_connected_port(element) + if connected_port is not None: + return False + + if bpy.context.active_object: + active_element = tool.Ifc.get_entity(bpy.context.active_object) + if active_element: + active_ports = tool.System.get_ports(active_element) + if element in active_ports: + return False + + return True + + +def update_related_port_object(self: "BIMSystemProperties", context: bpy.types.Context) -> None: + if self.related_port_object is None: + return + if not context.active_object: + return + + source_element = tool.Ifc.get_entity(context.active_object) + target_element = tool.Ifc.get_entity(self.related_port_object) + + if not source_element or not target_element: + self.related_port_object = None + return + + if not target_element.is_a("IfcDistributionPort"): + self.related_port_object = None + return + + source_port = None + for port in tool.System.get_ports(source_element): + if not tool.System.get_connected_port(port): + source_port = port + break + + if not source_port: + self.related_port_object = None + return + + core.connect_port(tool.Ifc, port1=source_port, port2=target_element) + self.related_port_object = None + PortData.is_loaded = False + + class BIMSystemProperties(PropertyGroup): system_attributes: CollectionProperty(name="System Attributes", type=Attribute) is_editing: BoolProperty(name="Is Editing", default=False) @@ -107,6 +158,12 @@ class BIMSystemProperties(PropertyGroup): should_draw_decorations: BoolProperty( name="Should Draw Decorations", description="Toggle system decorations", update=toggle_decorations ) + related_port_object: PointerProperty( + type=bpy.types.Object, + name="Connect To Port", + update=update_related_port_object, + poll=is_port_available_for_connection, + ) if TYPE_CHECKING: system_attributes: bpy.types.bpy_prop_collection_idprop[Attribute] @@ -119,6 +176,7 @@ class BIMSystemProperties(PropertyGroup): edited_system_id: int system_class: str should_draw_decorations: bool + related_port_object: Union[bpy.types.Object, None] @property def active_system_ui_item(self) -> Union[System, None]: diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index 2d555f24c2..3574f95469 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -162,45 +162,75 @@ class BIM_PT_ports(Panel): if total_ports == 0: return - row = self.layout.row(align=True) - row.label(text="Change Flow Direction:") - - current_flow_direction = PortData.data["selected_objects_flow_direction"] - for flow_direction in FLOW_DIRECTION_TO_ICON.keys(): - row.operator( - "bim.set_flow_direction", - icon=FLOW_DIRECTION_TO_ICON[flow_direction], - depress=flow_direction == current_flow_direction, - text="", - ).direction = flow_direction - row.enabled = len(context.selected_objects) == 2 + props = tool.System.get_system_props() row = self.layout.row(align=True) - row.label(text="Ports located on object and connected objects:") + row.label(text="Ports located on object and connected Port/Objects:") + row = self.layout.row(align=True) - cols = [row.column(align=True) for i in range(6)] + cols = [row.column(align=True) for i in range(10)] for port_data in PortData.data["located_ports_data"]: flow_direction_icon = FLOW_DIRECTION_TO_ICON[port_data["FlowDirection"] or "NOTDEFINED"] - if port_data["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_data["id"] - cols[2].label(text=port_data["port_obj_name"]) + + if port_data["connected_obj_name"]: + cols[0].operator("bim.disconnect_port", text="", icon="UNLINKED").element_id = port_data["id"] + op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) + op.port_id = port_data["id"] else: - cols[0].label(text="", icon=flow_direction_icon) - cols[1].label(text="", icon="HIDE_ON") - cols[2].label(text="Port is hidden") + cols[0].label(text="", icon="BLANK1") + op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) + op.port_id = port_data["id"] + + # Port information + if port_data["port_obj_name"]: + cols[2].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = port_data["id"] + cols[3].label(text=port_data["port_obj_name"]) + else: + cols[2].label(text="", icon="HIDE_ON") + cols[3].label(text="Port is hidden") if port_data["connected_obj_name"]: connected_obj = bpy.data.objects[port_data["connected_obj_name"]] - cols[3].operator("bim.disconnect_port", text="", icon="UNLINKED").element_id = port_data["id"] + + port = tool.Ifc.get().by_id(port_data["id"]) + connected_port = tool.System.get_connected_port(port) + if connected_port: + connected_port_flow_dir = FLOW_DIRECTION_TO_ICON[connected_port.FlowDirection or "NOTDEFINED"] + op = cols[4].operator("bim.cycle_flow_direction", text="", icon=connected_port_flow_dir, emboss=True) + op.port_id = connected_port.id() + cols[5].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = connected_port.id() + connected_port_obj = tool.Ifc.get_object(connected_port) + cols[6].label(text=connected_port_obj.name if connected_port_obj else "Hidden Port") + else: + cols[4].label(text="", icon="BLANK1") + cols[5].label(text="", icon="BLANK1") + cols[6].label(text="") + ifc_id = tool.Blender.get_ifc_definition_id(connected_obj) - cols[4].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ifc_id - cols[5].label(text=port_data["connected_obj_name"]) + cols[7].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ifc_id + cols[8].label(text=port_data["connected_obj_name"]) + + if connected_port: + port_flow = port.FlowDirection or "NOTDEFINED" + connected_flow = connected_port.FlowDirection or "NOTDEFINED" + if (port_flow == "SOURCE" and connected_flow == "SOURCE") or \ + (port_flow == "SINK" and connected_flow == "SINK"): + op = cols[9].operator("bim.show_port_flow_error", text="", icon="ERROR", emboss=False) + op.port_flow = port_flow + op.connected_flow = connected_flow + else: + cols[9].label(text="", icon="BLANK1") + else: + cols[9].label(text="", icon="BLANK1") else: - cols[3].label(text="", icon="UNLINKED") cols[4].label(text="", icon="BLANK1") - cols[5].label(text="Port is disconnected") + cols[5].label(text="", icon="BLANK1") + cols[6].alignment = 'LEFT' + cols[6].prop(props, "related_port_object", text="") + cols[7].label(text="", icon="BLANK1") + cols[8].label(text="Port is disconnected") + cols[9].label(text="", icon="BLANK1") class BIM_PT_port(Panel): @@ -227,7 +257,12 @@ class BIM_PT_port(Panel): layout = self.layout row = layout.row(align=True) - row.label(text="IfcDistributionPort") + + if not PortData.is_loaded: + PortData.load() + + relating_object_name = PortData.data["port_relating_object_name"] if PortData.data["is_port"] else "" + row.label(text=f"IfcDistributionPort located in: {relating_object_name}") row.operator("bim.connect_port", icon="PLUGIN", text="") row.operator("bim.disconnect_port", icon="UNLINKED", text="") row.operator("bim.remove_port", icon="X", text="") @@ -239,41 +274,61 @@ class BIM_PT_port(Panel): return element = tool.Ifc.get_entity(context.active_object) - current_flow_direction = str(element.FlowDirection) + props = tool.System.get_system_props() + row = layout.row(align=True) - row.label(text="Flow Direction:") - row.label(text=current_flow_direction) - - # port located on - row = layout.row(align=True) - 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) - ifc_id = tool.Blender.get_ifc_definition_id(relating_object) - row.operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ifc_id - - # object connected to the port - row = layout.row(align=True) - 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) - ifc_id = tool.Blender.get_ifc_definition_id(connected_object) - row.operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ifc_id + cols = [row.column(align=True) for i in range(10)] + + flow_direction_icon = FLOW_DIRECTION_TO_ICON[element.FlowDirection or "NOTDEFINED"] + connected_port = tool.System.get_connected_port(element) + + if connected_port: + cols[0].operator("bim.disconnect_port", text="", icon="UNLINKED") + op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) + op.port_id = element.id() else: - row.label(text="Port is not connected to any element") - - row = layout.row(align=True) - row.label(text="Change Flow Direction:") - for flow_direction in FLOW_DIRECTION_TO_ICON.keys(): - row.operator( - "bim.set_flow_direction", - icon=FLOW_DIRECTION_TO_ICON[flow_direction], - depress=flow_direction == current_flow_direction, - text="", - ).direction = flow_direction + cols[0].label(text="", icon="BLANK1") + op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) + op.port_id = element.id() + + cols[2].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = element.id() + cols[3].label(text=context.active_object.name) + + if connected_port: + connected_port_flow_dir = FLOW_DIRECTION_TO_ICON[connected_port.FlowDirection or "NOTDEFINED"] + op = cols[4].operator("bim.cycle_flow_direction", text="", icon=connected_port_flow_dir, emboss=True) + op.port_id = connected_port.id() + cols[5].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = connected_port.id() + connected_port_obj = tool.Ifc.get_object(connected_port) + cols[6].label(text=connected_port_obj.name if connected_port_obj else "Hidden Port") + + connected_object_name = PortData.data["port_connected_object_name"] + if connected_object_name: + connected_obj = bpy.data.objects[connected_object_name] + ifc_id = tool.Blender.get_ifc_definition_id(connected_obj) + cols[7].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ifc_id + cols[8].label(text=connected_object_name) + else: + cols[7].label(text="", icon="BLANK1") + cols[8].label(text="") + + port_flow = element.FlowDirection or "NOTDEFINED" + connected_flow = connected_port.FlowDirection or "NOTDEFINED" + if (port_flow == "SOURCE" and connected_flow == "SOURCE") or \ + (port_flow == "SINK" and connected_flow == "SINK"): + op = cols[9].operator("bim.show_port_flow_error", text="", icon="ERROR", emboss=False) + op.port_flow = port_flow + op.connected_flow = connected_flow + else: + cols[9].label(text="", icon="BLANK1") + else: + cols[4].label(text="", icon="BLANK1") + cols[5].label(text="", icon="BLANK1") + cols[6].alignment = 'LEFT' + cols[6].prop(props, "related_port_object", text="") + cols[7].label(text="", icon="BLANK1") + cols[8].label(text="Port is disconnected") + cols[9].label(text="", icon="BLANK1") class BIM_PT_flow_controls(Panel): diff --git a/src/bonsai/bonsai/core/system.py b/src/bonsai/bonsai/core/system.py index fcdb95e72d..7a1df28280 100644 --- a/src/bonsai/bonsai/core/system.py +++ b/src/bonsai/bonsai/core/system.py @@ -123,9 +123,8 @@ def hide_ports(ifc: type[tool.Ifc], system: type[tool.System], element: ifcopens def add_port(ifc: type[tool.Ifc], system: type[tool.System], element: ifcopenshell.entity_instance) -> None: system.load_ports(element, system.get_ports(element)) - obj = system.create_empty_at_cursor_with_element_orientation(element) - port = system.run_root_assign_class(obj=obj, ifc_class="IfcDistributionPort", should_add_representation=False) - ifc.run("system.assign_port", element=element, port=port) + port = system.create_port_at_cursor(element) + system.load_ports(element, [port]) def remove_port(ifc: type[tool.Ifc], system: type[tool.System], port: ifcopenshell.entity_instance) -> None: diff --git a/src/bonsai/bonsai/tool/system.py b/src/bonsai/bonsai/tool/system.py index efaaa802c5..519136a1f8 100644 --- a/src/bonsai/bonsai/tool/system.py +++ b/src/bonsai/bonsai/tool/system.py @@ -107,6 +107,32 @@ class System(bonsai.core.tool.System): bpy.context.scene.collection.objects.link(obj) return obj + @classmethod + def create_port_at_cursor(cls, element: ifcopenshell.entity_instance) -> ifcopenshell.entity_instance: + ifc_file = tool.Ifc.get() + element_obj = tool.Ifc.get_object(element) + + port = ifcopenshell.api.system.add_port(ifc_file, element=element) + port.FlowDirection = "NOTDEFINED" + port.PredefinedType = "USERDEFINED" + + systems = ifcopenshell.util.system.get_element_systems(element) + if systems: + system = systems[0] + if hasattr(system, "PredefinedType") and system.PredefinedType: + port.SystemType = system.PredefinedType + else: + port.SystemType = "USERDEFINED" + else: + port.SystemType = "USERDEFINED" + + matrix = element_obj.matrix_world.copy() + matrix.translation = bpy.context.scene.cursor.matrix.translation + + ifcopenshell.api.geometry.edit_object_placement(ifc_file, product=port, matrix=matrix, is_si=True) + + return port + @classmethod def delete_element_objects(cls, elements: list[ifcopenshell.entity_instance]) -> None: for element in elements: From 44632357286c09361204ebb104540623c61b8820 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 9 Jan 2026 08:43:46 +0100 Subject: [PATCH 458/657] Remove ShowPortFlowError operator and update flow direction handling for connected ports --- .../bonsai/bim/module/system/__init__.py | 1 - .../bonsai/bim/module/system/operator.py | 29 ++++++++----------- src/bonsai/bonsai/bim/module/system/ui.py | 29 ++----------------- 3 files changed, 14 insertions(+), 45 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/__init__.py b/src/bonsai/bonsai/bim/module/system/__init__.py index 4c805f282d..f44270cbe8 100644 --- a/src/bonsai/bonsai/bim/module/system/__init__.py +++ b/src/bonsai/bonsai/bim/module/system/__init__.py @@ -45,7 +45,6 @@ classes = ( operator.RemoveZone, operator.SelectSystemProducts, operator.SetFlowDirection, - operator.ShowPortFlowError, operator.ShowPorts, operator.UnassignSystem, operator.UnloadZones, diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 9084f1a6b8..80c15e9799 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -451,28 +451,23 @@ class CycleFlowDirection(bpy.types.Operator, tool.Ifc.Operator): tool.Ifc.run("attribute.edit_attributes", product=port, attributes={"FlowDirection": next_direction}) + connected_port = tool.System.get_connected_port(port) + if connected_port: + # Map flow direction to connected port's complementary direction + connected_direction_map = { + "SOURCE": "SINK", + "SINK": "SOURCE", + "SOURCEANDSINK": "SOURCEANDSINK", + "NOTDEFINED": "NOTDEFINED" + } + connected_direction = connected_direction_map.get(next_direction, "NOTDEFINED") + tool.Ifc.run("attribute.edit_attributes", product=connected_port, attributes={"FlowDirection": connected_direction}) + PortData.is_loaded = False return {"FINISHED"} -class ShowPortFlowError(bpy.types.Operator): - bl_idname = "bim.show_port_flow_error" - bl_label = "" - bl_options = {"REGISTER"} - port_flow: bpy.props.StringProperty() - connected_flow: bpy.props.StringProperty() - - @classmethod - def description(cls, context, operator): - if operator.port_flow and operator.connected_flow: - return f"Semantic error: Incompatible flow directions ({operator.port_flow} connected to {operator.connected_flow})" - return "Semantic error: Incompatible flow directions" - - def execute(self, context): - return {"FINISHED"} - - class LoadZones(bpy.types.Operator): bl_idname = "bim.load_zones" bl_label = "Load Zones" diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index 3574f95469..24907f8650 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -168,7 +168,7 @@ class BIM_PT_ports(Panel): row.label(text="Ports located on object and connected Port/Objects:") row = self.layout.row(align=True) - cols = [row.column(align=True) for i in range(10)] + cols = [row.column(align=True) for i in range(9)] for port_data in PortData.data["located_ports_data"]: flow_direction_icon = FLOW_DIRECTION_TO_ICON[port_data["FlowDirection"] or "NOTDEFINED"] @@ -210,19 +210,6 @@ class BIM_PT_ports(Panel): ifc_id = tool.Blender.get_ifc_definition_id(connected_obj) cols[7].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ifc_id cols[8].label(text=port_data["connected_obj_name"]) - - if connected_port: - port_flow = port.FlowDirection or "NOTDEFINED" - connected_flow = connected_port.FlowDirection or "NOTDEFINED" - if (port_flow == "SOURCE" and connected_flow == "SOURCE") or \ - (port_flow == "SINK" and connected_flow == "SINK"): - op = cols[9].operator("bim.show_port_flow_error", text="", icon="ERROR", emboss=False) - op.port_flow = port_flow - op.connected_flow = connected_flow - else: - cols[9].label(text="", icon="BLANK1") - else: - cols[9].label(text="", icon="BLANK1") else: cols[4].label(text="", icon="BLANK1") cols[5].label(text="", icon="BLANK1") @@ -230,7 +217,6 @@ class BIM_PT_ports(Panel): cols[6].prop(props, "related_port_object", text="") cols[7].label(text="", icon="BLANK1") cols[8].label(text="Port is disconnected") - cols[9].label(text="", icon="BLANK1") class BIM_PT_port(Panel): @@ -277,7 +263,7 @@ class BIM_PT_port(Panel): props = tool.System.get_system_props() row = layout.row(align=True) - cols = [row.column(align=True) for i in range(10)] + cols = [row.column(align=True) for i in range(9)] flow_direction_icon = FLOW_DIRECTION_TO_ICON[element.FlowDirection or "NOTDEFINED"] connected_port = tool.System.get_connected_port(element) @@ -311,16 +297,6 @@ class BIM_PT_port(Panel): else: cols[7].label(text="", icon="BLANK1") cols[8].label(text="") - - port_flow = element.FlowDirection or "NOTDEFINED" - connected_flow = connected_port.FlowDirection or "NOTDEFINED" - if (port_flow == "SOURCE" and connected_flow == "SOURCE") or \ - (port_flow == "SINK" and connected_flow == "SINK"): - op = cols[9].operator("bim.show_port_flow_error", text="", icon="ERROR", emboss=False) - op.port_flow = port_flow - op.connected_flow = connected_flow - else: - cols[9].label(text="", icon="BLANK1") else: cols[4].label(text="", icon="BLANK1") cols[5].label(text="", icon="BLANK1") @@ -328,7 +304,6 @@ class BIM_PT_port(Panel): cols[6].prop(props, "related_port_object", text="") cols[7].label(text="", icon="BLANK1") cols[8].label(text="Port is disconnected") - cols[9].label(text="", icon="BLANK1") class BIM_PT_flow_controls(Panel): From ed7ae0da9c286f63af05ff1d5ee05b71f70729ab Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 9 Jan 2026 13:18:01 +0100 Subject: [PATCH 459/657] Enhance show_ports (also shows ports of connected objects) and refine UI layout --- .../bonsai/bim/module/system/operator.py | 15 +++++- src/bonsai/bonsai/bim/module/system/prop.py | 7 +-- src/bonsai/bonsai/bim/module/system/ui.py | 54 ++++++++++++++----- 3 files changed, 57 insertions(+), 19 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 80c15e9799..e60f4500ec 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -186,6 +186,7 @@ class ShowPorts(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.show_ports" bl_label = "Show Ports" bl_options = {"REGISTER", "UNDO"} + element_id: bpy.props.IntProperty(default=0, options={"SKIP_SAVE"}) @classmethod def poll(cls, context): @@ -198,7 +199,19 @@ class ShowPorts(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): # Ifc.Operator - as operator will sync object's position with IFC. - core.show_ports(tool.Ifc, tool.System, tool.Spatial, element=tool.Ifc.get_entity(context.active_object)) + if self.element_id != 0: + element = tool.Ifc.get().by_id(self.element_id) + else: + element = tool.Ifc.get_entity(context.active_object) + core.show_ports(tool.Ifc, tool.System, tool.Spatial, element=element) + + for port in tool.System.get_ports(element): + connected_port = tool.System.get_connected_port(port) + if connected_port: + connected_port_obj = tool.Ifc.get_object(connected_port) + if not connected_port_obj: + parent_element = tool.System.get_port_relating_element(connected_port) + core.show_ports(tool.Ifc, tool.System, tool.Spatial, element=parent_element) class HidePorts(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index 6b82d650af..09d9bf5e38 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -121,11 +121,9 @@ def update_related_port_object(self: "BIMSystemProperties", context: bpy.types.C target_element = tool.Ifc.get_entity(self.related_port_object) if not source_element or not target_element: - self.related_port_object = None return if not target_element.is_a("IfcDistributionPort"): - self.related_port_object = None return source_port = None @@ -135,11 +133,9 @@ def update_related_port_object(self: "BIMSystemProperties", context: bpy.types.C break if not source_port: - self.related_port_object = None return core.connect_port(tool.Ifc, port1=source_port, port2=target_element) - self.related_port_object = None PortData.is_loaded = False @@ -161,8 +157,9 @@ class BIMSystemProperties(PropertyGroup): related_port_object: PointerProperty( type=bpy.types.Object, name="Connect To Port", - update=update_related_port_object, + description="Select a port to connect to. Use eyedropper to pick a port object", poll=is_port_available_for_connection, + update=update_related_port_object, ) if TYPE_CHECKING: diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index 24907f8650..dee872b463 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -169,6 +169,9 @@ class BIM_PT_ports(Panel): row = self.layout.row(align=True) cols = [row.column(align=True) for i in range(9)] + cols[3].scale_x = 1.0 + cols[6].scale_x = 1.0 + cols[8].scale_x = 1.33 for port_data in PortData.data["located_ports_data"]: flow_direction_icon = FLOW_DIRECTION_TO_ICON[port_data["FlowDirection"] or "NOTDEFINED"] @@ -178,7 +181,9 @@ class BIM_PT_ports(Panel): op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = port_data["id"] else: - cols[0].label(text="", icon="BLANK1") + blank0 = cols[0].column(align=True) + blank0.scale_x = 0.1 + blank0.label(text="", icon="BLANK1") op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = port_data["id"] @@ -196,26 +201,49 @@ class BIM_PT_ports(Panel): port = tool.Ifc.get().by_id(port_data["id"]) connected_port = tool.System.get_connected_port(port) if connected_port: - connected_port_flow_dir = FLOW_DIRECTION_TO_ICON[connected_port.FlowDirection or "NOTDEFINED"] - op = cols[4].operator("bim.cycle_flow_direction", text="", icon=connected_port_flow_dir, emboss=True) - op.port_id = connected_port.id() - cols[5].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = connected_port.id() connected_port_obj = tool.Ifc.get_object(connected_port) - cols[6].label(text=connected_port_obj.name if connected_port_obj else "Hidden Port") + if connected_port_obj: + connected_port_flow_dir = FLOW_DIRECTION_TO_ICON[connected_port.FlowDirection or "NOTDEFINED"] + op = cols[4].operator("bim.cycle_flow_direction", text="", icon=connected_port_flow_dir, emboss=True) + op.port_id = connected_port.id() + cols[5].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = connected_port.id() + cols[6].label(text=connected_port_obj.name) + else: + blank4 = cols[4].column(align=True) + blank4.scale_x = 0.1 + blank4.label(text="", icon="BLANK1") + blank5 = cols[5].column(align=True) + blank5.scale_x = 0.1 + blank5.label(text="", icon="BLANK1") + cols[6].label(text="Port is hidden") else: - cols[4].label(text="", icon="BLANK1") - cols[5].label(text="", icon="BLANK1") + blank4 = cols[4].column(align=True) + blank4.scale_x = 0.1 + blank4.label(text="", icon="BLANK1") + blank5 = cols[5].column(align=True) + blank5.scale_x = 0.1 + blank5.label(text="", icon="BLANK1") cols[6].label(text="") ifc_id = tool.Blender.get_ifc_definition_id(connected_obj) cols[7].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ifc_id cols[8].label(text=port_data["connected_obj_name"]) else: - cols[4].label(text="", icon="BLANK1") - cols[5].label(text="", icon="BLANK1") - cols[6].alignment = 'LEFT' - cols[6].prop(props, "related_port_object", text="") - cols[7].label(text="", icon="BLANK1") + blank4 = cols[4].column(align=True) + blank4.scale_x = 0.1 + blank4.label(text="", icon="BLANK1") + blank5 = cols[5].column(align=True) + blank5.scale_x = 0.1 + blank5.label(text="", icon="BLANK1") + + col6_row = cols[6].row(align=True) + col6_row.alignment = 'LEFT' + col6_row.prop(props, "related_port_object", text="", icon='OBJECT_DATA') + col6_row.scale_x = 0.35 + + blank7 = cols[7].column(align=True) + blank7.scale_x = 0.1 + blank7.label(text="", icon="BLANK1") cols[8].label(text="Port is disconnected") From c41496a9c3f1178f3804e68f3bb1d3be577c8b25 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 9 Jan 2026 17:11:02 +0100 Subject: [PATCH 460/657] import IfcDistributionPorts with assets when executing append_library_element and for type products, use the type product's collection, not the container --- src/bonsai/bonsai/tool/system.py | 21 ++++++++++++++----- .../ifcopenshell/api/project/append_asset.py | 7 ++++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/tool/system.py b/src/bonsai/bonsai/tool/system.py index 519136a1f8..38a93a3649 100644 --- a/src/bonsai/bonsai/tool/system.py +++ b/src/bonsai/bonsai/tool/system.py @@ -218,11 +218,22 @@ class System(bonsai.core.tool.System): ifc_importer.process_context_filter() ifc_importer.create_generic_elements(set(ports_to_create)) - container = ifcopenshell.util.element.get_container(element) - if container: - collection = tool.Blender.get_object_bim_props(tool.Ifc.get_object(container)).collection - ifc_importer.collections[container.GlobalId] = collection - ifc_importer.place_objects_in_collections() + if element.is_a("IfcTypeProduct"): + target_collection = None + for collection in obj.users_collection: + target_collection = collection + break + + if target_collection: + for port_obj in ifc_importer.added_data.values(): + if isinstance(port_obj, bpy.types.Object): + tool.Collector.link_collection_object_safe(target_collection, port_obj) + else: + container = ifcopenshell.util.element.get_container(element) + if container: + collection = tool.Blender.get_object_bim_props(tool.Ifc.get_object(container)).collection + ifc_importer.collections[container.GlobalId] = collection + ifc_importer.place_objects_in_collections() for port_obj in ifc_importer.added_data.values(): assert isinstance(port_obj, bpy.types.Object) diff --git a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py index 893b32cc02..0b703b6064 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py @@ -381,6 +381,7 @@ class Usecase: def append_type_product(self): self.whitelisted_inverse_attributes = { "IfcObjectDefinition": ["HasAssociations"], + "IfcDistributionElementType": ["IsNestedBy"], self.base_material_class: ["HasExternalReferences", "HasProperties", "HasRepresentation"], "IfcRepresentationItem": ["StyledByItem", "LayerAssignment"], "IfcRepresentation": ["LayerAssignments"], @@ -397,6 +398,7 @@ class Usecase: "IfcObjectDefinition": ["HasAssociations"], "IfcObject": ["IsDefinedBy.IfcRelDefinesByProperties"], "IfcElement": ["HasOpenings"], + "IfcDistributionElement": ["IsNestedBy"], self.base_material_class: ["HasExternalReferences", "HasProperties", "HasRepresentation"], "IfcRepresentationItem": [ "StyledByItem", @@ -488,7 +490,8 @@ class Usecase: attribute_class = None if "." in attribute: attribute, attribute_class = attribute.split(".") - for inverse in getattr(element, attribute, []): + inverse_values = getattr(element, attribute, []) + for inverse in inverse_values: if attribute_class and inverse.is_a(attribute_class): self.add_inverse_element(inverse) elif not attribute_class: @@ -569,6 +572,8 @@ class Usecase: return False elif element.is_a("IfcRoot") and self.by_guid(element.GlobalId) is not None: return False + elif element.is_a("IfcDistributionPort"): + return False elif element.is_a(self.target_class): return True elif self.target_class == "IfcProduct" and element.is_a("IfcTypeProduct"): From dfbaa6ac8ee368d5b178919a3340aaa9962c331b Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 9 Jan 2026 17:39:42 +0100 Subject: [PATCH 461/657] Reset related_port_object to None after connecting ports --- src/bonsai/bonsai/bim/module/system/prop.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index 09d9bf5e38..6e9681694b 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -137,6 +137,7 @@ def update_related_port_object(self: "BIMSystemProperties", context: bpy.types.C core.connect_port(tool.Ifc, port1=source_port, port2=target_element) PortData.is_loaded = False + self.related_port_object = None class BIMSystemProperties(PropertyGroup): From 0c3153ab7f56fb2d7714d5ff2678dcec8f10a1ef Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Fri, 9 Jan 2026 23:19:39 +0000 Subject: [PATCH 462/657] Docs, link fedora Bonsai/IfcOpenShell packages --- src/bonsai/docs/guides/development/installation.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bonsai/docs/guides/development/installation.rst b/src/bonsai/docs/guides/development/installation.rst index e68d90aa00..3446617ab6 100644 --- a/src/bonsai/docs/guides/development/installation.rst +++ b/src/bonsai/docs/guides/development/installation.rst @@ -200,6 +200,7 @@ Packaged installation - **Arch Linux**: `Direct from Git `__. - **Chocolatey on Windows**: `Unstable `__. +- **Fedora Linux**: `IfcOpenShell Copr repository `__. Tips for package managers ------------------------- From 7ef11361b0625b8e1e32432a60b86eca76ba058c Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sat, 10 Jan 2026 10:12:25 +0100 Subject: [PATCH 463/657] Update flow direction icons for ports in UI --- src/bonsai/bonsai/bim/module/system/ui.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index dee872b463..6e71e5486f 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -30,10 +30,10 @@ if TYPE_CHECKING: FLOW_DIRECTION_TO_ICON = { - "SOURCE": "FORWARD", - "SINK": "BACK", - "SOURCEANDSINK": "ARROW_LEFTRIGHT", - "NOTDEFINED": "CHECKBOX_DEHLT", + "SOURCE": "FULLSCREEN_ENTER", + "SINK": "FULLSCREEN_EXIT", + "SOURCEANDSINK": "CHECKBOX_DEHLT", + "NOTDEFINED": "QUESTION", } From 5ea66730d41ee2170c32a62e6cba6ab0295a1121 Mon Sep 17 00:00:00 2001 From: falken10 Date: Fri, 20 Jun 2025 10:14:02 +0200 Subject: [PATCH 464/657] Implemented tree like structure for documents --- .../bonsai/bim/module/document/__init__.py | 17 +- src/bonsai/bonsai/bim/module/document/data.py | 123 ++++++-- .../bonsai/bim/module/document/operator.py | 292 ++++++++++++++++- src/bonsai/bonsai/bim/module/document/prop.py | 76 ++++- src/bonsai/bonsai/bim/module/document/ui.py | 298 ++++++++++++++---- src/bonsai/bonsai/core/document.py | 102 +++--- src/bonsai/bonsai/core/tool.py | 6 - src/bonsai/bonsai/tool/document.py | 181 +++++++---- src/bonsai/test/bim/feature/document.feature | 9 - src/bonsai/test/core/test_document.py | 18 -- src/bonsai/test/tool/test_document.py | 52 --- 11 files changed, 873 insertions(+), 301 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/__init__.py b/src/bonsai/bonsai/bim/module/document/__init__.py index f4eede1721..6a925d0f98 100644 --- a/src/bonsai/bonsai/bim/module/document/__init__.py +++ b/src/bonsai/bonsai/bim/module/document/__init__.py @@ -18,32 +18,47 @@ import bpy from . import ui, prop, operator +from bpy.types import VIEW3D_MT_object_context_menu classes = ( operator.AddDocumentReference, operator.AddInformation, operator.AssignDocument, operator.DisableDocumentEditingUI, + operator.DisableObjectDocumentEditingUI, operator.DisableEditingDocument, operator.EditDocument, operator.EnableEditingDocument, operator.LoadDocument, - operator.LoadParentDocument, + operator.LoadObjectDocuments, operator.LoadProjectDocuments, operator.RemoveDocument, operator.SelectDocumentObjects, + operator.ToggleDocument, operator.UnassignDocument, + operator.UpdateAssignedDocuments, + operator.OpenIFCDocument, prop.Document, + prop.DocumentObject, + prop.AssignedDocument, + prop.ExpandedDocuments, prop.BIMDocumentProperties, ui.BIM_PT_documents, ui.BIM_PT_object_documents, ui.BIM_UL_documents, + ui.BIM_UL_document_objects, + ui.BIM_UL_assigned_documents, + ui.BIM_MT_object_documents_context_menu, ) def register(): bpy.types.Scene.BIMDocumentProperties = bpy.props.PointerProperty(type=prop.BIMDocumentProperties) + bpy.types.Scene.ExpandedDocuments = bpy.props.PointerProperty(type=prop.ExpandedDocuments) + VIEW3D_MT_object_context_menu.append(ui.add_object_documents_context_menu) def unregister(): del bpy.types.Scene.BIMDocumentProperties + del bpy.types.Scene.ExpandedDocuments + VIEW3D_MT_object_context_menu.remove(ui.add_object_documents_context_menu) diff --git a/src/bonsai/bonsai/bim/module/document/data.py b/src/bonsai/bonsai/bim/module/document/data.py index 5cde82e499..be6b628bed 100644 --- a/src/bonsai/bonsai/bim/module/document/data.py +++ b/src/bonsai/bonsai/bim/module/document/data.py @@ -35,30 +35,69 @@ class DocumentData: @classmethod def load(cls): cls.data = { - "total_information": cls.total_information(), - "parent_document": cls.parent_document(), + "total_document_informations": cls.total_document_informations(), + "total_document_references": cls.total_document_references(), + "total_referenced_objects": cls.total_referenced_objects(), + "document_objects": cls.document_objects(), } cls.is_loaded = True @classmethod - def total_information(cls): - return len( - [ - rel - for rel in tool.Ifc.get().by_type("IfcProject")[0].HasAssociations or [] - if rel.is_a("IfcRelAssociatesDocument") and rel.RelatingDocument.is_a("IfcDocumentInformation") - ] - ) + def total_document_informations(cls): + file = tool.Ifc.get() + info_count = len(file.by_type("IfcDocumentInformation")) + return info_count @classmethod - def parent_document(cls): + def total_document_references(cls): + file = tool.Ifc.get() + ref_count = len(file.by_type("IfcDocumentReference")) + return ref_count + + @classmethod + def total_referenced_objects(cls): + file = tool.Ifc.get() + document_rels = file.by_type("IfcRelAssociatesDocument") + documented_objects = set() + for rel in document_rels: + for related_object in rel.RelatedObjects: + obj = tool.Ifc.get_object(related_object) + if obj: + documented_objects.add(related_object.id()) + + return len(documented_objects) + + @classmethod + def document_objects(cls): + document_objects = {} + file = tool.Ifc.get() + + for rel in file.by_type("IfcRelAssociatesDocument"): + document_id = rel.RelatingDocument.id() + if document_id not in document_objects: + document_objects[document_id] = [] + + for related_object in rel.RelatedObjects: + element = related_object + obj = tool.Ifc.get_object(element) + if obj: + document_objects[document_id].append({"id": element.id(), "name": obj.name, "obj": obj}) + + return document_objects + + @classmethod + def load_document_objects_into_props(cls, document_id): props = tool.Document.get_document_props() - if len(props.breadcrumbs): - parent = tool.Ifc.get().by_id(int(props.breadcrumbs[-1].name)) - if tool.Ifc.get_schema() == "IFC2X3": - return str(parent.DocumentId) - return str(parent.Identification) - return "" + props.document_objects.clear() + + if "document_objects" not in cls.data or document_id not in cls.data["document_objects"]: + return + + sorted_objects = sorted(cls.data["document_objects"][document_id], key=lambda x: x["name"].lower()) + + for obj_data in sorted_objects: + item = props.document_objects.add() + item.name = obj_data["name"] class ObjectDocumentData: @@ -80,31 +119,47 @@ class ObjectDocumentData: return results for rel in getattr(element, "HasAssociations", []): if rel.is_a("IfcRelAssociatesDocument"): - if not rel.RelatingDocument.is_a("IfcDocumentReference"): + is_information = rel.RelatingDocument.is_a("IfcDocumentInformation") + is_reference = rel.RelatingDocument.is_a("IfcDocumentReference") + + if not (is_information or is_reference): continue name = rel.RelatingDocument.Name - if tool.Ifc.get_schema() == "IFC2X3": - if not name and rel.RelatingDocument.ReferenceToDocument: - name = rel.RelatingDocument.ReferenceToDocument[0].Name + location = None + identification = None + description = None - identification = rel.RelatingDocument.ItemReference - if not identification and rel.RelatingDocument.ReferenceToDocument: - identification = rel.RelatingDocument.ReferenceToDocument[0].DocumentId + if is_information: + if tool.Ifc.get_schema() == "IFC2X3": + identification = rel.RelatingDocument.DocumentId + else: + identification = rel.RelatingDocument.Identification + + location = getattr(rel.RelatingDocument, "Location", None) - location = rel.RelatingDocument.Location else: - if not name and rel.RelatingDocument.ReferencedDocument: - name = rel.RelatingDocument.ReferencedDocument.Name + description = rel.RelatingDocument.Description + if tool.Ifc.get_schema() == "IFC2X3": + if not name and rel.RelatingDocument.ReferenceToDocument: + name = rel.RelatingDocument.ReferenceToDocument[0].Name - identification = rel.RelatingDocument.Identification - if not identification and rel.RelatingDocument.ReferencedDocument: - identification = rel.RelatingDocument.ReferencedDocument.Identification + identification = rel.RelatingDocument.ItemReference + if not identification and rel.RelatingDocument.ReferenceToDocument: + identification = rel.RelatingDocument.ReferenceToDocument[0].DocumentId + location = rel.RelatingDocument.Location + else: + if not name and rel.RelatingDocument.ReferencedDocument: + name = rel.RelatingDocument.ReferencedDocument.Name - location = rel.RelatingDocument.Location - if location is None and rel.RelatingDocument.ReferencedDocument: - location = rel.RelatingDocument.ReferencedDocument.Location + identification = rel.RelatingDocument.Identification + if not identification and rel.RelatingDocument.ReferencedDocument: + identification = rel.RelatingDocument.ReferencedDocument.Identification + + location = rel.RelatingDocument.Location + if location is None and rel.RelatingDocument.ReferencedDocument: + location = rel.RelatingDocument.ReferencedDocument.Location if location: if not "://" in location: @@ -118,6 +173,8 @@ class ObjectDocumentData: "identification": identification, "name": name, "location": location, + "is_information": is_information, + "description": description, } ) return results diff --git a/src/bonsai/bonsai/bim/module/document/operator.py b/src/bonsai/bonsai/bim/module/document/operator.py index da75e16e63..ffc81537ee 100644 --- a/src/bonsai/bonsai/bim/module/document/operator.py +++ b/src/bonsai/bonsai/bim/module/document/operator.py @@ -24,6 +24,24 @@ import ifcopenshell.util.element import bonsai.bim.handler import bonsai.tool as tool import bonsai.core.document as core +import subprocess +import os +from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData + + +def update_document_objects(document_id=None): + DocumentData.is_loaded = False + DocumentData.load() + + if document_id is None: + props = tool.Document.get_document_props() + if props.documents and props.active_document_index < len(props.documents): + document = props.documents[props.active_document_index] + if document.ifc_definition_id: + document_id = document.ifc_definition_id + + if document_id: + DocumentData.load_document_objects_into_props(document_id) class LoadProjectDocuments(bpy.types.Operator): @@ -33,7 +51,7 @@ class LoadProjectDocuments(bpy.types.Operator): def execute(self, context): core.load_project_documents(tool.Document) - bonsai.bim.handler.refresh_ui_data() # Update breadcrumbs data. + update_document_objects() return {"FINISHED"} @@ -45,18 +63,8 @@ class LoadDocument(bpy.types.Operator): def execute(self, context): core.load_document(tool.Document, document=tool.Ifc.get().by_id(self.document)) - bonsai.bim.handler.refresh_ui_data() # Update breadcrumbs data. - return {"FINISHED"} - - -class LoadParentDocument(bpy.types.Operator): - bl_idname = "bim.load_parent_document" - bl_label = "Load Parent Document" - bl_options = {"REGISTER", "UNDO"} - - def execute(self, context): - core.load_parent_document(tool.Document) - bonsai.bim.handler.refresh_ui_data() # Update breadcrumbs data. + bonsai.bim.handler.refresh_ui_data() # Is this needed? + update_document_objects() return {"FINISHED"} @@ -70,6 +78,17 @@ class DisableDocumentEditingUI(bpy.types.Operator): return {"FINISHED"} +class DisableObjectDocumentEditingUI(bpy.types.Operator): + bl_idname = "bim.disable_object_document_editing_ui" + bl_label = "Disable Object Document Editing UI" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + props = tool.Document.get_document_props() + props.is_object_editing = False + return {"FINISHED"} + + class EnableEditingDocument(bpy.types.Operator): bl_idname = "bim.enable_editing_document" bl_label = "Enable Editing Document" @@ -77,6 +96,8 @@ class EnableEditingDocument(bpy.types.Operator): document: bpy.props.IntProperty() def execute(self, context): + props = tool.Document.get_document_props() + props.is_document_editing = True core.enable_editing_document(tool.Document, document=tool.Ifc.get().by_id(self.document)) return {"FINISHED"} @@ -87,6 +108,8 @@ class DisableEditingDocument(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): + props = tool.Document.get_document_props() + props.is_document_editing = False core.disable_editing_document(tool.Document) return {"FINISHED"} @@ -97,7 +120,41 @@ class AddInformation(bpy.types.Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} def _execute(self, context): - core.add_information(tool.Ifc, tool.Document) + props = tool.Document.get_document_props() + parent = None + if props.documents and props.active_document_index < len(props.documents): + selected_document = props.documents[props.active_document_index] + + if selected_document.ifc_definition_id == -1: + parent = tool.Ifc.get().by_type("IfcProject")[0] if tool.Ifc.get().by_type("IfcProject") else None + elif selected_document.is_information: + parent = tool.Ifc.get().by_id(selected_document.ifc_definition_id) + else: + self.report({"ERROR"}, "Cannot add an information element as a child of a reference element") + return {"CANCELLED"} + else: + parent = tool.Ifc.get().by_type("IfcProject")[0] if tool.Ifc.get().by_type("IfcProject") else None + + core.add_information(tool.Ifc, tool.Document, parent) + + expanded_docs = [] + try: + expanded_docs = json.loads(context.scene.ExpandedDocuments.json_string) + except (AttributeError, json.JSONDecodeError): + pass + + project = tool.Ifc.get().by_type("IfcProject")[0] + virtual_root_id = -project.id() + if virtual_root_id in expanded_docs: + expanded_docs.remove(virtual_root_id) + + if parent and parent.is_a("IfcDocumentInformation"): + if parent.id() not in expanded_docs: + expanded_docs.append(parent.id()) + + context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + + bpy.ops.bim.load_project_documents() class AddDocumentReference(bpy.types.Operator, tool.Ifc.Operator): @@ -106,7 +163,33 @@ class AddDocumentReference(bpy.types.Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} def _execute(self, context): + props = tool.Document.get_document_props() + + if not props.documents or props.active_document_index >= len(props.documents): + self.report({"ERROR"}, "No document selected") + return {"CANCELLED"} + + selected_document = props.documents[props.active_document_index] + + if not selected_document.is_information: + self.report({"ERROR"}, "Cannot add a reference to a reference element") + return {"CANCELLED"} + + parent = tool.Ifc.get().by_id(selected_document.ifc_definition_id) + + props.document_attributes.clear() core.add_reference(tool.Ifc, tool.Document) + expanded_docs = [] + try: + expanded_docs = json.loads(context.scene.ExpandedDocuments.json_string) + except (AttributeError, json.JSONDecodeError): + pass + + if parent.id() not in expanded_docs: + expanded_docs.append(parent.id()) + context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + + bpy.ops.bim.load_project_documents() class EditDocument(bpy.types.Operator, tool.Ifc.Operator): @@ -116,7 +199,16 @@ class EditDocument(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): props = tool.Document.get_document_props() - core.edit_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(props.active_document_id)) + if props.active_document_id: + core.edit_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(props.active_document_id)) + props.active_document_id = 0 + props.is_document_editing = False + DocumentData.is_loaded = False + DocumentData.load() + ObjectDocumentData.is_loaded = False + ObjectDocumentData.load() + bpy.ops.bim.update_assigned_documents() + bonsai.bim.handler.refresh_ui_data() class RemoveDocument(bpy.types.Operator, tool.Ifc.Operator): @@ -129,6 +221,39 @@ class RemoveDocument(bpy.types.Operator, tool.Ifc.Operator): core.remove_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(self.document)) +class UpdateAssignedDocuments(bpy.types.Operator): + bl_idname = "bim.update_assigned_documents" + bl_label = "Update Assigned Documents" + bl_description = "Update the list of documents assigned to the active object" + bl_options = {"REGISTER"} + + def execute(self, context): + ObjectDocumentData.is_loaded = False + ObjectDocumentData.load() + + props = tool.Document.get_document_props() + props.assigned_documents.clear() + + if not ObjectDocumentData.data.get("documents"): + return {"FINISHED"} + + sorted_docs = sorted( + ObjectDocumentData.data["documents"], + key=lambda doc: ((doc.get("identification") or "").lower(), (doc.get("name") or "").lower()), + ) + + for document in sorted_docs: + new = props.assigned_documents.add() + new.name = document["name"] or "Unnamed" + new.identification = document["identification"] or "*" + new.is_information = document.get("is_information", False) + new.ifc_definition_id = document["id"] + new.location = document.get("location") or "" + new.description = document.get("description") or "" + + return {"FINISHED"} + + class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.assign_document" bl_label = "Assign Document" @@ -145,6 +270,11 @@ class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): if element: core.assign_document(tool.Ifc, product=element, document=document) + update_document_objects(self.document) + ObjectDocumentData.is_loaded = False + ObjectDocumentData.load() + bpy.ops.bim.update_assigned_documents() + class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.unassign_document" @@ -160,6 +290,19 @@ class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) if element: core.unassign_document(tool.Ifc, product=element, document=document) + props = tool.Document.get_document_props() + active_document_id = None + if props.documents and props.active_document_index < len(props.documents): + active_document = props.documents[props.active_document_index] + active_document_id = active_document.ifc_definition_id + + if active_document_id and active_document_id != self.document: + update_document_objects(active_document_id) + else: + update_document_objects(self.document) + ObjectDocumentData.is_loaded = False + ObjectDocumentData.load() + bpy.ops.bim.update_assigned_documents() class SelectDocumentObjects(bpy.types.Operator): @@ -182,3 +325,122 @@ class SelectDocumentObjects(bpy.types.Operator): i += 1 self.report({"INFO"}, f"{i} objects selected.") return {"FINISHED"} + + +class LoadObjectDocuments(bpy.types.Operator): + bl_idname = "bim.load_object_documents" + bl_label = "Load Object Documents" + bl_description = "Load documents to assign to the selected object" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + if not ObjectDocumentData.is_loaded: + ObjectDocumentData.load() + + core.load_project_documents(tool.Document) + + props = tool.Document.get_document_props() + props.is_object_editing = True + + bonsai.bim.handler.refresh_ui_data() + + self.update_assigned_documents(props) + + return {"FINISHED"} + + def update_assigned_documents(self, props): + props.assigned_documents.clear() + + if not ObjectDocumentData.data.get("documents"): + return + + sorted_docs = sorted( + ObjectDocumentData.data["documents"], + key=lambda doc: ((doc.get("identification") or "").lower(), (doc.get("name") or "").lower()), + ) + + for document in sorted_docs: + new = props.assigned_documents.add() + new.name = document["name"] or "Unnamed" + new.identification = document["identification"] or "*" + new.is_information = document.get("is_information", False) + new.ifc_definition_id = document["id"] + new.location = document["location"] or "" + new.description = document["description"] or "" + + +class OpenIFCDocument(bpy.types.Operator): + bl_idname = "bim.open_ifc_document" + bl_label = "Open IFC Document" + bl_description = "Open the IFC document in a new Blender instance and load the project" + bl_options = {"REGISTER", "UNDO"} + + uri: bpy.props.StringProperty(name="URI") + + def execute(self, context): + + if not self.uri: + self.report({"ERROR"}, "No URI provided") + return {"CANCELLED"} + + file_path = self.uri + if file_path.startswith("file://"): + file_path = file_path[7:] + elif file_path.startswith("file:"): + file_path = file_path[5:] + + if not os.path.isabs(file_path): + file_path = os.path.abspath(file_path) + + if not os.path.exists(file_path): + self.report({"ERROR"}, f"IFC file not found: {file_path}") + return {"CANCELLED"} + + try: + subprocess.Popen( + [ + "blender", + "--python-expr", + f"import bpy; bpy.ops.bim.load_project(filepath='{file_path}', should_start_fresh_session=True)", + ] + ) + self.report({"INFO"}, f"Opening IFC file: {file_path} in a new Blender instance.") + except Exception as e: + self.report({"ERROR"}, f"Failed to open IFC file: {str(e)}") + + return {"FINISHED"} + + +class ToggleDocument(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.toggle_document" + bl_label = "Toggle Document" + bl_options = {"REGISTER", "UNDO"} + document: bpy.props.IntProperty() + option: bpy.props.StringProperty() + + def _execute(self, context): + expanded_documents = [] + try: + expanded_documents = json.loads(context.scene.ExpandedDocuments.json_string) + except (AttributeError, json.JSONDecodeError): + expanded_documents = [] + + document_id = self.document + + if self.option == "Expand" and document_id not in expanded_documents: + expanded_documents.append(document_id) + elif self.option == "Collapse" and document_id in expanded_documents: + expanded_documents.remove(document_id) + elif document_id == -1: + project = tool.Ifc.get().by_type("IfcProject")[0] + virtual_root_id = -project.id() + + if self.option == "Expand" and virtual_root_id not in expanded_documents: + expanded_documents.append(virtual_root_id) + elif self.option == "Collapse" and virtual_root_id in expanded_documents: + expanded_documents.remove(virtual_root_id) + + context.scene.ExpandedDocuments.json_string = json.dumps(expanded_documents) + + bpy.ops.bim.load_project_documents() + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/document/prop.py b/src/bonsai/bonsai/bim/module/document/prop.py index f4e4b16686..88878f8bfc 100644 --- a/src/bonsai/bonsai/bim/module/document/prop.py +++ b/src/bonsai/bonsai/bim/module/document/prop.py @@ -30,6 +30,7 @@ from bpy.props import ( FloatVectorProperty, CollectionProperty, ) +from bonsai.bim.module.document.data import DocumentData from typing import TYPE_CHECKING, Union @@ -49,36 +50,93 @@ def update_document_identification(self: "Document", context: bpy.types.Context) tool.Document.set_external_reference_id(document, self.identification) +def update_active_document(self, context): + if self.documents and self.active_document_index < len(self.documents): + document = self.documents[self.active_document_index] + if document.ifc_definition_id: + DocumentData.load_document_objects_into_props(document.ifc_definition_id) + + class Document(PropertyGroup): - name: StringProperty(name="Name", update=update_document_name) - identification: StringProperty(name="Identification", update=update_document_identification) - is_information: BoolProperty( - name="Is Information", - description="Whether element is IfcDocumentInformation, otherwise it's IfcDocumentReference.", - ) + name: StringProperty(name="Name") + identification: StringProperty(name="Identification") + description: StringProperty(name="Description") + is_information: BoolProperty(name="Is Information") + ifc_definition_id: IntProperty(name="IFC Definition ID") + location: StringProperty(name="Location", default="") + tree_depth: IntProperty(name="Tree Depth", default=0) + has_children: BoolProperty(name="Has Children", default=False) + is_expanded: BoolProperty(name="Is Expanded", default=False) + + if TYPE_CHECKING: + name: str + identification: str + description: str + is_information: bool + ifc_definition_id: int + location: str + tree_depth: int + has_children: bool + is_expanded: bool + + +class ExpandedDocuments(PropertyGroup): + json_string: StringProperty(name="JSON String", default="[]") + + if TYPE_CHECKING: + json_string: str + + +class DocumentObject(PropertyGroup): + name: StringProperty(name="Name") ifc_definition_id: IntProperty(name="IFC Definition ID") if TYPE_CHECKING: + name: str + ifc_definition_id: int + + +class AssignedDocument(PropertyGroup): + name: StringProperty(name="Name") + identification: StringProperty(name="Identification") + description: StringProperty(name="Description", default="") + is_information: BoolProperty(name="Is Information") + ifc_definition_id: IntProperty(name="IFC Definition ID") + location: StringProperty(name="Location", default="") + + if TYPE_CHECKING: + name: str identification: str is_information: bool ifc_definition_id: int + location: str class BIMDocumentProperties(PropertyGroup): document_attributes: CollectionProperty(name="Document Attributes", type=Attribute) active_document_id: IntProperty(name="Active Document Id") documents: CollectionProperty(name="Documents", type=Document) - breadcrumbs: CollectionProperty(name="Breadcrumbs", type=StrProperty) - active_document_index: IntProperty(name="Active Document Index") + active_document_index: IntProperty(name="Active Document Index", update=update_active_document) is_editing: BoolProperty(name="Is Editing", default=False) + is_document_editing: BoolProperty(name="Is Document Editing", default=False) + is_object_editing: BoolProperty(name="Is Object Editing", default=False) + document_objects: CollectionProperty(name="Document Objects", type=DocumentObject) + active_document_object_index: IntProperty(name="Active Document Object Index") + assigned_documents: CollectionProperty(name="Assigned Documents", type=AssignedDocument) + active_assigned_document_index: IntProperty(name="Active Assigned Document Index") if TYPE_CHECKING: document_attributes: bpy.types.bpy_prop_collection_idprop[Attribute] active_document_id: int documents: bpy.types.bpy_prop_collection_idprop[Document] - breadcrumbs: bpy.types.bpy_prop_collection_idprop[StrProperty] active_document_index: int is_editing: bool + is_document_editing: bool + is_object_editing: bool + document_objects: bpy.types.bpy_prop_collection_idprop[DocumentObject] + active_document_object_index: int + assigned_documents: bpy.types.bpy_prop_collection_idprop[AssignedDocument] + active_assigned_document_index: int @property def active_document(self) -> Union[Document, None]: diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index 5897edbad8..eab2d146fb 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import bpy import bonsai.tool as tool from bpy.types import Panel, UIList from bonsai.bim.helper import draw_attributes @@ -42,43 +43,74 @@ class BIM_PT_documents(Panel): self.props = tool.Document.get_document_props() row = self.layout.row(align=True) - row.label(text="{} Documents Found".format(DocumentData.data["total_information"]), icon="FILE") + split = row.split(factor=0.55) + + left_row = split.row(align=True) + left_row.label(text="{} Informations".format(DocumentData.data["total_document_informations"]), icon="FILE") + left_row.label(text="{} References".format(DocumentData.data["total_document_references"]), icon="FILE_HIDDEN") + + right_row = split.row(align=True) + right_row.label( + text="{} Objects Referenced".format(DocumentData.data["total_referenced_objects"]), icon="OBJECT_DATA" + ) if self.props.is_editing: - row.operator("bim.disable_document_editing_ui", text="", icon="CANCEL") + right_row.operator("bim.disable_document_editing_ui", text="", icon="CANCEL") else: - row.operator("bim.load_project_documents", text="", icon="IMPORT") + right_row.operator("bim.load_project_documents", text="", icon="IMPORT") if not self.props.is_editing: return row = self.layout.row(align=True) - if self.props.breadcrumbs: - row.operator("bim.load_parent_document", text="", icon="FRAME_PREV") - row.label(text=DocumentData.data["parent_document"]) - else: - row.alignment = "RIGHT" - row.operator("bim.add_information", text="", icon="ADD") - if self.props.breadcrumbs: - row.operator("bim.add_document_reference", text="", icon="FILE_HIDDEN") + row.alignment = "RIGHT" - active_document = self.props.active_document - - if self.props.active_document_id: + if self.props.is_document_editing: row.operator("bim.edit_document", text="", icon="CHECKMARK") row.operator("bim.disable_editing_document", text="", icon="CANCEL") - elif active_document: - ifc_definition_id = active_document.ifc_definition_id - row.operator("bim.select_document_objects", text="", icon="RESTRICT_SELECT_OFF").document = ( - ifc_definition_id - ) - row.operator("bim.assign_document", text="", icon="BRUSH_DATA").document = ifc_definition_id - row.operator("bim.enable_editing_document", text="", icon="GREASEPENCIL").document = ifc_definition_id - row.operator("bim.remove_document", text="", icon="X").document = ifc_definition_id + else: + row.operator("bim.add_information", text="", icon="ADD") + + if self.props.documents and self.props.active_document_index < len(self.props.documents): + active_doc = self.props.documents[self.props.active_document_index] + if active_doc.is_information and active_doc.ifc_definition_id != -1: + row.operator("bim.add_document_reference", text="", icon="FILE_HIDDEN") + + active_document = self.props.active_document + if active_document: + ifc_definition_id = active_document.ifc_definition_id + row.operator("bim.select_document_objects", text="", icon="RESTRICT_SELECT_OFF").document = ( + ifc_definition_id + ) + row.operator("bim.assign_document", text="", icon="BRUSH_DATA").document = ifc_definition_id + row.operator("bim.enable_editing_document", text="", icon="GREASEPENCIL").document = ifc_definition_id + row.operator("bim.remove_document", text="", icon="X").document = ifc_definition_id self.layout.template_list("BIM_UL_documents", "", self.props, "documents", self.props, "active_document_index") - if self.props.active_document_id: - draw_attributes(self.props.document_attributes, self.layout) + if self.props.is_document_editing: + active_document = self.props.active_document + if active_document.is_information: + draw_attributes(self.props.document_attributes, self.layout) + else: + draw_attributes(self.props.document_attributes, self.layout, filter_attributes=["Name"]) + + if ( + self.props.is_editing + and self.props.documents + and self.props.active_document_index < len(self.props.documents) + ): + document = self.props.documents[self.props.active_document_index] + box = self.layout.box() + row = box.row(align=True) + row.label(text="Assigned Objects", icon="OUTLINER_OB_EMPTY") + box.template_list( + "BIM_UL_document_objects", + "", + self.props, + "document_objects", + self.props, + "active_document_object_index", + ) class BIM_PT_object_documents(Panel): @@ -110,57 +142,203 @@ class BIM_PT_object_documents(Panel): self.props = tool.Document.get_document_props() self.file = tool.Ifc.get() - self.draw_add_ui() - - if not ObjectDocumentData.data["documents"]: - row = self.layout.row(align=True) - row.label(text="No Documents", icon="FILE") - - for document in ObjectDocumentData.data["documents"]: - row = self.layout.row(align=True) - row.label(text=document["identification"] or "*", icon="FILE") - row.label(text=document["name"] or "Unnamed") - if document["location"]: - row.operator("bim.open_uri", icon="URL", text="").uri = document["location"] - row.operator("bim.unassign_document", text="", icon="X").document = document["id"] - - def draw_add_ui(self): - if not self.props.is_editing: - row = self.layout.row(align=True) - row.operator("bim.load_project_documents", text="Assign Document References", icon="ADD") - return + doc_count = len(ObjectDocumentData.data["documents"]) row = self.layout.row(align=True) - if self.props.breadcrumbs: - row.operator("bim.load_parent_document", text="", icon="FRAME_PREV") - row.label(text=DocumentData.data["parent_document"]) + row.label(text="{} Documents Assigned".format(doc_count), icon="FILE") + + if self.props.is_object_editing: + row.operator("bim.disable_object_document_editing_ui", text="", icon="CANCEL") else: + row.operator("bim.load_object_documents", text="", icon="IMPORT") + + if not self.props.is_object_editing and doc_count == 0: + row = self.layout.row() + row.label(text="No documents assigned", icon="INFO") + return + + if self.props.is_object_editing: + self.draw_add_ui() + if doc_count > 0: + box = self.layout.box() + row = box.row(align=True) + row.label(text="Assigned Documents", icon="OUTLINER_OB_EMPTY") + + box.template_list( + "BIM_UL_assigned_documents", + "", + self.props, + "assigned_documents", + self.props, + "active_assigned_document_index", + ) + + def draw_add_ui(self): + if self.props.is_object_editing: + row = self.layout.row(align=True) row.alignment = "RIGHT" - if self.props.documents and self.props.active_document_index < len(self.props.documents): - document = self.props.documents[self.props.active_document_index] - if not document.is_information: - row.operator("bim.assign_document", text="", icon="ADD").document = document.ifc_definition_id - row.operator("bim.disable_document_editing_ui", text="", icon="CANCEL") + if self.props.documents and self.props.active_document_index < len(self.props.documents): + document = self.props.documents[self.props.active_document_index] - self.layout.template_list("BIM_UL_documents", "", self.props, "documents", self.props, "active_document_index") + assigned_doc_ids = [] + for doc in ObjectDocumentData.data["documents"]: + assigned_doc_ids.append(doc["id"]) + + if document.ifc_definition_id not in assigned_doc_ids: + doc_op = row.operator("bim.assign_document", text="", icon="BRUSH_DATA") + doc_op.document = document.ifc_definition_id # Pass the current document's ID + else: + row.label(text="", icon="CHECKMARK") + + self.layout.template_list( + "BIM_UL_documents", "", self.props, "documents", self.props, "active_document_index" + ) class BIM_UL_documents(UIList): + def draw_item(self, context, layout, data, item, icon, active_data, active_propname): + if item: + row = layout.row(align=True) + indent_depth = 0 + + if item.ifc_definition_id != -1: + if item.tree_depth > 1: + indent_depth = item.tree_depth - 1 + for i in range(indent_depth): + row.label(text="", icon="BLANK1") + if item.ifc_definition_id == -1: + row.label(text="", icon="OUTLINER_COLLECTION") + row.label(text=item.name) + return + if item.is_information and item.has_children: + op = row.operator( + "bim.toggle_document", icon="TRIA_DOWN" if item.is_expanded else "TRIA_RIGHT", text="", emboss=False + ) + op.document = item.ifc_definition_id + op.option = "Collapse" if item.is_expanded else "Expand" + elif item.is_information: + row.label(text="", icon="BLANK1") + if item.is_information: + row.label(text="", icon="FILE") + text = " - ".join([x for x in [item.name, item.location] if x]) + else: + row.label(text="", icon="FILE_HIDDEN") + text = " - ".join([x for x in [item.description, item.location] if x]) + split1 = row.split(factor=0.1) + split1.prop(item, "identification", text="", emboss=False) + split2 = split1.split(factor=0.8) + split2.label(text=text) + + if item.location: + if item.location.lower().endswith(".ifc"): + row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = item.location + row.operator("bim.open_uri", icon="URL", text="").uri = item.location + + +class BIM_UL_document_objects(UIList): + def draw_item(self, context, layout, data, item, icon, active_data, active_propname): + if item: + row = layout.row(align=True) + row.prop(item, "name", text="", emboss=False, icon="OBJECT_DATA") + row.operator("bim.select_object", text="", icon="RESTRICT_SELECT_OFF").obj_name = item.name + + props = tool.Document.get_document_props() + if props.documents and props.active_document_index < len(props.documents): + document = props.documents[props.active_document_index] + + op = row.operator("bim.unassign_document", text="", icon="X") + op.document = document.ifc_definition_id + op.obj = item.name + + +class BIM_UL_assigned_documents(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname): if item: row = layout.row(align=True) if item.is_information: - op = row.operator("bim.load_document", text="", emboss=False, icon="DISCLOSURE_TRI_RIGHT") - op.document = item.ifc_definition_id row.label(text="", icon="FILE") else: - row.label(text="", icon="BLANK1") row.label(text="", icon="FILE_HIDDEN") - split1 = row.split(factor=0.1) - # split1.label(text=item.identification) - split1.prop(item, "identification", text="", emboss=False) - split2 = split1.split(factor=0.9) - split2.prop(item, "name", text="", emboss=False) + split1 = row.split(factor=0.2) + split1.label(text=item.identification or "") + + split2 = split1.split(factor=1.0) + if item.is_information: + split2.label(text=item.name or "Unnamed") + else: + split2.label(text=item.description or "No Description") + + if item.location: + if item.location.lower().endswith(".ifc"): + row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = item.location + row.operator("bim.open_uri", icon="URL", text="").uri = item.location + op = row.operator("bim.unassign_document", text="", icon="X") + op.document = item.ifc_definition_id + + +def add_object_documents_context_menu(self, context): + if not context.active_object: + return + + if not tool.Blender.get_ifc_definition_id(context.active_object): + return + + self.layout.separator() + self.layout.menu("BIM_MT_object_documents_context_menu", icon="FILE") + + +class BIM_MT_object_documents_context_menu(bpy.types.Menu): + bl_idname = "BIM_MT_object_documents_context_menu" + bl_label = "Documents" + + def draw(self, context): + layout = self.layout + + if not context.selected_objects: + layout.label(text="No documents", icon="INFO") + return + + if len(context.selected_objects) > 1: + layout.label(text="Select a single object to see its referenced documents", icon="INFO") + return + + obj = context.active_object + if not obj or not tool.Blender.get_ifc_definition_id(obj): + layout.label(text="No documents", icon="INFO") + return + + if not ObjectDocumentData.is_loaded: + ObjectDocumentData.load() + + if not ObjectDocumentData.data["documents"]: + layout.label(text="No Documents", icon="FILE") + else: + for document in ObjectDocumentData.data["documents"]: + row = layout.row(align=True) + + with_ifc_icon = document["location"] and document["location"].lower().endswith(".ifc") + with_url_icon = bool(document["location"]) + + if with_ifc_icon: + row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = document["location"] + else: + row.label(text="", icon="BLANK1") + + if with_url_icon: + row.operator("bim.open_uri", icon="URL", text="").uri = document["location"] + else: + row.label(text="", icon="BLANK1") + + doc_entity = None + if "id" in document: + doc_entity = tool.Ifc.get().by_id(document["id"]) + + if doc_entity and doc_entity.is_a("IfcDocumentReference"): + display_text = document.get("description") or "" + else: + display_text = document.get("name") or "" + + row.label(text=f"{document['identification'] or ''}: {display_text}") diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index e82360dbb9..64de5799ed 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -21,6 +21,7 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy + import json import ifcopenshell import bonsai.tool as tool @@ -28,28 +29,22 @@ if TYPE_CHECKING: def load_project_documents(document: tool.Document) -> None: document.clear_document_tree() document.import_project_documents() - document.clear_breadcrumbs() document.enable_editing_ui() def load_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: document_tool.clear_document_tree() - document_tool.import_subdocuments(document) - document_tool.import_references(document) + try: + expanded_docs = json.loads(bpy.context.scene.ExpandedDocuments.json_string) + except (AttributeError, json.JSONDecodeError): + expanded_docs = [] + + if document.id() not in expanded_docs: + expanded_docs.append(document.id()) + bpy.context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + + document_tool.import_project_documents() document_tool.disable_editing_document() - document_tool.add_breadcrumb(document) - - -def load_parent_document(document: tool.Document) -> None: - document.clear_document_tree() - document.remove_latest_breadcrumb() - parent = document.get_active_breadcrumb() - if parent: - document.import_subdocuments(parent) - document.import_references(parent) - document.disable_editing_document() - else: - document.import_project_documents() def disable_document_editing_ui(document: tool.Document) -> None: @@ -58,33 +53,62 @@ def disable_document_editing_ui(document: tool.Document) -> None: def enable_editing_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: + props = document_tool.get_document_props() + props.active_document_id = document.id() + props.is_document_editing = True document_tool.import_document_attributes(document) - document_tool.set_active_document(document) def disable_editing_document(document: tool.Document) -> None: - document.disable_editing_document() + props = document.get_document_props() + props.active_document_id = 0 + props.is_document_editing = False + props.document_attributes.clear() -def add_information(ifc: tool.Ifc, document: tool.Document) -> None: - document.clear_document_tree() - parent = document.get_active_breadcrumb() +def add_information(ifc: tool.Ifc, document_tool: tool.Document, parent=None) -> ifcopenshell.entity_instance: + document_tool.clear_document_tree() + + if parent is None and ifc.get().by_type("IfcProject"): + parent = ifc.get().by_type("IfcProject")[0] + information = ifc.run("document.add_information", parent=parent) ifc.run("document.add_reference", information=information) - if parent: - document.import_subdocuments(parent) - document.import_references(parent) - else: - document.import_project_documents() + if parent and parent.is_a("IfcDocumentInformation"): + try: + expanded_docs = json.loads(bpy.context.scene.ExpandedDocuments.json_string) + except (AttributeError, json.JSONDecodeError): + expanded_docs = [] + + if parent.id() not in expanded_docs: + expanded_docs.append(parent.id()) + bpy.context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + + document_tool.import_project_documents() def add_reference(ifc: tool.Ifc, document: tool.Document) -> None: - parent = document.get_active_breadcrumb() - assert parent - ifc.run("document.add_reference", information=parent) - document.clear_document_tree() - document.import_subdocuments(parent) - document.import_references(parent) + props = document.get_document_props() + parent = None + + if props.documents and props.active_document_index < len(props.documents): + selected_document = props.documents[props.active_document_index] + if selected_document.is_information: + parent = ifc.get().by_id(selected_document.ifc_definition_id) + + if parent: + reference = ifc.run("document.add_reference", information=parent) + reference.Location = "" + try: + expanded_docs = json.loads(bpy.context.scene.ExpandedDocuments.json_string) + except (AttributeError, json.JSONDecodeError): + expanded_docs = [] + + if parent.id() not in expanded_docs: + expanded_docs.append(parent.id()) + bpy.context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + + document.import_project_documents() def edit_document(ifc: tool.Ifc, document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: @@ -95,12 +119,7 @@ def edit_document(ifc: tool.Ifc, document_tool: tool.Document, document: ifcopen ifc.run("document.edit_reference", reference=document, attributes=attributes) document_tool.disable_editing_document() document_tool.clear_document_tree() - parent = document_tool.get_active_breadcrumb() - if parent: - document_tool.import_subdocuments(parent) - document_tool.import_references(parent) - else: - document_tool.import_project_documents() + document_tool.import_project_documents() def remove_document(ifc: tool.Ifc, document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: @@ -109,12 +128,7 @@ def remove_document(ifc: tool.Ifc, document_tool: tool.Document, document: ifcop ifc.run("document.remove_information", information=document) else: ifc.run("document.remove_reference", reference=document) - parent = document_tool.get_active_breadcrumb() - if parent: - document_tool.import_subdocuments(parent) - document_tool.import_references(parent) - else: - document_tool.import_project_documents() + document_tool.import_project_documents() def assign_document( diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index d8e4dd2396..4061914bee 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -287,20 +287,14 @@ class Debug: @interface class Document: - def add_breadcrumb(cls, document): pass - def clear_breadcrumbs(cls): pass def clear_document_tree(cls): pass def disable_editing_document(cls): pass def disable_editing_ui(cls): pass def enable_editing_ui(cls): pass def export_document_attributes(cls): pass - def get_active_breadcrumb(cls): pass def import_document_attributes(cls, document): pass def import_project_documents(cls): pass - def import_references(cls, document): pass - def import_subdocuments(cls, document): pass def is_document_information(cls, document): pass - def remove_latest_breadcrumb(cls): pass def set_active_document(cls, document): pass diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index 3a2f89aa94..5bb6ad813a 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -18,6 +18,7 @@ from __future__ import annotations import bpy +import json import ifcopenshell.util.system import bonsai.bim.helper import bonsai.core.tool @@ -33,17 +34,6 @@ class Document(bonsai.core.tool.Document): def get_document_props(cls) -> BIMDocumentProperties: return bpy.context.scene.BIMDocumentProperties - @classmethod - def add_breadcrumb(cls, document: ifcopenshell.entity_instance) -> None: - props = cls.get_document_props() - new = props.breadcrumbs.add() - new.name = str(document.id()) - - @classmethod - def clear_breadcrumbs(cls) -> None: - props = cls.get_document_props() - props.breadcrumbs.clear() - @classmethod def clear_document_tree(cls) -> None: props = cls.get_document_props() @@ -69,18 +59,15 @@ class Document(bonsai.core.tool.Document): props = cls.get_document_props() return bonsai.bim.helper.export_attributes(props.document_attributes) - @classmethod - def get_active_breadcrumb(cls) -> Union[ifcopenshell.entity_instance, None]: - props = cls.get_document_props() - if len(props.breadcrumbs): - return tool.Ifc.get().by_id(int(props.breadcrumbs[-1].name)) - @classmethod def import_document_attributes(cls, document: ifcopenshell.entity_instance) -> None: props = cls.get_document_props() props.document_attributes.clear() - def callback(attr_name: str, _, data: dict[str, Any]) -> Union[bool, None]: + def callback(attr_name: str, attr_value: Any, data: dict[str, Any]) -> Union[bool, None]: + if attr_name == "Location" and attr_value is None: + data[attr_name] = "" + return True if attr_name != "Name": return None # Proceed normally @@ -100,52 +87,138 @@ class Document(bonsai.core.tool.Document): def import_project_documents(cls) -> None: props = cls.get_document_props() props.documents.clear() - project = tool.Ifc.get().by_type("IfcProject")[0] + file = tool.Ifc.get() + try: + expanded_documents = json.loads(bpy.context.scene.ExpandedDocuments.json_string) + except (AttributeError, json.JSONDecodeError): + expanded_documents = [] + + project = file.by_type("IfcProject")[0] if file.by_type("IfcProject") else None + if not project: + return + + document_children = {} + + for rel in file.by_type("IfcDocumentInformationRelationship"): + parent_id = rel.RelatingDocument.id() + if parent_id not in document_children: + document_children[parent_id] = [] + + for child in rel.RelatedDocuments: + document_children[parent_id].append(child) + + is_ifc2x3 = file.schema == "IFC2X3" + + if is_ifc2x3: + for ref in file.by_type("IfcDocumentReference"): + if ref.ReferenceToDocument: + parent = ref.ReferenceToDocument[0] + parent_id = parent.id() + if parent_id not in document_children: + document_children[parent_id] = [] + document_children[parent_id].append(ref) + else: + for ref in file.by_type("IfcDocumentReference"): + if hasattr(ref, "ReferencedDocument") and ref.ReferencedDocument: + parent = ref.ReferencedDocument + parent_id = parent.id() + if parent_id not in document_children: + document_children[parent_id] = [] + document_children[parent_id].append(ref) + + root_documents = [] for rel in project.HasAssociations or []: if rel.is_a("IfcRelAssociatesDocument") and rel.RelatingDocument.is_a("IfcDocumentInformation"): - element = rel.RelatingDocument - new = props.documents.add() - new.ifc_definition_id = element.id() - new["name"] = element.Name or "Unnamed" - new.is_information = True - new["identification"] = cls.get_document_information_id(element) + is_child = False + for children in document_children.values(): + if rel.RelatingDocument in children: + is_child = True + break + + if not is_child: + root_documents.append(rel.RelatingDocument) + + root = props.documents.add() + root.ifc_definition_id = -1 + root.is_information = True + root.name = f"Project Documents ({project.Name or 'Unnamed Project'})" + root.identification = "" + root.location = "" + root.tree_depth = 0 + root.has_children = bool(root_documents) + + root_id = -project.id() + + root.is_expanded = root_id not in expanded_documents + + if root.is_expanded: + root_documents.sort( + key=lambda doc: ((cls.get_document_information_id(doc) or "").lower(), (doc.Name or "").lower()) + ) + + for doc in root_documents: + cls._process_document(doc, props, document_children, expanded_documents, 1) @classmethod - def import_references(cls, document: ifcopenshell.entity_instance) -> None: - props = cls.get_document_props() - is_ifc2x3 = tool.Ifc.get_schema() == "IFC2X3" - references = cls.get_document_references(document) - for element in references: - new = props.documents.add() - new.ifc_definition_id = element.id() - # Use Description + Location instead of Name as IFC has a restriction - # for IfcDocumentReference to have Name only if it has no ReferencedDocument. - name = " - ".join([x for x in [element.Description, element.Location] if x]) - new["name"] = name or "Unnamed" - new["identification"] = cls.get_external_reference_id(element) - new.is_information = False + def _process_document(cls, document, props, document_children, expanded_documents, depth): + new = props.documents.add() + new.ifc_definition_id = document.id() + new.is_information = document.is_a("IfcDocumentInformation") + new.tree_depth = depth - @classmethod - def import_subdocuments(cls, document: ifcopenshell.entity_instance) -> None: - props = cls.get_document_props() - if document.IsPointer: - for element in document.IsPointer[0].RelatedDocuments or []: - new = props.documents.add() - new.ifc_definition_id = element.id() - new["name"] = element.Name or "Unnamed" - new.is_information = True - new["identification"] = cls.get_document_information_id(element) or "*" + file = document.file + if new.is_information: + new.name = document.Name or "Unnamed" + new.identification = cls.get_document_information_id(document) or "" + new.location = document.Location or "" + else: + new.name = document.Name or "" + new.identification = cls.get_external_reference_id(document) or "" + new.description = document.Description or "" + new.location = document.Location or "" + + if not new.is_information: + if file.schema == "IFC2X3": + if document.ReferenceToDocument: + doc_info = document.ReferenceToDocument[0] + if not new.name: + new.name = doc_info.Name or "" + new.location = new.location or "" + else: + if hasattr(document, "ReferencedDocument") and document.ReferencedDocument: + doc_info = document.ReferencedDocument + if not new.name: + new.name = doc_info.Name or "" + new.location = new.location or "" + + doc_id = document.id() + has_children = doc_id in document_children and bool(document_children[doc_id]) + new.has_children = has_children + new.is_expanded = doc_id in expanded_documents + + if has_children and new.is_expanded: + children = document_children[doc_id] + + children.sort( + key=lambda doc: ( + doc.is_a("IfcDocumentInformation"), + ( + cls.get_document_information_id(doc) + if doc.is_a("IfcDocumentInformation") + else cls.get_external_reference_id(doc) or "" + ).lower(), + (doc.Name or "").lower(), + ), + reverse=True, + ) + + for child in children: + cls._process_document(child, props, document_children, expanded_documents, depth + 1) @classmethod def is_document_information(cls, document: ifcopenshell.entity_instance) -> bool: return document.is_a("IfcDocumentInformation") - @classmethod - def remove_latest_breadcrumb(cls) -> None: - props = cls.get_document_props() - if len(props.breadcrumbs): - props.breadcrumbs.remove(len(props.breadcrumbs) - 1) - @classmethod def set_active_document(cls, document: ifcopenshell.entity_instance) -> None: props = cls.get_document_props() diff --git a/src/bonsai/test/bim/feature/document.feature b/src/bonsai/test/bim/feature/document.feature index 9b4a34cfb4..9ef9657499 100644 --- a/src/bonsai/test/bim/feature/document.feature +++ b/src/bonsai/test/bim/feature/document.feature @@ -14,15 +14,6 @@ Scenario: Load document When I press "bim.load_document(document={information})" Then nothing happens -Scenario: Load parent document - Given an empty IFC project - And I press "bim.load_project_documents" - And I press "bim.add_information" - And the variable "information" is "{ifc}.by_type('IfcDocumentInformation')[-1].id()" - And I press "bim.load_document(document={information})" - When I press "bim.load_parent_document" - Then nothing happens - Scenario: Disable document editing UI Given an empty IFC project And I press "bim.load_project_documents" diff --git a/src/bonsai/test/core/test_document.py b/src/bonsai/test/core/test_document.py index 48421c1fe4..ab3563551d 100644 --- a/src/bonsai/test/core/test_document.py +++ b/src/bonsai/test/core/test_document.py @@ -25,7 +25,6 @@ class TestLoadProjectDocuments: def test_run(self, document): document.clear_document_tree().should_be_called() document.import_project_documents().should_be_called() - document.clear_breadcrumbs().should_be_called() document.enable_editing_ui().should_be_called() subject.load_project_documents(document) @@ -33,8 +32,6 @@ class TestLoadProjectDocuments: class TestLoadDocument: def test_run(self, document): document.clear_document_tree().should_be_called() - document.import_subdocuments("document").should_be_called() - document.import_references("document").should_be_called() document.disable_editing_document().should_be_called() document.add_breadcrumb("document").should_be_called() subject.load_document(document, document="document") @@ -63,7 +60,6 @@ class TestDisableEditingDocument: class TestAddInformation: def test_add_and_reload_tree_at_project_root(self, ifc, document): document.clear_document_tree().should_be_called() - document.get_active_breadcrumb().should_be_called().will_return(None) ifc.run("document.add_information", parent=None).should_be_called().will_return("information") ifc.run("document.add_reference", information="information").should_be_called() document.import_project_documents().should_be_called() @@ -71,21 +67,15 @@ class TestAddInformation: def test_add_and_reload_tree_at_current_parent(self, ifc, document): document.clear_document_tree().should_be_called() - document.get_active_breadcrumb().should_be_called().will_return("parent") ifc.run("document.add_information", parent="parent").should_be_called().will_return("information") ifc.run("document.add_reference", information="information").should_be_called() - document.import_subdocuments("parent").should_be_called() - document.import_references("parent").should_be_called() subject.add_information(ifc, document) class TestAddReference: def test_run(self, ifc, document): - document.get_active_breadcrumb().should_be_called().will_return("parent") ifc.run("document.add_reference", information="parent").should_be_called() document.clear_document_tree().should_be_called() - document.import_subdocuments("parent").should_be_called() - document.import_references("parent").should_be_called() subject.add_reference(ifc, document) @@ -96,7 +86,6 @@ class TestEditDocument: ifc.run("document.edit_information", information="document", attributes="attributes").should_be_called() document.disable_editing_document().should_be_called() document.clear_document_tree().should_be_called() - document.get_active_breadcrumb().should_be_called().will_return(None) document.import_project_documents().should_be_called() subject.edit_document(ifc, document, document="document") @@ -106,9 +95,6 @@ class TestEditDocument: ifc.run("document.edit_reference", reference="document", attributes="attributes").should_be_called() document.disable_editing_document().should_be_called() document.clear_document_tree().should_be_called() - document.get_active_breadcrumb().should_be_called().will_return("parent") - document.import_subdocuments("parent").should_be_called() - document.import_references("parent").should_be_called() subject.edit_document(ifc, document, document="document") @@ -117,7 +103,6 @@ class TestRemoveDocument: document.clear_document_tree().should_be_called() document.is_document_information("document").should_be_called().will_return(True) ifc.run("document.remove_information", information="document").should_be_called() - document.get_active_breadcrumb().should_be_called().will_return(None) document.import_project_documents().should_be_called() subject.remove_document(ifc, document, document="document") @@ -125,9 +110,6 @@ class TestRemoveDocument: document.clear_document_tree().should_be_called() document.is_document_information("document").should_be_called().will_return(False) ifc.run("document.remove_reference", reference="document").should_be_called() - document.get_active_breadcrumb().should_be_called().will_return("parent") - document.import_subdocuments("parent").should_be_called() - document.import_references("parent").should_be_called() subject.remove_document(ifc, document, document="document") diff --git a/src/bonsai/test/tool/test_document.py b/src/bonsai/test/tool/test_document.py index 9e3556afd5..3d313f6293 100644 --- a/src/bonsai/test/tool/test_document.py +++ b/src/bonsai/test/tool/test_document.py @@ -31,24 +31,6 @@ class TestImplementsTool(NewFile): assert isinstance(subject(), bonsai.core.tool.Document) -class TestAddBreadcrumb(NewFile): - def test_run(self): - ifc = ifcopenshell.file() - tool.Ifc().set(ifc) - document = ifc.createIfcDocumentInformation() - subject.add_breadcrumb(document) - props = tool.Document.get_document_props() - assert props.breadcrumbs[0].name == str(document.id()) - - -class TestClearBreadcrumbs(NewFile): - def test_run(self): - props = tool.Document.get_document_props() - props.breadcrumbs.add() - subject.clear_breadcrumbs() - assert len(props.breadcrumbs) == 0 - - class TestClearDocumentTree(NewFile): def test_run(self): props = tool.Document.get_document_props() @@ -103,15 +85,6 @@ class TestExportDocumentAttributes(NewFile): } -class TestGetActiveBreadcrumb(NewFile): - def test_run(self): - ifc = ifcopenshell.file() - tool.Ifc().set(ifc) - document = ifc.createIfcDocumentInformation() - subject.add_breadcrumb(document) - assert subject.get_active_breadcrumb() == document - - class TestImportDocumentAttributes(NewFile): def test_importing_information(self): ifc = ifcopenshell.file() @@ -197,22 +170,6 @@ class TestImportReferences(NewFile): assert props.documents[0].is_information is False -class TestImportSubdocuments(NewFile): - def test_run(self): - ifc = ifcopenshell.file() - tool.Ifc().set(ifc) - ifc.createIfcProject() - document = ifcopenshell.api.document.add_information(ifc) - subdocument = ifcopenshell.api.document.add_information(ifc, parent=document) - subject.import_subdocuments(document) - props = tool.Document.get_document_props() - assert len(props.documents) == 1 - assert props.documents[0].ifc_definition_id == subdocument.id() - assert props.documents[0].name == "Unnamed" - assert props.documents[0].identification == "X" - assert props.documents[0].is_information is True - - class TestIsDocumentInformation(NewFile): def test_run(self): ifc = ifcopenshell.file() @@ -222,15 +179,6 @@ class TestIsDocumentInformation(NewFile): assert subject.is_document_information(reference) is False -class TestRemoveLatestBreadcrumb(NewFile): - def test_run(self): - props = tool.Document.get_document_props() - props.breadcrumbs.add() - props.breadcrumbs.add() - subject.remove_latest_breadcrumb() - assert len(props.breadcrumbs) == 1 - - class TestSetActiveDocument(NewFile): def test_run(self): ifc = ifcopenshell.file() From d2adfc8c5d74c88125ed7257d000e6c53cd381dc Mon Sep 17 00:00:00 2001 From: falken10 Date: Fri, 20 Jun 2025 12:30:40 +0200 Subject: [PATCH 465/657] updated document ui --- src/bonsai/bonsai/bim/helper.py | 3 ++ src/bonsai/bonsai/bim/module/document/ui.py | 13 +++++--- src/bonsai/bonsai/core/document.py | 4 +-- src/bonsai/bonsai/tool/document.py | 33 +++++++++++---------- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index e76b512de3..eb8d9fa6e4 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -55,6 +55,7 @@ def draw_attributes( layout: bpy.types.UILayout, copy_operator: Optional[str] = None, popup_active_attribute: Optional[bonsai.bim.prop.Attribute] = None, + filter_attributes: list[str] = None, callback: Optional[Callable[[bonsai.bim.prop.Attribute, bpy.types.UILayout], None]] = None, *, enable_search: Union[bool, EllipsisType] = ..., @@ -75,6 +76,8 @@ def draw_attributes( """ for attribute in props: + if attribute.name in (filter_attributes or []): + continue row = layout.row(align=True) if attribute == popup_active_attribute: row.activate_init = True diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index eab2d146fb..d795cccdd4 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -68,7 +68,10 @@ class BIM_PT_documents(Panel): row.operator("bim.edit_document", text="", icon="CHECKMARK") row.operator("bim.disable_editing_document", text="", icon="CANCEL") else: - row.operator("bim.add_information", text="", icon="ADD") + if not self.props.documents or not self.props.active_document_index < len(self.props.documents) or \ + (self.props.active_document_index < len(self.props.documents) and + self.props.documents[self.props.active_document_index].is_information): + row.operator("bim.add_information", text="", icon="ADD") if self.props.documents and self.props.active_document_index < len(self.props.documents): active_doc = self.props.documents[self.props.active_document_index] @@ -81,10 +84,10 @@ class BIM_PT_documents(Panel): row.operator("bim.select_document_objects", text="", icon="RESTRICT_SELECT_OFF").document = ( ifc_definition_id ) + row.operator("bim.assign_document", text="", icon="BRUSH_DATA").document = ifc_definition_id row.operator("bim.enable_editing_document", text="", icon="GREASEPENCIL").document = ifc_definition_id row.operator("bim.remove_document", text="", icon="X").document = ifc_definition_id - self.layout.template_list("BIM_UL_documents", "", self.props, "documents", self.props, "active_document_index") if self.props.is_document_editing: @@ -185,10 +188,12 @@ class BIM_PT_object_documents(Panel): for doc in ObjectDocumentData.data["documents"]: assigned_doc_ids.append(doc["id"]) - if document.ifc_definition_id not in assigned_doc_ids: + # Only show assign button if the document is information (not reference) and not already assigned + if (document.is_information and + document.ifc_definition_id not in assigned_doc_ids): doc_op = row.operator("bim.assign_document", text="", icon="BRUSH_DATA") doc_op.document = document.ifc_definition_id # Pass the current document's ID - else: + elif document.ifc_definition_id in assigned_doc_ids: row.label(text="", icon="CHECKMARK") self.layout.template_list( diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index 64de5799ed..38ca080d83 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -18,10 +18,10 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional +import bpy +import json if TYPE_CHECKING: - import bpy - import json import ifcopenshell import bonsai.tool as tool diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index 5bb6ad813a..d3eeda694b 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -69,15 +69,12 @@ class Document(bonsai.core.tool.Document): data[attr_name] = "" return True if attr_name != "Name": - return None # Proceed normally + return None current_value = data[attr_name] - # If Name is already filled, display it so user would be able to correct invalid IFC. if current_value is not None: return None - # Skip import since IFC restricts Name to be filled - # for IfcDocumentReference with ReferencedDocument. return False import_callback = callback if document.is_a("IfcDocumentReference") else None @@ -199,20 +196,24 @@ class Document(bonsai.core.tool.Document): if has_children and new.is_expanded: children = document_children[doc_id] - children.sort( + info_children = [d for d in children if d.is_a("IfcDocumentInformation")] + ref_children = [d for d in children if not d.is_a("IfcDocumentInformation")] + + info_children.sort( key=lambda doc: ( - doc.is_a("IfcDocumentInformation"), - ( - cls.get_document_information_id(doc) - if doc.is_a("IfcDocumentInformation") - else cls.get_external_reference_id(doc) or "" - ).lower(), - (doc.Name or "").lower(), - ), - reverse=True, + (cls.get_document_information_id(doc) or "").lower(), + (doc.Name or "").lower() + ) ) - - for child in children: + + ref_children.sort( + key=lambda doc: ( + (cls.get_external_reference_id(doc) or "").lower(), + (doc.Description or doc.Name or "").lower() + ) + ) + + for child in info_children + ref_children: cls._process_document(child, props, document_children, expanded_documents, depth + 1) @classmethod From aa8c146f9da9add8a00fd48c9adea26cb2d99c45 Mon Sep 17 00:00:00 2001 From: falken10 Date: Tue, 1 Jul 2025 17:34:45 +0200 Subject: [PATCH 466/657] Refactoring based on developer's feedback --- .../bonsai/bim/module/document/__init__.py | 8 +-- src/bonsai/bonsai/bim/module/document/data.py | 48 +++++++------- .../bonsai/bim/module/document/operator.py | 33 +++++----- src/bonsai/bonsai/bim/module/document/prop.py | 9 +-- src/bonsai/bonsai/bim/module/document/ui.py | 31 ++++----- src/bonsai/bonsai/core/document.py | 56 ++++------------- src/bonsai/bonsai/tool/document.py | 63 ++++++++++++++++--- 7 files changed, 122 insertions(+), 126 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/__init__.py b/src/bonsai/bonsai/bim/module/document/__init__.py index 6a925d0f98..323520420e 100644 --- a/src/bonsai/bonsai/bim/module/document/__init__.py +++ b/src/bonsai/bonsai/bim/module/document/__init__.py @@ -18,7 +18,6 @@ import bpy from . import ui, prop, operator -from bpy.types import VIEW3D_MT_object_context_menu classes = ( operator.AddDocumentReference, @@ -41,7 +40,6 @@ classes = ( prop.Document, prop.DocumentObject, prop.AssignedDocument, - prop.ExpandedDocuments, prop.BIMDocumentProperties, ui.BIM_PT_documents, ui.BIM_PT_object_documents, @@ -54,11 +52,9 @@ classes = ( def register(): bpy.types.Scene.BIMDocumentProperties = bpy.props.PointerProperty(type=prop.BIMDocumentProperties) - bpy.types.Scene.ExpandedDocuments = bpy.props.PointerProperty(type=prop.ExpandedDocuments) - VIEW3D_MT_object_context_menu.append(ui.add_object_documents_context_menu) + bpy.types.VIEW3D_MT_object_context_menu.append(ui.add_object_documents_context_menu) def unregister(): del bpy.types.Scene.BIMDocumentProperties - del bpy.types.Scene.ExpandedDocuments - VIEW3D_MT_object_context_menu.remove(ui.add_object_documents_context_menu) + bpy.types.VIEW3D_MT_object_context_menu.remove(ui.add_object_documents_context_menu) diff --git a/src/bonsai/bonsai/bim/module/document/data.py b/src/bonsai/bonsai/bim/module/document/data.py index be6b628bed..15a89f8870 100644 --- a/src/bonsai/bonsai/bim/module/document/data.py +++ b/src/bonsai/bonsai/bim/module/document/data.py @@ -119,13 +119,15 @@ class ObjectDocumentData: return results for rel in getattr(element, "HasAssociations", []): if rel.is_a("IfcRelAssociatesDocument"): - is_information = rel.RelatingDocument.is_a("IfcDocumentInformation") - is_reference = rel.RelatingDocument.is_a("IfcDocumentReference") + relating_document = rel.RelatingDocument + + is_information = relating_document.is_a("IfcDocumentInformation") + is_reference = relating_document.is_a("IfcDocumentReference") if not (is_information or is_reference): continue - name = rel.RelatingDocument.Name + name = relating_document.Name location = None identification = None @@ -133,33 +135,35 @@ class ObjectDocumentData: if is_information: if tool.Ifc.get_schema() == "IFC2X3": - identification = rel.RelatingDocument.DocumentId + identification = relating_document.DocumentId else: - identification = rel.RelatingDocument.Identification + identification = relating_document.Identification - location = getattr(rel.RelatingDocument, "Location", None) + location = getattr(relating_document, "Location", None) else: - description = rel.RelatingDocument.Description + description = relating_document.Description if tool.Ifc.get_schema() == "IFC2X3": - if not name and rel.RelatingDocument.ReferenceToDocument: - name = rel.RelatingDocument.ReferenceToDocument[0].Name + reference_to_document = relating_document.ReferenceToDocument + if not name and reference_to_document: + name = reference_to_document[0].Name - identification = rel.RelatingDocument.ItemReference - if not identification and rel.RelatingDocument.ReferenceToDocument: - identification = rel.RelatingDocument.ReferenceToDocument[0].DocumentId - location = rel.RelatingDocument.Location + identification = relating_document.ItemReference + if not identification and reference_to_document: + identification = reference_to_document[0].DocumentId + location = relating_document.Location else: - if not name and rel.RelatingDocument.ReferencedDocument: - name = rel.RelatingDocument.ReferencedDocument.Name + referenced_document = relating_document.ReferencedDocument + if not name and referenced_document: + name = referenced_document.Name - identification = rel.RelatingDocument.Identification - if not identification and rel.RelatingDocument.ReferencedDocument: - identification = rel.RelatingDocument.ReferencedDocument.Identification + identification = relating_document.Identification + if not identification and referenced_document: + identification = referenced_document.Identification - location = rel.RelatingDocument.Location - if location is None and rel.RelatingDocument.ReferencedDocument: - location = rel.RelatingDocument.ReferencedDocument.Location + location = relating_document.Location + if location is None and referenced_document: + location = referenced_document.Location if location: if not "://" in location: @@ -169,7 +173,7 @@ class ObjectDocumentData: results.append( { - "id": rel.RelatingDocument.id(), + "id": relating_document.id(), "identification": identification, "name": name, "location": location, diff --git a/src/bonsai/bonsai/bim/module/document/operator.py b/src/bonsai/bonsai/bim/module/document/operator.py index ffc81537ee..ecc95f6ac8 100644 --- a/src/bonsai/bonsai/bim/module/document/operator.py +++ b/src/bonsai/bonsai/bim/module/document/operator.py @@ -35,10 +35,8 @@ def update_document_objects(document_id=None): if document_id is None: props = tool.Document.get_document_props() - if props.documents and props.active_document_index < len(props.documents): - document = props.documents[props.active_document_index] - if document.ifc_definition_id: - document_id = document.ifc_definition_id + if props.active_document and props.active_document.ifc_definition_id: + document_id = props.active_document.ifc_definition_id if document_id: DocumentData.load_document_objects_into_props(document_id) @@ -122,8 +120,8 @@ class AddInformation(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): props = tool.Document.get_document_props() parent = None - if props.documents and props.active_document_index < len(props.documents): - selected_document = props.documents[props.active_document_index] + if props.active_document: + selected_document = props.active_document if selected_document.ifc_definition_id == -1: parent = tool.Ifc.get().by_type("IfcProject")[0] if tool.Ifc.get().by_type("IfcProject") else None @@ -139,7 +137,7 @@ class AddInformation(bpy.types.Operator, tool.Ifc.Operator): expanded_docs = [] try: - expanded_docs = json.loads(context.scene.ExpandedDocuments.json_string) + expanded_docs = json.loads(props.json_string) except (AttributeError, json.JSONDecodeError): pass @@ -152,7 +150,7 @@ class AddInformation(bpy.types.Operator, tool.Ifc.Operator): if parent.id() not in expanded_docs: expanded_docs.append(parent.id()) - context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + props.json_string = json.dumps(expanded_docs) bpy.ops.bim.load_project_documents() @@ -165,11 +163,11 @@ class AddDocumentReference(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): props = tool.Document.get_document_props() - if not props.documents or props.active_document_index >= len(props.documents): + if not props.active_document: self.report({"ERROR"}, "No document selected") return {"CANCELLED"} - selected_document = props.documents[props.active_document_index] + selected_document = props.active_document if not selected_document.is_information: self.report({"ERROR"}, "Cannot add a reference to a reference element") @@ -181,13 +179,13 @@ class AddDocumentReference(bpy.types.Operator, tool.Ifc.Operator): core.add_reference(tool.Ifc, tool.Document) expanded_docs = [] try: - expanded_docs = json.loads(context.scene.ExpandedDocuments.json_string) + expanded_docs = json.loads(props.json_string) except (AttributeError, json.JSONDecodeError): pass if parent.id() not in expanded_docs: expanded_docs.append(parent.id()) - context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + props.json_string = json.dumps(expanded_docs) bpy.ops.bim.load_project_documents() @@ -292,9 +290,8 @@ class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): core.unassign_document(tool.Ifc, product=element, document=document) props = tool.Document.get_document_props() active_document_id = None - if props.documents and props.active_document_index < len(props.documents): - active_document = props.documents[props.active_document_index] - active_document_id = active_document.ifc_definition_id + if props.active_document: + active_document_id = props.active_document.ifc_definition_id if active_document_id and active_document_id != self.document: update_document_objects(active_document_id) @@ -420,8 +417,9 @@ class ToggleDocument(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): expanded_documents = [] + props = tool.Document.get_document_props() try: - expanded_documents = json.loads(context.scene.ExpandedDocuments.json_string) + expanded_documents = json.loads(props.json_string) except (AttributeError, json.JSONDecodeError): expanded_documents = [] @@ -439,8 +437,7 @@ class ToggleDocument(bpy.types.Operator, tool.Ifc.Operator): expanded_documents.append(virtual_root_id) elif self.option == "Collapse" and virtual_root_id in expanded_documents: expanded_documents.remove(virtual_root_id) - - context.scene.ExpandedDocuments.json_string = json.dumps(expanded_documents) + props.json_string = json.dumps(expanded_documents) bpy.ops.bim.load_project_documents() return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/document/prop.py b/src/bonsai/bonsai/bim/module/document/prop.py index 88878f8bfc..ce4a6a83cc 100644 --- a/src/bonsai/bonsai/bim/module/document/prop.py +++ b/src/bonsai/bonsai/bim/module/document/prop.py @@ -80,13 +80,6 @@ class Document(PropertyGroup): is_expanded: bool -class ExpandedDocuments(PropertyGroup): - json_string: StringProperty(name="JSON String", default="[]") - - if TYPE_CHECKING: - json_string: str - - class DocumentObject(PropertyGroup): name: StringProperty(name="Name") ifc_definition_id: IntProperty(name="IFC Definition ID") @@ -124,6 +117,7 @@ class BIMDocumentProperties(PropertyGroup): active_document_object_index: IntProperty(name="Active Document Object Index") assigned_documents: CollectionProperty(name="Assigned Documents", type=AssignedDocument) active_assigned_document_index: IntProperty(name="Active Assigned Document Index") + json_string: StringProperty(name="JSON String", default="[]") if TYPE_CHECKING: document_attributes: bpy.types.bpy_prop_collection_idprop[Attribute] @@ -137,6 +131,7 @@ class BIMDocumentProperties(PropertyGroup): active_document_object_index: int assigned_documents: bpy.types.bpy_prop_collection_idprop[AssignedDocument] active_assigned_document_index: int + json_string: str @property def active_document(self) -> Union[Document, None]: diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index d795cccdd4..bad9819205 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -68,14 +68,11 @@ class BIM_PT_documents(Panel): row.operator("bim.edit_document", text="", icon="CHECKMARK") row.operator("bim.disable_editing_document", text="", icon="CANCEL") else: - if not self.props.documents or not self.props.active_document_index < len(self.props.documents) or \ - (self.props.active_document_index < len(self.props.documents) and - self.props.documents[self.props.active_document_index].is_information): + if not self.props.active_document or self.props.active_document.is_information: row.operator("bim.add_information", text="", icon="ADD") - if self.props.documents and self.props.active_document_index < len(self.props.documents): - active_doc = self.props.documents[self.props.active_document_index] - if active_doc.is_information and active_doc.ifc_definition_id != -1: + if self.props.active_document: + if self.props.active_document.is_information and self.props.active_document.ifc_definition_id != -1: row.operator("bim.add_document_reference", text="", icon="FILE_HIDDEN") active_document = self.props.active_document @@ -84,7 +81,7 @@ class BIM_PT_documents(Panel): row.operator("bim.select_document_objects", text="", icon="RESTRICT_SELECT_OFF").document = ( ifc_definition_id ) - + row.operator("bim.assign_document", text="", icon="BRUSH_DATA").document = ifc_definition_id row.operator("bim.enable_editing_document", text="", icon="GREASEPENCIL").document = ifc_definition_id row.operator("bim.remove_document", text="", icon="X").document = ifc_definition_id @@ -97,12 +94,8 @@ class BIM_PT_documents(Panel): else: draw_attributes(self.props.document_attributes, self.layout, filter_attributes=["Name"]) - if ( - self.props.is_editing - and self.props.documents - and self.props.active_document_index < len(self.props.documents) - ): - document = self.props.documents[self.props.active_document_index] + if self.props.is_editing and self.props.active_document: + document = self.props.active_document box = self.layout.box() row = box.row(align=True) row.label(text="Assigned Objects", icon="OUTLINER_OB_EMPTY") @@ -181,21 +174,19 @@ class BIM_PT_object_documents(Panel): row = self.layout.row(align=True) row.alignment = "RIGHT" - if self.props.documents and self.props.active_document_index < len(self.props.documents): - document = self.props.documents[self.props.active_document_index] + if self.props.active_document: + document = self.props.active_document assigned_doc_ids = [] for doc in ObjectDocumentData.data["documents"]: assigned_doc_ids.append(doc["id"]) # Only show assign button if the document is information (not reference) and not already assigned - if (document.is_information and - document.ifc_definition_id not in assigned_doc_ids): + if document.is_information and document.ifc_definition_id not in assigned_doc_ids: doc_op = row.operator("bim.assign_document", text="", icon="BRUSH_DATA") doc_op.document = document.ifc_definition_id # Pass the current document's ID elif document.ifc_definition_id in assigned_doc_ids: row.label(text="", icon="CHECKMARK") - self.layout.template_list( "BIM_UL_documents", "", self.props, "documents", self.props, "active_document_index" ) @@ -249,8 +240,8 @@ class BIM_UL_document_objects(UIList): row.operator("bim.select_object", text="", icon="RESTRICT_SELECT_OFF").obj_name = item.name props = tool.Document.get_document_props() - if props.documents and props.active_document_index < len(props.documents): - document = props.documents[props.active_document_index] + if props.active_document: + document = props.active_document op = row.operator("bim.unassign_document", text="", icon="X") op.document = document.ifc_definition_id diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index 38ca080d83..56d92ea613 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -18,8 +18,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional -import bpy -import json if TYPE_CHECKING: import ifcopenshell @@ -34,15 +32,7 @@ def load_project_documents(document: tool.Document) -> None: def load_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: document_tool.clear_document_tree() - try: - expanded_docs = json.loads(bpy.context.scene.ExpandedDocuments.json_string) - except (AttributeError, json.JSONDecodeError): - expanded_docs = [] - - if document.id() not in expanded_docs: - expanded_docs.append(document.id()) - bpy.context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) - + document_tool.expand_document(document) document_tool.import_project_documents() document_tool.disable_editing_document() @@ -53,60 +43,40 @@ def disable_document_editing_ui(document: tool.Document) -> None: def enable_editing_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: - props = document_tool.get_document_props() - props.active_document_id = document.id() - props.is_document_editing = True + document_tool.set_active_document(document) + document_tool.enable_document_editing() document_tool.import_document_attributes(document) def disable_editing_document(document: tool.Document) -> None: - props = document.get_document_props() - props.active_document_id = 0 - props.is_document_editing = False - props.document_attributes.clear() + document.clear_active_document() + document.disable_document_editing() + document.clear_document_attributes() def add_information(ifc: tool.Ifc, document_tool: tool.Document, parent=None) -> ifcopenshell.entity_instance: document_tool.clear_document_tree() - if parent is None and ifc.get().by_type("IfcProject"): - parent = ifc.get().by_type("IfcProject")[0] + if parent is None: + parent = document_tool.get_default_parent_for_information(ifc) information = ifc.run("document.add_information", parent=parent) ifc.run("document.add_reference", information=information) - if parent and parent.is_a("IfcDocumentInformation"): - try: - expanded_docs = json.loads(bpy.context.scene.ExpandedDocuments.json_string) - except (AttributeError, json.JSONDecodeError): - expanded_docs = [] - if parent.id() not in expanded_docs: - expanded_docs.append(parent.id()) - bpy.context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + if document_tool.is_document_information(parent): + document_tool.expand_document(parent) document_tool.import_project_documents() + return information def add_reference(ifc: tool.Ifc, document: tool.Document) -> None: - props = document.get_document_props() - parent = None - - if props.documents and props.active_document_index < len(props.documents): - selected_document = props.documents[props.active_document_index] - if selected_document.is_information: - parent = ifc.get().by_id(selected_document.ifc_definition_id) + parent = document.get_selected_document_information(ifc) if parent: reference = ifc.run("document.add_reference", information=parent) reference.Location = "" - try: - expanded_docs = json.loads(bpy.context.scene.ExpandedDocuments.json_string) - except (AttributeError, json.JSONDecodeError): - expanded_docs = [] - - if parent.id() not in expanded_docs: - expanded_docs.append(parent.id()) - bpy.context.scene.ExpandedDocuments.json_string = json.dumps(expanded_docs) + document.expand_document(parent) document.import_project_documents() diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index d3eeda694b..76ceaf52c3 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -23,6 +23,7 @@ import ifcopenshell.util.system import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool +import json from typing import Any, Union, TYPE_CHECKING if TYPE_CHECKING: @@ -86,7 +87,7 @@ class Document(bonsai.core.tool.Document): props.documents.clear() file = tool.Ifc.get() try: - expanded_documents = json.loads(bpy.context.scene.ExpandedDocuments.json_string) + expanded_documents = json.loads(props.json_string) except (AttributeError, json.JSONDecodeError): expanded_documents = [] @@ -116,7 +117,7 @@ class Document(bonsai.core.tool.Document): document_children[parent_id].append(ref) else: for ref in file.by_type("IfcDocumentReference"): - if hasattr(ref, "ReferencedDocument") and ref.ReferencedDocument: + if ref.ReferencedDocument: parent = ref.ReferencedDocument parent_id = parent.id() if parent_id not in document_children: @@ -198,21 +199,18 @@ class Document(bonsai.core.tool.Document): info_children = [d for d in children if d.is_a("IfcDocumentInformation")] ref_children = [d for d in children if not d.is_a("IfcDocumentInformation")] - + info_children.sort( - key=lambda doc: ( - (cls.get_document_information_id(doc) or "").lower(), - (doc.Name or "").lower() - ) + key=lambda doc: ((cls.get_document_information_id(doc) or "").lower(), (doc.Name or "").lower()) ) - + ref_children.sort( key=lambda doc: ( (cls.get_external_reference_id(doc) or "").lower(), - (doc.Description or doc.Name or "").lower() + (doc.Description or doc.Name or "").lower(), ) ) - + for child in info_children + ref_children: cls._process_document(child, props, document_children, expanded_documents, depth + 1) @@ -253,3 +251,48 @@ class Document(bonsai.core.tool.Document): if document.file.schema == "IFC2X3": return document.DocumentReferences or () return document.HasDocumentReferences + + @classmethod + def enable_document_editing(cls) -> None: + props = cls.get_document_props() + props.is_editing = True + + @classmethod + def disable_document_editing(cls) -> None: + props = cls.get_document_props() + props.is_editing = False + + @classmethod + def clear_active_document(cls) -> None: + props = cls.get_document_props() + props.active_document_id = 0 + + @classmethod + def clear_document_attributes(cls) -> None: + props = cls.get_document_props() + props.document_attributes.clear() + + @classmethod + def expand_document(cls, document: ifcopenshell.entity_instance) -> None: + props = cls.get_document_props() + try: + expanded_docs = json.loads(props.json_string) + except (AttributeError, json.JSONDecodeError): + expanded_docs = [] + + if document.id() not in expanded_docs: + expanded_docs.append(document.id()) + props.json_string = json.dumps(expanded_docs) + + @classmethod + def get_default_parent_for_information(cls, ifc) -> Union[ifcopenshell.entity_instance, None]: + projects = ifc.get().by_type("IfcProject") + return projects[0] if projects else None + + @classmethod + def get_selected_document_information(cls, ifc) -> Union[ifcopenshell.entity_instance, None]: + props = cls.get_document_props() + + if props.active_document and props.active_document.is_information: + return ifc.get().by_id(props.active_document.ifc_definition_id) + return None From b6cfd165c268eb67f1cf22691d6f421c1b2cde7e Mon Sep 17 00:00:00 2001 From: falken10 Date: Mon, 7 Jul 2025 23:58:02 +0200 Subject: [PATCH 467/657] updates based on developers feedback --- .../bonsai/bim/module/document/__init__.py | 2 - src/bonsai/bonsai/bim/module/document/data.py | 29 ++- .../bonsai/bim/module/document/operator.py | 209 ++++-------------- src/bonsai/bonsai/bim/module/document/prop.py | 28 ++- src/bonsai/bonsai/bim/module/document/ui.py | 84 ++++--- src/bonsai/bonsai/core/document.py | 18 +- src/bonsai/bonsai/tool/document.py | 103 ++++++--- 7 files changed, 218 insertions(+), 255 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/__init__.py b/src/bonsai/bonsai/bim/module/document/__init__.py index 323520420e..9730a50a11 100644 --- a/src/bonsai/bonsai/bim/module/document/__init__.py +++ b/src/bonsai/bonsai/bim/module/document/__init__.py @@ -28,14 +28,12 @@ classes = ( operator.DisableEditingDocument, operator.EditDocument, operator.EnableEditingDocument, - operator.LoadDocument, operator.LoadObjectDocuments, operator.LoadProjectDocuments, operator.RemoveDocument, operator.SelectDocumentObjects, operator.ToggleDocument, operator.UnassignDocument, - operator.UpdateAssignedDocuments, operator.OpenIFCDocument, prop.Document, prop.DocumentObject, diff --git a/src/bonsai/bonsai/bim/module/document/data.py b/src/bonsai/bonsai/bim/module/document/data.py index 15a89f8870..7f788b1388 100644 --- a/src/bonsai/bonsai/bim/module/document/data.py +++ b/src/bonsai/bonsai/bim/module/document/data.py @@ -21,7 +21,7 @@ import bpy import ifcopenshell import ifcopenshell.util.schema import bonsai.tool as tool - +from natsort import natsorted def refresh(): DocumentData.is_loaded = False @@ -87,19 +87,21 @@ class DocumentData: @classmethod def load_document_objects_into_props(cls, document_id): + if not cls.is_loaded: + cls.load() + props = tool.Document.get_document_props() props.document_objects.clear() - if "document_objects" not in cls.data or document_id not in cls.data["document_objects"]: + if document_id not in cls.data["document_objects"]: return - sorted_objects = sorted(cls.data["document_objects"][document_id], key=lambda x: x["name"].lower()) + sorted_objects = natsorted(cls.data["document_objects"][document_id], key=lambda x: x["name"].lower()) for obj_data in sorted_objects: item = props.document_objects.add() item.name = obj_data["name"] - class ObjectDocumentData: data = {} is_loaded = False @@ -111,6 +113,19 @@ class ObjectDocumentData: } cls.is_loaded = True + @staticmethod + def convert_to_file_uri(location: str) -> str: + if not location: + return "" + + uri = location + if not uri.startswith("file://"): + if not os.path.isabs(uri): + uri = os.path.abspath(os.path.join(os.path.dirname(tool.Ifc.get_path()), uri)) + uri = "file://" + uri + return uri + + @classmethod def documents(cls): results = [] @@ -165,11 +180,7 @@ class ObjectDocumentData: if location is None and referenced_document: location = referenced_document.Location - if location: - if not "://" in location: - if not os.path.isabs(location): - location = os.path.abspath(os.path.join(os.path.dirname(tool.Ifc.get_path()), location)) - location = "file://" + location + location = cls.convert_to_file_uri(location) if location else None results.append( { diff --git a/src/bonsai/bonsai/bim/module/document/operator.py b/src/bonsai/bonsai/bim/module/document/operator.py index ecc95f6ac8..557e2c72af 100644 --- a/src/bonsai/bonsai/bim/module/document/operator.py +++ b/src/bonsai/bonsai/bim/module/document/operator.py @@ -18,29 +18,10 @@ import bpy import json -import ifcopenshell.api -import ifcopenshell.util.attribute -import ifcopenshell.util.element import bonsai.bim.handler import bonsai.tool as tool import bonsai.core.document as core -import subprocess -import os -from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData - - -def update_document_objects(document_id=None): - DocumentData.is_loaded = False - DocumentData.load() - - if document_id is None: - props = tool.Document.get_document_props() - if props.active_document and props.active_document.ifc_definition_id: - document_id = props.active_document.ifc_definition_id - - if document_id: - DocumentData.load_document_objects_into_props(document_id) - +from .data import DocumentData, ObjectDocumentData class LoadProjectDocuments(bpy.types.Operator): bl_idname = "bim.load_project_documents" @@ -49,23 +30,8 @@ class LoadProjectDocuments(bpy.types.Operator): def execute(self, context): core.load_project_documents(tool.Document) - update_document_objects() return {"FINISHED"} - -class LoadDocument(bpy.types.Operator): - bl_idname = "bim.load_document" - bl_label = "Load Document" - bl_options = {"REGISTER", "UNDO"} - document: bpy.props.IntProperty() - - def execute(self, context): - core.load_document(tool.Document, document=tool.Ifc.get().by_id(self.document)) - bonsai.bim.handler.refresh_ui_data() # Is this needed? - update_document_objects() - return {"FINISHED"} - - class DisableDocumentEditingUI(bpy.types.Operator): bl_idname = "bim.disable_document_editing_ui" bl_label = "Disable Document Editing UI" @@ -82,8 +48,7 @@ class DisableObjectDocumentEditingUI(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): - props = tool.Document.get_document_props() - props.is_object_editing = False + core.disable_object_document_editing_ui(tool.Document) return {"FINISHED"} @@ -94,8 +59,6 @@ class EnableEditingDocument(bpy.types.Operator): document: bpy.props.IntProperty() def execute(self, context): - props = tool.Document.get_document_props() - props.is_document_editing = True core.enable_editing_document(tool.Document, document=tool.Ifc.get().by_id(self.document)) return {"FINISHED"} @@ -106,8 +69,6 @@ class DisableEditingDocument(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): - props = tool.Document.get_document_props() - props.is_document_editing = False core.disable_editing_document(tool.Document) return {"FINISHED"} @@ -123,15 +84,15 @@ class AddInformation(bpy.types.Operator, tool.Ifc.Operator): if props.active_document: selected_document = props.active_document - if selected_document.ifc_definition_id == -1: - parent = tool.Ifc.get().by_type("IfcProject")[0] if tool.Ifc.get().by_type("IfcProject") else None - elif selected_document.is_information: + if selected_document.document_type == "PROJECT": + parent = tool.Ifc.get().by_type("IfcProject")[0] + elif selected_document.document_type == "INFORMATION": parent = tool.Ifc.get().by_id(selected_document.ifc_definition_id) - else: + elif selected_document.document_type == "REFERENCE": self.report({"ERROR"}, "Cannot add an information element as a child of a reference element") return {"CANCELLED"} else: - parent = tool.Ifc.get().by_type("IfcProject")[0] if tool.Ifc.get().by_type("IfcProject") else None + parent = tool.Ifc.get().by_type("IfcProject")[0] core.add_information(tool.Ifc, tool.Document, parent) @@ -141,20 +102,13 @@ class AddInformation(bpy.types.Operator, tool.Ifc.Operator): except (AttributeError, json.JSONDecodeError): pass - project = tool.Ifc.get().by_type("IfcProject")[0] - virtual_root_id = -project.id() - if virtual_root_id in expanded_docs: - expanded_docs.remove(virtual_root_id) - if parent and parent.is_a("IfcDocumentInformation"): if parent.id() not in expanded_docs: expanded_docs.append(parent.id()) props.json_string = json.dumps(expanded_docs) - bpy.ops.bim.load_project_documents() - class AddDocumentReference(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.add_document_reference" bl_label = "Add Document Reference" @@ -169,8 +123,8 @@ class AddDocumentReference(bpy.types.Operator, tool.Ifc.Operator): selected_document = props.active_document - if not selected_document.is_information: - self.report({"ERROR"}, "Cannot add a reference to a reference element") + if selected_document.document_type != "INFORMATION": + self.report({"ERROR"}, "Cannot add a reference to a document that is not an information element") return {"CANCELLED"} parent = tool.Ifc.get().by_id(selected_document.ifc_definition_id) @@ -201,12 +155,7 @@ class EditDocument(bpy.types.Operator, tool.Ifc.Operator): core.edit_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(props.active_document_id)) props.active_document_id = 0 props.is_document_editing = False - DocumentData.is_loaded = False - DocumentData.load() - ObjectDocumentData.is_loaded = False - ObjectDocumentData.load() - bpy.ops.bim.update_assigned_documents() - bonsai.bim.handler.refresh_ui_data() + tool.Document.update_assigned_documents() class RemoveDocument(bpy.types.Operator, tool.Ifc.Operator): @@ -218,40 +167,6 @@ class RemoveDocument(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): core.remove_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(self.document)) - -class UpdateAssignedDocuments(bpy.types.Operator): - bl_idname = "bim.update_assigned_documents" - bl_label = "Update Assigned Documents" - bl_description = "Update the list of documents assigned to the active object" - bl_options = {"REGISTER"} - - def execute(self, context): - ObjectDocumentData.is_loaded = False - ObjectDocumentData.load() - - props = tool.Document.get_document_props() - props.assigned_documents.clear() - - if not ObjectDocumentData.data.get("documents"): - return {"FINISHED"} - - sorted_docs = sorted( - ObjectDocumentData.data["documents"], - key=lambda doc: ((doc.get("identification") or "").lower(), (doc.get("name") or "").lower()), - ) - - for document in sorted_docs: - new = props.assigned_documents.add() - new.name = document["name"] or "Unnamed" - new.identification = document["identification"] or "*" - new.is_information = document.get("is_information", False) - new.ifc_definition_id = document["id"] - new.location = document.get("location") or "" - new.description = document.get("description") or "" - - return {"FINISHED"} - - class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.assign_document" bl_label = "Assign Document" @@ -268,10 +183,12 @@ class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): if element: core.assign_document(tool.Ifc, product=element, document=document) - update_document_objects(self.document) + + tool.Document.update_document_objects(self.document) ObjectDocumentData.is_loaded = False ObjectDocumentData.load() - bpy.ops.bim.update_assigned_documents() + tool.Document.update_assigned_documents() + return {"FINISHED"} class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): @@ -285,21 +202,26 @@ class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): document = tool.Ifc.get().by_id(self.document) objs = [bpy.data.objects.get(self.obj)] if self.obj else tool.Blender.get_selected_objects() for obj in objs: - element = tool.Ifc.get_entity(obj) - if element: - core.unassign_document(tool.Ifc, product=element, document=document) + if obj: + element = tool.Ifc.get_entity(obj) + if element: + core.unassign_document(tool.Ifc, product=element, document=document) + props = tool.Document.get_document_props() active_document_id = None if props.active_document: active_document_id = props.active_document.ifc_definition_id if active_document_id and active_document_id != self.document: - update_document_objects(active_document_id) + tool.Document.update_document_objects(active_document_id) else: - update_document_objects(self.document) + tool.Document.update_document_objects() + ObjectDocumentData.is_loaded = False ObjectDocumentData.load() - bpy.ops.bim.update_assigned_documents() + + tool.Document.update_assigned_documents() + return {"FINISHED"} class SelectDocumentObjects(bpy.types.Operator): @@ -339,32 +261,10 @@ class LoadObjectDocuments(bpy.types.Operator): props = tool.Document.get_document_props() props.is_object_editing = True - bonsai.bim.handler.refresh_ui_data() - - self.update_assigned_documents(props) + tool.Document.update_assigned_documents() return {"FINISHED"} - def update_assigned_documents(self, props): - props.assigned_documents.clear() - - if not ObjectDocumentData.data.get("documents"): - return - - sorted_docs = sorted( - ObjectDocumentData.data["documents"], - key=lambda doc: ((doc.get("identification") or "").lower(), (doc.get("name") or "").lower()), - ) - - for document in sorted_docs: - new = props.assigned_documents.add() - new.name = document["name"] or "Unnamed" - new.identification = document["identification"] or "*" - new.is_information = document.get("is_information", False) - new.ifc_definition_id = document["id"] - new.location = document["location"] or "" - new.description = document["description"] or "" - class OpenIFCDocument(bpy.types.Operator): bl_idname = "bim.open_ifc_document" @@ -375,47 +275,37 @@ class OpenIFCDocument(bpy.types.Operator): uri: bpy.props.StringProperty(name="URI") def execute(self, context): - - if not self.uri: - self.report({"ERROR"}, "No URI provided") + import subprocess + import os + if not self.uri or not self.uri.lower().startswith("file://"): + self.report({"ERROR"}, "Only local file:// URIs are supported") return {"CANCELLED"} - file_path = self.uri - if file_path.startswith("file://"): - file_path = file_path[7:] - elif file_path.startswith("file:"): - file_path = file_path[5:] - - if not os.path.isabs(file_path): - file_path = os.path.abspath(file_path) - - if not os.path.exists(file_path): - self.report({"ERROR"}, f"IFC file not found: {file_path}") + filepath = self.uri[7:] # Remove file:// prefix + + if not os.path.exists(filepath): + self.report({"ERROR"}, f"File not found: {filepath}") return {"CANCELLED"} try: - subprocess.Popen( - [ - "blender", - "--python-expr", - f"import bpy; bpy.ops.bim.load_project(filepath='{file_path}', should_start_fresh_session=True)", - ] - ) - self.report({"INFO"}, f"Opening IFC file: {file_path} in a new Blender instance.") + blender_path = bpy.app.binary_path + args = [blender_path, "--python-expr", "import bpy; bpy.ops.bim.load_project(filepath='{}')".format(filepath)] + subprocess.Popen(args) + self.report({"INFO"}, f"Opening {filepath} in a new Blender instance") except Exception as e: self.report({"ERROR"}, f"Failed to open IFC file: {str(e)}") return {"FINISHED"} -class ToggleDocument(bpy.types.Operator, tool.Ifc.Operator): +class ToggleDocument(bpy.types.Operator): bl_idname = "bim.toggle_document" bl_label = "Toggle Document" bl_options = {"REGISTER", "UNDO"} document: bpy.props.IntProperty() option: bpy.props.StringProperty() - def _execute(self, context): + def execute(self, context): expanded_documents = [] props = tool.Document.get_document_props() try: @@ -425,19 +315,14 @@ class ToggleDocument(bpy.types.Operator, tool.Ifc.Operator): document_id = self.document - if self.option == "Expand" and document_id not in expanded_documents: - expanded_documents.append(document_id) - elif self.option == "Collapse" and document_id in expanded_documents: - expanded_documents.remove(document_id) - elif document_id == -1: - project = tool.Ifc.get().by_type("IfcProject")[0] - virtual_root_id = -project.id() + document = tool.Ifc.get().by_id(document_id) + if document: + if self.option == "Expand" and document_id not in expanded_documents: + expanded_documents.append(document_id) + elif self.option == "Collapse" and document_id in expanded_documents: + expanded_documents.remove(document_id) - if self.option == "Expand" and virtual_root_id not in expanded_documents: - expanded_documents.append(virtual_root_id) - elif self.option == "Collapse" and virtual_root_id in expanded_documents: - expanded_documents.remove(virtual_root_id) props.json_string = json.dumps(expanded_documents) - bpy.ops.bim.load_project_documents() return {"FINISHED"} + diff --git a/src/bonsai/bonsai/bim/module/document/prop.py b/src/bonsai/bonsai/bim/module/document/prop.py index ce4a6a83cc..92d60771f7 100644 --- a/src/bonsai/bonsai/bim/module/document/prop.py +++ b/src/bonsai/bonsai/bim/module/document/prop.py @@ -51,8 +51,7 @@ def update_document_identification(self: "Document", context: bpy.types.Context) def update_active_document(self, context): - if self.documents and self.active_document_index < len(self.documents): - document = self.documents[self.active_document_index] + if (document := self.active_document): if document.ifc_definition_id: DocumentData.load_document_objects_into_props(document.ifc_definition_id) @@ -61,23 +60,31 @@ class Document(PropertyGroup): name: StringProperty(name="Name") identification: StringProperty(name="Identification") description: StringProperty(name="Description") - is_information: BoolProperty(name="Is Information") ifc_definition_id: IntProperty(name="IFC Definition ID") location: StringProperty(name="Location", default="") tree_depth: IntProperty(name="Tree Depth", default=0) has_children: BoolProperty(name="Has Children", default=False) is_expanded: BoolProperty(name="Is Expanded", default=False) + document_type: EnumProperty( + name="Document Type", + items=[ + ("PROJECT", "Project", "Virtual project root node"), + ("INFORMATION", "Information", "IfcDocumentInformation"), + ("REFERENCE", "Reference", "IfcDocumentReference"), + ], + default="INFORMATION" + ) if TYPE_CHECKING: name: str identification: str description: str - is_information: bool ifc_definition_id: int location: str tree_depth: int has_children: bool is_expanded: bool + document_type: str class DocumentObject(PropertyGroup): @@ -93,17 +100,24 @@ class AssignedDocument(PropertyGroup): name: StringProperty(name="Name") identification: StringProperty(name="Identification") description: StringProperty(name="Description", default="") - is_information: BoolProperty(name="Is Information") ifc_definition_id: IntProperty(name="IFC Definition ID") location: StringProperty(name="Location", default="") + document_type: EnumProperty( + name="Document Type", + items=[ + ("PROJECT", "Project", "Virtual project root node"), + ("INFORMATION", "Information", "IfcDocumentInformation"), + ("REFERENCE", "Reference", "IfcDocumentReference"), + ], + default="INFORMATION" + ) if TYPE_CHECKING: name: str identification: str - is_information: bool ifc_definition_id: int location: str - + document_type: str class BIMDocumentProperties(PropertyGroup): document_attributes: CollectionProperty(name="Document Attributes", type=Attribute) diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index bad9819205..1563555b9a 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -20,8 +20,7 @@ import bpy import bonsai.tool as tool from bpy.types import Panel, UIList from bonsai.bim.helper import draw_attributes -from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData - +from .data import DocumentData, ObjectDocumentData class BIM_PT_documents(Panel): bl_label = "Documents" @@ -46,8 +45,8 @@ class BIM_PT_documents(Panel): split = row.split(factor=0.55) left_row = split.row(align=True) - left_row.label(text="{} Informations".format(DocumentData.data["total_document_informations"]), icon="FILE") - left_row.label(text="{} References".format(DocumentData.data["total_document_references"]), icon="FILE_HIDDEN") + total_documents = DocumentData.data["total_document_informations"] + DocumentData.data["total_document_references"] + left_row.label(text="{} Documents".format(total_documents), icon="FILE") right_row = split.row(align=True) right_row.label( @@ -68,31 +67,31 @@ class BIM_PT_documents(Panel): row.operator("bim.edit_document", text="", icon="CHECKMARK") row.operator("bim.disable_editing_document", text="", icon="CANCEL") else: - if not self.props.active_document or self.props.active_document.is_information: + if not self.props.active_document or self.props.active_document.document_type in ["INFORMATION", "PROJECT"]: row.operator("bim.add_information", text="", icon="ADD") - if self.props.active_document: - if self.props.active_document.is_information and self.props.active_document.ifc_definition_id != -1: - row.operator("bim.add_document_reference", text="", icon="FILE_HIDDEN") + if self.props.active_document and ( + self.props.active_document.document_type == "INFORMATION" and + self.props.active_document.document_type != "PROJECT" + ): + row.operator("bim.add_document_reference", text="", icon="FILE_HIDDEN") active_document = self.props.active_document if active_document: ifc_definition_id = active_document.ifc_definition_id - row.operator("bim.select_document_objects", text="", icon="RESTRICT_SELECT_OFF").document = ( - ifc_definition_id - ) - - row.operator("bim.assign_document", text="", icon="BRUSH_DATA").document = ifc_definition_id - row.operator("bim.enable_editing_document", text="", icon="GREASEPENCIL").document = ifc_definition_id - row.operator("bim.remove_document", text="", icon="X").document = ifc_definition_id + + if active_document.document_type != "PROJECT": + row.operator("bim.select_document_objects", text="", icon="RESTRICT_SELECT_OFF").document = ( + ifc_definition_id + ) + row.operator("bim.assign_document", text="", icon="BRUSH_DATA").document = ifc_definition_id + row.operator("bim.enable_editing_document", text="", icon="GREASEPENCIL").document = ifc_definition_id + row.operator("bim.remove_document", text="", icon="X").document = ifc_definition_id self.layout.template_list("BIM_UL_documents", "", self.props, "documents", self.props, "active_document_index") if self.props.is_document_editing: active_document = self.props.active_document - if active_document.is_information: - draw_attributes(self.props.document_attributes, self.layout) - else: - draw_attributes(self.props.document_attributes, self.layout, filter_attributes=["Name"]) + draw_attributes(self.props.document_attributes, self.layout) if self.props.is_editing and self.props.active_document: document = self.props.active_document @@ -108,7 +107,6 @@ class BIM_PT_documents(Panel): "active_document_object_index", ) - class BIM_PT_object_documents(Panel): bl_label = "Documents" bl_idname = "BIM_PT_object_documents" @@ -119,6 +117,9 @@ class BIM_PT_object_documents(Panel): bl_order = 1 bl_parent_id = "BIM_PT_tab_misc" + # Class variable to track the last selected object + _last_object_id = None + @classmethod def poll(cls, context): if not (obj := context.active_object): @@ -130,10 +131,14 @@ class BIM_PT_object_documents(Panel): return True def draw(self, context): - if not ObjectDocumentData.is_loaded: + obj = context.active_object + current_ifc_id = tool.Blender.get_ifc_definition_id(obj) + + if BIM_PT_object_documents._last_object_id != current_ifc_id: + BIM_PT_object_documents._last_object_id = current_ifc_id + ObjectDocumentData.is_loaded = False ObjectDocumentData.load() - obj = context.active_object self.oprops = tool.Blender.get_object_bim_props(obj) self.props = tool.Document.get_document_props() self.file = tool.Ifc.get() @@ -181,10 +186,11 @@ class BIM_PT_object_documents(Panel): for doc in ObjectDocumentData.data["documents"]: assigned_doc_ids.append(doc["id"]) - # Only show assign button if the document is information (not reference) and not already assigned - if document.is_information and document.ifc_definition_id not in assigned_doc_ids: + if (document.document_type == "INFORMATION" and + document.document_type != "PROJECT" and + document.ifc_definition_id not in assigned_doc_ids): doc_op = row.operator("bim.assign_document", text="", icon="BRUSH_DATA") - doc_op.document = document.ifc_definition_id # Pass the current document's ID + doc_op.document = document.ifc_definition_id elif document.ifc_definition_id in assigned_doc_ids: row.label(text="", icon="CHECKMARK") self.layout.template_list( @@ -198,24 +204,28 @@ class BIM_UL_documents(UIList): row = layout.row(align=True) indent_depth = 0 - if item.ifc_definition_id != -1: + if item.document_type != "PROJECT": if item.tree_depth > 1: indent_depth = item.tree_depth - 1 + for i in range(indent_depth): row.label(text="", icon="BLANK1") - if item.ifc_definition_id == -1: + + if item.document_type == "PROJECT": row.label(text="", icon="OUTLINER_COLLECTION") row.label(text=item.name) return - if item.is_information and item.has_children: + + if item.document_type == "INFORMATION" and item.has_children: op = row.operator( "bim.toggle_document", icon="TRIA_DOWN" if item.is_expanded else "TRIA_RIGHT", text="", emboss=False ) op.document = item.ifc_definition_id op.option = "Collapse" if item.is_expanded else "Expand" - elif item.is_information: + elif item.document_type == "INFORMATION": row.label(text="", icon="BLANK1") - if item.is_information: + + if item.document_type == "INFORMATION": row.label(text="", icon="FILE") text = " - ".join([x for x in [item.name, item.location] if x]) else: @@ -227,9 +237,10 @@ class BIM_UL_documents(UIList): split2.label(text=text) if item.location: + uri = ObjectDocumentData.convert_to_file_uri(item.location) if item.location.lower().endswith(".ifc"): - row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = item.location - row.operator("bim.open_uri", icon="URL", text="").uri = item.location + row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = uri + row.operator("bim.open_uri", icon="URL", text="").uri = uri class BIM_UL_document_objects(UIList): @@ -253,7 +264,7 @@ class BIM_UL_assigned_documents(UIList): if item: row = layout.row(align=True) - if item.is_information: + if item.document_type == "INFORMATION": row.label(text="", icon="FILE") else: row.label(text="", icon="FILE_HIDDEN") @@ -262,15 +273,16 @@ class BIM_UL_assigned_documents(UIList): split1.label(text=item.identification or "") split2 = split1.split(factor=1.0) - if item.is_information: + if item.document_type == "INFORMATION": split2.label(text=item.name or "Unnamed") else: split2.label(text=item.description or "No Description") if item.location: + uri = ObjectDocumentData.convert_to_file_uri(item.location) if item.location.lower().endswith(".ifc"): - row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = item.location - row.operator("bim.open_uri", icon="URL", text="").uri = item.location + row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = uri + row.operator("bim.open_uri", icon="URL", text="").uri = uri op = row.operator("bim.unassign_document", text="", icon="X") op.document = item.ifc_definition_id diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index 56d92ea613..e55c077022 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -29,31 +29,27 @@ def load_project_documents(document: tool.Document) -> None: document.import_project_documents() document.enable_editing_ui() - -def load_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: - document_tool.clear_document_tree() - document_tool.expand_document(document) - document_tool.import_project_documents() - document_tool.disable_editing_document() - - def disable_document_editing_ui(document: tool.Document) -> None: document.disable_editing_ui() document.disable_editing_document() +def disable_object_document_editing_ui(document: tool.Document) -> None: + props = document.get_document_props() + props.is_object_editing = False def enable_editing_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: + props = document_tool.get_document_props() + props.is_document_editing = True document_tool.set_active_document(document) - document_tool.enable_document_editing() document_tool.import_document_attributes(document) def disable_editing_document(document: tool.Document) -> None: + props = document.get_document_props() + props.is_document_editing = False document.clear_active_document() - document.disable_document_editing() document.clear_document_attributes() - def add_information(ifc: tool.Ifc, document_tool: tool.Document, parent=None) -> ifcopenshell.entity_instance: document_tool.clear_document_tree() diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index 76ceaf52c3..cd51f35e8d 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -18,12 +18,11 @@ from __future__ import annotations import bpy -import json import ifcopenshell.util.system -import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool import json +from natsort import natsorted from typing import Any, Union, TYPE_CHECKING if TYPE_CHECKING: @@ -70,12 +69,15 @@ class Document(bonsai.core.tool.Document): data[attr_name] = "" return True if attr_name != "Name": - return None + return None # Proceed normally current_value = data[attr_name] + # If Name is already filled, display it so user would be able to correct invalid IFC. if current_value is not None: return None + # Skip import since IFC restricts Name to be filled + # for IfcDocumentReference with ReferencedDocument. return False import_callback = callback if document.is_a("IfcDocumentReference") else None @@ -137,8 +139,8 @@ class Document(bonsai.core.tool.Document): root_documents.append(rel.RelatingDocument) root = props.documents.add() - root.ifc_definition_id = -1 - root.is_information = True + root.ifc_definition_id = -project.id() + root.document_type = "PROJECT" root.name = f"Project Documents ({project.Name or 'Unnamed Project'})" root.identification = "" root.location = "" @@ -150,8 +152,9 @@ class Document(bonsai.core.tool.Document): root.is_expanded = root_id not in expanded_documents if root.is_expanded: - root_documents.sort( - key=lambda doc: ((cls.get_document_information_id(doc) or "").lower(), (doc.Name or "").lower()) + root_documents = natsorted( + root_documents, + key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") ) for doc in root_documents: @@ -161,11 +164,11 @@ class Document(bonsai.core.tool.Document): def _process_document(cls, document, props, document_children, expanded_documents, depth): new = props.documents.add() new.ifc_definition_id = document.id() - new.is_information = document.is_a("IfcDocumentInformation") + new.document_type = "INFORMATION" if document.is_a("IfcDocumentInformation") else "REFERENCE" new.tree_depth = depth file = document.file - if new.is_information: + if new.document_type == "INFORMATION": new.name = document.Name or "Unnamed" new.identification = cls.get_document_information_id(document) or "" new.location = document.Location or "" @@ -175,7 +178,7 @@ class Document(bonsai.core.tool.Document): new.description = document.Description or "" new.location = document.Location or "" - if not new.is_information: + if new.document_type == "REFERENCE": if file.schema == "IFC2X3": if document.ReferenceToDocument: doc_info = document.ReferenceToDocument[0] @@ -183,7 +186,7 @@ class Document(bonsai.core.tool.Document): new.name = doc_info.Name or "" new.location = new.location or "" else: - if hasattr(document, "ReferencedDocument") and document.ReferencedDocument: + if document.ReferencedDocument: doc_info = document.ReferencedDocument if not new.name: new.name = doc_info.Name or "" @@ -200,20 +203,22 @@ class Document(bonsai.core.tool.Document): info_children = [d for d in children if d.is_a("IfcDocumentInformation")] ref_children = [d for d in children if not d.is_a("IfcDocumentInformation")] - info_children.sort( - key=lambda doc: ((cls.get_document_information_id(doc) or "").lower(), (doc.Name or "").lower()) + info_children = natsorted( + info_children, + key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") ) - ref_children.sort( + ref_children = natsorted( + ref_children, key=lambda doc: ( - (cls.get_external_reference_id(doc) or "").lower(), - (doc.Description or doc.Name or "").lower(), + cls.get_external_reference_id(doc) or "", + doc.Description or doc.Name or "" ) ) for child in info_children + ref_children: cls._process_document(child, props, document_children, expanded_documents, depth + 1) - + @classmethod def is_document_information(cls, document: ifcopenshell.entity_instance) -> bool: return document.is_a("IfcDocumentInformation") @@ -252,16 +257,6 @@ class Document(bonsai.core.tool.Document): return document.DocumentReferences or () return document.HasDocumentReferences - @classmethod - def enable_document_editing(cls) -> None: - props = cls.get_document_props() - props.is_editing = True - - @classmethod - def disable_document_editing(cls) -> None: - props = cls.get_document_props() - props.is_editing = False - @classmethod def clear_active_document(cls) -> None: props = cls.get_document_props() @@ -293,6 +288,58 @@ class Document(bonsai.core.tool.Document): def get_selected_document_information(cls, ifc) -> Union[ifcopenshell.entity_instance, None]: props = cls.get_document_props() - if props.active_document and props.active_document.is_information: + if props.active_document and props.active_document.document_type == "INFORMATION": return ifc.get().by_id(props.active_document.ifc_definition_id) return None + + @classmethod + def refresh_document_data(cls) -> None: + import bonsai.bim.module.document.data as document_data + document_data.DocumentData.is_loaded = False + document_data.DocumentData.load() + + @classmethod + def load_document_objects_into_props(cls, document_id: int) -> None: + import bonsai.bim.module.document.data as document_data + document_data.DocumentData.load_document_objects_into_props(document_id) + + @classmethod + def update_document_objects(cls, document_id: Union[int, None] = None) -> None: + cls.refresh_document_data() + + if document_id is None: + props = cls.get_document_props() + if props.active_document and props.active_document.ifc_definition_id > 0: + document_id = props.active_document.ifc_definition_id + + if document_id: + cls.load_document_objects_into_props(document_id) + + @classmethod + def update_assigned_documents(cls) -> None: + from bonsai.bim.module.document.data import ObjectDocumentData + + ObjectDocumentData.is_loaded = False + + props = cls.get_document_props() + props.assigned_documents.clear() + + if not ObjectDocumentData.is_loaded: + ObjectDocumentData.load() + + if not ObjectDocumentData.data.get("documents"): + return + + sorted_docs = sorted( + ObjectDocumentData.data["documents"], + key=lambda doc: ((doc.get("identification") or "").lower(), (doc.get("name") or "").lower()), + ) + + for document in sorted_docs: + new = props.assigned_documents.add() + new.name = document["name"] or "Unnamed" + new.identification = document["identification"] or "*" + new.document_type = "INFORMATION" if document.get("is_information", False) else "REFERENCE" + new.ifc_definition_id = document["id"] + new.location = document.get("location") or "" + new.description = document.get("description") or "" \ No newline at end of file From ca8eb9b3580e3f3c69f1a690abefcbf8ca12d96e Mon Sep 17 00:00:00 2001 From: falken10 Date: Tue, 8 Jul 2025 08:39:21 +0200 Subject: [PATCH 468/657] misc panel working --- .../bonsai/bim/module/document/__init__.py | 1 - src/bonsai/bonsai/bim/module/document/ui.py | 44 ++++--------------- 2 files changed, 8 insertions(+), 37 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/__init__.py b/src/bonsai/bonsai/bim/module/document/__init__.py index 9730a50a11..d2da8285b9 100644 --- a/src/bonsai/bonsai/bim/module/document/__init__.py +++ b/src/bonsai/bonsai/bim/module/document/__init__.py @@ -43,7 +43,6 @@ classes = ( ui.BIM_PT_object_documents, ui.BIM_UL_documents, ui.BIM_UL_document_objects, - ui.BIM_UL_assigned_documents, ui.BIM_MT_object_documents_context_menu, ) diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index 1563555b9a..d891836517 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -165,14 +165,14 @@ class BIM_PT_object_documents(Panel): row = box.row(align=True) row.label(text="Assigned Documents", icon="OUTLINER_OB_EMPTY") - box.template_list( - "BIM_UL_assigned_documents", - "", - self.props, - "assigned_documents", - self.props, - "active_assigned_document_index", - ) + + for document in ObjectDocumentData.data["documents"]: + row = self.layout.row(align=True) + row.label(text=document["identification"] or "*", icon="FILE") + row.label(text=document["name"] or "Unnamed") + if document["location"]: + row.operator("bim.open_uri", icon="URL", text="").uri = document["location"] + row.operator("bim.unassign_document", text="", icon="X").document = document["id"] def draw_add_ui(self): if self.props.is_object_editing: @@ -259,34 +259,6 @@ class BIM_UL_document_objects(UIList): op.obj = item.name -class BIM_UL_assigned_documents(UIList): - def draw_item(self, context, layout, data, item, icon, active_data, active_propname): - if item: - row = layout.row(align=True) - - if item.document_type == "INFORMATION": - row.label(text="", icon="FILE") - else: - row.label(text="", icon="FILE_HIDDEN") - - split1 = row.split(factor=0.2) - split1.label(text=item.identification or "") - - split2 = split1.split(factor=1.0) - if item.document_type == "INFORMATION": - split2.label(text=item.name or "Unnamed") - else: - split2.label(text=item.description or "No Description") - - if item.location: - uri = ObjectDocumentData.convert_to_file_uri(item.location) - if item.location.lower().endswith(".ifc"): - row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = uri - row.operator("bim.open_uri", icon="URL", text="").uri = uri - op = row.operator("bim.unassign_document", text="", icon="X") - op.document = item.ifc_definition_id - - def add_object_documents_context_menu(self, context): if not context.active_object: return From 9c8c40c0ff97378c6d79c37653169fa7967c52c9 Mon Sep 17 00:00:00 2001 From: falken10 Date: Tue, 8 Jul 2025 16:24:02 +0200 Subject: [PATCH 469/657] nicer ui --- src/bonsai/bonsai/bim/module/document/prop.py | 2 - src/bonsai/bonsai/bim/module/document/ui.py | 44 +++++++++++-------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/prop.py b/src/bonsai/bonsai/bim/module/document/prop.py index 92d60771f7..b0964dd5c9 100644 --- a/src/bonsai/bonsai/bim/module/document/prop.py +++ b/src/bonsai/bonsai/bim/module/document/prop.py @@ -143,8 +143,6 @@ class BIMDocumentProperties(PropertyGroup): is_object_editing: bool document_objects: bpy.types.bpy_prop_collection_idprop[DocumentObject] active_document_object_index: int - assigned_documents: bpy.types.bpy_prop_collection_idprop[AssignedDocument] - active_assigned_document_index: int json_string: str @property diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index d891836517..a742130f94 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -117,9 +117,6 @@ class BIM_PT_object_documents(Panel): bl_order = 1 bl_parent_id = "BIM_PT_tab_misc" - # Class variable to track the last selected object - _last_object_id = None - @classmethod def poll(cls, context): if not (obj := context.active_object): @@ -132,11 +129,7 @@ class BIM_PT_object_documents(Panel): def draw(self, context): obj = context.active_object - current_ifc_id = tool.Blender.get_ifc_definition_id(obj) - - if BIM_PT_object_documents._last_object_id != current_ifc_id: - BIM_PT_object_documents._last_object_id = current_ifc_id - ObjectDocumentData.is_loaded = False + if not ObjectDocumentData.is_loaded: ObjectDocumentData.load() self.oprops = tool.Blender.get_object_bim_props(obj) @@ -160,19 +153,34 @@ class BIM_PT_object_documents(Panel): if self.props.is_object_editing: self.draw_add_ui() + box = self.layout.box() + row = box.row(align=True) + row.label(text="Assigned Documents", icon="OUTLINER_OB_EMPTY") + if doc_count > 0: - box = self.layout.box() - row = box.row(align=True) - row.label(text="Assigned Documents", icon="OUTLINER_OB_EMPTY") - - + col = box.column(align=True) for document in ObjectDocumentData.data["documents"]: - row = self.layout.row(align=True) - row.label(text=document["identification"] or "*", icon="FILE") - row.label(text=document["name"] or "Unnamed") + row = col.row(align=True) + + # Create a split layout to separate left and right sides + split = row.split(factor=0.7) # Adjust factor as needed (0.7 = 70% left, 30% right) + + # Left side - Document identification and name + left_side = split.row(align=True) + left_side.alignment = 'LEFT' + left_side.label(text=document["identification"] or "*", icon="FILE") + left_side.label(text=document["name"] or "Unnamed") + + # Right side - Action buttons + right_side = split.row(align=True) + right_side.alignment = 'RIGHT' # Align buttons to the right + if document["location"]: - row.operator("bim.open_uri", icon="URL", text="").uri = document["location"] - row.operator("bim.unassign_document", text="", icon="X").document = document["id"] + if document["location"].lower().endswith(".ifc"): + right_side.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = document["location"] + right_side.operator("bim.open_uri", icon="URL", text="").uri = document["location"] + + right_side.operator("bim.unassign_document", text="", icon="X").document = document["id"] def draw_add_ui(self): if self.props.is_object_editing: From 128fe66837f662ea835c207008d3b778436553c9 Mon Sep 17 00:00:00 2001 From: falken10 Date: Tue, 8 Jul 2025 19:45:12 +0200 Subject: [PATCH 470/657] cleanup and formatting --- .../bonsai/bim/module/document/__init__.py | 1 - src/bonsai/bonsai/bim/module/document/data.py | 24 ++------ .../bonsai/bim/module/document/operator.py | 32 +++++------ src/bonsai/bonsai/bim/module/document/prop.py | 31 +--------- src/bonsai/bonsai/bim/module/document/ui.py | 56 ++++++++++--------- src/bonsai/bonsai/core/document.py | 6 +- src/bonsai/bonsai/tool/document.py | 44 ++------------- 7 files changed, 64 insertions(+), 130 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/__init__.py b/src/bonsai/bonsai/bim/module/document/__init__.py index d2da8285b9..cc71d16306 100644 --- a/src/bonsai/bonsai/bim/module/document/__init__.py +++ b/src/bonsai/bonsai/bim/module/document/__init__.py @@ -37,7 +37,6 @@ classes = ( operator.OpenIFCDocument, prop.Document, prop.DocumentObject, - prop.AssignedDocument, prop.BIMDocumentProperties, ui.BIM_PT_documents, ui.BIM_PT_object_documents, diff --git a/src/bonsai/bonsai/bim/module/document/data.py b/src/bonsai/bonsai/bim/module/document/data.py index 7f788b1388..0ba0106881 100644 --- a/src/bonsai/bonsai/bim/module/document/data.py +++ b/src/bonsai/bonsai/bim/module/document/data.py @@ -23,10 +23,6 @@ import ifcopenshell.util.schema import bonsai.tool as tool from natsort import natsorted -def refresh(): - DocumentData.is_loaded = False - ObjectDocumentData.is_loaded = False - class DocumentData: data = {} @@ -35,24 +31,16 @@ class DocumentData: @classmethod def load(cls): cls.data = { - "total_document_informations": cls.total_document_informations(), - "total_document_references": cls.total_document_references(), + "total_documents": cls.total_documents(), "total_referenced_objects": cls.total_referenced_objects(), "document_objects": cls.document_objects(), } cls.is_loaded = True @classmethod - def total_document_informations(cls): + def total_documents(cls): file = tool.Ifc.get() - info_count = len(file.by_type("IfcDocumentInformation")) - return info_count - - @classmethod - def total_document_references(cls): - file = tool.Ifc.get() - ref_count = len(file.by_type("IfcDocumentReference")) - return ref_count + return len(file.by_type("IfcDocumentInformation")) + len(file.by_type("IfcDocumentReference")) @classmethod def total_referenced_objects(cls): @@ -89,7 +77,7 @@ class DocumentData: def load_document_objects_into_props(cls, document_id): if not cls.is_loaded: cls.load() - + props = tool.Document.get_document_props() props.document_objects.clear() @@ -102,6 +90,7 @@ class DocumentData: item = props.document_objects.add() item.name = obj_data["name"] + class ObjectDocumentData: data = {} is_loaded = False @@ -117,7 +106,7 @@ class ObjectDocumentData: def convert_to_file_uri(location: str) -> str: if not location: return "" - + uri = location if not uri.startswith("file://"): if not os.path.isabs(uri): @@ -125,7 +114,6 @@ class ObjectDocumentData: uri = "file://" + uri return uri - @classmethod def documents(cls): results = [] diff --git a/src/bonsai/bonsai/bim/module/document/operator.py b/src/bonsai/bonsai/bim/module/document/operator.py index 557e2c72af..c2ccd5edc9 100644 --- a/src/bonsai/bonsai/bim/module/document/operator.py +++ b/src/bonsai/bonsai/bim/module/document/operator.py @@ -23,6 +23,7 @@ import bonsai.tool as tool import bonsai.core.document as core from .data import DocumentData, ObjectDocumentData + class LoadProjectDocuments(bpy.types.Operator): bl_idname = "bim.load_project_documents" bl_label = "Load Project Documents" @@ -32,6 +33,7 @@ class LoadProjectDocuments(bpy.types.Operator): core.load_project_documents(tool.Document) return {"FINISHED"} + class DisableDocumentEditingUI(bpy.types.Operator): bl_idname = "bim.disable_document_editing_ui" bl_label = "Disable Document Editing UI" @@ -109,6 +111,7 @@ class AddInformation(bpy.types.Operator, tool.Ifc.Operator): props.json_string = json.dumps(expanded_docs) bpy.ops.bim.load_project_documents() + class AddDocumentReference(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.add_document_reference" bl_label = "Add Document Reference" @@ -154,8 +157,6 @@ class EditDocument(bpy.types.Operator, tool.Ifc.Operator): if props.active_document_id: core.edit_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(props.active_document_id)) props.active_document_id = 0 - props.is_document_editing = False - tool.Document.update_assigned_documents() class RemoveDocument(bpy.types.Operator, tool.Ifc.Operator): @@ -167,6 +168,7 @@ class RemoveDocument(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): core.remove_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(self.document)) + class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.assign_document" bl_label = "Assign Document" @@ -183,11 +185,9 @@ class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): if element: core.assign_document(tool.Ifc, product=element, document=document) - tool.Document.update_document_objects(self.document) ObjectDocumentData.is_loaded = False ObjectDocumentData.load() - tool.Document.update_assigned_documents() return {"FINISHED"} @@ -206,7 +206,7 @@ class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) if element: core.unassign_document(tool.Ifc, product=element, document=document) - + props = tool.Document.get_document_props() active_document_id = None if props.active_document: @@ -216,11 +216,9 @@ class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): tool.Document.update_document_objects(active_document_id) else: tool.Document.update_document_objects() - + ObjectDocumentData.is_loaded = False ObjectDocumentData.load() - - tool.Document.update_assigned_documents() return {"FINISHED"} @@ -253,16 +251,12 @@ class LoadObjectDocuments(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): - if not ObjectDocumentData.is_loaded: - ObjectDocumentData.load() - core.load_project_documents(tool.Document) props = tool.Document.get_document_props() props.is_object_editing = True - - tool.Document.update_assigned_documents() - + ObjectDocumentData.is_loaded = False + ObjectDocumentData.load() return {"FINISHED"} @@ -277,19 +271,24 @@ class OpenIFCDocument(bpy.types.Operator): def execute(self, context): import subprocess import os + if not self.uri or not self.uri.lower().startswith("file://"): self.report({"ERROR"}, "Only local file:// URIs are supported") return {"CANCELLED"} filepath = self.uri[7:] # Remove file:// prefix - + if not os.path.exists(filepath): self.report({"ERROR"}, f"File not found: {filepath}") return {"CANCELLED"} try: blender_path = bpy.app.binary_path - args = [blender_path, "--python-expr", "import bpy; bpy.ops.bim.load_project(filepath='{}')".format(filepath)] + args = [ + blender_path, + "--python-expr", + "import bpy; bpy.ops.bim.load_project(filepath='{}')".format(filepath), + ] subprocess.Popen(args) self.report({"INFO"}, f"Opening {filepath} in a new Blender instance") except Exception as e: @@ -325,4 +324,3 @@ class ToggleDocument(bpy.types.Operator): props.json_string = json.dumps(expanded_documents) bpy.ops.bim.load_project_documents() return {"FINISHED"} - diff --git a/src/bonsai/bonsai/bim/module/document/prop.py b/src/bonsai/bonsai/bim/module/document/prop.py index b0964dd5c9..5d9a978c69 100644 --- a/src/bonsai/bonsai/bim/module/document/prop.py +++ b/src/bonsai/bonsai/bim/module/document/prop.py @@ -51,7 +51,7 @@ def update_document_identification(self: "Document", context: bpy.types.Context) def update_active_document(self, context): - if (document := self.active_document): + if document := self.active_document: if document.ifc_definition_id: DocumentData.load_document_objects_into_props(document.ifc_definition_id) @@ -72,7 +72,7 @@ class Document(PropertyGroup): ("INFORMATION", "Information", "IfcDocumentInformation"), ("REFERENCE", "Reference", "IfcDocumentReference"), ], - default="INFORMATION" + default="INFORMATION", ) if TYPE_CHECKING: @@ -96,41 +96,15 @@ class DocumentObject(PropertyGroup): ifc_definition_id: int -class AssignedDocument(PropertyGroup): - name: StringProperty(name="Name") - identification: StringProperty(name="Identification") - description: StringProperty(name="Description", default="") - ifc_definition_id: IntProperty(name="IFC Definition ID") - location: StringProperty(name="Location", default="") - document_type: EnumProperty( - name="Document Type", - items=[ - ("PROJECT", "Project", "Virtual project root node"), - ("INFORMATION", "Information", "IfcDocumentInformation"), - ("REFERENCE", "Reference", "IfcDocumentReference"), - ], - default="INFORMATION" - ) - - if TYPE_CHECKING: - name: str - identification: str - ifc_definition_id: int - location: str - document_type: str - class BIMDocumentProperties(PropertyGroup): document_attributes: CollectionProperty(name="Document Attributes", type=Attribute) active_document_id: IntProperty(name="Active Document Id") documents: CollectionProperty(name="Documents", type=Document) active_document_index: IntProperty(name="Active Document Index", update=update_active_document) is_editing: BoolProperty(name="Is Editing", default=False) - is_document_editing: BoolProperty(name="Is Document Editing", default=False) is_object_editing: BoolProperty(name="Is Object Editing", default=False) document_objects: CollectionProperty(name="Document Objects", type=DocumentObject) active_document_object_index: IntProperty(name="Active Document Object Index") - assigned_documents: CollectionProperty(name="Assigned Documents", type=AssignedDocument) - active_assigned_document_index: IntProperty(name="Active Assigned Document Index") json_string: StringProperty(name="JSON String", default="[]") if TYPE_CHECKING: @@ -139,7 +113,6 @@ class BIMDocumentProperties(PropertyGroup): documents: bpy.types.bpy_prop_collection_idprop[Document] active_document_index: int is_editing: bool - is_document_editing: bool is_object_editing: bool document_objects: bpy.types.bpy_prop_collection_idprop[DocumentObject] active_document_object_index: int diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index a742130f94..84f7d04632 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -22,6 +22,7 @@ from bpy.types import Panel, UIList from bonsai.bim.helper import draw_attributes from .data import DocumentData, ObjectDocumentData + class BIM_PT_documents(Panel): bl_label = "Documents" bl_idname = "BIM_PT_documents" @@ -45,9 +46,7 @@ class BIM_PT_documents(Panel): split = row.split(factor=0.55) left_row = split.row(align=True) - total_documents = DocumentData.data["total_document_informations"] + DocumentData.data["total_document_references"] - left_row.label(text="{} Documents".format(total_documents), icon="FILE") - + left_row.label(text="{} Documents".format(DocumentData.data["total_documents"]), icon="FILE") right_row = split.row(align=True) right_row.label( text="{} Objects Referenced".format(DocumentData.data["total_referenced_objects"]), icon="OBJECT_DATA" @@ -63,7 +62,7 @@ class BIM_PT_documents(Panel): row = self.layout.row(align=True) row.alignment = "RIGHT" - if self.props.is_document_editing: + if self.props.active_document_id > 0: row.operator("bim.edit_document", text="", icon="CHECKMARK") row.operator("bim.disable_editing_document", text="", icon="CANCEL") else: @@ -71,25 +70,27 @@ class BIM_PT_documents(Panel): row.operator("bim.add_information", text="", icon="ADD") if self.props.active_document and ( - self.props.active_document.document_type == "INFORMATION" and - self.props.active_document.document_type != "PROJECT" + self.props.active_document.document_type == "INFORMATION" + and self.props.active_document.document_type != "PROJECT" ): row.operator("bim.add_document_reference", text="", icon="FILE_HIDDEN") active_document = self.props.active_document if active_document: ifc_definition_id = active_document.ifc_definition_id - + if active_document.document_type != "PROJECT": row.operator("bim.select_document_objects", text="", icon="RESTRICT_SELECT_OFF").document = ( ifc_definition_id ) row.operator("bim.assign_document", text="", icon="BRUSH_DATA").document = ifc_definition_id - row.operator("bim.enable_editing_document", text="", icon="GREASEPENCIL").document = ifc_definition_id - row.operator("bim.remove_document", text="", icon="X").document = ifc_definition_id + row.operator("bim.enable_editing_document", text="", icon="GREASEPENCIL").document = ( + ifc_definition_id + ) + row.operator("bim.remove_document", text="", icon="X").document = ifc_definition_id self.layout.template_list("BIM_UL_documents", "", self.props, "documents", self.props, "active_document_index") - if self.props.is_document_editing: + if self.props.active_document_id > 0: active_document = self.props.active_document draw_attributes(self.props.document_attributes, self.layout) @@ -107,6 +108,7 @@ class BIM_PT_documents(Panel): "active_document_object_index", ) + class BIM_PT_object_documents(Panel): bl_label = "Documents" bl_idname = "BIM_PT_object_documents" @@ -161,25 +163,27 @@ class BIM_PT_object_documents(Panel): col = box.column(align=True) for document in ObjectDocumentData.data["documents"]: row = col.row(align=True) - + # Create a split layout to separate left and right sides split = row.split(factor=0.7) # Adjust factor as needed (0.7 = 70% left, 30% right) - + # Left side - Document identification and name left_side = split.row(align=True) - left_side.alignment = 'LEFT' + left_side.alignment = "LEFT" left_side.label(text=document["identification"] or "*", icon="FILE") left_side.label(text=document["name"] or "Unnamed") - + # Right side - Action buttons right_side = split.row(align=True) - right_side.alignment = 'RIGHT' # Align buttons to the right - + right_side.alignment = "RIGHT" # Align buttons to the right + if document["location"]: if document["location"].lower().endswith(".ifc"): - right_side.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = document["location"] + right_side.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = document[ + "location" + ] right_side.operator("bim.open_uri", icon="URL", text="").uri = document["location"] - + right_side.operator("bim.unassign_document", text="", icon="X").document = document["id"] def draw_add_ui(self): @@ -194,9 +198,11 @@ class BIM_PT_object_documents(Panel): for doc in ObjectDocumentData.data["documents"]: assigned_doc_ids.append(doc["id"]) - if (document.document_type == "INFORMATION" and - document.document_type != "PROJECT" and - document.ifc_definition_id not in assigned_doc_ids): + if ( + document.document_type == "INFORMATION" + and document.document_type != "PROJECT" + and document.ifc_definition_id not in assigned_doc_ids + ): doc_op = row.operator("bim.assign_document", text="", icon="BRUSH_DATA") doc_op.document = document.ifc_definition_id elif document.ifc_definition_id in assigned_doc_ids: @@ -215,15 +221,15 @@ class BIM_UL_documents(UIList): if item.document_type != "PROJECT": if item.tree_depth > 1: indent_depth = item.tree_depth - 1 - + for i in range(indent_depth): row.label(text="", icon="BLANK1") - + if item.document_type == "PROJECT": row.label(text="", icon="OUTLINER_COLLECTION") row.label(text=item.name) return - + if item.document_type == "INFORMATION" and item.has_children: op = row.operator( "bim.toggle_document", icon="TRIA_DOWN" if item.is_expanded else "TRIA_RIGHT", text="", emboss=False @@ -232,7 +238,7 @@ class BIM_UL_documents(UIList): op.option = "Collapse" if item.is_expanded else "Expand" elif item.document_type == "INFORMATION": row.label(text="", icon="BLANK1") - + if item.document_type == "INFORMATION": row.label(text="", icon="FILE") text = " - ".join([x for x in [item.name, item.location] if x]) diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index e55c077022..07a167c785 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -29,27 +29,29 @@ def load_project_documents(document: tool.Document) -> None: document.import_project_documents() document.enable_editing_ui() + def disable_document_editing_ui(document: tool.Document) -> None: document.disable_editing_ui() document.disable_editing_document() + def disable_object_document_editing_ui(document: tool.Document) -> None: props = document.get_document_props() props.is_object_editing = False + def enable_editing_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: props = document_tool.get_document_props() - props.is_document_editing = True document_tool.set_active_document(document) document_tool.import_document_attributes(document) def disable_editing_document(document: tool.Document) -> None: props = document.get_document_props() - props.is_document_editing = False document.clear_active_document() document.clear_document_attributes() + def add_information(ifc: tool.Ifc, document_tool: tool.Document, parent=None) -> ifcopenshell.entity_instance: document_tool.clear_document_tree() diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index cd51f35e8d..bbc20663dc 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -153,8 +153,7 @@ class Document(bonsai.core.tool.Document): if root.is_expanded: root_documents = natsorted( - root_documents, - key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") + root_documents, key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") ) for doc in root_documents: @@ -204,21 +203,17 @@ class Document(bonsai.core.tool.Document): ref_children = [d for d in children if not d.is_a("IfcDocumentInformation")] info_children = natsorted( - info_children, - key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") + info_children, key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") ) ref_children = natsorted( ref_children, - key=lambda doc: ( - cls.get_external_reference_id(doc) or "", - doc.Description or doc.Name or "" - ) + key=lambda doc: (cls.get_external_reference_id(doc) or "", doc.Description or doc.Name or ""), ) for child in info_children + ref_children: cls._process_document(child, props, document_children, expanded_documents, depth + 1) - + @classmethod def is_document_information(cls, document: ifcopenshell.entity_instance) -> bool: return document.is_a("IfcDocumentInformation") @@ -295,12 +290,14 @@ class Document(bonsai.core.tool.Document): @classmethod def refresh_document_data(cls) -> None: import bonsai.bim.module.document.data as document_data + document_data.DocumentData.is_loaded = False document_data.DocumentData.load() @classmethod def load_document_objects_into_props(cls, document_id: int) -> None: import bonsai.bim.module.document.data as document_data + document_data.DocumentData.load_document_objects_into_props(document_id) @classmethod @@ -314,32 +311,3 @@ class Document(bonsai.core.tool.Document): if document_id: cls.load_document_objects_into_props(document_id) - - @classmethod - def update_assigned_documents(cls) -> None: - from bonsai.bim.module.document.data import ObjectDocumentData - - ObjectDocumentData.is_loaded = False - - props = cls.get_document_props() - props.assigned_documents.clear() - - if not ObjectDocumentData.is_loaded: - ObjectDocumentData.load() - - if not ObjectDocumentData.data.get("documents"): - return - - sorted_docs = sorted( - ObjectDocumentData.data["documents"], - key=lambda doc: ((doc.get("identification") or "").lower(), (doc.get("name") or "").lower()), - ) - - for document in sorted_docs: - new = props.assigned_documents.add() - new.name = document["name"] or "Unnamed" - new.identification = document["identification"] or "*" - new.document_type = "INFORMATION" if document.get("is_information", False) else "REFERENCE" - new.ifc_definition_id = document["id"] - new.location = document.get("location") or "" - new.description = document.get("description") or "" \ No newline at end of file From 6f400c8e44bc9e097472542f4470c97f2bd46232 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 8 Aug 2025 18:48:15 +0200 Subject: [PATCH 471/657] updates based on core developer's feedback --- src/bonsai/bonsai/bim/helper.py | 3 -- src/bonsai/bonsai/bim/module/document/data.py | 19 ++++--------- .../bonsai/bim/module/document/operator.py | 28 +++++++------------ src/bonsai/bonsai/bim/module/document/prop.py | 24 +++------------- src/bonsai/bonsai/bim/module/document/ui.py | 17 ++++------- src/bonsai/bonsai/core/document.py | 5 +--- src/bonsai/bonsai/tool/document.py | 6 ++++ 7 files changed, 31 insertions(+), 71 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index eb8d9fa6e4..e76b512de3 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -55,7 +55,6 @@ def draw_attributes( layout: bpy.types.UILayout, copy_operator: Optional[str] = None, popup_active_attribute: Optional[bonsai.bim.prop.Attribute] = None, - filter_attributes: list[str] = None, callback: Optional[Callable[[bonsai.bim.prop.Attribute, bpy.types.UILayout], None]] = None, *, enable_search: Union[bool, EllipsisType] = ..., @@ -76,8 +75,6 @@ def draw_attributes( """ for attribute in props: - if attribute.name in (filter_attributes or []): - continue row = layout.row(align=True) if attribute == popup_active_attribute: row.activate_init = True diff --git a/src/bonsai/bonsai/bim/module/document/data.py b/src/bonsai/bonsai/bim/module/document/data.py index 0ba0106881..7f91247b87 100644 --- a/src/bonsai/bonsai/bim/module/document/data.py +++ b/src/bonsai/bonsai/bim/module/document/data.py @@ -24,6 +24,11 @@ import bonsai.tool as tool from natsort import natsorted +def refresh(): + DocumentData.is_loaded = False + ObjectDocumentData.is_loaded = False + + class DocumentData: data = {} is_loaded = False @@ -32,7 +37,6 @@ class DocumentData: def load(cls): cls.data = { "total_documents": cls.total_documents(), - "total_referenced_objects": cls.total_referenced_objects(), "document_objects": cls.document_objects(), } cls.is_loaded = True @@ -42,19 +46,6 @@ class DocumentData: file = tool.Ifc.get() return len(file.by_type("IfcDocumentInformation")) + len(file.by_type("IfcDocumentReference")) - @classmethod - def total_referenced_objects(cls): - file = tool.Ifc.get() - document_rels = file.by_type("IfcRelAssociatesDocument") - documented_objects = set() - for rel in document_rels: - for related_object in rel.RelatedObjects: - obj = tool.Ifc.get_object(related_object) - if obj: - documented_objects.add(related_object.id()) - - return len(documented_objects) - @classmethod def document_objects(cls): document_objects = {} diff --git a/src/bonsai/bonsai/bim/module/document/operator.py b/src/bonsai/bonsai/bim/module/document/operator.py index c2ccd5edc9..10eab2f5ed 100644 --- a/src/bonsai/bonsai/bim/module/document/operator.py +++ b/src/bonsai/bonsai/bim/module/document/operator.py @@ -21,8 +21,7 @@ import json import bonsai.bim.handler import bonsai.tool as tool import bonsai.core.document as core -from .data import DocumentData, ObjectDocumentData - +from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData class LoadProjectDocuments(bpy.types.Operator): bl_idname = "bim.load_project_documents" @@ -186,7 +185,6 @@ class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): core.assign_document(tool.Ifc, product=element, document=document) tool.Document.update_document_objects(self.document) - ObjectDocumentData.is_loaded = False ObjectDocumentData.load() return {"FINISHED"} @@ -217,7 +215,6 @@ class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): else: tool.Document.update_document_objects() - ObjectDocumentData.is_loaded = False ObjectDocumentData.load() return {"FINISHED"} @@ -255,7 +252,6 @@ class LoadObjectDocuments(bpy.types.Operator): props = tool.Document.get_document_props() props.is_object_editing = True - ObjectDocumentData.is_loaded = False ObjectDocumentData.load() return {"FINISHED"} @@ -276,27 +272,23 @@ class OpenIFCDocument(bpy.types.Operator): self.report({"ERROR"}, "Only local file:// URIs are supported") return {"CANCELLED"} - filepath = self.uri[7:] # Remove file:// prefix + filepath = self.uri[7:] if not os.path.exists(filepath): self.report({"ERROR"}, f"File not found: {filepath}") return {"CANCELLED"} - try: - blender_path = bpy.app.binary_path - args = [ - blender_path, - "--python-expr", - "import bpy; bpy.ops.bim.load_project(filepath='{}')".format(filepath), - ] - subprocess.Popen(args) - self.report({"INFO"}, f"Opening {filepath} in a new Blender instance") - except Exception as e: - self.report({"ERROR"}, f"Failed to open IFC file: {str(e)}") + blender_path = bpy.app.binary_path + args = [ + blender_path, + "--python-expr", + "import bpy; bpy.ops.bim.load_project(filepath='{}')".format(filepath), + ] + subprocess.Popen(args) + self.report({"INFO"}, f"Opening {filepath} in a new Blender instance") return {"FINISHED"} - class ToggleDocument(bpy.types.Operator): bl_idname = "bim.toggle_document" bl_label = "Toggle Document" diff --git a/src/bonsai/bonsai/bim/module/document/prop.py b/src/bonsai/bonsai/bim/module/document/prop.py index 5d9a978c69..93369b546d 100644 --- a/src/bonsai/bonsai/bim/module/document/prop.py +++ b/src/bonsai/bonsai/bim/module/document/prop.py @@ -1,24 +1,7 @@ -# Bonsai - OpenBIM Blender Add-on -# Copyright (C) 2020, 2021 Dion Moult -# -# This file is part of Bonsai. -# -# Bonsai is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Bonsai 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Bonsai. If not, see . - import bpy import bonsai.tool as tool from bonsai.bim.prop import StrProperty, Attribute +from bonsai.bim.module.document.data import refresh from bpy.types import PropertyGroup from bpy.props import ( PointerProperty, @@ -50,7 +33,8 @@ def update_document_identification(self: "Document", context: bpy.types.Context) tool.Document.set_external_reference_id(document, self.identification) -def update_active_document(self, context): +def update_active_document_index(self, context): + refresh() if document := self.active_document: if document.ifc_definition_id: DocumentData.load_document_objects_into_props(document.ifc_definition_id) @@ -100,7 +84,7 @@ class BIMDocumentProperties(PropertyGroup): document_attributes: CollectionProperty(name="Document Attributes", type=Attribute) active_document_id: IntProperty(name="Active Document Id") documents: CollectionProperty(name="Documents", type=Document) - active_document_index: IntProperty(name="Active Document Index", update=update_active_document) + active_document_index: IntProperty(name="Active Document Index", update=update_active_document_index) is_editing: BoolProperty(name="Is Editing", default=False) is_object_editing: BoolProperty(name="Is Object Editing", default=False) document_objects: CollectionProperty(name="Document Objects", type=DocumentObject) diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index 84f7d04632..60e83fdcbe 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -20,8 +20,7 @@ import bpy import bonsai.tool as tool from bpy.types import Panel, UIList from bonsai.bim.helper import draw_attributes -from .data import DocumentData, ObjectDocumentData - +from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData class BIM_PT_documents(Panel): bl_label = "Documents" @@ -43,18 +42,12 @@ class BIM_PT_documents(Panel): self.props = tool.Document.get_document_props() row = self.layout.row(align=True) - split = row.split(factor=0.55) - - left_row = split.row(align=True) - left_row.label(text="{} Documents".format(DocumentData.data["total_documents"]), icon="FILE") - right_row = split.row(align=True) - right_row.label( - text="{} Objects Referenced".format(DocumentData.data["total_referenced_objects"]), icon="OBJECT_DATA" - ) + row.label(text="{} Documents found".format(DocumentData.data["total_documents"]), icon="FILE") + if self.props.is_editing: - right_row.operator("bim.disable_document_editing_ui", text="", icon="CANCEL") + row.operator("bim.disable_document_editing_ui", text="", icon="CANCEL") else: - right_row.operator("bim.load_project_documents", text="", icon="IMPORT") + row.operator("bim.load_project_documents", text="", icon="IMPORT") if not self.props.is_editing: return diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index 07a167c785..67680a7a55 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -36,18 +36,15 @@ def disable_document_editing_ui(document: tool.Document) -> None: def disable_object_document_editing_ui(document: tool.Document) -> None: - props = document.get_document_props() - props.is_object_editing = False + document.disable_object_editing_ui() def enable_editing_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: - props = document_tool.get_document_props() document_tool.set_active_document(document) document_tool.import_document_attributes(document) def disable_editing_document(document: tool.Document) -> None: - props = document.get_document_props() document.clear_active_document() document.clear_document_attributes() diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index bbc20663dc..28edfe12e0 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -19,6 +19,7 @@ from __future__ import annotations import bpy import ifcopenshell.util.system +import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool import json @@ -44,6 +45,11 @@ class Document(bonsai.core.tool.Document): props = cls.get_document_props() props.active_document_id = 0 + @classmethod + def disable_object_editing_ui(cls) -> None: + props = cls.get_document_props() + props.is_object_editing = False + @classmethod def disable_editing_ui(cls) -> None: props = cls.get_document_props() From e4ba633d94e5ce68d1d6937a6a75af194ceb56d8 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 8 Aug 2025 20:28:40 +0200 Subject: [PATCH 472/657] cleanup nomenclature and some redundant code --- src/bonsai/bonsai/bim/module/document/data.py | 3 +- .../bonsai/bim/module/document/operator.py | 12 ++--- src/bonsai/bonsai/bim/module/document/ui.py | 4 +- src/bonsai/bonsai/core/document.py | 54 +++++++++---------- src/bonsai/bonsai/tool/document.py | 47 +++++++--------- 5 files changed, 54 insertions(+), 66 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/data.py b/src/bonsai/bonsai/bim/module/document/data.py index 7f91247b87..7fc05ca3d1 100644 --- a/src/bonsai/bonsai/bim/module/document/data.py +++ b/src/bonsai/bonsai/bim/module/document/data.py @@ -125,7 +125,6 @@ class ObjectDocumentData: location = None identification = None - description = None if is_information: if tool.Ifc.get_schema() == "IFC2X3": @@ -134,7 +133,7 @@ class ObjectDocumentData: identification = relating_document.Identification location = getattr(relating_document, "Location", None) - + description = getattr(relating_document, "Description", "No description") else: description = relating_document.Description if tool.Ifc.get_schema() == "IFC2X3": diff --git a/src/bonsai/bonsai/bim/module/document/operator.py b/src/bonsai/bonsai/bim/module/document/operator.py index 10eab2f5ed..f63b5e1693 100644 --- a/src/bonsai/bonsai/bim/module/document/operator.py +++ b/src/bonsai/bonsai/bim/module/document/operator.py @@ -60,7 +60,7 @@ class EnableEditingDocument(bpy.types.Operator): document: bpy.props.IntProperty() def execute(self, context): - core.enable_editing_document(tool.Document, document=tool.Ifc.get().by_id(self.document)) + core.enable_editing_document(tool.Document, ifc_document=tool.Ifc.get().by_id(self.document)) return {"FINISHED"} @@ -154,7 +154,7 @@ class EditDocument(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): props = tool.Document.get_document_props() if props.active_document_id: - core.edit_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(props.active_document_id)) + core.edit_document(tool.Ifc, tool.Document, ifc_document=tool.Ifc.get().by_id(props.active_document_id)) props.active_document_id = 0 @@ -165,7 +165,7 @@ class RemoveDocument(bpy.types.Operator, tool.Ifc.Operator): document: bpy.props.IntProperty() def _execute(self, context): - core.remove_document(tool.Ifc, tool.Document, document=tool.Ifc.get().by_id(self.document)) + core.remove_document(tool.Ifc, tool.Document, ifc_document=tool.Ifc.get().by_id(self.document)) class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): @@ -177,12 +177,11 @@ class AssignDocument(bpy.types.Operator, tool.Ifc.Operator): document: bpy.props.IntProperty() def _execute(self, context): - document = tool.Ifc.get().by_id(self.document) objs = [bpy.data.objects[self.obj]] if self.obj else tool.Blender.get_selected_objects() for obj in objs: element = tool.Ifc.get_entity(obj) if element: - core.assign_document(tool.Ifc, product=element, document=document) + core.assign_document(tool.Ifc, product=element, ifc_document=tool.Ifc.get().by_id(self.document)) tool.Document.update_document_objects(self.document) ObjectDocumentData.load() @@ -197,13 +196,12 @@ class UnassignDocument(bpy.types.Operator, tool.Ifc.Operator): document: bpy.props.IntProperty() def _execute(self, context): - document = tool.Ifc.get().by_id(self.document) objs = [bpy.data.objects.get(self.obj)] if self.obj else tool.Blender.get_selected_objects() for obj in objs: if obj: element = tool.Ifc.get_entity(obj) if element: - core.unassign_document(tool.Ifc, product=element, document=document) + core.unassign_document(tool.Ifc, product=element, ifc_document=tool.Ifc.get().by_id(self.document)) props = tool.Document.get_document_props() active_document_id = None diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index 60e83fdcbe..68a9c5adb2 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -234,10 +234,10 @@ class BIM_UL_documents(UIList): if item.document_type == "INFORMATION": row.label(text="", icon="FILE") - text = " - ".join([x for x in [item.name, item.location] if x]) + text = " - ".join([x for x in [item.location, item.description, item.name] if x]) else: row.label(text="", icon="FILE_HIDDEN") - text = " - ".join([x for x in [item.description, item.location] if x]) + text = " - ".join([x for x in [item.location, item.description] if x]) split1 = row.split(factor=0.1) split1.prop(item, "identification", text="", emboss=False) split2 = split1.split(factor=0.8) diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index 67680a7a55..7b42295500 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -39,9 +39,9 @@ def disable_object_document_editing_ui(document: tool.Document) -> None: document.disable_object_editing_ui() -def enable_editing_document(document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: - document_tool.set_active_document(document) - document_tool.import_document_attributes(document) +def enable_editing_document(document: tool.Document, ifc_document: ifcopenshell.entity_instance) -> None: + document.set_active_document(ifc_document) + document.import_document_attributes(ifc_document) def disable_editing_document(document: tool.Document) -> None: @@ -49,19 +49,19 @@ def disable_editing_document(document: tool.Document) -> None: document.clear_document_attributes() -def add_information(ifc: tool.Ifc, document_tool: tool.Document, parent=None) -> ifcopenshell.entity_instance: - document_tool.clear_document_tree() +def add_information(ifc: tool.Ifc, document: tool.Document, parent=None) -> ifcopenshell.entity_instance: + document.clear_document_tree() if parent is None: - parent = document_tool.get_default_parent_for_information(ifc) + parent = document.get_default_parent_for_information(ifc) information = ifc.run("document.add_information", parent=parent) ifc.run("document.add_reference", information=information) - if document_tool.is_document_information(parent): - document_tool.expand_document(parent) + if document.is_document_information(parent): + document.expand_document(parent) - document_tool.import_project_documents() + document.import_project_documents() return information @@ -76,33 +76,33 @@ def add_reference(ifc: tool.Ifc, document: tool.Document) -> None: document.import_project_documents() -def edit_document(ifc: tool.Ifc, document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: - attributes = document_tool.export_document_attributes() - if document_tool.is_document_information(document): - ifc.run("document.edit_information", information=document, attributes=attributes) +def edit_document(ifc: tool.Ifc, document: tool.Document, ifc_document: ifcopenshell.entity_instance) -> None: + attributes = document.export_document_attributes() + if document.is_document_information(ifc_document): + ifc.run("document.edit_information", information=ifc_document, attributes=attributes) else: - ifc.run("document.edit_reference", reference=document, attributes=attributes) - document_tool.disable_editing_document() - document_tool.clear_document_tree() - document_tool.import_project_documents() + ifc.run("document.edit_reference", reference=ifc_document, attributes=attributes) + document.disable_editing_document() + document.clear_document_tree() + document.import_project_documents() -def remove_document(ifc: tool.Ifc, document_tool: tool.Document, document: ifcopenshell.entity_instance) -> None: - document_tool.clear_document_tree() - if document_tool.is_document_information(document): - ifc.run("document.remove_information", information=document) +def remove_document(ifc: tool.Ifc, document: tool.Document, ifc_document: ifcopenshell.entity_instance) -> None: + document.clear_document_tree() + if document.is_document_information(ifc_document): + ifc.run("document.remove_information", information=ifc_document) else: - ifc.run("document.remove_reference", reference=document) - document_tool.import_project_documents() + ifc.run("document.remove_reference", reference=ifc_document) + document.import_project_documents() def assign_document( - ifc: tool.Ifc, product: ifcopenshell.entity_instance, document: ifcopenshell.entity_instance + ifc: tool.Ifc, product: ifcopenshell.entity_instance, ifc_document: ifcopenshell.entity_instance ) -> None: - ifc.run("document.assign_document", products=[product], document=document) + ifc.run("document.assign_document", products=[product], document=ifc_document) def unassign_document( - ifc: tool.Ifc, product: ifcopenshell.entity_instance, document: ifcopenshell.entity_instance + ifc: tool.Ifc, product: ifcopenshell.entity_instance, ifc_document: ifcopenshell.entity_instance ) -> None: - ifc.run("document.unassign_document", products=[product], document=document) + ifc.run("document.unassign_document", products=[product], document=ifc_document) diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index 28edfe12e0..f8f45fffcf 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -172,30 +172,23 @@ class Document(bonsai.core.tool.Document): new.document_type = "INFORMATION" if document.is_a("IfcDocumentInformation") else "REFERENCE" new.tree_depth = depth - file = document.file + new.name = document.Name or "" + new.identification = cls.get_document_information_id(document) if new.document_type == "INFORMATION" else cls.get_external_reference_id(document) + new.identification = new.identification or "" + new.description = document.Description or "" + new.location = document.Location or "" + if new.document_type == "INFORMATION": new.name = document.Name or "Unnamed" - new.identification = cls.get_document_information_id(document) or "" - new.location = document.Location or "" - else: - new.name = document.Name or "" - new.identification = cls.get_external_reference_id(document) or "" - new.description = document.Description or "" - new.location = document.Location or "" - - if new.document_type == "REFERENCE": - if file.schema == "IFC2X3": - if document.ReferenceToDocument: - doc_info = document.ReferenceToDocument[0] - if not new.name: - new.name = doc_info.Name or "" - new.location = new.location or "" - else: - if document.ReferencedDocument: - doc_info = document.ReferencedDocument - if not new.name: - new.name = doc_info.Name or "" - new.location = new.location or "" + + elif new.document_type == "REFERENCE": + file = document.file + if file.schema == "IFC2X3": + if document.ReferenceToDocument and not new.name: + new.name = document.ReferenceToDocument[0].Name or "" + else: + if document.ReferencedDocument and not new.name: + new.name = document.ReferencedDocument.Name or "" doc_id = document.id() has_children = doc_id in document_children and bool(document_children[doc_id]) @@ -205,16 +198,14 @@ class Document(bonsai.core.tool.Document): if has_children and new.is_expanded: children = document_children[doc_id] - info_children = [d for d in children if d.is_a("IfcDocumentInformation")] - ref_children = [d for d in children if not d.is_a("IfcDocumentInformation")] - info_children = natsorted( - info_children, key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") + [d for d in children if d.is_a("IfcDocumentInformation")], + key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") ) ref_children = natsorted( - ref_children, - key=lambda doc: (cls.get_external_reference_id(doc) or "", doc.Description or doc.Name or ""), + [d for d in children if not d.is_a("IfcDocumentInformation")], + key=lambda doc: (cls.get_external_reference_id(doc) or "", doc.Description or doc.Name or "") ) for child in info_children + ref_children: From df6592c7b96a330ea9f84961e7bbe157f732ece4 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 21 Aug 2025 09:42:22 +0200 Subject: [PATCH 473/657] updated to get make test-tool MODULE=document working --- src/bonsai/test/tool/test_document.py | 78 +++++++++++++++++++-------- 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/src/bonsai/test/tool/test_document.py b/src/bonsai/test/tool/test_document.py index 3d313f6293..628f040923 100644 --- a/src/bonsai/test/tool/test_document.py +++ b/src/bonsai/test/tool/test_document.py @@ -22,6 +22,7 @@ import ifcopenshell.api import ifcopenshell.api.document import bonsai.core.tool import bonsai.tool as tool +import json from test.bim.bootstrap import NewFile from bonsai.tool.document import Document as subject @@ -139,35 +140,66 @@ class TestImportDocumentAttributes(NewFile): assert props.document_attributes["Description"].string_value == "Description" -class TestImportProjectDocuments(NewFile): +class TestImportProjectDocumentsExpanded(NewFile): def test_run(self): ifc = ifcopenshell.file() tool.Ifc().set(ifc) - ifc.createIfcProject() - document = ifcopenshell.api.document.add_information(ifc) - subject.import_project_documents() - props = tool.Document.get_document_props() - assert len(props.documents) == 1 - assert props.documents[0].ifc_definition_id == document.id() - assert props.documents[0].name == "Unnamed" - assert props.documents[0].identification == "X" - assert props.documents[0].is_information is True - - -class TestImportReferences(NewFile): - def test_run(self): - ifc = ifcopenshell.file() - tool.Ifc().set(ifc) - ifc.createIfcProject() + project = ifc.createIfcProject() document = ifcopenshell.api.document.add_information(ifc) reference = ifcopenshell.api.document.add_reference(ifc, information=document) - subject.import_references(document) + + props = tool.Document.get_document_props() - assert len(props.documents) == 1 - assert props.documents[0].ifc_definition_id == reference.id() - assert props.documents[0].name == "Unnamed" - assert props.documents[0].identification == "X" - assert props.documents[0].is_information is False + expanded_docs = [document.id()] # Mark document as expanded + props.json_string = json.dumps(expanded_docs) + + subject.import_project_documents() + props = tool.Document.get_document_props() + + # Should have project root + document + reference = 3 total + assert len(props.documents) == 3 + + assert props.documents[0].ifc_definition_id == -project.id() + assert props.documents[0].document_type == "PROJECT" + + doc_info = next((d for d in props.documents if d.ifc_definition_id == document.id()), None) + assert doc_info is not None + assert doc_info.document_type == "INFORMATION" + + doc_ref = next((d for d in props.documents if d.ifc_definition_id == reference.id()), None) + assert doc_ref is not None + assert doc_ref.location == "" + assert doc_ref.identification == "X" + assert doc_ref.document_type == "REFERENCE" + + +class TestImportProjectDocumentsCollapsed(NewFile): + def test_run(self): + ifc = ifcopenshell.file() + tool.Ifc().set(ifc) + project = ifc.createIfcProject() + document = ifcopenshell.api.document.add_information(ifc) + reference = ifcopenshell.api.document.add_reference(ifc, information=document) + + + props = tool.Document.get_document_props() + props.json_string = json.dumps([]) # Empty expanded list + + subject.import_project_documents() + props = tool.Document.get_document_props() + + # Should have project root + document = 2 total (reference not imported because parent is collapsed) + assert len(props.documents) == 2 + + assert props.documents[0].ifc_definition_id == -project.id() + assert props.documents[0].document_type == "PROJECT" + + doc_info = next((d for d in props.documents if d.ifc_definition_id == document.id()), None) + assert doc_info is not None + assert doc_info.document_type == "INFORMATION" + + doc_ref = next((d for d in props.documents if d.ifc_definition_id == reference.id()), None) + assert doc_ref is None class TestIsDocumentInformation(NewFile): From 454ed2c5a118f930eb58495121ea2a6558296801 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 21 Aug 2025 10:16:44 +0200 Subject: [PATCH 474/657] updated to get make test-bim MODULE=document working --- src/bonsai/test/bim/feature/document.feature | 39 ++++++-------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/src/bonsai/test/bim/feature/document.feature b/src/bonsai/test/bim/feature/document.feature index 9ef9657499..35509c2314 100644 --- a/src/bonsai/test/bim/feature/document.feature +++ b/src/bonsai/test/bim/feature/document.feature @@ -6,14 +6,6 @@ Scenario: Load project documents When I press "bim.load_project_documents" Then nothing happens -Scenario: Load document - Given an empty IFC project - And I press "bim.load_project_documents" - And I press "bim.add_information" - And the variable "information" is "{ifc}.by_type('IfcDocumentInformation')[-1].id()" - When I press "bim.load_document(document={information})" - Then nothing happens - Scenario: Disable document editing UI Given an empty IFC project And I press "bim.load_project_documents" @@ -48,7 +40,8 @@ Scenario: Add document reference And I press "bim.load_project_documents" And I press "bim.add_information" And the variable "information" is "{ifc}.by_type('IfcDocumentInformation')[-1].id()" - And I press "bim.load_document(document={information})" + And I press "bim.load_project_documents" + And I set "scene.BIMDocumentProperties.active_document_index" to "1" When I press "bim.add_document_reference" Then nothing happens @@ -74,16 +67,12 @@ Scenario: Assign document And I press "bim.load_project_documents" And I press "bim.add_information" And the variable "information" is "{ifc}.by_type('IfcDocumentInformation')[-1].id()" - And I press "bim.load_document(document={information})" - And I press "bim.add_document_reference" - And the variable "reference" is "{ifc}.by_type('IfcDocumentReference')[-1].id()" And I add a cube And the object "Cube" is selected - And I look at the "Class" panel - And I set the "Products" property to "IfcElement" - And I set the "Class" property to "IfcWall" - And I click "Assign IFC Class" - When I press "bim.assign_document(document={reference})" + And I set "scene.BIMRootProperties.ifc_product" to "IfcElement" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + When I press "bim.assign_document(document={information})" Then nothing happens Scenario: Unassign document @@ -91,15 +80,11 @@ Scenario: Unassign document And I press "bim.load_project_documents" And I press "bim.add_information" And the variable "information" is "{ifc}.by_type('IfcDocumentInformation')[-1].id()" - And I press "bim.load_document(document={information})" - And I press "bim.add_document_reference" - And the variable "reference" is "{ifc}.by_type('IfcDocumentReference')[-1].id()" And I add a cube And the object "Cube" is selected - And I look at the "Class" panel - And I set the "Products" property to "IfcElement" - And I set the "Class" property to "IfcWall" - And I click "Assign IFC Class" - And I press "bim.assign_document(document={reference})" - When I press "bim.unassign_document(document={reference})" - Then nothing happens + And I set "scene.BIMRootProperties.ifc_product" to "IfcElement" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.assign_document(document={information})" + When I press "bim.unassign_document(document={information})" + Then nothing happens \ No newline at end of file From 81fdf63bd03bfdf0eb2b6ded2f35a4d7b8131451 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 21 Aug 2025 12:05:41 +0200 Subject: [PATCH 475/657] adapted to get pytest -p no:pytest-blender test/core/test_document.py working. Black formating --- .../bonsai/bim/module/document/operator.py | 2 + src/bonsai/bonsai/bim/module/document/ui.py | 3 +- src/bonsai/bonsai/core/document.py | 4 +- src/bonsai/bonsai/core/tool.py | 14 ++++ src/bonsai/bonsai/tool/document.py | 24 ++++--- src/bonsai/test/core/test_document.py | 70 +++++++++++++------ src/bonsai/test/tool/test_document.py | 18 +++-- 7 files changed, 91 insertions(+), 44 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/operator.py b/src/bonsai/bonsai/bim/module/document/operator.py index f63b5e1693..447d3b1693 100644 --- a/src/bonsai/bonsai/bim/module/document/operator.py +++ b/src/bonsai/bonsai/bim/module/document/operator.py @@ -23,6 +23,7 @@ import bonsai.tool as tool import bonsai.core.document as core from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData + class LoadProjectDocuments(bpy.types.Operator): bl_idname = "bim.load_project_documents" bl_label = "Load Project Documents" @@ -287,6 +288,7 @@ class OpenIFCDocument(bpy.types.Operator): return {"FINISHED"} + class ToggleDocument(bpy.types.Operator): bl_idname = "bim.toggle_document" bl_label = "Toggle Document" diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index 68a9c5adb2..c382f1c721 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -22,6 +22,7 @@ from bpy.types import Panel, UIList from bonsai.bim.helper import draw_attributes from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData + class BIM_PT_documents(Panel): bl_label = "Documents" bl_idname = "BIM_PT_documents" @@ -43,7 +44,7 @@ class BIM_PT_documents(Panel): row = self.layout.row(align=True) row.label(text="{} Documents found".format(DocumentData.data["total_documents"]), icon="FILE") - + if self.props.is_editing: row.operator("bim.disable_document_editing_ui", text="", icon="CANCEL") else: diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index 7b42295500..ac49fee10d 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -53,7 +53,7 @@ def add_information(ifc: tool.Ifc, document: tool.Document, parent=None) -> ifco document.clear_document_tree() if parent is None: - parent = document.get_default_parent_for_information(ifc) + parent = document.get_default_parent_for_information() information = ifc.run("document.add_information", parent=parent) ifc.run("document.add_reference", information=information) @@ -66,7 +66,7 @@ def add_information(ifc: tool.Ifc, document: tool.Document, parent=None) -> ifco def add_reference(ifc: tool.Ifc, document: tool.Document) -> None: - parent = document.get_selected_document_information(ifc) + parent = document.get_selected_document_information() if parent: reference = ifc.run("document.add_reference", information=parent) diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index 4061914bee..36afd7d66c 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -289,6 +289,7 @@ class Debug: class Document: def clear_document_tree(cls): pass def disable_editing_document(cls): pass + def disable_object_editing_ui(cls): pass def disable_editing_ui(cls): pass def enable_editing_ui(cls): pass def export_document_attributes(cls): pass @@ -296,6 +297,19 @@ class Document: def import_project_documents(cls): pass def is_document_information(cls, document): pass def set_active_document(cls, document): pass + def clear_active_document(cls): pass + def clear_document_attributes(cls): pass + def expand_document(cls, document): pass + def get_default_parent_for_information(cls): pass + def get_selected_document_information(cls): pass + def get_document_information_id(cls, document): pass + def set_document_information_id(cls, document, value): pass + def get_external_reference_id(cls, reference): pass + def set_external_reference_id(cls, reference, value): pass + def get_document_references(cls, document): pass + def refresh_document_data(cls): pass + def load_document_objects_into_props(cls, document_id): pass + def update_document_objects(cls, document_id): pass @interface diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index f8f45fffcf..bf8e4d17b8 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -173,14 +173,18 @@ class Document(bonsai.core.tool.Document): new.tree_depth = depth new.name = document.Name or "" - new.identification = cls.get_document_information_id(document) if new.document_type == "INFORMATION" else cls.get_external_reference_id(document) + new.identification = ( + cls.get_document_information_id(document) + if new.document_type == "INFORMATION" + else cls.get_external_reference_id(document) + ) new.identification = new.identification or "" new.description = document.Description or "" new.location = document.Location or "" - + if new.document_type == "INFORMATION": new.name = document.Name or "Unnamed" - + elif new.document_type == "REFERENCE": file = document.file if file.schema == "IFC2X3": @@ -200,12 +204,12 @@ class Document(bonsai.core.tool.Document): info_children = natsorted( [d for d in children if d.is_a("IfcDocumentInformation")], - key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or "") + key=lambda doc: (cls.get_document_information_id(doc) or "", doc.Name or ""), ) ref_children = natsorted( [d for d in children if not d.is_a("IfcDocumentInformation")], - key=lambda doc: (cls.get_external_reference_id(doc) or "", doc.Description or doc.Name or "") + key=lambda doc: (cls.get_external_reference_id(doc) or "", doc.Description or doc.Name or ""), ) for child in info_children + ref_children: @@ -272,16 +276,18 @@ class Document(bonsai.core.tool.Document): props.json_string = json.dumps(expanded_docs) @classmethod - def get_default_parent_for_information(cls, ifc) -> Union[ifcopenshell.entity_instance, None]: - projects = ifc.get().by_type("IfcProject") + def get_default_parent_for_information(cls) -> Union[ifcopenshell.entity_instance, None]: + file = tool.Ifc.get() + projects = file.by_type("IfcProject") return projects[0] if projects else None @classmethod - def get_selected_document_information(cls, ifc) -> Union[ifcopenshell.entity_instance, None]: + def get_selected_document_information(cls) -> Union[ifcopenshell.entity_instance, None]: props = cls.get_document_props() if props.active_document and props.active_document.document_type == "INFORMATION": - return ifc.get().by_id(props.active_document.ifc_definition_id) + file = tool.Ifc.get() + return file.by_id(props.active_document.ifc_definition_id) return None @classmethod diff --git a/src/bonsai/test/core/test_document.py b/src/bonsai/test/core/test_document.py index ab3563551d..5baf3e709f 100644 --- a/src/bonsai/test/core/test_document.py +++ b/src/bonsai/test/core/test_document.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . - import bonsai.core.document as subject from test.core.bootstrap import ifc, document @@ -29,14 +28,6 @@ class TestLoadProjectDocuments: subject.load_project_documents(document) -class TestLoadDocument: - def test_run(self, document): - document.clear_document_tree().should_be_called() - document.disable_editing_document().should_be_called() - document.add_breadcrumb("document").should_be_called() - subject.load_document(document, document="document") - - class TestDisableDocumentEditingUi: def test_run(self, document): document.disable_editing_ui().should_be_called() @@ -44,38 +35,71 @@ class TestDisableDocumentEditingUi: subject.disable_document_editing_ui(document) +class TestDisableObjectDocumentEditingUi: + def test_run(self, document): + document.disable_object_editing_ui().should_be_called() + subject.disable_object_document_editing_ui(document) + + class TestEnableEditingDocument: def test_run(self, document): - document.import_document_attributes("document").should_be_called() document.set_active_document("document").should_be_called() - subject.enable_editing_document(document, document="document") + document.import_document_attributes("document").should_be_called() + subject.enable_editing_document(document, ifc_document="document") class TestDisableEditingDocument: def test_run(self, document): - document.disable_editing_document().should_be_called() + document.clear_active_document().should_be_called() + document.clear_document_attributes().should_be_called() subject.disable_editing_document(document) class TestAddInformation: def test_add_and_reload_tree_at_project_root(self, ifc, document): document.clear_document_tree().should_be_called() - ifc.run("document.add_information", parent=None).should_be_called().will_return("information") + document.get_default_parent_for_information().should_be_called().will_return("default_parent") + ifc.run("document.add_information", parent="default_parent").should_be_called().will_return("information") ifc.run("document.add_reference", information="information").should_be_called() + document.is_document_information("default_parent").should_be_called().will_return(True) + document.expand_document("default_parent").should_be_called() document.import_project_documents().should_be_called() + subject.add_information(ifc, document) def test_add_and_reload_tree_at_current_parent(self, ifc, document): document.clear_document_tree().should_be_called() ifc.run("document.add_information", parent="parent").should_be_called().will_return("information") ifc.run("document.add_reference", information="information").should_be_called() - subject.add_information(ifc, document) + document.is_document_information("parent").should_be_called().will_return(True) + document.expand_document("parent").should_be_called() + document.import_project_documents().should_be_called() + + subject.add_information(ifc, document, parent="parent") + + def test_add_without_expanding_if_parent_is_not_information(self, ifc, document): + document.clear_document_tree().should_be_called() + ifc.run("document.add_information", parent="parent").should_be_called().will_return("information") + ifc.run("document.add_reference", information="information").should_be_called() + document.is_document_information("parent").should_be_called().will_return(False) + document.import_project_documents().should_be_called() + + subject.add_information(ifc, document, parent="parent") class TestAddReference: - def test_run(self, ifc, document): + def test_run_with_selected_parent(self, ifc, document): + document.get_selected_document_information().should_be_called().will_return("parent") ifc.run("document.add_reference", information="parent").should_be_called() - document.clear_document_tree().should_be_called() + document.expand_document("parent").should_be_called() + document.import_project_documents().should_be_called() + + subject.add_reference(ifc, document) + + def test_run_without_selected_parent(self, ifc, document): + document.get_selected_document_information().should_be_called().will_return(None) + document.import_project_documents().should_be_called() + subject.add_reference(ifc, document) @@ -87,7 +111,7 @@ class TestEditDocument: document.disable_editing_document().should_be_called() document.clear_document_tree().should_be_called() document.import_project_documents().should_be_called() - subject.edit_document(ifc, document, document="document") + subject.edit_document(ifc, document, ifc_document="document") def test_edit_reference(self, ifc, document): document.export_document_attributes().should_be_called().will_return("attributes") @@ -95,7 +119,8 @@ class TestEditDocument: ifc.run("document.edit_reference", reference="document", attributes="attributes").should_be_called() document.disable_editing_document().should_be_called() document.clear_document_tree().should_be_called() - subject.edit_document(ifc, document, document="document") + document.import_project_documents().should_be_called() + subject.edit_document(ifc, document, ifc_document="document") class TestRemoveDocument: @@ -104,22 +129,23 @@ class TestRemoveDocument: document.is_document_information("document").should_be_called().will_return(True) ifc.run("document.remove_information", information="document").should_be_called() document.import_project_documents().should_be_called() - subject.remove_document(ifc, document, document="document") + subject.remove_document(ifc, document, ifc_document="document") def test_remove_reference(self, ifc, document): document.clear_document_tree().should_be_called() document.is_document_information("document").should_be_called().will_return(False) ifc.run("document.remove_reference", reference="document").should_be_called() - subject.remove_document(ifc, document, document="document") + document.import_project_documents().should_be_called() + subject.remove_document(ifc, document, ifc_document="document") class TestAssignDocument: def test_run(self, ifc): ifc.run("document.assign_document", products=["product"], document="document").should_be_called() - subject.assign_document(ifc, product="product", document="document") + subject.assign_document(ifc, product="product", ifc_document="document") class TestUnassignDocument: def test_run(self, ifc): ifc.run("document.unassign_document", products=["product"], document="document").should_be_called() - subject.unassign_document(ifc, product="product", document="document") + subject.unassign_document(ifc, product="product", ifc_document="document") diff --git a/src/bonsai/test/tool/test_document.py b/src/bonsai/test/tool/test_document.py index 628f040923..64ec2791b0 100644 --- a/src/bonsai/test/tool/test_document.py +++ b/src/bonsai/test/tool/test_document.py @@ -148,24 +148,23 @@ class TestImportProjectDocumentsExpanded(NewFile): document = ifcopenshell.api.document.add_information(ifc) reference = ifcopenshell.api.document.add_reference(ifc, information=document) - props = tool.Document.get_document_props() expanded_docs = [document.id()] # Mark document as expanded props.json_string = json.dumps(expanded_docs) - + subject.import_project_documents() props = tool.Document.get_document_props() # Should have project root + document + reference = 3 total assert len(props.documents) == 3 - + assert props.documents[0].ifc_definition_id == -project.id() assert props.documents[0].document_type == "PROJECT" - + doc_info = next((d for d in props.documents if d.ifc_definition_id == document.id()), None) assert doc_info is not None assert doc_info.document_type == "INFORMATION" - + doc_ref = next((d for d in props.documents if d.ifc_definition_id == reference.id()), None) assert doc_ref is not None assert doc_ref.location == "" @@ -180,24 +179,23 @@ class TestImportProjectDocumentsCollapsed(NewFile): project = ifc.createIfcProject() document = ifcopenshell.api.document.add_information(ifc) reference = ifcopenshell.api.document.add_reference(ifc, information=document) - props = tool.Document.get_document_props() props.json_string = json.dumps([]) # Empty expanded list - + subject.import_project_documents() props = tool.Document.get_document_props() # Should have project root + document = 2 total (reference not imported because parent is collapsed) assert len(props.documents) == 2 - + assert props.documents[0].ifc_definition_id == -project.id() assert props.documents[0].document_type == "PROJECT" - + doc_info = next((d for d in props.documents if d.ifc_definition_id == document.id()), None) assert doc_info is not None assert doc_info.document_type == "INFORMATION" - + doc_ref = next((d for d in props.documents if d.ifc_definition_id == reference.id()), None) assert doc_ref is None From 8205408a66713a1e9629ee9cc15d4393dc00686a Mon Sep 17 00:00:00 2001 From: falken10vdl <33285113+falken10vdl@users.noreply.github.com> Date: Sat, 10 Jan 2026 15:24:04 +0100 Subject: [PATCH 476/657] Add filter_mode property to BIMFacet for selection management (#7548) --- src/bonsai/bonsai/bim/prop.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index d4ed4f8a9b..f799076727 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -791,12 +791,21 @@ class BIMFacet(PropertyGroup): ("!*=", "does not contain", ""), ], ) + filter_mode: EnumProperty( + items=[ + ("ADD", "Add", "Add results to the current selection"), + ("SUBTRACT", "Subtract", "Remove results from the current selection"), + ("FILTER", "Filter", "Filter the current selection"), + ], + default="ADD", + ) if TYPE_CHECKING: pset: str value: str type: str comparison: Literal["=", "!=", ">=", "<=", ">", "<", "*=", "!*="] + filter_mode: Literal["ADD", "SUBTRACT", "FILTER"] class BIMFilterGroup(PropertyGroup): From c2b72440a271e6b7d1ae8faa905d6e09d9930969 Mon Sep 17 00:00:00 2001 From: falken10vdl <33285113+falken10vdl@users.noreply.github.com> Date: Sat, 10 Jan 2026 15:30:43 +0100 Subject: [PATCH 477/657] Use helper function for search suggestions in literal property drawing (#7547) --- src/bonsai/bonsai/bim/module/drawing/ui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/ui.py b/src/bonsai/bonsai/bim/module/drawing/ui.py index 552ca7f9b4..c781d6ea23 100644 --- a/src/bonsai/bonsai/bim/module/drawing/ui.py +++ b/src/bonsai/bonsai/bim/module/drawing/ui.py @@ -679,7 +679,7 @@ class BIM_PT_text(Panel): if len(literal_props.attributes) > 0 and i < len(props.literal_apply_settings): row = box.row(align=True) - row.prop(literal_props.attributes[0], "string_value", text="Literal") + bonsai.bim.helper.draw_attribute(literal_props.attributes[0], row, enable_search=True) expand_icon = "DOWNARROW_HLT" if getattr(literal_props, "show_element_values", False) else "RIGHTARROW" op = row.operator("bim.toggle_element_values_panel", icon=expand_icon, text="") From 15bbdc808527df58bec62627d146c9f6123ae890 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 10 Jan 2026 09:36:36 -0600 Subject: [PATCH 478/657] Fix #7539: preserve nested aggregate structure when refreshing linked aggregates --- .../bonsai/bim/module/geometry/operator.py | 133 ++++++++++++------ 1 file changed, 89 insertions(+), 44 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index d148b3df05..4282cd8625 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1491,6 +1491,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): old_to_new = {} original_data: dict[int, dict[int, dict[str, Any]]] = {} + # Define all nested functions FIRST def delete_objects(element: ifcopenshell.entity_instance) -> None: """Remove IfcElementAssembly and it's parts.""" parts = ifcopenshell.util.element.get_parts(element) @@ -1542,7 +1543,10 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): if r.is_a("IfcRelAssignsToGroup") if self.group_name in r.RelatingGroup.Name ).id() - original_data[group] = {} + + # Initialize if not exists + if group not in original_data: + original_data[group] = {} pset: dict[str, Any] = ifcopenshell.util.element.get_pset(element, self.pset_name) index: int = pset["Index"] @@ -1559,8 +1563,13 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): if parts: for part in parts: if part.is_a("IfcElementAssembly"): - # TODO: unused expression. - original_data | get_original_data(part) + # Recursively collect data from nested assemblies + nested_data = get_original_data(part) + # Merge nested data into original_data + for nested_group_id, nested_group_data in nested_data.items(): + if nested_group_id not in original_data: + original_data[nested_group_id] = {} + original_data[nested_group_id].update(nested_group_data) else: try: pset = ifcopenshell.util.element.get_pset(part, self.pset_name) @@ -1584,50 +1593,100 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): ): # if element has parts it means it is the base of and aggregate or sub-aggregate aggregate = element - group = next( - r.RelatingGroup + # Get the new group + new_group_entity = next( + (r.RelatingGroup for r in getattr(aggregate, "HasAssignments", []) or [] if r.is_a("IfcRelAssignsToGroup") - if self.group_name in r.RelatingGroup.Name - ).id() - if not group: + if self.group_name in r.RelatingGroup.Name), + None + ) + + if not new_group_entity: return pset = ifcopenshell.util.element.get_pset(element, self.pset_name) + if not pset: + return + index = pset["Index"] + # Find the matching old group by looking for the same aggregate name + matching_group_id = None if index == 0: - obj.name = pset["Name"] + "_" + str(original_data[group][index]["Aggregate_Index"]) + # This is a root assembly - find by Name + aggregate_name = pset.get("Name") + for group_id, group_data in original_data.items(): + if 0 in group_data and group_data[0].get("Name") == aggregate_name: + matching_group_id = group_id + break + else: + # This is a part - find the group that has this index + for group_id, group_data in original_data.items(): + if index in group_data: + matching_group_id = group_id + break + + if matching_group_id is None: + return + + if index == 0: + obj.name = pset["Name"] + "_" + str(original_data[matching_group_id][index]["Aggregate_Index"]) ifc_file = tool.Ifc.get() ifcopenshell.api.pset.edit_pset( ifc_file, ifc_file.by_id(pset["id"]), - properties={"Aggregate_Index": int(original_data[group][index]["Aggregate_Index"])}, + properties={"Aggregate_Index": int(original_data[matching_group_id][index]["Aggregate_Index"])}, ) - bonsai.core.spatial.assign_container( - tool.Ifc, - tool.Collector, - tool.Spatial, - container=original_data[group][index]["Container"], - element_obj=obj, - ) - for part in ifcopenshell.util.element.get_parts(tool.Ifc.get_entity(obj)): - tool.Collector.assign(tool.Ifc.get_object(part)) - assignments = original_data[group][index]["Assignment"] + + # Only assign container if element is not already aggregated under another element + # Aggregated elements should not be in the spatial structure + if not ifcopenshell.util.element.get_aggregate(element): + bonsai.core.spatial.assign_container( + tool.Ifc, + tool.Collector, + tool.Spatial, + container=original_data[matching_group_id][index]["Container"], + element_obj=obj, + ) + for part in ifcopenshell.util.element.get_parts(tool.Ifc.get_entity(obj)): + tool.Collector.assign(tool.Ifc.get_object(part)) + + assignments = original_data[matching_group_id][index]["Assignment"] if assignments: assign_to_annotations(obj, assignments) else: try: - obj.name = original_data[group][index]["Name"] + obj.name = original_data[matching_group_id][index]["Name"] except: pass try: - assignments = original_data[group][index]["Assignment"] + assignments = original_data[matching_group_id][index]["Assignment"] except: assignments = [] if assignments: assign_to_annotations(obj, assignments) + def get_original_matrix( + element: ifcopenshell.entity_instance, base_instance: ifcopenshell.entity_instance + ) -> tuple[Matrix, tuple[Vector, Quaternion, Vector]]: + selected_obj = tool.Ifc.get_object(base_instance) + selected_matrix = selected_obj.matrix_world + object_duplicate = tool.Ifc.get_object(element) + duplicate_matrix = object_duplicate.matrix_world.decompose() + + return selected_matrix, duplicate_matrix + + def set_new_matrix( + selected_matrix: Matrix, duplicate_matrix: tuple[Vector, Quaternion, Vector], old_to_new: dict + ) -> None: + for old, new in old_to_new.items(): + new_obj = tool.Ifc.get_object(new[0]) + new_base_matrix = Matrix.LocRotScale(*duplicate_matrix) + matrix_diff = Matrix.inverted(selected_matrix) @ new_obj.matrix_world + new_obj_matrix = new_base_matrix @ matrix_diff + new_obj.matrix_world = new_obj_matrix + def get_element_assembly(element: ifcopenshell.entity_instance) -> Union[ifcopenshell.entity_instance, None]: if element.is_a("IfcElementAssembly"): return element @@ -1671,26 +1730,6 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): return list(set(linked_aggregate_groups)), selected_parents - def get_original_matrix( - element: ifcopenshell.entity_instance, base_instance: ifcopenshell.entity_instance - ) -> tuple[Matrix, tuple[Vector, Quaternion, Vector]]: - selected_obj = tool.Ifc.get_object(base_instance) - selected_matrix = selected_obj.matrix_world - object_duplicate = tool.Ifc.get_object(element) - duplicate_matrix = object_duplicate.matrix_world.decompose() - - return selected_matrix, duplicate_matrix - - def set_new_matrix( - selected_matrix: Matrix, duplicate_matrix: tuple[Vector, Quaternion, Vector], old_to_new: dict - ) -> None: - for old, new in old_to_new.items(): - new_obj = tool.Ifc.get_object(new[0]) - new_base_matrix = Matrix.LocRotScale(*duplicate_matrix) - matrix_diff = Matrix.inverted(selected_matrix) @ new_obj.matrix_world - new_obj_matrix = new_base_matrix @ matrix_diff - new_obj.matrix_world = new_obj_matrix - active_element = tool.Ifc.get_entity(context.active_object) if not active_element: self.report({"INFO"}, "Object has no Ifc metadata.") @@ -1727,6 +1766,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): base_pset = ifcopenshell.util.element.get_pset(base_instance, self.pset_name) base_obj = tool.Ifc.get_object(base_instance) base_obj.name = base_pset["Name"] + "_" + str(base_pset["Aggregate_Index"]) + for element in instances_to_refresh: if element.GlobalId == base_instance.GlobalId: continue @@ -1735,7 +1775,12 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): selected_matrix, duplicate_matrix = get_original_matrix(element, base_instance) - original_data = get_original_data(element) + # Merge data instead of overwriting + element_original_data = get_original_data(element) + for group_id, group_data in element_original_data.items(): + if group_id not in original_data: + original_data[group_id] = {} + original_data[group_id].update(group_data) delete_objects(element) @@ -1749,7 +1794,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): set_new_matrix(selected_matrix, duplicate_matrix, old_to_new) for old, new in old_to_new.items(): - if element_aggregate and new[0].is_a("IfcElementAssembly"): + if element_aggregate and new[0].is_a("IfcElementAssembly") and old == base_instance: new_aggregate = ifcopenshell.util.element.get_aggregate(new[0]) if not new_aggregate: From 0243519a68445eab760d68b954b1abd7ed8933f5 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sun, 11 Jan 2026 14:22:58 +0100 Subject: [PATCH 479/657] Refactor port connection logic and UI integration for improved usability --- .../bonsai/bim/module/system/operator.py | 64 ++++++++--------- src/bonsai/bonsai/bim/module/system/prop.py | 71 ++++++------------- src/bonsai/bonsai/bim/module/system/ui.py | 14 ++-- src/bonsai/bonsai/tool/system.py | 10 +-- 4 files changed, 58 insertions(+), 101 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index e60f4500ec..7f298064fc 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -265,37 +265,31 @@ class ConnectPort(bpy.types.Operator, tool.Ifc.Operator): class AddRelatedPortConnection(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.add_related_port_connection" bl_label = "Connect Port" - bl_description = "Click to select a port to connect to" bl_options = {"REGISTER", "UNDO"} - - element_id: bpy.props.IntProperty(default=0, options={"SKIP_SAVE"}) - + + relating_port_id: bpy.props.IntProperty() + def invoke(self, context, event): - if self.element_id == 0: - self.report({'ERROR'}, "No port specified") - return {'CANCELLED'} - context.window_manager.modal_handler_add(self) - return {'RUNNING_MODAL'} - - def modal(self, context, event): - if event.type == 'LEFTMOUSE' and event.value == 'PRESS': - if context.active_object: - target_element = tool.Ifc.get_entity(context.active_object) - if target_element and target_element.is_a("IfcDistributionPort"): - source_element = tool.Ifc.get().by_id(self.element_id) - core.connect_port(tool.Ifc, port1=source_element, port2=target_element) - self.report({'INFO'}, "Ports connected") - return {'FINISHED'} - else: - self.report({'WARNING'}, "Selected object is not a port") - return {'RUNNING_MODAL'} - elif event.type in {'RIGHTMOUSE', 'ESC'}: - self.report({'INFO'}, "Cancelled") - return {'CANCELLED'} - return {'RUNNING_MODAL'} - + return context.window_manager.invoke_props_dialog(self) + + def draw(self, context): + props = tool.System.get_system_props() + self.layout.prop(props, "related_port", text="Select Port") + def _execute(self, context): - return {'CANCELLED'} + props = tool.System.get_system_props() + + if not props.related_port or props.related_port == "NONE": + return {"CANCELLED"} + + port_obj = bpy.data.objects.get(props.related_port) + related_port = tool.Ifc.get_entity(port_obj) + relating_port = tool.Ifc.get().by_id(self.relating_port_id) + + core.connect_port(tool.Ifc, port1=relating_port, port2=related_port) + PortData.is_loaded = False + + return {"FINISHED"} class DisconnectPort(bpy.types.Operator, tool.Ifc.Operator): @@ -454,19 +448,19 @@ class CycleFlowDirection(bpy.types.Operator, tool.Ifc.Operator): return {"CANCELLED"} current_direction = port.FlowDirection or "NOTDEFINED" - flow_cycle = ["SOURCE", "SINK", "SOURCEANDSINK", "NOTDEFINED"] - try: - current_index = flow_cycle.index(current_direction) - next_direction = flow_cycle[(current_index + 1) % len(flow_cycle)] - except ValueError: - next_direction = "SOURCE" + flow_cycle_map = { + "SOURCE": "SINK", + "SINK": "SOURCEANDSINK", + "SOURCEANDSINK": "NOTDEFINED", + "NOTDEFINED": "SOURCE" + } + next_direction = flow_cycle_map.get(current_direction, "SOURCE") tool.Ifc.run("attribute.edit_attributes", product=port, attributes={"FlowDirection": next_direction}) connected_port = tool.System.get_connected_port(port) if connected_port: - # Map flow direction to connected port's complementary direction connected_direction_map = { "SOURCE": "SINK", "SINK": "SOURCE", diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index 6e9681694b..bb72fda1a9 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -34,7 +34,7 @@ from bpy.props import ( FloatVectorProperty, CollectionProperty, ) -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING, Union, Optional def get_system_class(self: "BIMSystemProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: @@ -93,51 +93,24 @@ def toggle_decorations(self: "BIMSystemProperties", context: bpy.types.Context) decorator.SystemDecorator.uninstall() -def is_port_available_for_connection(self: "BIMSystemProperties", obj: bpy.types.Object) -> bool: - element = tool.Ifc.get_entity(obj) - if not element or not element.is_a("IfcDistributionPort"): - return False - connected_port = tool.System.get_connected_port(element) - if connected_port is not None: - return False +def get_available_ports_for_connection(self: "BIMSystemProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: + items = [] + active_object_ports = set(tool.System.get_ports(tool.Ifc.get_entity(context.active_object))) - if bpy.context.active_object: - active_element = tool.Ifc.get_entity(bpy.context.active_object) - if active_element: - active_ports = tool.System.get_ports(active_element) - if element in active_ports: - return False + ifc_file = tool.Ifc.get() + for ifc_port in ifc_file.by_type("IfcDistributionPort"): + port = tool.Ifc.get_object(ifc_port) + if not port: + continue + + if tool.System.get_connected_port(ifc_port) is not None or ifc_port in active_object_ports: + continue + + port_object = tool.Ifc.get_object(tool.System.get_port_relating_element(ifc_port)) + suggestion = f"{port_object.name} > {port.name}" + items.append((port.name, suggestion, "")) - return True - - -def update_related_port_object(self: "BIMSystemProperties", context: bpy.types.Context) -> None: - if self.related_port_object is None: - return - if not context.active_object: - return - - source_element = tool.Ifc.get_entity(context.active_object) - target_element = tool.Ifc.get_entity(self.related_port_object) - - if not source_element or not target_element: - return - - if not target_element.is_a("IfcDistributionPort"): - return - - source_port = None - for port in tool.System.get_ports(source_element): - if not tool.System.get_connected_port(port): - source_port = port - break - - if not source_port: - return - - core.connect_port(tool.Ifc, port1=source_port, port2=target_element) - PortData.is_loaded = False - self.related_port_object = None + return items if items else [("NONE", "Ports are hidden or not available", "")] class BIMSystemProperties(PropertyGroup): @@ -155,12 +128,10 @@ class BIMSystemProperties(PropertyGroup): should_draw_decorations: BoolProperty( name="Should Draw Decorations", description="Toggle system decorations", update=toggle_decorations ) - related_port_object: PointerProperty( - type=bpy.types.Object, + related_port: EnumProperty( name="Connect To Port", - description="Select a port to connect to. Use eyedropper to pick a port object", - poll=is_port_available_for_connection, - update=update_related_port_object, + description="Select a port to connect to", + items=get_available_ports_for_connection, ) if TYPE_CHECKING: @@ -174,7 +145,7 @@ class BIMSystemProperties(PropertyGroup): edited_system_id: int system_class: str should_draw_decorations: bool - related_port_object: Union[bpy.types.Object, None] + related_port: str @property def active_system_ui_item(self) -> Union[System, None]: diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index 6e71e5486f..c4b142c31f 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -181,9 +181,8 @@ class BIM_PT_ports(Panel): op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = port_data["id"] else: - blank0 = cols[0].column(align=True) - blank0.scale_x = 0.1 - blank0.label(text="", icon="BLANK1") + op = cols[0].operator("bim.add_related_port_connection", text="", icon='PLUGIN') + op.relating_port_id = port_data["id"] op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = port_data["id"] @@ -236,15 +235,14 @@ class BIM_PT_ports(Panel): blank5.scale_x = 0.1 blank5.label(text="", icon="BLANK1") - col6_row = cols[6].row(align=True) - col6_row.alignment = 'LEFT' - col6_row.prop(props, "related_port_object", text="", icon='OBJECT_DATA') - col6_row.scale_x = 0.35 + cols[6].label(text="Port is disconnected") blank7 = cols[7].column(align=True) blank7.scale_x = 0.1 blank7.label(text="", icon="BLANK1") - cols[8].label(text="Port is disconnected") + blank8 = cols[8].column(align=True) + blank8.scale_x = 0.1 + blank8.label(text="", icon="BLANK1") class BIM_PT_port(Panel): diff --git a/src/bonsai/bonsai/tool/system.py b/src/bonsai/bonsai/tool/system.py index 38a93a3649..0236b40fbd 100644 --- a/src/bonsai/bonsai/tool/system.py +++ b/src/bonsai/bonsai/tool/system.py @@ -117,14 +117,8 @@ class System(bonsai.core.tool.System): port.PredefinedType = "USERDEFINED" systems = ifcopenshell.util.system.get_element_systems(element) - if systems: - system = systems[0] - if hasattr(system, "PredefinedType") and system.PredefinedType: - port.SystemType = system.PredefinedType - else: - port.SystemType = "USERDEFINED" - else: - port.SystemType = "USERDEFINED" + system = systems[0] if systems else None + port.SystemType = getattr(system, "PredefinedType", None) or "USERDEFINED" matrix = element_obj.matrix_world.copy() matrix.translation = bpy.context.scene.cursor.matrix.translation From e5ccd26762fe03b56e2a874da91880edfeb46d62 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sun, 11 Jan 2026 14:46:17 +0100 Subject: [PATCH 480/657] Update port UI to indicate disconnection status more clearly --- src/bonsai/bonsai/bim/module/system/ui.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index c4b142c31f..ad8d5b5c03 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -326,10 +326,9 @@ class BIM_PT_port(Panel): else: cols[4].label(text="", icon="BLANK1") cols[5].label(text="", icon="BLANK1") - cols[6].alignment = 'LEFT' - cols[6].prop(props, "related_port_object", text="") + cols[6].label(text="Port is disconnected") cols[7].label(text="", icon="BLANK1") - cols[8].label(text="Port is disconnected") + cols[8].label(text="") class BIM_PT_flow_controls(Panel): From 7f87f1fb89fb001320223a4d85e6267f342bf13c Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 11 Jan 2026 18:43:07 -0600 Subject: [PATCH 481/657] fix #7537 - Layer thickness correct when slab is rotated and few other features... - Add dual-rotation support for AXIS3 slabs (IFC angle + object rotation) - Fix profile editing to display horizontal projection for tilted slabs - Fix AXIS2 layer slicing to use local extrusion direction for walls - Fix ChangeExtrusionDepth to refresh geometry after depth changes - Remove rotation lock on slabs to allow free rotation - Fix undefined variable bug in add_slab_representation.py --- src/bonsai/bonsai/bim/module/model/slab.py | 312 ++++++++++++++---- src/bonsai/bonsai/bim/module/model/wall.py | 154 ++++++--- src/bonsai/bonsai/tool/collector.py | 2 - src/bonsai/bonsai/tool/loader.py | 70 +++- .../api/geometry/add_slab_representation.py | 42 ++- .../api/geometry/add_wall_representation.py | 3 +- 6 files changed, 451 insertions(+), 132 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index ddc7c1d9a8..dd65f9c1c1 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -35,7 +35,7 @@ import bonsai.core.geometry import bonsai.core.root import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from math import cos, pi +from math import cos, sin, pi, acos, degrees from mathutils import Vector, Matrix from bonsai.bim.module.model.decorator import ProfileDecorator, PolylineDecorator, ProductDecorator from bonsai.bim.module.model.polyline import PolylineOperator @@ -296,50 +296,65 @@ class DumbSlabPlaner: if representation: extrusion = tool.Model.get_extrusion(representation) if extrusion: - # TODO Right now we don't have a reliable way to calculate the existing x_angle only based solely on the extrusion direction. - # For instances, a 30 degrees angled extrusion with positive direction has the same extrusion direction as a - # -150 degrees angled extrusion with negative direction. The difference lies in the object's rotation. - # This means that things can get messy if the user changes the object x angle somehow. We have to figure out an alternative approach. - existing_x_angle = obj.rotation_euler.x - existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle - existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle - existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 2 * pi, tolerance=0.001) else existing_x_angle direction_ratios = Vector(extrusion.ExtrudedDirection.DirectionRatios) - offset_direction = direction_ratios.copy() - perpendicular_depth = thickness * abs(1 / cos(existing_x_angle)) - perpendicular_offset = layer_offset * abs(1 / cos(existing_x_angle)) / self.unit_scale - - # Check angle and z direction to determine whether the extrusion direction is positive or negative - if (abs(existing_x_angle) < (pi / 2) and direction_ratios.z > 0) or ( - abs(existing_x_angle) > (pi / 2) and direction_ratios.z < 0 - ): - # The extrusion direction is positive. If the layer_parameter is set to negative, - # then the we change the extrusion direction. - if layer_params["direction_sense"] == "NEGATIVE": - direction_ratios *= -1 - elif (abs(existing_x_angle) > (pi / 2) and direction_ratios.z > 0) or ( - abs(existing_x_angle) < (pi / 2) and direction_ratios.z < 0 - ): - # The extrusion direction is negative. If the layer_parameter is set to positive, - # then the we change the extrusion direction. And the offset direction should remain positive - # for either direction sense, so we change it. - offset_direction *= -1 - if layer_params["direction_sense"] == "POSITIVE": - direction_ratios *= -1 - - extrusion.ExtrudedDirection.DirectionRatios = tuple(direction_ratios) - extrusion.Depth = perpendicular_depth - - ifc_position = extrusion.Position - position = offset_direction * perpendicular_offset - material = ifcopenshell.util.element.get_material(element) - if material: - if material.is_a("IfcMaterialLayerSetUsage"): - material.OffsetFromReferenceLine = position.z - if ifc_position: - ifc_position.Location.Coordinates = position + + # Calculate the actual extrusion angle from vertical + extrusion_angle = 0 + if direction_ratios.length > 0: + cos_angle = direction_ratios.normalized().dot(Vector((0, 0, 1))) + extrusion_angle = acos(min(max(cos_angle, -1), 1)) + + # FIX: Only apply 1/cos factor when there's actual extrusion slope + if extrusion_angle > 1e-6: + perpendicular_depth = thickness * abs(1 / cos(extrusion_angle)) + perpendicular_offset = layer_offset * abs(1 / cos(extrusion_angle)) / self.unit_scale else: - tool.Model.add_extrusion_position(extrusion, position) + perpendicular_depth = thickness + perpendicular_offset = layer_offset / self.unit_scale + + # Check if direction sense needs to be applied + # This should only happen if explicitly requested, not automatically + if layer_params.get("apply_direction_sense", False): + # Store current direction before potential change + old_direction = direction_ratios.copy() + + # Apply direction sense logic + existing_x_angle = extrusion_angle + if (abs(existing_x_angle) < (pi / 2) and direction_ratios.z > 0) or ( + abs(existing_x_angle) > (pi / 2) and direction_ratios.z < 0 + ): + if layer_params["direction_sense"] == "NEGATIVE": + direction_ratios *= -1 + elif (abs(existing_x_angle) > (pi / 2) and direction_ratios.z > 0) or ( + abs(existing_x_angle) < (pi / 2) and direction_ratios.z < 0 + ): + offset_direction = direction_ratios.copy() * -1 + if layer_params["direction_sense"] == "POSITIVE": + direction_ratios *= -1 + + # If direction changed, update extrusion with rotation compensation + if (direction_ratios.normalized() - old_direction.normalized()).length > 1e-6: + update_extrusion_direction(element, tuple(direction_ratios), obj) + # After updating direction, get the updated extrusion + extrusion = tool.Model.get_extrusion(representation) + + # Update depth + extrusion.Depth = perpendicular_depth + + # Update position + ifc_position = extrusion.Position + if direction_ratios.length > 0: + offset_vector = direction_ratios.normalized() * perpendicular_offset + position = offset_vector + + material = ifcopenshell.util.element.get_material(element) + if material and material.is_a("IfcMaterialLayerSetUsage"): + material.OffsetFromReferenceLine = position.z + + if ifc_position: + ifc_position.Location.Coordinates = position + else: + tool.Model.add_extrusion_position(extrusion, position) else: props = tool.Model.get_model_props() @@ -383,6 +398,113 @@ class DumbSlabPlaner: ) + def update_extrusion_direction(element: ifcopenshell.entity_instance, + new_direction_ratios: tuple, + obj: bpy.types.Object = None) -> None: + """ + Update extrusion direction while preserving overall object orientation. + + Args: + element: The IFC element + new_direction_ratios: New extrusion direction ratios (x,y,z) + obj: Optional Blender object (will be fetched if not provided) + """ + if not obj: + obj = tool.Ifc.get_object(element) + if not obj: + return + + representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") + if not representation: + return + + extrusion = tool.Model.get_extrusion(representation) + if not extrusion: + return + + # Get current extrusion direction + old_direction = Vector(extrusion.ExtrudedDirection.DirectionRatios) + if old_direction.length == 0: + old_direction = Vector((0, 0, 1)) # Default + + new_direction = Vector(new_direction_ratios) + if new_direction.length == 0: + new_direction = Vector((0, 0, 1)) # Default + + # Normalize both directions + old_direction_normalized = old_direction.normalized() + new_direction_normalized = new_direction.normalized() + + # Store current object matrix + old_matrix = obj.matrix_world.copy() + + # Calculate the rotation needed to keep same orientation + # When extrusion direction changes from A to B relative to local coordinates, + # we need to rotate the object by the inverse of that change + + # Calculate rotation from old to new direction + rotation_axis = old_direction_normalized.cross(new_direction_normalized) + if rotation_axis.length > 1e-6: + rotation_axis.normalized() + dot_product = old_direction_normalized.dot(new_direction_normalized) + angle = acos(min(max(dot_product, -1), 1)) + + # Apply INVERSE rotation to object to compensate + rotation_matrix = Matrix.Rotation(-angle, 4, rotation_axis) + + # Update object rotation + obj.matrix_world = old_matrix @ rotation_matrix + bpy.context.view_layer.update() + + # Update extrusion direction (keeping magnitude) + if old_direction.length > 0: + # Preserve the magnitude of the original direction vector + magnitude = old_direction.length + new_direction = new_direction_normalized * magnitude + + extrusion.ExtrudedDirection.DirectionRatios = tuple(new_direction) + + # Update depth based on new extrusion angle + extrusion_angle = 0 + if new_direction.length > 0: + cos_angle = new_direction_normalized.dot(Vector((0, 0, 1))) + extrusion_angle = acos(min(max(cos_angle, -1), 1)) + + # Get current depth (perpendicular depth) + current_perpendicular_depth = extrusion.Depth + + # If we have material layer info, calculate actual thickness + material = ifcopenshell.util.element.get_material(element) + actual_thickness = current_perpendicular_depth + if material and material.is_a("IfcMaterialLayerSetUsage"): + layer_set = material.ForLayerSet + actual_thickness = sum([l.LayerThickness for l in layer_set.MaterialLayers]) + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + actual_thickness *= unit_scale + + # Convert to perpendicular depth if needed + if extrusion_angle > 1e-6: + new_perpendicular_depth = actual_thickness * abs(1 / cos(extrusion_angle)) + else: + new_perpendicular_depth = actual_thickness + + extrusion.Depth = new_perpendicular_depth + + # Update position offset if needed + if extrusion.Position: + # Recalculate offset based on new direction + material = ifcopenshell.util.element.get_material(element) + if material and material.is_a("IfcMaterialLayerSetUsage"): + offset = material.OffsetFromReferenceLine + if extrusion_angle > 1e-6: + perpendicular_offset = offset * abs(1 / cos(extrusion_angle)) + else: + perpendicular_offset = offset + + offset_vector = new_direction_normalized * perpendicular_offset + extrusion.Position.Location.Coordinates = tuple(offset_vector) + + class EnableEditingSketchExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_sketch_extrusion_profile" bl_label = "Enable Editing Sketch Extrusion Profile" @@ -656,6 +778,8 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): extrusion = tool.Model.get_extrusion(body) existing_x_angle = tool.Model.get_existing_x_angle(extrusion) layer_params = tool.Model.get_material_layer_parameters(element) + + usage_type = tool.Model.get_usage_type(element) if extrusion.Position: position = Matrix(ifcopenshell.util.placement.get_axis2placement(extrusion.Position).tolist()) @@ -669,22 +793,49 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): tranlation_matrix = Matrix.Translation(rot_offset) position = position @ tranlation_matrix - # Restore Object rotation to zero - local_rot_mat = obj.rotation_euler.to_matrix() - rot_mat = Matrix.Rotation(-existing_x_angle, 4, "X") - new_rot_mat = local_rot_mat.to_4x4() @ rot_mat - new_rot_euler = new_rot_mat.to_euler() - obj.rotation_euler = new_rot_euler + # For AXIS3 with dual rotation: Reset rotation to zero so profile is horizontal + if usage_type == "LAYER3": + # Store original rotation for later restoration + original_rotation_x = obj.rotation_euler.x + obj["pre_edit_rotation_x"] = original_rotation_x + + # Reset rotation to zero - profile will be horizontal + current_z_rot = obj.rotation_euler.z + obj.rotation_euler.x = 0.0 + obj.rotation_euler.z = current_z_rot + else: + # Original behavior: Restore Object rotation to zero + local_rot_mat = obj.rotation_euler.to_matrix() + rot_mat = Matrix.Rotation(-existing_x_angle, 4, "X") + new_rot_mat = local_rot_mat.to_4x4() @ rot_mat + new_rot_euler = new_rot_mat.to_euler() + obj.rotation_euler = new_rot_euler else: position = Matrix() - tool.Model.import_profile(extrusion.SweptArea, obj=obj, position=position, x_angle=existing_x_angle) + # Import profile with correct x_angle + if usage_type == "LAYER3": + # For LAYER3: Use x_angle=0 and scale by cos(rotation) to get horizontal projection + obj_x_rotation = original_rotation_x # Use stored original rotation + scale_factor = abs(cos(obj_x_rotation)) if abs(obj_x_rotation) > 1e-6 else 1.0 + + # Import with x_angle=0 + tool.Model.import_profile(extrusion.SweptArea, obj=obj, position=position, x_angle=0) + + # Scale the Y coordinates by cos(rotation) to get horizontal projection + bpy.ops.object.mode_set(mode='OBJECT') + for vert in obj.data.vertices: + vert.co.y *= scale_factor + else: + # For other types: Use existing_x_angle + tool.Model.import_profile(extrusion.SweptArea, obj=obj, position=position, x_angle=existing_x_angle) 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: tool.Blender.set_viewport_tool("bim.cad_tool") + return {"FINISHED"} @@ -706,6 +857,8 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): extrusion = tool.Model.get_extrusion(body) existing_x_angle = tool.Model.get_existing_x_angle(extrusion) layer_params = tool.Model.get_material_layer_parameters(element) + usage_type = tool.Model.get_usage_type(element) + if extrusion.Position: position = Matrix(ifcopenshell.util.placement.get_axis2placement(extrusion.Position).tolist()) position.translation *= self.unit_scale @@ -718,20 +871,40 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): tranlation_matrix = Matrix.Translation(rot_offset) position = position @ tranlation_matrix - # Restore Object rotation to x_angle - local_rot_mat = obj.rotation_euler.to_matrix() - rot_mat = Matrix.Rotation(existing_x_angle, 4, "X") - new_rot_mat = local_rot_mat.to_4x4() @ rot_mat - new_rot_euler = new_rot_mat.to_euler() - obj.rotation_euler = new_rot_euler + # Restore rotation + if usage_type == "LAYER3": + # Restore original rotation from before editing + if "pre_edit_rotation_x" in obj: + current_z_rot = obj.rotation_euler.z + obj.rotation_euler.x = obj["pre_edit_rotation_x"] + obj.rotation_euler.z = current_z_rot + del obj["pre_edit_rotation_x"] + else: + # Original behavior + local_rot_mat = obj.rotation_euler.to_matrix() + rot_mat = Matrix.Rotation(existing_x_angle, 4, "X") + new_rot_mat = local_rot_mat.to_4x4() @ rot_mat + new_rot_euler = new_rot_mat.to_euler() + obj.rotation_euler = new_rot_euler else: position = Matrix() - profile = tool.Model.export_profile(obj, position=position, x_angle=existing_x_angle) + # Export profile with correct x_angle + if usage_type == "LAYER3": + # Scale Y coordinates back up before exporting + obj_x_rotation = obj.rotation_euler.x + scale_factor = abs(cos(obj_x_rotation)) if abs(obj_x_rotation) > 1e-6 else 1.0 + + # Un-scale the profile before exporting + for vert in obj.data.vertices: + vert.co.y /= scale_factor # Inverse of import scaling + + profile = tool.Model.export_profile(obj, position=position, x_angle=0) + else: + profile = tool.Model.export_profile(obj, position=position, x_angle=existing_x_angle) if not profile: - def msg(self, context): self.layout.label(text="INVALID PROFILE") @@ -781,6 +954,29 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): ) + footprint_context = ifcopenshell.util.representation.get_context( + tool.Ifc.get(), "Plan", "FootPrint", "SKETCH_VIEW" + ) + if not footprint_context: + return + + curves = [profile.OuterCurve] + if profile.is_a("IfcArbitraryProfileDefWithVoids"): + curves.extend(profile.InnerCurves) + new_footprint = ifcopenshell.api.geometry.add_footprint_representation( + tool.Ifc.get(), context=footprint_context, curves=curves + ) + old_footprint = ifcopenshell.util.representation.get_representation(element, "Plan", "FootPrint", "SKETCH_VIEW") + if old_footprint: + for inverse in tool.Ifc.get().get_inverse(old_footprint): + ifcopenshell.util.element.replace_attribute(inverse, old_footprint, new_footprint) + bonsai.core.geometry.remove_representation(tool.Ifc, tool.Geometry, obj=obj, representation=old_footprint) + else: + ifcopenshell.api.geometry.assign_representation( + tool.Ifc.get(), product=element, representation=new_footprint + ) + + class ResetVertex(bpy.types.Operator): bl_idname = "bim.reset_vertex" bl_label = "Reset Vertex" diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index 5b858dec83..8557ae6ccb 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -43,7 +43,7 @@ import bonsai.core.geometry import bonsai.core.model as core import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from math import pi, sin, cos, degrees, atan2 +from math import pi, sin, cos, degrees, atan2, acos from mathutils import Vector, Matrix from bonsai.bim.module.model.opening import FilledOpeningGenerator from bonsai.bim.module.model.decorator import PolylineDecorator, ProductDecorator @@ -397,27 +397,46 @@ class ChangeExtrusionDepth(bpy.types.Operator, tool.Ifc.Operator): for obj in selected_objs: element = tool.Ifc.get_entity(obj) assert element + representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if not representation: continue + extrusion = tool.Model.get_extrusion(representation) if not extrusion: continue + + # Get extrusion direction x, y, z = extrusion.ExtrudedDirection.DirectionRatios + + # Calculate angle from vertical x_angle = Vector((0, 1)).angle_signed(Vector((y, z))) - extrusion.Depth = self.depth / si_conversion * (1 / cos(x_angle)) + + # For sloped walls, compensate so VERTICAL height = target depth + cos_angle = cos(x_angle) + compensation_factor = abs(1 / cos_angle) if abs(cos_angle) > 1e-6 else 1.0 + new_depth_ifc = (self.depth / si_conversion) * compensation_factor + + extrusion.Depth = new_depth_ifc + + # IMPORTANT: Refresh the geometry to reflect the IFC changes + bonsai.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj=obj, + representation=representation, + ) + if tool.Model.get_usage_type(element) == "LAYER2": for rel in element.ConnectedFrom: if rel.is_a() == "IfcRelConnectsElements": - ifcopenshell.api.geometry.disconnect_element( - ifc_file, - relating_element=rel.RelatingElement, - related_element=element, - ) - layer2_objs.append(obj) + related_element = rel.RelatedElement + if related_element.is_a() == "IfcWall": + layer2_objs.append(tool.Ifc.get_object(related_element)) if layer2_objs: tool.Model.recalculate_walls(layer2_objs) + return {"FINISHED"} @@ -437,80 +456,126 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): layer2_objs: list[bpy.types.Object] = [] - x_angle = 0 if tool.Cad.is_x(self.x_angle, 0, tolerance=0.001) else self.x_angle - x_angle = 0 if tool.Cad.is_x(self.x_angle, pi, tolerance=0.001) else self.x_angle - unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - selected_objs = tool.Model.get_selected_mesh_ifc_objects() builder = ifcopenshell.util.shape_builder.ShapeBuilder(tool.Ifc.get()) + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + x_angle = self.x_angle - for obj in selected_objs: + for obj in context.selected_objects: element = tool.Ifc.get_entity(obj) - assert element + if not element: + continue + representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if not representation: continue extrusion = tool.Model.get_extrusion(representation) if not extrusion: continue + + # Get current object rotation matrix + obj_rotation = obj.matrix_world.to_3x3() + + # Get current extrusion direction in LOCAL coordinates + current_local_direction = Vector(extrusion.ExtrudedDirection.DirectionRatios) + if current_local_direction.length == 0: + current_local_direction = Vector((0, 0, 1)) + current_local_direction_normalized = current_local_direction.normalized() + + # Calculate what the current extrusion direction is in WORLD coordinates + current_world_direction = obj_rotation @ current_local_direction_normalized + existing_x_angle = tool.Model.get_existing_x_angle(extrusion) existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle + + # Calculate the NEW local extrusion direction based on x_angle + new_local_direction = Vector((0.0, sin(x_angle), cos(x_angle))) + + # Check if extrusion direction is actually changing + current_local_norm = current_local_direction_normalized + new_local_norm = new_local_direction.normalized() + + # Compare the LOCAL directions + local_direction_changed = (new_local_norm - current_local_norm).length > 1e-6 + if tool.Model.get_usage_type(element) == "LAYER2": - x, y, z = extrusion.ExtrudedDirection.DirectionRatios depth = extrusion.Depth / abs(1 / cos(existing_x_angle)) perpendicular_depth = depth * abs(1 / cos(x_angle)) - extrusion.ExtrudedDirection.DirectionRatios = (0.0, sin(x_angle), cos(x_angle)) - layer2_objs.append(obj) + + # Update extrusion direction + if local_direction_changed: + extrusion.ExtrudedDirection.DirectionRatios = tuple(new_local_direction) + + # Always update depth extrusion.Depth = perpendicular_depth + layer2_objs.append(obj) + else: if tool.Model.get_usage_type(element) == "LAYER3": - existing_x_angle = obj.rotation_euler.x - existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle - existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle + # For slabs, handle polyline scaling + existing_obj_x_angle = obj.rotation_euler.x + existing_obj_x_angle = 0 if tool.Cad.is_x(existing_obj_x_angle, 0, tolerance=0.001) else existing_obj_x_angle + existing_obj_x_angle = 0 if tool.Cad.is_x(existing_obj_x_angle, pi, tolerance=0.001) else existing_obj_x_angle + # Scale the polyline coordinates coord_list = builder.get_polyline_coords(extrusion.SweptArea.OuterCurve) coord_list = [ (p[0], p[1] * abs(cos(existing_x_angle))) for p in coord_list - ] # Reset the transformation and returns to the original points with 0 degrees + ] # Reset the transformation coord_list = [ (p[0], p[1] * abs(1 / cos(x_angle))) for p in coord_list ] # Apply the transformation for the new x_angle builder.set_polyline_coords(extrusion.SweptArea.OuterCurve, coord_list) - # The extrusion direction calculated previously default to the positive direction - # Here we set the extrusion direction to negative if that's the case - direction_ratios = Vector((0.0, sin(x_angle), cos(x_angle))) - # direction_ratios = Vector(extrusion.ExtrudedDirection.DirectionRatios) + # Calculate new extrusion direction with direction sense + base_local_direction = Vector((0.0, sin(x_angle), cos(x_angle))) layer_params = tool.Model.get_material_layer_parameters(element) perpendicular_depth = layer_params["thickness"] * abs(1 / cos(x_angle)) / unit_scale perpendicular_offset = layer_params["offset"] * abs(1 / cos(x_angle)) / unit_scale - offset_direction = direction_ratios.copy() + offset_direction = base_local_direction.copy() - # Check angle and z direction to determine whether the extrusion direction is positive or negative - if (abs(x_angle) < (pi / 2) and direction_ratios.z > 0) or ( - abs(x_angle) > (pi / 2) and direction_ratios.z < 0 + # Apply direction sense + final_local_direction = base_local_direction.copy() + if (abs(x_angle) < (pi / 2) and base_local_direction.z > 0) or ( + abs(x_angle) > (pi / 2) and base_local_direction.z < 0 ): - # The extrusion direction is positive. If the layer_parameter is set to negative, - # then the we change the extrusion direction. if layer_params["direction_sense"] == "NEGATIVE": - direction_ratios *= -1 - elif ((x_angle) > (pi / 2) and direction_ratios.z > 0) or ( - (x_angle) < (pi / 2) and direction_ratios.z < 0 + final_local_direction *= -1 + elif (x_angle > (pi / 2) and base_local_direction.z > 0) or ( + x_angle < (pi / 2) and base_local_direction.z < 0 ): - # The extrusion direction is negative. If the layer_parameter is set to positive, - # then the we change the extrusion direction. - # then the we change the extrusion direction. And the offset direction should remain positive - # for either direction sense, so we change it. offset_direction *= -1 if layer_params["direction_sense"] == "POSITIVE": - direction_ratios *= -1 - - extrusion.ExtrudedDirection.DirectionRatios = tuple(direction_ratios) + final_local_direction *= -1 + + # Check if extrusion direction actually changed + final_local_norm = final_local_direction.normalized() + local_direction_changed = (final_local_norm - current_local_norm).length > 1e-6 + + # Update extrusion properties + extrusion.ExtrudedDirection.DirectionRatios = tuple(final_local_direction) extrusion.Depth = perpendicular_depth if extrusion.Position or perpendicular_offset != 0: position = offset_direction * perpendicular_offset tool.Model.add_extrusion_position(extrusion, position) + + # Adjust object rotation if extrusion direction changed + if local_direction_changed: + # Calculate what the NEW world direction would be with current object rotation + expected_new_world_direction = obj_rotation @ final_local_norm + + # The rotation needed is from expected_new_world_direction to current_world_direction + rotation_axis = expected_new_world_direction.cross(current_world_direction) + if rotation_axis.length > 1e-6: + rotation_axis.normalize() + dot_product = expected_new_world_direction.dot(current_world_direction) + angle = acos(min(max(dot_product, -1), 1)) + + # Create and apply rotation matrix + rotation_matrix = Matrix.Rotation(angle, 4, rotation_axis) + obj.matrix_world = rotation_matrix @ obj.matrix_world + bpy.context.view_layer.update() bonsai.core.geometry.switch_representation( tool.Ifc, @@ -519,12 +584,6 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): representation=representation, ) - # Object rotation - current_z_rot = obj.rotation_euler.z - rot_mat = mathutils.Matrix.Rotation(x_angle, 4, "X") - obj.rotation_euler = rot_mat.to_euler() - obj.rotation_euler.z = current_z_rot - if layer2_objs: tool.Model.recalculate_walls(layer2_objs) return {"FINISHED"} @@ -1022,6 +1081,7 @@ class DumbWallGenerator: obj=obj, representation=representation, ) + pset = ifcopenshell.api.pset.add_pset(self.file, product=element, name="EPset_Parametric") ifcopenshell.api.pset.edit_pset(self.file, pset=pset, properties={"Engine": "Bonsai.DumbLayer2"}) material = ifcopenshell.util.element.get_material(element) diff --git a/src/bonsai/bonsai/tool/collector.py b/src/bonsai/bonsai/tool/collector.py index e91c52d3d0..7c46135b26 100644 --- a/src/bonsai/bonsai/tool/collector.py +++ b/src/bonsai/bonsai/tool/collector.py @@ -44,8 +44,6 @@ class Collector(bonsai.core.tool.Collector): # Note that tool.Geometry.is_locked is only checked within the if # statements for efficiency as it is a slow check. tool.Geometry.lock_scale(obj) - if element.is_a("IfcSlab"): - tool.Geometry.lock_rotation(obj, x=True) if element.is_a("IfcGridAxis"): if tool.Geometry.is_locked(element): diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index e28ceacaec..89603372d0 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -1030,28 +1030,57 @@ class Loader(bonsai.core.tool.Loader): sense_factor = 1 else: return mesh + if len(layer_set.MaterialLayers) == 1: return mesh + bm = bmesh.new() bm.from_mesh(mesh) + prev_co = None + advance_direction = None # Will store direction to advance planes + if not usage: - sense_factor = 1 # Assume the extrusion vector points in the direction sense + sense_factor = 1 no = cls.get_extrusion_vector(element).normalized() co = Vector((0.0, 0.0, offset)) + advance_direction = no elif usage.LayerSetDirection == "AXIS2": co = Vector((0.0, offset, 0.0)) - no = cls.get_extrusion_vector(element).normalized() - no = no.cross(Vector([1.0, 0.0, 0.0])) + + # Get LOCAL extrusion direction + local_extrusion = Vector([0.0, 0.0, 1.0]) + if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): + for item in ifcopenshell.util.representation.resolve_representation(body).Items: + while item.is_a("IfcBooleanResult"): + item = item.FirstOperand + if item.is_a("IfcExtrudedAreaSolid"): + local_extrusion = Vector(item.ExtrudedDirection.DirectionRatios).normalized() + break + + # Thickness direction: perpendicular to extrusion and length + thickness_dir = local_extrusion.cross(Vector([1.0, 0.0, 0.0])).normalized() + + # Ensure it points in POSITIVE Y (through wall thickness, not backwards) + if thickness_dir.y < 0: + thickness_dir = -thickness_dir + + no = thickness_dir + advance_direction = thickness_dir elif usage.LayerSetDirection == "AXIS3": co = Vector((0.0, 0.0, offset)) no = cls.get_extrusion_vector(element).normalized() no = Vector([0.0, 0.0, 1.0]) + advance_direction = no elif usage.LayerSetDirection == "AXIS1": co = Vector((0.0, 0.0, offset)) no = cls.get_extrusion_vector(element).normalized() no = Vector([1.0, 0.0, 0.0]) + advance_direction = no + no *= sense_factor + advance_direction *= sense_factor + # Cache this body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") styles = {} @@ -1059,20 +1088,25 @@ class Loader(bonsai.core.tool.Loader): for i, material in enumerate(mesh.materials): if style := tool.Ifc.get_entity(material): styles[style] = i + last_i = len(layer_set.MaterialLayers) - 1 for i, layer in enumerate(layer_set.MaterialLayers): if i != last_i: prev_co = co.copy() - co += no * layer.LayerThickness * cls.unit_scale + # Use advance_direction (not no) to move planes! + co += advance_direction * layer.LayerThickness * cls.unit_scale + bisect_geom = bmesh.ops.bisect_plane( bm, geom=bm.verts[:] + bm.edges[:] + bm.faces[:], dist=0.0001, plane_co=co, plane_no=no ) bmesh.ops.duplicate(bm, geom=bisect_geom["geom_cut"]) + if not (style := ifcopenshell.util.representation.get_material_style(layer.Material, body)): continue if (material_index := styles.get(style, None)) is None: material_index = len(mesh.materials) mesh.materials.append(tool.Ifc.get_object(style)) + if i == last_i: for face in bisect_geom["geom"]: if isinstance(face, bmesh.types.BMFace): @@ -1097,13 +1131,35 @@ class Loader(bonsai.core.tool.Loader): return mesh @classmethod - def get_extrusion_vector(cls, wall): - if body := ifcopenshell.util.representation.get_representation(wall, "Model", "Body", "MODEL_VIEW"): + def get_extrusion_vector(cls, element): + """Get the extrusion direction in WORLD coordinates (accounting for object rotation)""" + if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): for item in ifcopenshell.util.representation.resolve_representation(body).Items: while item.is_a("IfcBooleanResult"): item = item.FirstOperand if item.is_a("IfcExtrudedAreaSolid"): - return Vector(item.ExtrudedDirection.DirectionRatios) + local_direction = Vector(item.ExtrudedDirection.DirectionRatios) + + # Transform to world coordinates using object rotation + obj = tool.Ifc.get_object(element) + if obj: + # Apply object rotation to get actual world direction + world_direction = obj.matrix_world.to_3x3() @ local_direction + return world_direction + + return local_direction + return Vector([0.0, 0.0, 1.0]) + + @classmethod + def get_local_extrusion_vector(cls, element): + """Get the extrusion direction in LOCAL coordinates (from IFC, no object rotation)""" + if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): + for item in ifcopenshell.util.representation.resolve_representation(body).Items: + while item.is_a("IfcBooleanResult"): + item = item.FirstOperand + if item.is_a("IfcExtrudedAreaSolid"): + local_direction = Vector(item.ExtrudedDirection.DirectionRatios) + return local_direction return Vector([0.0, 0.0, 1.0]) @classmethod diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py index 284f6e7c30..28025c6624 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py @@ -100,35 +100,45 @@ class Usecase: size = self.convert_si_to_unit(1) points = ((0.0, 0.0), (size, 0.0), (size, size), (0.0, size), (0.0, 0.0)) if self.polyline: - points = [ - (self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1] * abs(1 / cos(self.x_angle)))) - for p in self.polyline - ] + # Only scale polyline if we have actual slope + if self.x_angle and abs(self.x_angle) > 1e-6: + points = [ + (self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1] * abs(1 / cos(self.x_angle)))) + for p in self.polyline + ] + else: + points = [ + (self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1])) + for p in self.polyline + ] + if self.file.schema == "IFC2X3": curve = self.file.createIfcPolyline([self.file.createIfcCartesianPoint(p) for p in points]) else: curve = self.file.createIfcIndexedPolyCurve(self.file.createIfcCartesianPointList2D(points)) - + if self.x_angle: direction_ratios = (0.0, sin(self.x_angle), cos(self.x_angle)) else: direction_ratios = (0.0, 0.0, 1.0) - offset_direction = direction_ratios # offset direction doesn't change if direction_sense is negative extrusion_direction = self.file.createIfcDirection(direction_ratios) - if self.direction_sense == "NEGATIVE": - direction_ratios = tuple(-n for n in direction_ratios) - extrusion_direction = self.file.createIfcDirection(direction_ratios) - - perpendicular_offset = self.convert_si_to_unit(self.offset) * abs(1 / cos(self.x_angle)) - perpendicular_depth = self.convert_si_to_unit(self.depth) * abs(1 / cos(self.x_angle)) + + # Calculate depth based on extrusion angle + extrusion_angle = abs(self.x_angle) if self.x_angle else 0 + if extrusion_angle > 1e-6: + perpendicular_depth = self.convert_si_to_unit(self.depth) * abs(1 / cos(extrusion_angle)) + perpendicular_offset = self.convert_si_to_unit(self.offset) * abs(1 / cos(extrusion_angle)) + else: + perpendicular_depth = self.convert_si_to_unit(self.depth) + perpendicular_offset = self.convert_si_to_unit(self.offset) + position = None - # default position for IFC2X3 where .Position is not optional if self.file.schema == "IFC2X3" or self.offset != 0: position_vector = ( - offset_direction[0] * perpendicular_offset, - offset_direction[1] * perpendicular_offset, - offset_direction[2] * perpendicular_offset, + direction_ratios[0] * perpendicular_offset, + direction_ratios[1] * perpendicular_offset, + direction_ratios[2] * perpendicular_offset, ) position = self.file.createIfcAxis2Placement3D( self.file.createIfcCartesianPoint(position_vector), diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py index 4c108dc7df..12a033429d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py @@ -85,7 +85,6 @@ class Usecase: def create_item(self) -> ifcopenshell.entity_instance: length = self.convert_si_to_unit(self.settings["length"]) thickness = self.convert_si_to_unit(self.settings["thickness"]) - thickness *= 1 / cos(self.settings["x_angle"]) if self.settings["direction_sense"] == "NEGATIVE": thickness *= -1 points = ( @@ -113,7 +112,7 @@ class Usecase: self.file.createIfcDirection((1.0, 0.0, 0.0)), ), extrusion_direction, - self.convert_si_to_unit(self.settings["height"]) * abs(1 / cos(self.settings["x_angle"])), + self.convert_si_to_unit(self.settings["height"]), ) if self.settings["booleans"]: extrusion = self.apply_booleans(extrusion) From d29cecab309eb7e78fe92457d11afc478168ec4d Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 11 Jan 2026 20:35:32 -0600 Subject: [PATCH 482/657] Fix aggregate duplication to include parts and preserve hierarchy (#7550) - Auto-include all parts when duplicating aggregates - Preserve nested aggregate relationships during duplication - Select all duplicated objects for immediate moving --- .../bonsai/bim/module/geometry/operator.py | 73 ++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 4282cd8625..24ad1cb013 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1205,13 +1205,84 @@ class OverrideDuplicateMove(bpy.types.Operator): for obj in objects_to_remove: tool.Blender.deselect_object(obj) + # Expand selection to include all parts of selected aggregates + objects_to_duplicate = set(context.selected_objects) - objects_to_remove + expanded_objects = set(objects_to_duplicate) + + for obj in objects_to_duplicate: + element = tool.Ifc.get_entity(obj) + if element and element.is_a("IfcElementAssembly"): + parts = tool.Aggregate.get_parts_recursively(element) + for part in parts: + part_obj = tool.Ifc.get_object(part) + if part_obj: + expanded_objects.add(part_obj) + + # Store parent aggregate relationships + parent_aggregates = {} + + for obj in expanded_objects: + element = tool.Ifc.get_entity(obj) + if element and element.is_a("IfcElementAssembly"): + parent_aggregate = ifcopenshell.util.element.get_aggregate(element) + if parent_aggregate: + parent_aggregates[element] = parent_aggregate + old_to_new, new_active_obj = tool.Geometry.duplicate_ifc_objects( - set(context.selected_objects) - objects_to_remove, + expanded_objects, linked=linked, active_object=context.active_object, ) + + # Restore parent aggregate relationships, but only for parents that were NOT duplicated + for old_elem, new_elems in old_to_new.items(): + if old_elem in parent_aggregates: + old_parent = parent_aggregates[old_elem] + + # Check if the parent was also duplicated + if old_parent in old_to_new: + # The duplication already created the correct nested relationship + continue + + # Parent was NOT duplicated, so we need to assign to the original parent + for new_elem in new_elems: + new_obj = tool.Ifc.get_object(new_elem) + parent_obj = tool.Ifc.get_object(old_parent) + if new_obj and parent_obj: + bonsai.core.aggregate.assign_object( + tool.Ifc, + tool.Aggregate, + tool.Collector, + relating_obj=parent_obj, + related_obj=new_obj, + ) + + # Select all duplicated objects and their parts + all_objects_to_select = set() + for old_elem, new_elems in old_to_new.items(): + for new_elem in new_elems: + new_obj = tool.Ifc.get_object(new_elem) + if new_obj: + all_objects_to_select.add(new_obj) + + # If it's an aggregate, also select all its parts + if new_elem.is_a("IfcElementAssembly"): + parts = tool.Aggregate.get_parts_recursively(new_elem) + for part in parts: + part_obj = tool.Ifc.get_object(part) + if part_obj: + all_objects_to_select.add(part_obj) + + # Deselect everything first + bpy.ops.object.select_all(action='DESELECT') + + # Select all the duplicated objects + for obj in all_objects_to_select: + obj.select_set(True) + if new_active_obj: context.view_layer.objects.active = new_active_obj + return old_to_new From d7ad0a352e1697ae2617485b723295f2f0fb0665 Mon Sep 17 00:00:00 2001 From: Pierre LeMoine Date: Mon, 12 Jan 2026 07:30:02 +0100 Subject: [PATCH 483/657] vscode config for Bonsai debugging --- .gitignore | 2 + .vscode/launch.json | 24 +++++++++ .vscode/tasks.json | 53 +++++++++++++++++++ .../scripts/dev_environment_vscode_config.py | 24 +++++++++ 4 files changed, 103 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 src/bonsai/scripts/dev_environment_vscode_config.py diff --git a/.gitignore b/.gitignore index 504685d332..5625af298a 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ venv # Visual Studio Code files .vscode +!.vscode/launch.json +!.vscode/tasks.json .vs # PyCharm files diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..63fa0f352d --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "name": "Python Debugger: Remote Attach", + "type": "debugpy", + "request": "attach", + "connect": { + "host": "localhost", + "port": 5678 + }, + "pathMappings": [ + { + "localRoot": "${config:bonsai.localRoot}", + "remoteRoot": "${config:bonsai.remoteRoot}" + } + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000000..883373e476 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,53 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Configure bonsai/vscode development environment", + "type": "shell", + "command": "${input:blenderPath}", + "args": [ + "--background", + "--python", "${workspaceFolder}/src/bonsai/scripts/dev_environment_vscode_config.py" + ], + "problemMatcher": [] + }, + { + "label": "Launch blender with debugpy", + "type": "shell", + "command": "blender", + "options": { + "cwd": "${config:bonsai.blenderPath}" + }, + "args": [ + "--python-expr", + "import debugpy; debugpy.listen(5678)" + ], + "problemMatcher": [] + }, + { + "label": "Install debugpy in Blender", + "type": "shell", + "command": "blender", + "options": { + "cwd": "${config:bonsai.blenderPath}" + }, + "args": [ + "--background", + "--python-expr", + "import os, sys, subprocess; path=os.path.abspath(sys.executable); subprocess.call([path, '-m', 'ensurepip']); subprocess.call([path, '-m', 'pip', 'install', '--upgrade', 'debugpy'])" + ], + "problemMatcher": [] + } + + ], + "inputs": [ + { + "id": "blenderPath", + "type": "promptString", + "description": "Enter the path to the blender executable", + "default": "blender" + } + ] +} \ No newline at end of file diff --git a/src/bonsai/scripts/dev_environment_vscode_config.py b/src/bonsai/scripts/dev_environment_vscode_config.py new file mode 100644 index 0000000000..e1643b0aea --- /dev/null +++ b/src/bonsai/scripts/dev_environment_vscode_config.py @@ -0,0 +1,24 @@ + +import bonsai, json, bpy +from pathlib import Path + +repo_path = Path(bonsai.__file__).resolve().parent +install_path = Path(bonsai.__file__).absolute().parent +assert repo_path != install_path, "Run `dev_environment.py` to setup the development environment symlinks first." + +repo_root = repo_path.parent.parent.parent +settings_path = repo_root / ".vscode" / "settings.json" +settings_path.parent.mkdir(parents=True, exist_ok=True) + +settings = json.loads(settings_path.read_text()) if settings_path.exists() else {} +settings.update({ + "bonsai.localRoot": repo_path.as_posix(), + "bonsai.remoteRoot": install_path.as_posix(), + "bonsai.blenderPath": Path(bpy.app.binary_path).parent.as_posix(), +}) +json_data = json.dumps(settings, indent=2) + +settings_path.write_text(json_data) + +print("\n\nBonsai/VSCode development environment configured successfully!\n\n") + From 1eb2b65268989a072bb994a73821c4ed7c2f1a51 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 12 Jan 2026 12:19:13 +0100 Subject: [PATCH 484/657] Add flow direction handling to port connection logic and UI updates --- src/bonsai/bonsai/bim/module/system/operator.py | 9 ++++++--- src/bonsai/bonsai/bim/module/system/prop.py | 4 ++-- src/bonsai/bonsai/bim/module/system/ui.py | 7 ++++--- src/bonsai/bonsai/core/system.py | 4 ++-- .../ifcopenshell/api/system/disconnect_port.py | 2 -- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 7f298064fc..049307b32f 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -259,7 +259,8 @@ class ConnectPort(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): obj1 = context.active_object obj2 = context.selected_objects[0] if context.selected_objects[1] == obj1 else context.selected_objects[1] - core.connect_port(tool.Ifc, port1=tool.Ifc.get_entity(obj1), port2=tool.Ifc.get_entity(obj2)) + direction = tool.Ifc.get_entity(obj1).FlowDirection or "NOTDEFINED" + core.connect_port(tool.Ifc, port1=tool.Ifc.get_entity(obj1), port2=tool.Ifc.get_entity(obj2), direction=direction) class AddRelatedPortConnection(bpy.types.Operator, tool.Ifc.Operator): @@ -286,7 +287,8 @@ class AddRelatedPortConnection(bpy.types.Operator, tool.Ifc.Operator): related_port = tool.Ifc.get_entity(port_obj) relating_port = tool.Ifc.get().by_id(self.relating_port_id) - core.connect_port(tool.Ifc, port1=relating_port, port2=related_port) + direction = relating_port.FlowDirection or "NOTDEFINED" + core.connect_port(tool.Ifc, port1=relating_port, port2=related_port, direction=direction) PortData.is_loaded = False return {"FINISHED"} @@ -356,7 +358,8 @@ class MEPConnectElements(bpy.types.Operator, tool.Ifc.Operator): ports_distance[(port1, port2)] = distance closest_ports = min(ports_distance, key=lambda x: ports_distance[x]) - core.connect_port(tool.Ifc, *closest_ports) + direction = closest_ports[0].FlowDirection or "NOTDEFINED" + core.connect_port(tool.Ifc, *closest_ports, direction=direction) bpy.ops.bim.regenerate_distribution_element() return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index bb72fda1a9..e4e56a79a0 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -20,7 +20,7 @@ import bpy import bonsai.bim.handler import bonsai.tool as tool import bonsai.core.system as core -from bonsai.bim.module.system.data import SystemData, PortData +from bonsai.bim.module.system.data import SystemData import bonsai.bim.module.system.decorator as decorator from bonsai.bim.prop import StrProperty, Attribute from bpy.types import PropertyGroup @@ -34,7 +34,7 @@ from bpy.props import ( FloatVectorProperty, CollectionProperty, ) -from typing import TYPE_CHECKING, Union, Optional +from typing import TYPE_CHECKING, Union def get_system_class(self: "BIMSystemProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index ad8d5b5c03..5e904a3206 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -275,8 +275,6 @@ class BIM_PT_port(Panel): relating_object_name = PortData.data["port_relating_object_name"] if PortData.data["is_port"] else "" row.label(text=f"IfcDistributionPort located in: {relating_object_name}") - row.operator("bim.connect_port", icon="PLUGIN", text="") - row.operator("bim.disconnect_port", icon="UNLINKED", text="") row.operator("bim.remove_port", icon="X", text="") if not PortData.is_loaded: @@ -290,6 +288,9 @@ class BIM_PT_port(Panel): row = layout.row(align=True) cols = [row.column(align=True) for i in range(9)] + cols[3].scale_x = 1.0 + cols[6].scale_x = 1.0 + cols[8].scale_x = 1.33 flow_direction_icon = FLOW_DIRECTION_TO_ICON[element.FlowDirection or "NOTDEFINED"] connected_port = tool.System.get_connected_port(element) @@ -299,7 +300,7 @@ class BIM_PT_port(Panel): op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = element.id() else: - cols[0].label(text="", icon="BLANK1") + cols[0].operator("bim.connect_port", icon="PLUGIN", text="") op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = element.id() diff --git a/src/bonsai/bonsai/core/system.py b/src/bonsai/bonsai/core/system.py index 7a1df28280..87a43307b7 100644 --- a/src/bonsai/bonsai/core/system.py +++ b/src/bonsai/bonsai/core/system.py @@ -132,8 +132,8 @@ def remove_port(ifc: type[tool.Ifc], system: type[tool.System], port: ifcopenshe ifc.run("root.remove_product", product=port) -def connect_port(ifc: type[tool.Ifc], port1: ifcopenshell.entity_instance, port2: ifcopenshell.entity_instance) -> None: - ifc.run("system.connect_port", port1=port1, port2=port2) +def connect_port(ifc: type[tool.Ifc], port1: ifcopenshell.entity_instance, port2: ifcopenshell.entity_instance, direction: str = "NOTDEFINED") -> None: + ifc.run("system.connect_port", port1=port1, port2=port2, direction=direction) def disconnect_port(ifc: type[tool.Ifc], port: ifcopenshell.entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/disconnect_port.py b/src/ifcopenshell-python/ifcopenshell/api/system/disconnect_port.py index 8ffbfcf380..c53e4ae160 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/disconnect_port.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/disconnect_port.py @@ -66,8 +66,6 @@ def disconnect_port(file: ifcopenshell.file, port: ifcopenshell.entity_instance) rels += port.ConnectedFrom or () for rel in rels: - rel.RelatingPort.FlowDirection = None - rel.RelatedPort.FlowDirection = None history = rel.OwnerHistory file.remove(rel) if history: From 153de70a71b29502e8020f2054b937b5142e1e2e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 12 Jan 2026 16:07:34 +0500 Subject: [PATCH 485/657] black . --- src/bonsai/bonsai/bim/import_ifc.py | 1 + .../bonsai/bim/module/drawing/__init__.py | 3 +- .../bonsai/bim/module/drawing/operator.py | 98 +++++++++---------- src/bonsai/bonsai/bim/module/drawing/prop.py | 24 ++--- .../bonsai/bim/module/drawing/svgwriter.py | 34 +++++-- src/bonsai/bonsai/bim/module/drawing/ui.py | 29 +++--- .../bonsai/bim/module/geometry/operator.py | 54 +++++----- src/bonsai/bonsai/bim/module/material/data.py | 12 +-- .../bonsai/bim/module/material/operator.py | 6 +- src/bonsai/bonsai/bim/module/material/ui.py | 28 +++--- src/bonsai/bonsai/bim/module/model/opening.py | 34 +++---- src/bonsai/bonsai/bim/module/model/slab.py | 85 ++++++++-------- src/bonsai/bonsai/bim/module/model/wall.py | 60 ++++++------ .../bonsai/bim/module/model/workspace.py | 6 +- .../bonsai/bim/module/project/operator.py | 13 +-- src/bonsai/bonsai/bim/operator.py | 2 - src/bonsai/bonsai/bim/prop.py | 2 +- src/bonsai/bonsai/core/drawing.py | 2 +- src/bonsai/bonsai/core/root.py | 10 +- src/bonsai/bonsai/core/type.py | 12 +-- src/bonsai/bonsai/tool/blender.py | 9 +- src/bonsai/bonsai/tool/loader.py | 32 +++--- src/bonsai/bonsai/tool/model.py | 27 ++--- src/bonsai/bonsai/tool/project.py | 50 +++++----- src/bonsai/bonsai/tool/unit.py | 4 +- .../scripts/dev_environment_vscode_config.py | 14 +-- .../api/geometry/add_slab_representation.py | 13 +-- .../ifcopenshell/util/selector.py | 8 +- 28 files changed, 352 insertions(+), 320 deletions(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 7669edbd14..58f6a67065 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -1295,6 +1295,7 @@ class IfcImporter: if element.is_a("IfcSpace"): obj.hide_set(True) + class IfcImportSettings: """ Initialize only using `IfcImportSettings.factory()`. diff --git a/src/bonsai/bonsai/bim/module/drawing/__init__.py b/src/bonsai/bonsai/bim/module/drawing/__init__.py index 1578f4eeed..93316a0d01 100644 --- a/src/bonsai/bonsai/bim/module/drawing/__init__.py +++ b/src/bonsai/bonsai/bim/module/drawing/__init__.py @@ -158,6 +158,7 @@ def menu_func(self, context): if element and element.is_a("IfcAnnotation") and element.ObjectType in ["SECTION", "ELEVATION"]: self.layout.operator("bim.activate_drawing_by_annotation", text="Go to Drawing") + def register(): if not bpy.app.background: bpy.utils.register_tool(workspace.AnnotationTool, after={"bim.bim_tool"}, separator=True, group=False) @@ -170,7 +171,7 @@ def register(): bpy.app.handlers.load_post.append(handler.load_post) bpy.app.handlers.depsgraph_update_pre.append(handler.depsgraph_update_pre_handler) bpy.types.VIEW3D_MT_image_add.append(ui.add_object_button) - bpy.types.VIEW3D_MT_object_context_menu.append(menu_func) + bpy.types.VIEW3D_MT_object_context_menu.append(menu_func) def unregister(): diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 66c417f3ec..936225099b 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -353,20 +353,20 @@ class CreateDrawing(bpy.types.Operator): # Clear any local camera setup and force viewport to use scene camera for area in context.screen.areas: - if area.type == 'VIEW_3D': + if area.type == "VIEW_3D": for space in area.spaces: - if space.type == 'VIEW_3D': + if space.type == "VIEW_3D": # Clear local camera to ensure we use scene.camera space.use_local_camera = False space.camera = context.scene.camera - space.region_3d.view_perspective = 'CAMERA' + space.region_3d.view_perspective = "CAMERA" print(f"Set viewport camera to: {context.scene.camera.name}") break - + # Force complete scene update context.view_layer.update() context.evaluated_depsgraph_get() - + underlay_svg = self.generate_underlay(context) with profile("Generate linework"): @@ -3078,9 +3078,9 @@ class AddReference(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): filter_glob: bpy.props.StringProperty(default="*.svg", options={"HIDDEN"}) use_relative_path: bpy.props.BoolProperty(name="Use Relative Path", default=True) filename_ext = ".svg" - + files: bpy.props.CollectionProperty(type=bpy.types.OperatorFileListElement) - directory: bpy.props.StringProperty(subtype='DIR_PATH') + directory: bpy.props.StringProperty(subtype="DIR_PATH") def _execute(self, context): # Handle both single and multiple file selection @@ -3355,14 +3355,14 @@ class EnableEditingText(bpy.types.Operator, tool.Ifc.Operator): for i, literal_backup in enumerate(literals_backup): if i < len(props.literals): literal_props = props.literals[i] - + if assigned_product_obj: literal_props.product_used = assigned_product_obj elif "product_used" in literal_backup and literal_backup["product_used"]: product_name = literal_backup["product_used"] if product_name in bpy.data.objects: literal_props.product_used = bpy.data.objects[product_name] - + literal_props.element_value_rows.clear() if "element_value_rows" in literal_backup: for row_data in literal_backup["element_value_rows"]: @@ -4251,63 +4251,62 @@ class ActivateDrawingByAnnotation(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Activate Drawing" bl_description = "Activate the drawing corresponding to the selected annotation" bl_options = {"REGISTER", "UNDO"} - + @classmethod def poll(cls, context): # Check if an annotation object is selected if not context.selected_objects: cls.poll_message_set("No object selected") return False - + active_obj = context.active_object if not active_obj: cls.poll_message_set("No active object") return False - + element = tool.Ifc.get_entity(active_obj) if not element: cls.poll_message_set("Selected object is not an IFC element") return False - + # Check if it's an IfcAnnotation with ObjectType = "SECTION" or "ELEVATION" if not element.is_a("IfcAnnotation") or element.ObjectType not in ["SECTION", "ELEVATION"]: cls.poll_message_set("Selected object is not a drawing annotation") return False - + return True def _execute(self, context): active_obj = context.active_object element = tool.Ifc.get_entity(active_obj) - + if not element or not element.is_a("IfcAnnotation") or element.ObjectType not in ["SECTION", "ELEVATION"]: self.report({"ERROR"}, "Selected object is not a drawing annotation") return {"CANCELLED"} - + # Find the drawing/camera element that this annotation references drawing_element = self.find_drawing_from_annotation(element) - + if not drawing_element: self.report({"ERROR"}, "Could not find drawing element for this annotation") return {"CANCELLED"} - + # Use the existing ActivateDrawing operator with the drawing element's ID bpy.ops.bim.activate_drawing(drawing=drawing_element.id()) - + return {"FINISHED"} - + def find_drawing_from_annotation(self, annotation_element): """Find the drawing/camera element that this annotation references.""" ifc = tool.Ifc.get() - + # Check IfcRelAssignsToProduct relationships for rel in ifc.get_inverse(annotation_element): if rel.is_a("IfcRelAssignsToProduct") and rel.RelatingProduct: if rel.RelatingProduct.is_a("IfcAnnotation"): # Found the drawing element! return rel.RelatingProduct - - + return None @@ -5062,7 +5061,7 @@ class AddElementValueRow(bpy.types.Operator): new_row.category = literal_props.category_for_adding new_row.element_key = "" new_row.formatted_value = "" - + if len(literal_props.element_value_rows) == 1: new_row.separator = "" else: @@ -5106,10 +5105,10 @@ class ElementValueSuggestionsPopup(bpy.types.Operator): row_index: bpy.props.IntProperty() category: bpy.props.StringProperty() search_query: bpy.props.StringProperty(name="Search", description="Search for element values") - + collection_keys: bpy.props.CollectionProperty(type=StrProperty) collection_descriptions: bpy.props.CollectionProperty(type=StrProperty) - + selected_key: bpy.props.StringProperty() def invoke(self, context, event): @@ -5157,13 +5156,13 @@ class ElementValueSuggestionsPopup(bpy.types.Operator): def draw(self, context): layout = self.layout - + layout.prop_search(self, "selected_key", self, "collection_descriptions", text="Value") def execute(self, context): if not self.selected_key: return {"CANCELLED"} - + obj = context.active_object if not obj: return {"CANCELLED"} @@ -5177,7 +5176,7 @@ class ElementValueSuggestionsPopup(bpy.types.Operator): return {"CANCELLED"} value_row = literal_props.element_value_rows[self.row_index] - + for idx, desc_item in enumerate(self.collection_descriptions): if desc_item.name == self.selected_key: actual_key = self.collection_keys[idx].name @@ -5260,10 +5259,7 @@ class FormatElementValueRow(bpy.types.Operator): custom_expression: bpy.props.StringProperty( name="Custom Expression", - description=( - "Custom expression using functions\n" - "Use {{value}} as placeholder for the current row's value." - ), + description=("Custom expression using functions\n" "Use {{value}} as placeholder for the current row's value."), default='concat({{value}}, " - additional text")', ) @@ -5288,51 +5284,51 @@ class FormatElementValueRow(bpy.types.Operator): def _load_formatting_from_row(self, row): """Parse the formatted_value to load existing formatting settings""" import re - + formatted_value = row.formatted_value - + if not formatted_value or formatted_value == f"{{{{{row.element_key}}}}}": self.formatting_type = "NONE" return - + if formatted_value.startswith("``") and formatted_value.endswith("``"): expression = formatted_value[2:-2].strip() else: self.formatting_type = "NONE" return - + if match := re.match(r"upper\(\{\{[^}]+\}\}\)", expression): self.formatting_type = "UPPER" - + elif match := re.match(r"lower\(\{\{[^}]+\}\}\)", expression): self.formatting_type = "LOWER" - + elif match := re.match(r"title\(\{\{[^}]+\}\}\)", expression): self.formatting_type = "TITLE" - + elif match := re.match(r"int\(\{\{[^}]+\}\}\)", expression): self.formatting_type = "INT" - + elif match := re.match(r"round\(\{\{[^}]+\}\},\s*([^)]+)\)", expression): self.formatting_type = "ROUND" self.round_precision = match.group(1).strip() - + elif match := re.match(r"number\(\{\{[^}]+\}\},\s*([^,]+),\s*([^)]+)\)", expression): self.formatting_type = "NUMBER" self.decimal_separator = match.group(1).strip() self.thousands_separator = match.group(2).strip() - + elif match := re.match(r"metric_length\(\{\{[^}]+\}\},\s*([^,]+),\s*([^)]+)\)", expression): self.formatting_type = "METRIC_LENGTH" self.metric_precision = match.group(1).strip() self.metric_decimals = int(match.group(2).strip()) - + elif match := re.match(r'imperial_length\(\{\{[^}]+\}\},\s*(\d+),\s*"([^"]+)",\s*"([^"]+)"\)', expression): self.formatting_type = "IMPERIAL_LENGTH" self.imperial_precision = int(match.group(1).strip()) self.imperial_input_unit = match.group(2).strip() self.imperial_output_unit = match.group(3).strip() - + else: self.formatting_type = "CUSTOM" self.custom_expression = expression @@ -5450,9 +5446,9 @@ class ApplyElementValueRowsToLiteral(bpy.types.Operator): default_format = f"{{{{{row.element_key}}}}}" row.formatted_value = default_format value_part = default_format - + parts.append(row.separator + value_part) - + concatenated_value = "".join(parts) for attr in literal_props.attributes: @@ -5469,12 +5465,12 @@ class ApplyElementValueRowsToLiteral(bpy.types.Operator): This preserves formatting functions like upper(), round(), etc. """ import re - - pattern = r'\{\{[^}]+\}\}' - + + pattern = r"\{\{[^}]+\}\}" + new_base_value = f"{{{{{new_element_key}}}}}" updated_value = re.sub(pattern, new_base_value, old_formatted_value) - + return updated_value diff --git a/src/bonsai/bonsai/bim/module/drawing/prop.py b/src/bonsai/bonsai/bim/module/drawing/prop.py index da04caf7ff..018c0a634a 100644 --- a/src/bonsai/bonsai/bim/module/drawing/prop.py +++ b/src/bonsai/bonsai/bim/module/drawing/prop.py @@ -714,7 +714,9 @@ class ElementValueRow(PropertyGroup): ) element_key: StringProperty( - name="Element Key", description="The element value key (e.g., 'id', 'Name', 'Pset_WallCommon.Reference')", default="" + name="Element Key", + description="The element value key (e.g., 'id', 'Name', 'Pset_WallCommon.Reference')", + default="", ) formatted_value: StringProperty( @@ -756,33 +758,33 @@ def get_category_items_with_counts(self, context): ("Coordinates", "Coordinates", "Coordinate information", "EMPTY_ARROWS"), ("Custom String", "Custom String", "Add custom text (no element key)", "SMALL_CAPS"), ] - + obj = context.active_object - + if obj and tool.Ifc.get_entity(obj): try: element = tool.Ifc.get_entity(obj) text_element = element - - if hasattr(self, 'product_used'): + + if hasattr(self, "product_used"): if self.product_used: element = tool.Ifc.get_entity(self.product_used) else: assigned = tool.Drawing.get_assigned_product(text_element) if assigned: element = assigned - + available_keys = ElementValuesData.get_available_element_value_keys(element) items = [] for i, (identifier, base_name, description, icon) in enumerate(category_metadata): count = len(available_keys.get(identifier, [])) display_name = f"{base_name} ({count})" if count > 0 else base_name items.append((identifier, display_name, description, icon, i)) - + return items except Exception as e: pass - + return [(id, name, desc, icon, i) for i, (id, name, desc, icon) in enumerate(category_metadata)] @@ -843,16 +845,16 @@ class LiteralProps(PropertyGroup): ) element_value_rows: CollectionProperty( - name="Element Value Rows", + name="Element Value Rows", type=ElementValueRow, - description="Collection of element value rows for building the literal value" + description="Collection of element value rows for building the literal value", ) category_for_adding: EnumProperty( name="Category for Adding", items=get_category_items_with_counts, default=0, - description="Category to use when adding a new element value row" + description="Category to use when adding a new element value row", ) if TYPE_CHECKING: diff --git a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py index d7ddd0b9f7..d1a3897a20 100644 --- a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py +++ b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py @@ -115,9 +115,13 @@ def parse_markdown_it(text: str) -> list[dict[str, Union[str, None]]]: if tokens[j].type == "inline": for child in tokens[j].children or []: if child.type == "softbreak": - segments.append({"text": None, "url": None, "break": True, "bold": False, "italic": False}) + segments.append( + {"text": None, "url": None, "break": True, "bold": False, "italic": False} + ) elif child.type == "html_inline" and child.content.strip().lower() == "
": - segments.append({"text": None, "url": None, "break": True, "bold": False, "italic": False}) + segments.append( + {"text": None, "url": None, "break": True, "bold": False, "italic": False} + ) elif child.type == "strong_open": bold = True elif child.type == "strong_close": @@ -133,11 +137,27 @@ def parse_markdown_it(text: str) -> list[dict[str, Union[str, None]]]: elif child.type == "link_close" and link_opening: url = link_opening.attrGet("href") if url and link_text: - segments.append({"text": link_text, "url": url, "break": False, "bold": bold, "italic": italic}) + segments.append( + { + "text": link_text, + "url": url, + "break": False, + "bold": bold, + "italic": italic, + } + ) link_opening = None link_text = None elif child.type == "text" and not link_opening: - segments.append({"text": child.content, "url": None, "break": False, "bold": bold, "italic": italic}) + segments.append( + { + "text": child.content, + "url": None, + "break": False, + "bold": bold, + "italic": italic, + } + ) j += 1 i = j else: @@ -168,7 +188,9 @@ def parse_markdown_it(text: str) -> list[dict[str, Union[str, None]]]: link_opening = None link_text = None elif child.type == "text" and not link_opening: - segments.append({"text": child.content, "url": None, "break": False, "bold": bold, "italic": italic}) + segments.append( + {"text": child.content, "url": None, "break": False, "bold": bold, "italic": italic} + ) i += 1 segments = [seg for seg in segments if seg.get("text") is not None or seg.get("break", False)] if not segments: @@ -260,7 +282,7 @@ class SvgWriter: paths = self.resource_paths["Stylesheet"] if not paths: return - path_list = [p.strip() for p in paths.split(',')] + path_list = [p.strip() for p in paths.split(",")] for path in path_list: if not os.path.exists(path): print(f"WARNING. Couldn't find stylesheet for the drawing by the path: {path}") diff --git a/src/bonsai/bonsai/bim/module/drawing/ui.py b/src/bonsai/bonsai/bim/module/drawing/ui.py index c781d6ea23..d230add8f5 100644 --- a/src/bonsai/bonsai/bim/module/drawing/ui.py +++ b/src/bonsai/bonsai/bim/module/drawing/ui.py @@ -476,7 +476,6 @@ class BIM_PT_sheets(Panel): op = row3.operator("bim.activate_drawing_from_sheet", icon="OUTLINER_OB_CAMERA", text="") - if active_sheet.reference_type == "DRAWING": drawingnamesvg = active_sheet.name drawingname = drawingnamesvg.split(".svg")[0] @@ -680,13 +679,13 @@ class BIM_PT_text(Panel): if len(literal_props.attributes) > 0 and i < len(props.literal_apply_settings): row = box.row(align=True) bonsai.bim.helper.draw_attribute(literal_props.attributes[0], row, enable_search=True) - + expand_icon = "DOWNARROW_HLT" if getattr(literal_props, "show_element_values", False) else "RIGHTARROW" op = row.operator("bim.toggle_element_values_panel", icon=expand_icon, text="") op.literal_prop_id = i - + row.prop(props.literal_apply_settings[i], "apply_text_to_all", text="", icon="COPYDOWN") - + element = tool.Ifc.get_entity(obj) assigned_element = tool.Drawing.get_assigned_product(element) or element resolved_value = tool.Drawing.replace_text_literal_variables( @@ -711,8 +710,10 @@ class BIM_PT_text(Panel): element_values_row.prop(literal_props, "product_used", text="", icon="EYEDROPPER") current_product = get_current_product_for_element_values(obj, literal_props) - - product_name = current_product.name if (current_product and hasattr(current_product, "name")) else "Unknown" + + product_name = ( + current_product.name if (current_product and hasattr(current_product, "name")) else "Unknown" + ) source_row = values_box.row() source_row.label(text=f"Source: {product_name}", icon="OBJECT_DATA") @@ -720,29 +721,29 @@ class BIM_PT_text(Panel): if element: add_row = values_box.row(align=True) add_row.prop(literal_props, "category_for_adding", text="") - + op = add_row.operator("bim.add_element_value_row", text="Add Element", icon="ADD") op.literal_prop_id = i if len(literal_props.element_value_rows) > 0: for row_idx, value_row in enumerate(literal_props.element_value_rows): row = values_box.row(align=True) - + is_custom_string = value_row.category == "Custom String" - + if is_custom_string: category_icon = get_category_icon(value_row.category) row.prop(value_row, "element_key", text="", icon=category_icon) else: split = row.split(factor=0.25, align=True) - + sep_col = split.row(align=True) sep_col.prop(value_row, "separator", text="") - + key_col = split.row(align=True) category_icon = get_category_icon(value_row.category) key_col.prop(value_row, "element_key", text="", icon=category_icon) - + op = row.operator("bim.element_value_suggestions_popup", text="", icon="VIEWZOOM") op.literal_prop_id = i op.row_index = row_idx @@ -758,7 +759,9 @@ class BIM_PT_text(Panel): apply_row = values_box.row() apply_row.scale_y = 1.2 - op = apply_row.operator("bim.apply_element_value_rows_to_literal", text="Apply to Literal", icon="CHECKMARK") + op = apply_row.operator( + "bim.apply_element_value_rows_to_literal", text="Apply to Literal", icon="CHECKMARK" + ) op.literal_prop_id = i else: error_row = values_box.row() diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 24ad1cb013..85e76dc590 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1208,7 +1208,7 @@ class OverrideDuplicateMove(bpy.types.Operator): # Expand selection to include all parts of selected aggregates objects_to_duplicate = set(context.selected_objects) - objects_to_remove expanded_objects = set(objects_to_duplicate) - + for obj in objects_to_duplicate: element = tool.Ifc.get_entity(obj) if element and element.is_a("IfcElementAssembly"): @@ -1217,33 +1217,33 @@ class OverrideDuplicateMove(bpy.types.Operator): part_obj = tool.Ifc.get_object(part) if part_obj: expanded_objects.add(part_obj) - + # Store parent aggregate relationships parent_aggregates = {} - + for obj in expanded_objects: element = tool.Ifc.get_entity(obj) if element and element.is_a("IfcElementAssembly"): parent_aggregate = ifcopenshell.util.element.get_aggregate(element) if parent_aggregate: parent_aggregates[element] = parent_aggregate - + old_to_new, new_active_obj = tool.Geometry.duplicate_ifc_objects( expanded_objects, linked=linked, active_object=context.active_object, ) - + # Restore parent aggregate relationships, but only for parents that were NOT duplicated for old_elem, new_elems in old_to_new.items(): if old_elem in parent_aggregates: old_parent = parent_aggregates[old_elem] - + # Check if the parent was also duplicated if old_parent in old_to_new: # The duplication already created the correct nested relationship continue - + # Parent was NOT duplicated, so we need to assign to the original parent for new_elem in new_elems: new_obj = tool.Ifc.get_object(new_elem) @@ -1256,7 +1256,7 @@ class OverrideDuplicateMove(bpy.types.Operator): relating_obj=parent_obj, related_obj=new_obj, ) - + # Select all duplicated objects and their parts all_objects_to_select = set() for old_elem, new_elems in old_to_new.items(): @@ -1264,7 +1264,7 @@ class OverrideDuplicateMove(bpy.types.Operator): new_obj = tool.Ifc.get_object(new_elem) if new_obj: all_objects_to_select.add(new_obj) - + # If it's an aggregate, also select all its parts if new_elem.is_a("IfcElementAssembly"): parts = tool.Aggregate.get_parts_recursively(new_elem) @@ -1272,17 +1272,17 @@ class OverrideDuplicateMove(bpy.types.Operator): part_obj = tool.Ifc.get_object(part) if part_obj: all_objects_to_select.add(part_obj) - + # Deselect everything first - bpy.ops.object.select_all(action='DESELECT') - + bpy.ops.object.select_all(action="DESELECT") + # Select all the duplicated objects for obj in all_objects_to_select: obj.select_set(True) - + if new_active_obj: context.view_layer.objects.active = new_active_obj - + return old_to_new @@ -1614,7 +1614,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): if r.is_a("IfcRelAssignsToGroup") if self.group_name in r.RelatingGroup.Name ).id() - + # Initialize if not exists if group not in original_data: original_data[group] = {} @@ -1666,20 +1666,22 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): # Get the new group new_group_entity = next( - (r.RelatingGroup - for r in getattr(aggregate, "HasAssignments", []) or [] - if r.is_a("IfcRelAssignsToGroup") - if self.group_name in r.RelatingGroup.Name), - None + ( + r.RelatingGroup + for r in getattr(aggregate, "HasAssignments", []) or [] + if r.is_a("IfcRelAssignsToGroup") + if self.group_name in r.RelatingGroup.Name + ), + None, ) - + if not new_group_entity: return pset = ifcopenshell.util.element.get_pset(element, self.pset_name) if not pset: return - + index = pset["Index"] # Find the matching old group by looking for the same aggregate name @@ -1697,7 +1699,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): if index in group_data: matching_group_id = group_id break - + if matching_group_id is None: return @@ -1709,7 +1711,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): ifc_file.by_id(pset["id"]), properties={"Aggregate_Index": int(original_data[matching_group_id][index]["Aggregate_Index"])}, ) - + # Only assign container if element is not already aggregated under another element # Aggregated elements should not be in the spatial structure if not ifcopenshell.util.element.get_aggregate(element): @@ -1722,7 +1724,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): ) for part in ifcopenshell.util.element.get_parts(tool.Ifc.get_entity(obj)): tool.Collector.assign(tool.Ifc.get_object(part)) - + assignments = original_data[matching_group_id][index]["Assignment"] if assignments: assign_to_annotations(obj, assignments) @@ -1837,7 +1839,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): base_pset = ifcopenshell.util.element.get_pset(base_instance, self.pset_name) base_obj = tool.Ifc.get_object(base_instance) base_obj.name = base_pset["Name"] + "_" + str(base_pset["Aggregate_Index"]) - + for element in instances_to_refresh: if element.GlobalId == base_instance.GlobalId: continue diff --git a/src/bonsai/bonsai/bim/module/material/data.py b/src/bonsai/bonsai/bim/module/material/data.py index 3df1506fdc..b56ff93e33 100644 --- a/src/bonsai/bonsai/bim/module/material/data.py +++ b/src/bonsai/bonsai/bim/module/material/data.py @@ -433,29 +433,29 @@ class ObjectMaterialData: """Load BBIM_MaterialLayer pset data for display in UI.""" if not cls.element: return None - + pset_data = ifcopenshell.util.element.get_pset(cls.element, "BBIM_MaterialLayer") if not pset_data or not pset_data.get("UseCustomOffset", False): return None - + # Keep offset in SI units - format_distance will handle conversion custom_offset_si = pset_data.get("CustomOffset", 0.0) - + # Get the appropriate reference based on usage type usage_type = tool.Model.get_usage_type(cls.element) custom_reference = None reference_label = None - + if usage_type == "LAYER2": custom_reference = pset_data.get("CustomWallReference", "") reference_label = "Wall Reference" elif usage_type == "LAYER3": custom_reference = pset_data.get("CustomSlabReference", "") reference_label = "Slab Reference" - + return { "use_custom_offset": pset_data.get("UseCustomOffset", False), "custom_offset": custom_offset_si, # Store in SI units "custom_reference": custom_reference, "reference_label": reference_label, - } \ No newline at end of file + } diff --git a/src/bonsai/bonsai/bim/module/material/operator.py b/src/bonsai/bonsai/bim/module/material/operator.py index e8243ccf1e..f46f2c7b6a 100644 --- a/src/bonsai/bonsai/bim/module/material/operator.py +++ b/src/bonsai/bonsai/bim/module/material/operator.py @@ -509,10 +509,10 @@ class EnableEditingAssignedMaterial(bpy.types.Operator): bonsai.bim.helper.import_attributes(material[0], props.material_set_attributes) else: bonsai.bim.helper.import_attributes(material, props.material_set_attributes) - + # Load custom offset from BBIM_MaterialLayer pset tool.Model.load_custom_offset_from_pset(element, obj) - + return {"FINISHED"} def import_attributes_callback( @@ -625,7 +625,7 @@ class EditAssignedMaterial(bpy.types.Operator, tool.Ifc.Operator): obj_material_usage.ReferenceExtent = material.ReferenceExtent layer_sets_to_regenerate.add(obj_material_usage.ForLayerSet) - + # Save custom offset to BBIM_MaterialLayer pset tool.Model.save_custom_offset_to_pset(obj_element, obj) diff --git a/src/bonsai/bonsai/bim/module/material/ui.py b/src/bonsai/bonsai/bim/module/material/ui.py index 969661885a..c1b9ac2ae4 100644 --- a/src/bonsai/bonsai/bim/module/material/ui.py +++ b/src/bonsai/bonsai/bim/module/material/ui.py @@ -233,7 +233,7 @@ class BIM_PT_object_material(Panel): # Material Set Attributes Section row = self.layout.row(align=True) box = row.box() - + bonsai.bim.helper.draw_attributes(self.props.material_set_attributes, box) bonsai.bim.helper.draw_attributes(self.props.material_set_usage_attributes, box) @@ -246,7 +246,7 @@ class BIM_PT_object_material(Panel): "layer": "Material Layers", "profile": "Material Profiles", "constituent": "Material Constituents", - "list_item": "Material List Items" + "list_item": "Material List Items", } header_text = header_map.get(set_item_name, "Material Items") self.layout.label(text=header_text) @@ -255,7 +255,7 @@ class BIM_PT_object_material(Panel): row = self.layout.row(align=True) box = row.box() - + # Add Material Section (at the top of this box) if ObjectMaterialData.data["set_item_name"] == "profile" and not self.mprops.profiles: box_row = box.row(align=True) @@ -268,7 +268,7 @@ class BIM_PT_object_material(Panel): prop_with_search(box_row, self.props, "material", icon="MATERIAL", text="") op = box_row.operator(f"bim.add_{ObjectMaterialData.data['set_item_name']}", icon="ADD", text="") setattr(op, f"{ObjectMaterialData.data['set_item_name']}_set", ObjectMaterialData.data["set"]["id"]) - + active_object = bpy.context.active_object self.layerset_bounds(box, active_object, location="Top_Interior") @@ -356,7 +356,7 @@ class BIM_PT_object_material(Panel): # Material Set Information Section row = self.layout.row(align=True) box = row.box() - + if ObjectMaterialData.data["material_class"] != "IfcMaterialList": box_row = box.row(align=True) set_name = ObjectMaterialData.data["set"]["name"] @@ -395,6 +395,7 @@ class BIM_PT_object_material(Panel): if unit_system == "IMPERIAL": precision = prefs.doc.imperial_precision from bonsai.bim.module.drawing.helper import format_distance + formatted_offset = format_distance( offset_value, precision=precision, suppress_zero_inches=True, in_unit_length=True ) @@ -405,10 +406,10 @@ class BIM_PT_object_material(Panel): # BBIM_MaterialLayer Pset Section if pset_data := ObjectMaterialData.data.get("bbim_material_layer_pset"): self.layout.label(text="BBIM_MaterialLayer Pset") - + row = self.layout.row(align=True) box = row.box() - + # Custom Offset value - format using format_distance unit_system = bpy.context.scene.unit_settings.system prefs = tool.Blender.get_addon_preferences() @@ -416,13 +417,14 @@ class BIM_PT_object_material(Panel): if unit_system == "IMPERIAL": precision = prefs.doc.imperial_precision from bonsai.bim.module.drawing.helper import format_distance + formatted_custom_offset = format_distance( - pset_data['custom_offset'], precision=precision, suppress_zero_inches=True, in_unit_length=True + pset_data["custom_offset"], precision=precision, suppress_zero_inches=True, in_unit_length=True ) box_row = box.row(align=True) box_row.label(text="Custom Offset") box_row.label(text=formatted_custom_offset) - + # Reference (if exists) if pset_data["custom_reference"]: box_row = box.row(align=True) @@ -436,12 +438,12 @@ class BIM_PT_object_material(Panel): "layer": "Material Layers", "profile": "Material Profiles", "constituent": "Material Constituents", - "list_item": "Material List Items" + "list_item": "Material List Items", } header_text = header_map.get(set_item_name, "Material Items") else: header_text = "Materials" - + self.layout.label(text=header_text) row = self.layout.row(align=True) box = row.box() @@ -492,11 +494,11 @@ class BIM_PT_object_material(Panel): if layer_set_direction: row = self.layout.row(align=True) row.label(text="BBIM_MaterialLayer Pset") - + # Add indentation with a row that has a separator row = self.layout.row(align=True) # row.separator(factor=2.0) # Adjust factor for more/less indent - + box = row.box() box_row = box.row(align=True) box_row.prop(self.props, "use_custom_offset", text="Use Custom Offset") diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index b1f91a6398..256251b06c 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -170,7 +170,7 @@ class FilledOpeningGenerator: reuse_mapped_representation = True else: representation = ifcopenshell.util.representation.resolve_representation(representation) - + if not reuse_mapped_representation: # Check for library template before generating from filling template_rep = self.get_opening_template_from_type(filling) @@ -191,25 +191,25 @@ class FilledOpeningGenerator: MappingSource=existing_mapping_source, MappingTarget=tool.Ifc.get().create_entity( "IfcCartesianTransformationOperator3D", - Axis1=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(1., 0., 0.)), - Axis2=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0., 1., 0.)), - LocalOrigin=tool.Ifc.get().create_entity("IfcCartesianPoint", Coordinates=(0., 0., 0.)), - Scale=1., - Axis3=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0., 0., 1.)) - ) + Axis1=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(1.0, 0.0, 0.0)), + Axis2=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0.0, 1.0, 0.0)), + LocalOrigin=tool.Ifc.get().create_entity("IfcCartesianPoint", Coordinates=(0.0, 0.0, 0.0)), + Scale=1.0, + Axis3=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0.0, 0.0, 1.0)), + ), ) mapped_representation = tool.Ifc.get().create_entity( "IfcShapeRepresentation", ContextOfItems=context, RepresentationIdentifier="Body", RepresentationType="MappedRepresentation", - Items=[new_mapped_item] + Items=[new_mapped_item], ) else: mapped_representation = ifcopenshell.api.geometry.map_representation( tool.Ifc.get(), representation=representation ) - + ifcopenshell.api.geometry.assign_representation( tool.Ifc.get(), product=opening, representation=mapped_representation ) @@ -333,25 +333,25 @@ class FilledOpeningGenerator: MappingSource=existing_mapping_source, MappingTarget=tool.Ifc.get().create_entity( "IfcCartesianTransformationOperator3D", - Axis1=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(1., 0., 0.)), - Axis2=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0., 1., 0.)), - LocalOrigin=tool.Ifc.get().create_entity("IfcCartesianPoint", Coordinates=(0., 0., 0.)), - Scale=1., - Axis3=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0., 0., 1.)) - ) + Axis1=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(1.0, 0.0, 0.0)), + Axis2=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0.0, 1.0, 0.0)), + LocalOrigin=tool.Ifc.get().create_entity("IfcCartesianPoint", Coordinates=(0.0, 0.0, 0.0)), + Scale=1.0, + Axis3=tool.Ifc.get().create_entity("IfcDirection", DirectionRatios=(0.0, 0.0, 1.0)), + ), ) mapped_representation = tool.Ifc.get().create_entity( "IfcShapeRepresentation", ContextOfItems=context, RepresentationIdentifier="Body", RepresentationType="MappedRepresentation", - Items=[new_mapped_item] + Items=[new_mapped_item], ) else: mapped_representation = ifcopenshell.api.geometry.map_representation( tool.Ifc.get(), representation=representation_to_use ) - + ifcopenshell.api.geometry.assign_representation( tool.Ifc.get(), product=opening, representation=mapped_representation ) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index dd65f9c1c1..2b2c3a2984 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -297,13 +297,13 @@ class DumbSlabPlaner: extrusion = tool.Model.get_extrusion(representation) if extrusion: direction_ratios = Vector(extrusion.ExtrudedDirection.DirectionRatios) - + # Calculate the actual extrusion angle from vertical extrusion_angle = 0 if direction_ratios.length > 0: cos_angle = direction_ratios.normalized().dot(Vector((0, 0, 1))) extrusion_angle = acos(min(max(cos_angle, -1), 1)) - + # FIX: Only apply 1/cos factor when there's actual extrusion slope if extrusion_angle > 1e-6: perpendicular_depth = thickness * abs(1 / cos(extrusion_angle)) @@ -311,13 +311,13 @@ class DumbSlabPlaner: else: perpendicular_depth = thickness perpendicular_offset = layer_offset / self.unit_scale - + # Check if direction sense needs to be applied # This should only happen if explicitly requested, not automatically if layer_params.get("apply_direction_sense", False): # Store current direction before potential change old_direction = direction_ratios.copy() - + # Apply direction sense logic existing_x_angle = extrusion_angle if (abs(existing_x_angle) < (pi / 2) and direction_ratios.z > 0) or ( @@ -331,26 +331,26 @@ class DumbSlabPlaner: offset_direction = direction_ratios.copy() * -1 if layer_params["direction_sense"] == "POSITIVE": direction_ratios *= -1 - + # If direction changed, update extrusion with rotation compensation if (direction_ratios.normalized() - old_direction.normalized()).length > 1e-6: update_extrusion_direction(element, tuple(direction_ratios), obj) # After updating direction, get the updated extrusion extrusion = tool.Model.get_extrusion(representation) - + # Update depth extrusion.Depth = perpendicular_depth - + # Update position ifc_position = extrusion.Position if direction_ratios.length > 0: offset_vector = direction_ratios.normalized() * perpendicular_offset position = offset_vector - + material = ifcopenshell.util.element.get_material(element) if material and material.is_a("IfcMaterialLayerSetUsage"): material.OffsetFromReferenceLine = position.z - + if ifc_position: ifc_position.Location.Coordinates = position else: @@ -397,13 +397,12 @@ class DumbSlabPlaner: representation=representation, ) - - def update_extrusion_direction(element: ifcopenshell.entity_instance, - new_direction_ratios: tuple, - obj: bpy.types.Object = None) -> None: + def update_extrusion_direction( + element: ifcopenshell.entity_instance, new_direction_ratios: tuple, obj: bpy.types.Object = None + ) -> None: """ Update extrusion direction while preserving overall object orientation. - + Args: element: The IFC element new_direction_ratios: New extrusion direction ratios (x,y,z) @@ -413,66 +412,66 @@ class DumbSlabPlaner: obj = tool.Ifc.get_object(element) if not obj: return - + representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if not representation: return - + extrusion = tool.Model.get_extrusion(representation) if not extrusion: return - + # Get current extrusion direction old_direction = Vector(extrusion.ExtrudedDirection.DirectionRatios) if old_direction.length == 0: old_direction = Vector((0, 0, 1)) # Default - + new_direction = Vector(new_direction_ratios) if new_direction.length == 0: new_direction = Vector((0, 0, 1)) # Default - + # Normalize both directions old_direction_normalized = old_direction.normalized() new_direction_normalized = new_direction.normalized() - + # Store current object matrix old_matrix = obj.matrix_world.copy() - + # Calculate the rotation needed to keep same orientation # When extrusion direction changes from A to B relative to local coordinates, # we need to rotate the object by the inverse of that change - + # Calculate rotation from old to new direction rotation_axis = old_direction_normalized.cross(new_direction_normalized) if rotation_axis.length > 1e-6: rotation_axis.normalized() dot_product = old_direction_normalized.dot(new_direction_normalized) angle = acos(min(max(dot_product, -1), 1)) - + # Apply INVERSE rotation to object to compensate rotation_matrix = Matrix.Rotation(-angle, 4, rotation_axis) - + # Update object rotation obj.matrix_world = old_matrix @ rotation_matrix bpy.context.view_layer.update() - + # Update extrusion direction (keeping magnitude) if old_direction.length > 0: # Preserve the magnitude of the original direction vector magnitude = old_direction.length new_direction = new_direction_normalized * magnitude - + extrusion.ExtrudedDirection.DirectionRatios = tuple(new_direction) - + # Update depth based on new extrusion angle extrusion_angle = 0 if new_direction.length > 0: cos_angle = new_direction_normalized.dot(Vector((0, 0, 1))) extrusion_angle = acos(min(max(cos_angle, -1), 1)) - + # Get current depth (perpendicular depth) current_perpendicular_depth = extrusion.Depth - + # If we have material layer info, calculate actual thickness material = ifcopenshell.util.element.get_material(element) actual_thickness = current_perpendicular_depth @@ -481,15 +480,15 @@ class DumbSlabPlaner: actual_thickness = sum([l.LayerThickness for l in layer_set.MaterialLayers]) unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) actual_thickness *= unit_scale - + # Convert to perpendicular depth if needed if extrusion_angle > 1e-6: new_perpendicular_depth = actual_thickness * abs(1 / cos(extrusion_angle)) else: new_perpendicular_depth = actual_thickness - + extrusion.Depth = new_perpendicular_depth - + # Update position offset if needed if extrusion.Position: # Recalculate offset based on new direction @@ -500,7 +499,7 @@ class DumbSlabPlaner: perpendicular_offset = offset * abs(1 / cos(extrusion_angle)) else: perpendicular_offset = offset - + offset_vector = new_direction_normalized * perpendicular_offset extrusion.Position.Location.Coordinates = tuple(offset_vector) @@ -778,7 +777,7 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): extrusion = tool.Model.get_extrusion(body) existing_x_angle = tool.Model.get_existing_x_angle(extrusion) layer_params = tool.Model.get_material_layer_parameters(element) - + usage_type = tool.Model.get_usage_type(element) if extrusion.Position: @@ -798,7 +797,7 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): # Store original rotation for later restoration original_rotation_x = obj.rotation_euler.x obj["pre_edit_rotation_x"] = original_rotation_x - + # Reset rotation to zero - profile will be horizontal current_z_rot = obj.rotation_euler.z obj.rotation_euler.x = 0.0 @@ -819,12 +818,12 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): # For LAYER3: Use x_angle=0 and scale by cos(rotation) to get horizontal projection obj_x_rotation = original_rotation_x # Use stored original rotation scale_factor = abs(cos(obj_x_rotation)) if abs(obj_x_rotation) > 1e-6 else 1.0 - + # Import with x_angle=0 tool.Model.import_profile(extrusion.SweptArea, obj=obj, position=position, x_angle=0) - + # Scale the Y coordinates by cos(rotation) to get horizontal projection - bpy.ops.object.mode_set(mode='OBJECT') + bpy.ops.object.mode_set(mode="OBJECT") for vert in obj.data.vertices: vert.co.y *= scale_factor else: @@ -835,7 +834,7 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): ProfileDecorator.install(context, exit_edit_mode_callback=lambda: disable_editing_extrusion_profile(context)) if not bpy.app.background: tool.Blender.set_viewport_tool("bim.cad_tool") - + return {"FINISHED"} @@ -858,7 +857,7 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): existing_x_angle = tool.Model.get_existing_x_angle(extrusion) layer_params = tool.Model.get_material_layer_parameters(element) usage_type = tool.Model.get_usage_type(element) - + if extrusion.Position: position = Matrix(ifcopenshell.util.placement.get_axis2placement(extrusion.Position).tolist()) position.translation *= self.unit_scale @@ -895,16 +894,17 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): # Scale Y coordinates back up before exporting obj_x_rotation = obj.rotation_euler.x scale_factor = abs(cos(obj_x_rotation)) if abs(obj_x_rotation) > 1e-6 else 1.0 - + # Un-scale the profile before exporting for vert in obj.data.vertices: vert.co.y /= scale_factor # Inverse of import scaling - + profile = tool.Model.export_profile(obj, position=position, x_angle=0) else: profile = tool.Model.export_profile(obj, position=position, x_angle=existing_x_angle) if not profile: + def msg(self, context): self.layout.label(text="INVALID PROFILE") @@ -953,7 +953,6 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): tool.Ifc.get(), product=element, representation=new_footprint ) - footprint_context = ifcopenshell.util.representation.get_context( tool.Ifc.get(), "Plan", "FootPrint", "SKETCH_VIEW" ) diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index 8557ae6ccb..d894aa71d1 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -397,28 +397,28 @@ class ChangeExtrusionDepth(bpy.types.Operator, tool.Ifc.Operator): for obj in selected_objs: element = tool.Ifc.get_entity(obj) assert element - + representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if not representation: continue - + extrusion = tool.Model.get_extrusion(representation) if not extrusion: continue - + # Get extrusion direction x, y, z = extrusion.ExtrudedDirection.DirectionRatios - + # Calculate angle from vertical x_angle = Vector((0, 1)).angle_signed(Vector((y, z))) - + # For sloped walls, compensate so VERTICAL height = target depth cos_angle = cos(x_angle) compensation_factor = abs(1 / cos_angle) if abs(cos_angle) > 1e-6 else 1.0 new_depth_ifc = (self.depth / si_conversion) * compensation_factor - + extrusion.Depth = new_depth_ifc - + # IMPORTANT: Refresh the geometry to reflect the IFC changes bonsai.core.geometry.switch_representation( tool.Ifc, @@ -426,7 +426,7 @@ class ChangeExtrusionDepth(bpy.types.Operator, tool.Ifc.Operator): obj=obj, representation=representation, ) - + if tool.Model.get_usage_type(element) == "LAYER2": for rel in element.ConnectedFrom: if rel.is_a() == "IfcRelConnectsElements": @@ -436,7 +436,7 @@ class ChangeExtrusionDepth(bpy.types.Operator, tool.Ifc.Operator): if layer2_objs: tool.Model.recalculate_walls(layer2_objs) - + return {"FINISHED"} @@ -471,51 +471,55 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): extrusion = tool.Model.get_extrusion(representation) if not extrusion: continue - + # Get current object rotation matrix obj_rotation = obj.matrix_world.to_3x3() - + # Get current extrusion direction in LOCAL coordinates current_local_direction = Vector(extrusion.ExtrudedDirection.DirectionRatios) if current_local_direction.length == 0: current_local_direction = Vector((0, 0, 1)) current_local_direction_normalized = current_local_direction.normalized() - + # Calculate what the current extrusion direction is in WORLD coordinates current_world_direction = obj_rotation @ current_local_direction_normalized - + existing_x_angle = tool.Model.get_existing_x_angle(extrusion) existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle - + # Calculate the NEW local extrusion direction based on x_angle new_local_direction = Vector((0.0, sin(x_angle), cos(x_angle))) - + # Check if extrusion direction is actually changing current_local_norm = current_local_direction_normalized new_local_norm = new_local_direction.normalized() - + # Compare the LOCAL directions local_direction_changed = (new_local_norm - current_local_norm).length > 1e-6 - + if tool.Model.get_usage_type(element) == "LAYER2": depth = extrusion.Depth / abs(1 / cos(existing_x_angle)) perpendicular_depth = depth * abs(1 / cos(x_angle)) - + # Update extrusion direction if local_direction_changed: extrusion.ExtrudedDirection.DirectionRatios = tuple(new_local_direction) - + # Always update depth extrusion.Depth = perpendicular_depth layer2_objs.append(obj) - + else: if tool.Model.get_usage_type(element) == "LAYER3": # For slabs, handle polyline scaling existing_obj_x_angle = obj.rotation_euler.x - existing_obj_x_angle = 0 if tool.Cad.is_x(existing_obj_x_angle, 0, tolerance=0.001) else existing_obj_x_angle - existing_obj_x_angle = 0 if tool.Cad.is_x(existing_obj_x_angle, pi, tolerance=0.001) else existing_obj_x_angle + existing_obj_x_angle = ( + 0 if tool.Cad.is_x(existing_obj_x_angle, 0, tolerance=0.001) else existing_obj_x_angle + ) + existing_obj_x_angle = ( + 0 if tool.Cad.is_x(existing_obj_x_angle, pi, tolerance=0.001) else existing_obj_x_angle + ) # Scale the polyline coordinates coord_list = builder.get_polyline_coords(extrusion.SweptArea.OuterCurve) @@ -547,11 +551,11 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): offset_direction *= -1 if layer_params["direction_sense"] == "POSITIVE": final_local_direction *= -1 - + # Check if extrusion direction actually changed final_local_norm = final_local_direction.normalized() local_direction_changed = (final_local_norm - current_local_norm).length > 1e-6 - + # Update extrusion properties extrusion.ExtrudedDirection.DirectionRatios = tuple(final_local_direction) extrusion.Depth = perpendicular_depth @@ -559,19 +563,19 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): if extrusion.Position or perpendicular_offset != 0: position = offset_direction * perpendicular_offset tool.Model.add_extrusion_position(extrusion, position) - + # Adjust object rotation if extrusion direction changed if local_direction_changed: # Calculate what the NEW world direction would be with current object rotation expected_new_world_direction = obj_rotation @ final_local_norm - + # The rotation needed is from expected_new_world_direction to current_world_direction rotation_axis = expected_new_world_direction.cross(current_world_direction) if rotation_axis.length > 1e-6: rotation_axis.normalize() dot_product = expected_new_world_direction.dot(current_world_direction) angle = acos(min(max(dot_product, -1), 1)) - + # Create and apply rotation matrix rotation_matrix = Matrix.Rotation(angle, 4, rotation_axis) obj.matrix_world = rotation_matrix @ obj.matrix_world @@ -1081,7 +1085,7 @@ class DumbWallGenerator: obj=obj, representation=representation, ) - + pset = ifcopenshell.api.pset.add_pset(self.file, product=element, name="EPset_Parametric") ifcopenshell.api.pset.edit_pset(self.file, pset=pset, properties={"Engine": "Bonsai.DumbLayer2"}) material = ifcopenshell.util.element.get_material(element) diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index be02f3f4c8..578fbefa2a 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -399,7 +399,7 @@ class EditItemUI: assert obj mesh_props = tool.Geometry.get_mesh_props(obj.data) - + # Get the parent element from representation_obj to check for layer set usage has_layer_set_usage = False props = tool.Geometry.get_geometry_props() @@ -408,7 +408,7 @@ class EditItemUI: if parent_element: material_usage = tool.Model.get_usage_type(parent_element) has_layer_set_usage = material_usage == "LAYER3" - + if AuthoringData.data["is_representation_item_swept_solid"]: # TODO: support EndSweptArea for IfcRevolvedAreaSolidTapered, # will need to add second attribute for this. @@ -427,7 +427,7 @@ class EditItemUI: continue row = cls.layout.row() draw_attribute(item_attribute, cls.layout) - + if len(mesh_props.item_attributes) or AuthoringData.data["is_representation_item_swept_solid"]: row = cls.layout.row() row.operator("bim.update_item_attributes", icon="FILE_REFRESH", text="") diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index a549f7d69e..b0f74cfb40 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -1062,7 +1062,7 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): and not self.is_advanced ): filepath = self.get_filepath() - + # First, load the IFC file temporarily to check for metadata document temp_ifc = None has_metadata_doc = False @@ -1076,7 +1076,7 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): pass finally: temp_ifc = None - + if has_metadata_doc: suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix if str(filepath).lower().endswith(".ifc"): @@ -1137,10 +1137,10 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper): props.is_loading = True props.total_elements = len(tool.Ifc.get().by_type("IfcElement")) props.use_relative_project_path = self.use_relative_path - + metadata_doc = tool.Project.get_metadata_document_information() props.should_save_metadata_for_this_file = metadata_doc is not None - + tool.Blender.register_toolbar() tool.Project.add_recent_ifc_project(self.get_filepath_abs()) @@ -1776,7 +1776,7 @@ class ExportIFC(bpy.types.Operator, ExportHelper): metadata_filename = os.path.basename(output_file)[:-4] + suffix else: metadata_filename = os.path.basename(output_file) + suffix - + if not tool.Project.get_metadata_document_information(): tool.Project.create_metadata_document_information(metadata_filename) else: @@ -3165,6 +3165,7 @@ class ImageScalingTool(bpy.types.Operator, PolylineOperator): return {"FINISHED"} + class LoadBlendMetadataAndIFC(bpy.types.Operator): bl_idname = "bim.load_blend_metadata_and_ifc" bl_label = "Load Blend Metadata and IFC" @@ -3202,4 +3203,4 @@ class LoadBlendMetadataAndIFC(bpy.types.Operator): bpy.app.handlers.load_post.append(load_handler) bpy.ops.wm.open_mainfile(filepath=metadata_path) - return {"FINISHED"} \ No newline at end of file + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index d8c1cab7d1..8cfc3fb0d4 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -364,8 +364,6 @@ bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}') return {"FINISHED"} - - # TODO: Unused operator. # Is there a need for this or 'DIR_PATH' propety subtype does almost the same, # but also has alt+click? diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index f799076727..75f12e49d8 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -638,7 +638,7 @@ class BIMProperties(PropertyGroup): ], name="Time Unit", default="HOUR", - ) + ) tab_visibilities: CollectionProperty(type=BIMTabVisibility, name="Tab Visibilities") panel_properties: CollectionProperty(type=BIMPanelProperties, name="Panel Properties") diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index 407bb19cb0..6ce74fe394 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -402,7 +402,7 @@ def update_drawing_name( camera = ifc.get_object(drawing) if camera and camera.name != name: camera.name = name - + group = drawing_tool.get_drawing_group(drawing) if drawing_tool.get_name(group) != name: ifc.run("attribute.edit_attributes", product=group, attributes={"Name": name}) diff --git a/src/bonsai/bonsai/core/root.py b/src/bonsai/bonsai/core/root.py index 957298c044..b8f960247c 100644 --- a/src/bonsai/bonsai/core/root.py +++ b/src/bonsai/bonsai/core/root.py @@ -63,20 +63,20 @@ def copy_class( def _has_material_styles(ifc: type[tool.Ifc], element: ifcopenshell.entity_instance) -> bool: """Check if element has styles defined through its material. - + Returns True if any constituent material has a style representation, which means styles should NOT be applied directly to the geometry. """ materials = ifcopenshell.util.element.get_materials(element) - + if not materials: return False - + # Check if any of the constituent materials have styles for material in materials: - if hasattr(material, 'HasRepresentation') and material.HasRepresentation: + if hasattr(material, "HasRepresentation") and material.HasRepresentation: return True - + return False diff --git a/src/bonsai/bonsai/core/type.py b/src/bonsai/bonsai/core/type.py index 7926c53ff1..2918e841f7 100644 --- a/src/bonsai/bonsai/core/type.py +++ b/src/bonsai/bonsai/core/type.py @@ -33,17 +33,16 @@ def assign_type( element: ifcopenshell.entity_instance, type: ifcopenshell.entity_instance, ) -> None: - - + # Get the instance's current CardinalPoint before type assignment instance_cardinal_point = None instance_material = ifcopenshell.util.element.get_material(element) if instance_material and instance_material.is_a("IfcMaterialProfileSetUsage"): instance_cardinal_point = instance_material.CardinalPoint - + ifc.run("type.assign_type", related_objects=[element], relating_type=type) obj = ifc.get_object(element) - + if type_tool.has_material_usage(element): # Restore the instance's CardinalPoint to the new material usage if instance_cardinal_point is not None: @@ -51,16 +50,17 @@ def assign_type( if new_instance_material and new_instance_material.is_a("IfcMaterialProfileSetUsage"): if new_instance_material.CardinalPoint != instance_cardinal_point: new_instance_material.CardinalPoint = instance_cardinal_point - + # Force representation regeneration from bonsai.bim.module.model.profile import DumbProfileRecalculator + DumbProfileRecalculator().recalculate([obj]) # for now, representation regeneration handled by API listeners else: type_data = type_tool.get_object_data(ifc.get_object(type)) if type_data: type_tool.change_object_data(obj, type_data, is_global=False) - + type_tool.disable_editing(obj) diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 09bfcf29cc..e45e2b1206 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -382,17 +382,14 @@ class Blender(bonsai.core.tool.Blender): assert isinstance(space, bpy.types.SpaceNodeEditor) if space.tree_type == "ShaderNodeTree": context_override = {"area": area, "space": space, "screen": screen} - + # Add window if screen differs from current context context = bpy.context if context and context.screen != screen: - window = next( - (w for w in context.window_manager.windows if w.screen == screen), - None - ) + window = next((w for w in context.window_manager.windows if w.screen == screen), None) if window: context_override["window"] = window - + return context_override @classmethod diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index 89603372d0..a15a3f8a29 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -1030,16 +1030,16 @@ class Loader(bonsai.core.tool.Loader): sense_factor = 1 else: return mesh - + if len(layer_set.MaterialLayers) == 1: return mesh - + bm = bmesh.new() bm.from_mesh(mesh) - + prev_co = None advance_direction = None # Will store direction to advance planes - + if not usage: sense_factor = 1 no = cls.get_extrusion_vector(element).normalized() @@ -1047,7 +1047,7 @@ class Loader(bonsai.core.tool.Loader): advance_direction = no elif usage.LayerSetDirection == "AXIS2": co = Vector((0.0, offset, 0.0)) - + # Get LOCAL extrusion direction local_extrusion = Vector([0.0, 0.0, 1.0]) if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): @@ -1057,14 +1057,14 @@ class Loader(bonsai.core.tool.Loader): if item.is_a("IfcExtrudedAreaSolid"): local_extrusion = Vector(item.ExtrudedDirection.DirectionRatios).normalized() break - + # Thickness direction: perpendicular to extrusion and length thickness_dir = local_extrusion.cross(Vector([1.0, 0.0, 0.0])).normalized() - + # Ensure it points in POSITIVE Y (through wall thickness, not backwards) if thickness_dir.y < 0: thickness_dir = -thickness_dir - + no = thickness_dir advance_direction = thickness_dir elif usage.LayerSetDirection == "AXIS3": @@ -1077,10 +1077,10 @@ class Loader(bonsai.core.tool.Loader): no = cls.get_extrusion_vector(element).normalized() no = Vector([1.0, 0.0, 0.0]) advance_direction = no - + no *= sense_factor advance_direction *= sense_factor - + # Cache this body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") styles = {} @@ -1088,25 +1088,25 @@ class Loader(bonsai.core.tool.Loader): for i, material in enumerate(mesh.materials): if style := tool.Ifc.get_entity(material): styles[style] = i - + last_i = len(layer_set.MaterialLayers) - 1 for i, layer in enumerate(layer_set.MaterialLayers): if i != last_i: prev_co = co.copy() # Use advance_direction (not no) to move planes! co += advance_direction * layer.LayerThickness * cls.unit_scale - + bisect_geom = bmesh.ops.bisect_plane( bm, geom=bm.verts[:] + bm.edges[:] + bm.faces[:], dist=0.0001, plane_co=co, plane_no=no ) bmesh.ops.duplicate(bm, geom=bisect_geom["geom_cut"]) - + if not (style := ifcopenshell.util.representation.get_material_style(layer.Material, body)): continue if (material_index := styles.get(style, None)) is None: material_index = len(mesh.materials) mesh.materials.append(tool.Ifc.get_object(style)) - + if i == last_i: for face in bisect_geom["geom"]: if isinstance(face, bmesh.types.BMFace): @@ -1139,14 +1139,14 @@ class Loader(bonsai.core.tool.Loader): item = item.FirstOperand if item.is_a("IfcExtrudedAreaSolid"): local_direction = Vector(item.ExtrudedDirection.DirectionRatios) - + # Transform to world coordinates using object rotation obj = tool.Ifc.get_object(element) if obj: # Apply object rotation to get actual world direction world_direction = obj.matrix_world.to_3x3() @ local_direction return world_direction - + return local_direction return Vector([0.0, 0.0, 1.0]) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 2250cbe9c0..e7da203a85 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -620,12 +620,11 @@ class Model(bonsai.core.tool.Model): if not openings[i].obj: openings.remove(i) - @classmethod def save_custom_offset_to_pset(cls, element: ifcopenshell.entity_instance, obj: bpy.types.Object) -> None: """Save custom offset settings to BBIM_MaterialLayer pset.""" props = tool.Material.get_object_material_props(obj) - + if not props.use_custom_offset: # Remove pset if custom offset is disabled pset = ifcopenshell.util.element.get_pset(element, "BBIM_MaterialLayer") @@ -633,24 +632,24 @@ class Model(bonsai.core.tool.Model): pset_entity = tool.Ifc.get().by_id(pset["id"]) ifcopenshell.api.pset.remove_pset(tool.Ifc.get(), product=element, pset=pset_entity) return - + # Determine which reference to save based on usage type usage_type = tool.Model.get_usage_type(element) custom_wall_reference = None custom_slab_reference = None - + if usage_type == "LAYER2": custom_wall_reference = props.custom_wall_reference elif usage_type == "LAYER3": custom_slab_reference = props.custom_slab_reference - + # Get or create pset pset_data = ifcopenshell.util.element.get_pset(element, "BBIM_MaterialLayer") if pset_data: pset = tool.Ifc.get().by_id(pset_data["id"]) else: pset = ifcopenshell.api.pset.add_pset(tool.Ifc.get(), product=element, name="BBIM_MaterialLayer") - + # Save properties (store in SI units) unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) properties = { @@ -667,14 +666,14 @@ class Model(bonsai.core.tool.Model): pset = ifcopenshell.util.element.get_pset(element, "BBIM_MaterialLayer") if not pset: return - + props = tool.Material.get_object_material_props(obj) unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - + # Load properties props.use_custom_offset = pset.get("UseCustomOffset", False) props.custom_offset = pset.get("CustomOffset", 0.0) * unit_scale # Convert from SI - + # Load the appropriate reference based on usage type usage_type = tool.Model.get_usage_type(element) if usage_type == "LAYER2": @@ -718,14 +717,16 @@ class Model(bonsai.core.tool.Model): ) @classmethod - def get_material_layer_custom_offset(cls, element: ifcopenshell.entity_instance, obj: bpy.types.Object) -> Optional[float]: + def get_material_layer_custom_offset( + cls, element: ifcopenshell.entity_instance, obj: bpy.types.Object + ) -> Optional[float]: """Get custom offset value, reading from pset if props are not set.""" unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) layer_params = tool.Model.get_material_layer_parameters(element) layer_offset = layer_params["offset"] thickness = layer_params["thickness"] / unit_scale props = tool.Material.get_object_material_props(obj) - + # Try to load from pset if not already in props if not props.use_custom_offset: pset = ifcopenshell.util.element.get_pset(element, "BBIM_MaterialLayer") @@ -733,7 +734,7 @@ class Model(bonsai.core.tool.Model): # Load from pset custom_offset = pset.get("CustomOffset", 0.0) usage_type = tool.Model.get_usage_type(element) - + if usage_type == "LAYER2": custom_offset_reference = pset.get("CustomWallReference", "CENTER") elif usage_type == "LAYER3": @@ -753,7 +754,7 @@ class Model(bonsai.core.tool.Model): return None direction_sense = layer_params["direction_sense"] - + if direction_sense == "POSITIVE" and custom_offset_reference in {"INTERIOR", "TOP"}: layer_offset = custom_offset - thickness * unit_scale if direction_sense == "POSITIVE" and custom_offset_reference in {"CENTER", "MIDDLE"}: diff --git a/src/bonsai/bonsai/tool/project.py b/src/bonsai/bonsai/tool/project.py index fec4f6a42b..11c4bef3c9 100644 --- a/src/bonsai/bonsai/tool/project.py +++ b/src/bonsai/bonsai/tool/project.py @@ -529,26 +529,34 @@ class Project(bonsai.core.tool.Project): ifc_file = tool.Ifc.get() if not ifc_file: raise Exception("No IFC file loaded") - + doc = tool.Ifc.run("document.add_information", parent=None) - + if ifc_file.schema == "IFC2X3": - tool.Ifc.run("document.edit_information", information=doc, attributes={ - "DocumentId": "BLEND_METADATA", - "Name": "Blend Metadata", - "Scope": "BLEND_METADATA", - "Description": "References to blend metadata file for this IFC project", - "Location": metadata_filename - }) + tool.Ifc.run( + "document.edit_information", + information=doc, + attributes={ + "DocumentId": "BLEND_METADATA", + "Name": "Blend Metadata", + "Scope": "BLEND_METADATA", + "Description": "References to blend metadata file for this IFC project", + "Location": metadata_filename, + }, + ) else: - tool.Ifc.run("document.edit_information", information=doc, attributes={ - "Identification": "BLEND_METADATA", - "Name": "Blend Metadata", - "Scope": "BLEND_METADATA", - "Description": "References to blend metadata file for this IFC project", - "Location": metadata_filename - }) - + tool.Ifc.run( + "document.edit_information", + information=doc, + attributes={ + "Identification": "BLEND_METADATA", + "Name": "Blend Metadata", + "Scope": "BLEND_METADATA", + "Description": "References to blend metadata file for this IFC project", + "Location": metadata_filename, + }, + ) + return doc @classmethod @@ -556,14 +564,12 @@ class Project(bonsai.core.tool.Project): doc = cls.get_metadata_document_information() if not doc: return - + ifc_file = tool.Ifc.get() if not ifc_file: return - - tool.Ifc.run("document.edit_information", information=doc, attributes={ - "Location": metadata_filename - }) + + tool.Ifc.run("document.edit_information", information=doc, attributes={"Location": metadata_filename}) @classmethod def remove_metadata_document_information(cls) -> None: diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index dbfcc3cd3e..f7c9ce300b 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -166,11 +166,11 @@ def parse_distance_string(input_string: str, use_project_unit: bool = True) -> t break if inches is None: inches = 0 - + # If feet is negative, inches should also be negative (subtractive) if feet < 0: inches = -inches - + # Convert to meters total_meters = (feet * 0.3048) + (inches * 0.0254) return total_meters diff --git a/src/bonsai/scripts/dev_environment_vscode_config.py b/src/bonsai/scripts/dev_environment_vscode_config.py index e1643b0aea..b574ba9bf4 100644 --- a/src/bonsai/scripts/dev_environment_vscode_config.py +++ b/src/bonsai/scripts/dev_environment_vscode_config.py @@ -1,4 +1,3 @@ - import bonsai, json, bpy from pathlib import Path @@ -11,14 +10,15 @@ settings_path = repo_root / ".vscode" / "settings.json" settings_path.parent.mkdir(parents=True, exist_ok=True) settings = json.loads(settings_path.read_text()) if settings_path.exists() else {} -settings.update({ - "bonsai.localRoot": repo_path.as_posix(), - "bonsai.remoteRoot": install_path.as_posix(), - "bonsai.blenderPath": Path(bpy.app.binary_path).parent.as_posix(), -}) +settings.update( + { + "bonsai.localRoot": repo_path.as_posix(), + "bonsai.remoteRoot": install_path.as_posix(), + "bonsai.blenderPath": Path(bpy.app.binary_path).parent.as_posix(), + } +) json_data = json.dumps(settings, indent=2) settings_path.write_text(json_data) print("\n\nBonsai/VSCode development environment configured successfully!\n\n") - diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py index 28025c6624..d3a6daaad6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py @@ -107,23 +107,20 @@ class Usecase: for p in self.polyline ] else: - points = [ - (self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1])) - for p in self.polyline - ] - + points = [(self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1])) for p in self.polyline] + if self.file.schema == "IFC2X3": curve = self.file.createIfcPolyline([self.file.createIfcCartesianPoint(p) for p in points]) else: curve = self.file.createIfcIndexedPolyCurve(self.file.createIfcCartesianPointList2D(points)) - + if self.x_angle: direction_ratios = (0.0, sin(self.x_angle), cos(self.x_angle)) else: direction_ratios = (0.0, 0.0, 1.0) extrusion_direction = self.file.createIfcDirection(direction_ratios) - + # Calculate depth based on extrusion angle extrusion_angle = abs(self.x_angle) if self.x_angle else 0 if extrusion_angle > 1e-6: @@ -132,7 +129,7 @@ class Usecase: else: perpendicular_depth = self.convert_si_to_unit(self.depth) perpendicular_offset = self.convert_si_to_unit(self.offset) - + position = None if self.file.schema == "IFC2X3" or self.offset != 0: position_vector = ( diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index e14b82c47d..72ff60c0a1 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -212,7 +212,7 @@ class FormatTransformer(lark.Transformer): """Handle variable substitution like {{z}} or {{Pset_Wall.FireRating}}""" if self.element is None: return "0" # Default value if no element context - + query_path = args[0] try: value = get_element_value(self.element, query_path) @@ -399,11 +399,11 @@ class GetElementTransformer(lark.Transformer): def format(query: str, element: Optional[ifcopenshell.entity_instance] = None) -> str: """Format a query string with optional element context for variable substitution. - + :param query: Format query string (can include {{variable}} placeholders) :param element: Optional IFC element for variable substitution :return: Formatted string - + Example: format("{{z}} / 2", element) # Substitutes element's z value format("imperial_length({{z}} / 2, 4)", element) # Uses z in calculation @@ -1257,4 +1257,4 @@ class FacetTransformer(lark.Transformer): if comparison.startswith("!"): return not result - return result \ No newline at end of file + return result From 7d491134074e93bf884481f2ea5f75cb72ce0bd2 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 12 Jan 2026 16:36:05 +0500 Subject: [PATCH 486/657] typing --- src/bonsai/bonsai/bim/prop.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 75f12e49d8..21386c4544 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -656,8 +656,8 @@ class BIMProperties(PropertyGroup): volume_unit: str mass_unit: str time_unit: str - tab_visibilities: bpy.types.bpy_prop_collection[BIMTabVisibility] - panel_properties: bpy.types.bpy_prop_collection[BIMPanelProperties] + tab_visibilities: bpy.types.bpy_prop_collection_idprop[BIMTabVisibility] + panel_properties: bpy.types.bpy_prop_collection_idprop[BIMPanelProperties] class IfcParameter(PropertyGroup): From c8ac61a9d0fdbe6ba45b68efe8615bedcd12b846 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 12 Jan 2026 16:13:14 +0500 Subject: [PATCH 487/657] CI - bump Blender we use for testing to 5.0 --- .github/workflows/ci-bonsai-daily.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-bonsai-daily.yml b/.github/workflows/ci-bonsai-daily.yml index 4185574b2d..eea09da5a7 100644 --- a/.github/workflows/ci-bonsai-daily.yml +++ b/.github/workflows/ci-bonsai-daily.yml @@ -104,7 +104,7 @@ jobs: # Ensure Bonsai and ifcsverchok enable/disable works before uploading to extensions repo. # Download Blender. - wget -q -O blender.tar.xz https://download.blender.org/release/Blender4.5/blender-4.5.0-linux-x64.tar.xz + wget -q -O blender.tar.xz https://download.blender.org/release/Blender5.0/blender-5.0.1-linux-x64.tar.xz tar -xf blender.tar.xz # Setup Blender. From cc341b5ffd8e859a961c884259ba0a997d404b2b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 12 Jan 2026 16:29:09 +0500 Subject: [PATCH 488/657] Remove debugging print statements --- src/bonsai/bonsai/core/unit.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/bonsai/bonsai/core/unit.py b/src/bonsai/bonsai/core/unit.py index 9594c2b566..fde75297b1 100644 --- a/src/bonsai/bonsai/core/unit.py +++ b/src/bonsai/bonsai/core/unit.py @@ -66,8 +66,6 @@ def assign_scene_units(ifc: type[tool.Ifc], unit: type[tool.Unit]) -> None: else: timeunit = ifc.run("unit.add_conversion_based_unit", name=time_unit_name.lower()) units += [massunit, timeunit] - print("Add mass and time units:", unit.add_mass_and_time_units()) - print("Assigning units:", units) ifc.run("unit.assign_unit", units=units) From 18a25ffb0ef38f4ca73e87777c541c7eb57363a2 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 12 Jan 2026 16:29:59 +0500 Subject: [PATCH 489/657] Remove redundant label in project info UI --- src/bonsai/bonsai/bim/ui.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 82d387e53d..514aa168ce 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -1185,8 +1185,7 @@ class BIM_PT_tab_project_info(Panel): return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): - layout = self.layout - layout.label(text="This is the Project Info panel.") + pass class BIM_PT_tab_spatial(Panel): From 3c8ab262747392ecf3a3cfa76a75cca7fef1218b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 13 Jan 2026 09:30:31 +1100 Subject: [PATCH 490/657] Do not scale georef WCS decorator if it is <1km (i.e. small site definition) Previously it was scaled which misled users into thinking the point was in the wrong location. --- .../bim/module/georeference/decorator.py | 28 +++++++++++-------- .../bonsai/bim/module/georeference/prop.py | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/georeference/decorator.py b/src/bonsai/bonsai/bim/module/georeference/decorator.py index 55fcbc1d64..01818e9805 100644 --- a/src/bonsai/bonsai/bim/module/georeference/decorator.py +++ b/src/bonsai/bonsai/bim/module/georeference/decorator.py @@ -53,12 +53,13 @@ class GeoreferenceDecorator: pass cls.is_installed = False - def draw_batch(self, shader_type, content_pos, color, indices=None): + def draw_batch(self, shader_type, content_pos, color, indices=None, should_scale=True): if not tool.Blender.validate_shader_batch_data(content_pos, indices): return props = tool.Georeference.get_georeference_props() - self.scale = props.visualization_scale - content_pos = [v * self.scale for v in content_pos] + if should_scale: + scale = tool.Georeference.get_georeference_props().visualization_scale + content_pos = [v * scale for v in content_pos] shader = self.line_shader if shader_type == "LINES" else self.shader batch = batch_for_shader(shader, shader_type, {"pos": content_pos}, indices=indices) shader.uniform_float("color", color) @@ -141,12 +142,13 @@ class GeoreferenceDecorator: if wcs["blender_location"].length < 1000: position = wcs["blender_location"].copy() + position -= Vector((0, 0.1, 0)) + self.draw_text_at_position(context, text, position, should_scale=False) else: position = wcs["blender_location"].normalized() * 3 text += "\n(Warning: Actual XYZ Not Shown)" - position -= Vector((0, 0.1, 0)) - - self.draw_text_at_position(context, text, position) + position -= Vector((0, 0.1, 0)) + self.draw_text_at_position(context, text, position) if props.has_blender_offset: text = "IFC Local Origin" @@ -165,8 +167,10 @@ class GeoreferenceDecorator: self.draw_text_at_position(context, text, location) blf.disable(self.font_id, blf.SHADOW) - def draw_text_at_position(self, context, text, position): - position = [v * self.scale for v in position] + def draw_text_at_position(self, context, text, position, should_scale=True): + if should_scale: + scale = tool.Georeference.get_georeference_props().visualization_scale + position = [v * scale for v in position] coords_2d = location_3d_to_region_2d(context.region, context.region_data, position) if not coords_2d: return @@ -309,8 +313,8 @@ class GeoreferenceDecorator: if wcs["blender_location"].length < 1000: verts = [Vector((0, 0, 0)), wcs["blender_location"]] edges = [[0, 1]] - self.draw_batch("LINES", verts, decorator_color_special, edges) - self.draw_batch("POINTS", verts[1:], decorator_color_special) + self.draw_batch("LINES", verts, decorator_color_special, edges, should_scale=False) + self.draw_batch("POINTS", verts[1:], decorator_color_special, should_scale=False) else: location = wcs["blender_location"].normalized() edges = [[0, 1]] @@ -332,7 +336,7 @@ class GeoreferenceDecorator: self.draw_batch("LINES", verts, decorator_color_special, edges) self.draw_dashed_line(location * 3, location * 6, decorator_color_error) - def draw_dashed_line(self, start, end, colour): + def draw_dashed_line(self, start, end, colour, should_scale=True): direction = (end - start).normalized() distance = (end - start).length current_distance = Vector((0, 0, 0)) @@ -347,7 +351,7 @@ class GeoreferenceDecorator: edges = [[i, i + 1] for i in range(0, len(points), 2)] verts = points - self.draw_batch("LINES", verts, colour, edges) + self.draw_batch("LINES", verts, colour, edges, should_scale=should_scale) def calculate_angles(self, context): self.pn_angle = 0.0 diff --git a/src/bonsai/bonsai/bim/module/georeference/prop.py b/src/bonsai/bonsai/bim/module/georeference/prop.py index 0a5eecf4c1..1b6088556b 100644 --- a/src/bonsai/bonsai/bim/module/georeference/prop.py +++ b/src/bonsai/bonsai/bim/module/georeference/prop.py @@ -215,7 +215,7 @@ class BIMGeoreferenceProperties(PropertyGroup): description="Affects the georeference decorator size", default=1, soft_min=0.1, - soft_max=50, + soft_max=100, ) grid_north_angle: StringProperty(name="Grid North Angle", update=update_grid_north_angle) x_axis_abscissa: StringProperty(name="X Axis Abscissa", update=update_grid_north_vector) From 249e68f16395b5b273466930dd21ffefc0ac512a Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 12 Jan 2026 19:37:25 -0600 Subject: [PATCH 491/657] fix to https://github.com/IfcOpenShell/IfcOpenShell/commit/7f87f1fb89fb001320223a4d85e6267f342bf13c: have rotation around the object's origin, not the world origin --- src/bonsai/bonsai/bim/module/model/wall.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index d894aa71d1..0d0b88339e 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -575,10 +575,20 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): rotation_axis.normalize() dot_product = expected_new_world_direction.dot(current_world_direction) angle = acos(min(max(dot_product, -1), 1)) - - # Create and apply rotation matrix + + # Rotate around object's own origin + # Decompose the matrix to get translation, rotation, scale + translation, rotation, scale = obj.matrix_world.decompose() + + # Create rotation matrix and convert to quaternion rotation_matrix = Matrix.Rotation(angle, 4, rotation_axis) - obj.matrix_world = rotation_matrix @ obj.matrix_world + rotation_quat = rotation_matrix.to_quaternion() + + # Apply rotation to existing rotation (quaternion multiplication) + new_rotation = rotation_quat @ rotation + + # Reconstruct matrix_world with same translation, new rotation, same scale + obj.matrix_world = Matrix.Translation(translation) @ new_rotation.to_matrix().to_4x4() @ Matrix.Scale(1, 4) bpy.context.view_layer.update() bonsai.core.geometry.switch_representation( From 791a41d6496a8a64ce2585577beb4e5d2c5386bd Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 13 Jan 2026 08:49:57 +0100 Subject: [PATCH 492/657] cleanup and black . --- .../bonsai/bim/module/system/operator.py | 55 +++++++++---------- src/bonsai/bonsai/bim/module/system/prop.py | 13 +++-- src/bonsai/bonsai/bim/module/system/ui.py | 55 +++++++++---------- src/bonsai/bonsai/core/system.py | 7 ++- src/bonsai/bonsai/tool/system.py | 1 + .../ifcopenshell/api/project/append_asset.py | 3 +- 6 files changed, 66 insertions(+), 68 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 049307b32f..066e466bd0 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -186,7 +186,6 @@ class ShowPorts(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.show_ports" bl_label = "Show Ports" bl_options = {"REGISTER", "UNDO"} - element_id: bpy.props.IntProperty(default=0, options={"SKIP_SAVE"}) @classmethod def poll(cls, context): @@ -199,12 +198,9 @@ class ShowPorts(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): # Ifc.Operator - as operator will sync object's position with IFC. - if self.element_id != 0: - element = tool.Ifc.get().by_id(self.element_id) - else: - element = tool.Ifc.get_entity(context.active_object) + element = tool.Ifc.get_entity(context.active_object) core.show_ports(tool.Ifc, tool.System, tool.Spatial, element=element) - + for port in tool.System.get_ports(element): connected_port = tool.System.get_connected_port(port) if connected_port: @@ -260,37 +256,39 @@ class ConnectPort(bpy.types.Operator, tool.Ifc.Operator): obj1 = context.active_object obj2 = context.selected_objects[0] if context.selected_objects[1] == obj1 else context.selected_objects[1] direction = tool.Ifc.get_entity(obj1).FlowDirection or "NOTDEFINED" - core.connect_port(tool.Ifc, port1=tool.Ifc.get_entity(obj1), port2=tool.Ifc.get_entity(obj2), direction=direction) + core.connect_port( + tool.Ifc, port1=tool.Ifc.get_entity(obj1), port2=tool.Ifc.get_entity(obj2), direction=direction + ) class AddRelatedPortConnection(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.add_related_port_connection" bl_label = "Connect Port" bl_options = {"REGISTER", "UNDO"} - + relating_port_id: bpy.props.IntProperty() - + def invoke(self, context, event): return context.window_manager.invoke_props_dialog(self) - + def draw(self, context): props = tool.System.get_system_props() self.layout.prop(props, "related_port", text="Select Port") - + def _execute(self, context): props = tool.System.get_system_props() - + if not props.related_port or props.related_port == "NONE": return {"CANCELLED"} - + port_obj = bpy.data.objects.get(props.related_port) related_port = tool.Ifc.get_entity(port_obj) relating_port = tool.Ifc.get().by_id(self.relating_port_id) - + direction = relating_port.FlowDirection or "NOTDEFINED" core.connect_port(tool.Ifc, port1=relating_port, port2=related_port, direction=direction) PortData.is_loaded = False - + return {"FINISHED"} @@ -436,13 +434,10 @@ class CycleFlowDirection(bpy.types.Operator, tool.Ifc.Operator): @classmethod def description(cls, context, operator): - try: - port = tool.Ifc.get().by_id(operator.port_id) - if port and port.is_a("IfcDistributionPort"): - current_direction = port.FlowDirection or "NOTDEFINED" - return f"Current flow direction: {current_direction}. Click to cycle: SOURCE → SINK → SOURCEANDSINK → NOTDEFINED" - except: - pass + port = tool.Ifc.get().by_id(operator.port_id) + if port and port.is_a("IfcDistributionPort"): + current_direction = port.FlowDirection or "NOTDEFINED" + return f"Current flow direction: {current_direction}. Click to cycle: SOURCE → SINK → SOURCEANDSINK → NOTDEFINED" return "Cycle through flow directions: SOURCE → SINK → SOURCEANDSINK → NOTDEFINED → SOURCE..." def _execute(self, context): @@ -451,30 +446,32 @@ class CycleFlowDirection(bpy.types.Operator, tool.Ifc.Operator): return {"CANCELLED"} current_direction = port.FlowDirection or "NOTDEFINED" - + flow_cycle_map = { "SOURCE": "SINK", "SINK": "SOURCEANDSINK", "SOURCEANDSINK": "NOTDEFINED", - "NOTDEFINED": "SOURCE" + "NOTDEFINED": "SOURCE", } next_direction = flow_cycle_map.get(current_direction, "SOURCE") tool.Ifc.run("attribute.edit_attributes", product=port, attributes={"FlowDirection": next_direction}) - + connected_port = tool.System.get_connected_port(port) if connected_port: connected_direction_map = { "SOURCE": "SINK", "SINK": "SOURCE", "SOURCEANDSINK": "SOURCEANDSINK", - "NOTDEFINED": "NOTDEFINED" + "NOTDEFINED": "NOTDEFINED", } connected_direction = connected_direction_map.get(next_direction, "NOTDEFINED") - tool.Ifc.run("attribute.edit_attributes", product=connected_port, attributes={"FlowDirection": connected_direction}) - + tool.Ifc.run( + "attribute.edit_attributes", product=connected_port, attributes={"FlowDirection": connected_direction} + ) + PortData.is_loaded = False - + return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index e4e56a79a0..8954ab67f2 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -19,7 +19,6 @@ import bpy import bonsai.bim.handler import bonsai.tool as tool -import bonsai.core.system as core from bonsai.bim.module.system.data import SystemData import bonsai.bim.module.system.decorator as decorator from bonsai.bim.prop import StrProperty, Attribute @@ -93,23 +92,25 @@ def toggle_decorations(self: "BIMSystemProperties", context: bpy.types.Context) decorator.SystemDecorator.uninstall() -def get_available_ports_for_connection(self: "BIMSystemProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: +def get_available_ports_for_connection( + self: "BIMSystemProperties", context: bpy.types.Context +) -> list[tuple[str, str, str]]: items = [] active_object_ports = set(tool.System.get_ports(tool.Ifc.get_entity(context.active_object))) - + ifc_file = tool.Ifc.get() for ifc_port in ifc_file.by_type("IfcDistributionPort"): port = tool.Ifc.get_object(ifc_port) if not port: continue - + if tool.System.get_connected_port(ifc_port) is not None or ifc_port in active_object_ports: continue - + port_object = tool.Ifc.get_object(tool.System.get_port_relating_element(ifc_port)) suggestion = f"{port_object.name} > {port.name}" items.append((port.name, suggestion, "")) - + return items if items else [("NONE", "Ports are hidden or not available", "")] diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index 5e904a3206..e41295f40e 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -162,11 +162,9 @@ class BIM_PT_ports(Panel): if total_ports == 0: return - props = tool.System.get_system_props() - row = self.layout.row(align=True) - row.label(text="Ports located on object and connected Port/Objects:") - + row.label(text=f"Ports located in: {context.active_object.name} and connected Port/Objects:") + row = self.layout.row(align=True) cols = [row.column(align=True) for i in range(9)] cols[3].scale_x = 1.0 @@ -175,18 +173,17 @@ class BIM_PT_ports(Panel): for port_data in PortData.data["located_ports_data"]: flow_direction_icon = FLOW_DIRECTION_TO_ICON[port_data["FlowDirection"] or "NOTDEFINED"] - + if port_data["connected_obj_name"]: cols[0].operator("bim.disconnect_port", text="", icon="UNLINKED").element_id = port_data["id"] op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = port_data["id"] else: - op = cols[0].operator("bim.add_related_port_connection", text="", icon='PLUGIN') + op = cols[0].operator("bim.add_related_port_connection", text="", icon="PLUGIN") op.relating_port_id = port_data["id"] op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = port_data["id"] - - # Port information + if port_data["port_obj_name"]: cols[2].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = port_data["id"] cols[3].label(text=port_data["port_obj_name"]) @@ -196,16 +193,20 @@ class BIM_PT_ports(Panel): if port_data["connected_obj_name"]: connected_obj = bpy.data.objects[port_data["connected_obj_name"]] - + port = tool.Ifc.get().by_id(port_data["id"]) connected_port = tool.System.get_connected_port(port) if connected_port: connected_port_obj = tool.Ifc.get_object(connected_port) if connected_port_obj: connected_port_flow_dir = FLOW_DIRECTION_TO_ICON[connected_port.FlowDirection or "NOTDEFINED"] - op = cols[4].operator("bim.cycle_flow_direction", text="", icon=connected_port_flow_dir, emboss=True) + op = cols[4].operator( + "bim.cycle_flow_direction", text="", icon=connected_port_flow_dir, emboss=True + ) op.port_id = connected_port.id() - cols[5].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = connected_port.id() + cols[5].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ( + connected_port.id() + ) cols[6].label(text=connected_port_obj.name) else: blank4 = cols[4].column(align=True) @@ -223,7 +224,7 @@ class BIM_PT_ports(Panel): blank5.scale_x = 0.1 blank5.label(text="", icon="BLANK1") cols[6].label(text="") - + ifc_id = tool.Blender.get_ifc_definition_id(connected_obj) cols[7].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = ifc_id cols[8].label(text=port_data["connected_obj_name"]) @@ -234,9 +235,9 @@ class BIM_PT_ports(Panel): blank5 = cols[5].column(align=True) blank5.scale_x = 0.1 blank5.label(text="", icon="BLANK1") - + cols[6].label(text="Port is disconnected") - + blank7 = cols[7].column(align=True) blank7.scale_x = 0.1 blank7.label(text="", icon="BLANK1") @@ -265,17 +266,8 @@ class BIM_PT_port(Panel): return True def draw(self, context): - self.props = tool.System.get_system_props() - layout = self.layout row = layout.row(align=True) - - if not PortData.is_loaded: - PortData.load() - - relating_object_name = PortData.data["port_relating_object_name"] if PortData.data["is_port"] else "" - row.label(text=f"IfcDistributionPort located in: {relating_object_name}") - row.operator("bim.remove_port", icon="X", text="") if not PortData.is_loaded: PortData.load() @@ -283,18 +275,21 @@ class BIM_PT_port(Panel): if not PortData.data["is_port"]: return + relating_object_name = PortData.data["port_relating_object_name"] + row.label(text=f"IfcDistributionPort located in: {relating_object_name}") + row.operator("bim.remove_port", icon="X", text="") + element = tool.Ifc.get_entity(context.active_object) - props = tool.System.get_system_props() - + row = layout.row(align=True) cols = [row.column(align=True) for i in range(9)] cols[3].scale_x = 1.0 cols[6].scale_x = 1.0 cols[8].scale_x = 1.33 - + flow_direction_icon = FLOW_DIRECTION_TO_ICON[element.FlowDirection or "NOTDEFINED"] connected_port = tool.System.get_connected_port(element) - + if connected_port: cols[0].operator("bim.disconnect_port", text="", icon="UNLINKED") op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) @@ -303,10 +298,10 @@ class BIM_PT_port(Panel): cols[0].operator("bim.connect_port", icon="PLUGIN", text="") op = cols[1].operator("bim.cycle_flow_direction", text="", icon=flow_direction_icon, emboss=True) op.port_id = element.id() - + cols[2].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = element.id() cols[3].label(text=context.active_object.name) - + if connected_port: connected_port_flow_dir = FLOW_DIRECTION_TO_ICON[connected_port.FlowDirection or "NOTDEFINED"] op = cols[4].operator("bim.cycle_flow_direction", text="", icon=connected_port_flow_dir, emboss=True) @@ -314,7 +309,7 @@ class BIM_PT_port(Panel): cols[5].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = connected_port.id() connected_port_obj = tool.Ifc.get_object(connected_port) cols[6].label(text=connected_port_obj.name if connected_port_obj else "Hidden Port") - + connected_object_name = PortData.data["port_connected_object_name"] if connected_object_name: connected_obj = bpy.data.objects[connected_object_name] diff --git a/src/bonsai/bonsai/core/system.py b/src/bonsai/bonsai/core/system.py index 87a43307b7..01f1b7166e 100644 --- a/src/bonsai/bonsai/core/system.py +++ b/src/bonsai/bonsai/core/system.py @@ -132,7 +132,12 @@ def remove_port(ifc: type[tool.Ifc], system: type[tool.System], port: ifcopenshe ifc.run("root.remove_product", product=port) -def connect_port(ifc: type[tool.Ifc], port1: ifcopenshell.entity_instance, port2: ifcopenshell.entity_instance, direction: str = "NOTDEFINED") -> None: +def connect_port( + ifc: type[tool.Ifc], + port1: ifcopenshell.entity_instance, + port2: ifcopenshell.entity_instance, + direction: str = "NOTDEFINED", +) -> None: ifc.run("system.connect_port", port1=port1, port2=port2, direction=direction) diff --git a/src/bonsai/bonsai/tool/system.py b/src/bonsai/bonsai/tool/system.py index 0236b40fbd..3566dbd863 100644 --- a/src/bonsai/bonsai/tool/system.py +++ b/src/bonsai/bonsai/tool/system.py @@ -100,6 +100,7 @@ class System(bonsai.core.tool.System): @classmethod def create_empty_at_cursor_with_element_orientation(cls, element: ifcopenshell.entity_instance) -> bpy.types.Object: + # Is this necessary anymore? element_obj = tool.Ifc.get_object(element) obj = bpy.data.objects.new("Port", None) obj.matrix_world = element_obj.matrix_world diff --git a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py index 0b703b6064..0a5aee0e1c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/project/append_asset.py @@ -490,8 +490,7 @@ class Usecase: attribute_class = None if "." in attribute: attribute, attribute_class = attribute.split(".") - inverse_values = getattr(element, attribute, []) - for inverse in inverse_values: + for inverse in getattr(element, attribute, []): if attribute_class and inverse.is_a(attribute_class): self.add_inverse_element(inverse) elif not attribute_class: From 96a0e9f72d218c662193475eaa1bd221e10ec07f Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 13 Jan 2026 10:07:10 +0100 Subject: [PATCH 493/657] Adapt tests for create_port_at_cursor method --- src/bonsai/bonsai/core/tool.py | 1 + src/bonsai/test/core/test_system.py | 9 ++++----- src/bonsai/test/tool/test_system.py | 13 +++++++++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index d8e4dd2396..002f643e55 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -1074,6 +1074,7 @@ class Surveyor: @interface class System: def create_empty_at_cursor_with_element_orientation(cls, element): pass + def create_port_at_cursor(cls, system): pass def delete_element_objects(cls, elements): pass def disable_editing_system(cls): pass def disable_system_editing_ui(cls): pass diff --git a/src/bonsai/test/core/test_system.py b/src/bonsai/test/core/test_system.py index d907059b98..4612e14d69 100644 --- a/src/bonsai/test/core/test_system.py +++ b/src/bonsai/test/core/test_system.py @@ -153,11 +153,10 @@ class TestAddPort: def test_run(self, ifc, system): system.get_ports("element").should_be_called().will_return(["port"]) system.load_ports("element", ["port"]).should_be_called() - system.create_empty_at_cursor_with_element_orientation("element").should_be_called().will_return("obj") - system.run_root_assign_class( - obj="obj", ifc_class="IfcDistributionPort", should_add_representation=False - ).should_be_called().will_return("port") - ifc.run("system.assign_port", element="element", port="port").should_be_called() + #system.create_empty_at_cursor_with_element_orientation("element").should_be_called().will_return("obj") + #system.run_root_assign_class(obj="obj", ifc_class="IfcDistributionPort", should_add_representation=False).should_be_called().will_return("port") + system.create_port_at_cursor("element").should_be_called().will_return("port") + system.load_ports("element", ["port"]).should_be_called() subject.add_port(ifc, system, element="element") diff --git a/src/bonsai/test/tool/test_system.py b/src/bonsai/test/tool/test_system.py index de8e9026b0..ba20305140 100644 --- a/src/bonsai/test/tool/test_system.py +++ b/src/bonsai/test/tool/test_system.py @@ -103,6 +103,19 @@ class TestCreateEmptyAtCursorWithElementOrientation(NewFile): obj = subject.create_empty_at_cursor_with_element_orientation(element) assert obj.matrix_world == bpy.context.scene.cursor.matrix +class TestCreatePortAtCursor(NewFile): + def test_run(self): + assert bpy.context.scene + ifc = ifcopenshell.file() + tool.Ifc().set(ifc) + system = ifcopenshell.api.system.add_system(ifc) + element = ifcopenshell.api.root.create_entity(ifc, ifc_class="IfcDuctSegment") + ifcopenshell.api.system.assign_system(ifc, products=[element], system=system) + obj = tool.Ifc.link(element, bpy.data.objects.new("Object", None)) + port = subject.create_port_at_cursor(element) + assert port.is_a("IfcDistributionPort") + assert ifcopenshell.util.system.get_ports(element) == [port] + class TestDeleteElementObjects(NewFile): def test_run(self): From 9adbd4718103b1a9fef2737a3a798bb66daa1ebc Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 13 Jan 2026 11:45:34 -0600 Subject: [PATCH 494/657] feat: auto-assign containers to root aggregates and organize parts in outliner When assigning a container to an aggregated element, automatically promote the operation to the root aggregate and move all nested parts to the container's collection in the Blender outliner. Changes: - AssignContainer now traverses the aggregate hierarchy to find the root aggregate when a user selects any nested part - All parts and sub-aggregates are moved to the container's collection in the outliner while preserving IFC aggregate relationships - Parts remain aggregated in IFC (not directly contained), only their Blender collection membership changes - RefreshLinkedAggregate now also moves all parts to the correct container collection when restoring original data This provides a more intuitive UX - users can select any part and the entire assembly moves together, properly organized under the spatial container. Fixes the previous behavior where: - Aggregated elements were skipped with a warning - Parts weren't organized under the container in the outliner - Aggregate nesting was broken after container assignment --- .../bonsai/bim/module/geometry/operator.py | 35 ++++++-- .../bonsai/bim/module/spatial/operator.py | 81 +++++++++++++++---- 2 files changed, 95 insertions(+), 21 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 85e76dc590..4927c9cfab 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1715,19 +1715,40 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): # Only assign container if element is not already aggregated under another element # Aggregated elements should not be in the spatial structure if not ifcopenshell.util.element.get_aggregate(element): + container = original_data[matching_group_id][index]["Container"] bonsai.core.spatial.assign_container( tool.Ifc, tool.Collector, tool.Spatial, - container=original_data[matching_group_id][index]["Container"], + container=container, element_obj=obj, ) - for part in ifcopenshell.util.element.get_parts(tool.Ifc.get_entity(obj)): - tool.Collector.assign(tool.Ifc.get_object(part)) - - assignments = original_data[matching_group_id][index]["Assignment"] - if assignments: - assign_to_annotations(obj, assignments) + + # Get the container's collection for moving parts in the outliner + container_obj = tool.Ifc.get_object(container) + container_collection = container_obj.BIMObjectProperties.collection if container_obj else None + + # Move all parts to the container's collection in the outliner + if container_collection: + for part in ifcopenshell.util.element.get_parts(element): + part_obj = tool.Ifc.get_object(part) + if part_obj: + # Remove from all previous collections + for col in part_obj.users_collection[:]: + col.objects.unlink(part_obj) + + # Link to container collection + if part_obj.name not in container_collection.objects: + container_collection.objects.link(part_obj) + + # Recursively handle nested parts + for nested_part in ifcopenshell.util.element.get_parts(part): + nested_part_obj = tool.Ifc.get_object(nested_part) + if nested_part_obj: + for col in nested_part_obj.users_collection[:]: + col.objects.unlink(nested_part_obj) + if nested_part_obj.name not in container_collection.objects: + container_collection.objects.link(nested_part_obj) else: try: obj.name = original_data[matching_group_id][index]["Name"] diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index e79cfc7d47..67189666e6 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -175,31 +175,84 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): else: return + def get_root_aggregate(element): + """Traverse up the aggregate hierarchy to find the top-most aggregate""" + current = element + root = None + while aggregate := ifcopenshell.util.element.get_aggregate(current): + root = aggregate + current = aggregate + return root + + def get_all_parts_recursive(element): + """Recursively get all parts of an aggregate""" + parts = [] + for part in ifcopenshell.util.element.get_parts(element): + parts.append(part) + # Recursively get nested parts + parts.extend(get_all_parts_recursive(part)) + return parts + objs: list[bpy.types.Object] = [] - # In IFC element can be either contained of aggregated, - # tehrefore we skip aggregated elements here to prevent confusion. - # Can't handle it in `poll` since user might just select bunch of elements - # and try to assign a container to them - # and excluding aggregates because of the `poll` failing might get awkward. - skipped_aggregates = 0 + processed_elements = set() # Track elements we've already handled (by IFC ID) + promoted_parts = 0 # Count how many parts were promoted to their root aggregate + for obj in tool.Blender.get_selected_objects(): if not (element := tool.Ifc.get_entity(obj)): continue - if ifcopenshell.util.element.get_aggregate(element): - skipped_aggregates += 1 - continue - objs.append(obj) + + # Check if element is part of an aggregate (at any level) + if root_aggregate := get_root_aggregate(element): + # Skip if we've already processed this root aggregate + if root_aggregate.id() in processed_elements: + continue + + # Get the root aggregate object and add it instead + if root_aggregate_obj := tool.Ifc.get_object(root_aggregate): + objs.append(root_aggregate_obj) + processed_elements.add(root_aggregate.id()) + if root_aggregate != element: # Only count as promoted if different from selected + promoted_parts += 1 + else: + # Element is not part of any aggregate + if element.id() not in processed_elements: + objs.append(obj) + processed_elements.add(element.id()) + + # Get the container's collection + container_obj = tool.Ifc.get_object(container) + container_collection = container_obj.BIMObjectProperties.collection if container_obj else None for element_obj in objs: + element = tool.Ifc.get_entity(element_obj) + + # Only assign container to the ROOT aggregate (this updates IFC relationships) if self.remove_from_other_containers: for col in element_obj.users_collection[:]: col.objects.unlink(element_obj) core.assign_container(tool.Ifc, tool.Collector, tool.Spatial, container=container, element_obj=element_obj) + + # For parts, only move them in Blender collections (don't change IFC relationships) + if container_collection: + all_parts = get_all_parts_recursive(element) + for part in all_parts: + if part_obj := tool.Ifc.get_object(part): + # Always remove from ALL previous collections when moving to new container + for col in part_obj.users_collection[:]: + col.objects.unlink(part_obj) + + # Link to new container collection (Blender-only, no IFC change) + if part_obj.name not in container_collection.objects: + container_collection.objects.link(part_obj) - aggregates_msg = "" - if skipped_aggregates: - aggregates_msg = f" {skipped_aggregates} aggregated elements skipped." - self.report({"INFO"}, f"{len(objs)} elements assigned.{aggregates_msg}") + # Disable editing mode for all selected objects + for obj in tool.Blender.get_selected_objects(): + core.disable_editing_container(tool.Spatial, obj=obj) + + promoted_msg = "" + if promoted_parts: + promoted_msg = f" {promoted_parts} nested parts promoted to their root aggregates." + self.report({"INFO"}, f"{len(objs)} elements assigned.{promoted_msg}") class EnableEditingContainer(bpy.types.Operator): From 46a6356f93f1b38fe89765d5c9324cebeed166f3 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 13 Jan 2026 12:33:54 -0600 Subject: [PATCH 495/657] update the name of the blender collection, as well, when updating the name of the spatial container. --- src/bonsai/bonsai/bim/module/spatial/prop.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/spatial/prop.py b/src/bonsai/bonsai/bim/module/spatial/prop.py index b7ae727a26..3d54581551 100644 --- a/src/bonsai/bonsai/bim/module/spatial/prop.py +++ b/src/bonsai/bonsai/bim/module/spatial/prop.py @@ -98,6 +98,8 @@ def update_name(self: "BIMContainer", context: bpy.types.Context) -> None: tool.Spatial.edit_container_name(element, self.name) if obj := tool.Ifc.get_object(element): tool.Root.set_object_name(obj, element) + if collection := tool.Blender.get_object_bim_props(obj).collection: + collection.name = f"{element.is_a()}/{element.Name or 'Unnamed'}" bonsai.bim.handler.refresh_ui_data() From df7318973d5f5d03a6dd597b4705bab9d1989cc9 Mon Sep 17 00:00:00 2001 From: Richard Brice <37087370+RickBrice@users.noreply.github.com> Date: Wed, 14 Jan 2026 13:28:07 -0800 Subject: [PATCH 496/657] Adds support for IfcOpenCrossProfileDef and branching with IfcSectionedSurface --- src/ifcgeom/infra_sweep_helper.cpp | 244 +++++++++++++++-- src/ifcgeom/kernels/opencascade/loft.cpp | 256 ++++++++++++++++-- .../mapping/IfcOpenCrossProfileDef.cpp | 10 +- src/ifcgeom/taxonomy.cpp | 12 +- src/ifcgeom/taxonomy.h | 3 +- 5 files changed, 462 insertions(+), 63 deletions(-) diff --git a/src/ifcgeom/infra_sweep_helper.cpp b/src/ifcgeom/infra_sweep_helper.cpp index b9c9e598d9..58f6d3108a 100644 --- a/src/ifcgeom/infra_sweep_helper.cpp +++ b/src/ifcgeom/infra_sweep_helper.cpp @@ -14,6 +14,27 @@ namespace { } } +namespace { +template > +bool has_intersection(const std::set& A, + const std::set& B) { + auto itA = A.begin(); + auto itB = B.begin(); + + while (itA != A.end() && itB != B.end()) { + if (Cmp()(*itA, *itB)) { + ++itA; + } else if (Cmp()(*itB, *itA)) { + ++itB; + } else { + return true; + } + } + return false; +} + +} + taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, const IfcUtil::IfcBaseClass* inst, const taxonomy::function_item::ptr& fn, std::vector& cross_sections) { std::sort(cross_sections.begin(), cross_sections.end()); @@ -25,7 +46,7 @@ taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, // @todo currently only the case is handled where directrix returns a function_item // @todo this "if" statement is not really required because the function returns at the start if the Directrix is not a function_item function if (fn) { - function_item_evaluator evaluator(settings_,fn); + function_item_evaluator evaluator(settings_, fn); double start = std::max(0., cross_sections.front().dist_along); double end = std::min(fn->length(), cross_sections.back().dist_along); @@ -45,6 +66,7 @@ taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, // parameter is minimum number of steps num_steps = (size_t)std::ceil(param); } + auto delta_step = curve_length / num_steps; std::vector longitudes; for (auto& x : cross_sections) { longitudes.push_back(x.dist_along); @@ -52,7 +74,7 @@ taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, longitudes.push_back(std::numeric_limits::infinity()); auto profile_index = longitudes.begin(); for (size_t i = 0; i <= num_steps; ++i) { - auto dist_along = start + curve_length / num_steps * i; + auto dist_along = start + delta_step * i; while (dist_along > *(profile_index + 1)) { profile_index++; if (profile_index == longitudes.end()) { @@ -60,6 +82,8 @@ taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, } } + const bool is_last_placement_of_this_profile = profile_index + 1 >= longitudes.end() ? false : ((start + delta_step * (i+1)) > *(profile_index + 1)); + auto relative_dist_along = (dist_along - *profile_index) / (*(profile_index + 1) - *profile_index); const auto& profile_a = cross_sections[std::distance(longitudes.begin(), profile_index)].section_geometry; const auto& offset_a = cross_sections[std::distance(longitudes.begin(), profile_index)].offset; @@ -143,28 +167,203 @@ taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, } else if (rotation_a != rotation_b) { Logger::Error("Direction vectors on cross section placements only supported when used consistently"); } + taxonomy::loop::ptr w1, w2; taxonomy::edge::ptr e1, e2; + taxonomy::point3::ptr p1, p2; + for (auto tmp_ : boost::combine(loops_a, loops_b)) { boost::tie(w1, w2) = tmp_; - if (w1->children.size() != w2->children.size()) { - Logger::Warning("Mismatching number of edges: " + - std::to_string(w1->children.size()) + " vs " + - std::to_string(w2->children.size()), - inst - ); - return nullptr; - } - std::vector points; - for (auto tmp__ : boost::combine(w1->children, w2->children)) { - boost::tie(e1, e2) = tmp__; - auto& p1 = boost::get(e1->start); - auto& p2 = boost::get(e2->start); - auto p3 = (lerp(p1->ccomponents(), p2->ccomponents(), relative_dist_along) + interpolated_offset).eval(); - // auto p4 = (interpolated_rotation * p3).eval(); - points.push_back(taxonomy::make(p3)); + if (w1->closed != w2->closed) { + Logger::Warning("Mismatching closed property on loops", inst); + return nullptr; + } + + if (w1->tags.is_initialized() != w2->tags.is_initialized()) { + Logger::Warning("Mismatching availability tags on loops", inst); + return nullptr; + } + + if (w1->tags) { + // check uniqueness + std::set tags_seen; + for (const auto& t : *w1->tags) { + if (tags_seen.find(t) != tags_seen.end()) { + Logger::Warning("Duplicate tag '" + t + "' on loft profile", inst); + return nullptr; + } + tags_seen.insert(t); + } } + + if (w2->tags) { + // check uniqueness + std::set tags_seen; + for (const auto& t : *w2->tags) { + if (tags_seen.find(t) != tags_seen.end()) { + Logger::Warning("Duplicate tag '" + t + "' on loft profile", inst); + return nullptr; + } + tags_seen.insert(t); + } + } + + std::map tag_to_point_on_w1, tag_to_point_on_w2; + + auto loop_to_points = [](const taxonomy::loop::ptr& loop, const boost::optional>& input_tags) -> std::pair, std::vector>> { + std::vector points; + std::vector> tags; + std::vector::const_iterator tag_it; + + if (!loop->closed.get_value_or(false)) { + points = {boost::get(loop->children[0]->start)}; + if (input_tags) { + tags = {{input_tags->front()}}; + tag_it = ++input_tags->begin(); + } + } + for (auto& e : loop->children) { + const auto& p1_ = boost::get(e->start); + const auto& p2_ = boost::get(e->end); + if (input_tags && p1_->ccomponents() == p2_->ccomponents()) { + tags.back().insert(*tag_it); + ++tag_it; + } else { + points.push_back(p2_); + if (input_tags) { + tags.emplace_back(); + tags.back().insert(*tag_it); + ++tag_it; + } + } + } + if (!input_tags) { + if (loop->closed.get_value_or(false)) { + // close polygon by referencing first point + points.push_back(points.front()); + } + } + return {points, tags}; + }; + + auto combine_tags = [](const std::vector>& tag_sets) -> std::set { + return std::accumulate( + tag_sets.begin(), tag_sets.end(), std::set{}, + [](std::set acc, + const std::set& m) { + acc.insert(m.begin(), m.end()); + return acc; + }); + }; + + auto join_tags = [](const std::set& tag_set) -> std::string { + std::string result; + for (auto it = tag_set.begin(); it != tag_set.end(); ++it) { + if (it != tag_set.begin()) { + result += ", "; + } + result += *it; + } + return result; + }; + + auto [w1_points, w1_tags] = loop_to_points(w1, w1->tags); + auto [w2_points, w2_tags] = loop_to_points(w2, w2->tags); + + if (w1->tags && w2->tags) { + { + auto it = w1_points.begin(); + auto jt = w1_tags.begin(); + while (it != w1_points.end() && jt != w1_tags.end()) { + for (auto& t : *jt) { + tag_to_point_on_w1[t] = *it; + } + ++it; + ++jt; + } + } + + { + auto it = w2_points.begin(); + auto jt = w2_tags.begin(); + while (it != w2_points.end() && jt != w2_tags.end()) { + for (auto& t : *jt) { + tag_to_point_on_w2[t] = *it; + } + ++it; + ++jt; + } + } + + auto w1_tags_combined = combine_tags(w1_tags); + auto w2_tags_combined = combine_tags(w2_tags); + + // For every point (which can have multiple tags in case of 0-width edges) there needs to be a corresponding point on the other profile + + for (auto& p1_tags : w1_tags) { + if (!has_intersection(p1_tags, w2_tags_combined)) { + Logger::Warning("No matching tags found on loft profiles: " + join_tags(p1_tags) + " not in " + join_tags(w2_tags_combined), inst); + return nullptr; + } + } + + for (auto& p2_tags : w2_tags) { + if (!has_intersection(p2_tags, w1_tags_combined)) { + Logger::Warning("No matching tags found on loft profiles: " + join_tags(p2_tags) + " not in " + join_tags(w1_tags_combined), inst); + return nullptr; + } + } + } else { + if (w1->children.size() != w2->children.size()) { + Logger::Warning("Mismatching number of edges: " + + std::to_string(w1->children.size()) + " vs " + + std::to_string(w2->children.size()), + inst); + return nullptr; + } + } + + std::vector points; + + std::vector common_tags_vec; + if (w1->tags) { + std::set common_tags; + for (const auto& t : *w1->tags) { + if (tag_to_point_on_w2.find(t) == tag_to_point_on_w2.end()) { + continue; + } + + const auto& p1_ = tag_to_point_on_w1[t]; + const auto& p2_ = tag_to_point_on_w2[t]; + + auto p3 = (lerp(p1_->ccomponents(), p2_->ccomponents(), relative_dist_along) + interpolated_offset).eval(); + + std::set tags_for_this_point_on_subsequent_profile = {t}; + + if (is_last_placement_of_this_profile) { + for (auto& ts : w2_tags) { + if (ts.find(t) != ts.end()) { + tags_for_this_point_on_subsequent_profile = ts; + } + } + } + + for (auto& x : tags_for_this_point_on_subsequent_profile) { + points.push_back(taxonomy::make(p3)); + common_tags_vec.push_back(x); + } + } + } else { + for (auto tmp__ : boost::combine(w1_points, w2_points)) { + boost::tie(p1, p2) = tmp__; + auto p3 = (lerp(p1->ccomponents(), p2->ccomponents(), relative_dist_along) + interpolated_offset).eval(); + points.push_back(taxonomy::make(p3)); + } + } + + /* + // This is handled in the loop_to_points() function above if (!points.empty()) { if (!w1->closed.get_value_or(true) && !w2->closed.get_value_or(true)) { // open polygon, add last point @@ -178,12 +377,17 @@ taxonomy::loft::ptr ifcopenshell::geometry::make_loft(const Settings& settings_, points.push_back(points.front()); } } + */ auto interpolated_loop = polygon_from_points(points); - interpolated_loop->external = w1->external; if (interpolated->kind() == taxonomy::FACE) { - std::static_pointer_cast(interpolated)->children.push_back(interpolated_loop); + interpolated_loop->external = w1->external; + std::static_pointer_cast(interpolated)->children.push_back(interpolated_loop); } else { + if (w1->tags) { + std::static_pointer_cast(interpolated)->tags = common_tags_vec; + } + std::static_pointer_cast(interpolated)->closed = w1->closed; std::static_pointer_cast(interpolated)->children = interpolated_loop->children; } } diff --git a/src/ifcgeom/kernels/opencascade/loft.cpp b/src/ifcgeom/kernels/opencascade/loft.cpp index 188150b614..60997d24ad 100644 --- a/src/ifcgeom/kernels/opencascade/loft.cpp +++ b/src/ifcgeom/kernels/opencascade/loft.cpp @@ -27,12 +27,34 @@ #include #include #include +#include using namespace ifcopenshell::geometry; using namespace ifcopenshell::geometry::kernels; using namespace IfcGeom; using namespace IfcGeom::util; +// @todo duplicated +namespace { +template > +bool has_intersection(const std::set& A, + const std::set& B) { + auto itA = A.begin(); + auto itB = B.begin(); + + while (itA != A.end() && itB != B.end()) { + if (Cmp()(*itA, *itB)) { + ++itA; + } else if (Cmp()(*itB, *itA)) { + ++itB; + } else { + return true; + } + } + return false; +} +} + bool OpenCascadeKernel::convert(const taxonomy::loft::ptr loft, TopoDS_Shape& result) { if (loft->children.size() < 2) { return false; @@ -110,37 +132,125 @@ bool OpenCascadeKernel::convert(const taxonomy::loft::ptr loft, TopoDS_Shape& re BRep_Builder BB; BB.MakeCompound(comp); - // @todo this approach is - // potentially incorrect as there is no guarantee that the wires for - // subsequently placed profiles are traversed from an equivalent start vertex. + std::vector shps(loft->children.size()); + std::vector>> all_tags; - for (auto it = loft->children.begin(); it < loft->children.end() - 1; ++it) { + + std::ostringstream oss; + loft->children[0]->print(oss); + loft->children[1]->print(oss); + auto s = oss.str(); + std::wcout << s.c_str() << std::endl; + + // First convert all taxonomy items to TopoDS_Wire/Face + for (auto it = loft->children.begin(); it < loft->children.end(); ++it) { + auto i = std::distance(loft->children.begin(), it); + if ((*it)->kind() == taxonomy::FACE) { + if (!convert(std::static_pointer_cast((*it)), shps[i])) { + return false; + } + } + if ((*it)->kind() == taxonomy::LOOP) { + + // @todo duplicated with infra_sweep_helper + // I think make_loft() where should just return a shell instead, because + // this faceted lofting does not depend on any functionality in the geometry library + // and the branching with tags needs to be solved twice otherwise + auto loop_to_points = [](const taxonomy::loop::ptr& loop, const boost::optional>& input_tags) -> std::pair, std::vector>> { + std::vector points; + std::vector> tags; + std::vector::const_iterator tag_it; + + if (!loop->closed.get_value_or(false)) { + points = {boost::get(loop->children[0]->start)}; + if (input_tags) { + tags = {{input_tags->front()}}; + tag_it = ++input_tags->begin(); + } + } + for (auto& e : loop->children) { + const auto& p1 = boost::get(e->start); + const auto& p2 = boost::get(e->end); + if (input_tags && p1->ccomponents() == p2->ccomponents()) { + tags.back().insert(*tag_it); + ++tag_it; + } else { + points.push_back(p2); + if (input_tags) { + tags.emplace_back(); + tags.back().insert(*tag_it); + ++tag_it; + } + } + } + if (!input_tags) { + if (loop->closed.get_value_or(false)) { + // close polygon by referencing first point + points.push_back(points.front()); + } + } + return {points, tags}; + }; + + auto lp = std::static_pointer_cast(*it); + TopoDS_Wire w; + + if (lp->tags) { + auto [points, tags] = loop_to_points(lp, lp->tags); + BRepBuilderAPI_MakePolygon mp; + for (auto& p : points) { + const auto& xyz = p->ccomponents(); + mp.Add(gp_Pnt(xyz(0), xyz(1), xyz(2))); + } + w = mp.Wire(); + + if (lp->matrix && !lp->matrix->is_identity()) { + const auto& m = lp->matrix->ccomponents(); + gp_Trsf tr; + tr.SetValues( + m(0, 0), m(0, 1), m(0, 2), m(0, 3), m(1, 0), m(1, 1), m(1, 2), m(1, 3), m(2, 0), m(2, 1), m(2, 2), m(2, 3)); + w = TopoDS::Wire(BRepBuilderAPI_Transform(w, tr).Shape()); + } + + all_tags.push_back(tags); + } else { + if (!convert(std::static_pointer_cast((*it)), w)) { + return false; + } + } + + shps[i] = w; + } + if (shps[i].ShapeType() != TopAbs_FACE && shps[i].ShapeType() != TopAbs_WIRE) { + return false; + } + } + + /* + // With --dimensionality CURVES_SURFACES_AND_SOLIDS this will give the interpolated profiles as line geometry + { + for (auto& f : shps) { + BB.Add(comp, f); + } + } + result = comp; + return true; + */ + + // @todo this approach is + // potentially incorrect as there is no guarantee that the wires for + // subsequently placed profiles are traversed from an equivalent start vertex. + for (auto it = shps.begin(); it < shps.end() - 1; ++it) { + auto ii = std::distance(shps.begin(), it); auto jt = it + 1; - std::array fa = { *it, *jt }; - std::array shps; + std::array::const_iterator, 2> fa = { it, jt }; std::vector> ws; ws.emplace_back(); for (int i = 0; i < 2; ++i) { - if (fa[i]->kind() == taxonomy::FACE) { - if (!convert(std::static_pointer_cast(fa[i]), shps[i])) { - return false; - } - } - if (fa[i]->kind() == taxonomy::LOOP) { - TopoDS_Wire w; - if (!convert(std::static_pointer_cast(fa[i]), w)) { - return false; - } - shps[i] = w; - } - if (shps[i].ShapeType() != TopAbs_FACE && shps[i].ShapeType() != TopAbs_WIRE) { - return false; - } - - if (shps[i].ShapeType() == TopAbs_FACE) { - ws[0][i] = BRepTools::OuterWire(TopoDS::Face(shps[i])); + if (fa[i]->ShapeType() == TopAbs_FACE) { + ws[0][i] = BRepTools::OuterWire(TopoDS::Face(*fa[i])); size_t j = 1; - for (TopExp_Explorer exp(shps[i], TopAbs_WIRE); exp.More(); exp.Next()) { + for (TopExp_Explorer exp(*fa[i], TopAbs_WIRE); exp.More(); exp.Next()) { if (exp.Current() != ws[0][i]) { while (ws.size() <= j) { ws.emplace_back(); @@ -149,22 +259,110 @@ bool OpenCascadeKernel::convert(const taxonomy::loft::ptr loft, TopoDS_Shape& re } } } else { - ws[0][i] = TopoDS::Wire(shps[i]); + ws[0][i] = TopoDS::Wire(*fa[i]); } } - if (shps[0].ShapeType() == TopAbs_FACE) { + if (it->ShapeType() == TopAbs_FACE) { // When processing a sectioned *surface* there are no // begin and end caps that need to be added. - if (it == loft->children.begin()) { + if (it == shps.begin()) { // faces.Append(shps[0]); BB.Add(comp, shps[0]); } - if (jt == loft->children.end() - 1) { + if (jt == shps.end() - 1) { // faces.Append(shps[1]); BB.Add(comp, shps[1]); } } + if (!all_tags.empty()) { + // only open profiles have tags for now, so there is only one wire, no inner wires + const auto& wp = ws[0]; + std::array, 2> profile_points; + std::array>>::const_iterator, 2> tag_pairs = { + all_tags.begin() + std::distance(shps.begin(), it), + all_tags.begin() + std::distance(shps.begin(), jt)}; + + for (size_t i = 0; i < 2; ++i) { + TopTools_IndexedDataMapOfShapeListOfShape ancestors; + const auto& wire = wp[i]; + auto& result = profile_points[i]; + + TopExp::MapShapesAndAncestors( + wire, + TopAbs_VERTEX, + TopAbs_EDGE, + ancestors); + + TopoDS_Vertex v0, vn, previous; + TopExp::Vertices(wire, v0, vn); + + TopoDS_Vertex curr = v0; + result.push_back(BRep_Tool::Pnt(curr)); + + while (true) { + if (curr.IsSame(vn)) { + break; + } + + const TopTools_ListOfShape& incidentEdges = ancestors.FindFromKey(curr); + + for (TopTools_ListIteratorOfListOfShape it(incidentEdges); it.More(); it.Next()) { + const TopoDS_Edge& e = TopoDS::Edge(it.Value()); + + TopoDS_Vertex ev0, ev1; + TopExp::Vertices(e, ev0, ev1); + + TopoDS_Vertex other_on_edge = curr.IsSame(ev0) ? ev1 : ev0; + if (other_on_edge.IsSame(previous)) { + continue; + } else { + previous = curr; + curr = other_on_edge; + result.push_back(BRep_Tool::Pnt(curr)); + break; + } + } + } + } + + auto a = profile_points[0].begin(); + auto b = profile_points[1].begin(); + auto c = tag_pairs[0]->begin(); + auto d = tag_pairs[1]->begin(); + + if (!has_intersection(*c, *d)) { + throw std::runtime_error("Starting vertices do not have corresponding tags"); + } + + auto emit_triangle = [&](const gp_Pnt& p1, const gp_Pnt& p2, const gp_Pnt& p3) { + BB.Add(comp, BRepBuilderAPI_MakeFace(BRepBuilderAPI_MakePolygon(p1, p2, p3, true).Wire()).Face()); + }; + + while (c != (tag_pairs[0]->end() - 1) && d != (tag_pairs[0]->end() - 1)) { + if (c != (tag_pairs[0]->end() - 1) && has_intersection(*(c + 1), *d)) { + emit_triangle(*a, *(a + 1), *b); + ++a; + ++c; + } else if (d != (tag_pairs[1]->end() - 1) && has_intersection(*c, *(d + 1))) { + emit_triangle(*a, *(b + 1), *b); + ++b; + ++d; + } else if (c != (tag_pairs[0]->end() - 1) && d != (tag_pairs[1]->end() - 1) && has_intersection(*(c + 1), *(d + 1))) { + emit_triangle(*a, *(a + 1), *b); + emit_triangle(*(a + 1), *(b + 1), *b); + ++a; + ++b; + ++c; + ++d; + } else { + throw std::runtime_error("Unable to construct surface"); + } + } + + continue; + } + for (auto& wp : ws) { BRepTools_WireExplorer a(wp[0]); BRepTools_WireExplorer b(wp[1]); diff --git a/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp b/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp index 334be1324a..7f3c4f43c1 100644 --- a/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp +++ b/src/ifcgeom/mapping/IfcOpenCrossProfileDef.cpp @@ -50,7 +50,6 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcOpenCrossProfileDef* inst) { if (tags.has_value() && !tags.get().empty()) { tag = tags.get()[0]; } - // start->tag = tag; auto widths = inst->Widths(); auto angles = inst->Slopes(); // these are actually angles, but the attribute is called Slopes @@ -79,16 +78,13 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcOpenCrossProfileDef* inst) { tag = tags.get()[i+1]; } - // points.push_back(taxonomy::make(x, y, z, tag)); points.push_back(taxonomy::make(x, y, z)); } auto mapped = polygon_from_points(points); - if (mapped->kind() == taxonomy::LOOP) { - auto r = taxonomy::loop::ptr((taxonomy::loop*)mapped->clone_()); - r->closed = false; - return r; - } + mapped->closed = false; + mapped->tags = tags; + return mapped; } diff --git a/src/ifcgeom/taxonomy.cpp b/src/ifcgeom/taxonomy.cpp index e03c1010a3..7d509db8cb 100644 --- a/src/ifcgeom/taxonomy.cpp +++ b/src/ifcgeom/taxonomy.cpp @@ -822,11 +822,11 @@ namespace { boost::optional ifcopenshell::geometry::taxonomy::loop_to_function_item_upgrade_impl(ptr item) { - boost::optional fi_; + boost::optional function_item_; auto loop_ = dcast(item); if (loop_) { - if (loop_->fi.is_initialized()) { - fi_ = loop_->fi; + if (loop_->function_item.is_initialized()) { + function_item_ = loop_->function_item; } else { // piecewise_function is a specialization of function_item - callers don't need to know this detail piecewise_function::spans_t spans; @@ -880,9 +880,9 @@ boost::optional ifcopenshell::geometry::taxonomy::loop_to_fu return boost::none; } } - fi_ = make(0.0,spans); - loop_->fi = fi_; + function_item_ = make(0.0, spans); + loop_->function_item = function_item_; } } - return fi_; + return function_item_; } diff --git a/src/ifcgeom/taxonomy.h b/src/ifcgeom/taxonomy.h index d3ec5c5e17..ab8a222aee 100644 --- a/src/ifcgeom/taxonomy.h +++ b/src/ifcgeom/taxonomy.h @@ -928,7 +928,8 @@ typedef item const* ptr; DECLARE_PTR(loop) boost::optional external, closed; - boost::optional fi; + boost::optional function_item; + boost::optional> tags; bool is_polyhedron() const { for (auto& e : children) { From bb50be389e3010fe85bed02ab3aeb96afba30a35 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 15 Jan 2026 09:15:13 +1100 Subject: [PATCH 497/657] Refactor should_show_panel into tool.Blender (avoid helper.py) and merge into is_tab This moves the logic from ui.py into tool.Blender. In general, helper.py is a bit generic (and historic) and we should use tool instead. --- src/bonsai/bonsai/bim/helper.py | 17 -- src/bonsai/bonsai/bim/module/material/ui.py | 2 - src/bonsai/bonsai/bim/ui.py | 185 ++++---------------- src/bonsai/bonsai/tool/blender.py | 17 +- 4 files changed, 51 insertions(+), 170 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index e76b512de3..e6589fe672 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -813,16 +813,6 @@ def get_panel_tab_name(panel_class): return "PROJECT" # Default fallback -def should_show_panel(panel_id, panel_tab_name, context): - if tool.Blender.is_tab(context, "BOOKMARK"): - return is_panel_bookmarked(panel_id) and get_panel_visibility(panel_id, "BOOKMARK") - - if tool.Blender.is_tab(context, panel_tab_name): - return get_tab_visibility(panel_tab_name) and get_panel_visibility(panel_id, panel_tab_name) - - return False - - def get_tab_visibility(tab_name): bim_props = tool.Blender.get_bim_props() tab_vis = bim_props.tab_visibilities.get(tab_name) @@ -850,13 +840,6 @@ def get_panel_visibility(panel_id, current_tab=None): return True -def is_panel_bookmarked(panel_id): - panel_config = get_panel_config(panel_id) - if panel_config: - return panel_config.is_bookmarked - return False - - def get_panel_config(panel_id, create_if_missing=False): try: bim_props = tool.Blender.get_bim_props() diff --git a/src/bonsai/bonsai/bim/module/material/ui.py b/src/bonsai/bonsai/bim/module/material/ui.py index c1b9ac2ae4..db05276d9b 100644 --- a/src/bonsai/bonsai/bim/module/material/ui.py +++ b/src/bonsai/bonsai/bim/module/material/ui.py @@ -136,8 +136,6 @@ class BIM_PT_object_material(Panel): @classmethod def poll(cls, context): - if not tool.Blender.is_tab(context, "GEOMETRY"): - return False if not (obj := context.active_object): return False ifc_id = tool.Blender.get_ifc_definition_id(obj) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 514aa168ce..ce53858871 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -43,7 +43,6 @@ from bonsai.bim.helper import ( get_tab_visibility, set_tab_visibility, get_panel_visibility, - is_panel_bookmarked, get_panel_config, get_all_tab_panels, initialize_tab_visibilities, @@ -1147,9 +1146,7 @@ class BIM_PT_tab_new_project_wizard(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if not tool.Blender.is_tab(context, cls.bim_tab_name): + if not tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): return False bim_props = tool.Blender.get_bim_props() pprops = tool.Project.get_project_props() @@ -1173,16 +1170,13 @@ class BIM_PT_tab_project_info(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): bim_props = tool.Blender.get_bim_props() pprops = tool.Project.get_project_props() if pprops.is_loading: return True elif tool.Ifc.get() or bim_props.ifc_file: return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1198,11 +1192,8 @@ class BIM_PT_tab_spatial(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1218,11 +1209,8 @@ class BIM_PT_tab_project_setup(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1239,11 +1227,8 @@ class BIM_PT_tab_stakeholders(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1259,11 +1244,8 @@ class BIM_PT_tab_collaboration(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1280,11 +1262,8 @@ class BIM_PT_tab_grouping_and_filtering(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1308,11 +1287,8 @@ class BIM_PT_tab_geometry(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1328,11 +1304,8 @@ class BIM_PT_tab_status(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1348,11 +1321,8 @@ class BIM_PT_tab_qto(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1368,11 +1338,8 @@ class BIM_PT_tab_resources(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1388,11 +1355,8 @@ class BIM_PT_tab_cost(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1408,11 +1372,8 @@ class BIM_PT_tab_sequence(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1428,11 +1389,8 @@ class BIM_PT_tab_structural(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1448,11 +1406,8 @@ class BIM_PT_tab_services(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1468,11 +1423,8 @@ class BIM_PT_tab_lighting(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1488,11 +1440,8 @@ class BIM_PT_tab_zones(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1508,11 +1457,8 @@ class BIM_PT_tab_solar_analysis(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1528,11 +1474,8 @@ class BIM_PT_tab_quality_control(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1548,11 +1491,8 @@ class BIM_PT_tab_clash_detection(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1569,11 +1509,8 @@ class BIM_PT_tab_sandbox(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): row = self.layout.row() @@ -1592,11 +1529,9 @@ class BIM_PT_tab_object_metadata(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False props = tool.Project.get_project_props() if ( - tool.Blender.is_tab(context, cls.bim_tab_name) + tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get() and (obj := context.active_object) # Hide links empty handles. @@ -1607,7 +1542,6 @@ class BIM_PT_tab_object_metadata(Panel): ) ): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1624,16 +1558,13 @@ class BIM_PT_tab_placement(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False if ( - tool.Blender.is_tab(context, cls.bim_tab_name) + tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get() and (obj := context.active_object) and tool.Ifc.get_entity(obj) ): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1650,11 +1581,8 @@ class BIM_PT_tab_representations(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1672,11 +1600,8 @@ class BIM_PT_tab_geometric_relationships(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1694,11 +1619,8 @@ class BIM_PT_tab_parametric_geometry(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1715,11 +1637,8 @@ class BIM_PT_tab_object_materials(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1736,11 +1655,8 @@ class BIM_PT_tab_materials(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1757,11 +1673,8 @@ class BIM_PT_tab_styles(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1778,11 +1691,8 @@ class BIM_PT_tab_profiles(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1799,11 +1709,8 @@ class BIM_PT_tab_sheets(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1820,11 +1727,8 @@ class BIM_PT_tab_drawings(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1841,11 +1745,8 @@ class BIM_PT_tab_schedules(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1862,11 +1763,8 @@ class BIM_PT_tab_references(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1884,11 +1782,8 @@ class BIM_PT_tab_misc(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get(): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname) and tool.Ifc.get(): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1905,11 +1800,8 @@ class BIM_PT_tab_handover(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass @@ -1926,11 +1818,8 @@ class BIM_PT_tab_operations(Panel): @classmethod def poll(cls, context): - if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context): - return False - if tool.Blender.is_tab(context, cls.bim_tab_name): + if tool.Blender.should_show_panel(context, cls.bim_tab_name, cls.bl_idname): return True - return tool.Blender.is_tab(context, "BOOKMARK") def draw(self, context): pass diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index e45e2b1206..2f6190c448 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -161,11 +161,19 @@ class Blender(bonsai.core.tool.Blender): screen.BIMAreaProperties.add() @classmethod - def is_tab(cls, context: bpy.types.Context, tab: str) -> bool: + def should_show_panel(cls, context: bpy.types.Context, tab: str, panel: str) -> bool: aprops = cls.get_area_props(context) if aprops.path_from_id() == "BIMAreaProperties" and context.area.spaces.active.search_filter: return True - return aprops.tab == tab + if (is_bookmark_tab := aprops.tab == "BOOKMARK") or aprops.tab == tab: + bprops = tool.Blender.get_bim_props() + if not (panel_visibility := bprops.panel_properties.get(panel)): + return not is_bookmark_tab + if is_bookmark_tab: + if panel_visibility.is_bookmarked and panel_visibility.is_visible_in_bookmarks: + return True + elif panel_visibility.is_visible_in_tab: + return True @classmethod def is_default_scene(cls) -> bool: @@ -1461,7 +1469,10 @@ class Blender(bonsai.core.tool.Blender): def override_scene_panel(cls, original_panel: bpy.types.Panel) -> None: @classmethod def poll_check_blender_tab(cls, context): - return tool.Blender.is_tab(context, "BLENDER") + aprops = tool.Blender.get_area_props(context) + if aprops.path_from_id() == "BIMAreaProperties" and context.area.spaces.active.search_filter: + return True + return aprops.tab == "BLENDER" polls = bonsai.bim.original_scene_panels_polls From 26fb6ebd3c28b4d1950dbca3e50afb4a9381e856 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 15 Jan 2026 11:30:28 +1100 Subject: [PATCH 498/657] Refactor tab visibility to use data cache Previously calculation of visibility was done on every draw (3x 10tabs x 10 collection items). The data class is intended to calculate UI data once only which is more efficient. This also removes all helper calls from the UI. --- src/bonsai/bonsai/bim/helper.py | 16 ------ src/bonsai/bonsai/bim/prop.py | 6 ++- src/bonsai/bonsai/bim/ui.py | 91 ++++++++++++++------------------- 3 files changed, 42 insertions(+), 71 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index e6589fe672..aed0e09ca4 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -830,16 +830,6 @@ def set_tab_visibility(tab_name, visible): new_tab.is_visible = visible -def get_panel_visibility(panel_id, current_tab=None): - panel_config = get_panel_config(panel_id) - if panel_config: - if current_tab == "BOOKMARK": - return panel_config.is_visible_in_bookmarks - else: - return panel_config.is_visible_in_tab - return True - - def get_panel_config(panel_id, create_if_missing=False): try: bim_props = tool.Blender.get_bim_props() @@ -854,9 +844,6 @@ def get_panel_config(panel_id, create_if_missing=False): try: prop = bim_props.panel_properties.add() prop.name = panel_id - prop.is_visible_in_tab = True - prop.is_visible_in_bookmarks = True - prop.is_bookmarked = False return prop except AttributeError: pass @@ -918,6 +905,3 @@ def initialize_panel_properties(): prop = bim_props.panel_properties.add() prop.name = panel_id - prop.is_visible_in_tab = True - prop.is_visible_in_bookmarks = True - prop.is_bookmarked = False diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 21386c4544..0b513882c6 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -60,6 +60,10 @@ def update_tab(self: "BIMAreaProperties", context: bpy.types.Context) -> None: self.previous_tab = self.tab +def update_is_visible(self: "BIMTabVisibility", context: bpy.types.Context) -> None: + bonsai.bim.handler.refresh_ui_data() + + def update_global_tab(self: "BIMTabProperties", context: bpy.types.Context) -> None: tool.Blender.setup_tabs() screen = context.id_data @@ -537,7 +541,7 @@ class BIMTabProperties(PropertyGroup): class BIMTabVisibility(PropertyGroup): name: StringProperty(name="Tab Name") - is_visible: BoolProperty(name="Is Visible", default=True) + is_visible: BoolProperty(name="Is Visible", default=True, update=update_is_visible) if TYPE_CHECKING: name: str diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index ce53858871..a5eb91521b 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -36,18 +36,6 @@ import bonsai.bim import bonsai.tool as tool from ifcopenshell.util.file import IfcHeaderExtractor from bonsai.bim.prop import Attribute -from bonsai.bim.helper import ( - get_tab_names, - get_panel_tab_name, - should_show_panel, - get_tab_visibility, - set_tab_visibility, - get_panel_visibility, - get_panel_config, - get_all_tab_panels, - initialize_tab_visibilities, - initialize_panel_properties, -) from bonsai.bim.module.bsdd.prop import BIMBSDDProperties, BSDDProperty from bonsai.bim.module.pset.prop import IfcProperty from bonsai.bim.module.model.prop import ( @@ -998,41 +986,13 @@ class BIM_PT_tabs(Panel): is_ifc_project = bool(tool.Ifc.get()) aprops = tool.Blender.get_area_props(context) addon_prefs = tool.Blender.get_addon_preferences() - ifc_icon = f"{UIData.data['tabs_icon_color_mode']}_ifc" split = self.layout.split(factor=0.9) col_left = split.column(align=True) row_left = col_left.row(align=True) row_left.alignment = "CENTER" - if get_tab_visibility("PROJECT"): - row_left.operator( - "bim.set_tab", - text="", - emboss=aprops.tab == "PROJECT", - icon_value=bonsai.bim.icons[ifc_icon].icon_id, - ).tab = "PROJECT" - if get_tab_visibility("OBJECT"): - self.draw_tab_entry(row_left, "FILE_3D", "OBJECT", is_ifc_project, aprops.tab == "OBJECT") - if get_tab_visibility("GEOMETRY"): - self.draw_tab_entry(row_left, "MATERIAL", "GEOMETRY", is_ifc_project, aprops.tab == "GEOMETRY") - if get_tab_visibility("DRAWINGS"): - self.draw_tab_entry(row_left, "DOCUMENTS", "DRAWINGS", is_ifc_project, aprops.tab == "DRAWINGS") - if get_tab_visibility("SERVICES"): - self.draw_tab_entry(row_left, "NETWORK_DRIVE", "SERVICES", is_ifc_project, aprops.tab == "SERVICES") - if get_tab_visibility("STRUCTURE"): - self.draw_tab_entry(row_left, "EDITMODE_HLT", "STRUCTURE", is_ifc_project, aprops.tab == "STRUCTURE") - if get_tab_visibility("SCHEDULING"): - self.draw_tab_entry(row_left, "NLA", "SCHEDULING", is_ifc_project, aprops.tab == "SCHEDULING") - if get_tab_visibility("FM"): - self.draw_tab_entry(row_left, "PACKAGE", "FM", True, aprops.tab == "FM") - if get_tab_visibility("QUALITY"): - self.draw_tab_entry(row_left, "COMMUNITY", "QUALITY", True, aprops.tab == "QUALITY") - if ( - addon_prefs.save_metadata_blend_file - and addon_prefs.user_ui_customization - and get_tab_visibility("BOOKMARK") - ): - self.draw_tab_entry(row_left, "SOLO_ON", "BOOKMARK", True, aprops.tab == "BOOKMARK") + for tab in UIData.data["tabs"]: + self.draw_tab_entry(row_left, tab[1], tab[0], tab[2], aprops.tab == tab[0]) row_left.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") row_left = col_left.row(align=True) @@ -1043,13 +1003,12 @@ class BIM_PT_tabs(Panel): if not (addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization): row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) - for tab in get_tab_names(): + for tab in UIData.data["tabs"]: # Draw a little underscore below the active tab icon. - if get_tab_visibility(tab): - if aprops.tab == tab: - row_left.prop(aprops, "active_tab", text="", icon="BLANK1") - else: - row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) + if aprops.tab == tab: + row_left.prop(aprops, "active_tab", text="", icon="BLANK1") + else: + row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) # space for Switch col_right = split.column(align=True) row_right = col_right.row(align=True) @@ -1062,10 +1021,9 @@ class BIM_PT_tabs(Panel): row.prop(aprops, "tab", text="") if addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization: - for tab in get_tab_names(): - if get_tab_visibility(tab): - if aprops.tab == tab: - row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab + for tab in UIData.data["tabs"]: + if aprops.tab == tab: + row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab if bonsai.REINSTALLED_BBIM_VERSION: box = self.layout.box() @@ -1132,7 +1090,10 @@ class BIM_PT_tabs(Panel): def draw_tab_entry(self, row, icon, tab_name, enabled=True, highlight=True): tab_entry = row.row(align=True) - tab_entry.operator("bim.set_tab", text="", emboss=highlight, icon=icon).tab = tab_name + if isinstance(icon, int): + tab_entry.operator("bim.set_tab", text="", emboss=highlight, icon_value=icon).tab = tab_name + else: + tab_entry.operator("bim.set_tab", text="", emboss=highlight, icon=icon).tab = tab_name tab_entry.enabled = enabled @@ -1860,8 +1821,8 @@ class UIData: def load(cls): cls.data = { "version": cls.version(), - "tabs_icon_color_mode": cls.icon_color_mode("user_interface.wcol_regular.text"), "menu_icon_color_mode": cls.icon_color_mode("user_interface.wcol_menu.text"), + "tabs": cls.tabs(), } cls.is_loaded = True @@ -1873,6 +1834,28 @@ class UIData: def icon_color_mode(cls, color_path): return tool.Blender.detect_icon_color_mode(color_path) + @classmethod + def tabs(cls): + hidden_tabs = [t.name for t in tool.Blender.get_bim_props().tab_visibilities if not t.is_visible] + color_mode = cls.icon_color_mode("user_interface.wcol_regular.text") + is_ifc_project = bool(tool.Ifc.get()) + return [ + tab + for tab in [ + ("PROJECT", bonsai.bim.icons[f"{color_mode}_ifc"].icon_id, True), + ("OBJECT", "FILE_3D", is_ifc_project), + ("GEOMETRY", "MATERIAL", is_ifc_project), + ("DRAWINGS", "DOCUMENTS", is_ifc_project), + ("SERVICES", "NETWORK_DRIVE", is_ifc_project), + ("STRUCTURE", "EDITMODE_HLT", is_ifc_project), + ("SCHEDULING", "NLA", is_ifc_project), + ("FM", "PACKAGE", True), + ("QUALITY", "COMMUNITY", True), + ("BOOKMARK", "SOLO_ON", is_ifc_project), + ] + if tab[0] not in hidden_tabs + ] + def draw_statusbar(self, context): if not UIData.is_loaded: From ed81a0a4b3a3a637a82808b13aca4c992380beee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Mell=C3=BCh?= <74136980+c-mellueh@users.noreply.github.com> Date: Thu, 15 Jan 2026 10:52:06 +0100 Subject: [PATCH 499/657] update api to V5 (#7409) --- src/bsdd/bsdd.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/bsdd/bsdd.py b/src/bsdd/bsdd.py index 17480c87f5..87154855ae 100644 --- a/src/bsdd/bsdd.py +++ b/src/bsdd/bsdd.py @@ -184,7 +184,7 @@ class ClassPropertyContractV1(TypedDict): qudtCodes: NotRequired[list[str]] -class PropertyContractV4(TypedDict): +class PropertyContractV5(TypedDict): dictionaryUri: NotRequired[str] activationDateUtc: str code: str @@ -710,16 +710,14 @@ class Client: params = {k: v for k, v in params.items() if v is not None} return self.get(endpoint, params) - def get_property(self, uri, include_classes=False, language_code="", version: int = 4) -> PropertyContractV4: + def get_property(self, uri, language_code="", version: int = 5) -> PropertyContractV5: """ - Get Property Detail - this API replaces Property + Get Property details. + If you also need the list of classes using the property, then use api/Property/Classes """ - endpoint = f"Property/v{version}" params = { "uri": uri, - "includeClasses": include_classes, "LanguageCode": language_code, } return self.get(endpoint, params) From 47a2c1d21abfb0536dada48e0a268481d3ddf457 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 15 Jan 2026 21:59:53 +1100 Subject: [PATCH 500/657] Refactor panel visibility to not use any helpers, operators, and shift config UI into add-on settings To be consistent with all other settings, I've moved the visibility config UI from inline into the add-on settings. This restores the previous tab layout and no longer needs the "settings" icons to be there. This also removes the need for a "enable UI config" checkbox. Most of the code previously had dedicated operators to toggle booleans. This has been removed. This new approach also means helpers aren't needed. --- src/bonsai/bonsai/bim/__init__.py | 17 +- src/bonsai/bonsai/bim/helper.py | 113 -------------- src/bonsai/bonsai/bim/operator.py | 247 +++--------------------------- src/bonsai/bonsai/bim/prop.py | 24 +-- src/bonsai/bonsai/bim/ui.py | 103 ++++++++----- src/bonsai/bonsai/tool/blender.py | 6 +- 6 files changed, 107 insertions(+), 403 deletions(-) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 785d7eac66..a7dc729881 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -130,12 +130,7 @@ classes = [ prop.StrProperty, operator.BIM_OT_enum_property_search, # /!\ Register AFTER prop.StrProperty operator.BIM_OT_attribute_search_values, - operator.BIM_UL_tab_panels, - operator.BIM_OT_toggle_panel_visibility, - operator.BIM_OT_bookmark_panel, - operator.BIM_OT_manage_tab_panels, operator.BIM_OT_manage_tab_visibility, - operator.BIM_OT_toggle_tab_visibility, operator.BIM_OT_reset_ui_layout, prop.ObjProperty, prop.MultipleFileSelect, @@ -144,7 +139,7 @@ classes = [ prop.BIMAreaProperties, prop.BIMTabProperties, prop.BIMTabVisibility, # Must be registered before BIMProperties - prop.BIMPanelProperties, # Must be registered before BIMProperties + prop.BIMPanelVisibility, # Must be registered before BIMProperties prop.BIMProperties, prop.IfcParameter, prop.PsetQto, @@ -157,6 +152,8 @@ classes = [ prop.BIMSnapGroups, ui.BIM_UL_clipping_plane, ui.BIM_UL_generic, + ui.BIM_UL_tab_visibilities, + ui.BIM_UL_panel_visibilities, ui.DocPreferences, ui.GizmoPreferencesDoor, # Register before GizmoPreferences ui.GizmoPreferencesWindow, # Register before GizmoPreferences @@ -318,10 +315,6 @@ def register(): # RestrictedContext doesn't allow accessing scene attribute, postpone it for a bit. bpy.app.timers.register(tool.Blender.setup_user_data_dir, first_interval=0.1) - bpy.types.Scene.active_tab_name = bpy.props.StringProperty() - bpy.types.Scene.tab_panels = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup) - bpy.types.Scene.active_tab_panel_index = bpy.props.IntProperty() - def unregister(): global icons @@ -363,7 +356,3 @@ def unregister(): tool.Blender.remove_scene_panel_override(panel) bpy.app.translations.unregister("bonsai") - - del bpy.types.Scene.active_tab_name - del bpy.types.Scene.tab_panels - del bpy.types.Scene.active_tab_panel_index diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index aed0e09ca4..1a92078be3 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -792,116 +792,3 @@ def draw_filter( op.group_index = i op.index = j op.module = module - - -# ============================================================================ -# UI Panel Visibility Helpers -# ============================================================================ - - -def get_tab_names(): - from bonsai.bim.prop import get_tab - - enum_items = get_tab(None, None) - # Exclude None separators and the BLENDER tab (not part of BIM tab system) - return [item[0] for item in enum_items if item is not None and item[0] != "BLENDER"] - - -def get_panel_tab_name(panel_class): - if hasattr(panel_class, "bim_tab_name"): - return panel_class.bim_tab_name - return "PROJECT" # Default fallback - - -def get_tab_visibility(tab_name): - bim_props = tool.Blender.get_bim_props() - tab_vis = bim_props.tab_visibilities.get(tab_name) - return tab_vis.is_visible if tab_vis else True - - -def set_tab_visibility(tab_name, visible): - bim_props = tool.Blender.get_bim_props() - tab_vis = bim_props.tab_visibilities.get(tab_name) - if tab_vis: - tab_vis.is_visible = visible - else: - new_tab = bim_props.tab_visibilities.add() - new_tab.name = tab_name - new_tab.is_visible = visible - - -def get_panel_config(panel_id, create_if_missing=False): - try: - bim_props = tool.Blender.get_bim_props() - except (AttributeError, AssertionError): - return None - - for prop in bim_props.panel_properties: - if prop.name == panel_id: - return prop - - if create_if_missing: - try: - prop = bim_props.panel_properties.add() - prop.name = panel_id - return prop - except AttributeError: - pass - - return None - - -def get_all_tab_panels(force_refresh=False): - panels = {tab_name: [] for tab_name in get_tab_names() if tab_name != "BOOKMARK"} - panels["BOOKMARK"] = [] - - bim_props = tool.Blender.get_bim_props() - for prop in bim_props.panel_properties: - panel_class = getattr(bpy.types, prop.name, None) - if panel_class: - tab_name = get_panel_tab_name(panel_class) - if tab_name and tab_name != "BOOKMARK": - bl_label = getattr(panel_class, "bl_label", prop.name) - panels[tab_name].append({"bl_idname": prop.name, "bl_label": bl_label}) - - if prop.is_bookmarked: - panel_class = getattr(bpy.types, prop.name, None) - if panel_class: - bl_label = getattr(panel_class, "bl_label", prop.name) - panels["BOOKMARK"].append({"bl_idname": prop.name, "bl_label": bl_label}) - - if not panels["BOOKMARK"]: - panels["BOOKMARK"] = [{}] - - return panels - - -def initialize_tab_visibilities(): - bim_props = tool.Blender.get_bim_props() - - if len(bim_props.tab_visibilities) > 0: - return - - for tab_name in get_tab_names(): - tab_vis = bim_props.tab_visibilities.add() - tab_vis.name = tab_name - tab_vis.is_visible = True - - -def initialize_panel_properties(): - - bim_props = tool.Blender.get_bim_props() - - if len(bim_props.panel_properties) > 0: - return - - for attr_name in dir(bpy.types): - if attr_name.startswith("BIM_PT_tab_"): - panel_class = getattr(bpy.types, attr_name) - if not hasattr(panel_class, "bl_idname"): - continue - - panel_id = panel_class.bl_idname - - prop = bim_props.panel_properties.add() - prop.name = panel_id diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 8cfc3fb0d4..3621344542 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -33,15 +33,6 @@ import bonsai.bim import bonsai.tool as tool import bonsai.bim.handler from enum import Enum -from bonsai.bim.helper import ( - get_all_tab_panels, - get_tab_visibility, - set_tab_visibility, - get_tab_names, - get_panel_config, - initialize_panel_properties, - initialize_tab_visibilities, -) from bpy_extras.io_utils import ImportHelper from bonsai.bim import import_ifc from bonsai.bim.prop import StrProperty @@ -1735,156 +1726,6 @@ class BIM_OT_attribute_remove_subitem(bpy.types.Operator): return {"FINISHED"} -class BIM_UL_tab_panels(bpy.types.UIList): - """UIList for Tab Panels""" - - def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): - row = layout.row(align=True) - row.label(text=item["bl_label"]) - - row.operator( - "bim.toggle_panel_visibility", - text="", - icon="HIDE_OFF" if item.get("visible", True) else "HIDE_ON", - ).action = f"TOGGLE_VISIBILITY_{item.name}" - - row.operator( - "bim.bookmark_panel", - text="", - icon="SOLO_ON" if item.get("bookmarked", False) else "SOLO_OFF", - ).action = f"BOOKMARK_{item.name}" - - -class BIM_OT_toggle_panel_visibility(bpy.types.Operator): - """Toggle Panel Visibility""" - - bl_idname = "bim.toggle_panel_visibility" - bl_label = "Toggle Panel Visibility" - bl_options = {"REGISTER", "UNDO"} - - action: bpy.props.StringProperty() - - def execute(self, context): - panel_name = self.action.replace("TOGGLE_VISIBILITY_", "") - active_tab = getattr(context.scene, "active_tab_name", None) or getattr( - tool.Blender.get_bim_props(), "tab", None - ) - is_bookmark_tab = active_tab == "BOOKMARK" - - panel_config = get_panel_config(panel_name, create_if_missing=True) - if panel_config: - if is_bookmark_tab: - panel_config.is_visible_in_bookmarks = not panel_config.is_visible_in_bookmarks - new_value = panel_config.is_visible_in_bookmarks - else: - panel_config.is_visible_in_tab = not panel_config.is_visible_in_tab - new_value = panel_config.is_visible_in_tab - - for item in context.scene.tab_panels: - if item.name == panel_name: - item["visible"] = new_value - break - - for area in bpy.context.window.screen.areas: - if area.type == "PROPERTIES": - area.tag_redraw() - - tab_context = "Bookmarks" if is_bookmark_tab else "Tab" - self.report({"INFO"}, f"Toggled visibility for {panel_name} in {tab_context}.") - return {"FINISHED"} - - -class BIM_OT_bookmark_panel(bpy.types.Operator): - """Bookmark Panel""" - - bl_idname = "bim.bookmark_panel" - bl_label = "Bookmark Panel" - bl_options = {"REGISTER", "UNDO"} - - action: bpy.props.StringProperty() - - def execute(self, context): - panel_name = self.action.replace("BOOKMARK_", "") - panel_config = get_panel_config(panel_name, create_if_missing=True) - - if panel_config: - panel_config.is_bookmarked = not panel_config.is_bookmarked - - for item in context.scene.tab_panels: - if item.name == panel_name: - item["bookmarked"] = panel_config.is_bookmarked - break - - for area in bpy.context.window.screen.areas: - if area.type == "PROPERTIES": - area.tag_redraw() - - self.report({"INFO"}, f"Toggled bookmark for {panel_name}.") - return {"FINISHED"} - - -class BIM_OT_manage_tab_panels(bpy.types.Operator): - """Manage Tab Panels""" - - bl_idname = "bim.manage_tab_panels" - bl_label = "Manage Tab Panels" - bl_options = {"REGISTER", "UNDO"} - - tab_name: bpy.props.StringProperty() - - def invoke(self, context, event): - - context.scene.active_tab_name = self.tab_name - context.scene.tab_panels.clear() - - initialize_tab_visibilities() - initialize_panel_properties() - all_panels = get_all_tab_panels(force_refresh=True) - - for panel_data in all_panels.get(self.tab_name, []): - panel_name = panel_data.get("bl_idname", "") - panel_label = panel_data.get("bl_label", "") - if not panel_name or not panel_label: - continue - - item = context.scene.tab_panels.add() - item.name = panel_name - item["bl_label"] = panel_label - - panel_config = get_panel_config(panel_name, create_if_missing=True) - if panel_config: - if self.tab_name == "BOOKMARK": - item["visible"] = panel_config.is_visible_in_bookmarks - else: - item["visible"] = panel_config.is_visible_in_tab - item["bookmarked"] = panel_config.is_bookmarked - else: - item["visible"] = True - item["bookmarked"] = False - - return context.window_manager.invoke_popup(self) - - def draw(self, context): - layout = self.layout - layout.label(text=f"Manage Panels for {self.tab_name} Tab") - - row = layout.row() - row.template_list("BIM_UL_tab_panels", "", context.scene, "tab_panels", context.scene, "active_tab_panel_index") - - def execute(self, context): - for item in context.scene.tab_panels: - panel_config = get_panel_config(item.name, create_if_missing=True) - if panel_config: - if self.tab_name == "BOOKMARK": - panel_config.is_visible_in_bookmarks = item["visible"] - else: - panel_config.is_visible_in_tab = item["visible"] - panel_config.is_bookmarked = item["bookmarked"] - - self.report({"INFO"}, f"Panels for {self.tab_name} managed successfully.") - return {"FINISHED"} - - class BIM_OT_manage_tab_visibility(bpy.types.Operator): """Manage Tab Visibility""" @@ -1892,51 +1733,26 @@ class BIM_OT_manage_tab_visibility(bpy.types.Operator): bl_label = "Manage Tab Visibility" bl_options = {"REGISTER", "UNDO"} - def draw(self, context): - layout = self.layout - row = layout.row() - row = self.layout.row(align=True) - row.alignment = "RIGHT" - - row.operator("bim.reset_ui_layout", icon="FILE_REFRESH", text="") - row = layout.row() - row = self.layout.row(align=True) - row.alignment = "CENTER" - - for tab_name in get_tab_names(): - row = layout.row() - row.label(text=tab_name) - is_visible = get_tab_visibility(tab_name) - icon = "HIDE_OFF" if is_visible else "HIDE_ON" - op = row.operator("bim.toggle_tab_visibility", text="", icon=icon) - op.tab_name = tab_name - def execute(self, context): - return {"FINISHED"} + from bonsai.bim.prop import get_tab - def invoke(self, context, event): - return context.window_manager.invoke_popup(self) + bprops = tool.Blender.get_bim_props() + bprops.tab_visibilities.clear() + bprops.panel_visibilities.clear() + tabs = [item[0] for item in get_tab(None, None) if item and item[0] != "BLENDER"] + for tab in tabs: + new = bprops.tab_visibilities.add() + new.name = tab - -class BIM_OT_toggle_tab_visibility(bpy.types.Operator): - """Toggle Tab Visibility""" - - bl_idname = "bim.toggle_tab_visibility" - bl_label = "Toggle Tab Visibility" - bl_options = {"REGISTER", "UNDO"} - - tab_name: bpy.props.StringProperty() - - def execute(self, context): - if self.tab_name in get_tab_names(): - current_visibility = get_tab_visibility(self.tab_name) - set_tab_visibility(self.tab_name, not current_visibility) - - for area in bpy.context.window.screen.areas: - if area.type == "PROPERTIES": - area.tag_redraw() - - self.report({"INFO"}, f"Toggled visibility for {self.tab_name}.") + for attr_name in dir(bpy.types): + if attr_name.startswith("BIM_PT_tab_"): + panel_class = getattr(bpy.types, attr_name) + if not hasattr(panel_class, "bl_idname"): + assert False, panel_class + new = bprops.panel_visibilities.add() + new.name = panel_class.bl_idname + new.label = panel_class.bl_label + new.tab_name = panel_class.bim_tab_name return {"FINISHED"} @@ -1948,29 +1764,8 @@ class BIM_OT_reset_ui_layout(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): - - for tab_name in get_tab_names(): - set_tab_visibility(tab_name, True) - - get_all_tab_panels()["BOOKMARK"] = [{}] - - for tab_name, panels in get_all_tab_panels().items(): - for panel in panels: - panel_name = panel.get("bl_idname", "") - if not panel_name: - continue - - show_prop_name = f"show_{panel_name.lower()}" - if hasattr(context.scene, show_prop_name): - setattr(context.scene, show_prop_name, True) - - bookmark_prop_name = f"bookmark_{panel_name.lower()}" - if hasattr(context.scene, bookmark_prop_name): - setattr(context.scene, bookmark_prop_name, False) - - for area in bpy.context.window.screen.areas: - if area.type == "PROPERTIES": - area.tag_redraw() - - self.report({"INFO"}, "UI layout reset to default.") + bprops = tool.Blender.get_bim_props() + bprops.tab_visibilities.clear() + bprops.panel_visibilities.clear() + bonsai.bim.handler.refresh_ui_data() return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 0b513882c6..ec8154b167 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -548,14 +548,17 @@ class BIMTabVisibility(PropertyGroup): is_visible: bool -class BIMPanelProperties(PropertyGroup): - is_visible_in_tab: BoolProperty(name="Is Visible in Tab", default=True) - is_visible_in_bookmarks: BoolProperty(name="Is Visible in Bookmarks", default=True) - is_bookmarked: BoolProperty(name="Is Bookmarked", default=False) +class BIMPanelVisibility(PropertyGroup): + name: StringProperty(name="Name") + label: StringProperty(name="Label") + tab_name: StringProperty(name="Tab Name") + is_visible: BoolProperty(name="Is Visible in Tab", default=True, update=update_is_visible) + is_bookmarked: BoolProperty(name="Is Bookmarked", default=False, update=update_is_visible) if TYPE_CHECKING: - is_visible_in_tab: bool - is_visible_in_bookmarks: bool + name: str + tab_name: str + is_visible: bool is_bookmarked: bool @@ -632,7 +635,6 @@ class BIMProperties(PropertyGroup): name="Mass Unit", default="KILOGRAM", ) - time_unit: EnumProperty( items=[ ("SECOND", "Second", "Seconds"), @@ -644,7 +646,9 @@ class BIMProperties(PropertyGroup): default="HOUR", ) tab_visibilities: CollectionProperty(type=BIMTabVisibility, name="Tab Visibilities") - panel_properties: CollectionProperty(type=BIMPanelProperties, name="Panel Properties") + active_tab_visibility_index: IntProperty(name="Active Tab Visibility Index") + panel_visibilities: CollectionProperty(type=BIMPanelVisibility, name="Panel Properties") + active_panel_visibility_index: IntProperty(name="Active Panel Property Index") if TYPE_CHECKING: is_dirty: bool @@ -661,7 +665,9 @@ class BIMProperties(PropertyGroup): mass_unit: str time_unit: str tab_visibilities: bpy.types.bpy_prop_collection_idprop[BIMTabVisibility] - panel_properties: bpy.types.bpy_prop_collection_idprop[BIMPanelProperties] + active_tab_visibility_index: int + panel_visibilities: bpy.types.bpy_prop_collection_idprop[BIMPanelVisibility] + active_panel_visibility_index: int class IfcParameter(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index a5eb91521b..c550c00872 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -242,6 +242,39 @@ class BIM_UL_generic(bpy.types.UIList): layout.label(text="", translate=False) +class BIM_UL_tab_visibilities(bpy.types.UIList): + def draw_item( + self, + context, + layout: bpy.types.UILayout, + data: bpy.types.PropertyGroup, + item: bpy.types.PropertyGroup, + icon, + active_data, + active_propname, + ) -> None: + row = layout.row() + row.prop(item, "name", text="", emboss=False) + row.prop(item, "is_visible", text="", icon="HIDE_OFF" if item.is_visible else "HIDE_ON", emboss=False) + + +class BIM_UL_panel_visibilities(bpy.types.UIList): + def draw_item( + self, + context, + layout: bpy.types.UILayout, + data: bpy.types.PropertyGroup, + item: bpy.types.PropertyGroup, + icon, + active_data, + active_propname, + ) -> None: + row = layout.row() + row.prop(item, "label", text="", emboss=False) + row.prop(item, "is_visible", text="", icon="HIDE_OFF" if item.is_visible else "HIDE_ON", emboss=False) + row.prop(item, "is_bookmarked", text="", icon="SOLO_ON" if item.is_bookmarked else "SOLO_OFF", emboss=False) + + class GizmoPreferencesDoor(bpy.types.PropertyGroup): """Property group for door gizmo visibility settings.""" @@ -711,11 +744,6 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): description="Custom suffix for the metadata blend file. Will be appended to the filename (without .ifc).", default=".ifc.metadata.blend", ) - user_ui_customization: BoolProperty( - name="User UI Customization", - description="Enable user interface customization features (hide/show tabs and panels, bookmark panels) and save the session settings as part of the metadata blend file", - default=False, - ) if TYPE_CHECKING: svg2pdf_command: str @@ -757,7 +785,6 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): chain_filter_with_set_operations: bool default_filter_with_set_operations_for_globalid_and_class: bool save_metadata_blend_file: bool - user_ui_customization: bool def draw(self, context: bpy.types.Context) -> None: layout = self.layout @@ -965,9 +992,26 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): row = layout.row() row.separator() row.prop(self, "metadata_blend_file_suffix") - row = layout.row() - row.separator() - row.prop(self, "user_ui_customization") + + bprops = tool.Blender.get_bim_props() + if tab_visibilities := bprops.tab_visibilities: + row = layout.row() + row.operator("bim.reset_ui_layout", icon="LOOP_BACK") + row = layout.row(align=True) + row.template_list( + "BIM_UL_tab_visibilities", "", bprops, "tab_visibilities", bprops, "active_tab_visibility_index" + ) + row.template_list( + "BIM_UL_panel_visibilities", + "", + bprops, + "panel_visibilities", + bprops, + "active_panel_visibility_index", + ) + else: + row = layout.row() + row.operator("bim.manage_tab_visibility", icon="PREFERENCES") # Scene panel groups @@ -983,48 +1027,31 @@ class BIM_PT_tabs(Panel): def draw(self, context): if not UIData.is_loaded: UIData.load() - is_ifc_project = bool(tool.Ifc.get()) aprops = tool.Blender.get_area_props(context) addon_prefs = tool.Blender.get_addon_preferences() - split = self.layout.split(factor=0.9) - col_left = split.column(align=True) - row_left = col_left.row(align=True) - row_left.alignment = "CENTER" + row = self.layout.row() + row.alignment = "CENTER" for tab in UIData.data["tabs"]: - self.draw_tab_entry(row_left, tab[1], tab[0], tab[2], aprops.tab == tab[0]) - row_left.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") + self.draw_tab_entry(row, tab[1], tab[0], tab[2], aprops.tab == tab[0]) + row.operator("bim.switch_tab", text="", emboss=False, icon="UV_SYNC_SELECT") - row_left = col_left.row(align=True) + row = self.layout.row() # Yes, that's right. - row_left.alignment = "CENTER" - row_left.scale_y = 0.2 - - if not (addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization): - row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) + row.alignment = "CENTER" + row.scale_y = 0.2 for tab in UIData.data["tabs"]: # Draw a little underscore below the active tab icon. - if aprops.tab == tab: - row_left.prop(aprops, "active_tab", text="", icon="BLANK1") + if aprops.tab == tab[0]: + row.prop(aprops, "active_tab", text="", icon="BLANK1") else: - row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) - row_left.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) # space for Switch - col_right = split.column(align=True) - row_right = col_right.row(align=True) - row_right.alignment = "RIGHT" + row.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) + row.prop(aprops, "inactive_tab", text="", icon="BLANK1", emboss=False) # space for Switch - if addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization: - row_right.operator("bim.manage_tab_visibility", icon="PREFERENCES", text="") - - row = self.layout.row(align=True) + row = self.layout.row() row.prop(aprops, "tab", text="") - if addon_prefs.save_metadata_blend_file and addon_prefs.user_ui_customization: - for tab in UIData.data["tabs"]: - if aprops.tab == tab: - row.operator("bim.manage_tab_panels", text="", icon="PREFERENCES").tab_name = tab - if bonsai.REINSTALLED_BBIM_VERSION: box = self.layout.box() box.alert = True diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 2f6190c448..24cd5071fa 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -167,12 +167,12 @@ class Blender(bonsai.core.tool.Blender): return True if (is_bookmark_tab := aprops.tab == "BOOKMARK") or aprops.tab == tab: bprops = tool.Blender.get_bim_props() - if not (panel_visibility := bprops.panel_properties.get(panel)): + if not (panel_visibility := bprops.panel_visibilities.get(panel)): return not is_bookmark_tab if is_bookmark_tab: - if panel_visibility.is_bookmarked and panel_visibility.is_visible_in_bookmarks: + if panel_visibility.is_bookmarked: return True - elif panel_visibility.is_visible_in_tab: + elif panel_visibility.is_visible: return True @classmethod From 8060c790ed2018e02b1b99eb1f1d5348cb2d56f0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 15 Jan 2026 22:00:51 +1100 Subject: [PATCH 501/657] Black --- src/bonsai/bonsai/bim/module/geometry/operator.py | 8 ++++---- src/bonsai/bonsai/bim/module/model/wall.py | 12 +++++++----- src/bonsai/bonsai/bim/module/spatial/operator.py | 14 +++++++------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 4927c9cfab..a35a4de7bc 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1723,11 +1723,11 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): container=container, element_obj=obj, ) - + # Get the container's collection for moving parts in the outliner container_obj = tool.Ifc.get_object(container) container_collection = container_obj.BIMObjectProperties.collection if container_obj else None - + # Move all parts to the container's collection in the outliner if container_collection: for part in ifcopenshell.util.element.get_parts(element): @@ -1736,11 +1736,11 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): # Remove from all previous collections for col in part_obj.users_collection[:]: col.objects.unlink(part_obj) - + # Link to container collection if part_obj.name not in container_collection.objects: container_collection.objects.link(part_obj) - + # Recursively handle nested parts for nested_part in ifcopenshell.util.element.get_parts(part): nested_part_obj = tool.Ifc.get_object(nested_part) diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index 0d0b88339e..d652041125 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -575,20 +575,22 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): rotation_axis.normalize() dot_product = expected_new_world_direction.dot(current_world_direction) angle = acos(min(max(dot_product, -1), 1)) - + # Rotate around object's own origin # Decompose the matrix to get translation, rotation, scale translation, rotation, scale = obj.matrix_world.decompose() - + # Create rotation matrix and convert to quaternion rotation_matrix = Matrix.Rotation(angle, 4, rotation_axis) rotation_quat = rotation_matrix.to_quaternion() - + # Apply rotation to existing rotation (quaternion multiplication) new_rotation = rotation_quat @ rotation - + # Reconstruct matrix_world with same translation, new rotation, same scale - obj.matrix_world = Matrix.Translation(translation) @ new_rotation.to_matrix().to_4x4() @ Matrix.Scale(1, 4) + obj.matrix_world = ( + Matrix.Translation(translation) @ new_rotation.to_matrix().to_4x4() @ Matrix.Scale(1, 4) + ) bpy.context.view_layer.update() bonsai.core.geometry.switch_representation( diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index 67189666e6..075c3a9a38 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -183,7 +183,7 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): root = aggregate current = aggregate return root - + def get_all_parts_recursive(element): """Recursively get all parts of an aggregate""" parts = [] @@ -196,17 +196,17 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): objs: list[bpy.types.Object] = [] processed_elements = set() # Track elements we've already handled (by IFC ID) promoted_parts = 0 # Count how many parts were promoted to their root aggregate - + for obj in tool.Blender.get_selected_objects(): if not (element := tool.Ifc.get_entity(obj)): continue - + # Check if element is part of an aggregate (at any level) if root_aggregate := get_root_aggregate(element): # Skip if we've already processed this root aggregate if root_aggregate.id() in processed_elements: continue - + # Get the root aggregate object and add it instead if root_aggregate_obj := tool.Ifc.get_object(root_aggregate): objs.append(root_aggregate_obj) @@ -225,13 +225,13 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): for element_obj in objs: element = tool.Ifc.get_entity(element_obj) - + # Only assign container to the ROOT aggregate (this updates IFC relationships) if self.remove_from_other_containers: for col in element_obj.users_collection[:]: col.objects.unlink(element_obj) core.assign_container(tool.Ifc, tool.Collector, tool.Spatial, container=container, element_obj=element_obj) - + # For parts, only move them in Blender collections (don't change IFC relationships) if container_collection: all_parts = get_all_parts_recursive(element) @@ -240,7 +240,7 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): # Always remove from ALL previous collections when moving to new container for col in part_obj.users_collection[:]: col.objects.unlink(part_obj) - + # Link to new container collection (Blender-only, no IFC change) if part_obj.name not in container_collection.objects: container_collection.objects.link(part_obj) From d79524b087fb7e4099584f4cbebe3e8e8eb46457 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Thu, 15 Jan 2026 14:21:39 -0600 Subject: [PATCH 502/657] fix #7559: DirectionSense works again. --- src/bonsai/bonsai/bim/module/model/slab.py | 88 +++++----------- src/bonsai/bonsai/tool/loader.py | 111 +++++++++++++++++---- 2 files changed, 117 insertions(+), 82 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index 2b2c3a2984..f5765331b6 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -225,16 +225,17 @@ class DumbSlabPlaner: for inverse in tool.Ifc.get().get_inverse(layer_set): if not inverse.is_a("IfcMaterialLayerSetUsage") or inverse.LayerSetDirection != "AXIS3": continue + if tool.Ifc.get().schema == "IFC2X3": for rel in tool.Ifc.get().get_inverse(inverse): if not rel.is_a("IfcRelAssociatesMaterial"): continue for element in rel.RelatedObjects: - self.change_thickness(element, total_thickness) + self.change_thickness(element, total_thickness, preserve_offset=True) else: for rel in inverse.AssociatedTo: for element in rel.RelatedObjects: - self.change_thickness(element, total_thickness) + self.change_thickness(element, total_thickness, preserve_offset=True) def regenerate_from_type(self, usecase_path, ifc_file, settings): relating_type = settings["relating_type"] @@ -276,9 +277,10 @@ class DumbSlabPlaner: return self.change_thickness(element, total_thickness) - def change_thickness(self, element: ifcopenshell.entity_instance, thickness: float) -> None: + def change_thickness(self, element: ifcopenshell.entity_instance, thickness: float, preserve_offset: bool = False) -> None: if tool.Model.get_usage_type(element) != "LAYER3": return + layer_params = tool.Model.get_material_layer_parameters(element) ifc_file = tool.Ifc.get() body_context = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") @@ -297,86 +299,47 @@ class DumbSlabPlaner: extrusion = tool.Model.get_extrusion(representation) if extrusion: direction_ratios = Vector(extrusion.ExtrudedDirection.DirectionRatios) - + # Calculate the actual extrusion angle from vertical extrusion_angle = 0 if direction_ratios.length > 0: cos_angle = direction_ratios.normalized().dot(Vector((0, 0, 1))) extrusion_angle = acos(min(max(cos_angle, -1), 1)) - # FIX: Only apply 1/cos factor when there's actual extrusion slope + # Only apply 1/cos factor when there's actual extrusion slope if extrusion_angle > 1e-6: perpendicular_depth = thickness * abs(1 / cos(extrusion_angle)) - perpendicular_offset = layer_offset * abs(1 / cos(extrusion_angle)) / self.unit_scale + perpendicular_offset = layer_offset * abs(1 / cos(extrusion_angle)) else: perpendicular_depth = thickness - perpendicular_offset = layer_offset / self.unit_scale + perpendicular_offset = layer_offset - # Check if direction sense needs to be applied - # This should only happen if explicitly requested, not automatically - if layer_params.get("apply_direction_sense", False): - # Store current direction before potential change - old_direction = direction_ratios.copy() - - # Apply direction sense logic - existing_x_angle = extrusion_angle - if (abs(existing_x_angle) < (pi / 2) and direction_ratios.z > 0) or ( - abs(existing_x_angle) > (pi / 2) and direction_ratios.z < 0 - ): - if layer_params["direction_sense"] == "NEGATIVE": - direction_ratios *= -1 - elif (abs(existing_x_angle) > (pi / 2) and direction_ratios.z > 0) or ( - abs(existing_x_angle) < (pi / 2) and direction_ratios.z < 0 - ): - offset_direction = direction_ratios.copy() * -1 - if layer_params["direction_sense"] == "POSITIVE": - direction_ratios *= -1 - - # If direction changed, update extrusion with rotation compensation - if (direction_ratios.normalized() - old_direction.normalized()).length > 1e-6: - update_extrusion_direction(element, tuple(direction_ratios), obj) - # After updating direction, get the updated extrusion - extrusion = tool.Model.get_extrusion(representation) - - # Update depth extrusion.Depth = perpendicular_depth # Update position ifc_position = extrusion.Position + if direction_ratios.length > 0: offset_vector = direction_ratios.normalized() * perpendicular_offset position = offset_vector material = ifcopenshell.util.element.get_material(element) if material and material.is_a("IfcMaterialLayerSetUsage"): - material.OffsetFromReferenceLine = position.z + # Only set offset if not preserving it (preserves independent offsets per instance) + if not preserve_offset: + material.OffsetFromReferenceLine = position.z if ifc_position: ifc_position.Location.Coordinates = position else: tool.Model.add_extrusion_position(extrusion, position) - else: - props = tool.Model.get_model_props() - x_angle = 0 if tool.Cad.is_x(props.x_angle, 0, tolerance=0.001) else props.x_angle - new_rep = ifcopenshell.api.geometry.add_slab_representation( - tool.Ifc.get(), - context=body_context, - depth=thickness * self.unit_scale, - x_angle=x_angle, - ) - for inverse in tool.Ifc.get().get_inverse(representation): - ifcopenshell.util.element.replace_attribute(inverse, representation, new_rep) - bonsai.core.geometry.switch_representation( - tool.Ifc, - tool.Geometry, - obj=obj, - representation=new_rep, - ) - bonsai.core.geometry.remove_representation( - tool.Ifc, tool.Geometry, obj=obj, representation=representation - ) - return + bonsai.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj=obj, + representation=representation, + ) else: props = tool.Model.get_model_props() x_angle = 0 if tool.Cad.is_x(props.x_angle, 0, tolerance=0.001) else props.x_angle @@ -389,13 +352,12 @@ class DumbSlabPlaner: ifcopenshell.api.geometry.assign_representation( tool.Ifc.get(), product=element, representation=representation ) - - bonsai.core.geometry.switch_representation( - tool.Ifc, - tool.Geometry, - obj=obj, - representation=representation, - ) + bonsai.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj=obj, + representation=representation, + ) def update_extrusion_direction( element: ifcopenshell.entity_instance, new_direction_ratios: tuple, obj: bpy.types.Object = None diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index a15a3f8a29..529d06a27b 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -1021,7 +1021,7 @@ class Loader(bonsai.core.tool.Loader): elif material.is_a("IfcMaterialLayerSetUsage"): usage = material layer_set = material.ForLayerSet - offset = usage.OffsetFromReferenceLine * cls.unit_scale + offset = usage.OffsetFromReferenceLine sense_factor = 1 if usage.DirectionSense == "POSITIVE" else -1 elif material.is_a("IfcMaterialLayerSet"): usage = None @@ -1034,11 +1034,17 @@ class Loader(bonsai.core.tool.Loader): if len(layer_set.MaterialLayers) == 1: return mesh + # Get mesh bounds + if len(mesh.vertices) > 0: + z_coords = [v.co.z for v in mesh.vertices] + mesh_z_min = min(z_coords) + mesh_z_max = max(z_coords) + bm = bmesh.new() bm.from_mesh(mesh) prev_co = None - advance_direction = None # Will store direction to advance planes + advance_direction = None if not usage: sense_factor = 1 @@ -1046,9 +1052,7 @@ class Loader(bonsai.core.tool.Loader): co = Vector((0.0, 0.0, offset)) advance_direction = no elif usage.LayerSetDirection == "AXIS2": - co = Vector((0.0, offset, 0.0)) - - # Get LOCAL extrusion direction + # Get local extrusion direction local_extrusion = Vector([0.0, 0.0, 1.0]) if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): for item in ifcopenshell.util.representation.resolve_representation(body).Items: @@ -1060,17 +1064,58 @@ class Loader(bonsai.core.tool.Loader): # Thickness direction: perpendicular to extrusion and length thickness_dir = local_extrusion.cross(Vector([1.0, 0.0, 0.0])).normalized() - - # Ensure it points in POSITIVE Y (through wall thickness, not backwards) if thickness_dir.y < 0: thickness_dir = -thickness_dir no = thickness_dir + + # Find start point by projecting vertices onto thickness direction + if len(mesh.vertices) > 0: + projections = [Vector(v.co).dot(no) for v in mesh.vertices] + min_proj = min(projections) + max_proj = max(projections) + + centroid = sum((Vector(v.co) for v in mesh.vertices), Vector()) / len(mesh.vertices) + centroid_proj = centroid.dot(no) + + if sense_factor == 1: + start_proj = min_proj + else: + start_proj = max_proj + + offset_dist = start_proj - centroid_proj + co = centroid + no * offset_dist + + actual_mesh_height = max_proj - min_proj + else: + co = Vector((0.0, 0.0, 0.0)) + advance_direction = thickness_dir elif usage.LayerSetDirection == "AXIS3": - co = Vector((0.0, 0.0, offset)) - no = cls.get_extrusion_vector(element).normalized() + # AXIS3 layers go through slab thickness (local Z) no = Vector([0.0, 0.0, 1.0]) + + # Find start point by projecting vertices onto Z direction + if len(mesh.vertices) > 0: + projections = [Vector(v.co).dot(no) for v in mesh.vertices] + min_proj = min(projections) + max_proj = max(projections) + + centroid = sum((Vector(v.co) for v in mesh.vertices), Vector()) / len(mesh.vertices) + centroid_proj = centroid.dot(no) + + if sense_factor == 1: + start_proj = min_proj + else: + start_proj = max_proj + + offset = start_proj - centroid_proj + co = centroid + no * offset + + actual_mesh_height = max_proj - min_proj + else: + co = Vector((0.0, 0.0, 0.0)) + advance_direction = no elif usage.LayerSetDirection == "AXIS1": co = Vector((0.0, 0.0, offset)) @@ -1078,10 +1123,27 @@ class Loader(bonsai.core.tool.Loader): no = Vector([1.0, 0.0, 0.0]) advance_direction = no - no *= sense_factor - advance_direction *= sense_factor + # Apply DirectionSense + if usage and usage.LayerSetDirection == "AXIS2": + if sense_factor == -1: + advance_direction = -advance_direction + test_normal = -no + else: + test_normal = no + elif usage and usage.LayerSetDirection == "AXIS1": + no = no * sense_factor + advance_direction = advance_direction * sense_factor + test_normal = no + elif usage and usage.LayerSetDirection == "AXIS3": + if sense_factor == -1: + advance_direction = -advance_direction + test_normal = -no + else: + test_normal = no + else: + test_normal = no - # Cache this + # Cache material styles body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") styles = {} has_layer_styles = False @@ -1089,12 +1151,23 @@ class Loader(bonsai.core.tool.Loader): if style := tool.Ifc.get_entity(material): styles[style] = i + layer_list = list(enumerate(layer_set.MaterialLayers)) + + # Calculate scale factor + total_layer_thickness = sum(layer.LayerThickness for _, layer in layer_list) + + if 'actual_mesh_height' not in locals(): + actual_mesh_height = mesh_z_max - mesh_z_min if len(mesh.vertices) > 0 else total_layer_thickness + + thickness_scale = actual_mesh_height / total_layer_thickness if total_layer_thickness > 0 else 1.0 + last_i = len(layer_set.MaterialLayers) - 1 - for i, layer in enumerate(layer_set.MaterialLayers): - if i != last_i: + + for idx, (original_i, layer) in enumerate(layer_list): + if idx != last_i: prev_co = co.copy() - # Use advance_direction (not no) to move planes! - co += advance_direction * layer.LayerThickness * cls.unit_scale + advance_vector = advance_direction * layer.LayerThickness * thickness_scale + co += advance_vector bisect_geom = bmesh.ops.bisect_plane( bm, geom=bm.verts[:] + bm.edges[:] + bm.faces[:], dist=0.0001, plane_co=co, plane_no=no @@ -1107,18 +1180,18 @@ class Loader(bonsai.core.tool.Loader): material_index = len(mesh.materials) mesh.materials.append(tool.Ifc.get_object(style)) - if i == last_i: + if idx == last_i: for face in bisect_geom["geom"]: if isinstance(face, bmesh.types.BMFace): center = face.calc_center_median() - if (center - co).dot(no) >= 0: + if (center - co).dot(test_normal) >= 0: face.material_index = material_index has_layer_styles = True else: for face in bisect_geom["geom"]: if isinstance(face, bmesh.types.BMFace): center = face.calc_center_median() - if (center - co).dot(no) < 0 and (center - prev_co).dot(no) >= 0: + if (center - co).dot(test_normal) < 0 and (center - prev_co).dot(test_normal) >= 0: face.material_index = material_index has_layer_styles = True From 242f1aab35ad11b5d04afa927e01307e8eaeaef9 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 16 Jan 2026 10:26:23 +1100 Subject: [PATCH 503/657] Fix #7563. Regression in normalising document URIs. --- src/bonsai/bonsai/bim/module/document/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/document/data.py b/src/bonsai/bonsai/bim/module/document/data.py index 7fc05ca3d1..b68c118e56 100644 --- a/src/bonsai/bonsai/bim/module/document/data.py +++ b/src/bonsai/bonsai/bim/module/document/data.py @@ -99,7 +99,7 @@ class ObjectDocumentData: return "" uri = location - if not uri.startswith("file://"): + if "://" not in uri: if not os.path.isabs(uri): uri = os.path.abspath(os.path.join(os.path.dirname(tool.Ifc.get_path()), uri)) uri = "file://" + uri From 233ad63bca01caafcfffa4fa3f381ad05505872a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 16 Jan 2026 20:11:43 +1100 Subject: [PATCH 504/657] Remove document menu for UI consistency Although it is a very cool trick, I feel this essentially duplicates the UI in two spots, and is an outlier in UX. I'd prefer for all IFC data and relationships to be in one location only (the panels). I think there are a better unified solutions (e.g. favourite bookmark panels) for quick access for things like this. --- .../bonsai/bim/module/document/__init__.py | 3 - src/bonsai/bonsai/bim/module/document/ui.py | 65 ------------------- 2 files changed, 68 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/document/__init__.py b/src/bonsai/bonsai/bim/module/document/__init__.py index cc71d16306..3881148a18 100644 --- a/src/bonsai/bonsai/bim/module/document/__init__.py +++ b/src/bonsai/bonsai/bim/module/document/__init__.py @@ -42,15 +42,12 @@ classes = ( ui.BIM_PT_object_documents, ui.BIM_UL_documents, ui.BIM_UL_document_objects, - ui.BIM_MT_object_documents_context_menu, ) def register(): bpy.types.Scene.BIMDocumentProperties = bpy.props.PointerProperty(type=prop.BIMDocumentProperties) - bpy.types.VIEW3D_MT_object_context_menu.append(ui.add_object_documents_context_menu) def unregister(): del bpy.types.Scene.BIMDocumentProperties - bpy.types.VIEW3D_MT_object_context_menu.remove(ui.add_object_documents_context_menu) diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index c382f1c721..7688399732 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -265,68 +265,3 @@ class BIM_UL_document_objects(UIList): op = row.operator("bim.unassign_document", text="", icon="X") op.document = document.ifc_definition_id op.obj = item.name - - -def add_object_documents_context_menu(self, context): - if not context.active_object: - return - - if not tool.Blender.get_ifc_definition_id(context.active_object): - return - - self.layout.separator() - self.layout.menu("BIM_MT_object_documents_context_menu", icon="FILE") - - -class BIM_MT_object_documents_context_menu(bpy.types.Menu): - bl_idname = "BIM_MT_object_documents_context_menu" - bl_label = "Documents" - - def draw(self, context): - layout = self.layout - - if not context.selected_objects: - layout.label(text="No documents", icon="INFO") - return - - if len(context.selected_objects) > 1: - layout.label(text="Select a single object to see its referenced documents", icon="INFO") - return - - obj = context.active_object - if not obj or not tool.Blender.get_ifc_definition_id(obj): - layout.label(text="No documents", icon="INFO") - return - - if not ObjectDocumentData.is_loaded: - ObjectDocumentData.load() - - if not ObjectDocumentData.data["documents"]: - layout.label(text="No Documents", icon="FILE") - else: - for document in ObjectDocumentData.data["documents"]: - row = layout.row(align=True) - - with_ifc_icon = document["location"] and document["location"].lower().endswith(".ifc") - with_url_icon = bool(document["location"]) - - if with_ifc_icon: - row.operator("bim.open_ifc_document", icon="HIDE_OFF", text="").uri = document["location"] - else: - row.label(text="", icon="BLANK1") - - if with_url_icon: - row.operator("bim.open_uri", icon="URL", text="").uri = document["location"] - else: - row.label(text="", icon="BLANK1") - - doc_entity = None - if "id" in document: - doc_entity = tool.Ifc.get().by_id(document["id"]) - - if doc_entity and doc_entity.is_a("IfcDocumentReference"): - display_text = document.get("description") or "" - else: - display_text = document.get("name") or "" - - row.label(text=f"{document['identification'] or ''}: {display_text}") From dfc91e663951d23695ee73a2a42a2532c7289293 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 16 Jan 2026 16:55:56 +0500 Subject: [PATCH 505/657] ifcopenshell-python - clean up unused imports --- src/ifcopenshell-python/ifcopenshell/__init__.py | 1 + .../ifcopenshell/api/alignment/__init__.py | 1 + .../ifcopenshell/api/alignment/_add_segment_to_curve.py | 1 - .../ifcopenshell/api/alignment/_add_segment_to_layout.py | 1 - .../api/alignment/_add_zero_length_segment.py | 1 - .../api/alignment/_create_geometric_representation.py | 2 -- .../api/alignment/_create_offset_curve_representation.py | 1 - .../api/alignment/_create_polyline_representation.py | 1 - .../ifcopenshell/api/alignment/_get_cant_segment.py | 4 ---- .../api/alignment/_get_segment_start_point_label.py | 2 -- .../api/alignment/_map_alignment_cant_segment.py | 1 - .../api/alignment/_map_alignment_horizontal_segment.py | 1 - .../api/alignment/_map_alignment_vertical_segment.py | 2 +- .../alignment/_update_curve_segment_transition_code.py | 7 +------ .../ifcopenshell/api/alignment/add_stationing_referent.py | 1 - .../ifcopenshell/api/alignment/add_vertical_layout.py | 1 - .../ifcopenshell/api/alignment/create_as_offset_curve.py | 3 --- .../ifcopenshell/api/alignment/create_by_pi_method.py | 2 -- .../ifcopenshell/api/alignment/create_from_csv.py | 3 --- .../ifcopenshell/api/alignment/create_layout_segment.py | 1 - .../api/alignment/get_alignment_layout_nest.py | 1 - .../ifcopenshell/api/alignment/get_alignment_layouts.py | 3 --- .../api/alignment/get_alignment_segment_nest.py | 1 - .../ifcopenshell/api/alignment/get_basis_curve.py | 2 -- .../ifcopenshell/api/alignment/get_child_alignments.py | 3 --- .../ifcopenshell/api/alignment/get_curve.py | 2 -- .../api/alignment/get_curve_segment_transition_code.py | 3 --- .../ifcopenshell/api/alignment/get_layout_curve.py | 1 - .../ifcopenshell/api/alignment/get_layout_segments.py | 3 --- .../ifcopenshell/api/alignment/get_mapped_segments.py | 1 - .../ifcopenshell/api/alignment/get_parent_alignment.py | 3 --- .../ifcopenshell/api/alignment/has_zero_length_segment.py | 3 --- .../alignment/layout_horizontal_alignment_by_pi_method.py | 1 - .../ifcopenshell/api/alignment/name_segments.py | 1 - .../ifcopenshell/api/alignment/util.py | 6 ------ .../ifcopenshell/api/attribute/edit_attributes.py | 1 - .../ifcopenshell/api/classification/add_classification.py | 2 +- .../ifcopenshell/api/cogo/assign_survey_point.py | 2 -- .../ifcopenshell/api/cogo/edit_survey_point.py | 2 -- .../api/cost/calculate_cost_item_resource_value.py | 1 - .../ifcopenshell/api/cost/edit_cost_value_formula.py | 2 -- .../ifcopenshell/api/geometry/add_representation.py | 2 +- .../ifcopenshell/api/geometry/add_slab_representation.py | 2 +- .../ifcopenshell/api/geometry/add_wall_representation.py | 2 +- .../ifcopenshell/api/geometry/assign_representation.py | 1 - .../ifcopenshell/api/geometry/disconnect_path.py | 1 - .../ifcopenshell/api/grid/create_grid_axis.py | 2 +- .../ifcopenshell/api/layer/add_layer.py | 1 - .../ifcopenshell/api/layer/unassign_layer.py | 1 - .../ifcopenshell/api/library/add_library.py | 2 -- .../ifcopenshell/api/material/assign_profile.py | 1 - .../ifcopenshell/api/material/unassign_material.py | 1 - .../ifcopenshell/api/owner/add_application.py | 2 +- .../ifcopenshell/api/owner/update_owner_history.py | 1 - .../ifcopenshell/api/pset/assign_pset.py | 1 - .../ifcopenshell/api/pset/unassign_pset.py | 2 -- .../ifcopenshell/api/pset/unshare_pset.py | 2 -- .../ifcopenshell/api/resource/calculate_resource_usage.py | 2 -- .../ifcopenshell/api/resource/calculate_resource_work.py | 2 -- .../ifcopenshell/api/root/copy_class.py | 2 -- .../ifcopenshell/api/root/create_entity.py | 2 +- .../ifcopenshell/api/root/reassign_class.py | 1 - .../ifcopenshell/api/sequence/add_time_period.py | 2 +- .../ifcopenshell/api/sequence/create_baseline.py | 2 -- .../api/structural/assign_structural_analysis_model.py | 2 -- .../api/structural/remove_structural_load_case.py | 1 - .../api/structural/remove_structural_load_group.py | 1 - .../api/structural/unassign_structural_analysis_model.py | 2 -- .../ifcopenshell/api/style/add_surface_textures.py | 1 - .../ifcopenshell/api/system/assign_port.py | 1 - .../ifcopenshell/api/system/disconnect_port.py | 1 - .../ifcopenshell/api/system/unassign_system.py | 1 - .../ifcopenshell/api/type/map_type_representations.py | 1 - .../ifcopenshell/api/unit/add_derived_unit.py | 1 - src/ifcopenshell-python/ifcopenshell/draw.py | 1 - src/ifcopenshell-python/ifcopenshell/geom/__init__.py | 4 ++-- src/ifcopenshell-python/ifcopenshell/geom/app.py | 5 +---- .../ifcopenshell/geom/code_editor_pane.py | 8 ++------ src/ifcopenshell-python/ifcopenshell/geom/main.py | 3 --- src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py | 2 +- src/ifcopenshell-python/ifcopenshell/util/doc.py | 2 +- .../ifcopenshell/util/generate_pset_templates.py | 1 - src/ifcopenshell-python/ifcopenshell/util/selector.py | 2 -- .../ifcopenshell/util/shape_builder.py | 2 -- src/ifcopenshell-python/ifcopenshell/util/unit.py | 1 - src/ifcopenshell-python/pyproject.toml | 3 +++ .../test/api/alignment/test_add_segment_to_layout.py | 1 - .../api/alignment/test_add_stationing_to_alignment.py | 1 - .../test/api/alignment/test_add_vertical_alignment.py | 1 - src/ifcopenshell-python/test/api/alignment/test_create.py | 1 - .../test/api/alignment/test_create_as_offset_curve.py | 1 - .../test/api/alignment/test_create_as_polyline.py | 1 - .../test/api/alignment/test_create_by_pi_method.py | 1 - .../test/api/alignment/test_create_layout_segment.py | 1 - .../test/api/alignment/test_create_no_geometry.py | 2 -- .../test/api/alignment/test_get_alignment.py | 1 - .../test/api/alignment/test_get_basis_curve.py | 1 - .../api/alignment/test_horizontal_layout_by_pi_method.py | 1 - .../test/api/alignment/test_map_alignment_cant_segment.py | 1 - .../test/api/alignment/test_name_segments.py | 1 - .../test/api/alignment/test_referent_names.py | 1 - .../test_update_curve_segment_transition_code.py | 1 - .../api/alignment/test_vertical_layout_by_pi_method.py | 1 - .../test/api/cogo/test_add_survey_point.py | 1 - .../test/api/cogo/test_assign_survey_point.py | 1 - src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py | 1 - .../test/api/cogo/test_edit_survey_point.py | 1 - .../test/api/cost/test_remove_cost_schedule.py | 1 - .../test/api/geometry/test_assign_representation.py | 1 - .../test/api/geometry/test_unassign_representation.py | 1 - src/ifcopenshell-python/test/api/group/test_add_group.py | 1 - .../test/api/material/test_edit_profile_usage.py | 1 - .../test/api/nest/test_assign_object.py | 1 - .../test/api/project/test_append_asset.py | 1 - src/ifcopenshell-python/test/api/pset/test_assign_pset.py | 1 - .../test/api/pset/test_unassign_pset.py | 1 - .../test/api/pset/test_unshare_pset.py | 1 - .../test/api/resource/test_calculate_resource_work.py | 1 - src/ifcopenshell-python/test/api/root/test_copy_class.py | 1 - .../test/api/sequence/test_remove_task.py | 2 -- .../test/api/sequence/test_remove_work_calendar.py | 2 -- .../test/api/sequence/test_remove_work_plan.py | 1 - .../test/api/sequence/test_remove_work_schedule.py | 1 - .../test/api/sequence/test_remove_work_time.py | 2 -- .../test/api/spatial/test_unassign_container.py | 1 - .../test/api/style/test_add_surface_textures.py | 1 - .../test/api/style/test_assign_material_style.py | 1 - .../test/api/style/test_assign_representation_styles.py | 1 - .../test/api/style/test_remove_style.py | 1 - .../test/api/style/test_remove_surface_style.py | 1 - .../test/api/style/test_unassign_material_style.py | 1 - .../test/api/style/test_unassign_representation_styles.py | 1 - .../test/api/system/test_connect_port.py | 1 - .../test/api/system/test_disconnect_port.py | 1 - .../test/api/system/test_unassign_system.py | 1 - src/ifcopenshell-python/test/api/test_api.py | 3 --- src/ifcopenshell-python/test/geom/geometry_tests.py | 1 - src/ifcopenshell-python/test/geom/polyhedral_shapes.py | 1 - src/ifcopenshell-python/test/geom/stats.py | 1 - src/ifcopenshell-python/test/test_entity_instance.py | 4 ---- src/ifcopenshell-python/test/test_file.py | 2 -- src/ifcopenshell-python/test/test_file_inverse.py | 7 ------- src/ifcopenshell-python/test/test_sql.py | 1 - src/ifcopenshell-python/test/test_stream.py | 2 -- src/ifcopenshell-python/test/test_validate_rocksdb.py | 1 - src/ifcopenshell-python/test/test_wall_opening.py | 1 - .../test/util/scripts/test_validate_stub.py | 1 - src/ifcopenshell-python/test/util/test_attribute.py | 1 - src/ifcopenshell-python/test/util/test_brick.py | 1 - src/ifcopenshell-python/test/util/test_date.py | 2 -- src/ifcopenshell-python/test/util/test_file.py | 1 - src/ifcopenshell-python/test/util/test_placement.py | 1 - src/ifcopenshell-python/test/util/test_pset.py | 1 - src/ifcopenshell-python/test/util/test_selector.py | 2 -- src/ifcopenshell-python/test/util/test_shape_builder.py | 2 -- src/ifcopenshell-python/test/util/test_type.py | 2 -- 156 files changed, 22 insertions(+), 233 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/__init__.py b/src/ifcopenshell-python/ifcopenshell/__init__.py index 9d472d3b1d..fb38426aff 100644 --- a/src/ifcopenshell-python/ifcopenshell/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/__init__.py @@ -102,6 +102,7 @@ __all__ = [ "file", "guid", "ifcopenshell_wrapper", + "rocksdb_lazy_instance", "sqlite", "sqlite_entity", "stream", diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/__init__.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/__init__.py index 790125cb0b..2662015313 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/__init__.py @@ -125,4 +125,5 @@ __all__ = [ "name_segments", "register_referent_name_callback", "update_fallback_position", + "get_mapped_segments", ] diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_curve.py index 934e456b57..e24a946ae7 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_curve.py @@ -19,7 +19,6 @@ import numpy as np import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.alignment import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_layout.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_layout.py index 999bf2f80f..70914a3353 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_layout.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_segment_to_layout.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import math -from collections.abc import Sequence import numpy as np diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_zero_length_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_zero_length_segment.py index 00ac9d6000..71da0d3938 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_zero_length_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_add_zero_length_segment.py @@ -18,7 +18,6 @@ import ifcopenshell import ifcopenshell.api.alignment -import ifcopenshell.util import ifcopenshell.util.alignment from ifcopenshell import entity_instance from ifcopenshell.api.alignment._get_segment_start_point_label import ( diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_geometric_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_geometric_representation.py index 30b91bb0a0..933ee3a470 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_geometric_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_geometric_representation.py @@ -16,8 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math -from collections.abc import Sequence import ifcopenshell import ifcopenshell.api.alignment diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py index 31f0c583aa..6850013c96 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math from collections.abc import Sequence import ifcopenshell diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_polyline_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_polyline_representation.py index c745e6b9ac..4d31917fae 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_polyline_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_polyline_representation.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math from collections.abc import Sequence import ifcopenshell diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_cant_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_cant_segment.py index 27a781c505..2abd74c189 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_cant_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_cant_segment.py @@ -16,12 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math -from collections.abc import Sequence -import ifcopenshell import ifcopenshell.api.alignment -import ifcopenshell.api.geometry from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_segment_start_point_label.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_segment_start_point_label.py index 34b30b9f59..6e5453489b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_segment_start_point_label.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_get_segment_start_point_label.py @@ -16,9 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from collections.abc import Sequence -import ifcopenshell from ifcopenshell import entity_instance _horizontal_callback = None diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_cant_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_cant_segment.py index e5b9ea0381..d7ae7526b4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_cant_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_cant_segment.py @@ -21,7 +21,6 @@ from collections.abc import Sequence import ifcopenshell from ifcopenshell import entity_instance -from ifcopenshell.api.alignment import get_axis_subcontext def _get_axis(file: ifcopenshell.file, Ds: float, rail_head_distance: float) -> entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_horizontal_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_horizontal_segment.py index 17de77a7ad..0ab7d7334b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_horizontal_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_horizontal_segment.py @@ -21,7 +21,6 @@ from collections.abc import Sequence import ifcopenshell import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper -import ifcopenshell.util import ifcopenshell.util.unit from ifcopenshell import entity_instance from ifcopenshell.api.alignment._get_cant_segment import _get_cant_segment diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_vertical_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_vertical_segment.py index e47a50d5ce..707cf0cba1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_vertical_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_map_alignment_vertical_segment.py @@ -20,7 +20,7 @@ import math from collections.abc import Sequence import ifcopenshell -from ifcopenshell import entity_instance, ifcopenshell_wrapper +from ifcopenshell import entity_instance def _polynomial_length(A: float, B: float, C: float, L: float) -> float: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_update_curve_segment_transition_code.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_update_curve_segment_transition_code.py index 5e1c2d0123..367bf2e2fd 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_update_curve_segment_transition_code.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_update_curve_segment_transition_code.py @@ -16,14 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math -import numpy as np - -import ifcopenshell import ifcopenshell.api.alignment -import ifcopenshell.geom -from ifcopenshell import entity_instance, ifcopenshell_wrapper +from ifcopenshell import entity_instance def _update_curve_segment_transition_code(prev_segment: entity_instance, segment: entity_instance) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_stationing_referent.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_stationing_referent.py index bccc7b0213..2d70ace789 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_stationing_referent.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_stationing_referent.py @@ -20,7 +20,6 @@ import numpy as np import ifcopenshell import ifcopenshell.api.alignment -import ifcopenshell.api.nest import ifcopenshell.api.pset import ifcopenshell.geom import ifcopenshell.guid diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_vertical_layout.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_vertical_layout.py index 41daef657c..09feb78a40 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/add_vertical_layout.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/add_vertical_layout.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.alignment import ifcopenshell.api.geometry diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py index f4bc35773a..b24fb16b29 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py @@ -20,9 +20,6 @@ from collections.abc import Sequence import ifcopenshell import ifcopenshell.api.aggregate -import ifcopenshell.api.alignment -import ifcopenshell.api.nest -import ifcopenshell.util.alignment from ifcopenshell import entity_instance from ifcopenshell.api.alignment._create_offset_curve_representation import ( _create_offset_curve_representation, diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_by_pi_method.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_by_pi_method.py index 09a0f0ecb6..e6ceba0572 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_by_pi_method.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_by_pi_method.py @@ -19,9 +19,7 @@ from collections.abc import Sequence import ifcopenshell -import ifcopenshell.api.aggregate import ifcopenshell.api.alignment -import ifcopenshell.api.nest from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_from_csv.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_from_csv.py index ce7192611c..3bd8ed275d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_from_csv.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_from_csv.py @@ -17,13 +17,10 @@ # along with IfcOpenShell. If not, see . import csv -from collections.abc import Sequence import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.alignment from ifcopenshell import entity_instance -from ifcopenshell.api.alignment import get_axis_subcontext def create_from_csv(file: ifcopenshell.file, filepath: str) -> entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_layout_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_layout_segment.py index 6fd6876e08..52f329694b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_layout_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_layout_segment.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math from typing import Union import numpy as np diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layout_nest.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layout_nest.py index b870fd1692..2a6287f6eb 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layout_nest.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layout_nest.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layouts.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layouts.py index 4b4a1a17d3..5e05cf1fe4 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layouts.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_layouts.py @@ -18,9 +18,6 @@ from collections.abc import Sequence -import ifcopenshell -import ifcopenshell.util -import ifcopenshell.util.representation from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_segment_nest.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_segment_nest.py index fba39617ea..4fc732ed0c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_segment_nest.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_alignment_segment_nest.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_basis_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_basis_curve.py index 0bf28746fe..7057640e02 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_basis_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_basis_curve.py @@ -16,8 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.util import ifcopenshell.util.representation from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_child_alignments.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_child_alignments.py index ccc8f01214..db3a74b35b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_child_alignments.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_child_alignments.py @@ -18,9 +18,6 @@ from collections.abc import Sequence -import ifcopenshell -import ifcopenshell.util -import ifcopenshell.util.element from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve.py index 6b1a7172d9..1bf320db60 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve.py @@ -16,8 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.util import ifcopenshell.util.representation from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve_segment_transition_code.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve_segment_transition_code.py index 6711935e6f..7fe4d30513 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve_segment_transition_code.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_curve_segment_transition_code.py @@ -16,12 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math import numpy as np -import ifcopenshell -import ifcopenshell.api import ifcopenshell.geom from ifcopenshell import entity_instance, ifcopenshell_wrapper diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_curve.py index 0b5a70b127..4b26754ee8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_curve.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import ifcopenshell.api.alignment from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_segments.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_segments.py index 34cfd90a1d..758693081b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_segments.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_layout_segments.py @@ -18,9 +18,6 @@ from collections.abc import Sequence -import ifcopenshell -import ifcopenshell.util -import ifcopenshell.util.element from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_mapped_segments.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_mapped_segments.py index 2e10aa9824..0b8a3b65b3 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_mapped_segments.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_mapped_segments.py @@ -18,7 +18,6 @@ from collections.abc import Sequence -import ifcopenshell import ifcopenshell.api.alignment from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_parent_alignment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_parent_alignment.py index 333bfc01e5..d99d832fd2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/get_parent_alignment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/get_parent_alignment.py @@ -16,9 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.util -import ifcopenshell.util.representation from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/has_zero_length_segment.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/has_zero_length_segment.py index 036e4de59a..7daa9f23f1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/has_zero_length_segment.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/has_zero_length_segment.py @@ -16,9 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell -import ifcopenshell.api.alignment -import ifcopenshell.util.element from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_horizontal_alignment_by_pi_method.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_horizontal_alignment_by_pi_method.py index ed157c3c90..676e03e429 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_horizontal_alignment_by_pi_method.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/layout_horizontal_alignment_by_pi_method.py @@ -21,7 +21,6 @@ from collections.abc import Sequence import ifcopenshell import ifcopenshell.api.alignment -import ifcopenshell.util import ifcopenshell.util.unit from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/name_segments.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/name_segments.py index 6036332088..e010119b1a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/name_segments.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/name_segments.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/util.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/util.py index 144311a3df..c36e635768 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/util.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/util.py @@ -16,17 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math import numpy as np import ifcopenshell -import ifcopenshell.api.alignment import ifcopenshell.geom -import ifcopenshell.guid -import ifcopenshell.template -import ifcopenshell.util -import ifcopenshell.util.alignment from ifcopenshell import entity_instance, ifcopenshell_wrapper diff --git a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py index 2e679fd409..1f46e70921 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py +++ b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import sys from types import EllipsisType from typing import Any, Union diff --git a/src/ifcopenshell-python/ifcopenshell/api/classification/add_classification.py b/src/ifcopenshell-python/ifcopenshell/api/classification/add_classification.py index 6642e618b4..50cff83194 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/classification/add_classification.py +++ b/src/ifcopenshell-python/ifcopenshell/api/classification/add_classification.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any, Union +from typing import Union import ifcopenshell import ifcopenshell.guid diff --git a/src/ifcopenshell-python/ifcopenshell/api/cogo/assign_survey_point.py b/src/ifcopenshell-python/ifcopenshell/api/cogo/assign_survey_point.py index be9e650ac7..5117998c6f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cogo/assign_survey_point.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cogo/assign_survey_point.py @@ -16,9 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import typing -import ifcopenshell from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/cogo/edit_survey_point.py b/src/ifcopenshell-python/ifcopenshell/api/cogo/edit_survey_point.py index 3c7d478441..1ee499e026 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cogo/edit_survey_point.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cogo/edit_survey_point.py @@ -16,9 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import typing -import ifcopenshell from ifcopenshell import entity_instance diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/calculate_cost_item_resource_value.py b/src/ifcopenshell-python/ifcopenshell/api/cost/calculate_cost_item_resource_value.py index fc53e2ff3d..e37b597b3d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/calculate_cost_item_resource_value.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/calculate_cost_item_resource_value.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell.api.cost -import ifcopenshell.util.date import ifcopenshell.util.resource diff --git a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value_formula.py b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value_formula.py index 213940904d..1fd46a41c3 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value_formula.py +++ b/src/ifcopenshell-python/ifcopenshell/api/cost/edit_cost_value_formula.py @@ -21,8 +21,6 @@ from typing import Any import ifcopenshell import ifcopenshell.api.cost import ifcopenshell.util.cost -import ifcopenshell.util.element -import ifcopenshell.util.unit def edit_cost_value_formula(file: ifcopenshell.file, cost_value: ifcopenshell.entity_instance, formula: str) -> None: diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py index d77655a60c..0a1adb1ec1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py @@ -28,7 +28,7 @@ from mathutils import Matrix, Vector import ifcopenshell.util.shape_builder import ifcopenshell.util.unit -from ifcopenshell.util.shape_builder import VectorType, ifc_safe_vector_type +from ifcopenshell.util.shape_builder import ifc_safe_vector_type if TYPE_CHECKING: import bonsai.tool as tool diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py index d3a6daaad6..b5029dc934 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py @@ -17,7 +17,7 @@ # along with IfcOpenShell. If not, see . from math import cos, sin -from typing import Any, Optional, Union +from typing import Optional, Union import ifcopenshell.util.element import ifcopenshell.util.unit diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py index 12a033429d..69f9a82fa7 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from math import cos, pi, sin +from math import cos, sin from typing import Any, Optional, Union import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/assign_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/assign_representation.py index 158f0152ac..a1e03ece8b 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/assign_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/assign_representation.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any import ifcopenshell.api.geometry import ifcopenshell.api.owner diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/disconnect_path.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/disconnect_path.py index 6e04a9df73..625bfd329c 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/disconnect_path.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/disconnect_path.py @@ -19,7 +19,6 @@ from typing import Optional import ifcopenshell -import ifcopenshell.api import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/grid/create_grid_axis.py b/src/ifcopenshell-python/ifcopenshell/api/grid/create_grid_axis.py index 7500ab1f55..da01050d92 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/grid/create_grid_axis.py +++ b/src/ifcopenshell-python/ifcopenshell/api/grid/create_grid_axis.py @@ -15,7 +15,7 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Literal, Optional +from typing import Literal import ifcopenshell diff --git a/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer.py b/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer.py index cd61465326..a249106848 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer.py +++ b/src/ifcopenshell-python/ifcopenshell/api/layer/add_layer.py @@ -15,7 +15,6 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Optional import ifcopenshell diff --git a/src/ifcopenshell-python/ifcopenshell/api/layer/unassign_layer.py b/src/ifcopenshell-python/ifcopenshell/api/layer/unassign_layer.py index 3eb0ed8fa1..1fc6b9762d 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/layer/unassign_layer.py +++ b/src/ifcopenshell-python/ifcopenshell/api/layer/unassign_layer.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.util.element def unassign_layer( diff --git a/src/ifcopenshell-python/ifcopenshell/api/library/add_library.py b/src/ifcopenshell-python/ifcopenshell/api/library/add_library.py index debdded93a..7b144adb37 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/library/add_library.py +++ b/src/ifcopenshell-python/ifcopenshell/api/library/add_library.py @@ -17,8 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.util.date -import ifcopenshell.util.schema def add_library(file: ifcopenshell.file, name: str) -> ifcopenshell.entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/assign_profile.py b/src/ifcopenshell-python/ifcopenshell/api/material/assign_profile.py index 23a5a216b8..4ed83c6a92 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/assign_profile.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/assign_profile.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any import ifcopenshell.util.representation diff --git a/src/ifcopenshell-python/ifcopenshell/api/material/unassign_material.py b/src/ifcopenshell-python/ifcopenshell/api/material/unassign_material.py index 00a39a4120..e7e2542d12 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/material/unassign_material.py +++ b/src/ifcopenshell-python/ifcopenshell/api/material/unassign_material.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any import ifcopenshell import ifcopenshell.api.owner diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py b/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py index 8387ecf871..e2869325d5 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any, Optional, Union +from typing import Optional, Union import ifcopenshell.api import ifcopenshell.api.owner diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py b/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py index 7df304778a..0c29c70018 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py @@ -20,7 +20,6 @@ import time from typing import Union import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.owner.settings import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/assign_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/assign_pset.py index eef7f6e8e9..908ffd9aad 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/assign_pset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/assign_pset.py @@ -21,7 +21,6 @@ from typing import Union import ifcopenshell import ifcopenshell.api.owner import ifcopenshell.guid -import ifcopenshell.util.element def assign_pset( diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/unassign_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/unassign_pset.py index 24256f77fe..e172f7fed1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/unassign_pset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/unassign_pset.py @@ -17,8 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api.owner -import ifcopenshell.guid import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/unshare_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/unshare_pset.py index 051905b2b7..d272f98495 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/unshare_pset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/unshare_pset.py @@ -17,9 +17,7 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api.owner import ifcopenshell.api.pset -import ifcopenshell.guid import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_usage.py b/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_usage.py index 24815d45e0..5c707fc5de 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_usage.py +++ b/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_usage.py @@ -16,12 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math import ifcopenshell.api import ifcopenshell.util.constraint import ifcopenshell.util.date -import ifcopenshell.util.element import ifcopenshell.util.resource diff --git a/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_work.py b/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_work.py index 0ec5f56fe4..fc597cce3a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_work.py +++ b/src/ifcopenshell-python/ifcopenshell/api/resource/calculate_resource_work.py @@ -18,8 +18,6 @@ import ifcopenshell.api.resource import ifcopenshell.util.constraint -import ifcopenshell.util.date -import ifcopenshell.util.element import ifcopenshell.util.resource diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py b/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py index 867f25f727..f8c0efb7bb 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/copy_class.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any import ifcopenshell import ifcopenshell.api.geometry @@ -25,7 +24,6 @@ import ifcopenshell.api.root import ifcopenshell.api.system import ifcopenshell.util.element import ifcopenshell.util.placement -import ifcopenshell.util.system def copy_class(file: ifcopenshell.file, product: ifcopenshell.entity_instance) -> ifcopenshell.entity_instance: diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/create_entity.py b/src/ifcopenshell-python/ifcopenshell/api/root/create_entity.py index 6afe5ec3a6..3179884d80 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/create_entity.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/create_entity.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any, Optional +from typing import Optional import ifcopenshell import ifcopenshell.api.owner diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py index c7971bc4f7..e8ed2b7173 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py @@ -24,7 +24,6 @@ import ifcopenshell.api.geometry import ifcopenshell.api.pset import ifcopenshell.api.spatial import ifcopenshell.api.type -import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.schema diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_time_period.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_time_period.py index 8a72d2044d..e10bc4ccb6 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/add_time_period.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/add_time_period.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from datetime import datetime, time, timedelta +from datetime import time from typing import Optional, Union import ifcopenshell.api diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/create_baseline.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/create_baseline.py index f70ead281f..5a53add448 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/sequence/create_baseline.py +++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/create_baseline.py @@ -23,9 +23,7 @@ import ifcopenshell.api.control import ifcopenshell.api.owner import ifcopenshell.api.sequence import ifcopenshell.guid -import ifcopenshell.util.element import ifcopenshell.util.sequence -import ifcopenshell.util.system def create_baseline( diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/assign_structural_analysis_model.py b/src/ifcopenshell-python/ifcopenshell/api/structural/assign_structural_analysis_model.py index e378b3d984..01254d7985 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/assign_structural_analysis_model.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/assign_structural_analysis_model.py @@ -20,8 +20,6 @@ from typing import Union import ifcopenshell import ifcopenshell.api.group -import ifcopenshell.api.owner -import ifcopenshell.guid def assign_structural_analysis_model( diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_load_case.py b/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_load_case.py index 401db40dbc..6b381f81a1 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_load_case.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_load_case.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_load_group.py b/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_load_group.py index 25acbbe9cc..26da2d157f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_load_group.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/remove_structural_load_group.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/structural/unassign_structural_analysis_model.py b/src/ifcopenshell-python/ifcopenshell/api/structural/unassign_structural_analysis_model.py index 2053e7d075..fcb3a2ead3 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/structural/unassign_structural_analysis_model.py +++ b/src/ifcopenshell-python/ifcopenshell/api/structural/unassign_structural_analysis_model.py @@ -18,8 +18,6 @@ import ifcopenshell import ifcopenshell.api.group -import ifcopenshell.api.owner -import ifcopenshell.util.element def unassign_structural_analysis_model( diff --git a/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_textures.py b/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_textures.py index a0765bbf8d..49e1381da2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_textures.py +++ b/src/ifcopenshell-python/ifcopenshell/api/style/add_surface_textures.py @@ -20,7 +20,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, Optional import ifcopenshell -import ifcopenshell.api if TYPE_CHECKING: import bpy diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/assign_port.py b/src/ifcopenshell-python/ifcopenshell/api/system/assign_port.py index 20e2ec26b8..5422695fe5 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/assign_port.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/assign_port.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any import ifcopenshell import ifcopenshell.api.geometry diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/disconnect_port.py b/src/ifcopenshell-python/ifcopenshell/api/system/disconnect_port.py index 8ffbfcf380..7ae790e753 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/disconnect_port.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/disconnect_port.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell -import ifcopenshell.api import ifcopenshell.util.element diff --git a/src/ifcopenshell-python/ifcopenshell/api/system/unassign_system.py b/src/ifcopenshell-python/ifcopenshell/api/system/unassign_system.py index 2921524094..725abc6fe3 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/system/unassign_system.py +++ b/src/ifcopenshell-python/ifcopenshell/api/system/unassign_system.py @@ -18,7 +18,6 @@ import ifcopenshell import ifcopenshell.api.group -import ifcopenshell.util.element def unassign_system( diff --git a/src/ifcopenshell-python/ifcopenshell/api/type/map_type_representations.py b/src/ifcopenshell-python/ifcopenshell/api/type/map_type_representations.py index 0c4c66ae16..5e2f7de989 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/type/map_type_representations.py +++ b/src/ifcopenshell-python/ifcopenshell/api/type/map_type_representations.py @@ -18,7 +18,6 @@ import ifcopenshell import ifcopenshell.api.geometry -import ifcopenshell.util.element def map_type_representations( diff --git a/src/ifcopenshell-python/ifcopenshell/api/unit/add_derived_unit.py b/src/ifcopenshell-python/ifcopenshell/api/unit/add_derived_unit.py index 5cd167e66d..2c308b42d9 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/unit/add_derived_unit.py +++ b/src/ifcopenshell-python/ifcopenshell/api/unit/add_derived_unit.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -from typing import Any, Optional import ifcopenshell.util.unit diff --git a/src/ifcopenshell-python/ifcopenshell/draw.py b/src/ifcopenshell-python/ifcopenshell/draw.py index 15ad2ef11f..5f6d761ceb 100644 --- a/src/ifcopenshell-python/ifcopenshell/draw.py +++ b/src/ifcopenshell-python/ifcopenshell/draw.py @@ -670,7 +670,6 @@ def main( if __name__ == "__main__": import argparse - import sys import time times = [] diff --git a/src/ifcopenshell-python/ifcopenshell/geom/__init__.py b/src/ifcopenshell-python/ifcopenshell/geom/__init__.py index 604e5b8e37..9ed96fa0c8 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/__init__.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/__init__.py @@ -40,7 +40,7 @@ def _has_occ(): pass try: - import OCC.BRepTools + import OCC.BRepTools # noqa: F401 return True except ImportError: @@ -52,6 +52,6 @@ def _has_occ(): has_occ = _has_occ() if has_occ: - from . import occ_utils as utils + from . import occ_utils as utils # noqa: F401 from .main import * diff --git a/src/ifcopenshell-python/ifcopenshell/geom/app.py b/src/ifcopenshell-python/ifcopenshell/geom/app.py index 4ee0a5d482..fa07f3f2b8 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/app.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/app.py @@ -18,7 +18,6 @@ import functools import multiprocessing -import operator import os import sys import time @@ -26,11 +25,10 @@ import time import ifcopenshell.ifcopenshell_wrapper as W try: - from OCC.Core import AIS + from OCC.Core import AIS # noqa: F401 USE_OCCT_HANDLE = False except ImportError: - from OCC import AIS USE_OCCT_HANDLE = True @@ -56,7 +54,6 @@ from .code_editor_pane import code_edit try: from OCC.Display.pyqt5Display import qtViewer3d except BaseException: - import OCC.Display try: import OCC.Display.backend diff --git a/src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py b/src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py index ff46b67d8d..3e130debbc 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import logging -import os import sys from code import InteractiveConsole @@ -30,14 +29,11 @@ except BaseException: try: from pyqode.core import api, modes, panels - from pyqode.core.api import CodeEdit, ColorScheme - from pyqode.core.panels import CheckerPanel + from pyqode.core.api import CodeEdit from pyqode.python import modes as pymodes from pyqode.python import panels as pypanels - from pyqode.python import widgets from pyqode.python.backend import server - from pyqode.python.modes import PyAutoIndentMode, PythonSH - from pyqode.python.widgets import PyInteractiveConsole + from pyqode.python.modes import PythonSH has_pyqode = True except BaseException: diff --git a/src/ifcopenshell-python/ifcopenshell/geom/main.py b/src/ifcopenshell-python/ifcopenshell/geom/main.py index fe31a15d84..db6deecb15 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/main.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/main.py @@ -19,9 +19,6 @@ from __future__ import annotations -import operator -import os -import sys from collections.abc import Generator, Iterable from typing import TYPE_CHECKING, Any, Literal, Optional, TypeVar, Union, cast, overload diff --git a/src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py b/src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py index 9abddff470..8964b2392a 100644 --- a/src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py +++ b/src/ifcopenshell-python/ifcopenshell/geom/occ_utils.py @@ -24,7 +24,7 @@ import operator import random import warnings from collections.abc import Iterable -from typing import Any, NamedTuple, Union +from typing import NamedTuple, Union import OCC from typing_extensions import assert_never diff --git a/src/ifcopenshell-python/ifcopenshell/util/doc.py b/src/ifcopenshell-python/ifcopenshell/util/doc.py index 9c7acf16b7..b0443f6117 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/doc.py +++ b/src/ifcopenshell-python/ifcopenshell/util/doc.py @@ -19,7 +19,7 @@ import copy import json from pathlib import Path -from typing import Any, Literal, Optional, TypedDict, Union +from typing import Optional, TypedDict, Union from typing_extensions import NotRequired diff --git a/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py b/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py index 87c65e2f28..681c074009 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py +++ b/src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py @@ -30,7 +30,6 @@ import ifcopenshell.api.project import ifcopenshell.api.unit import ifcopenshell.guid import ifcopenshell.ifcopenshell_wrapper as W -import ifcopenshell.util.attribute if not RUN_FROM_DEV_REPO: import shutil diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index 72ff60c0a1..abcba23a0f 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import re -import sys from collections.abc import Iterable from decimal import Decimal from types import EllipsisType @@ -32,7 +31,6 @@ import ifcopenshell.util import ifcopenshell.util.attribute import ifcopenshell.util.classification import ifcopenshell.util.element -import ifcopenshell.util.fm import ifcopenshell.util.geolocation import ifcopenshell.util.placement import ifcopenshell.util.pset diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py index 8c0f3d6ce9..4d6a822533 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py @@ -18,7 +18,6 @@ from __future__ import annotations -import collections import collections.abc from collections.abc import Sequence from itertools import chain @@ -29,7 +28,6 @@ import numpy as np import numpy.typing as npt import ifcopenshell -import ifcopenshell.api import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation diff --git a/src/ifcopenshell-python/ifcopenshell/util/unit.py b/src/ifcopenshell-python/ifcopenshell/util/unit.py index 93d4776df0..7e4686d4e4 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/unit.py +++ b/src/ifcopenshell-python/ifcopenshell/util/unit.py @@ -22,7 +22,6 @@ from math import pi from typing import Literal, Optional, Union import ifcopenshell -import ifcopenshell.api.unit import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper prefixes = { diff --git a/src/ifcopenshell-python/pyproject.toml b/src/ifcopenshell-python/pyproject.toml index 790891e350..9bcaeeebaa 100644 --- a/src/ifcopenshell-python/pyproject.toml +++ b/src/ifcopenshell-python/pyproject.toml @@ -45,3 +45,6 @@ include = ["ifcopenshell*"] [tool.ruff] extend = "../../pyproject.toml" +lint.select = [ + "F401", # unused imports +] diff --git a/src/ifcopenshell-python/test/api/alignment/test_add_segment_to_layout.py b/src/ifcopenshell-python/test/api/alignment/test_add_segment_to_layout.py index 9c6503516a..90a4d97d11 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_add_segment_to_layout.py +++ b/src/ifcopenshell-python/test/api/alignment/test_add_segment_to_layout.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_add_stationing_to_alignment.py b/src/ifcopenshell-python/test/api/alignment/test_add_stationing_to_alignment.py index 52786cb28c..4dd113ebbc 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_add_stationing_to_alignment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_add_stationing_to_alignment.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_add_vertical_alignment.py b/src/ifcopenshell-python/test/api/alignment/test_add_vertical_alignment.py index 50298717b3..5a09cd1890 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_add_vertical_alignment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_add_vertical_alignment.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_create.py b/src/ifcopenshell-python/test/api/alignment/test_create.py index e9fb2d00f3..f227bfd758 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py b/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py index 90321574bd..0b431163bc 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py @@ -18,7 +18,6 @@ import math -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_as_polyline.py b/src/ifcopenshell-python/test/api/alignment/test_create_as_polyline.py index 8724de5e95..6e4eee9527 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_as_polyline.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_as_polyline.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_by_pi_method.py b/src/ifcopenshell-python/test/api/alignment/test_create_by_pi_method.py index 17a7d9b558..6da7af0690 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_by_pi_method.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_by_pi_method.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py b/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py index 87d1ca563f..ad654ac97d 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py @@ -18,7 +18,6 @@ import math -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_no_geometry.py b/src/ifcopenshell-python/test/api/alignment/test_create_no_geometry.py index a8f7c3ac06..20d5f946e8 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_no_geometry.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_no_geometry.py @@ -16,10 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment -import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_get_alignment.py b/src/ifcopenshell-python/test/api/alignment/test_get_alignment.py index a7821ce213..9c7a8718e2 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_get_alignment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_get_alignment.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_get_basis_curve.py b/src/ifcopenshell-python/test/api/alignment/test_get_basis_curve.py index 659b9db343..0743fa6fd7 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_get_basis_curve.py +++ b/src/ifcopenshell-python/test/api/alignment/test_get_basis_curve.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_horizontal_layout_by_pi_method.py b/src/ifcopenshell-python/test/api/alignment/test_horizontal_layout_by_pi_method.py index 75d46ba173..0864d5a67f 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_horizontal_layout_by_pi_method.py +++ b/src/ifcopenshell-python/test/api/alignment/test_horizontal_layout_by_pi_method.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_map_alignment_cant_segment.py b/src/ifcopenshell-python/test/api/alignment/test_map_alignment_cant_segment.py index 2f529fb08a..c3ec6c3831 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_map_alignment_cant_segment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_map_alignment_cant_segment.py @@ -19,7 +19,6 @@ import pytest import ifcopenshell.api.alignment -import ifcopenshell.api.context from ifcopenshell.api.alignment._map_alignment_cant_segment import ( _map_alignment_cant_segment, ) diff --git a/src/ifcopenshell-python/test/api/alignment/test_name_segments.py b/src/ifcopenshell-python/test/api/alignment/test_name_segments.py index 20ed746ab0..2c9b8fa2ef 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_name_segments.py +++ b/src/ifcopenshell-python/test/api/alignment/test_name_segments.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_referent_names.py b/src/ifcopenshell-python/test/api/alignment/test_referent_names.py index d18ecf16c3..d64ea9a3ec 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_referent_names.py +++ b/src/ifcopenshell-python/test/api/alignment/test_referent_names.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import pytest -from pytest import fixture import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/alignment/test_update_curve_segment_transition_code.py b/src/ifcopenshell-python/test/api/alignment/test_update_curve_segment_transition_code.py index 30803b5a59..6fc87861db 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_update_curve_segment_transition_code.py +++ b/src/ifcopenshell-python/test/api/alignment/test_update_curve_segment_transition_code.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/api/alignment/test_vertical_layout_by_pi_method.py b/src/ifcopenshell-python/test/api/alignment/test_vertical_layout_by_pi_method.py index b34e22c741..bd97d644de 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_vertical_layout_by_pi_method.py +++ b/src/ifcopenshell-python/test/api/alignment/test_vertical_layout_by_pi_method.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.alignment import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/cogo/test_add_survey_point.py b/src/ifcopenshell-python/test/api/cogo/test_add_survey_point.py index 73d3c69105..143cb32c65 100644 --- a/src/ifcopenshell-python/test/api/cogo/test_add_survey_point.py +++ b/src/ifcopenshell-python/test/api/cogo/test_add_survey_point.py @@ -19,7 +19,6 @@ import pytest import ifcopenshell.api.aggregate -import ifcopenshell.api.alignment import ifcopenshell.api.cogo import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/cogo/test_assign_survey_point.py b/src/ifcopenshell-python/test/api/cogo/test_assign_survey_point.py index e19639166f..23a61c7655 100644 --- a/src/ifcopenshell-python/test/api/cogo/test_assign_survey_point.py +++ b/src/ifcopenshell-python/test/api/cogo/test_assign_survey_point.py @@ -19,7 +19,6 @@ import pytest import ifcopenshell.api.aggregate -import ifcopenshell.api.alignment import ifcopenshell.api.cogo import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py b/src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py index 433a981ac7..199aa8a4e8 100644 --- a/src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py +++ b/src/ifcopenshell-python/test/api/cogo/test_bearing2dd.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import math import pytest diff --git a/src/ifcopenshell-python/test/api/cogo/test_edit_survey_point.py b/src/ifcopenshell-python/test/api/cogo/test_edit_survey_point.py index 6b714b7342..cce8837475 100644 --- a/src/ifcopenshell-python/test/api/cogo/test_edit_survey_point.py +++ b/src/ifcopenshell-python/test/api/cogo/test_edit_survey_point.py @@ -19,7 +19,6 @@ import pytest import ifcopenshell.api.aggregate -import ifcopenshell.api.alignment import ifcopenshell.api.cogo import ifcopenshell.api.context diff --git a/src/ifcopenshell-python/test/api/cost/test_remove_cost_schedule.py b/src/ifcopenshell-python/test/api/cost/test_remove_cost_schedule.py index 5acadb9673..9b6c6824f1 100644 --- a/src/ifcopenshell-python/test/api/cost/test_remove_cost_schedule.py +++ b/src/ifcopenshell-python/test/api/cost/test_remove_cost_schedule.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api import ifcopenshell.api.cost import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/geometry/test_assign_representation.py b/src/ifcopenshell-python/test/api/geometry/test_assign_representation.py index ec02c7bc27..57fb48dabe 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_assign_representation.py +++ b/src/ifcopenshell-python/test/api/geometry/test_assign_representation.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.api.material import ifcopenshell.api.root diff --git a/src/ifcopenshell-python/test/api/geometry/test_unassign_representation.py b/src/ifcopenshell-python/test/api/geometry/test_unassign_representation.py index 55fbcaefe9..e44d802e23 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_unassign_representation.py +++ b/src/ifcopenshell-python/test/api/geometry/test_unassign_representation.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell.api.geometry -import ifcopenshell.util.placement import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/group/test_add_group.py b/src/ifcopenshell-python/test/api/group/test_add_group.py index 0c3547ce49..22eaac30c5 100644 --- a/src/ifcopenshell-python/test/api/group/test_add_group.py +++ b/src/ifcopenshell-python/test/api/group/test_add_group.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell.api.group -import ifcopenshell.util.element import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/material/test_edit_profile_usage.py b/src/ifcopenshell-python/test/api/material/test_edit_profile_usage.py index 478c41eb55..ae4230d29f 100644 --- a/src/ifcopenshell-python/test/api/material/test_edit_profile_usage.py +++ b/src/ifcopenshell-python/test/api/material/test_edit_profile_usage.py @@ -20,7 +20,6 @@ import ifcopenshell.api.context import ifcopenshell.api.geometry import ifcopenshell.api.material import ifcopenshell.api.root -import ifcopenshell.util.placement import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcopenshell-python/test/api/nest/test_assign_object.py b/src/ifcopenshell-python/test/api/nest/test_assign_object.py index 45c4d828e3..88f8d0bb90 100644 --- a/src/ifcopenshell-python/test/api/nest/test_assign_object.py +++ b/src/ifcopenshell-python/test/api/nest/test_assign_object.py @@ -21,7 +21,6 @@ import pytest import ifcopenshell.api.nest import ifcopenshell.api.root import ifcopenshell.util.element -import ifcopenshell.util.placement import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/project/test_append_asset.py b/src/ifcopenshell-python/test/api/project/test_append_asset.py index f89e4d5c89..949fc2fa5f 100644 --- a/src/ifcopenshell-python/test/api/project/test_append_asset.py +++ b/src/ifcopenshell-python/test/api/project/test_append_asset.py @@ -37,7 +37,6 @@ import ifcopenshell.api.unit import ifcopenshell.util.classification import ifcopenshell.util.element import ifcopenshell.util.placement -import ifcopenshell.util.unit import test.bootstrap from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcopenshell-python/test/api/pset/test_assign_pset.py b/src/ifcopenshell-python/test/api/pset/test_assign_pset.py index e1234e8fe1..0685d1dbf0 100644 --- a/src/ifcopenshell-python/test/api/pset/test_assign_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_assign_pset.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell.api.pset -import ifcopenshell.util.element import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/pset/test_unassign_pset.py b/src/ifcopenshell-python/test/api/pset/test_unassign_pset.py index 58c476d74a..3ee3e85328 100644 --- a/src/ifcopenshell-python/test/api/pset/test_unassign_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_unassign_pset.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell.api.pset -import ifcopenshell.util.element import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py b/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py index 769294e1b5..76481b9170 100644 --- a/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_unshare_pset.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell.api.pset -import ifcopenshell.api.root import ifcopenshell.guid import ifcopenshell.util.element import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/resource/test_calculate_resource_work.py b/src/ifcopenshell-python/test/api/resource/test_calculate_resource_work.py index 6affa8a60f..a15947a544 100644 --- a/src/ifcopenshell-python/test/api/resource/test_calculate_resource_work.py +++ b/src/ifcopenshell-python/test/api/resource/test_calculate_resource_work.py @@ -20,7 +20,6 @@ import ifcopenshell.api.pset import ifcopenshell.api.resource import ifcopenshell.api.root import ifcopenshell.api.sequence -import ifcopenshell.util.constraint import test.bootstrap 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 77de023379..c8cf57c3f6 100644 --- a/src/ifcopenshell-python/test/api/root/test_copy_class.py +++ b/src/ifcopenshell-python/test/api/root/test_copy_class.py @@ -28,7 +28,6 @@ import ifcopenshell.api.spatial import ifcopenshell.api.system import ifcopenshell.api.type import ifcopenshell.api.unit -import ifcopenshell.util import ifcopenshell.util.system import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_task.py b/src/ifcopenshell-python/test/api/sequence/test_remove_task.py index 1d1d3c1467..8395afe288 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_task.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_task.py @@ -16,9 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest -import ifcopenshell.api import ifcopenshell.api.nest import ifcopenshell.api.sequence import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_calendar.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_calendar.py index 42264d1182..cadf4770db 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_work_calendar.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_calendar.py @@ -16,9 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest -import ifcopenshell.api import ifcopenshell.api.control import ifcopenshell.api.sequence import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_plan.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_plan.py index 6f9a0ee9cf..906ea7a644 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_work_plan.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_plan.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api import ifcopenshell.api.sequence diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_schedule.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_schedule.py index ea2b094364..02608e64f6 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_work_schedule.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_schedule.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api import ifcopenshell.api.sequence diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py index 30393c540b..207206f366 100644 --- a/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py +++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py @@ -16,9 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest -import ifcopenshell.api import ifcopenshell.api.sequence import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/spatial/test_unassign_container.py b/src/ifcopenshell-python/test/api/spatial/test_unassign_container.py index efd89c990f..2a75a0c9df 100644 --- a/src/ifcopenshell-python/test/api/spatial/test_unassign_container.py +++ b/src/ifcopenshell-python/test/api/spatial/test_unassign_container.py @@ -19,7 +19,6 @@ import ifcopenshell.api.root import ifcopenshell.api.spatial import ifcopenshell.util.element -import ifcopenshell.util.placement import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/style/test_add_surface_textures.py b/src/ifcopenshell-python/test/api/style/test_add_surface_textures.py index 12c1711baa..aa7d011adc 100644 --- a/src/ifcopenshell-python/test/api/style/test_add_surface_textures.py +++ b/src/ifcopenshell-python/test/api/style/test_add_surface_textures.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.style import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/style/test_assign_material_style.py b/src/ifcopenshell-python/test/api/style/test_assign_material_style.py index 7b7ea3df56..40e82d7ac2 100644 --- a/src/ifcopenshell-python/test/api/style/test_assign_material_style.py +++ b/src/ifcopenshell-python/test/api/style/test_assign_material_style.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.api.style diff --git a/src/ifcopenshell-python/test/api/style/test_assign_representation_styles.py b/src/ifcopenshell-python/test/api/style/test_assign_representation_styles.py index 157acf49da..0dbe2b51ad 100644 --- a/src/ifcopenshell-python/test/api/style/test_assign_representation_styles.py +++ b/src/ifcopenshell-python/test/api/style/test_assign_representation_styles.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.style import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/style/test_remove_style.py b/src/ifcopenshell-python/test/api/style/test_remove_style.py index 5b39ec655c..04faee3b25 100644 --- a/src/ifcopenshell-python/test/api/style/test_remove_style.py +++ b/src/ifcopenshell-python/test/api/style/test_remove_style.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.material import ifcopenshell.api.style diff --git a/src/ifcopenshell-python/test/api/style/test_remove_surface_style.py b/src/ifcopenshell-python/test/api/style/test_remove_surface_style.py index 12ebf766f2..25affe54a4 100644 --- a/src/ifcopenshell-python/test/api/style/test_remove_surface_style.py +++ b/src/ifcopenshell-python/test/api/style/test_remove_surface_style.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.style import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/style/test_unassign_material_style.py b/src/ifcopenshell-python/test/api/style/test_unassign_material_style.py index 919f26e3c9..6a3fad0c20 100644 --- a/src/ifcopenshell-python/test/api/style/test_unassign_material_style.py +++ b/src/ifcopenshell-python/test/api/style/test_unassign_material_style.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.api.style diff --git a/src/ifcopenshell-python/test/api/style/test_unassign_representation_styles.py b/src/ifcopenshell-python/test/api/style/test_unassign_representation_styles.py index ed7285b1de..45bf852947 100644 --- a/src/ifcopenshell-python/test/api/style/test_unassign_representation_styles.py +++ b/src/ifcopenshell-python/test/api/style/test_unassign_representation_styles.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.style import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/system/test_connect_port.py b/src/ifcopenshell-python/test/api/system/test_connect_port.py index 06d1fb7f26..53975b5fd9 100644 --- a/src/ifcopenshell-python/test/api/system/test_connect_port.py +++ b/src/ifcopenshell-python/test/api/system/test_connect_port.py @@ -18,7 +18,6 @@ import ifcopenshell.api.root import ifcopenshell.api.system -import ifcopenshell.util.system import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/system/test_disconnect_port.py b/src/ifcopenshell-python/test/api/system/test_disconnect_port.py index 4d782414a6..1d711bdd2c 100644 --- a/src/ifcopenshell-python/test/api/system/test_disconnect_port.py +++ b/src/ifcopenshell-python/test/api/system/test_disconnect_port.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . import ifcopenshell.api.system -import ifcopenshell.util.system import test.bootstrap diff --git a/src/ifcopenshell-python/test/api/system/test_unassign_system.py b/src/ifcopenshell-python/test/api/system/test_unassign_system.py index 7e60cbb07c..3db260b5ab 100644 --- a/src/ifcopenshell-python/test/api/system/test_unassign_system.py +++ b/src/ifcopenshell-python/test/api/system/test_unassign_system.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.root import ifcopenshell.api.system diff --git a/src/ifcopenshell-python/test/api/test_api.py b/src/ifcopenshell-python/test/api/test_api.py index 55889cc627..7036f93528 100644 --- a/src/ifcopenshell-python/test/api/test_api.py +++ b/src/ifcopenshell-python/test/api/test_api.py @@ -17,13 +17,10 @@ # along with IfcOpenShell. If not, see . from datetime import datetime -from typing import Union -import ifcopenshell.api import ifcopenshell.api.control import ifcopenshell.api.cost import ifcopenshell.api.root -import ifcopenshell.api.sequence import ifcopenshell.util.element import test.bootstrap diff --git a/src/ifcopenshell-python/test/geom/geometry_tests.py b/src/ifcopenshell-python/test/geom/geometry_tests.py index f18cb3206a..744bf432fc 100644 --- a/src/ifcopenshell-python/test/geom/geometry_tests.py +++ b/src/ifcopenshell-python/test/geom/geometry_tests.py @@ -18,7 +18,6 @@ import numpy as np -import ifcopenshell import ifcopenshell.geom import ifcopenshell.util.shape import test.bootstrap diff --git a/src/ifcopenshell-python/test/geom/polyhedral_shapes.py b/src/ifcopenshell-python/test/geom/polyhedral_shapes.py index 07ed5bf6e6..c844c961e2 100644 --- a/src/ifcopenshell-python/test/geom/polyhedral_shapes.py +++ b/src/ifcopenshell-python/test/geom/polyhedral_shapes.py @@ -5,7 +5,6 @@ import pytest import ifcopenshell import ifcopenshell.geom -from test.bootstrap import file @pytest.mark.parametrize("file", ["geom/polygonal-face-tessellation.ifc"], indirect=True) diff --git a/src/ifcopenshell-python/test/geom/stats.py b/src/ifcopenshell-python/test/geom/stats.py index 9e2a9b2985..88f9b64345 100644 --- a/src/ifcopenshell-python/test/geom/stats.py +++ b/src/ifcopenshell-python/test/geom/stats.py @@ -2,7 +2,6 @@ import os import pytest -import ifcopenshell from ifcopenshell.geom.stats import StatsCollector diff --git a/src/ifcopenshell-python/test/test_entity_instance.py b/src/ifcopenshell-python/test/test_entity_instance.py index c031796b9f..cf4c050320 100644 --- a/src/ifcopenshell-python/test/test_entity_instance.py +++ b/src/ifcopenshell-python/test/test_entity_instance.py @@ -16,11 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest -import ifcopenshell -import ifcopenshell.api -import ifcopenshell.util.element import test.bootstrap diff --git a/src/ifcopenshell-python/test/test_file.py b/src/ifcopenshell-python/test/test_file.py index 062ef88b9f..c2c0aa54ea 100644 --- a/src/ifcopenshell-python/test/test_file.py +++ b/src/ifcopenshell-python/test/test_file.py @@ -19,8 +19,6 @@ import pytest import ifcopenshell -import ifcopenshell.api -import ifcopenshell.util.element import test.bootstrap diff --git a/src/ifcopenshell-python/test/test_file_inverse.py b/src/ifcopenshell-python/test/test_file_inverse.py index d1708bc2bb..af2e0d8a31 100644 --- a/src/ifcopenshell-python/test/test_file_inverse.py +++ b/src/ifcopenshell-python/test/test_file_inverse.py @@ -1,13 +1,6 @@ -import gc -import itertools -import pprint -import sys -import weakref - import pytest import ifcopenshell -import ifcopenshell.api def test_inverse_indices(): diff --git a/src/ifcopenshell-python/test/test_sql.py b/src/ifcopenshell-python/test/test_sql.py index d0f11792c4..39cf4c2583 100644 --- a/src/ifcopenshell-python/test/test_sql.py +++ b/src/ifcopenshell-python/test/test_sql.py @@ -19,7 +19,6 @@ import tempfile from pathlib import Path -import ifcpatch from ifcpatch.recipes import Ifc2Sql import ifcopenshell diff --git a/src/ifcopenshell-python/test/test_stream.py b/src/ifcopenshell-python/test/test_stream.py index c463c3ccca..20fe67e5ec 100644 --- a/src/ifcopenshell-python/test/test_stream.py +++ b/src/ifcopenshell-python/test/test_stream.py @@ -18,10 +18,8 @@ from pathlib import Path -import pytest import ifcopenshell -import test.bootstrap TEST_FILE = Path(__file__).parent / "files" / "basic.ifc" diff --git a/src/ifcopenshell-python/test/test_validate_rocksdb.py b/src/ifcopenshell-python/test/test_validate_rocksdb.py index 6cfde4fddd..64c010938b 100644 --- a/src/ifcopenshell-python/test/test_validate_rocksdb.py +++ b/src/ifcopenshell-python/test/test_validate_rocksdb.py @@ -19,7 +19,6 @@ import glob import os import tempfile -import time import pytest diff --git a/src/ifcopenshell-python/test/test_wall_opening.py b/src/ifcopenshell-python/test/test_wall_opening.py index 812a5420e2..a08ff445be 100644 --- a/src/ifcopenshell-python/test/test_wall_opening.py +++ b/src/ifcopenshell-python/test/test_wall_opening.py @@ -27,7 +27,6 @@ from dataclasses import dataclass, field import pytest -import ifcopenshell import ifcopenshell.guid import ifcopenshell.template diff --git a/src/ifcopenshell-python/test/util/scripts/test_validate_stub.py b/src/ifcopenshell-python/test/util/scripts/test_validate_stub.py index 82b9e02adc..a4a0b1ecbc 100644 --- a/src/ifcopenshell-python/test/util/scripts/test_validate_stub.py +++ b/src/ifcopenshell-python/test/util/scripts/test_validate_stub.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.util.scripts.validate_stub as subject diff --git a/src/ifcopenshell-python/test/util/test_attribute.py b/src/ifcopenshell-python/test/util/test_attribute.py index 4b04e8a678..c3d882dc72 100644 --- a/src/ifcopenshell-python/test/util/test_attribute.py +++ b/src/ifcopenshell-python/test/util/test_attribute.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell import ifcopenshell.ifcopenshell_wrapper as W diff --git a/src/ifcopenshell-python/test/util/test_brick.py b/src/ifcopenshell-python/test/util/test_brick.py index d0cffeaba9..88302a2170 100644 --- a/src/ifcopenshell-python/test/util/test_brick.py +++ b/src/ifcopenshell-python/test/util/test_brick.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.api.root import ifcopenshell.api.type diff --git a/src/ifcopenshell-python/test/util/test_date.py b/src/ifcopenshell-python/test/util/test_date.py index dd47244ba7..9b1713a772 100644 --- a/src/ifcopenshell-python/test/util/test_date.py +++ b/src/ifcopenshell-python/test/util/test_date.py @@ -16,10 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest import ifcopenshell.util.date as subject -import test.bootstrap class TestReadableIFCDuration: diff --git a/src/ifcopenshell-python/test/util/test_file.py b/src/ifcopenshell-python/test/util/test_file.py index b7b34cd097..a1ee333b6b 100644 --- a/src/ifcopenshell-python/test/util/test_file.py +++ b/src/ifcopenshell-python/test/util/test_file.py @@ -20,7 +20,6 @@ import tempfile import zipfile from pathlib import Path -import pytest import ifcopenshell.util.file as subject import test.bootstrap diff --git a/src/ifcopenshell-python/test/util/test_placement.py b/src/ifcopenshell-python/test/util/test_placement.py index 8a26c52ee5..bd611db36b 100644 --- a/src/ifcopenshell-python/test/util/test_placement.py +++ b/src/ifcopenshell-python/test/util/test_placement.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import ifcopenshell.util.placement as subject import test.bootstrap diff --git a/src/ifcopenshell-python/test/util/test_pset.py b/src/ifcopenshell-python/test/util/test_pset.py index ccfbcc4970..3b44951ec4 100644 --- a/src/ifcopenshell-python/test/util/test_pset.py +++ b/src/ifcopenshell-python/test/util/test_pset.py @@ -17,7 +17,6 @@ # along with IfcOpenShell. If not, see . """Run this test from src/ifcopenshell-python folder: pytest --durations=0 ifcopenshell/util/test_pset.py""" -from ifcopenshell import util from ifcopenshell.util import pset from ifcopenshell.util.pset import ApplicableEntity diff --git a/src/ifcopenshell-python/test/util/test_selector.py b/src/ifcopenshell-python/test/util/test_selector.py index e4de678529..0b90f3b278 100644 --- a/src/ifcopenshell-python/test/util/test_selector.py +++ b/src/ifcopenshell-python/test/util/test_selector.py @@ -26,13 +26,11 @@ import ifcopenshell.api.group import ifcopenshell.api.material import ifcopenshell.api.pset import ifcopenshell.api.root -import ifcopenshell.api.sequence import ifcopenshell.api.spatial import ifcopenshell.api.type import ifcopenshell.api.unit import ifcopenshell.util.element import ifcopenshell.util.placement -import ifcopenshell.util.pset import ifcopenshell.util.selector as subject import test.bootstrap diff --git a/src/ifcopenshell-python/test/util/test_shape_builder.py b/src/ifcopenshell-python/test/util/test_shape_builder.py index 87499b3288..5ff8adc03f 100644 --- a/src/ifcopenshell-python/test/util/test_shape_builder.py +++ b/src/ifcopenshell-python/test/util/test_shape_builder.py @@ -22,9 +22,7 @@ from typing import Any, Union import numpy as np import pytest -import ifcopenshell.api import ifcopenshell.geom -import ifcopenshell.util import ifcopenshell.util.shape import test.bootstrap from ifcopenshell.util.shape_builder import ( diff --git a/src/ifcopenshell-python/test/util/test_type.py b/src/ifcopenshell-python/test/util/test_type.py index 54f0e6da16..dfc16e3446 100644 --- a/src/ifcopenshell-python/test/util/test_type.py +++ b/src/ifcopenshell-python/test/util/test_type.py @@ -16,9 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import pytest -import ifcopenshell.api import ifcopenshell.util.type as subject import test.bootstrap From a0b81e333e5a527535d57f74bd79b5c92a366865 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 16 Jan 2026 16:53:25 +0500 Subject: [PATCH 506/657] black . --- src/bonsai/bonsai/bim/module/model/slab.py | 10 +++++--- src/bonsai/bonsai/tool/loader.py | 30 +++++++++++----------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index f5765331b6..4c9e89bf41 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -225,7 +225,7 @@ class DumbSlabPlaner: for inverse in tool.Ifc.get().get_inverse(layer_set): if not inverse.is_a("IfcMaterialLayerSetUsage") or inverse.LayerSetDirection != "AXIS3": continue - + if tool.Ifc.get().schema == "IFC2X3": for rel in tool.Ifc.get().get_inverse(inverse): if not rel.is_a("IfcRelAssociatesMaterial"): @@ -277,10 +277,12 @@ class DumbSlabPlaner: return self.change_thickness(element, total_thickness) - def change_thickness(self, element: ifcopenshell.entity_instance, thickness: float, preserve_offset: bool = False) -> None: + def change_thickness( + self, element: ifcopenshell.entity_instance, thickness: float, preserve_offset: bool = False + ) -> None: if tool.Model.get_usage_type(element) != "LAYER3": return - + layer_params = tool.Model.get_material_layer_parameters(element) ifc_file = tool.Ifc.get() body_context = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") @@ -299,7 +301,7 @@ class DumbSlabPlaner: extrusion = tool.Model.get_extrusion(representation) if extrusion: direction_ratios = Vector(extrusion.ExtrudedDirection.DirectionRatios) - + # Calculate the actual extrusion angle from vertical extrusion_angle = 0 if direction_ratios.length > 0: diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index 529d06a27b..d5ceea1db5 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -1039,7 +1039,7 @@ class Loader(bonsai.core.tool.Loader): z_coords = [v.co.z for v in mesh.vertices] mesh_z_min = min(z_coords) mesh_z_max = max(z_coords) - + bm = bmesh.new() bm.from_mesh(mesh) @@ -1068,54 +1068,54 @@ class Loader(bonsai.core.tool.Loader): thickness_dir = -thickness_dir no = thickness_dir - + # Find start point by projecting vertices onto thickness direction if len(mesh.vertices) > 0: projections = [Vector(v.co).dot(no) for v in mesh.vertices] min_proj = min(projections) max_proj = max(projections) - + centroid = sum((Vector(v.co) for v in mesh.vertices), Vector()) / len(mesh.vertices) centroid_proj = centroid.dot(no) - + if sense_factor == 1: start_proj = min_proj else: start_proj = max_proj - + offset_dist = start_proj - centroid_proj co = centroid + no * offset_dist - + actual_mesh_height = max_proj - min_proj else: co = Vector((0.0, 0.0, 0.0)) - + advance_direction = thickness_dir elif usage.LayerSetDirection == "AXIS3": # AXIS3 layers go through slab thickness (local Z) no = Vector([0.0, 0.0, 1.0]) - + # Find start point by projecting vertices onto Z direction if len(mesh.vertices) > 0: projections = [Vector(v.co).dot(no) for v in mesh.vertices] min_proj = min(projections) max_proj = max(projections) - + centroid = sum((Vector(v.co) for v in mesh.vertices), Vector()) / len(mesh.vertices) centroid_proj = centroid.dot(no) - + if sense_factor == 1: start_proj = min_proj else: start_proj = max_proj - + offset = start_proj - centroid_proj co = centroid + no * offset - + actual_mesh_height = max_proj - min_proj else: co = Vector((0.0, 0.0, 0.0)) - + advance_direction = no elif usage.LayerSetDirection == "AXIS1": co = Vector((0.0, 0.0, offset)) @@ -1156,13 +1156,13 @@ class Loader(bonsai.core.tool.Loader): # Calculate scale factor total_layer_thickness = sum(layer.LayerThickness for _, layer in layer_list) - if 'actual_mesh_height' not in locals(): + if "actual_mesh_height" not in locals(): actual_mesh_height = mesh_z_max - mesh_z_min if len(mesh.vertices) > 0 else total_layer_thickness thickness_scale = actual_mesh_height / total_layer_thickness if total_layer_thickness > 0 else 1.0 last_i = len(layer_set.MaterialLayers) - 1 - + for idx, (original_i, layer) in enumerate(layer_list): if idx != last_i: prev_co = co.copy() From c77c4ce968571fe8921c562d0e4997ec6bdb6409 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 16 Jan 2026 12:20:59 +0500 Subject: [PATCH 507/657] model.ui - more specific typing from props --- src/bonsai/bonsai/bim/module/model/ui.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index ad7de65556..8ff8ae3b34 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from __future__ import annotations import bpy import bonsai.bim import bonsai.tool as tool @@ -39,6 +40,9 @@ if TYPE_CHECKING or bpy.app.version >= (5, 0, 0): else: import bl_ui_utils.layout as bl_ui_utils_layout +if TYPE_CHECKING: + import bonsai.bim.module.model.prop as module_prop + class BIM_MT_type_manager_menu(bpy.types.Menu): bl_label = "Type Manager Menu" @@ -678,7 +682,7 @@ class BIM_PT_external_parametric_geometry(bpy.types.Panel): row.prop(input, "default_value", text=input.name) -def draw_door_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: +def draw_door_properties(layout: bpy.types.UILayout, props: module_prop.BIMDoorProperties) -> None: """Draw door properties UI (shared between properties panel and preferences).""" # General properties general_props = props.get_general_kwargs() @@ -698,7 +702,7 @@ def draw_door_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGr layout.prop(props, prop) -def draw_window_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: +def draw_window_properties(layout: bpy.types.UILayout, props: module_prop.BIMWindowProperties) -> None: """Draw window properties UI (shared between properties panel and preferences).""" number_of_panels, panels_data = props.window_types_panels[props.window_type] @@ -734,7 +738,7 @@ def draw_window_properties(layout: bpy.types.UILayout, props: bpy.types.Property cols[panel_i + 1].prop(props, prop, index=panel_i, text="") -def draw_railing_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: +def draw_railing_properties(layout: bpy.types.UILayout, props: module_prop.BIMRailingProperties) -> None: """Draw railing properties UI (shared between properties panel and preferences).""" general_props = props.get_general_kwargs() for prop in general_props: @@ -746,7 +750,7 @@ def draw_railing_properties(layout: bpy.types.UILayout, props: bpy.types.Propert layout.prop(props, prop) -def draw_roof_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: +def draw_roof_properties(layout: bpy.types.UILayout, props: module_prop.BIMRoofProperties) -> None: """Draw roof properties UI (shared between properties panel and preferences).""" # General properties general_props = props.get_general_kwargs() @@ -754,7 +758,7 @@ def draw_roof_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGr layout.prop(props, prop) -def draw_stair_properties(layout: bpy.types.UILayout, props: bpy.types.PropertyGroup) -> None: +def draw_stair_properties(layout: bpy.types.UILayout, props: module_prop.BIMStairProperties) -> None: """Draw stair properties UI (shared between properties panel and preferences).""" for prop_name in props.get_props_kwargs(): # Skip custom_tread_lock as it's handled with custom_first_last_tread_run From 009652f97d9003bf141c0861a9d1034f590de737 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 13 Jan 2026 11:43:03 +0500 Subject: [PATCH 508/657] ifcsverchok - fix by query node --- src/ifcsverchok/nodes/ifc/by_query.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/ifcsverchok/nodes/ifc/by_query.py b/src/ifcsverchok/nodes/ifc/by_query.py index 1bdd88054a..13a6fd6619 100644 --- a/src/ifcsverchok/nodes/ifc/by_query.py +++ b/src/ifcsverchok/nodes/ifc/by_query.py @@ -23,18 +23,30 @@ from bpy.props import StringProperty from sverchok.data_structure import updateNode from sverchok.node_tree import SverchCustomTreeNode -import ifcsverchok.helper +import ifcsverchok.helper as helper from ifcsverchok.ifcstore import SvIfcStore -class SvIfcByQuery(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): +class SvIfcByQuery(bpy.types.Node, SverchCustomTreeNode, helper.SvIfcCore): bl_idname = "SvIfcByQuery" bl_label = "IFC By Query" query: StringProperty(name="Query", update=updateNode) - def sv_init(self, context): - self.inputs.new("SvStringsSocket", "query").prop_name = "query" - self.outputs.new("SvStringsSocket", "Entity") + def sv_init(self, context) -> None: + helper.create_socket( + self.inputs, + "query", + description="IFC Query string.", + data_type="list[list[str]]", + prop_name="query", + ) + helper.create_socket( + self.outputs, + "Entity", + description="IFC Entities found by the query.", + data_type="set[ifcopenshell.entity_instance]", + prop_name="Entity", + ) def process(self): if not self.inputs["query"].sv_get()[0][0]: @@ -44,8 +56,8 @@ class SvIfcByQuery(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIf super().process() def process_ifc(self, query: str) -> None: - selector = ifcopenshell.util.selector.Selector() - self.outputs["Entity"].sv_set([selector.parse(self.file, query)]) + elements = ifcopenshell.util.selector.filter_elements(self.file, query) + self.outputs["Entity"].sv_set(elements) def register(): From dbc0cca36e60b2135ee9a0b583dab5f6df627405 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 14 Jan 2026 15:36:38 +0500 Subject: [PATCH 509/657] ifcsverchok - experimenting with shape builder nodes --- src/ifcsverchok/__init__.py | 21 +++-- src/ifcsverchok/helper.py | 38 +++++++++- src/ifcsverchok/nodes/ifc/create_shape.py | 2 - src/ifcsverchok/nodes/ifc/generate_guid.py | 1 - src/ifcsverchok/nodes/ifc/get_attribute.py | 2 - src/ifcsverchok/nodes/ifc/get_property.py | 1 - .../nodes/ifc/quick_project_setup.py | 4 - src/ifcsverchok/nodes/ifc/read_entity.py | 2 +- .../nodes/ifc/shape_builder/extrude.py | 76 +++++++++++++++++++ .../nodes/ifc/shape_builder/rectangle.py | 57 ++++++++++++++ .../nodes/ifc/shape_builder/representation.py | 64 ++++++++++++++++ .../nodes/ifc/shape_builder/test.py | 55 ++++++++++++++ 12 files changed, 304 insertions(+), 19 deletions(-) create mode 100644 src/ifcsverchok/nodes/ifc/shape_builder/extrude.py create mode 100644 src/ifcsverchok/nodes/ifc/shape_builder/rectangle.py create mode 100644 src/ifcsverchok/nodes/ifc/shape_builder/representation.py create mode 100644 src/ifcsverchok/nodes/ifc/shape_builder/test.py diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index 660ea6f707..2c9e37f623 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -81,7 +81,7 @@ ensure_addons_are_enabled("bonsai", "sverchok") from sverchok.ui.nodeview_space_menu import add_node_menu -def nodes_index(): +def nodes_index() -> list[tuple[str, list[tuple[str, str]]]]: return [ ( "IFC", @@ -111,15 +111,24 @@ def nodes_index(): ("ifc.create_project", "SvIfcCreateProject"), ("ifc.quick_project_setup", "SvIfcQuickProjectSetup"), ], - ) + ), + ( + "IFC Shape Builder", + [ + ("ifc.shape_builder.rectangle", "SvIfcSbRectangle"), + ("ifc.shape_builder.extrude", "SvIfcSbExtrude"), + ("ifc.shape_builder.representation", "SvIfcSbRepresentation"), + ("ifc.shape_builder.test", "SvIfcSbTest"), + ], + ), ] def make_node_categories() -> list[dict[str, list[str]]]: - node_categories = [{}] + node_categories: list[dict[str, list[str]]] = [] for category, nodes in nodes_index(): nodes = [node_name for idname, node_name in nodes] - node_categories[0][category] = nodes + node_categories.append({category: nodes}) return node_categories @@ -156,11 +165,11 @@ from ifcsverchok.ifcstore import SvIfcStore class IFC_Sv_UpdateCurrent(bpy.types.Operator): """Update current Sverchok node tree. - Will reset transient IFC file. - """ + Will reset transient IFC file""" bl_idname = "ifc.sverchok_update_current" bl_label = "Update Current Node Tree" + # bl_description = "Update current Sverchok node tree, resetting transient IFC file." bl_options = {"REGISTER", "UNDO", "INTERNAL"} node_group: bpy.props.StringProperty(default="") diff --git a/src/ifcsverchok/helper.py b/src/ifcsverchok/helper.py index d20626f365..8f9bda0c97 100644 --- a/src/ifcsverchok/helper.py +++ b/src/ifcsverchok/helper.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . -from typing import Any, TypeVar, Union +from typing import Any, Literal, TypeVar, Union import bpy import ifcopenshell import sverchok.core.sockets -from sverchok.data_structure import zip_long_repeat +from sverchok.data_structure import flatten_data, zip_long_repeat + +from ifcsverchok.ifcstore import SvIfcStore T_socket = TypeVar("T_socket", bound=sverchok.core.sockets.SvSocketCommon) @@ -67,6 +69,34 @@ def get_selected_nodes() -> list[bpy.types.Node]: return [n for n in node_tree.nodes if n.select] +def get_socket_value( + sockets: Union[bpy.types.NodeInputs, bpy.types.NodeOutputs], + name: str, + *, + value_type: Literal["SINGLE_VALUE", "CONTAINER", "FLATTEN"] = "SINGLE_VALUE", +) -> Any: + value = sockets[name].sv_get() + if value_type == "FLATTEN": + return flatten_data(value) + value = value[0] + if value_type == "SINGLE_VALUE": + return value[0] + return value + + +def set_socket_value( + sockets: bpy.types.NodeOutputs, + name: str, + value: Any, + *, + value_type: Literal["SINGLE_VALUE", "FINAL_VALUE"] = "SINGLE_VALUE", +) -> None: + if value_type == "SINGLE_VALUE": + sockets[name].sv_set([[value]]) + return + sockets[name].sv_set(value) + + def create_socket( inputs_or_outputs: Union[bpy.types.NodeInputs, bpy.types.NodeOutputs], name: str, @@ -87,3 +117,7 @@ def create_socket( if prop_name: socket.prop_name = prop_name return socket + + +def get_file() -> ifcopenshell.file: + return SvIfcStore.get_file() diff --git a/src/ifcsverchok/nodes/ifc/create_shape.py b/src/ifcsverchok/nodes/ifc/create_shape.py index 7b94008952..3238d08663 100644 --- a/src/ifcsverchok/nodes/ifc/create_shape.py +++ b/src/ifcsverchok/nodes/ifc/create_shape.py @@ -102,10 +102,8 @@ class SvIfcCreateShape(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper. def register(): - # bpy.utils.register_class(SvIfcCreateShapeRefresh) bpy.utils.register_class(SvIfcCreateShape) def unregister(): bpy.utils.unregister_class(SvIfcCreateShape) - # bpy.utils.unregister_class(SvIfcCreateShapeRefresh) diff --git a/src/ifcsverchok/nodes/ifc/generate_guid.py b/src/ifcsverchok/nodes/ifc/generate_guid.py index 26f50e8ae6..759dcbb90e 100644 --- a/src/ifcsverchok/nodes/ifc/generate_guid.py +++ b/src/ifcsverchok/nodes/ifc/generate_guid.py @@ -17,7 +17,6 @@ # along with IfcSverchok. If not, see . import bpy -import ifcopenshell import ifcopenshell.guid from sverchok.node_tree import SverchCustomTreeNode diff --git a/src/ifcsverchok/nodes/ifc/get_attribute.py b/src/ifcsverchok/nodes/ifc/get_attribute.py index e809500de3..7f90e742a8 100644 --- a/src/ifcsverchok/nodes/ifc/get_attribute.py +++ b/src/ifcsverchok/nodes/ifc/get_attribute.py @@ -17,8 +17,6 @@ # along with IfcSverchok. If not, see . import bpy -import ifcopenshell -import ifcopenshell.util.element from bpy.props import StringProperty from sverchok.data_structure import flatten_data, updateNode from sverchok.node_tree import SverchCustomTreeNode diff --git a/src/ifcsverchok/nodes/ifc/get_property.py b/src/ifcsverchok/nodes/ifc/get_property.py index f99dff7aa3..e8af45d606 100644 --- a/src/ifcsverchok/nodes/ifc/get_property.py +++ b/src/ifcsverchok/nodes/ifc/get_property.py @@ -17,7 +17,6 @@ # along with IfcSverchok. If not, see . import bpy -import ifcopenshell import ifcopenshell.util.element from bpy.props import StringProperty from sverchok.data_structure import flatten_data, updateNode diff --git a/src/ifcsverchok/nodes/ifc/quick_project_setup.py b/src/ifcsverchok/nodes/ifc/quick_project_setup.py index 5787e29187..c98e80a5c4 100644 --- a/src/ifcsverchok/nodes/ifc/quick_project_setup.py +++ b/src/ifcsverchok/nodes/ifc/quick_project_setup.py @@ -16,11 +16,7 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . - -from email.mime import application - import bpy -import ifcopenshell import sverchok.core.sockets from bpy.props import StringProperty from ifcopenshell import template diff --git a/src/ifcsverchok/nodes/ifc/read_entity.py b/src/ifcsverchok/nodes/ifc/read_entity.py index 38a703151d..454293e7d3 100644 --- a/src/ifcsverchok/nodes/ifc/read_entity.py +++ b/src/ifcsverchok/nodes/ifc/read_entity.py @@ -19,7 +19,7 @@ import bpy import ifcopenshell from bpy.props import StringProperty -from sverchok.data_structure import ensure_min_nesting, flatten_data, updateNode +from sverchok.data_structure import flatten_data, updateNode from sverchok.node_tree import SverchCustomTreeNode import ifcsverchok.helper diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py b/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py new file mode 100644 index 0000000000..f58f8dfd75 --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py @@ -0,0 +1,76 @@ +# IfcSverchok - IFC Sverchok extension +# Copyright (C) 2022 Martina Jakubowska +# +# This file is part of IfcSverchok. +# +# IfcSverchok is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcSverchok 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with IfcSverchok. If not, see . + +import bpy +import ifcopenshell +import ifcopenshell.api +import ifcopenshell.api.context +import ifcopenshell.api.root +import ifcopenshell.api.unit +from ifcopenshell.util.shape_builder import ShapeBuilder +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper +import ifcsverchok.helper as helper +from ifcsverchok.nodes.ifc.add_pset import flatten_data + + +class SvIfcSbExtrude(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): + bl_idname = "SvIfcSbExtrude" + bl_label = "IFC Extrude" + + def sv_init(self, context): + helper.create_socket( + self.inputs, + "Curve", + description="Curve to extrude", + data_type="list[list[ifcopenshell.entity_instance]]", + ) + helper.create_socket( + self.inputs, + "Magnitude", + data_type="list[list[float]]", + ) + helper.create_socket( + self.inputs, + "Position", + data_type="list[list[tuple[float, float, float]]]", + ) + helper.create_socket( + self.outputs, + "Extruded Profile", + description="Extruded Profile", + data_type="list[list[ifcopenshell.entity_instance]]", + ) + + def process(self): + self.file = helper.get_file() + curve: ifcopenshell.entity_instance = helper.get_socket_value(self.inputs, "Curve") + magnitude: float = helper.get_socket_value(self.inputs, "Magnitude") + position: tuple[float, float, float] = helper.get_socket_value(self.inputs, "Position") + builder = ShapeBuilder(self.file) + extrude = builder.extrude(curve, magnitude=magnitude, position=position) + helper.set_socket_value(self.outputs, "Extruded Profile", extrude) + + +def register(): + bpy.utils.register_class(SvIfcSbExtrude) + + +def unregister(): + bpy.utils.unregister_class(SvIfcSbExtrude) diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/rectangle.py b/src/ifcsverchok/nodes/ifc/shape_builder/rectangle.py new file mode 100644 index 0000000000..8b9b60c81d --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/shape_builder/rectangle.py @@ -0,0 +1,57 @@ +# IfcSverchok - IFC Sverchok extension +# Copyright (C) 2022 Martina Jakubowska +# +# This file is part of IfcSverchok. +# +# IfcSverchok is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcSverchok 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with IfcSverchok. If not, see . + +import bpy +from ifcopenshell.util.shape_builder import ShapeBuilder +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper +import ifcsverchok.helper as helper + + +class SvIfcSbRectangle(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): + bl_idname = "SvIfcSbRectangle" + bl_label = "IFC Rectangle" + + def sv_init(self, context): + helper.create_socket( + self.inputs, + "Size (2D)", + data_type="list[list[tuple[float, float]]]", + ) + helper.create_socket( + self.outputs, + "Rectangle", + description="Rectangle", + data_type="list[list[ifcopenshell.entity_instance]]", + ) + + def process(self): + file = helper.get_file() + builder = ShapeBuilder(file) + size: tuple[float, ...] = helper.get_socket_value(self.inputs, "Size", value_type="CONTAINER") + rectangle = builder.rectangle(size=size) + helper.set_socket_value(self.outputs, "Rectangle", rectangle) + + +def register(): + bpy.utils.register_class(SvIfcSbRectangle) + + +def unregister(): + bpy.utils.unregister_class(SvIfcSbRectangle) diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/representation.py b/src/ifcsverchok/nodes/ifc/shape_builder/representation.py new file mode 100644 index 0000000000..c1e8a9eb54 --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/shape_builder/representation.py @@ -0,0 +1,64 @@ +# IfcSverchok - IFC Sverchok extension +# Copyright (C) 2022 Martina Jakubowska +# +# This file is part of IfcSverchok. +# +# IfcSverchok is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcSverchok 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with IfcSverchok. If not, see . + +import bpy +import ifcopenshell +import ifcopenshell.util.representation +from ifcopenshell.util.shape_builder import ShapeBuilder +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper +import ifcsverchok.helper as helper + + +class SvIfcSbRepresentation(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): + bl_idname = "SvIfcSbRepresentation" + bl_label = "IFC Representation" + + def sv_init(self, context): + helper.create_socket( + self.inputs, + "Representation Item", + description="Representation Item", + data_type="list[list[ifcopenshell.entity_instance]]", + ) + helper.create_socket( + self.outputs, + "Shape Representation", + description="IfcShapeRepresentation", + data_type="list[list[ifcopenshell.entity_instance]]", + ) + + def process(self): + self.file = helper.get_file() + representation_items: list[ifcopenshell.entity_instance] + representation_items = helper.get_socket_value(self.inputs, "Representation Item", value_type="FLATTEN") + + builder = ShapeBuilder(self.file) + context = ifcopenshell.util.representation.get_context(self.file, "Model", "Body", "MODEL_VIEW") + assert context is not None + representation = builder.get_representation(context, items=representation_items) + helper.set_socket_value(self.outputs, "Shape Representation", representation) + + +def register(): + bpy.utils.register_class(SvIfcSbRepresentation) + + +def unregister(): + bpy.utils.unregister_class(SvIfcSbRepresentation) diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/test.py b/src/ifcsverchok/nodes/ifc/shape_builder/test.py new file mode 100644 index 0000000000..e2fc702721 --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/shape_builder/test.py @@ -0,0 +1,55 @@ +# IfcSverchok - IFC Sverchok extension +# Copyright (C) 2022 Martina Jakubowska +# +# This file is part of IfcSverchok. +# +# IfcSverchok is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcSverchok 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with IfcSverchok. If not, see . + +import bpy +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper +import ifcsverchok.helper as helper + + +class SvIfcSbTest(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): + bl_idname = "SvIfcSbTest" + bl_label = "IFC Test" + + def sv_init(self, context): + helper.create_socket( + self.inputs, + "Input", + ) + helper.create_socket( + self.outputs, + "Output", + description="Extruded Profile", + ) + + def process(self): + print("test!") + self.sv_input_names = ["Input"] + super().process() + + def process_ifc(self, input_value: float) -> None: + self.outputs["Output"].sv_set([[input_value]]) + + +def register(): + bpy.utils.register_class(SvIfcSbTest) + + +def unregister(): + bpy.utils.unregister_class(SvIfcSbTest) From 668b63a323fa5deabf1734e351f2f9a52a032cd8 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 14 Jan 2026 16:39:01 +0500 Subject: [PATCH 510/657] shape_builder - clean up redundant default values from doc-strings --- .../ifcopenshell/util/shape_builder.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py index 4d6a822533..dc3778b7b3 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py @@ -313,7 +313,7 @@ class ShapeBuilder: Generate an IfcIndexedPolyCurve based on the provided points. :param points: List of 2d or 3d points - :param closed: Whether polyline should be closed. Default is `False` + :param closed: Whether polyline should be closed. :param position_offset: offset to be applied to all points :param arc_points: Indices of the middle points for arcs. For creating an arc segment, provide 3 points: `arc_start`, `arc_middle` and `arc_end` to `points` and add the `arc_middle` @@ -416,8 +416,8 @@ class ShapeBuilder: 3 2 0 1 - :param size: rectangle size, could be either 2d or 3d, defaults to `(1,1)` - :param position: rectangle position, default to `None`. + :param size: rectangle size, could be either 2d or 3d. + :param position: rectangle position. if `position` not specified zero-vector will be used :return: list of rectangle coords """ @@ -442,8 +442,8 @@ class ShapeBuilder: """ Generate a rectangle polyline. - :param size: rectangle size, could be either 2d or 3d, defaults to `(1,1)` - :param position: rectangle position, default to `None`. + :param size: rectangle size, could be either 2d or 3d. + :param position: rectangle position. if `position` not specified zero-vector will be used :return: IfcIndexedPolyCurve """ @@ -785,7 +785,7 @@ class ShapeBuilder: """ Create IfcAxis2Placement3D from numpy matrix. - :param matrix: 4x4 transformation matrix, defaults to `np.eye(4)` + :param matrix: 4x4 transformation matrix, defaults to ``np.eye(4)`` :return: IfcAxis2Placement3D """ if matrix is None: @@ -966,8 +966,8 @@ class ShapeBuilder: def sphere(self, radius: float = 1.0, center: VectorType = (0.0, 0.0, 0.0)) -> ifcopenshell.entity_instance: """ - :param radius: radius of the sphere, defaults to 1.0 - :param center: sphere position, defaults to `(0.0, 0.0, 0.0)` + :param radius: radius of the sphere. + :param center: sphere position. :return: IfcSphere """ @@ -1070,7 +1070,7 @@ class ShapeBuilder: :param context: IfcGeometricRepresentationSubContext :param items: could be a list or single curve/IfcExtrudedAreaSolid - :param representation_type: Explicitly specified RepresentationType, defaults to `None`. + :param representation_type: Explicitly specified RepresentationType. If not provided it will be guessed from the items types :return: IfcShapeRepresentation """ @@ -1181,8 +1181,8 @@ class ShapeBuilder: :param fillets: list of points from `coords` to base fillet on. Example: (1,) :param fillet_radius: list of fillet radius for each of corresponding point form `fillets`. Example: (5.,) Note: `fillet_radius` could be just 1 float value if it's the same for all fillets. - :param closed: boolean whether curve should be closed (whether last point connected to first one). Default: True - :param create_ifc_curve: create IfcIndexedPolyCurve or just return the data. Default: False + :param closed: boolean whether curve should be closed (whether last point connected to first one). + :param create_ifc_curve: create IfcIndexedPolyCurve or just return the data. :return: (points, segments, ifc_curve) for the created simple curve if both points in e are equally far from pt, then v1 is returned. @@ -1461,10 +1461,10 @@ class ShapeBuilder: :param points: list of points, assuming they form consecutive closed polyline. :param magnitude: extrusion magnitude - :param extrusion_vector: extrusion direction, by default it's extruding by Z+ axis + :param extrusion_vector: extrusion direction. :param offset: offset from the points - :param start_cap: if True, create start cap, by default it's True - :param end_cap: if True, create end cap, by default it's True + :param start_cap: if True, create start cap. + :param end_cap: if True, create end cap. :return: IfcPolygonalFaceSet """ From 77a912c75699eea8f189840a36ce496018327cc6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 14 Jan 2026 16:55:54 +0500 Subject: [PATCH 511/657] shape_builder.rectangle - clarify 3d size use --- src/ifcopenshell-python/ifcopenshell/util/shape_builder.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py index dc3778b7b3..31a067bc80 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py @@ -417,6 +417,7 @@ class ShapeBuilder: 0 1 :param size: rectangle size, could be either 2d or 3d. + Use 0 for one of 3d dimensions to create 2d rectangle in 3d space. :param position: rectangle position. if `position` not specified zero-vector will be used :return: list of rectangle coords @@ -442,9 +443,11 @@ class ShapeBuilder: """ Generate a rectangle polyline. - :param size: rectangle size, could be either 2d or 3d. + :param size: rectangle. :param position: rectangle position. - if `position` not specified zero-vector will be used + + See ``get_rectangle_coords`` for more information. + :return: IfcIndexedPolyCurve """ return self.polyline(self.get_rectangle_coords(size, position), closed=True) From d93363b9bb222a4227f5fb3c599c612632125a99 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 14 Jan 2026 17:49:31 +0500 Subject: [PATCH 512/657] ifcsverchok - specify extrusion axis --- .../nodes/ifc/shape_builder/extrude.py | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py b/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py index f58f8dfd75..3b984dd4d7 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py @@ -16,24 +16,36 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . +from typing import TYPE_CHECKING, Literal + import bpy import ifcopenshell -import ifcopenshell.api -import ifcopenshell.api.context -import ifcopenshell.api.root -import ifcopenshell.api.unit from ifcopenshell.util.shape_builder import ShapeBuilder +from sverchok.data_structure import updateNode from sverchok.node_tree import SverchCustomTreeNode import ifcsverchok.helper import ifcsverchok.helper as helper -from ifcsverchok.nodes.ifc.add_pset import flatten_data class SvIfcSbExtrude(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): bl_idname = "SvIfcSbExtrude" bl_label = "IFC Extrude" + extrude_axis: bpy.props.EnumProperty( # pyright: ignore[reportRedeclaration] + default="Z", + items=[ + ("X", "X", "Interpret curve as in XY plane and extrude along X+."), + ("Y", "Y", "Interpret curve as in XZ plane and extrude along Y+."), + ("Z", "Z", "Interpret curve as in XY plane and extrude along Z+."), + ], + name="Extrude Axis", + update=updateNode, + ) + + if TYPE_CHECKING: + extrude_axis: Literal["X", "Y", "Z"] + def sv_init(self, context): helper.create_socket( self.inputs, @@ -58,13 +70,17 @@ class SvIfcSbExtrude(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.Sv data_type="list[list[ifcopenshell.entity_instance]]", ) + def draw_buttons(self, context, layout): + layout.prop(self, "extrude_axis") + def process(self): self.file = helper.get_file() curve: ifcopenshell.entity_instance = helper.get_socket_value(self.inputs, "Curve") magnitude: float = helper.get_socket_value(self.inputs, "Magnitude") position: tuple[float, float, float] = helper.get_socket_value(self.inputs, "Position") builder = ShapeBuilder(self.file) - extrude = builder.extrude(curve, magnitude=magnitude, position=position) + axis_kargs = builder.extrude_kwargs(self.extrude_axis) + extrude = builder.extrude(curve, magnitude=magnitude, position=position, **axis_kargs) helper.set_socket_value(self.outputs, "Extruded Profile", extrude) From a3bcea008af0ef36c1428abb14171fcef828b130 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 14 Jan 2026 18:02:04 +0500 Subject: [PATCH 513/657] util.shape - move typing stuff to `TYPE_CHECKING` block --- .../ifcopenshell/util/shape.py | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape.py b/src/ifcopenshell-python/ifcopenshell/util/shape.py index 4c41eff9f9..7732412861 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape.py @@ -16,28 +16,36 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +from __future__ import annotations + from math import cos, radians -from typing import Literal, Optional, Union +from typing import TYPE_CHECKING, Literal, Optional, Union import numpy as np import numpy.typing as npt import shapely import shapely.ops -import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation -from ifcopenshell.geom import ShapeElementType -from ifcopenshell.util.shape_builder import VectorType -tol = 1e-6 -AXIS_LITERAL = Literal["X", "Y", "Z"] -VECTOR_3D = tuple[float, float, float] +if TYPE_CHECKING: + import ifcopenshell.ifcopenshell_wrapper as W + from ifcopenshell.geom import ShapeElementType + from ifcopenshell.util.shape_builder import VectorType + + AXIS_LITERAL = Literal["X", "Y", "Z"] + + VECTOR_3D = tuple[float, float, float] + +# Used only for typing, but reused by `shape.py` users. MatrixType = npt.NDArray[np.float64] """`npt.NDArray[np.float64]`""" +tol = 1e-6 + # NOTE: See IfcGeomRepresentation.h for W.Triangulation buffer types. # NOTE: For functions that return a single scalar ensure to use .item() to From 413530bb0aa13f7496dc76bee472030a6c461086 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 15 Jan 2026 15:37:31 +0500 Subject: [PATCH 514/657] ifcsverchok - shape output node --- src/ifcsverchok/__init__.py | 1 + .../nodes/ifc/shape_builder/shape_output.py | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index 2c9e37f623..9745707e4d 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -119,6 +119,7 @@ def nodes_index() -> list[tuple[str, list[tuple[str, str]]]]: ("ifc.shape_builder.extrude", "SvIfcSbExtrude"), ("ifc.shape_builder.representation", "SvIfcSbRepresentation"), ("ifc.shape_builder.test", "SvIfcSbTest"), + ("ifc.shape_builder.shape_output", "SvSbShapeOutput"), ], ), ] diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py b/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py new file mode 100644 index 0000000000..c3555c25e4 --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py @@ -0,0 +1,67 @@ +# IfcSverchok - IFC Sverchok extension +# Copyright (C) 2022 Martina Jakubowska +# +# This file is part of IfcSverchok. +# +# IfcSverchok is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcSverchok 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with IfcSverchok. If not, see . + +import bpy +import ifcopenshell +import ifcopenshell.geom +import ifcopenshell.ifcopenshell_wrapper as W +import ifcopenshell.util.shape +import sverchok.core.sockets +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper as helper + + +class SvSbShapeOutput(bpy.types.Node, SverchCustomTreeNode, helper.SvIfcCore): + """ + Triggers: Ifc create shape by entity + Tooltip: Convert IfcShapeRepresentation to geometry data. + """ + + bl_idname = "SvSbShapeOutput" + bl_label = "IFC Shape Output" + + def sv_init(self, context): + helper.create_socket(self.inputs, "Representation", data_type="list[list[ifcopenshell.entity_instance]]") + helper.create_socket(self.outputs, "Vers", socket_type=sverchok.core.sockets.SvVerticesSocket) + helper.create_socket(self.outputs, "Edgs") + helper.create_socket(self.outputs, "Pols") + + def process(self): + entity: ifcopenshell.entity_instance = helper.get_socket_value(self.inputs, "Representation") + self.create(entity) + helper.set_socket_value(self.outputs, "Vers", [self.verts], value_type="FINAL_VALUE") + helper.set_socket_value(self.outputs, "Edgs", [self.edges], value_type="FINAL_VALUE") + helper.set_socket_value(self.outputs, "Pols", [self.polys], value_type="FINAL_VALUE") + + def create(self, entity: ifcopenshell.entity_instance) -> None: + assert bpy.context.scene + settings = ifcopenshell.geom.settings() + shape = ifcopenshell.geom.create_shape(settings, entity) + assert isinstance(shape, W.Triangulation) + self.verts = ifcopenshell.util.shape.get_vertices(shape).tolist() + self.edges = ifcopenshell.util.shape.get_edges(shape).tolist() + self.polys = ifcopenshell.util.shape.get_faces(shape).tolist() + + +def register(): + bpy.utils.register_class(SvSbShapeOutput) + + +def unregister(): + bpy.utils.unregister_class(SvSbShapeOutput) From 47e259ff2f34892db950f746f07b7268dae72436 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 15 Jan 2026 16:54:37 +0500 Subject: [PATCH 515/657] ifcsverchok - operator to apply graph to Bonsai file --- src/bonsai/bonsai/bim/module/misc/__init__.py | 1 + src/bonsai/bonsai/bim/module/misc/operator.py | 21 ++++++++++++++++++ src/bonsai/bonsai/tool/model.py | 22 +++++++++++++++++++ src/ifcsverchok/__init__.py | 2 ++ src/ifcsverchok/ifcstore.py | 5 +++++ 5 files changed, 51 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/misc/__init__.py b/src/bonsai/bonsai/bim/module/misc/__init__.py index 27ab626183..31926217fc 100644 --- a/src/bonsai/bonsai/bim/module/misc/__init__.py +++ b/src/bonsai/bonsai/bim/module/misc/__init__.py @@ -22,6 +22,7 @@ from . import ui, prop, operator classes = ( operator.DrawSystemArrows, operator.GetConnectedSystemElements, + operator.IfcSverchokUseBonsaiFile, operator.ResizeToStorey, operator.SetOverrideColour, operator.SnapSpacesTogether, diff --git a/src/bonsai/bonsai/bim/module/misc/operator.py b/src/bonsai/bonsai/bim/module/misc/operator.py index 15fca6b547..ee3c592f3e 100644 --- a/src/bonsai/bonsai/bim/module/misc/operator.py +++ b/src/bonsai/bonsai/bim/module/misc/operator.py @@ -348,3 +348,24 @@ class DrawSystemArrows(bpy.types.Operator, tool.Ifc.Operator): ) ) return matrix + + +class IfcSverchokUseBonsaiFile(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.ifcsverchok_use_bonsai_file" + bl_label = "Use Bonsai IFC File" + bl_description = "Apply current IfcSverchok tree to the active Bonsai file." + bl_options = {"REGISTER", "UNDO"} + + def _execute(self, context): + import sverchok.node_tree + + ifc_file = tool.Ifc.get() + if ifc_file is None: + self.report({"ERROR"}, "No active IFC file.") + return {"CANCELLED"} + + space_data = context.space_data + assert isinstance(space_data, bpy.types.SpaceNodeEditor) + node_tree = space_data.node_tree + assert isinstance(node_tree, sverchok.node_tree.SverchCustomTree) + tool.Model.run_ifcsverchok_graph_on_bonsai_file(node_tree) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index e7da203a85..d4c85e8d87 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -2669,3 +2669,25 @@ class Model(bonsai.core.tool.Model): material.OffsetFromReferenceLine = custom_offset cls.recreate_wall(element, wall) + + @classmethod + def run_ifcsverchok_graph_on_bonsai_file(cls, node_tree: sverchok.node_tree.SverchCustomTree) -> None: + from ifcsverchok.ifcstore import SvIfcStore + from sverchok.core.update_system import UpdateTree + + # We should be very careful and use bonsai file just for 1 graph update. + # To avoid producing duplicated data in non-ephemeral file. + SvIfcStore.use_bonsai_file = True + try: + # The ones below refresh asyncronously, so we're using different method to get results synchronously. + # - bpy.ops.node.sverchok_update_context(force_mode=True) + # - node_tree.force_update() + # TODO: Ideally we should find shape output node and update only it's furtherest children. + # Because user might have some nodes just floating around unused. + # ` update_tree = UpdateTree.get(node_tree); update_tree.add_outdated(nodes)` can be used for this. + UpdateTree.reset_tree(node_tree) + nodes_to_update = UpdateTree.main_update(node_tree) + # Consuming generator, which triggers the update. + list(nodes_to_update) + finally: + SvIfcStore.use_bonsai_file = False diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index 9745707e4d..2eb7366fc9 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -297,11 +297,13 @@ class IFC_PT_write_file_panel(bpy.types.Panel): def draw(self, context): ng = context.space_data.node_tree layout = self.layout + assert layout row = layout.split(factor=0.2, align=True) row = layout.row() row2 = layout.row() row.operator("ifc.sverchok_update_current", text="IFC Re-run all nodes") row2.operator("ifc.write_file_panel") + layout.operator("bim.ifcsverchok_use_bonsai_file") CLASSES = [IFC_Sv_UpdateCurrent, IFC_Sv_write_file, IFC_PT_write_file_panel] diff --git a/src/ifcsverchok/ifcstore.py b/src/ifcsverchok/ifcstore.py index 6fda9b2cea..990db56a0e 100644 --- a/src/ifcsverchok/ifcstore.py +++ b/src/ifcsverchok/ifcstore.py @@ -18,6 +18,7 @@ from typing import Any, Union +import bonsai.tool as tool import bpy import ifcopenshell import ifcopenshell.api @@ -50,6 +51,8 @@ class SvIfcStore: future = [] schema_identifiers = ["IFC4", "IFC2X3"] + use_bonsai_file = False + @staticmethod def purge() -> None: SvIfcStore.path = "" @@ -95,6 +98,8 @@ class SvIfcStore: @staticmethod def get_file() -> ifcopenshell.file: + if SvIfcStore.use_bonsai_file: + return tool.Ifc.get() if SvIfcStore.file is None: SvIfcStore.create_boilerplate() return SvIfcStore.file From ed38d2347cea3cb950354deba9084c4cd1997744 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 15 Jan 2026 17:58:26 +0500 Subject: [PATCH 516/657] ifcsverchok - check for unused imports --- src/ifcsverchok/__init__.py | 1 - src/ifcsverchok/ifcstore.py | 1 - src/ifcsverchok/nodes/ifc/add_pset.py | 1 - src/ifcsverchok/nodes/ifc/add_spatial_element.py | 2 -- src/ifcsverchok/nodes/ifc/api.py | 3 +-- src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py | 16 ---------------- src/ifcsverchok/nodes/ifc/by_guid.py | 1 - src/ifcsverchok/nodes/ifc/by_query.py | 1 - src/ifcsverchok/nodes/ifc/create_entity.py | 2 -- src/ifcsverchok/nodes/ifc/create_project.py | 1 - src/ifcsverchok/nodes/ifc/create_shape.py | 3 +-- .../nodes/ifc/select_blender_objects.py | 1 - src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py | 4 +--- src/ifcsverchok/nodes/ifc/write_file.py | 1 - src/ifcsverchok/pyproject.toml | 5 +++++ 15 files changed, 8 insertions(+), 35 deletions(-) create mode 100644 src/ifcsverchok/pyproject.toml diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index 2eb7366fc9..4594d8a367 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -154,7 +154,6 @@ reload_event = False from os.path import splitext import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.api.spatial diff --git a/src/ifcsverchok/ifcstore.py b/src/ifcsverchok/ifcstore.py index 990db56a0e..30cd760b87 100644 --- a/src/ifcsverchok/ifcstore.py +++ b/src/ifcsverchok/ifcstore.py @@ -21,7 +21,6 @@ from typing import Any, Union import bonsai.tool as tool import bpy import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.util.representation from ifcopenshell import template diff --git a/src/ifcsverchok/nodes/ifc/add_pset.py b/src/ifcsverchok/nodes/ifc/add_pset.py index 3cd25cd4dc..5676dadf71 100644 --- a/src/ifcsverchok/nodes/ifc/add_pset.py +++ b/src/ifcsverchok/nodes/ifc/add_pset.py @@ -20,7 +20,6 @@ import json import bpy import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.pset import sverchok.core.sockets from bpy.props import StringProperty diff --git a/src/ifcsverchok/nodes/ifc/add_spatial_element.py b/src/ifcsverchok/nodes/ifc/add_spatial_element.py index f53dc3fa16..0f03dc1b52 100644 --- a/src/ifcsverchok/nodes/ifc/add_spatial_element.py +++ b/src/ifcsverchok/nodes/ifc/add_spatial_element.py @@ -19,8 +19,6 @@ from itertools import chain import bpy -import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.api.spatial diff --git a/src/ifcsverchok/nodes/ifc/api.py b/src/ifcsverchok/nodes/ifc/api.py index ce75275db4..4c53b3968d 100644 --- a/src/ifcsverchok/nodes/ifc/api.py +++ b/src/ifcsverchok/nodes/ifc/api.py @@ -20,10 +20,9 @@ import logging from typing import Any, Union import bpy -import ifcopenshell import ifcopenshell.api import sverchok.core.sockets -from bpy.props import EnumProperty, StringProperty +from bpy.props import StringProperty from sverchok.data_structure import updateNode from sverchok.node_tree import SverchCustomTreeNode diff --git a/src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py b/src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py index 8d623ffe1e..785d5db718 100644 --- a/src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py +++ b/src/ifcsverchok/nodes/ifc/bmesh_to_ifc.py @@ -16,36 +16,20 @@ # You should have received a copy of the GNU General Public License # along with IfcSverchok. If not, see . -from copy import deepcopy -from decimal import Context -from email.policy import default -from itertools import chain, cycle - -import bonsai.core.geometry as core -import bonsai.tool as tool import bpy import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.api.geometry import ifcopenshell.util.representation -from bonsai.bim.module.root.prop import get_contexts from bpy.props import ( BoolProperty, EnumProperty, - IntProperty, PointerProperty, StringProperty, ) from mathutils import Matrix -from sverchok.core.socket_data import sv_get_socket from sverchok.data_structure import ( - fixed_iter, - flat_iter, - flatten_data, - node_id, updateNode, - zip_long_repeat, ) from sverchok.node_tree import SverchCustomTreeNode diff --git a/src/ifcsverchok/nodes/ifc/by_guid.py b/src/ifcsverchok/nodes/ifc/by_guid.py index 029b1b11a5..fd6b79bb55 100644 --- a/src/ifcsverchok/nodes/ifc/by_guid.py +++ b/src/ifcsverchok/nodes/ifc/by_guid.py @@ -19,7 +19,6 @@ import itertools import bpy -import ifcopenshell from bpy.props import StringProperty from sverchok.data_structure import flatten_data, updateNode from sverchok.node_tree import SverchCustomTreeNode diff --git a/src/ifcsverchok/nodes/ifc/by_query.py b/src/ifcsverchok/nodes/ifc/by_query.py index 13a6fd6619..6b6cb12bdb 100644 --- a/src/ifcsverchok/nodes/ifc/by_query.py +++ b/src/ifcsverchok/nodes/ifc/by_query.py @@ -17,7 +17,6 @@ # along with IfcSverchok. If not, see . import bpy -import ifcopenshell import ifcopenshell.util.selector from bpy.props import StringProperty from sverchok.data_structure import updateNode diff --git a/src/ifcsverchok/nodes/ifc/create_entity.py b/src/ifcsverchok/nodes/ifc/create_entity.py index bc63b3bc08..2ce1d54461 100644 --- a/src/ifcsverchok/nodes/ifc/create_entity.py +++ b/src/ifcsverchok/nodes/ifc/create_entity.py @@ -17,8 +17,6 @@ # along with IfcSverchok. If not, see . import bpy -import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.api.root import ifcopenshell.util.schema diff --git a/src/ifcsverchok/nodes/ifc/create_project.py b/src/ifcsverchok/nodes/ifc/create_project.py index 4f0b19a398..b6de31de34 100644 --- a/src/ifcsverchok/nodes/ifc/create_project.py +++ b/src/ifcsverchok/nodes/ifc/create_project.py @@ -18,7 +18,6 @@ import bpy import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.api.root import ifcopenshell.api.unit diff --git a/src/ifcsverchok/nodes/ifc/create_shape.py b/src/ifcsverchok/nodes/ifc/create_shape.py index 3238d08663..de47c3b0e6 100644 --- a/src/ifcsverchok/nodes/ifc/create_shape.py +++ b/src/ifcsverchok/nodes/ifc/create_shape.py @@ -20,9 +20,8 @@ import logging import bonsai.bim.import_ifc import bpy -import ifcopenshell import ifcopenshell.geom -from bpy.props import BoolProperty, PointerProperty, StringProperty +from bpy.props import BoolProperty, StringProperty from sverchok.data_structure import flatten_data, updateNode from sverchok.node_tree import SverchCustomTreeNode diff --git a/src/ifcsverchok/nodes/ifc/select_blender_objects.py b/src/ifcsverchok/nodes/ifc/select_blender_objects.py index 3a0053a514..d2582dcaff 100644 --- a/src/ifcsverchok/nodes/ifc/select_blender_objects.py +++ b/src/ifcsverchok/nodes/ifc/select_blender_objects.py @@ -19,7 +19,6 @@ import bonsai.tool as tool import bpy import ifcopenshell -import ifcopenshell.util.selector from bpy.props import StringProperty from sverchok.data_structure import updateNode from sverchok.node_tree import SverchCustomTreeNode diff --git a/src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py b/src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py index 69ac5f37f3..be06fac1ce 100644 --- a/src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py +++ b/src/ifcsverchok/nodes/ifc/sverchok_to_ifc.py @@ -17,12 +17,10 @@ # along with IfcSverchok. If not, see . import bpy -import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.api.geometry import ifcopenshell.util.representation -from bpy.props import EnumProperty, FloatVectorProperty, IntProperty, StringProperty +from bpy.props import EnumProperty, StringProperty from sverchok.data_structure import ensure_min_nesting, updateNode from sverchok.node_tree import SverchCustomTreeNode diff --git a/src/ifcsverchok/nodes/ifc/write_file.py b/src/ifcsverchok/nodes/ifc/write_file.py index 3a25cd99cc..8d52b3d77a 100644 --- a/src/ifcsverchok/nodes/ifc/write_file.py +++ b/src/ifcsverchok/nodes/ifc/write_file.py @@ -20,7 +20,6 @@ from os.path import abspath, splitext import bpy import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.api.spatial diff --git a/src/ifcsverchok/pyproject.toml b/src/ifcsverchok/pyproject.toml new file mode 100644 index 0000000000..6952f66f06 --- /dev/null +++ b/src/ifcsverchok/pyproject.toml @@ -0,0 +1,5 @@ +[tool.ruff] +extend = "../../pyproject.toml" +lint.select = [ + "F401", # unused imports +] From 9d1dcf9034df46b6f2cc70660a87a1c8b0c13b74 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 16 Jan 2026 16:51:14 +0500 Subject: [PATCH 517/657] external parametric geometry - integrate with ifcsverchok Still very experimental, but here's a short demo - https://files.catbox.moe/u6vnhj.mp4 Sverchok graph I've used - https://files.catbox.moe/1x7b7q.png --- .../bonsai/bim/module/model/external.py | 22 ++++-- src/bonsai/bonsai/bim/module/model/prop.py | 35 ++++++++-- src/bonsai/bonsai/bim/module/model/ui.py | 37 ++++++---- src/bonsai/bonsai/tool/model.py | 69 +++++++++++++++++-- 4 files changed, 137 insertions(+), 26 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/external.py b/src/bonsai/bonsai/bim/module/model/external.py index cde84cd536..5ed99f29e8 100644 --- a/src/bonsai/bonsai/bim/module/model/external.py +++ b/src/bonsai/bonsai/bim/module/model/external.py @@ -17,9 +17,7 @@ # along with Bonsai. If not, see . import bpy -import bmesh -import ifcopenshell import bonsai.tool as tool @@ -32,9 +30,23 @@ class ApplyExternalParametricGeometry(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): obj = context.active_object assert obj - assert (active_representation := tool.Geometry.get_active_representation(obj)) - ifc_context = active_representation.ContextOfItems - tool.Model.add_representation(obj, ifc_context) props = tool.Model.get_epg_props(obj) + + # TODO: consider nodes being empty. + if props.geometry_source == "GEONODES": + assert (active_representation := tool.Geometry.get_active_representation(obj)) + ifc_context = active_representation.ContextOfItems + + tool.Model.add_representation(obj, ifc_context) + elif props.geometry_source == "IFCSVERCHOK": + import ifcsverchok.helper as helper + + nodes = props.sverchok_nodes + assert nodes is not None + tool.Model.run_ifcsverchok_graph_on_bonsai_file(nodes) + output_node = tool.Model.get_ifcsverchok_shape_output(nodes) + representation = helper.get_socket_value(output_node.inputs, "Representation") + tool.Model.replace_object_ifc_representation(representation.ContextOfItems, obj, representation) + props.is_editing = False return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 5066ceb9b2..b26466aa15 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -33,6 +33,9 @@ from typing import TYPE_CHECKING, Literal, get_args, Union, Any, Optional from collections.abc import Callable from mathutils import Vector +if TYPE_CHECKING: + import sverchok.node_tree + def get_ifc_class(self: "BIMModelProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: if not AuthoringData.is_loaded: @@ -1709,12 +1712,16 @@ def update_is_editing(self: "BIMExternalParametricGeometryProperties", context: if self.is_editing: return + assert isinstance(self.id_data, bpy.types.Object) tool.Model.clean_up_parametric_geometry(self.id_data) - del self["is_editing"] - del self["geo_nodes"] + self.property_unset("is_editing") + self.property_unset("geo_nodes") + self.property_unset("sverchok_nodes") def update_geo_nodes(self: "BIMExternalParametricGeometryProperties", context: bpy.types.Context) -> None: + assert isinstance(self.id_data, bpy.types.Object) + if self.geo_nodes: tool.Model.setup_parametric_geometry(self.id_data) return @@ -1725,14 +1732,25 @@ def update_geo_nodes(self: "BIMExternalParametricGeometryProperties", context: b del self["geo_nodes"] +def poll_sverchok_nodes(self: "BIMExternalParametricGeometryProperties", node_tree: bpy.types.NodeTree) -> bool: + return node_tree.bl_idname == "SverchCustomTreeType" + + class BIMExternalParametricGeometryProperties(bpy.types.PropertyGroup): - is_editing: bpy.props.BoolProperty( + is_editing: bpy.props.BoolProperty( # pyright: ignore[reportRedeclaration] name="Is Editing Paramteric Geometry", description="Toggle editing parametric geometry.", default=False, update=update_is_editing, ) - geo_nodes: bpy.props.PointerProperty( + geometry_source: bpy.props.EnumProperty( # pyright: ignore[reportRedeclaration] + name="Geometry Source", + items=[ + ("GEONODES", "Geometry Nodes", ""), + ("IFCSVERCHOK", "IFC Sverchok", ""), + ], + ) + geo_nodes: bpy.props.PointerProperty( # pyright: ignore[reportRedeclaration] name="Geometry Nodes", description="Geometry nodes tree to use as a source for representation.", type=bpy.types.GeometryNodeTree, @@ -1740,6 +1758,15 @@ class BIMExternalParametricGeometryProperties(bpy.types.PropertyGroup): poll=lambda self, node_tree: not node_tree.name.startswith("BBIM_EPG"), ) + sverchok_nodes: bpy.props.PointerProperty( # pyright: ignore[reportRedeclaration] + name="Sverchok Nodes", + description="Sverchok node tree to use as a source for representation.", + type=bpy.types.NodeTree, + poll=poll_sverchok_nodes, + ) + if TYPE_CHECKING: is_editing: bool + geometry_source: Literal["GEONODES", "IFCSVERCHOK"] geo_nodes: Union[bpy.types.GeometryNodeTree, None] + sverchok_nodes: Union[sverchok.node_tree.SverchCustomTree, None] diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index 8ff8ae3b34..86beea6079 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -19,6 +19,7 @@ from __future__ import annotations import bpy import bonsai.bim +from bonsai.bim import module import bonsai.tool as tool from bpy.types import Panel, Menu from bonsai.bim.helper import prop_with_search @@ -668,18 +669,30 @@ class BIM_PT_external_parametric_geometry(bpy.types.Panel): row.operator("bim.apply_external_parametric_geometry", icon="CHECKMARK", text="") row.prop(props, "is_editing", icon="CANCEL", text="") - row = layout.row(align=True) - row.prop_search(props, "geo_nodes", bpy.data, "node_groups") - if props.geo_nodes: - assert (modifier := tool.Model.get_epg_modifier(obj)) - inputs = tool.Model.get_parametric_geometry_inputs(modifier) - # NOTE: users won't be able to see inputs descriptions. - # If we add group node inputs as modifiers inputs, descriptions will be visible. - # But then we need to ensure inputs are up to date - # (e.g. probably just by adding a refresh button). - for input in inputs: - row = layout.row(align=True) - row.prop(input, "default_value", text=input.name) + layout.prop(props, "geometry_source") + if props.geometry_source == "GEONODES": + row = layout.row(align=True) + row.prop_search(props, "geo_nodes", bpy.data, "node_groups") + if props.geo_nodes: + assert (modifier := tool.Model.get_epg_modifier(obj)) + inputs = tool.Model.get_parametric_geometry_inputs(modifier) + # NOTE: users won't be able to see inputs descriptions. + # If we add group node inputs as modifiers inputs, descriptions will be visible. + # But then we need to ensure inputs are up to date + # (e.g. probably just by adding a refresh button). + for input in inputs: + row = layout.row(align=True) + row.prop(input, "default_value", text=input.name) + elif props.geometry_source == "IFCSVERCHOK": + row = layout.row(align=True) + row.prop(props, "sverchok_nodes") + if props.sverchok_nodes: + # TODO: Updating mesh in `draw` is not ideal, + # should find a way to update only on graph changes. + res = tool.Model.update_mesh_from_sverchok(obj, props.sverchok_nodes) + if res is not None: + print(res) + layout.label(text=f"Error Updating from Graph, See System Console", icon="ERROR") def draw_door_properties(layout: bpy.types.UILayout, props: module_prop.BIMDoorProperties) -> None: diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index d4c85e8d87..2f4c4b77b7 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -54,6 +54,8 @@ T = TypeVar("T") V_ = tool.Blender.V_ if TYPE_CHECKING: + import sverchok.node_tree + import ifcsverchok.nodes.ifc.shape_builder.shape_output from bonsai.bim.module.model.prop import ( BIMModelProperties, BIMDoorProperties, @@ -2540,12 +2542,24 @@ class Model(bonsai.core.tool.Model): @classmethod def clean_up_parametric_geometry(cls, obj: bpy.types.Object) -> None: + # Geo nodes are using modifier. modifier = tool.Model.get_epg_modifier(obj) - assert modifier - node_tree = modifier.node_group - assert node_tree - bpy.data.node_groups.remove(node_tree) - obj.modifiers.clear() + if modifier is not None: + node_tree = modifier.node_group + assert node_tree + bpy.data.node_groups.remove(node_tree) + obj.modifiers.clear() + + # Sverchok are changing the mesh data to preview changes. + # TODO: probably should use modifiers with nodes and temp mesh instead. + active_representation = tool.Geometry.get_active_representation(obj) + assert active_representation is not None + bonsai.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj=obj, + representation=active_representation, + ) @classmethod def get_parametric_geometry_inputs(cls, modifier: bpy.types.NodesModifier) -> list[bpy.types.NodeSocket]: @@ -2557,6 +2571,51 @@ class Model(bonsai.core.tool.Model): return [s for s in group_node.inputs if s.type != "GEOMETRY"] + @classmethod + def get_ifcsverchok_shape_output( + cls, node_tree: sverchok.node_tree.SverchCustomTree + ) -> ifcsverchok.nodes.ifc.shape_builder.shape_output.SvSbShapeOutput: + from ifcsverchok.nodes.ifc.shape_builder.shape_output import SvSbShapeOutput + + return next(n for n in node_tree.nodes if isinstance(n, SvSbShapeOutput)) + + @classmethod + def update_mesh_from_sverchok( + cls, obj: bpy.types.Object, node_tree: sverchok.node_tree.SverchCustomTree + ) -> str | None: + """ + :return: ``None`` if successful, otherwise error message. + """ + import ifcsverchok.helper as helper + + output_node = cls.get_ifcsverchok_shape_output(node_tree) + verts = helper.get_socket_value(output_node.outputs, "Vers", value_type="CONTAINER") + edges = helper.get_socket_value(output_node.outputs, "Edgs", value_type="CONTAINER") + faces = helper.get_socket_value(output_node.outputs, "Pols", value_type="CONTAINER") + mesh = obj.data + assert isinstance(mesh, bpy.types.Mesh) + mesh.clear_geometry() + + # `shade_flat=False`, because `from_pydata` is using method that doesn't support changing shading + # during `Panel.draw` execution. We shade flat later ourselves. + mesh.from_pydata(verts, edges, faces, shade_flat=False) + + def _name_convention_attribute_ensure(attributes, name, domain, data_type): + try: + attribute = attributes[name] + except KeyError: + return attributes.new(name, data_type, domain) + if attribute.domain == domain and attribute.data_type == data_type: + return attribute + attributes.remove(attribute) + return attributes.new(name, data_type, domain) + + sharp_faces = _name_convention_attribute_ensure(mesh.attributes, "sharp_face", "FACE", "BOOLEAN") + assert isinstance(sharp_faces, bpy.types.BoolAttribute) + data = sharp_faces.data + ones = np.ones(len(data), dtype=bool) + data.foreach_set("value", ones) + @classmethod def align_objects( cls, From 5cadfd693f52f4545a474faaced89ed39b60aa8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 22:46:45 +0000 Subject: [PATCH 518/657] Bump ruff from 0.14.10 to 0.14.13 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.10 to 0.14.13. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.14.10...0.14.13) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.14.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8df2bb8091..b3f08435e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "IfcOpenShell" version = "0.0.0" dependencies = [ "black==25.12", - "ruff==0.14.10", + "ruff==0.14.13", "poethepoet", "gersemi==0.24", ] From 2065d4ce78c46dbd52ba739e5bbfd326df026844 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 17 Jan 2026 17:55:11 +1100 Subject: [PATCH 519/657] Minor optimisation to prevent looping through all verts twice in decorator draw --- src/bonsai/bonsai/bim/module/model/polyline.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index edd0b8981a..b389f2be1f 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -540,7 +540,7 @@ def get_generic_product_preview_data(context, relating_type): mouse_point = Vector((snap_prop.x, snap_prop.y, default_container_elevation)) snap_obj = bpy.data.objects.get(snap_prop.snap_object) snap_element = tool.Ifc.get_entity(snap_obj) - rot_mat = Quaternion() + rot_mat = Matrix() if relating_type.is_a() in ["IfcDoorType", "IfcWindowType"] and snap_element and snap_element.is_a("IfcWall"): layers = tool.Model.get_material_layer_parameters(snap_element) axes = tool.Model.get_wall_axis(snap_obj, layers=layers) @@ -550,10 +550,10 @@ def get_generic_product_preview_data(context, relating_type): point_on_side_axis = tool.Cad.point_on_edge(mouse_point, axis_side) if (point_on_base_axis - mouse_point).length_squared <= (point_on_side_axis - mouse_point).length_squared: # mouse is snapped to the base axis, the preview looks exactly like the placed door / window - rot_mat = snap_obj.matrix_world.to_quaternion() + rot_mat = snap_obj.matrix_world else: # mouse is snapped to the side axis, the preview is inverted, rotate it now and correct x position later - rot_mat = snap_obj.matrix_world.to_quaternion() @ Quaternion(Vector((0, 0, 1)), radians(180)) + rot_mat = (snap_obj.matrix_world.to_quaternion() @ Quaternion(Vector((0, 0, 1)), radians(180))).to_matrix().to_4x4() mouse_point.z = snap_obj.matrix_world.translation.z @@ -586,9 +586,11 @@ def get_generic_product_preview_data(context, relating_type): if obj_type.data: data = ItemDecorator.get_obj_data(obj_type) - data["verts"] = [tuple(obj_type.matrix_world.inverted() @ Vector(v)) for v in data["verts"]] - data["verts"] = [tuple(rot_mat @ (Vector((v[0], v[1], (v[2] + rl)))) + mouse_point) for v in data["verts"]] - + obj_type_matrix_i = obj_type.matrix_world.inverted() + translate_mouse = Matrix.Translation(mouse_point) + translate_rl = Matrix.Translation((0.0, 0.0, rl)) + combined_m = translate_mouse @ rot_mat @ translate_rl @ obj_type_matrix_i + data["verts"] = [tuple(combined_m @ Vector(v)) for v in data["verts"]] return data From 16a90cadb55d63319d5e7d60a255e3a0e4ab0952 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 17 Jan 2026 17:57:07 +1100 Subject: [PATCH 520/657] Cap product decorator at 500 triangles to prevent unresponsive UI during dense product placement --- .../bonsai/bim/module/geometry/decorator.py | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/decorator.py b/src/bonsai/bonsai/bim/module/geometry/decorator.py index 14f48d8eec..0888dd66c4 100644 --- a/src/bonsai/bonsai/bim/module/geometry/decorator.py +++ b/src/bonsai/bonsai/bim/module/geometry/decorator.py @@ -74,9 +74,28 @@ class ItemDecorator: special_verts = [] special_edges = [] - if len(obj.data.loop_triangles) > 0: - verts = [tuple(obj.matrix_world @ v.co) for v in obj.data.vertices] - tris = [tuple(t.vertices) for t in obj.data.loop_triangles] + if (total_triangles := len(obj.data.loop_triangles)) > 0: + # TODO: this is a far too small threshold. + # This is just a stopgap optimisation until other slowdowns are solved. + if total_triangles > 500: + vert_map = {} + i = 0 + verts = [] + tris = [] + for tri in obj.data.loop_triangles[:500]: + new_tri = [] + for vert in tri.vertices: + if vert in vert_map: + new_tri.append(vert_map[vert]) + else: + vert_map[vert] = i + new_tri.append(i) + i += 1 + verts.append(tuple(obj.matrix_world @ obj.data.vertices[vert].co)) + tris.append(new_tri) + else: + verts = [tuple(obj.matrix_world @ v.co) for v in obj.data.vertices] + tris = [tuple(t.vertices) for t in obj.data.loop_triangles] i = len(verts) matrix_world = obj.matrix_world From f3295e266359b89fb94e1fa7b4c6945f65e739e3 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sat, 17 Jan 2026 20:02:09 +0100 Subject: [PATCH 521/657] Refactor filter mode handling to simplify chained filters with set operations --- src/bonsai/bonsai/bim/helper.py | 47 ++++++++----------- .../bonsai/bim/module/search/operator.py | 5 +- src/bonsai/bonsai/bim/ui.py | 15 +----- src/bonsai/bonsai/tool/search.py | 25 ++-------- 4 files changed, 28 insertions(+), 64 deletions(-) diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index 1a92078be3..e81c483216 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -511,14 +511,15 @@ def draw_filter( row.operator("bim.edit_element_filter", icon="CHECKMARK", text="").filter_mode = "EXCLUDE" row.operator("bim.enable_editing_element_filter", icon="CANCEL", text="").filter_mode = "NONE" row = layout.row(align=True) - if not tool.Blender.get_addon_preferences().chain_filter_with_set_operations: + preferences = tool.Blender.get_addon_preferences() + if not preferences.chain_filter_with_set_operations: row.operator("bim.add_filter_group", text="Add Search Group", icon="ADD").module = module else: - if not filter_groups or not any(fg.filters for fg in filter_groups): - op = row.operator("bim.add_filter", text="Add Filter", icon="ADD") - op.type = "entity" - op.index = 0 - op.module = module + row.prop(sprops, "facet", text="") + op = row.operator("bim.add_filter", text="Add Filter", icon="ADD") + op.type = sprops.facet + op.index = 0 + op.module = module op = row.operator("bim.edit_filter_query", text="", icon="FILTER") if "module" in op.bl_rna.properties: op.module = module @@ -526,26 +527,23 @@ def draw_filter( for i, filter_group in enumerate(filter_groups): box = layout.box() - row = box.row(align=True) - row.prop(sprops, "facet", text="") - op = row.operator("bim.add_filter", text="Add Filter", icon="ADD") - op.type = sprops.facet - op.index = i - op.module = module - op = row.operator("bim.remove_filter_group", text="", icon="X") - op.index = i - op.module = module + preferences = tool.Blender.get_addon_preferences() + if not preferences.chain_filter_with_set_operations: + row = box.row(align=True) + row.prop(sprops, "facet", text="") + op = row.operator("bim.add_filter", text="Add Filter", icon="ADD") + op.type = sprops.facet + op.index = i + op.module = module + op = row.operator("bim.remove_filter_group", text="", icon="X") + op.index = i + op.module = module for j, ifc_filter in enumerate(filter_group.filters): if ifc_filter.type == "entity": row = box.row(align=True) preferences = tool.Blender.get_addon_preferences() - if preferences.chain_filter_with_set_operations: - show_mode_toggle = j > 0 - else: - show_mode_toggle = ( - preferences.default_filter_with_set_operations_for_globalid_and_class and j > 0 - ) # PR 7315 mode + show_mode_toggle = preferences.chain_filter_with_set_operations and j > 0 if show_mode_toggle: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( @@ -761,12 +759,7 @@ def draw_filter( elif ifc_filter.type == "instance": row = box.row(align=True) preferences = tool.Blender.get_addon_preferences() - if preferences.chain_filter_with_set_operations: - show_mode_toggle = j > 0 - else: - show_mode_toggle = ( - preferences.default_filter_with_set_operations_for_globalid_and_class and j > 0 - ) # PR 7315 mode + show_mode_toggle = preferences.chain_filter_with_set_operations and j > 0 if show_mode_toggle: mode_icons = {"ADD": "ADD", "SUBTRACT": "REMOVE", "FILTER": "FILTER"} op = row.operator( diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 2c7a506e78..62dd7efa36 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -765,10 +765,7 @@ class Search(Operator): preferences = tool.Blender.get_addon_preferences() # Migrate old ! prefix filters to new filter_mode system when preferences are enabled - if ( - preferences.chain_filter_with_set_operations - or preferences.default_filter_with_set_operations_for_globalid_and_class - ): + if preferences.chain_filter_with_set_operations: for filter_group in props.filter_groups: for ifc_filter in filter_group.filters: if ifc_filter.type not in ["entity", "instance"]: diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index c550c00872..49c2cf51b6 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -724,15 +724,10 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): ) chain_filter_with_set_operations: BoolProperty( - name="NEW filter mode: Enable chained filters with set operations", + name="NEW Filter mode: Enable chained filters with set operations", description="Enable chaining search filters with set operations: ADD (union: combine sets), SUBTRACT (difference: remove from set), FILTER (intersection: only elements in both sets), with autocomplete suggestions for filter values", default=False, ) - default_filter_with_set_operations_for_globalid_and_class: BoolProperty( - name="DEFAULT filter mode: Enable set operations for GlobalId/Class", - description="Enable ADD/SUBTRACT/FILTER toggle buttons on entity (Class) and instance (GlobalId) filters for the DEFAULT filter mode", - default=False, - ) save_metadata_blend_file: BoolProperty( name="Save non ifc data to metadata blend File", @@ -783,7 +778,6 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): container_hide_show_isolate: bool mass_time_units_in_wizard: bool chain_filter_with_set_operations: bool - default_filter_with_set_operations_for_globalid_and_class: bool save_metadata_blend_file: bool def draw(self, context: bpy.types.Context) -> None: @@ -979,14 +973,9 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): def draw_extras_settings(self, layout: bpy.types.UILayout, context: bpy.types.Context) -> None: layout.prop(self, "container_hide_show_isolate") layout.prop(self, "mass_time_units_in_wizard") - layout.label(text="Filtering modes:") - box = layout.box() - row = box.row(align=True) + row = layout.row(align=True) row.prop(self, "chain_filter_with_set_operations") row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/3270" - row = box.row(align=True) - row.prop(self, "default_filter_with_set_operations_for_globalid_and_class") - row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/comment/27030" layout.prop(self, "save_metadata_blend_file") if self.save_metadata_blend_file: row = layout.row() diff --git a/src/bonsai/bonsai/tool/search.py b/src/bonsai/bonsai/tool/search.py index a0e2e17456..439e3469b3 100644 --- a/src/bonsai/bonsai/tool/search.py +++ b/src/bonsai/bonsai/tool/search.py @@ -132,10 +132,7 @@ class Search(bonsai.core.tool.Search): else: value = ifc_filter.value - if ( - preferences.chain_filter_with_set_operations - or preferences.default_filter_with_set_operations_for_globalid_and_class - ): + if preferences.chain_filter_with_set_operations: value = value.lstrip("!") if ifc_filter.filter_mode == "SUBTRACT": value = f"!{value}" @@ -144,10 +141,7 @@ class Search(bonsai.core.tool.Search): elif ifc_filter.type == "entity": value = ifc_filter.value - if ( - preferences.chain_filter_with_set_operations - or preferences.default_filter_with_set_operations_for_globalid_and_class - ): + if preferences.chain_filter_with_set_operations: value = value.lstrip("!") if ifc_filter.filter_mode == "SUBTRACT": value = f"!{value}" @@ -215,19 +209,10 @@ class Search(bonsai.core.tool.Search): if filter_index == 0: mode = "ADD" else: - if ifc_filter.type in ["entity", "instance"]: - if ( - preferences.chain_filter_with_set_operations - or preferences.default_filter_with_set_operations_for_globalid_and_class - ): - mode = ifc_filter.filter_mode - else: - mode = "FILTER" if group_results else "ADD" + if preferences.chain_filter_with_set_operations: + mode = ifc_filter.filter_mode else: - if preferences.chain_filter_with_set_operations: - mode = ifc_filter.filter_mode - else: - mode = "FILTER" if group_results else "ADD" + mode = "FILTER" if group_results else "ADD" if mode == "ADD": results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) From 09d193045af3881175aee0643d4b7a9d50c939e4 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Sun, 18 Jan 2026 00:05:07 +0100 Subject: [PATCH 522/657] Enhance filter value suggestions to support enumerated properties in search --- .../bonsai/bim/module/search/operator.py | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 2c7a506e78..52992fc8a5 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -445,20 +445,17 @@ class FilterValueSuggestions(Operator): if pset.HasProperties: for prop in pset.HasProperties: if hasattr(prop, "Name") and prop.Name == property_name: - if hasattr(prop, "NominalValue") and prop.NominalValue: - try: - value = prop.NominalValue.wrappedValue - if value is not None and value != "": - if not hasattr(value, "is_a") and not isinstance( - value, (tuple, list) - ): - str_value = str(value) - if not str_value.startswith("#") and not str_value.startswith( - "(" - ): - property_values.add(str_value) - except: - continue + if prop.is_a("IfcPropertyEnumeratedValue"): + if hasattr(prop, "EnumerationReference") and prop.EnumerationReference: + enum_reference = prop.EnumerationReference + if hasattr(enum_reference, "EnumerationValues"): + for enum_value in enum_reference.EnumerationValues: + property_values.add(str(enum_value.wrappedValue)) + if hasattr(prop, "EnumerationValues") and prop.EnumerationValues: + for enum_value in prop.EnumerationValues: + property_values.add(str(enum_value.wrappedValue)) + elif hasattr(prop, "NominalValue") and prop.NominalValue: + property_values.add(str(prop.NominalValue.wrappedValue)) except: continue return property_values From 9e2b7ba7c81c6e1e7740f959de2c3dafcf4bc56c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 04:41:14 +0000 Subject: [PATCH 523/657] Bump tar from 7.4.3 to 7.5.3 in /src/ifctester/webapp Bumps [tar](https://github.com/isaacs/node-tar) from 7.4.3 to 7.5.3. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.4.3...v7.5.3) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- src/ifctester/webapp/package-lock.json | 33 +++++++------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/src/ifctester/webapp/package-lock.json b/src/ifctester/webapp/package-lock.json index 392c2dfe13..9b7f5b6058 100644 --- a/src/ifctester/webapp/package-lock.json +++ b/src/ifctester/webapp/package-lock.json @@ -1955,9 +1955,9 @@ } }, "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { @@ -1967,22 +1967,6 @@ "node": ">= 18" } }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mode-watcher": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mode-watcher/-/mode-watcher-1.1.0.tgz", @@ -2867,17 +2851,16 @@ } }, "node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz", + "integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", + "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { From 4c1b3221ce1416a23c048332bd47a706d53a58a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 04:41:16 +0000 Subject: [PATCH 524/657] Bump gersemi from 0.24 to 0.25.1 Bumps [gersemi](https://github.com/BlankSpruce/gersemi) from 0.24 to 0.25.1. - [Release notes](https://github.com/BlankSpruce/gersemi/releases) - [Changelog](https://github.com/BlankSpruce/gersemi/blob/master/CHANGELOG.md) - [Commits](https://github.com/BlankSpruce/gersemi/compare/0.24.0...0.25.1) --- updated-dependencies: - dependency-name: gersemi dependency-version: 0.25.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b3f08435e5..0c7914f541 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ dependencies = [ "black==25.12", "ruff==0.14.13", "poethepoet", - "gersemi==0.24", + "gersemi==0.25.1", ] [tool.black] From e55955b72a6f7d33ca7cbd7ca3deea4f474de8cd Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 21 Jan 2026 18:11:20 +1100 Subject: [PATCH 525/657] See #7566. Fix unusable lag due to dense meshes with product preview Previously, when the add occurrence modal operator was executed, on every modal loop (i.e. every mouse movement) it would fetch the mesh geometry to be previewed, store the verts / edges / faces in mesh collections, then the decorator would fetch that geometry, the clear the collections, in a loop. I've removed the Blender collections. Instead the same strategy is used as in ItemDecorator i.e. the mesh and verts are fetched once during decorator installation, then on each draw call only a single vertex loop to multiply by the transformation matrix for snapping and mouse position. You can test with the LOD400 model in #7566. On my machine it would cause lag on anything with >500 faces. Now it seems to work without lag on a 26k polygon mesh. --- .../bonsai/bim/module/geometry/decorator.py | 23 +- .../bonsai/bim/module/model/__init__.py | 3 - .../bonsai/bim/module/model/decorator.py | 593 +++++++++++++++++- .../bonsai/bim/module/model/polyline.py | 586 +---------------- src/bonsai/bonsai/bim/module/model/product.py | 2 - src/bonsai/bonsai/bim/module/model/profile.py | 3 - src/bonsai/bonsai/bim/module/model/prop.py | 11 - src/bonsai/bonsai/bim/module/model/slab.py | 3 - src/bonsai/bonsai/bim/module/model/wall.py | 3 - src/bonsai/bonsai/tool/model.py | 23 +- 10 files changed, 594 insertions(+), 656 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/decorator.py b/src/bonsai/bonsai/bim/module/geometry/decorator.py index 0888dd66c4..02cb4bd255 100644 --- a/src/bonsai/bonsai/bim/module/geometry/decorator.py +++ b/src/bonsai/bonsai/bim/module/geometry/decorator.py @@ -75,27 +75,8 @@ class ItemDecorator: special_edges = [] if (total_triangles := len(obj.data.loop_triangles)) > 0: - # TODO: this is a far too small threshold. - # This is just a stopgap optimisation until other slowdowns are solved. - if total_triangles > 500: - vert_map = {} - i = 0 - verts = [] - tris = [] - for tri in obj.data.loop_triangles[:500]: - new_tri = [] - for vert in tri.vertices: - if vert in vert_map: - new_tri.append(vert_map[vert]) - else: - vert_map[vert] = i - new_tri.append(i) - i += 1 - verts.append(tuple(obj.matrix_world @ obj.data.vertices[vert].co)) - tris.append(new_tri) - else: - verts = [tuple(obj.matrix_world @ v.co) for v in obj.data.vertices] - tris = [tuple(t.vertices) for t in obj.data.loop_triangles] + verts = [tuple(obj.matrix_world @ v.co) for v in obj.data.vertices] + tris = [tuple(t.vertices) for t in obj.data.loop_triangles] i = len(verts) matrix_world = obj.matrix_world diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index 47ef5a0343..c758aa7f54 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -140,7 +140,6 @@ classes = ( prop.BIMRailingProperties, prop.BIMRoofProperties, prop.BIMPolylineProperties, - prop.BIMProductPreviewProperties, prop.BIMExternalParametricGeometryProperties, ui.BIM_PT_array, ui.BIM_PT_stair, @@ -263,7 +262,6 @@ def register(): bpy.types.Scene.BIMModelProperties = bpy.props.PointerProperty(type=prop.BIMModelProperties) bpy.types.Scene.BIMPolylineProperties = bpy.props.PointerProperty(type=prop.BIMPolylineProperties) - bpy.types.Scene.BIMProductPreviewProperties = bpy.props.PointerProperty(type=prop.BIMProductPreviewProperties) bpy.types.Object.BIMArrayProperties = bpy.props.PointerProperty(type=prop.BIMArrayProperties) bpy.types.Object.BIMStairProperties = bpy.props.PointerProperty(type=prop.BIMStairProperties) bpy.types.Object.BIMSverchokProperties = bpy.props.PointerProperty(type=prop.BIMSverchokProperties) @@ -288,7 +286,6 @@ def unregister(): del bpy.types.Scene.BIMModelProperties del bpy.types.Scene.BIMPolylineProperties - del bpy.types.Scene.BIMProductPreviewProperties del bpy.types.Object.BIMArrayProperties del bpy.types.Object.BIMStairProperties del bpy.types.Object.BIMSverchokProperties diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index aad4c647ee..43d770828e 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -26,10 +26,10 @@ import ifcopenshell import bonsai.tool as tool import math import mathutils -from math import sin, cos, radians +from math import sin, cos, tan, radians from bpy.types import SpaceView3D from bpy_extras import view3d_utils -from mathutils import Vector, Matrix +from mathutils import Vector, Matrix, Quaternion from gpu_extras.batch import batch_for_shader from gpu_extras.presets import draw_circle_2d from typing import Union @@ -879,13 +879,43 @@ class PolylineDecorator: class ProductDecorator: is_installed = False handlers = [] + preview_mode: Literal["PROFILE_VERTICAL", "PROFILE_HORIZONTAL", "LAYER2", "LAYER3", "GENERIC"] relating_type = None + obj_data: dict[str, list] = {} + obj_matrix_i = None @classmethod def install(cls, context): + from bonsai.bim.module.geometry.decorator import ItemDecorator + if cls.is_installed: cls.uninstall() + + props = tool.Model.get_model_props() + handler = cls() + if ( + (props.relating_type_id) + and (relating_type := tool.Ifc.get().by_id(int(props.relating_type_id))) + and (relating_type_obj := tool.Ifc.get_object(relating_type)) + ): + handler.relating_type = relating_type + if tool.Model.get_usage_type(relating_type) == "PROFILE": + if relating_type.is_a() in {"IfcColumnType", "IfcPileType"}: + handler.preview_mode = "PROFILE_VERTICAL" + else: + handler.preview_mode = "PROFILE_HORIZONTAL" + elif tool.Model.get_usage_type(relating_type) == "LAYER2": + handler.preview_mode = "LAYER2" + elif tool.Model.get_usage_type(relating_type) == "LAYER3": + handler.preview_mode = "LAYER3" + else: + handler.preview_mode = "GENERIC" + if relating_type_obj.data: + handler.obj_data = ItemDecorator.get_obj_data(relating_type_obj) + handler.obj_data["raw_verts"] = [Vector(v) for v in handler.obj_data["verts"]] + handler.obj_matrix_i = relating_type_obj.matrix_world.inverted() + cls.handlers.append( SpaceView3D.draw_handler_add(handler.draw_product_preview, (context,), "WINDOW", "POST_VIEW") ) @@ -893,10 +923,6 @@ class ProductDecorator: @classmethod def uninstall(cls): - props = tool.Model.get_product_preview_props() # updated by model/polyline.py - props.verts.clear() - props.edges.clear() - props.tris.clear() for handler in cls.handlers: try: SpaceView3D.draw_handler_remove(handler, "WINDOW") @@ -912,14 +938,6 @@ class ProductDecorator: shader.uniform_float("color", color) batch.draw(shader) - def get_product_preview_data(self, context) -> dict[str, Any]: - props = tool.Model.get_product_preview_props() - data: dict[str, Any] = {} - data["verts"] = [(*v.value_3d,) for v in props.verts] - data["edges"] = [(int(e.value_2d[0]), int(e.value_2d[1])) for e in props.edges] - data["tris"] = [(int(t.value_3d[0]), int(t.value_3d[1]), int(t.value_3d[2])) for t in props.tris] - return data - def draw_product_preview(self, context): def transparent_color(color, alpha=0.1): color = [i for i in color] @@ -945,12 +963,549 @@ class ProductDecorator: else: return - product_preview_data = self.get_product_preview_data(context) - if product_preview_data: - self.draw_batch("LINES", product_preview_data["verts"], decorator_color, product_preview_data["edges"]) - self.draw_batch( - "TRIS", product_preview_data["verts"], transparent_color(decorator_color), product_preview_data["tris"] + if self.preview_mode == "LAYER2": + data = self.get_wall_preview_data() + elif self.preview_mode == "LAYER3": + data = self.get_slab_preview_data() + elif self.preview_mode == "PROFILE_VERTICAL": + data = self.get_vertical_profile_preview_data() + elif self.preview_mode == "PROFILE_HORIZONTAL": + data = self.get_horizontal_profile_preview_data() + elif self.preview_mode == "GENERIC": + data = self.get_generic_preview_data() + if data: + self.draw_batch("LINES", data["verts"], decorator_color, data["edges"]) + self.draw_batch("TRIS", data["verts"], transparent_color(decorator_color), data["tris"]) + + def get_wall_preview_data(self): + relating_type = self.relating_type + # Get properties from object type + model_props = tool.Model.get_model_props() + direction_sense = model_props.direction_sense + direction = 1 + if direction_sense == "NEGATIVE": + direction = -1 + + layers = tool.Model.get_material_layer_parameters(relating_type) + if not layers["thickness"]: + return + thickness = layers["thickness"] + thickness *= direction + + offset_type = model_props.offset_type_vertical + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + offset = model_props.offset * unit_scale + + height = float(model_props.extrusion_depth) + rl = float(model_props.rl1) + x_angle = float(model_props.x_angle) + if x_angle > radians(90) or x_angle < radians(-90): + height *= -1 + angle_distance = height * tan(x_angle) + thickness *= 1 / cos(x_angle) + + data = {} + data["verts"] = [] + + # Verts + polyline_vertices = [] + polyline_props = tool.Model.get_polyline_props() + polyline_data = polyline_props.insertion_polyline + polyline_points = polyline_data[0].polyline_points if polyline_data else [] + if len(polyline_points) < 2: + data = [] + return + for point in polyline_points: + polyline_vertices.append(Vector((point.x, point.y, point.z))) + + is_closed = False + if ( + polyline_vertices[0].x == polyline_vertices[-1].x + and polyline_vertices[0].y == polyline_vertices[-1].y + and polyline_vertices[0].z == polyline_vertices[-1].z + ): + is_closed = True + polyline_vertices.pop(-1) # Remove the last point. The edges are going to inform that the shape is closed. + + bm_base = tool.Model.create_bmesh_from_vertices(polyline_vertices, is_closed) + base_vertices = tool.Cad.offset_edges(bm_base, offset) + offset_base_verts = tool.Cad.offset_edges(bm_base, thickness + offset) + top_vertices = tool.Cad.offset_edges(bm_base, angle_distance + offset) + offset_top_verts = tool.Cad.offset_edges(bm_base, angle_distance + thickness + offset) + if is_closed: + base_vertices.append(base_vertices[0]) + offset_base_verts.append(offset_base_verts[0]) + top_vertices.append(top_vertices[0]) + offset_top_verts.append(offset_top_verts[0]) + + if offset_base_verts is not None: + for v in base_vertices: + data["verts"].append((v.co.x, v.co.y, v.co.z + rl)) + + for v in offset_base_verts[::-1]: + data["verts"].append((v.co.x, v.co.y, v.co.z + rl)) + + for v in top_vertices: + data["verts"].append((v.co.x, v.co.y, v.co.z + rl + height)) + + for v in offset_top_verts[::-1]: + data["verts"].append((v.co.x, v.co.y, v.co.z + rl + height)) + + bm_base.free() + + # Edges and Tris + points = [] + side_edges_1 = [] + side_edges_2 = [] + base_edges = [] + + for i in range(len(data["verts"])): + points.append(Vector(data["verts"][i])) + + n = len(points) // 2 + bottom_side_1 = [[i, (i + 1) % (n)] for i in range((n - 1) // 2)] + bottom_side_2 = [[i, (i + 1) % (n)] for i in range(n // 2, n - 1)] + bottom_connections = [[i, n - i - 1] for i in range(n // 2)] + bottom_loop = bottom_connections + bottom_side_1 + bottom_side_2 + side_edges_1.extend(bottom_side_1) + side_edges_2.extend(bottom_side_2) + base_edges.extend(bottom_loop) + + upper_side_1 = [[i + n for i in edges] for edges in bottom_side_1] + upper_side_2 = [[i + n for i in edges] for edges in bottom_side_2] + upper_loop = [[i + n for i in edges] for edges in bottom_loop] + side_edges_1.extend(upper_side_1) + side_edges_2.extend(upper_side_2) + base_edges.extend(upper_loop) + + loops = [side_edges_1, side_edges_2, base_edges] + + data["edges"] = [] + data["tris"] = [] + for i, group in enumerate(loops): + bm = bmesh.new() + + new_verts = [bm.verts.new(v) for v in points] + new_edges = [bm.edges.new((new_verts[e[0]], new_verts[e[1]])) for e in group] + + bm.verts.index_update() + bm.edges.index_update() + + if i == 2: + new_faces = bmesh.ops.contextual_create(bm, geom=bm.edges) + new_faces = bmesh.ops.bridge_loops(bm, edges=bm.edges, use_pairs=True, use_cyclic=True) + + bm.verts.index_update() + bm.edges.index_update() + edges = [[v.index for v in e.verts] for e in bm.edges] + tris = [[l.vert.index for l in loop] for loop in bm.calc_loop_triangles()] + data["edges"].extend(edges) + data["tris"].extend(tris) + + data["edges"] = list(set(tuple(e) for e in data["edges"])) + data["tris"] = list(set(tuple(t) for t in data["tris"])) + return data + + def get_slab_preview_data(self): + relating_type = self.relating_type + model_props = tool.Model.get_model_props() + x_angle = 0 if tool.Cad.is_x(model_props.x_angle, 0, tolerance=0.001) else model_props.x_angle + direction_sense = model_props.direction_sense + direction = 1 + if direction_sense == "NEGATIVE": + direction = -1 + + layers = tool.Model.get_material_layer_parameters(relating_type) + if not layers["thickness"]: + return + thickness = layers["thickness"] * abs(1 / cos(x_angle)) + thickness *= direction + + offset_type = model_props.offset_type_horizontal + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + offset = model_props.offset * abs(1 / cos(x_angle)) * unit_scale + + data = {} + data["verts"] = [] + # Verts + polyline_vertices = [] + polyline_props = tool.Model.get_polyline_props() + polyline_data = polyline_props.insertion_polyline + polyline_points = polyline_data[0].polyline_points if polyline_data else [] + if len(polyline_points) < 3: + data = [] + return + for point in polyline_points: + polyline_vertices.append(Vector((point.x, point.y, point.z))) + if x_angle: + # Get vertices relative to the first polyline point as origin + local_vertices = [v - Vector(polyline_vertices[0]) for v in polyline_vertices] + # Make the transformation relative to the x_angle + transformed_vertices = [Vector((v.x, v.y * (1 / cos(x_angle)), v.z)) for v in local_vertices] + # Convert back to world origin + polyline_vertices = [v + Vector(polyline_vertices[0]) for v in transformed_vertices] + if offset != 0: + polyline_vertices = [v + Vector((0, 0, offset)) for v in polyline_vertices] + is_closed = True + if ( + polyline_vertices[0].x == polyline_vertices[-1].x + and polyline_vertices[0].y == polyline_vertices[-1].y + and polyline_vertices[0].z == polyline_vertices[-1].z + ): + polyline_vertices.pop(-1) # Remove the last point. The edges are going to inform that the shape is closed. + bm = tool.Model.create_bmesh_from_vertices(polyline_vertices, is_closed) + bm.verts.ensure_lookup_table() + if x_angle: + rot_mat = Matrix.Rotation(x_angle, 3, "X") + if abs(x_angle) > (pi / 2): + rot_mat = rot_mat @ Matrix.Scale(-1, 3, (0, 1, 0)) + bmesh.ops.rotate(bm, cent=Vector(bm.verts[0].co), verts=bm.verts, matrix=rot_mat) + new_faces = bmesh.ops.contextual_create(bm, geom=bm.edges) + new_faces = bmesh.ops.extrude_face_region(bm, geom=bm.edges[:] + bm.faces[:]) + new_verts = [e for e in new_faces["geom"] if isinstance(e, bmesh.types.BMVert)] + new_faces = bmesh.ops.translate(bm, verts=new_verts, vec=(0.0, 0.0, thickness)) + bm.verts.index_update() + bm.edges.index_update() + verts = [tuple(v.co) for v in bm.verts] + edges = [[v.index for v in e.verts] for e in bm.edges] + tris = [[loop.vert.index for loop in triangles] for triangles in bm.calc_loop_triangles()] + data["verts"] = verts + data["edges"] = edges + data["tris"] = tris + return data + + def get_vertical_profile_preview_data(self) -> dict[str, Any]: + relating_type = self.relating_type + material = ifcopenshell.util.element.get_material(relating_type) + try: + profile = material.MaterialProfiles[0].Profile + except: + return {} + + model_props = tool.Model.get_model_props() + extrusion_depth = model_props.extrusion_depth + cardinal_point = model_props.cardinal_point + rot_mat = Quaternion() + if relating_type.is_a("IfcBeamType"): + y_rot = Quaternion((0.0, 1.0, 0.0), radians(90)) + z_rot = Quaternion((0.0, 0.0, 1.0), radians(90)) + rot_mat = y_rot @ z_rot + # Get profile data + settings = ifcopenshell.geom.settings() + settings.set("dimensionality", ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS) + shape = ifcopenshell.geom.create_shape(settings, profile) + + verts = shape.verts + if not verts: + raise RuntimeError(f"Profile shape has no vertices, it probably is invalid: '{profile}'.") + + edges = shape.edges + + grouped_verts = [[verts[i], verts[i + 1], 0] for i in range(0, len(verts), 3)] + grouped_edges = [[edges[i], edges[i + 1]] for i in range(0, len(edges), 2)] + + # Create offsets based on cardinal point + min_x = min(v[0] for v in grouped_verts) + max_x = max(v[0] for v in grouped_verts) + min_y = min(v[1] for v in grouped_verts) + max_y = max(v[1] for v in grouped_verts) + + x_offset = (max_x - min_x) / 2 + y_offset = (max_y - min_y) / 2 + + match cardinal_point: + case "1": + grouped_verts = [(v[0] - x_offset, v[1] + y_offset, v[2]) for v in grouped_verts] + case "2": + grouped_verts = [(v[0], v[1] + y_offset, v[2]) for v in grouped_verts] + case "3": + grouped_verts = [(v[0] + x_offset, v[1] + y_offset, v[2]) for v in grouped_verts] + case "4": + grouped_verts = [(v[0] - x_offset, v[1], v[2]) for v in grouped_verts] + case "5": + grouped_verts = [(v[0], v[1], v[2]) for v in grouped_verts] + case "6": + grouped_verts = [(v[0] + x_offset, v[1], v[2]) for v in grouped_verts] + case "7": + grouped_verts = [(v[0] - x_offset, v[1] - y_offset, v[2]) for v in grouped_verts] + case "8": + grouped_verts = [(v[0], v[1] - y_offset, v[2]) for v in grouped_verts] + case "9": + grouped_verts = [(v[0] + x_offset, v[1] - y_offset, v[2]) for v in grouped_verts] + + # Create extrusion bmesh + bm = bmesh.new() + + grouped_verts.append(grouped_verts[0]) # Close profile + new_verts = [bm.verts.new(v) for v in grouped_verts] + new_edges = [bm.edges.new((new_verts[i], new_verts[i + 1])) for i in range(len(grouped_verts) - 1)] + + bm.verts.index_update() + bm.edges.index_update() + + bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=0.001) + + new_faces = bmesh.ops.contextual_create(bm, geom=bm.edges) + + new_faces = bmesh.ops.extrude_face_region(bm, geom=bm.faces, use_dissolve_ortho_edges=True) + new_verts = [e for e in new_faces["geom"] if isinstance(e, bmesh.types.BMVert)] + new_faces = bmesh.ops.translate(bm, verts=new_verts, vec=(0.0, 0.0, extrusion_depth)) + + bm.verts.index_update() + bm.edges.index_update() + tris = [[loop.vert.index for loop in triangles] for triangles in bm.calc_loop_triangles()] + + # Calculate rotation, mouse position, angle and cardinal point + polyline_props = tool.Model.get_polyline_props() + snap_prop = polyline_props.snap_mouse_point[0] + mouse_point = Vector((snap_prop.x, snap_prop.y, snap_prop.z)) + data = {} + + verts = [tuple(v.co) for v in bm.verts] + verts = [tuple(rot_mat @ Vector(v)) for v in verts] + verts = [tuple(Vector(v) + mouse_point) for v in verts] + min_z = min(v.co.z for v in bm.verts) + max_z = max(v.co.z for v in bm.verts) + # Add axis verts + verts.append(tuple(mouse_point)) + verts.append(tuple(mouse_point + Vector((0, 0, max_z)))) + # Add only profile edges + edges = [] + for edge in bm.edges: + if (edge.verts[0].co.z == min_z and edge.verts[1].co.z == min_z) or ( + edge.verts[0].co.z == max_z and edge.verts[1].co.z == max_z + ): + edges.append(edge) + # Add axis edge + edges = [(edge.verts[0].index, edge.verts[1].index) for edge in edges] + edges.append((len(verts) - 1, len(verts) - 2)) + data["verts"] = verts + data["edges"] = edges + data["tris"] = tris + + bm.free() + return data + + def get_horizontal_profile_preview_data(self) -> dict[str, Any]: + relating_type = self.relating_type + material = ifcopenshell.util.element.get_material(relating_type) + try: + profile_curve = material.MaterialProfiles[0].Profile + except: + return {} + + model_props = tool.Model.get_model_props() + cardinal_point = model_props.cardinal_point + + polyline_verts = [] + polyline_props = tool.Model.get_polyline_props() + polyline_data = polyline_props.insertion_polyline + polyline_points = polyline_data[0].polyline_points if polyline_data else [] + if len(polyline_points) < 2: + return {} + for point in polyline_points: + polyline_verts.append(Vector((point.x, point.y, point.z))) + polyline_edges = [(i, i + 1) for i in range(len(polyline_verts) - 1)] + + # Get profile shape + settings = ifcopenshell.geom.settings() + settings.set("dimensionality", ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS) + shape = ifcopenshell.geom.create_shape(settings, profile_curve) + + verts = shape.verts + if not verts: + raise RuntimeError(f"Profile shape has no vertices, it probably is invalid: '{profile_curve}'.") + + edges = shape.edges + + grouped_verts = [[verts[i], verts[i + 1], 0] for i in range(0, len(verts), 3)] + grouped_edges = [[edges[i], edges[i + 1]] for i in range(0, len(edges), 2)] + + # Create offsets based on cardinal point + min_x = min(v[0] for v in grouped_verts) + max_x = max(v[0] for v in grouped_verts) + min_y = min(v[1] for v in grouped_verts) + max_y = max(v[1] for v in grouped_verts) + + x_offset = (max_x - min_x) / 2 + y_offset = (max_y - min_y) / 2 + + match cardinal_point: + case "1": + grouped_verts = [(v[0] - x_offset, v[1] + y_offset, v[2]) for v in grouped_verts] + case "2": + grouped_verts = [(v[0], v[1] + y_offset, v[2]) for v in grouped_verts] + case "3": + grouped_verts = [(v[0] + x_offset, v[1] + y_offset, v[2]) for v in grouped_verts] + case "4": + grouped_verts = [(v[0] - x_offset, v[1], v[2]) for v in grouped_verts] + case "5": + grouped_verts = [(v[0], v[1], v[2]) for v in grouped_verts] + case "6": + grouped_verts = [(v[0] + x_offset, v[1], v[2]) for v in grouped_verts] + case "7": + grouped_verts = [(v[0] - x_offset, v[1] - y_offset, v[2]) for v in grouped_verts] + case "8": + grouped_verts = [(v[0], v[1] - y_offset, v[2]) for v in grouped_verts] + case "9": + grouped_verts = [(v[0] + x_offset, v[1] - y_offset, v[2]) for v in grouped_verts] + + data: dict[str, Any] = {} + data["verts"] = [] + data["edges"] = [] + data["tris"] = [] + + grouped_verts = [(v) for v in grouped_verts] + + all_bm = bmesh.new() + for i in range(len(polyline_verts) - 1): + mesh = bpy.data.meshes.new("TempMesh") + # Create the initial mesh from the profile verts + bm = tool.Model.create_bmesh_from_vertices(grouped_verts, is_closed=True) + bm.verts.ensure_lookup_table() + # Creates the clipping plane formed by two segments. + # The first one is for the profile start, based on the current and previous segment of the polyline. + # The second is for the profile end, based on the current and the next segment. + if i == 0: + d = (polyline_verts[i + 1] - polyline_verts[i]).normalized() + clip_start = d + else: + d1 = (polyline_verts[i] - polyline_verts[i - 1]).normalized() + d2 = (polyline_verts[i] - polyline_verts[i + 1]).normalized() + clip_start = (d1 - d2).normalized() + + if i == len(polyline_verts) - 2: + d = (polyline_verts[i + 1] - polyline_verts[i]).normalized() + clip_end = d + else: + d1 = (polyline_verts[i + 1] - polyline_verts[i]).normalized() + d2 = (polyline_verts[i + 1] - polyline_verts[i + 2]).normalized() + clip_end = (d1 - d2).normalized() + + # Rotates the profile face to the right direction + direction = polyline_verts[i + 1] - polyline_verts[i] + position = polyline_verts[i] + rotation_matrix = direction.to_track_quat("Z", "Y").to_matrix().to_4x4() + bmesh.ops.transform(bm, verts=bm.verts, matrix=rotation_matrix) + bmesh.ops.translate(bm, verts=bm.verts, vec=position) + bmesh.ops.translate(bm, verts=bm.verts, vec=-direction) + + # Extrude and move the new face + last_face = bmesh.ops.extrude_face_region(bm, geom=bm.edges[:] + bm.faces[:]) + new_verts = [e for e in last_face["geom"] if isinstance(e, bmesh.types.BMVert)] + bmesh.ops.translate(bm, verts=new_verts, vec=direction * 3) + # Apply the cutting planes + cut = bmesh.ops.bisect_plane( + bm, + geom=bm.verts[:] + bm.edges[:] + bm.faces[:], + plane_co=polyline_verts[i], + plane_no=clip_start, + clear_inner=True, ) + bm.verts.index_update() + bm.edges.index_update() + cut = bmesh.ops.bisect_plane( + bm, + geom=bm.verts[:] + bm.edges[:] + bm.faces[:], + plane_co=polyline_verts[i + 1], + plane_no=clip_end, + clear_outer=True, + ) + + bm.to_mesh(mesh) + bm.free() + mesh.update() + all_bm.from_mesh(mesh) + bpy.data.meshes.remove(bpy.data.meshes["TempMesh"]) + + # It's necessary to add the mesh to an object to get the expected result. + mesh = bpy.data.meshes.new("TempMesh2") + all_bm.to_mesh(mesh) + all_bm.free() + obj = bpy.data.objects.new("TempObj", mesh) + bm = bmesh.new() + bm.from_mesh(obj.data) + bpy.data.meshes.remove(bpy.data.meshes["TempMesh2"]) + + verts = [tuple(v.co) for v in bm.verts] + edges = [[v.index for v in e.verts] for e in bm.edges] + tris = [[loop.vert.index for loop in triangles] for triangles in bm.calc_loop_triangles()] + data["verts"] = verts + data["edges"] = edges + data["tris"] = tris + bm.free() + return data + + def get_generic_preview_data(self): + if not (data := self.obj_data): + return + relating_type = self.relating_type + model_props = tool.Model.get_model_props() + if relating_type.is_a("IfcDoorType"): + rl = float(model_props.rl1) + elif relating_type.is_a("IfcWindowType"): + rl = float(model_props.rl2) + else: + rl = 0 + polyline_props = tool.Model.get_polyline_props() + snap_prop = polyline_props.snap_mouse_point[0] + default_container_elevation = tool.Root.get_default_container_elevation() + mouse_point = Vector((snap_prop.x, snap_prop.y, default_container_elevation)) + snap_obj = bpy.data.objects.get(snap_prop.snap_object) + snap_element = tool.Ifc.get_entity(snap_obj) + rot_mat = Matrix() + if relating_type.is_a() in ["IfcDoorType", "IfcWindowType"] and snap_element and snap_element.is_a("IfcWall"): + layers = tool.Model.get_material_layer_parameters(snap_element) + axes = tool.Model.get_wall_axis(snap_obj, layers=layers) + axis_base = axes["base"] + axis_side = axes["side"] + point_on_base_axis = tool.Cad.point_on_edge(mouse_point, axis_base) + point_on_side_axis = tool.Cad.point_on_edge(mouse_point, axis_side) + if (point_on_base_axis - mouse_point).length_squared <= (point_on_side_axis - mouse_point).length_squared: + # mouse is snapped to the base axis, the preview looks exactly like the placed door / window + rot_mat = snap_obj.matrix_world + else: + # mouse is snapped to the side axis, the preview is inverted, rotate it now and correct x position later + rot_mat = ( + (snap_obj.matrix_world.to_quaternion() @ Quaternion(Vector((0, 0, 1)), radians(180))) + .to_matrix() + .to_4x4() + ) + + mouse_point.z = snap_obj.matrix_world.translation.z + + if snap_element and (container := ifcopenshell.util.element.get_container(snap_element)): + container_obj = tool.Ifc.get_object(container) + mouse_point.z = container_obj.location.z + + obj_type = tool.Ifc.get_object(relating_type) + + subcontexts = tool.Drawing.get_active_drawing_subcontexts() + if not subcontexts: + subcontexts = [("Model", "Body", "MODEL_VIEW")] + + active_context = tool.Geometry.get_active_representation_context(obj_type) + active_context_params = tool.Geometry.get_subcontext_parameters(active_context) + for subcontext in subcontexts: + if subcontext == active_context_params: + break + + representation = ifcopenshell.util.representation.get_representation(relating_type, *subcontext) + if representation: + bonsai.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj_type, + representation, + ) + context.view_layer.update() + break + + translate_mouse = Matrix.Translation(mouse_point) + translate_rl = Matrix.Translation((0.0, 0.0, rl)) + combined_m = translate_mouse @ rot_mat @ translate_rl @ self.obj_matrix_i + data["verts"] = [tuple(combined_m @ v) for v in data["raw_verts"]] + return data class WallAxisDecorator: diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index b389f2be1f..d2514321f3 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -35,565 +35,12 @@ import bonsai.core.root import bonsai.core.geometry import bonsai.core.model as core import bonsai.tool as tool -from math import pi, sin, cos, degrees, tan, radians -from mathutils import Vector, Matrix, Quaternion -from bonsai.bim.module.model.opening import FilledOpeningGenerator +from mathutils import Vector from bonsai.bim.module.model.decorator import PolylineDecorator -from bonsai.bim.module.geometry.decorator import ItemDecorator from typing import Optional, Union, Literal, Any from lark import Lark, Transformer -def create_bmesh_from_vertices(vertices, is_closed=False): - bm = bmesh.new() - - new_verts = [bm.verts.new(v) for v in vertices] - if is_closed: - new_edges = [bm.edges.new((new_verts[i], new_verts[i + 1])) for i in range(len(new_verts) - 1)] - new_edges.append( - bm.edges.new((new_verts[-1], new_verts[0])) - ) # Add an edge between the last an first point to make it closed. - else: - new_edges = [bm.edges.new((new_verts[i], new_verts[i + 1])) for i in range(len(new_verts) - 1)] - - bm.verts.index_update() - bm.edges.index_update() - return bm - - -def get_wall_preview_data(context, relating_type): - # Get properties from object type - model_props = tool.Model.get_model_props() - direction_sense = model_props.direction_sense - direction = 1 - if direction_sense == "NEGATIVE": - direction = -1 - - layers = tool.Model.get_material_layer_parameters(relating_type) - if not layers["thickness"]: - return - thickness = layers["thickness"] - thickness *= direction - - offset_type = model_props.offset_type_vertical - unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - offset = model_props.offset * unit_scale - - height = float(model_props.extrusion_depth) - rl = float(model_props.rl1) - x_angle = float(model_props.x_angle) - if x_angle > radians(90) or x_angle < radians(-90): - height *= -1 - angle_distance = height * tan(x_angle) - thickness *= 1 / cos(x_angle) - - data = {} - data["verts"] = [] - - # Verts - polyline_vertices = [] - polyline_props = tool.Model.get_polyline_props() - polyline_data = polyline_props.insertion_polyline - polyline_points = polyline_data[0].polyline_points if polyline_data else [] - if len(polyline_points) < 2: - data = [] - return - for point in polyline_points: - polyline_vertices.append(Vector((point.x, point.y, point.z))) - - is_closed = False - if ( - polyline_vertices[0].x == polyline_vertices[-1].x - and polyline_vertices[0].y == polyline_vertices[-1].y - and polyline_vertices[0].z == polyline_vertices[-1].z - ): - is_closed = True - polyline_vertices.pop(-1) # Remove the last point. The edges are going to inform that the shape is closed. - - bm_base = create_bmesh_from_vertices(polyline_vertices, is_closed) - base_vertices = tool.Cad.offset_edges(bm_base, offset) - offset_base_verts = tool.Cad.offset_edges(bm_base, thickness + offset) - top_vertices = tool.Cad.offset_edges(bm_base, angle_distance + offset) - offset_top_verts = tool.Cad.offset_edges(bm_base, angle_distance + thickness + offset) - if is_closed: - base_vertices.append(base_vertices[0]) - offset_base_verts.append(offset_base_verts[0]) - top_vertices.append(top_vertices[0]) - offset_top_verts.append(offset_top_verts[0]) - - if offset_base_verts is not None: - for v in base_vertices: - data["verts"].append((v.co.x, v.co.y, v.co.z + rl)) - - for v in offset_base_verts[::-1]: - data["verts"].append((v.co.x, v.co.y, v.co.z + rl)) - - for v in top_vertices: - data["verts"].append((v.co.x, v.co.y, v.co.z + rl + height)) - - for v in offset_top_verts[::-1]: - data["verts"].append((v.co.x, v.co.y, v.co.z + rl + height)) - - bm_base.free() - - # Edges and Tris - points = [] - side_edges_1 = [] - side_edges_2 = [] - base_edges = [] - - for i in range(len(data["verts"])): - points.append(Vector(data["verts"][i])) - - n = len(points) // 2 - bottom_side_1 = [[i, (i + 1) % (n)] for i in range((n - 1) // 2)] - bottom_side_2 = [[i, (i + 1) % (n)] for i in range(n // 2, n - 1)] - bottom_connections = [[i, n - i - 1] for i in range(n // 2)] - bottom_loop = bottom_connections + bottom_side_1 + bottom_side_2 - side_edges_1.extend(bottom_side_1) - side_edges_2.extend(bottom_side_2) - base_edges.extend(bottom_loop) - - upper_side_1 = [[i + n for i in edges] for edges in bottom_side_1] - upper_side_2 = [[i + n for i in edges] for edges in bottom_side_2] - upper_loop = [[i + n for i in edges] for edges in bottom_loop] - side_edges_1.extend(upper_side_1) - side_edges_2.extend(upper_side_2) - base_edges.extend(upper_loop) - - loops = [side_edges_1, side_edges_2, base_edges] - - data["edges"] = [] - data["tris"] = [] - for i, group in enumerate(loops): - bm = bmesh.new() - - new_verts = [bm.verts.new(v) for v in points] - new_edges = [bm.edges.new((new_verts[e[0]], new_verts[e[1]])) for e in group] - - bm.verts.index_update() - bm.edges.index_update() - - if i == 2: - new_faces = bmesh.ops.contextual_create(bm, geom=bm.edges) - new_faces = bmesh.ops.bridge_loops(bm, edges=bm.edges, use_pairs=True, use_cyclic=True) - - bm.verts.index_update() - bm.edges.index_update() - edges = [[v.index for v in e.verts] for e in bm.edges] - tris = [[l.vert.index for l in loop] for loop in bm.calc_loop_triangles()] - data["edges"].extend(edges) - data["tris"].extend(tris) - - data["edges"] = list(set(tuple(e) for e in data["edges"])) - data["tris"] = list(set(tuple(t) for t in data["tris"])) - - return data - - -def get_slab_preview_data(context, relating_type): - model_props = tool.Model.get_model_props() - x_angle = 0 if tool.Cad.is_x(model_props.x_angle, 0, tolerance=0.001) else model_props.x_angle - direction_sense = model_props.direction_sense - direction = 1 - if direction_sense == "NEGATIVE": - direction = -1 - - layers = tool.Model.get_material_layer_parameters(relating_type) - if not layers["thickness"]: - return - thickness = layers["thickness"] * abs(1 / cos(x_angle)) - thickness *= direction - - offset_type = model_props.offset_type_horizontal - unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - offset = model_props.offset * abs(1 / cos(x_angle)) * unit_scale - - data = {} - data["verts"] = [] - # Verts - polyline_vertices = [] - polyline_props = tool.Model.get_polyline_props() - polyline_data = polyline_props.insertion_polyline - polyline_points = polyline_data[0].polyline_points if polyline_data else [] - if len(polyline_points) < 3: - data = [] - return - for point in polyline_points: - polyline_vertices.append(Vector((point.x, point.y, point.z))) - if x_angle: - # Get vertices relative to the first polyline point as origin - local_vertices = [v - Vector(polyline_vertices[0]) for v in polyline_vertices] - # Make the transformation relative to the x_angle - transformed_vertices = [Vector((v.x, v.y * (1 / cos(x_angle)), v.z)) for v in local_vertices] - # Convert back to world origin - polyline_vertices = [v + Vector(polyline_vertices[0]) for v in transformed_vertices] - if offset != 0: - polyline_vertices = [v + Vector((0, 0, offset)) for v in polyline_vertices] - is_closed = True - if ( - polyline_vertices[0].x == polyline_vertices[-1].x - and polyline_vertices[0].y == polyline_vertices[-1].y - and polyline_vertices[0].z == polyline_vertices[-1].z - ): - polyline_vertices.pop(-1) # Remove the last point. The edges are going to inform that the shape is closed. - bm = create_bmesh_from_vertices(polyline_vertices, is_closed) - bm.verts.ensure_lookup_table() - if x_angle: - rot_mat = Matrix.Rotation(x_angle, 3, "X") - if abs(x_angle) > (pi / 2): - rot_mat = rot_mat @ Matrix.Scale(-1, 3, (0, 1, 0)) - bmesh.ops.rotate(bm, cent=Vector(bm.verts[0].co), verts=bm.verts, matrix=rot_mat) - new_faces = bmesh.ops.contextual_create(bm, geom=bm.edges) - new_faces = bmesh.ops.extrude_face_region(bm, geom=bm.edges[:] + bm.faces[:]) - new_verts = [e for e in new_faces["geom"] if isinstance(e, bmesh.types.BMVert)] - new_faces = bmesh.ops.translate(bm, verts=new_verts, vec=(0.0, 0.0, thickness)) - bm.verts.index_update() - bm.edges.index_update() - verts = [tuple(v.co) for v in bm.verts] - edges = [[v.index for v in e.verts] for e in bm.edges] - tris = [[loop.vert.index for loop in triangles] for triangles in bm.calc_loop_triangles()] - data["verts"] = verts - data["edges"] = edges - data["tris"] = tris - return data - - -def get_vertical_profile_preview_data( - context: bpy.types.Context, relating_type: ifcopenshell.entity_instance -) -> dict[str, Any]: - material = ifcopenshell.util.element.get_material(relating_type) - try: - profile = material.MaterialProfiles[0].Profile - except: - return {} - - model_props = tool.Model.get_model_props() - extrusion_depth = model_props.extrusion_depth - cardinal_point = model_props.cardinal_point - rot_mat = Quaternion() - if relating_type.is_a("IfcBeamType"): - y_rot = Quaternion((0.0, 1.0, 0.0), radians(90)) - z_rot = Quaternion((0.0, 0.0, 1.0), radians(90)) - rot_mat = y_rot @ z_rot - # Get profile data - settings = ifcopenshell.geom.settings() - settings.set("dimensionality", ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS) - shape = ifcopenshell.geom.create_shape(settings, profile) - - verts = shape.verts - if not verts: - raise RuntimeError(f"Profile shape has no vertices, it probably is invalid: '{profile}'.") - - edges = shape.edges - - grouped_verts = [[verts[i], verts[i + 1], 0] for i in range(0, len(verts), 3)] - grouped_edges = [[edges[i], edges[i + 1]] for i in range(0, len(edges), 2)] - - # Create offsets based on cardinal point - min_x = min(v[0] for v in grouped_verts) - max_x = max(v[0] for v in grouped_verts) - min_y = min(v[1] for v in grouped_verts) - max_y = max(v[1] for v in grouped_verts) - - x_offset = (max_x - min_x) / 2 - y_offset = (max_y - min_y) / 2 - - match cardinal_point: - case "1": - grouped_verts = [(v[0] - x_offset, v[1] + y_offset, v[2]) for v in grouped_verts] - case "2": - grouped_verts = [(v[0], v[1] + y_offset, v[2]) for v in grouped_verts] - case "3": - grouped_verts = [(v[0] + x_offset, v[1] + y_offset, v[2]) for v in grouped_verts] - case "4": - grouped_verts = [(v[0] - x_offset, v[1], v[2]) for v in grouped_verts] - case "5": - grouped_verts = [(v[0], v[1], v[2]) for v in grouped_verts] - case "6": - grouped_verts = [(v[0] + x_offset, v[1], v[2]) for v in grouped_verts] - case "7": - grouped_verts = [(v[0] - x_offset, v[1] - y_offset, v[2]) for v in grouped_verts] - case "8": - grouped_verts = [(v[0], v[1] - y_offset, v[2]) for v in grouped_verts] - case "9": - grouped_verts = [(v[0] + x_offset, v[1] - y_offset, v[2]) for v in grouped_verts] - - # Create extrusion bmesh - bm = bmesh.new() - - grouped_verts.append(grouped_verts[0]) # Close profile - new_verts = [bm.verts.new(v) for v in grouped_verts] - new_edges = [bm.edges.new((new_verts[i], new_verts[i + 1])) for i in range(len(grouped_verts) - 1)] - - bm.verts.index_update() - bm.edges.index_update() - - bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=0.001) - - new_faces = bmesh.ops.contextual_create(bm, geom=bm.edges) - - new_faces = bmesh.ops.extrude_face_region(bm, geom=bm.faces, use_dissolve_ortho_edges=True) - new_verts = [e for e in new_faces["geom"] if isinstance(e, bmesh.types.BMVert)] - new_faces = bmesh.ops.translate(bm, verts=new_verts, vec=(0.0, 0.0, extrusion_depth)) - - bm.verts.index_update() - bm.edges.index_update() - tris = [[loop.vert.index for loop in triangles] for triangles in bm.calc_loop_triangles()] - - # Calculate rotation, mouse position, angle and cardinal point - polyline_props = tool.Model.get_polyline_props() - snap_prop = polyline_props.snap_mouse_point[0] - mouse_point = Vector((snap_prop.x, snap_prop.y, snap_prop.z)) - data = {} - - verts = [tuple(v.co) for v in bm.verts] - verts = [tuple(rot_mat @ Vector(v)) for v in verts] - verts = [tuple(Vector(v) + mouse_point) for v in verts] - min_z = min(v.co.z for v in bm.verts) - max_z = max(v.co.z for v in bm.verts) - # Add axis verts - verts.append(tuple(mouse_point)) - verts.append(tuple(mouse_point + Vector((0, 0, max_z)))) - # Add only profile edges - edges = [] - for edge in bm.edges: - if (edge.verts[0].co.z == min_z and edge.verts[1].co.z == min_z) or ( - edge.verts[0].co.z == max_z and edge.verts[1].co.z == max_z - ): - edges.append(edge) - # Add axis edge - edges = [(edge.verts[0].index, edge.verts[1].index) for edge in edges] - edges.append((len(verts) - 1, len(verts) - 2)) - data["verts"] = verts - data["edges"] = edges - data["tris"] = tris - - bm.free() - - return data - - -def get_horizontal_profile_preview_data( - context: bpy.types.Context, relating_type: ifcopenshell.entity_instance -) -> dict[str, Any]: - material = ifcopenshell.util.element.get_material(relating_type) - try: - profile_curve = material.MaterialProfiles[0].Profile - except: - return {} - - model_props = tool.Model.get_model_props() - cardinal_point = model_props.cardinal_point - - polyline_verts = [] - polyline_props = tool.Model.get_polyline_props() - polyline_data = polyline_props.insertion_polyline - polyline_points = polyline_data[0].polyline_points if polyline_data else [] - if len(polyline_points) < 2: - return {} - for point in polyline_points: - polyline_verts.append(Vector((point.x, point.y, point.z))) - polyline_edges = [(i, i + 1) for i in range(len(polyline_verts) - 1)] - - # Get profile shape - settings = ifcopenshell.geom.settings() - settings.set("dimensionality", ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS) - shape = ifcopenshell.geom.create_shape(settings, profile_curve) - - verts = shape.verts - if not verts: - raise RuntimeError(f"Profile shape has no vertices, it probably is invalid: '{profile_curve}'.") - - edges = shape.edges - - grouped_verts = [[verts[i], verts[i + 1], 0] for i in range(0, len(verts), 3)] - grouped_edges = [[edges[i], edges[i + 1]] for i in range(0, len(edges), 2)] - - # Create offsets based on cardinal point - min_x = min(v[0] for v in grouped_verts) - max_x = max(v[0] for v in grouped_verts) - min_y = min(v[1] for v in grouped_verts) - max_y = max(v[1] for v in grouped_verts) - - x_offset = (max_x - min_x) / 2 - y_offset = (max_y - min_y) / 2 - - match cardinal_point: - case "1": - grouped_verts = [(v[0] - x_offset, v[1] + y_offset, v[2]) for v in grouped_verts] - case "2": - grouped_verts = [(v[0], v[1] + y_offset, v[2]) for v in grouped_verts] - case "3": - grouped_verts = [(v[0] + x_offset, v[1] + y_offset, v[2]) for v in grouped_verts] - case "4": - grouped_verts = [(v[0] - x_offset, v[1], v[2]) for v in grouped_verts] - case "5": - grouped_verts = [(v[0], v[1], v[2]) for v in grouped_verts] - case "6": - grouped_verts = [(v[0] + x_offset, v[1], v[2]) for v in grouped_verts] - case "7": - grouped_verts = [(v[0] - x_offset, v[1] - y_offset, v[2]) for v in grouped_verts] - case "8": - grouped_verts = [(v[0], v[1] - y_offset, v[2]) for v in grouped_verts] - case "9": - grouped_verts = [(v[0] + x_offset, v[1] - y_offset, v[2]) for v in grouped_verts] - - data: dict[str, Any] = {} - data["verts"] = [] - data["edges"] = [] - data["tris"] = [] - - grouped_verts = [(v) for v in grouped_verts] - - all_bm = bmesh.new() - for i in range(len(polyline_verts) - 1): - mesh = bpy.data.meshes.new("TempMesh") - # Create the initial mesh from the profile verts - bm = create_bmesh_from_vertices(grouped_verts, is_closed=True) - bm.verts.ensure_lookup_table() - # Creates the clipping plane formed by two segments. - # The first one is for the profile start, based on the current and previous segment of the polyline. - # The second is for the profile end, based on the current and the next segment. - if i == 0: - d = (polyline_verts[i + 1] - polyline_verts[i]).normalized() - clip_start = d - else: - d1 = (polyline_verts[i] - polyline_verts[i - 1]).normalized() - d2 = (polyline_verts[i] - polyline_verts[i + 1]).normalized() - clip_start = (d1 - d2).normalized() - - if i == len(polyline_verts) - 2: - d = (polyline_verts[i + 1] - polyline_verts[i]).normalized() - clip_end = d - else: - d1 = (polyline_verts[i + 1] - polyline_verts[i]).normalized() - d2 = (polyline_verts[i + 1] - polyline_verts[i + 2]).normalized() - clip_end = (d1 - d2).normalized() - - # Rotates the profile face to the right direction - direction = polyline_verts[i + 1] - polyline_verts[i] - position = polyline_verts[i] - rotation_matrix = direction.to_track_quat("Z", "Y").to_matrix().to_4x4() - bmesh.ops.transform(bm, verts=bm.verts, matrix=rotation_matrix) - bmesh.ops.translate(bm, verts=bm.verts, vec=position) - bmesh.ops.translate(bm, verts=bm.verts, vec=-direction) - - # Extrude and move the new face - last_face = bmesh.ops.extrude_face_region(bm, geom=bm.edges[:] + bm.faces[:]) - new_verts = [e for e in last_face["geom"] if isinstance(e, bmesh.types.BMVert)] - bmesh.ops.translate(bm, verts=new_verts, vec=direction * 3) - # Apply the cutting planes - cut = bmesh.ops.bisect_plane( - bm, - geom=bm.verts[:] + bm.edges[:] + bm.faces[:], - plane_co=polyline_verts[i], - plane_no=clip_start, - clear_inner=True, - ) - bm.verts.index_update() - bm.edges.index_update() - cut = bmesh.ops.bisect_plane( - bm, - geom=bm.verts[:] + bm.edges[:] + bm.faces[:], - plane_co=polyline_verts[i + 1], - plane_no=clip_end, - clear_outer=True, - ) - - bm.to_mesh(mesh) - bm.free() - mesh.update() - all_bm.from_mesh(mesh) - bpy.data.meshes.remove(bpy.data.meshes["TempMesh"]) - - # It's necessary to add the mesh to an object to get the expected result. - mesh = bpy.data.meshes.new("TempMesh2") - all_bm.to_mesh(mesh) - all_bm.free() - obj = bpy.data.objects.new("TempObj", mesh) - bm = bmesh.new() - bm.from_mesh(obj.data) - bpy.data.meshes.remove(bpy.data.meshes["TempMesh2"]) - - verts = [tuple(v.co) for v in bm.verts] - edges = [[v.index for v in e.verts] for e in bm.edges] - tris = [[loop.vert.index for loop in triangles] for triangles in bm.calc_loop_triangles()] - data["verts"] = verts - data["edges"] = edges - data["tris"] = tris - bm.free() - return data - - -def get_generic_product_preview_data(context, relating_type): - model_props = tool.Model.get_model_props() - if relating_type.is_a("IfcDoorType"): - rl = float(model_props.rl1) - elif relating_type.is_a("IfcWindowType"): - rl = float(model_props.rl2) - else: - rl = 0 - polyline_props = tool.Model.get_polyline_props() - snap_prop = polyline_props.snap_mouse_point[0] - default_container_elevation = tool.Root.get_default_container_elevation() - mouse_point = Vector((snap_prop.x, snap_prop.y, default_container_elevation)) - snap_obj = bpy.data.objects.get(snap_prop.snap_object) - snap_element = tool.Ifc.get_entity(snap_obj) - rot_mat = Matrix() - if relating_type.is_a() in ["IfcDoorType", "IfcWindowType"] and snap_element and snap_element.is_a("IfcWall"): - layers = tool.Model.get_material_layer_parameters(snap_element) - axes = tool.Model.get_wall_axis(snap_obj, layers=layers) - axis_base = axes["base"] - axis_side = axes["side"] - point_on_base_axis = tool.Cad.point_on_edge(mouse_point, axis_base) - point_on_side_axis = tool.Cad.point_on_edge(mouse_point, axis_side) - if (point_on_base_axis - mouse_point).length_squared <= (point_on_side_axis - mouse_point).length_squared: - # mouse is snapped to the base axis, the preview looks exactly like the placed door / window - rot_mat = snap_obj.matrix_world - else: - # mouse is snapped to the side axis, the preview is inverted, rotate it now and correct x position later - rot_mat = (snap_obj.matrix_world.to_quaternion() @ Quaternion(Vector((0, 0, 1)), radians(180))).to_matrix().to_4x4() - - mouse_point.z = snap_obj.matrix_world.translation.z - - if snap_element and (container := ifcopenshell.util.element.get_container(snap_element)): - container_obj = tool.Ifc.get_object(container) - mouse_point.z = container_obj.location.z - - obj_type = tool.Ifc.get_object(relating_type) - - subcontexts = tool.Drawing.get_active_drawing_subcontexts() - if not subcontexts: - subcontexts = [("Model", "Body", "MODEL_VIEW")] - - active_context = tool.Geometry.get_active_representation_context(obj_type) - active_context_params = tool.Geometry.get_subcontext_parameters(active_context) - for subcontext in subcontexts: - if subcontext == active_context_params: - break - - representation = ifcopenshell.util.representation.get_representation(relating_type, *subcontext) - if representation: - bonsai.core.geometry.switch_representation( - tool.Ifc, - tool.Geometry, - obj_type, - representation, - ) - context.view_layer.update() - break - - if obj_type.data: - data = ItemDecorator.get_obj_data(obj_type) - obj_type_matrix_i = obj_type.matrix_world.inverted() - translate_mouse = Matrix.Translation(mouse_point) - translate_rl = Matrix.Translation((0.0, 0.0, rl)) - combined_m = translate_mouse @ rot_mat @ translate_rl @ obj_type_matrix_i - data["verts"] = [tuple(combined_m @ Vector(v)) for v in data["verts"]] - return data - - class PolylineOperator: # TODO Fill doc strings """ """ @@ -989,37 +436,6 @@ class PolylineOperator: tool.Blender.update_viewport() return {"RUNNING_MODAL"} - def get_product_preview_data(self, context: bpy.types.Context, relating_type: ifcopenshell.entity_instance) -> None: - if tool.Model.get_usage_type(relating_type) == "PROFILE": - if relating_type.is_a() in {"IfcColumnType", "IfcPileType"}: - data = get_vertical_profile_preview_data(context, relating_type) - else: - data = get_horizontal_profile_preview_data(context, relating_type) - elif tool.Model.get_usage_type(relating_type) == "LAYER2": - data = get_wall_preview_data(context, relating_type) - elif tool.Model.get_usage_type(relating_type) == "LAYER3": - data = get_slab_preview_data(context, relating_type) - else: - data = get_generic_product_preview_data(context, relating_type) - - # Update properties so it can be used by the decorator - props = tool.Model.get_product_preview_props() - props.verts.clear() - props.edges.clear() - props.tris.clear() - if not data: - return - - for vert in data["verts"]: - v = props.verts.add() - v.value_3d = vert - for edge in data["edges"]: - e = props.edges.add() - e.value_2d = edge - for tri in data["tris"]: - t = props.tris.add() - t.value_3d = tri - def set_offset(self, context: bpy.types.Context, relating_type: ifcopenshell.entity_instance) -> None: props = tool.Model.get_model_props() direction_sense = props.direction_sense diff --git a/src/bonsai/bonsai/bim/module/model/product.py b/src/bonsai/bonsai/bim/module/model/product.py index c08ff9131b..191a9406fe 100644 --- a/src/bonsai/bonsai/bim/module/model/product.py +++ b/src/bonsai/bonsai/bim/module/model/product.py @@ -249,8 +249,6 @@ class DrawOccurrence(bpy.types.Operator, PolylineOperator, tool.Ifc.Operator): if event.value == "RELEASE" and event.type == "LEFTMOUSE": self.create_occurrence(context, event) - self.get_product_preview_data(context, self.relating_type) - cancel = self.handle_cancelation(context, event) if cancel is not None: ProductDecorator.uninstall() diff --git a/src/bonsai/bonsai/bim/module/model/profile.py b/src/bonsai/bonsai/bim/module/model/profile.py index ecc1b86163..80c7ccc20e 100644 --- a/src/bonsai/bonsai/bim/module/model/profile.py +++ b/src/bonsai/bonsai/bim/module/model/profile.py @@ -1189,11 +1189,8 @@ class DrawPolylineProfile(bpy.types.Operator, PolylineOperator, tool.Ifc.Operato return {"FINISHED"} self.handle_keyboard_input(context, event) - self.handle_inserting_polyline(context, event) - self.get_product_preview_data(context, self.relating_type) - cancel = self.handle_cancelation(context, event) if cancel is not None: ProductDecorator.uninstall() diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index b26466aa15..4c3466d325 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -1697,17 +1697,6 @@ class ProductPreviewItem(PropertyGroup): value_2d: tuple[float, float] -class BIMProductPreviewProperties(PropertyGroup): - verts: bpy.props.CollectionProperty(type=ProductPreviewItem) - edges: bpy.props.CollectionProperty(type=ProductPreviewItem) - tris: bpy.props.CollectionProperty(type=ProductPreviewItem) - - if TYPE_CHECKING: - verts: bpy.types.bpy_prop_collection_idprop[ProductPreviewItem] - edges: bpy.types.bpy_prop_collection_idprop[ProductPreviewItem] - tris: bpy.types.bpy_prop_collection_idprop[ProductPreviewItem] - - def update_is_editing(self: "BIMExternalParametricGeometryProperties", context: bpy.types.Context) -> None: if self.is_editing: return diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index 4c9e89bf41..b6046df18d 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -1135,11 +1135,8 @@ class DrawPolylineSlab(bpy.types.Operator, PolylineOperator, tool.Ifc.Operator): return {"FINISHED"} self.handle_keyboard_input(context, event) - self.handle_inserting_polyline(context, event) - self.get_product_preview_data(context, self.relating_type) - cancel = self.handle_cancelation(context, event) if cancel is not None: ProductDecorator.uninstall() diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index d652041125..d343bc75ae 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -787,11 +787,8 @@ class DrawPolylineWall(bpy.types.Operator, PolylineOperator, tool.Ifc.Operator): return {"FINISHED"} self.handle_keyboard_input(context, event) - self.handle_inserting_polyline(context, event) - self.get_product_preview_data(context, self.relating_type) - cancel = self.handle_cancelation(context, event) if cancel is not None: ProductDecorator.uninstall() diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 2f4c4b77b7..a81681652c 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -66,7 +66,6 @@ if TYPE_CHECKING: BIMRailingProperties, BIMExternalParametricGeometryProperties, BIMPolylineProperties, - BIMProductPreviewProperties, ) @@ -108,11 +107,6 @@ class Model(bonsai.core.tool.Model): assert (scene := bpy.context.scene) return scene.BIMPolylineProperties # pyright: ignore[reportAttributeAccessIssue] - @classmethod - def get_product_preview_props(cls) -> BIMProductPreviewProperties: - assert (scene := bpy.context.scene) - return scene.BIMProductPreviewProperties # pyright: ignore[reportAttributeAccessIssue] - @classmethod def convert_si_to_unit(cls, value: T) -> T: if isinstance(value, (tuple, list)): @@ -2750,3 +2744,20 @@ class Model(bonsai.core.tool.Model): list(nodes_to_update) finally: SvIfcStore.use_bonsai_file = False + + @classmethod + def create_bmesh_from_vertices(cls, vertices, is_closed=False): + bm = bmesh.new() + + new_verts = [bm.verts.new(v) for v in vertices] + if is_closed: + new_edges = [bm.edges.new((new_verts[i], new_verts[i + 1])) for i in range(len(new_verts) - 1)] + new_edges.append( + bm.edges.new((new_verts[-1], new_verts[0])) + ) # Add an edge between the last an first point to make it closed. + else: + new_edges = [bm.edges.new((new_verts[i], new_verts[i + 1])) for i in range(len(new_verts) - 1)] + + bm.verts.index_update() + bm.edges.index_update() + return bm From db52703ce317c152b0ee677ee4505fde352b9463 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 21 Jan 2026 18:52:27 +1100 Subject: [PATCH 526/657] Revert "Use hide_set() for IfcSpaces instead of hide_viewport" This reverts commit 96fe9b5398e26f6d53c3e7e0dadd4dfc67acf514. This commit contains a logical error where hide_viewport is checked in the if statement but hide_set() is used as the effect. This causes a regression in tests about project visibility. `hide_viewport` is the correct hiding setting to use, because hide_set is more ephemeral and affected by Shift-H, Alt-H etc. --- src/bonsai/bonsai/bim/import_ifc.py | 8 -------- src/bonsai/bonsai/tool/collector.py | 6 ++++-- src/bonsai/bonsai/tool/spatial.py | 8 ++++---- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 58f6a67065..04dd612a8b 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -290,7 +290,6 @@ class IfcImporter: self.profile_code("Load linked models") self.add_project_to_scene() self.profile_code("Add project to scene") - self.hide_ifc_spaces() if self.ifc_import_settings.should_clean_mesh and len(self.file.by_type("IfcElement")) < 1000: self.clean_mesh() self.profile_code("Mesh cleaning") @@ -1287,13 +1286,6 @@ class IfcImporter: properties={"Aggregate_Index": aggregate_index, "Name": name}, ) - def hide_ifc_spaces(self): - """Hide IfcSpace objects after they've been added to the scene.""" - for ifc_definition_id, obj in self.added_data.items(): - if isinstance(obj, bpy.types.Object): - element = self.file.by_id(ifc_definition_id) - if element.is_a("IfcSpace"): - obj.hide_set(True) class IfcImportSettings: diff --git a/src/bonsai/bonsai/tool/collector.py b/src/bonsai/bonsai/tool/collector.py index 7c46135b26..c357287a6b 100644 --- a/src/bonsai/bonsai/tool/collector.py +++ b/src/bonsai/bonsai/tool/collector.py @@ -50,12 +50,12 @@ class Collector(bonsai.core.tool.Collector): tool.Geometry.lock_object(obj) element = (element.PartOfU or element.PartOfV or element.PartOfW)[0] if not tool.Spatial.get_grid_props().is_visible: - obj.hide_set(True) + obj.hide_viewport = True elif element.is_a("IfcGrid"): if tool.Geometry.is_locked(element): tool.Geometry.lock_object(obj) if not tool.Spatial.get_grid_props().is_visible: - obj.hide_set(True) + obj.hide_viewport = True if element.is_a("IfcProject"): if tool.Geometry.is_locked(element): @@ -71,6 +71,8 @@ class Collector(bonsai.core.tool.Collector): tool.Geometry.lock_object(obj) collection = cls._create_project_child_collection("IfcSpace") cls.link_collection_object_safe(collection, obj) + if not tool.Spatial.get_spatial_props().is_visible: + obj.hide_viewport = True elif element.is_a("IfcStructuralItem"): collection = cls._create_project_child_collection("IfcStructuralItem") cls.link_collection_object_safe(collection, obj) diff --git a/src/bonsai/bonsai/tool/spatial.py b/src/bonsai/bonsai/tool/spatial.py index 6ca29343e9..a177a237e8 100644 --- a/src/bonsai/bonsai/tool/spatial.py +++ b/src/bonsai/bonsai/tool/spatial.py @@ -1213,18 +1213,18 @@ class Spatial(bonsai.core.tool.Spatial): for element in elements: if obj := tool.Ifc.get_object(element): if obj.hide_viewport is True and is_visible: - obj.hide_set(False) + obj.hide_viewport = False elif obj.hide_viewport is False and not is_visible: - obj.hide_set(True) + obj.hide_viewport = True @classmethod def set_grid_visibility(cls, is_visible: bool) -> None: for element in tool.Ifc.get().by_type("IfcGrid") + tool.Ifc.get().by_type("IfcGridAxis"): if obj := tool.Ifc.get_object(element): if obj.hide_viewport is True and is_visible: - obj.hide_set(False) + obj.hide_viewport = False elif obj.hide_viewport is False and not is_visible: - obj.hide_set(True) + obj.hide_viewport = True @classmethod def toggle_spaces_visibility_wired_and_textured(cls, spaces: list[ifcopenshell.entity_instance]) -> None: From 41c6eba193230b7d12f03b8feedcb6bfcfdd1709 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 21 Jan 2026 19:43:37 +1100 Subject: [PATCH 527/657] IfcTester should not check requirements for prohibited specifications --- src/bonsai/bonsai/bim/import_ifc.py | 1 - src/ifctester/ifctester/ids.py | 16 ++++------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 04dd612a8b..05bcbed01a 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -1287,7 +1287,6 @@ class IfcImporter: ) - class IfcImportSettings: """ Initialize only using `IfcImportSettings.factory()`. diff --git a/src/ifctester/ifctester/ids.py b/src/ifctester/ifctester/ids.py index ea21aa15fd..d7403e2594 100644 --- a/src/ifctester/ifctester/ids.py +++ b/src/ifctester/ifctester/ids.py @@ -300,23 +300,15 @@ class Specification: if not is_applicable: continue self.applicable_entities.append(element) - for facet in self.requirements: - result = facet(element) - is_pass = bool(result) - if self.maxOccurs != 0: # This is a required or optional specification - if is_pass: + if self.maxOccurs != 0: # Requirements are skipped for prohibited applicability + for facet in self.requirements: + result = facet(element) + if bool(result): self.passed_entities.add(element) facet.passed_entities.add(element) else: self.failed_entities.add(element) facet.failures.append(FacetFailure(element=element, reason=str(result))) - else: # This is a prohibited specification - if is_pass: - self.failed_entities.add(element) - facet.failures.append(FacetFailure(element=element, reason=str(result))) - else: - self.passed_entities.add(element) - facet.passed_entities.add(element) self.status = True for facet in self.requirements: From c33969d589a7d9db044170513183dc80b7fce382 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 21 Jan 2026 16:24:11 +0500 Subject: [PATCH 528/657] ifcsverchok - correct socket type for position --- src/ifcsverchok/nodes/ifc/shape_builder/extrude.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py b/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py index 3b984dd4d7..44fd47cebc 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py @@ -21,6 +21,7 @@ from typing import TYPE_CHECKING, Literal import bpy import ifcopenshell from ifcopenshell.util.shape_builder import ShapeBuilder +from sverchok.core.sockets import SvVerticesSocket from sverchok.data_structure import updateNode from sverchok.node_tree import SverchCustomTreeNode @@ -62,6 +63,7 @@ class SvIfcSbExtrude(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.Sv self.inputs, "Position", data_type="list[list[tuple[float, float, float]]]", + socket_type=SvVerticesSocket, ) helper.create_socket( self.outputs, From 784415e464e87a752e5da4d8811513b749583723 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 21 Jan 2026 16:44:07 +0500 Subject: [PATCH 529/657] ifcsverchok bonsai integration - support editing parametric properties from UI Demo - https://files.catbox.moe/extsxf.mp4 But now it requires ifcsverchok graph to be nested inside a subgroup because we need a way to indicate which graph parameters are important, so user can modify them from Parametric Geometry tab without actually explicitly opening sverchok graph. --- src/bonsai/bonsai/bim/module/model/ui.py | 9 +++++++++ src/bonsai/bonsai/tool/model.py | 11 ++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index 86beea6079..ab528fb0fc 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -694,6 +694,15 @@ class BIM_PT_external_parametric_geometry(bpy.types.Panel): print(res) layout.label(text=f"Error Updating from Graph, See System Console", icon="ERROR") + layout.label(text="Parameters:") + box = layout.box() + + group_node = tool.Model.get_ifcsverchok_group_node(props.sverchok_nodes) + node_tree = group_node.node_tree + + for socket, interface_socket in zip(group_node.inputs, node_tree.sockets("INPUT")): + socket.draw_group_property(box, socket.name, interface_socket) + def draw_door_properties(layout: bpy.types.UILayout, props: module_prop.BIMDoorProperties) -> None: """Draw door properties UI (shared between properties panel and preferences).""" diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index a81681652c..28506bd8db 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -67,6 +67,7 @@ if TYPE_CHECKING: BIMExternalParametricGeometryProperties, BIMPolylineProperties, ) + from sverchok.core.node_group import SvGroupTreeNode class Model(bonsai.core.tool.Model): @@ -2565,13 +2566,21 @@ class Model(bonsai.core.tool.Model): return [s for s in group_node.inputs if s.type != "GEOMETRY"] + @classmethod + def get_ifcsverchok_group_node(cls, node_tree: sverchok.node_tree.SverchCustomTree) -> SvGroupTreeNode: + from sverchok.core.node_group import SvGroupTreeNode + + return next(n for n in node_tree.nodes if isinstance(n, SvGroupTreeNode) and n.label == "BBIM_EPG") + @classmethod def get_ifcsverchok_shape_output( cls, node_tree: sverchok.node_tree.SverchCustomTree ) -> ifcsverchok.nodes.ifc.shape_builder.shape_output.SvSbShapeOutput: from ifcsverchok.nodes.ifc.shape_builder.shape_output import SvSbShapeOutput - return next(n for n in node_tree.nodes if isinstance(n, SvSbShapeOutput)) + group_node = cls.get_ifcsverchok_group_node(node_tree) + subtree = group_node.node_tree + return next(n for n in subtree.nodes if isinstance(n, SvSbShapeOutput)) @classmethod def update_mesh_from_sverchok( From 64865c58a5677fac183dd357615dd56614fadbe5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 21 Jan 2026 16:47:33 +0500 Subject: [PATCH 530/657] remove debug print --- src/bonsai/bonsai/bim/module/model/ui.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index ab528fb0fc..0d9aea58cd 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -691,7 +691,6 @@ class BIM_PT_external_parametric_geometry(bpy.types.Panel): # should find a way to update only on graph changes. res = tool.Model.update_mesh_from_sverchok(obj, props.sverchok_nodes) if res is not None: - print(res) layout.label(text=f"Error Updating from Graph, See System Console", icon="ERROR") layout.label(text="Parameters:") From 421d454ce82bc896f16ee8519ef660178cb8887f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 21 Jan 2026 17:38:26 +0500 Subject: [PATCH 531/657] Fix missing `Literal` import --- src/bonsai/bonsai/bim/module/model/decorator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index 43d770828e..e9435eea99 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -35,7 +35,7 @@ from gpu_extras.presets import draw_circle_2d from typing import Union from bonsai.bim.module.drawing.helper import format_distance from itertools import chain -from typing import Union, Any +from typing import Union, Any, Literal from bpy_extras.view3d_utils import location_3d_to_region_2d From 0cc3ce870924a41ae5abf9456a939a62f186229d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 21:19:22 +0000 Subject: [PATCH 532/657] Bump tar from 7.5.3 to 7.5.6 in /src/ifctester/webapp Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.3 to 7.5.6. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.3...v7.5.6) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- src/ifctester/webapp/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ifctester/webapp/package-lock.json b/src/ifctester/webapp/package-lock.json index 9b7f5b6058..35d03c74fa 100644 --- a/src/ifctester/webapp/package-lock.json +++ b/src/ifctester/webapp/package-lock.json @@ -2851,9 +2851,9 @@ } }, "node_modules/tar": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz", - "integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", + "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { From f89cf88bc0974db51384b863c059eeee6e5aee41 Mon Sep 17 00:00:00 2001 From: falken10vdl <33285113+falken10vdl@users.noreply.github.com> Date: Wed, 21 Jan 2026 23:26:18 +0100 Subject: [PATCH 533/657] Add use_factory_startup to src/bonsai/test/bim/test_feature.py def an_empty_blender_session() This addresses https://github.com/IfcOpenShell/IfcOpenShell/issues/7590 Cheers! --- src/bonsai/test/bim/test_feature.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 64d7e7cb27..036e0bf464 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -337,7 +337,7 @@ def an_untestable_scenario(): def an_empty_blender_session(): IfcStore.purge() if not PYTEST_BLENDER_NO_BACKGROUND: - bpy.ops.wm.read_homefile(app_template="") + bpy.ops.wm.read_homefile(app_template="", use_factory_startup=True) if len(bpy.data.objects) > 0: bpy.data.batch_remove(bpy.data.objects) bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True) From aafa1b95e854f9881202e071c3e6271fcf28b44a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Mell=C3=BCh?= <74136980+c-mellueh@users.noreply.github.com> Date: Thu, 22 Jan 2026 00:19:09 +0100 Subject: [PATCH 534/657] bSDD Add new class properties and relations API Endpoints (#7502) * black . * add typing * move function * add get_class_relations * add test for class relation --------- Co-authored-by: Dion Moult --- src/bsdd/bsdd.py | 122 ++++++++++++++++++++++++++++++++++++ src/bsdd/tests/test_bsdd.py | 16 +++++ 2 files changed, 138 insertions(+) diff --git a/src/bsdd/bsdd.py b/src/bsdd/bsdd.py index 87154855ae..ff633095bf 100644 --- a/src/bsdd/bsdd.py +++ b/src/bsdd/bsdd.py @@ -184,6 +184,78 @@ class ClassPropertyContractV1(TypedDict): qudtCodes: NotRequired[list[str]] +class ClassRelationItemContractV1(TypedDict): + relationType: str + classUri: str + className: NotRequired[str] + fraction: NotRequired[float] + dictionaryUri: NotRequired[str] + + +class ClassRelationsContractV1(TypedDict): + totalCount: NotRequired[int] + offset: NotRequired[int] + count: NotRequired[int] + classUri: NotRequired[str] + areReversedRelations: NotRequired[bool] + classRelations: NotRequired[list[ClassRelationItemContractV1]] + + +class ClassPropertiesContractV1(TypedDict): + classUri: NotRequired[str] + totalCount: NotRequired[int] + offset: NotRequired[int] + count: NotRequired[int] + classProperties: list[ClassPropertyContractV1] + + +class ClassPropertyItemContractV1(TypedDict): + name: str + propertySet: str + uri: str + description: NotRequired[str] + definition: NotRequired[str] + dataType: NotRequired[str] + dimension: NotRequired[str] + dimensionLength: NotRequired[int] + dimensionMass: NotRequired[int] + dimensionTime: NotRequired[int] + dimensionElectricCurrent: NotRequired[int] + dimensionThermodynamicTemperature: NotRequired[int] + dimensionAmountOfSubstance: NotRequired[int] + dimensionLuminousIntensity: NotRequired[int] + dynamicParameterPropertyCodes: NotRequired[list[str]] + example: NotRequired[str] + isDynamic: NotRequired[bool] + isRequired: NotRequired[bool] + isWritable: NotRequired[bool] + maxExclusive: NotRequired[float] + maxInclusive: NotRequired[float] + minExclusive: NotRequired[float] + minInclusive: NotRequired[float] + pattern: NotRequired[str] + physicalQuantity: NotRequired[str] + allowedValues: NotRequired[list[ClassPropertyValueItemContractV1]] + predefinedValue: NotRequired[str] + propertyCode: NotRequired[str] + propertyDictionaryName: NotRequired[str] + propertyDictionaryUri: NotRequired[str] + propertyUri: NotRequired[str] + propertyStatus: NotRequired[str] + propertyValueKind: NotRequired[str] + symbol: NotRequired[str] + units: NotRequired[list[str]] + qudtCodes: NotRequired[list[str]] + + +class ClassPropertyValueItemContractV1(TypedDict): + uri: NotRequired[str] + code: NotRequired[str] + value: str + description: NotRequired[str] + sortNumber: NotRequired[int] + + class PropertyContractV5(TypedDict): dictionaryUri: NotRequired[str] activationDateUtc: str @@ -710,6 +782,56 @@ class Client: params = {k: v for k, v in params.items() if v is not None} return self.get(endpoint, params) + def get_class_relations( + self, + class_uri: str, + get_reverse_relations: bool = False, + search_text: str = "", + offset: int = 0, + limit: int = 1000, + language_code: str = "", + version=1, + ) -> ClassRelationsContractV1: + """ + Get class relations or reverse relations (paginated) + """ + endpoint = f"Class/Relations/v{version}" + params = { + "ClassUri": class_uri, + "GetReverseRelations": get_reverse_relations, + "SearchText": search_text, + "Offset": offset, + "Limit": limit, + "languageCode": language_code, + } + return self.get(endpoint, params) + + def get_class_properties( + self, + class_uri: str, + property_set: str = "", + property_code: str = "", + search_text: str = "", + offset: int = 0, + limit: int = 1000, + language_code: str = "", + version=1, + ) -> ClassPropertiesContractV1: + """ + Get class properties (paginated) + """ + endpoint = f"Class/Properties/v{version}" + params = { + "ClassUri": class_uri, + "PropertySet": property_set, + "PropertyCode": property_code, + "SearchText": search_text, + "Offset": offset, + "Limit": limit, + "languageCode": language_code, + } + return self.get(endpoint, params) + def get_property(self, uri, language_code="", version: int = 5) -> PropertyContractV5: """ Get Property details. diff --git a/src/bsdd/tests/test_bsdd.py b/src/bsdd/tests/test_bsdd.py index aea17b9eb9..9dab01025c 100644 --- a/src/bsdd/tests/test_bsdd.py +++ b/src/bsdd/tests/test_bsdd.py @@ -37,6 +37,22 @@ def test_get_class(): ] +def test_get_class_relations(): + uri_light_fixture = next(l for l in get_ifc_classes()["classes"] if "IfcLightFixture" == l["code"])["uri"] + ifc4x3_light_fixture_relations = client.get_class_properties(uri_light_fixture, True) + assert "Electrical unit for light-line system" and "Tubelight system" in [ + r["className"] for r in ifc4x3_light_fixture_relations["classRelations"] + ] + + +def test_get_class_properties(): + uri_light_fixture = next(l for l in get_ifc_classes()["classes"] if "IfcLightFixture" == l["code"])["uri"] + ifc4x3_light_fixture_properties = client.get_class_properties(uri_light_fixture) + assert "Maintenance Factor" and "Light Fixture Mounting Type" in [ + l["name"] for l in ifc4x3_light_fixture_properties["classProperties"] + ] + + def test_search_class(): ss_heat_pump_sys = client.search_class("Ss_60_40_36", [nbs_uri]) li = [l + "source heat pump systems" for l in ["Air ", "Ground ", "Water "]] From a3801a0ce96ef42f5b1819705309ddf6b15163a2 Mon Sep 17 00:00:00 2001 From: Vincent Cadoret Date: Wed, 24 Dec 2025 16:22:26 -0500 Subject: [PATCH 535/657] Fix UnboundLocalError in reporter.py cardinality assignment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The report_specification() method in the Json reporter class was raising an UnboundLocalError when processing IDS specifications with certain minOccurs/maxOccurs combinations that weren't explicitly handled. Problem: The cardinality variable was only assigned for three specific cases: - minOccurs=1, maxOccurs="unbounded" → "required" - minOccurs=0, maxOccurs="unbounded" → "optional" - minOccurs=0, maxOccurs=0 → "prohibited" However, the IDS schema allows other valid combinations such as: - minOccurs=0, maxOccurs=1 (commonly used for optional specifications) - minOccurs=1, maxOccurs=1 (exactly one occurrence required) - Any other valid XML Schema cardinality values When processing IDS files with these combinations, the cardinality variable remained unassigned, causing an UnboundLocalError at line 382 when attempting to use it in ResultsSpecification(). Solution: Added fallback logic to handle all valid IDS cardinality combinations: - If minOccurs >= 1: cardinality = "required" (must occur at least once) - Otherwise (minOccurs == 0): cardinality = "optional" (may occur) This maintains semantic compatibility with the existing codebase, which expects cardinality to be one of the semantic strings ("required", "optional", "prohibited") rather than numeric ranges. This is critical for: - HTML template rendering (line 457: .capitalize()) - Conditional logic for skipped specs (line 454) - UI rendering for prohibited specs (line 456) Testing: - Tested with IDS file containing minOccurs=0 without explicit maxOccurs (defaults to 1 per XML Schema specification) - Validation now completes successfully without UnboundLocalError - HTML report generation works correctly with semantic cardinality labels - Maintains backward compatibility with existing IDS files Fixes: Validation failure when using valid IDS cardinality combinations --- src/ifctester/ifctester/reporter.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ifctester/ifctester/reporter.py b/src/ifctester/ifctester/reporter.py index 220d0f96a9..84684a10a2 100644 --- a/src/ifctester/ifctester/reporter.py +++ b/src/ifctester/ifctester/reporter.py @@ -367,6 +367,12 @@ class Json(Reporter): cardinality = "optional" elif specification.minOccurs == 0 and specification.maxOccurs == 0: cardinality = "prohibited" + elif specification.minOccurs >= 1: + # Any minimum occurrence >= 1 means the specification is required + cardinality = "required" + else: + # minOccurs == 0 with any other maxOccurs value means optional + cardinality = "optional" return ResultsSpecification( name=specification.name, From 4da0b04162aa98784ca768184148b0ee1bea15e8 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Mon, 28 Jul 2025 23:48:36 +0200 Subject: [PATCH 536/657] add adjunt_overlapping_labels --- .../bonsai/bim/module/model/decorator.py | 147 +++++++++++++----- 1 file changed, 108 insertions(+), 39 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index e9435eea99..b45c50b623 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -521,6 +521,10 @@ class PolylineDecorator: color = self.addon_prefs.decorations_colour blf.color(self.font_id, *color) + + screen_coords = {} + label_index = 0 + for i in range(len(self.polyline_points)): if i < 1 and self.measure_type == "POLY_AREA": continue @@ -529,39 +533,39 @@ class PolylineDecorator: dim_text_pos = (Vector(self.polyline_points[i].position) + Vector(self.polyline_points[i - 1].position)) / 2 dim_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, dim_text_pos) - formatted_value = self.polyline_points[i].dim + if dim_text_coords: + formatted_value = self.polyline_points[i].dim + text = "d: " + formatted_value + screen_coords[f"distance_{label_index}"] = (dim_text_coords, text) + label_index += 1 - blf.position(self.font_id, dim_text_coords[0], dim_text_coords[1], 0) - text = "d: " + formatted_value - text_length = blf.dimensions(self.font_id, text) - self.draw_text_background(context, dim_text_coords, text_length) - blf.draw(self.font_id, text) + if self.measure_type != "SINGLE": + for i in range(len(self.polyline_points)): + if i ==1: + continue - if i == 1: - continue - angle_text_pos = Vector(self.polyline_points[i - 1].position) - angle_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, angle_text_pos) - blf.position(self.font_id, angle_text_coords[0], angle_text_coords[1], 0) - text = "a: " + self.polyline_points[i].angle - text_length = blf.dimensions(self.font_id, text) - self.draw_text_background(context, angle_text_coords, text_length) - blf.draw(self.font_id, text) + angle_text_pos = Vector(self.polyline_points[i - 1].position) + angle_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, angle_text_pos) + + if angle_text_coords: + text = "a: " + self.polyline_points[i].angle + screen_coords[f"angle_{label_index}"] = (angle_text_coords, text) + label_index += 1 if self.measure_type == "SINGLE": axis_line, axis_line_center = self.calculate_measurement_x_y_and_z(context) - for i, dim_text_pos in enumerate(axis_line_center): - dim_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, dim_text_pos) - pos = blf.position(self.font_id, dim_text_coords[0], dim_text_coords[1], 0) - value = round((axis_line[i][1] - axis_line[i][0]).length, 4) - direction = axis_line[i][1] - axis_line[i][0] - if (i == 0 and direction.x < 0) or (i == 1 and direction.y < 0) or (i == 2 and direction.z < 0): - value = -value - prefix = "xyz"[i] - formatted_value = tool.Polyline.format_input_ui_units(value) - text = f"{prefix}: {formatted_value}" - text_length = blf.dimensions(self.font_id, text) - self.draw_text_background(context, dim_text_coords, text_length) - blf.draw(self.font_id, text) + if axis_line and axis_line_center: + for i, dim_text_pos in enumerate(axis_line_center): + dim_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, dim_text_pos) + if dim_text_coords: + value = round((axis_line[i][1] - axis_line[i][0]).length, 4) + direction = axis_line[i][1] - axis_line[i][0] + if (i == 0 and direction.x < 0) or (i == 1 and direction.y < 0) or (i == 2 and direction.z < 0): + value = -value + prefix = "xyz"[i] + formatted_value = tool.Polyline.format_input_ui_units(value) + text = f"{prefix}: {formatted_value}" + screen_coords[f"xyz_{i}"] = (dim_text_coords, text) # Area and Length text polyline_verts = [Vector((p.x, p.y, p.z)) for p in self.polyline_points] @@ -576,28 +580,93 @@ class PolylineDecorator: polyline_verts[:-1] ) # Doesn't use the last point if is a closed polyline area_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, center) - value = self.polyline_data.area - text = f"area: {value}" - text_length = blf.dimensions(self.font_id, text) - area_text_coords[0] -= text_length[0] / 2 # Center text horizontally - blf.position(self.font_id, area_text_coords[0], area_text_coords[1], 0) - self.draw_text_background(context, area_text_coords, text_length) - blf.draw(self.font_id, text) + if area_text_coords: + value = self.polyline_data.area + text = f"area: {value}" + screen_coords["area"] = (area_text_coords, text) # Length if self.measure_type in {"POLYLINE", "POLY_AREA"}: if len(polyline_verts) < 3: return total_length_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, polyline_verts[-1]) - blf.position(self.font_id, total_length_text_coords[0], total_length_text_coords[1], 0) - value = self.polyline_data.total_length - text = f"length: {value}" + if total_length_text_coords: + value = self.polyline_data.total_length + text = f"length: {value}" + screen_coords["length"] = (total_length_text_coords, text) + + self.adjust_overlapping_labels(screen_coords) + + for label_key, (screen_co, text) in screen_coords.items(): + blf.position(self.font_id, screen_co.x, screen_co.y, 0) + blf.color(self.font_id, 1, 1, 1, 1) text_length = blf.dimensions(self.font_id, text) - self.draw_text_background(context, total_length_text_coords, text_length) + self.draw_text_background(context, screen_co, text_length) blf.draw(self.font_id, text) blf.disable(self.font_id, blf.SHADOW) + def adjust_overlapping_labels(self, screen_coords): + font_id = self.font_id + text_dimensions = {} + + for label_key, (screen_co, text) in screen_coords.items(): + text_dimensions[label_key] = blf.dimensions(font_id, text) + + min_spacing = 12 + + label_keys = list(screen_coords.keys()) + for pass_num in range(3): # 3 passes to try to optimize complex overlaps + for i in range(len(label_keys)): + for j in range(i + 1, len(label_keys)): + key1, key2 = label_keys[i], label_keys[j] + co1, _ = screen_coords[key1] + co2, _ = screen_coords[key2] + dim1 = text_dimensions[key1] + dim2 = text_dimensions[key2] + + bounds1 = { + "left": co1.x - min_spacing, + "right": co1.x + dim1[0] + min_spacing, + "top": co1.y + dim1[1] + min_spacing, + "bottom": co1.y - min_spacing, + } + bounds2 = { + "left": co2.x - min_spacing, + "right": co2.x + dim2[0] + min_spacing, + "top": co2.y + dim2[1] + min_spacing, + "bottom": co2.y - min_spacing, + } + + if ( + bounds1["left"] < bounds2["right"] + and bounds1["right"] > bounds2["left"] + and bounds1["bottom"] < bounds2["top"] + and bounds1["top"] > bounds2["bottom"] + ): + x_overlap = min(bounds1["right"], bounds2["right"]) - max(bounds1["left"], bounds2["left"]) + y_overlap = min(bounds1["top"], bounds2["top"]) - max(bounds1["bottom"], bounds2["bottom"]) + + separation_multiplier = 1.25 + + # Move labels in the direction requiring less movement + if x_overlap < y_overlap: + separation_distance = (x_overlap / 2 + min_spacing) * separation_multiplier + if co1.x < co2.x: + co1.x -= separation_distance + co2.x += separation_distance + else: + co1.x += separation_distance + co2.x -= separation_distance + else: + separation_distance = (y_overlap / 2 + min_spacing) * separation_multiplier + if co1.y < co2.y: + co1.y -= separation_distance + co2.y += separation_distance + else: + co1.y += separation_distance + co2.y -= separation_distance + def draw_measurements_poly(self, context): self.shader_config(context) polyline_verts: list[Vector] = [] From 3c3525f205bfb3adf0a080f0a108b0ef1d08df13 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 25 Sep 2025 00:53:00 +0200 Subject: [PATCH 537/657] display angles and area/length values conditionally based on polyline points --- .../bonsai/bim/module/model/decorator.py | 52 +++++++++---------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index b45c50b623..54861e6591 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -539,19 +539,19 @@ class PolylineDecorator: screen_coords[f"distance_{label_index}"] = (dim_text_coords, text) label_index += 1 - if self.measure_type != "SINGLE": + # --- Show angles for polyline/poly area --- + if self.measure_type != "SINGLE" and len(self.polyline_points) > 2: for i in range(len(self.polyline_points)): - if i ==1: + if i == 0 or i == len(self.polyline_points) - 1: continue - - angle_text_pos = Vector(self.polyline_points[i - 1].position) + angle_text_pos = Vector(self.polyline_points[i].position) angle_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, angle_text_pos) - if angle_text_coords: - text = "a: " + self.polyline_points[i].angle - screen_coords[f"angle_{label_index}"] = (angle_text_coords, text) - label_index += 1 + text = "a: " + self.polyline_points[i+1].angle + screen_coords[f"angle_{i}"] = (angle_text_coords, text) + + # --- Show XYZ axis values for single measurement --- if self.measure_type == "SINGLE": axis_line, axis_line_center = self.calculate_measurement_x_y_and_z(context) if axis_line and axis_line_center: @@ -567,33 +567,29 @@ class PolylineDecorator: text = f"{prefix}: {formatted_value}" screen_coords[f"xyz_{i}"] = (dim_text_coords, text) - # Area and Length text + #Area and Length text polyline_verts = [Vector((p.x, p.y, p.z)) for p in self.polyline_points] # Area if self.measure_type == "POLY_AREA" and self.polyline_data.area: - if len(polyline_verts) < 3: - return - center = sum(polyline_verts, Vector()) / len(polyline_verts) # Center between all polyline points - if polyline_verts[0] == polyline_verts[-1]: - center = sum(polyline_verts[:-1], Vector()) / len( - polyline_verts[:-1] - ) # Doesn't use the last point if is a closed polyline - area_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, center) - if area_text_coords: - value = self.polyline_data.area - text = f"area: {value}" - screen_coords["area"] = (area_text_coords, text) + if len(polyline_verts) >= 3: + center = sum(polyline_verts, Vector()) / len(polyline_verts) + if polyline_verts[0] == polyline_verts[-1]: + center = sum(polyline_verts[:-1], Vector()) / len(polyline_verts[:-1]) + area_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, center) + if area_text_coords: + value = self.polyline_data.area + text = f"area: {value}" + screen_coords["area"] = (area_text_coords, text) # Length if self.measure_type in {"POLYLINE", "POLY_AREA"}: - if len(polyline_verts) < 3: - return - total_length_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, polyline_verts[-1]) - if total_length_text_coords: - value = self.polyline_data.total_length - text = f"length: {value}" - screen_coords["length"] = (total_length_text_coords, text) + if len(polyline_verts) >= 3: + total_length_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, polyline_verts[-1]) + if total_length_text_coords: + value = self.polyline_data.total_length + text = f"length: {value}" + screen_coords["length"] = (total_length_text_coords, text) self.adjust_overlapping_labels(screen_coords) From 587fc638432da98a489308a6fef8128db38184d4 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 25 Sep 2025 09:05:32 +0200 Subject: [PATCH 538/657] Refactor PolylineDecorator to simplify label indexing and improve text spacing calculation --- src/bonsai/bonsai/bim/module/model/decorator.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index 54861e6591..9152743e12 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -523,7 +523,6 @@ class PolylineDecorator: blf.color(self.font_id, *color) screen_coords = {} - label_index = 0 for i in range(len(self.polyline_points)): if i < 1 and self.measure_type == "POLY_AREA": @@ -536,9 +535,7 @@ class PolylineDecorator: if dim_text_coords: formatted_value = self.polyline_points[i].dim text = "d: " + formatted_value - screen_coords[f"distance_{label_index}"] = (dim_text_coords, text) - label_index += 1 - + screen_coords[f"distance_{i}"] = (dim_text_coords, text) # --- Show angles for polyline/poly area --- if self.measure_type != "SINGLE" and len(self.polyline_points) > 2: for i in range(len(self.polyline_points)): @@ -609,7 +606,11 @@ class PolylineDecorator: for label_key, (screen_co, text) in screen_coords.items(): text_dimensions[label_key] = blf.dimensions(font_id, text) - min_spacing = 12 + if text_dimensions: + first_height = next(iter(text_dimensions.values()))[1] + min_spacing = max(2, first_height * 0.3) + else: + min_spacing = 2 label_keys = list(screen_coords.keys()) for pass_num in range(3): # 3 passes to try to optimize complex overlaps From 84d55d896916afa3116f11a22f1b2a00dfb88481 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 25 Sep 2025 09:38:24 +0200 Subject: [PATCH 539/657] cleanup --- .../bonsai/bim/module/model/decorator.py | 83 ++++++++++--------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index 9152743e12..00e733b397 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -531,62 +531,63 @@ class PolylineDecorator: continue dim_text_pos = (Vector(self.polyline_points[i].position) + Vector(self.polyline_points[i - 1].position)) / 2 dim_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, dim_text_pos) - if dim_text_coords: formatted_value = self.polyline_points[i].dim text = "d: " + formatted_value - screen_coords[f"distance_{i}"] = (dim_text_coords, text) - # --- Show angles for polyline/poly area --- - if self.measure_type != "SINGLE" and len(self.polyline_points) > 2: - for i in range(len(self.polyline_points)): - if i == 0 or i == len(self.polyline_points) - 1: - continue - angle_text_pos = Vector(self.polyline_points[i].position) - angle_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, angle_text_pos) - if angle_text_coords: - text = "a: " + self.polyline_points[i+1].angle - screen_coords[f"angle_{i}"] = (angle_text_coords, text) + screen_coords[f"distance_{i}"] = (Vector(dim_text_coords), text) + if i == 1: + continue + angle_text_pos = Vector(self.polyline_points[i - 1].position) + angle_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, angle_text_pos) + if angle_text_coords: + text = "a: " + self.polyline_points[i].angle + screen_coords[f"angle_{i}"] = (Vector(angle_text_coords), text) - # --- Show XYZ axis values for single measurement --- if self.measure_type == "SINGLE": axis_line, axis_line_center = self.calculate_measurement_x_y_and_z(context) - if axis_line and axis_line_center: - for i, dim_text_pos in enumerate(axis_line_center): - dim_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, dim_text_pos) - if dim_text_coords: - value = round((axis_line[i][1] - axis_line[i][0]).length, 4) - direction = axis_line[i][1] - axis_line[i][0] - if (i == 0 and direction.x < 0) or (i == 1 and direction.y < 0) or (i == 2 and direction.z < 0): - value = -value - prefix = "xyz"[i] - formatted_value = tool.Polyline.format_input_ui_units(value) - text = f"{prefix}: {formatted_value}" - screen_coords[f"xyz_{i}"] = (dim_text_coords, text) + for i, dim_text_pos in enumerate(axis_line_center): + dim_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, dim_text_pos) + if dim_text_coords: + value = round((axis_line[i][1] - axis_line[i][0]).length, 4) + direction = axis_line[i][1] - axis_line[i][0] + if (i == 0 and direction.x < 0) or (i == 1 and direction.y < 0) or (i == 2 and direction.z < 0): + value = -value + prefix = "xyz"[i] + formatted_value = tool.Polyline.format_input_ui_units(value) + text = f"{prefix}: {formatted_value}" + screen_coords[f"xyz_{i}"] = (Vector(dim_text_coords), text) - #Area and Length text + # Area and Length text polyline_verts = [Vector((p.x, p.y, p.z)) for p in self.polyline_points] # Area if self.measure_type == "POLY_AREA" and self.polyline_data.area: - if len(polyline_verts) >= 3: - center = sum(polyline_verts, Vector()) / len(polyline_verts) - if polyline_verts[0] == polyline_verts[-1]: - center = sum(polyline_verts[:-1], Vector()) / len(polyline_verts[:-1]) - area_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, center) - if area_text_coords: - value = self.polyline_data.area - text = f"area: {value}" - screen_coords["area"] = (area_text_coords, text) + if len(polyline_verts) < 3: + blf.disable(self.font_id, blf.SHADOW) + return + center = sum(polyline_verts, Vector()) / len(polyline_verts) + if polyline_verts[0] == polyline_verts[-1]: + center = sum(polyline_verts[:-1], Vector()) / len(polyline_verts[:-1]) + area_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, center) + if area_text_coords: + value = self.polyline_data.area + text = f"area: {value}" + text_length = blf.dimensions(self.font_id, text) + area_text_coords = list(area_text_coords) + area_text_coords[0] -= text_length[0] / 2 + screen_coords["area"] = (Vector(area_text_coords), text) # Length if self.measure_type in {"POLYLINE", "POLY_AREA"}: - if len(polyline_verts) >= 3: - total_length_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, polyline_verts[-1]) - if total_length_text_coords: - value = self.polyline_data.total_length - text = f"length: {value}" - screen_coords["length"] = (total_length_text_coords, text) + if len(polyline_verts) < 3: + blf.disable(self.font_id, blf.SHADOW) + return + total_length_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, polyline_verts[-1]) + if total_length_text_coords: + value = self.polyline_data.total_length + text = f"length: {value}" + screen_coords["length"] = (Vector(total_length_text_coords), text) self.adjust_overlapping_labels(screen_coords) From 4c47eb573aa66e617696fcc5bf311be8a0d45722 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 22 Jan 2026 11:18:35 +1100 Subject: [PATCH 540/657] Improve IDS static HTML reporter to report list of prohibited entities (they aren't passes or fails, just prohibited applicability) --- src/ifctester/ifctester/reporter.py | 24 +++++++++++ src/ifctester/ifctester/templates/report.html | 40 ++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/ifctester/ifctester/reporter.py b/src/ifctester/ifctester/reporter.py index 84684a10a2..e99e13ea8f 100644 --- a/src/ifctester/ifctester/reporter.py +++ b/src/ifctester/ifctester/reporter.py @@ -85,6 +85,7 @@ class ResultsSpecification(TypedDict): total_applicable: int total_applicable_pass: int total_applicable_fail: int + applicable_entities: list[ResultsEntity] percent_applicable_pass: ResultsPercent total_checks: int total_checks_pass: int @@ -383,6 +384,7 @@ class Json(Reporter): total_applicable=total_applicable, total_applicable_pass=total_applicable_pass, total_applicable_fail=total_applicable - total_applicable_pass, + applicable_entities=self.report_applicable_entities(specification), percent_applicable_pass=percent_applicable_pass, total_checks=total_checks, total_checks_pass=total_checks_pass, @@ -393,6 +395,24 @@ class Json(Reporter): requirements=requirements, ) + def report_applicable_entities(self, specification: Specification) -> list[ResultsEntity]: + return [ + ResultsEntity( + { + "element": e, + "element_type": ifcopenshell.util.element.get_type(e), + "class": e.is_a(), + "predefined_type": ifcopenshell.util.element.get_predefined_type(e), + "name": getattr(e, "Name", None), + "description": getattr(e, "Description", None), + "id": e.id(), + "global_id": getattr(e, "GlobalId", None), + "tag": getattr(e, "Tag", None), + } + ) + for e in specification.applicable_entities + ] + def report_passed_entities(self, requirement: Facet) -> list[ResultsEntity]: return [ ResultsEntity( @@ -459,6 +479,10 @@ class Html(Json): spec["is_prohibited"] = spec["cardinality"] == "prohibited" spec["cardinality"] = spec["cardinality"].capitalize() spec["has_requirements"] = bool(spec["requirements"]) + total_applicable_entities = len(spec["applicable_entities"]) + spec["applicable_entities"] = self.limit_entities(spec["applicable_entities"]) + spec["has_omitted_applicable"] = total_applicable_entities > self.entity_limit + spec["total_omitted_applicable"] = total_applicable_entities - self.entity_limit for requirement in spec["requirements"]: total_passed_entities = len(requirement["passed_entities"]) total_failed_entities = len(requirement["failed_entities"]) diff --git a/src/ifctester/ifctester/templates/report.html b/src/ifctester/ifctester/templates/report.html index 456e90e5f4..51beb5c0f5 100644 --- a/src/ifctester/ifctester/templates/report.html +++ b/src/ifctester/ifctester/templates/report.html @@ -152,7 +152,6 @@

Requirements

- {{/has_requirements}}
    {{#requirements}}
  1. @@ -252,6 +251,45 @@
  2. {{/requirements}}
+ {{/has_requirements}} + {{#is_prohibited}} + {{#total_applicable}} + + + + + + + + + + + + + {{#applicable_entities}} + + + + + + + + + {{#extra_of_type}} + + + + {{/extra_of_type}} + {{/applicable_entities}} + {{#has_omitted_applicable}} + + + + {{/has_omitted_applicable}} + +
ClassPredefinedTypeNameDescriptionGlobalIdTag
{{class}}{{predefined_type}}{{name}}{{description}}{{global_id}}{{tag}}
... {{extra_of_type}} more of the same element type ({{type_name}} with Tag {{type_tag}} and GlobalId {{type_global_id}}) not shown ...
... {{total_omitted_applicable}} more failing elements not shown out of {{total_applicable}} total ...
+ {{/total_applicable}} + {{/is_prohibited}} {{/specifications}} From c2cc6f80be80a4251a3e9a5c00209f8c51e7148a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 22 Jan 2026 14:36:46 +1100 Subject: [PATCH 541/657] IfcTester webapp now shows prohibited more clearly - is_skipped is calculated upstream instead of reimplementing logic - the viewer now shows cardinality (not just in edit mode) to make it clear what the requirements are - prohibited specs are not allowed to have any requirements, so that section is hidden - failed prohibited specs now shows list of failed (applicable) entities --- src/ifctester/ifctester/reporter.py | 4 +- .../webapp/src/pages/Home/IdsViewer.svelte | 140 +++++++++++++++--- 2 files changed, 124 insertions(+), 20 deletions(-) diff --git a/src/ifctester/ifctester/reporter.py b/src/ifctester/ifctester/reporter.py index e99e13ea8f..38b3ba8f5b 100644 --- a/src/ifctester/ifctester/reporter.py +++ b/src/ifctester/ifctester/reporter.py @@ -81,6 +81,7 @@ class ResultsSpecification(TypedDict): description: str instructions: str status: bool + is_skipped: bool is_ifc_version: bool total_applicable: int total_applicable_pass: int @@ -380,6 +381,7 @@ class Json(Reporter): description=specification.description, instructions=specification.instructions, status=specification.status, + is_skipped=cardinality == "optional" and total_checks == 0, is_ifc_version=specification.is_ifc_version, total_applicable=total_applicable, total_applicable_pass=total_applicable_pass, @@ -474,8 +476,6 @@ class Html(Json): def report(self) -> None: super().report() for spec in self.results["specifications"]: - if spec["cardinality"] == "optional" and spec["total_checks"] == 0: - spec["is_skipped"] = True spec["is_prohibited"] = spec["cardinality"] == "prohibited" spec["cardinality"] = spec["cardinality"].capitalize() spec["has_requirements"] = bool(spec["requirements"]) diff --git a/src/ifctester/webapp/src/pages/Home/IdsViewer.svelte b/src/ifctester/webapp/src/pages/Home/IdsViewer.svelte index e9645e0984..2fda5f0c2c 100644 --- a/src/ifctester/webapp/src/pages/Home/IdsViewer.svelte +++ b/src/ifctester/webapp/src/pages/Home/IdsViewer.svelte @@ -50,13 +50,7 @@ function getSpecificationStatus(specIndex, auditData) { const spec = auditData.specifications[specIndex]; if (!spec) return null; - - // If no applicable elements and no checks, and it passed, it's actually skipped - if (spec.total_applicable === 0 && spec.total_checks === 0 && spec.status === true) { - return 'skipped'; - } - - return spec.status; + return spec.is_skipped ? 'skipped' : spec.status; } function getSpecificationStats(specIndex, auditData) { @@ -79,11 +73,13 @@ const status = getSpecificationStatus(specIndex, auditData); if (status === 'skipped') { - return "Skipped because no applicable entities were found and the cardinality is OPTIONAL or PROHIBITED"; + return "Skipped because no applicable entities were found and the cardinality is OPTIONAL"; } if (status === false) { // Failed - if (spec.total_applicable === 0) { + if (spec.cardinality === 'prohibited') { + return `Failed because ${spec.total_applicable} prohibited entities were found`; + } else if (spec.total_applicable === 0) { return "Failed because no applicable entities were found but the cardinality is REQUIRED"; } else { const failedChecks = spec.total_checks - spec.total_checks_pass; @@ -240,19 +236,30 @@ {#if "@description" in spec}

{spec["@description"]}

{/if} +
+ {#if spec.applicability["@minOccurs"] === 1 && spec.applicability["@maxOccurs"] === 'unbounded'} + Required + {/if} + {#if spec.applicability["@minOccurs"] === 0 && spec.applicability["@maxOccurs"] === 'unbounded'} + Optional + {/if} + {#if spec.applicability["@minOccurs"] === 0 && spec.applicability["@maxOccurs"] === 0} + Prohibited + {/if} + {#if auditReport} + {@const stats = getSpecificationStats(index, auditReport.data)} + {@const status = getSpecificationStatus(index, auditReport.data)} + {#if stats && spec.applicability["@maxOccurs"] !== 0 && status !== 'skipped'} + Checks: {stats.checksPassed}/{stats.checksTotal} + Requirements: {stats.requirementsPassed}/{stats.requirements} + {/if} + {/if} +
{#if auditReport} {@const reason = getSpecificationReason(index, auditReport.data)} {#if reason}

{reason}

{/if} - {@const stats = getSpecificationStats(index, auditReport.data)} - {@const status = getSpecificationStatus(index, auditReport.data)} - {#if stats && status !== 'skipped'} -
- Checks: {stats.checksPassed}/{stats.checksTotal} - Requirements: {stats.requirementsPassed}/{stats.requirements} -
- {/if} {/if}
@@ -292,9 +299,105 @@ {/if} {/each}
+ + {#if auditReport} + {@const status = getSpecificationStatus(index, auditReport.data)} + {#if ! status && spec.applicability["@maxOccurs"] == 0} + {@const specReport = auditReport.data.specifications[index]} +
+ {#if specReport.applicable_entities && specReport.applicable_entities.length > 0} +
+

Failed Elements ({specReport.applicable_entities.length})

+
+ + + + + + + + + + + + + + + {#each specReport.applicable_entities.slice(0, 10) as entity} + + + + + + + + + + {/each} + {#if specReport.applicable_entities.length > 10} + + + + {/if} + +
ClassPredefinedTypeNameDescriptionWarningGlobalIdTag
{entity.class}{entity.predefined_type || '-'} + + +
{entity.name || '-'}
+
+ +

{entity.name || '-'}

+
+
+
+ + +
{entity.description || '-'}
+
+ +

{entity.description || '-'}

+
+
+
+ + +
{entity.reason || '-'}
+
+ +

{entity.reason || '-'}

+
+
+
+ + +
{entity.global_id || '-'}
+
+ +

{entity.global_id || '-'}

+
+
+
+ + +
{entity.tag || '-'}
+
+ +

{entity.tag || '-'}

+
+
+
... {specReport.applicable_entities.length - 10} more failing elements not shown ...
+
+
+
+ {/if} +
+ + {/if} + {/if} + {#if Array.isArray(spec.requirements) && spec.requirements.length > 0}

Requirements

@@ -497,6 +600,7 @@ {/each}
+ {/if} {/if} @@ -1128,4 +1232,4 @@ white-space: nowrap; cursor: pointer; } - \ No newline at end of file + From 247f0c41d96ff59d58edfbdf21693417652a3e10 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 23 Jan 2026 15:32:04 +1100 Subject: [PATCH 542/657] Increase default deflection tolerance to improve performance This only results in a lower resolution for things like advanced brep geometry which isn't a biggie (I'll eat my words later) --- src/bonsai/bonsai/bim/import_ifc.py | 2 +- src/bonsai/bonsai/bim/module/project/prop.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 05bcbed01a..d8ecfd6894 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -1303,7 +1303,7 @@ class IfcImportSettings: self.should_load_geometry = True self.should_clean_mesh = False self.should_cache = True - self.deflection_tolerance = 0.001 + self.deflection_tolerance = 0.05 # Default is 0.001, but I find this to be more practical self.angular_tolerance = 0.5 self.void_limit = 30 self.style_limit = 300 diff --git a/src/bonsai/bonsai/bim/module/project/prop.py b/src/bonsai/bonsai/bim/module/project/prop.py index 8983c927c9..6894392437 100644 --- a/src/bonsai/bonsai/bim/module/project/prop.py +++ b/src/bonsai/bonsai/bim/module/project/prop.py @@ -319,7 +319,7 @@ class BIMProjectProperties(PropertyGroup): ), default=False, ) - deflection_tolerance: FloatProperty(name="Deflection Tolerance", default=0.001) + deflection_tolerance: FloatProperty(name="Deflection Tolerance", default=0.05) angular_tolerance: FloatProperty(name="Angular Tolerance", default=0.5) void_limit: IntProperty( name="Void Limit", From 5dd771c5e5a2730361a0128bb77a085bf11a7e11 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 23 Jan 2026 15:51:39 +1100 Subject: [PATCH 543/657] Fix #7596. Bug where IFC2X3's workspace didn't use IfcDoorStyle and IfcWindowStyle instead --- src/bonsai/bonsai/bim/module/model/data.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/model/data.py b/src/bonsai/bonsai/bim/module/model/data.py index 2c96e42925..649b92b325 100644 --- a/src/bonsai/bonsai/bim/module/model/data.py +++ b/src/bonsai/bonsai/bim/module/model/data.py @@ -52,6 +52,11 @@ class AuthoringData: cls.is_loaded = True cls.props = tool.Model.get_model_props() cls.data["default_container"] = cls.default_container() + if tool.Ifc.get().schema == "IFC2X3": + if ifc_element_type == "IfcDoorType": + ifc_element_type = "IfcDoorStyle" + elif ifc_element_type == "IfcWindowType": + ifc_element_type = "IfcWindowStyle" cls.data["ifc_element_type"] = ifc_element_type cls.data["ifc_classes"] = cls.ifc_classes() cls.data["ifc_class_current"] = cls.ifc_class_current() From ac128e33958cb09335d5aac57873972971c38d54 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 23 Jan 2026 15:56:44 +1100 Subject: [PATCH 544/657] Close #7601. Clearer docs that there is a single mesh item. --- .../docs/ifcopenshell-python/geometry_creation.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_creation.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_creation.rst index 65c21cafef..817630ad7d 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_creation.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_creation.rst @@ -340,8 +340,12 @@ In IFC, meshes may be stored as **Faceted BReps**, **Tessellations**, or # These vertices and faces represent a 2m square 1m high pyramid in SI units. # Note how they are nested lists. Each nested list represents a "mesh". There may be multiple meshes. - vertices = [[(0.,0.,0.), (0.,2.,0.), (2.,2.,0.), (2.,0.,0.), (1.,1.,1.)]] - faces = [[(0,1,2,3), (0,4,1), (1,4,2), (2,4,3), (3,4,0)]] + vertices = [ + [(0.,0.,0.), (0.,2.,0.), (2.,2.,0.), (2.,0.,0.), (1.,1.,1.)] # A single mesh + ] + faces = [ + [(0,1,2,3), (0,4,1), (1,4,2), (2,4,3), (3,4,0)] # A single mesh + ] representation = ifcopenshell.api.geometry.add_mesh_representation(model, context=body, vertices=vertices, faces=faces) .. image:: images/mesh-representation.png From 6b7b834ac08367c8902053eaac86e00341a0d793 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 10:12:33 +0100 Subject: [PATCH 545/657] Don't try and solve 2d bools in cgal-simple #7503 --- src/ifcgeom/kernels/cgal/CgalKernel.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ifcgeom/kernels/cgal/CgalKernel.cpp b/src/ifcgeom/kernels/cgal/CgalKernel.cpp index a2d4d01ebc..1e4a8866b9 100644 --- a/src/ifcgeom/kernels/cgal/CgalKernel.cpp +++ b/src/ifcgeom/kernels/cgal/CgalKernel.cpp @@ -1835,6 +1835,9 @@ bool CgalKernel::convert_impl(const taxonomy::boolean_result::ptr br, Conversion CGAL::Polygon_with_holes_2 pwh(p, ++it, loops.end()); CGAL::Gps_segment_traits_2 traits; if (!CGAL::are_holes_and_boundary_pairwise_disjoint(pwh, traits)) { +#ifdef IFOPSH_SIMPLE_KERNEL + throw std::runtime_error("Holes are not disjoint - use a different geometry kernel"); +#else // this is very slow. // the check is also slow... @@ -1851,6 +1854,7 @@ bool CgalKernel::convert_impl(const taxonomy::boolean_result::ptr br, Conversion result.difference(*it); } result.polygons_with_holes(std::back_inserter(pwhs)); +#endif } else { pwhs.push_back(pwh); } From c739b9338964cec63bc7c6b3c0cabe99444c119e Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Thu, 22 Jan 2026 17:27:58 +0100 Subject: [PATCH 546/657] fix: Have kernels targets built as library --- src/ifcgeom/kernels/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index c9c8c549cb..5cbbd32c0d 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -8,7 +8,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) set(KERNEL_TARGET "geometry_kernel_${kernel}") - add_library(${KERNEL_TARGET} OBJECT ${IFCGEOM_FILES}) + add_library(${KERNEL_TARGET} ${IFCGEOM_FILES}) set_target_properties( ${KERNEL_TARGET} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS" PUBLIC_HEADER "${IFCGEOM_H_FILES}" @@ -27,7 +27,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) set_property(TARGET ${KERNEL_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple") - add_library(${KERNEL_TARGET_SIMPLE} OBJECT ${IFCGEOM_FILES}) + add_library(${KERNEL_TARGET_SIMPLE} ${IFCGEOM_FILES}) set_target_properties( ${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS" From a609bc61b9f297e92e6682c6f77aa1dabde14351 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Thu, 22 Jan 2026 17:48:16 +0100 Subject: [PATCH 547/657] fix: Define OPENCASCADE_LIBRARIES as expected by generic CMakeLists.txt for ifcgeom kernels --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9e88026ac7..0fb45e42eb 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -218,6 +218,7 @@ if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) add_definitions(-DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) + # set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) list(APPEND GEOMETRY_KERNELS opencascade) endif() From 128fdcb62e2d7b9756516aec4e6f110251234974 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Thu, 22 Jan 2026 18:24:43 +0100 Subject: [PATCH 548/657] fix: Add IfcGeom as a dependency of kernels target instead of the inverse --- cmake/CMakeLists.txt | 1 - src/ifcgeom/CMakeLists.txt | 6 +++++- src/ifcgeom/kernels/CMakeLists.txt | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0fb45e42eb..9e88026ac7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -218,7 +218,6 @@ if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) add_definitions(-DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) - # set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) list(APPEND GEOMETRY_KERNELS opencascade) endif() diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index b50dfce590..4bacbf2f72 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -31,12 +31,16 @@ find_package(Eigen3 REQUIRED) target_link_libraries( IfcGeom - ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen" ${CGAL_LIBRARIES} ) + +if(WITH_OPENCASCADE) + target_link_libraries(IfcGeom TKernel) +endif() + if(NOT WASM_BUILD) target_link_libraries(IfcGeom IfcParse) endif() diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 5cbbd32c0d..fa9656b782 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -14,7 +14,7 @@ foreach(kernel ${GEOMETRY_KERNELS}) PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS" PUBLIC_HEADER "${IFCGEOM_H_FILES}" ) list(APPEND kernel_libraries ${KERNEL_TARGET}) - target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) + target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} IfcGeom Eigen3::Eigen) install( TARGETS ${KERNEL_TARGET} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} From ab3108ff59f37674396a4e01349a2c57526d8cfa Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 11:16:06 +0100 Subject: [PATCH 549/657] Set GMP --enable-fat during build #7458 #7556 --- nix/build-all.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nix/build-all.py b/nix/build-all.py index 448e3655ec..73a92c0b3a 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1177,6 +1177,8 @@ if "cgal" in targets: # Disable assembly, otherwise `emcc -c conftest.s` will crash due to assembly mismatch. gmp_args.extend(("--disable-assembly", "--enable-cxx")) mpfr_args.extend(("--host", "none")) + else: + gmp_args.append("--enable-fat") # See issues #7458 #7556 OLD_CC = None if MAC_CROSS_COMPILE_INTEL: From a6a9f9d0a769b91d5dd3cef4350aed0b875e7d12 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 11:22:56 +0100 Subject: [PATCH 550/657] Only enable--fat on x86 in build-all.py #7458 #7556 --- nix/build-all.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/build-all.py b/nix/build-all.py index 73a92c0b3a..b60ab1adbd 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1177,7 +1177,7 @@ if "cgal" in targets: # Disable assembly, otherwise `emcc -c conftest.s` will crash due to assembly mismatch. gmp_args.extend(("--disable-assembly", "--enable-cxx")) mpfr_args.extend(("--host", "none")) - else: + elif "x86" in arch: gmp_args.append("--enable-fat") # See issues #7458 #7556 OLD_CC = None From 9c6a8bdb90087ac281bab652778025380e5b6e1a Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 11:43:08 +0100 Subject: [PATCH 551/657] Clash: Increase robustness of processing triangulated elements - skip empty #7467 --- src/ifcgeom/kernels/opencascade/IfcGeomTree.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ifcgeom/kernels/opencascade/IfcGeomTree.h b/src/ifcgeom/kernels/opencascade/IfcGeomTree.h index 997391fcd6..8aed46f5bc 100644 --- a/src/ifcgeom/kernels/opencascade/IfcGeomTree.h +++ b/src/ifcgeom/kernels/opencascade/IfcGeomTree.h @@ -1792,6 +1792,10 @@ namespace IfcGeom { auto& vs = elem->geometry().verts(); auto& fs = elem->geometry().faces(); + if (vs.empty() || fs.empty()) { + return; + } + gp_Trsf tr; tr.SetValues( m(0, 0), m(0, 1), m(0, 2), m(0, 3), From f0308962aaf0006122c9c92d9cb30a5b56c753a6 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 11:43:39 +0100 Subject: [PATCH 552/657] Clash: Increase robustness of processing triangulated elements - fully co-planar element #7467 --- src/ifcgeom/kernels/opencascade/IfcGeomTree.h | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/ifcgeom/kernels/opencascade/IfcGeomTree.h b/src/ifcgeom/kernels/opencascade/IfcGeomTree.h index 8aed46f5bc..46e0f06731 100644 --- a/src/ifcgeom/kernels/opencascade/IfcGeomTree.h +++ b/src/ifcgeom/kernels/opencascade/IfcGeomTree.h @@ -1863,23 +1863,36 @@ namespace IfcGeom { candidates.push_back({ std::abs(Z.Dot(ref)), ref }); } - if (candidates.empty()) { - { - gp_XYZ ref(0, 0, 1); - candidates.push_back({ std::abs(Z.Dot(ref)), ref }); + gp_Ax3 ax3; + gp_Trsf trsf2; + + for (size_t attempt = 0; attempt < 2; ++attempt) { + + if (candidates.empty() || attempt == 1) { + { + gp_XYZ ref(0, 0, 1); + candidates.push_back({std::abs(Z.Dot(ref)), ref}); + } + { + gp_XYZ ref(1, 0, 0); + candidates.push_back({std::abs(Z.Dot(ref)), ref}); + } } + + auto X = std::min_element(candidates.begin(), candidates.end(), [](auto& p1, auto& p2) { return p1.first < p2.first; })->second; + { - gp_XYZ ref(1, 0, 0); - candidates.push_back({ std::abs(Z.Dot(ref)), ref }); + try { + ax3 = gp_Ax3(gp::Origin(), Z, X); + trsf2.SetTransformation(gp::XOY(), ax3); + } catch (Standard_ConstructionError&) { + // Try again, likely we have all identical normals in candidates so + // we cannot find a suitable candidate and need the two default axes + continue; + } } } - auto X = std::min_element(candidates.begin(), candidates.end(), [](auto& p1, auto& p2) { return p1.first < p2.first; })->second; - - gp_Trsf trsf2; - gp_Ax3 ax3(gp::Origin(), Z, X); - trsf2.SetTransformation(gp::XOY(), ax3); - Bnd_Box tmp; for (auto& p : vs_transformed) { From 3d530b1d39efb3a54e716cde6f700e5dec9c91ee Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 11:43:52 +0100 Subject: [PATCH 553/657] No occt multi-threading since we have our own --- src/ifcgeom/kernels/opencascade/boolean_utils.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ifcgeom/kernels/opencascade/boolean_utils.cpp b/src/ifcgeom/kernels/opencascade/boolean_utils.cpp index 975ee00d0d..d41f1e4adf 100644 --- a/src/ifcgeom/kernels/opencascade/boolean_utils.cpp +++ b/src/ifcgeom/kernels/opencascade/boolean_utils.cpp @@ -1134,6 +1134,8 @@ bool IfcGeom::util::boolean_operation(const boolean_settings& settings, const To #endif builder->SetFuzzyValue(fuzz); builder->SetArguments(s1s); + // We use our own multi-threading in ifcopenshell on a per-product basis + builder->SetRunParallel(false); copy_operand(b, b_tmp); std::swap(b, b_tmp); builder->SetTools(b); From ad0c97a6bb6ac38b4b19677b4d151bc69ff13b65 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 11:44:08 +0100 Subject: [PATCH 554/657] Fix #7561 --- src/ifcgeom/kernels/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index fa9656b782..73882d2c71 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -42,3 +42,8 @@ foreach(kernel ${GEOMETRY_KERNELS}) endforeach() set(kernel_libraries ${kernel_libraries} PARENT_SCOPE) + +install( + FILES ifc_geomlibrary_api.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/kernels/" +) From 92ad7d2ba299d958b070030beca4af3200c991b7 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 11:54:04 +0100 Subject: [PATCH 555/657] Fix #7554 --- src/ifcgeom/IfcGeomRepresentation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcgeom/IfcGeomRepresentation.cpp b/src/ifcgeom/IfcGeomRepresentation.cpp index 48346b2831..f0c150597e 100644 --- a/src/ifcgeom/IfcGeomRepresentation.cpp +++ b/src/ifcgeom/IfcGeomRepresentation.cpp @@ -91,7 +91,7 @@ bool IfcGeom::Representation::BRep::calculate_volume(double& volume) const { volume = 0.; return false; } - volume = s->area()->to_double(); + volume = s->volume()->to_double(); return true; } From 5c31ae4c371c18525096a1ceda84dc9618c5de39 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 23 Jan 2026 22:03:28 +1100 Subject: [PATCH 556/657] Remove preference to mass/time and make it default with simpler code I generally like to minimise knobs and dials, so this is now part of the wizard but now defaults to a "NONE" unit. You also now have the option to choose "NONE" for area / volume units which makes things consistent. Enum names also match the IFC lowercase convention for conversion based units. This also simplifies the core logic and treats all units the same way instead of special cases for each unit type. (length is still special and required in Bonsai as we are inherently graphical) --- src/bonsai/bonsai/bim/module/project/ui.py | 16 +---- src/bonsai/bonsai/bim/prop.py | 27 ++++---- src/bonsai/bonsai/bim/ui.py | 6 -- src/bonsai/bonsai/core/tool.py | 2 +- src/bonsai/bonsai/core/unit.py | 49 +++---------- src/bonsai/bonsai/tool/unit.py | 80 +++++----------------- 6 files changed, 44 insertions(+), 136 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index 1a6f727b20..ac70720dbe 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -368,21 +368,11 @@ class BIM_PT_new_project_wizard(Panel): row = self.layout.row() row.prop(props, "volume_unit", text="Volume Unit") row = self.layout.row() + row.prop(props, "mass_unit", text="Mass Unit") + row = self.layout.row() + row.prop(props, "time_unit", text="Time Unit") prop_with_search(self.layout, pprops, "template_file", text="Template") - if tool.Blender.get_addon_preferences().mass_time_units_in_wizard: - header, body = self.layout.panel("Mass and Time Units", default_closed=True) - if header: - header.label(text="Mass and Time Units") - if body: - label = "Add Mass and Time Units" if not props.add_mass_time_units else "Remove Mass and Time Units" - body.prop(props, "add_mass_time_units", toggle=True, text=label) - if props.add_mass_time_units: - row = body.row() - row.prop(props, "mass_unit", text="Mass Unit") - row = body.row() - row.prop(props, "time_unit", text="Time Unit") - self.layout.use_property_split = True row = self.layout.row() row.operator("bim.create_project") diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index ec8154b167..2adbfab5d6 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -589,6 +589,7 @@ class BIMProperties(PropertyGroup): area_unit: EnumProperty( default="SQUARE_METRE", items=[ + ("NONE", "None", ""), ("NANO/SQUARE_METRE", "Square Nanometre", ""), ("MICRO/SQUARE_METRE", "Square Micrometre", ""), ("MILLI/SQUARE_METRE", "Square Millimetre", ""), @@ -606,6 +607,7 @@ class BIMProperties(PropertyGroup): volume_unit: EnumProperty( default="CUBIC_METRE", items=[ + ("NONE", "None", ""), ("NANO/CUBIC_METRE", "Cubic Nanometre", ""), ("MICRO/CUBIC_METRE", "Cubic Micrometre", ""), ("MILLI/CUBIC_METRE", "Cubic Millimetre", ""), @@ -619,31 +621,28 @@ class BIMProperties(PropertyGroup): ], name="IFC Volume Unit", ) - add_mass_time_units: bpy.props.BoolProperty( - name="Add Mass and Time Units", - description="Enable to define mass and time units for the project", - default=False, - ) mass_unit: EnumProperty( items=[ - ("KILOGRAM", "Kilogram", "Kilograms"), + ("NONE", "None", ""), ("GRAM", "Gram", "Grams"), - ("POUND", "Pound", "Pounds"), - ("OUNCE", "Ounce", "Ounces"), - ("TONNE", "Tonne", "Metric Tons"), + ("KILO/KILOGRAM", "Kilogram", "Kilograms"), + ("MEGA/TONNE", "Tonne", "Metric Tons"), + ("pound", "Pound", "Pounds"), + ("ounce", "Ounce", "Ounces"), ], name="Mass Unit", - default="KILOGRAM", + default="NONE", ) time_unit: EnumProperty( items=[ + ("NONE", "None", ""), ("SECOND", "Second", "Seconds"), - ("MINUTE", "Minute", "Minutes"), - ("HOUR", "Hour", "Hours"), - ("DAY", "Day", "Days"), + ("minute", "Minute", "Minutes"), + ("hour", "Hour", "Hours"), + ("day", "Day", "Days"), ], name="Time Unit", - default="HOUR", + default="NONE", ) tab_visibilities: CollectionProperty(type=BIMTabVisibility, name="Tab Visibilities") active_tab_visibility_index: IntProperty(name="Active Tab Visibility Index") diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 49c2cf51b6..81eb4c45d0 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -717,12 +717,6 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): default=False, ) - mass_time_units_in_wizard: BoolProperty( - name="Mass and time units in project wizard", - description="Show mass and time units section in the new project wizard panel", - default=False, - ) - chain_filter_with_set_operations: BoolProperty( name="NEW Filter mode: Enable chained filters with set operations", description="Enable chaining search filters with set operations: ADD (union: combine sets), SUBTRACT (difference: remove from set), FILTER (intersection: only elements in both sets), with autocomplete suggestions for filter values", diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index e231571834..c07ac9f483 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -1124,7 +1124,7 @@ class Unit: def enable_editing_units(cls): pass def export_unit_attributes(cls): pass def get_scene_unit_name(cls, unit_type): pass - def get_scene_unit_si_prefix(cls, unit_type): pass + def get_scene_unit_si_prefix(cls, name): pass def import_unit_attributes(cls, unit): pass def import_units(cls): pass def is_scene_unit_metric(cls): pass diff --git a/src/bonsai/bonsai/core/unit.py b/src/bonsai/bonsai/core/unit.py index fde75297b1..a8325f9d89 100644 --- a/src/bonsai/bonsai/core/unit.py +++ b/src/bonsai/bonsai/core/unit.py @@ -27,46 +27,17 @@ if TYPE_CHECKING: def assign_scene_units(ifc: type[tool.Ifc], unit: type[tool.Unit]) -> None: - if unit.is_scene_unit_metric(): - lengthunit = ifc.run( - "unit.add_si_unit", unit_type="LENGTHUNIT", prefix=unit.get_scene_unit_si_prefix("LENGTHUNIT") - ) - areaunit = ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix=unit.get_scene_unit_si_prefix("AREAUNIT")) - volumeunit = ifc.run( - "unit.add_si_unit", unit_type="VOLUMEUNIT", prefix=unit.get_scene_unit_si_prefix("VOLUMEUNIT") - ) - planeangleunit = ifc.run("unit.add_conversion_based_unit", name="degree") - units = [lengthunit, areaunit, volumeunit, planeangleunit] - - if unit.add_mass_and_time_units(): - prefix = unit.get_scene_unit_si_prefix("MASSUNIT") - if prefix == "CONVERSION": - massunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("MASSUNIT").lower()) + units = [] + for unit_type in ["LENGTHUNIT", "AREAUNIT", "VOLUMEUNIT", "MASSUNIT", "TIMEUNIT"]: + if name := unit.get_scene_unit_name(unit_type): + if unit.is_si_unit(name): + units.append( + ifc.run("unit.add_si_unit", unit_type=unit_type, prefix=unit.get_scene_unit_si_prefix(name)) + ) else: - massunit = ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix=prefix) - prefix = unit.get_scene_unit_si_prefix("TIMEUNIT") - if prefix == "CONVERSION": - timeunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("TIMEUNIT").lower()) - else: - timeunit = ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=prefix) - units += [massunit, timeunit] - - else: - lengthunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("LENGTHUNIT")) - areaunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("AREAUNIT")) - volumeunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("VOLUMEUNIT")) - planeangleunit = ifc.run("unit.add_conversion_based_unit", name="degree") - units = [lengthunit, areaunit, volumeunit, planeangleunit] - - if unit.add_mass_and_time_units(): - massunit = ifc.run("unit.add_conversion_based_unit", name=unit.get_scene_unit_name("MASSUNIT").lower()) - time_unit_name = unit.get_scene_unit_name("TIMEUNIT") - if time_unit_name == "SECOND": - timeunit = ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None) - else: - timeunit = ifc.run("unit.add_conversion_based_unit", name=time_unit_name.lower()) - units += [massunit, timeunit] - ifc.run("unit.assign_unit", units=units) + units.append(ifc.run("unit.add_conversion_based_unit", name=name)) + if units: + ifc.run("unit.assign_unit", units=units) def assign_unit(ifc: type[tool.Ifc], unit_tool: type[tool.Unit], unit: ifcopenshell.entity_instance) -> None: diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index f7c9ce300b..b98e4fc272 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -330,66 +330,26 @@ class Unit(bonsai.core.tool.Unit): return bonsai.bim.helper.export_attributes(props.unit_attributes, callback=callback) @classmethod - def get_scene_unit_name(cls, unit_type: UNIT_TYPE) -> str: - bim_props = tool.Blender.get_bim_props() + def get_scene_unit_name(cls, unit_type: UNIT_TYPE) -> str | None: if unit_type == "LENGTHUNIT": - assert bpy.context.scene - props = bpy.context.scene.unit_settings - if props.length_unit == "MILES": - return "mile" - elif props.length_unit == "FEET" or props.length_unit == "ADAPTIVE": - return "foot" - elif props.length_unit == "INCHES": - return "inch" - elif props.length_unit == "THOU": - return "thou" - return "foot" - elif unit_type == "AREAUNIT": - return bim_props.area_unit - elif unit_type == "VOLUMEUNIT": - return bim_props.volume_unit - elif unit_type == "MASSUNIT": - return bim_props.mass_unit.lower() - elif unit_type == "TIMEUNIT": - return bim_props.time_unit.lower() - else: - assert_never(unit_type) + name = bpy.context.scene.unit_settings.length_unit + name = {"MILES": "mile", "FEET": "foot", "INCHES": "inch", "THOU": "thou", "ADAPTIVE": "METERS"}.get( + name, name + ) + if len(name) > len("METERS") and name.endswith("METERS"): + return f"{name[:-6]}/METRE" + return name + bim_props = tool.Blender.get_bim_props() + if (name := getattr(bim_props, f"{unit_type[:-4].lower()}_unit")) != "NONE": + return name @classmethod - def get_scene_unit_si_prefix(cls, unit_type: UNIT_TYPE) -> Union[str, None]: - bim_props = tool.Blender.get_bim_props() - if unit_type == "LENGTHUNIT": - assert bpy.context.scene - props = bpy.context.scene.unit_settings - if props.length_unit == "ADAPTIVE" or props.length_unit == "METERS": - return - return props.length_unit.replace("METERS", "") - elif unit_type == "AREAUNIT": - unit = bim_props.area_unit - elif unit_type == "VOLUMEUNIT": - unit = bim_props.volume_unit - elif unit_type == "MASSUNIT": - unit = bim_props.mass_unit - if unit == "GRAM": - return None - elif unit == "KILOGRAM": - return "KILO" - elif unit == "TONNE": - return "MEGA" - elif unit in ["POUND", "OUNCE"]: - return "CONVERSION" - else: - return None - elif unit_type == "TIMEUNIT": - unit = bim_props.time_unit - if unit == "SECOND": - return None - else: - return "CONVERSION" - else: - assert_never(unit_type) - if "/" in unit: - return unit.split("/")[0] + def is_si_unit(cls, name: str) -> bool: + return name[0].isupper() + + @classmethod + def get_scene_unit_si_prefix(cls, name: str) -> str | None: + return name.split("/")[0] if "/" in name else None @classmethod def import_unit_attributes(cls, unit: ifcopenshell.entity_instance) -> None: @@ -504,9 +464,3 @@ class Unit(bonsai.core.tool.Unit): elif ifc_class == "IfcMonetaryUnit": return "COPY_ID" return "MOD_MESHDEFORM" - - @classmethod - def add_mass_and_time_units(cls) -> bool: - """Return True if the user wants to add mass and time units, False otherwise.""" - bim_props = tool.Blender.get_bim_props() - return getattr(bim_props, "add_mass_time_units", False) From b41d3ae2b743bcb7357b64c486b75d03432902b4 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 23 Jan 2026 22:32:48 +1100 Subject: [PATCH 557/657] Bump IfcConvert documentation including .json and .rdb support --- src/ifcopenshell-python/docs/ifcconvert.rst | 3 +- .../docs/ifcconvert/usage.rst | 62 ++++++++++++++----- 2 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/ifcopenshell-python/docs/ifcconvert.rst b/src/ifcopenshell-python/docs/ifcconvert.rst index bbdbe0c14c..beef450578 100644 --- a/src/ifcopenshell-python/docs/ifcconvert.rst +++ b/src/ifcopenshell-python/docs/ifcconvert.rst @@ -12,7 +12,8 @@ table below. +=========================+=========================+======================+ | .ifc | .obj, .dae, .glb, .stp, | IfcConvert | | | .igs, .xml, .svg, .h5, | | -| | .ttl, .ifc | | +| | .ttl, .ifc, .rdb, | | +| | .json (xeokit) | | +-------------------------+-------------------------+----------------------+ | .ifc | .dae, .abc, .usd, .obj, | Bonsai_ | | | .ply, .stl, .fbx, .glb, | | diff --git a/src/ifcopenshell-python/docs/ifcconvert/usage.rst b/src/ifcopenshell-python/docs/ifcconvert/usage.rst index 2c8ffeee5c..3c6846d25b 100644 --- a/src/ifcopenshell-python/docs/ifcconvert/usage.rst +++ b/src/ifcopenshell-python/docs/ifcconvert/usage.rst @@ -70,7 +70,7 @@ CLI Manual $ IfcConvert -h - IfcOpenShell IfcConvert 0.8.1-c49ca69 (OCC 7.8.1) + IfcOpenShell IfcConvert 0.8.4-158fe92 (OCC 7.8.1) Usage: IfcConvert [options] [] Converts (the geometry in) an IFC file into one of the following formats: @@ -80,6 +80,8 @@ CLI Manual .stp STEP Standard for the Exchange of Product Data .igs IGES Initial Graphics Exchange Specification .xml XML Property definitions and decomposition tree + .json JSON Property definitions and decomposition tree in xeokit json format + .rdb RocksDB RocksDB Key-Value store serialization of IFC data .svg SVG Scalable Vector Graphics (2D floor plan) .h5 HDF Hierarchical Data Format storing positions, normals and indices .ttl TTL/WKT RDF Turtle with Well-Known-Text geometry @@ -108,7 +110,8 @@ CLI Manual Geometry options: --kernel arg (=opencascade) Geometry kernel to use (opencascade, - cgal, cgal-simple). + cgal, cgal-simple, hybrid-cgal-simple-o + pencascade). -j [ --threads ] arg (=1) Number of parallel processing threads for geometry interpretation. --center-model Centers the elements by applying the @@ -118,6 +121,11 @@ CLI Manual --center-model-geometry Centers the elements by applying the center point of all mesh vertices as an offset. + --model-offset arg Applies an arbitrary offset of form + 'x;y;z' to all placements. + --model-rotation arg Applies an arbitrary quaternion + rotation of form 'x;y;z;w' to all + placements. --include arg Specifies that the instances that match a specific filtering criteria are to be included in the geometrical output: @@ -207,13 +215,12 @@ CLI Manual of surface normals, even if the faces are not properly oriented in the IFC file. - --length-unit arg (= 1) - --angle-unit arg (= 1) - --precision arg (= 1e-05) --dimensionality arg (= 1) Specifies whether to include curves and/or surfaces and solids in the output result. Defaults to only - surfaces and solids. + surfaces and solids (SURFACES_AND_SOLID + S). Other possible values are CURVES, + CURVES_SURFACES_AND_SOLIDS. --layerset-first Assigns the first layer material of the layerset to the complete product. --disable-boolean-result Specifies whether to disable the @@ -262,9 +269,11 @@ CLI Manual geometrical output back to the unit of measure in which it is defined in the IFC file. Default is to use meters. - --context-ids arg - --context-ids arg - --context-ids arg + --context-ids arg List of comma separated context ids to + process - e.g. '15,29' (no quotes + needed). + --context-types arg Currently option has no effect. + --context-identifiers arg Currently option has no effect. --iterator-output arg (= 0) --disable-opening-subtractions Specifies whether to disable the boolean subtraction of @@ -304,10 +313,18 @@ CLI Manual geometry output. --circle-segments arg (= 16) Number of segments to approximate full circles in CGAL kernel. + --cgal-smooth-angle-degrees arg (= -1) + Angle in degrees under which adjacent + facets will have averaged vertex + normals in CGAL output. NB irrespective + of original IFC geometry types. + Defaults to -1 to disable smoothing. --keep-bounding-boxes Default is to removes IfcBoundingBox from model prior to converting geometry.Setting this option disables that behaviour + --compute-curvature Specifies whether function_item_evaluat + or.evaluate() computes curvature. --function-step-type arg (= 0) Indicates the method used for defining step size when evaluating function-based curves. Provides @@ -320,12 +337,24 @@ CLI Manual parallel. May decrease performance, but also decrease output size (in the future) - --model-offset arg Applies an arbitrary offset of form - 'x,y,z' to all placements. - --model-rotation arg Applies an arbitrary quaternion - rotation of form 'x,y,z,w' to all - placements. + --permissive-shape-reuse Traverse geometry-level transformations + and apply to product-level placement in + order to increase reuse of geometries --triangulation-type arg (= 0) Type of planar facet to be emitted + --cgal-original-edges Try to emit original edge face boundary + edges instead of recomputed ones based + on face normal. Falls back to + triangulated data in case of boolean + operands and faces with holes. + --cache-shapes Experimental as not all topology hash + functions fully implemented + --max-offset arg Maximum translation offset to be + observed after which median offset in + model gets removed and logged. Requires + --no-parallel-mapping. + --max-offset-deviation arg To retain field of view, completely + remove elements outside of the median + offset. Requires --no-parallel-mapping. Serialization options: --bounds arg Specifies the bounding rectangle, for @@ -421,3 +450,8 @@ CLI Manual --wkt-use-section Use a geometrical section rather than full polyhedral output and footprint in TTL WKT + --separate-z-up-node Introduce a separate Z-Up node into the + GlTF hierarchy instead of multiplying + the transform into the root node + matrices + From cc542ad07439c39b9a851e6cd6bf339e310cb70e Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 23 Jan 2026 22:33:20 +1100 Subject: [PATCH 558/657] See #7503. Add docs about geometry_library --- .../geometry_processing.rst | 14 +++++++--- .../docs/ifcopenshell/geometry_settings.rst | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst index 0c4753807a..6058781de4 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst @@ -19,7 +19,6 @@ edges, and faces, or alternatively an OpenCASCADE BRep. applications. See the `Geometry iterator`_ section below after reading this to see how to process geometry with multiple threads. - Here is a simple example of processing a single wall into a list of vertices and faces. In this example, a ``shape`` variable is returned, which holds geometry related information in ``shape.geometry``: @@ -33,8 +32,12 @@ related information in ``shape.geometry``: ifc_file = ifcopenshell.open('model.ifc') element = ifc_file.by_type('IfcWall')[0] + # Create a shape using a hybrid of the cgal-simple geometry kernel and opencascade as a fallback + # Choosing a geometry kernel has a big impact on speed and capability. + # It is recommended to use the "hybrid-cgal-simple-opencascade" kernel. settings = ifcopenshell.geom.settings() - shape = ifcopenshell.geom.create_shape(settings, element) + shape = ifcopenshell.geom.create_shape( + settings, element, geometry_library="hybrid-cgal-simple-opencascade") # The GUID of the element we processed print(shape.guid) @@ -224,7 +227,8 @@ Here is a simple example in Python: ifc_file = ifcopenshell.open('model.ifc') settings = ifcopenshell.geom.settings() - iterator = ifcopenshell.geom.iterator(settings, ifc_file, multiprocessing.cpu_count()) + iterator = ifcopenshell.geom.iterator( + settings, ifc_file, multiprocessing.cpu_count(), geometry_library="hybrid-cgal-simple-opencascade") if iterator.initialize(): while True: shape = iterator.get() @@ -252,7 +256,9 @@ only process wall elements. .. code-block:: python walls = ifc.by_type('IfcWall') - iterator = ifcopenshell.geom.iterator(settings, ifc, multiprocessing.cpu_count(), include=walls) + iterator = ifcopenshell.geom.iterator( + settings, ifc, multiprocessing.cpu_count(), + include=walls, geometry_library="hybrid-cgal-simple-opencascade") .. note:: diff --git a/src/ifcopenshell-python/docs/ifcopenshell/geometry_settings.rst b/src/ifcopenshell-python/docs/ifcopenshell/geometry_settings.rst index a41489a4dd..f73c7edc28 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell/geometry_settings.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell/geometry_settings.rst @@ -111,6 +111,32 @@ In Python, this is set when the iterator is constructed: import multiprocessing iterator = ifcopenshell.geom.iterator(settings, ifc_file, num_threads=multiprocessing.cpu_count()) +geometry_library +^^^^^^^^^^^^^^^^ + ++--------+-------------------+-------------+ +| Type | IfcConvert Option | Default | ++========+===================+=============+ +| STRING | ``--kernel`` | opencascade | ++--------+-------------------+-------------+ + +IfcOpenShell supports multiple geometry kernels to process geometry. Choosing the geometry kernel has trade-offs on geometric support, speed, and maturity. It is possible and recommended to chose a hybrid geometry kernel by providing the name ``hybrid-kernelX-kernelY``, where ``kernelX`` is the name of the first kernel to try, and ``kernelY`` is the name of the fallback kernel, for example ``hybrid-cgal-simple-opencascade``. + +.. csv-table:: + :header: "Comparison", "cgal-simple", "cgal", "opencascade" + + "Speed", "Very fast", "Fast", "Slow" + "Curves in extrusion footprints", "Only circle and ellipse arcs are converted to polylines", "Only circle and ellipse arcs are converted to polylines", "Full support including beziers and nurbs" + "Advanced (curved) breps", "No", "No", "Full support" + "Boolean operations", "No", "Full support", "Full support" + "Boolean operations with tolerance / fuzziness handling", "No", "Only manifold inputs", "Full support, including non-manifold inputs" + "Sweeps along alignment curves", "Partial", "Partial", "Full support" + +.. code-block:: python + + iterator = ifcopenshell.geom.iterator(settings, ifc_file, geometry_library="hybrid-cgal-simple-opencascade") + ifcopenshell.geom.create_shape(settings, element, geometry_library="opencascade") + Iterator settings ----------------- From 1137e7b77b9e2cdfcc6dade7c3a4d99efbdcab2a Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 14:35:23 +0100 Subject: [PATCH 559/657] Fix rule compilation regarding indeterminate #7529 --- .../ifcopenshell/express/rule_compiler.py | 19 +- .../ifcopenshell/express/rules/IFC2X3.py | 2631 +++++----- .../ifcopenshell/express/rules/IFC4.py | 3275 ++++++------- .../ifcopenshell/express/rules/IFC4X1.py | 3301 ++++++------- .../ifcopenshell/express/rules/IFC4X2.py | 3499 ++++++------- .../ifcopenshell/express/rules/IFC4X3.py | 4351 +++++++++-------- .../ifcopenshell/express/rules/IFC4X3_ADD1.py | 4237 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_ADD2.py | 4245 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_RC1.py | 4191 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_RC2.py | 4231 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_RC3.py | 4255 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_RC4.py | 4293 ++++++++-------- .../ifcopenshell/express/rules/IFC4X3_TC1.py | 4237 ++++++++-------- 13 files changed, 23406 insertions(+), 23359 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rule_compiler.py b/src/ifcopenshell-python/ifcopenshell/express/rule_compiler.py index 545d68c50a..41fc6764c1 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rule_compiler.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rule_compiler.py @@ -750,6 +750,14 @@ class AttributeGetattrTransformer(ast.NodeTransformer): if node.attr == "create_entity": return node + if node.attr.startswith("__"): + return node + + # Don't rewrite at module scope (top-level, no indent) + enclosing_stmt = next((p for p in parents if isinstance(p, ast.stmt)), None) + if enclosing_stmt is not None and isinstance(getattr(enclosing_stmt, "parent", None), ast.Module): + return node + new_value = self.visit(node.value) # Replace the Attribute node with a call to the built-in `getattr` function @@ -842,18 +850,21 @@ if __name__ == "__main__": print( """ +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: return v() is not None except IndexError as e: return False - else: return v is not None + else: return not is_indeterminate(v) """, "\n", file=output, sep="\n", ) print( - "def nvl(v, default): return v if v is not None else default", + "def nvl(v, default): return v if not is_indeterminate(v) else default", "\n", file=output, sep="\n", @@ -871,14 +882,14 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py index e5ddfdad00..33f8b79c6f 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC2X3.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,1479 +152,1479 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +snow_s = IfcActionSourceTypeEnum.SNOW_S +wind_w = IfcActionSourceTypeEnum.WIND_W +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +fire = IfcActionSourceTypeEnum.FIRE +impulse = IfcActionSourceTypeEnum.IMPULSE +impact = IfcActionSourceTypeEnum.IMPACT +transport = IfcActionSourceTypeEnum.TRANSPORT +erection = IfcActionSourceTypeEnum.ERECTION +propping = IfcActionSourceTypeEnum.PROPPING +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +creep = IfcActionSourceTypeEnum.CREEP +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +ice = IfcActionSourceTypeEnum.ICE +current = IfcActionSourceTypeEnum.CURRENT +wave = IfcActionSourceTypeEnum.WAVE +rain = IfcActionSourceTypeEnum.RAIN +brakes = IfcActionSourceTypeEnum.BRAKES +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +home = IfcAddressTypeEnum.HOME +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAheadOrBehind = enum_namespace() -ahead = express_getattr(IfcAheadOrBehind, 'AHEAD', INDETERMINATE) -behind = express_getattr(IfcAheadOrBehind, 'BEHIND', INDETERMINATE) +ahead = IfcAheadOrBehind.AHEAD +behind = IfcAheadOrBehind.BEHIND IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -eyeball = express_getattr(IfcAirTerminalTypeEnum, 'EYEBALL', INDETERMINATE) -iris = express_getattr(IfcAirTerminalTypeEnum, 'IRIS', INDETERMINATE) -lineargrille = express_getattr(IfcAirTerminalTypeEnum, 'LINEARGRILLE', INDETERMINATE) -lineardiffuser = express_getattr(IfcAirTerminalTypeEnum, 'LINEARDIFFUSER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +grille = IfcAirTerminalTypeEnum.GRILLE +register = IfcAirTerminalTypeEnum.REGISTER +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +eyeball = IfcAirTerminalTypeEnum.EYEBALL +iris = IfcAirTerminalTypeEnum.IRIS +lineargrille = IfcAirTerminalTypeEnum.LINEARGRILLE +lineardiffuser = IfcAirTerminalTypeEnum.LINEARDIFFUSER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = IfcAssemblyPlaceEnum.SITE +factory = IfcAssemblyPlaceEnum.FACTORY +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +joist = IfcBeamTypeEnum.JOIST +lintel = IfcBeamTypeEnum.LINTEL +t_beam = IfcBeamTypeEnum.T_BEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +equalto = IfcBenchmarkEnum.EQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO IfcBoilerTypeEnum = enum_namespace() -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = IfcBoilerTypeEnum.WATER +steam = IfcBoilerTypeEnum.STEAM +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = IfcBooleanOperator.UNION +intersection = IfcBooleanOperator.INTERSECTION +difference = IfcBooleanOperator.DIFFERENCE IfcBuildingElementProxyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +cross = IfcCableCarrierFittingTypeEnum.CROSS +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -modifiedadded = express_getattr(IfcChangeActionEnum, 'MODIFIEDADDED', INDETERMINATE) -modifieddeleted = express_getattr(IfcChangeActionEnum, 'MODIFIEDDELETED', INDETERMINATE) +nochange = IfcChangeActionEnum.NOCHANGE +modified = IfcChangeActionEnum.MODIFIED +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +modifiedadded = IfcChangeActionEnum.MODIFIEDADDED +modifieddeleted = IfcChangeActionEnum.MODIFIEDDELETED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +watercooled = IfcChillerTypeEnum.WATERCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCompressorTypeEnum = enum_namespace() -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = IfcCompressorTypeEnum.DYNAMIC +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rotary = IfcCompressorTypeEnum.ROTARY +scroll = IfcCompressorTypeEnum.SCROLL +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +booster = IfcCompressorTypeEnum.BOOSTER +opentype = IfcCompressorTypeEnum.OPENTYPE +hermetic = IfcCompressorTypeEnum.HERMETIC +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +twinscrew = IfcCompressorTypeEnum.TWINSCREW +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +atend = IfcConnectionTypeEnum.ATEND +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +advisory = IfcConstraintEnum.ADVISORY +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -proportionalintegral = express_getattr(IfcControllerTypeEnum, 'PROPORTIONALINTEGRAL', INDETERMINATE) -proportionalintegralderivative = express_getattr(IfcControllerTypeEnum, 'PROPORTIONALINTEGRALDERIVATIVE', INDETERMINATE) -timedtwoposition = express_getattr(IfcControllerTypeEnum, 'TIMEDTWOPOSITION', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +proportional = IfcControllerTypeEnum.PROPORTIONAL +proportionalintegral = IfcControllerTypeEnum.PROPORTIONALINTEGRAL +proportionalintegralderivative = IfcControllerTypeEnum.PROPORTIONALINTEGRALDERIVATIVE +timedtwoposition = IfcControllerTypeEnum.TIMEDTWOPOSITION +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +tender = IfcCostScheduleTypeEnum.TENDER +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +flooring = IfcCoveringTypeEnum.FLOORING +cladding = IfcCoveringTypeEnum.CLADDING +roofing = IfcCoveringTypeEnum.ROOFING +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +sleeving = IfcCoveringTypeEnum.SLEEVING +wrapping = IfcCoveringTypeEnum.WRAPPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCurrencyEnum = enum_namespace() -aed = express_getattr(IfcCurrencyEnum, 'AED', INDETERMINATE) -aes = express_getattr(IfcCurrencyEnum, 'AES', INDETERMINATE) -ats = express_getattr(IfcCurrencyEnum, 'ATS', INDETERMINATE) -aud = express_getattr(IfcCurrencyEnum, 'AUD', INDETERMINATE) -bbd = express_getattr(IfcCurrencyEnum, 'BBD', INDETERMINATE) -beg = express_getattr(IfcCurrencyEnum, 'BEG', INDETERMINATE) -bgl = express_getattr(IfcCurrencyEnum, 'BGL', INDETERMINATE) -bhd = express_getattr(IfcCurrencyEnum, 'BHD', INDETERMINATE) -bmd = express_getattr(IfcCurrencyEnum, 'BMD', INDETERMINATE) -bnd = express_getattr(IfcCurrencyEnum, 'BND', INDETERMINATE) -brl = express_getattr(IfcCurrencyEnum, 'BRL', INDETERMINATE) -bsd = express_getattr(IfcCurrencyEnum, 'BSD', INDETERMINATE) -bwp = express_getattr(IfcCurrencyEnum, 'BWP', INDETERMINATE) -bzd = express_getattr(IfcCurrencyEnum, 'BZD', INDETERMINATE) -cad = express_getattr(IfcCurrencyEnum, 'CAD', INDETERMINATE) -cbd = express_getattr(IfcCurrencyEnum, 'CBD', INDETERMINATE) -chf = express_getattr(IfcCurrencyEnum, 'CHF', INDETERMINATE) -clp = express_getattr(IfcCurrencyEnum, 'CLP', INDETERMINATE) -cny = express_getattr(IfcCurrencyEnum, 'CNY', INDETERMINATE) -cys = express_getattr(IfcCurrencyEnum, 'CYS', INDETERMINATE) -czk = express_getattr(IfcCurrencyEnum, 'CZK', INDETERMINATE) -ddp = express_getattr(IfcCurrencyEnum, 'DDP', INDETERMINATE) -dem = express_getattr(IfcCurrencyEnum, 'DEM', INDETERMINATE) -dkk = express_getattr(IfcCurrencyEnum, 'DKK', INDETERMINATE) -egl = express_getattr(IfcCurrencyEnum, 'EGL', INDETERMINATE) -est = express_getattr(IfcCurrencyEnum, 'EST', INDETERMINATE) -eur = express_getattr(IfcCurrencyEnum, 'EUR', INDETERMINATE) -fak = express_getattr(IfcCurrencyEnum, 'FAK', INDETERMINATE) -fim = express_getattr(IfcCurrencyEnum, 'FIM', INDETERMINATE) -fjd = express_getattr(IfcCurrencyEnum, 'FJD', INDETERMINATE) -fkp = express_getattr(IfcCurrencyEnum, 'FKP', INDETERMINATE) -frf = express_getattr(IfcCurrencyEnum, 'FRF', INDETERMINATE) -gbp = express_getattr(IfcCurrencyEnum, 'GBP', INDETERMINATE) -gip = express_getattr(IfcCurrencyEnum, 'GIP', INDETERMINATE) -gmd = express_getattr(IfcCurrencyEnum, 'GMD', INDETERMINATE) -grx = express_getattr(IfcCurrencyEnum, 'GRX', INDETERMINATE) -hkd = express_getattr(IfcCurrencyEnum, 'HKD', INDETERMINATE) -huf = express_getattr(IfcCurrencyEnum, 'HUF', INDETERMINATE) -ick = express_getattr(IfcCurrencyEnum, 'ICK', INDETERMINATE) -idr = express_getattr(IfcCurrencyEnum, 'IDR', INDETERMINATE) -ils = express_getattr(IfcCurrencyEnum, 'ILS', INDETERMINATE) -inr = express_getattr(IfcCurrencyEnum, 'INR', INDETERMINATE) -irp = express_getattr(IfcCurrencyEnum, 'IRP', INDETERMINATE) -itl = express_getattr(IfcCurrencyEnum, 'ITL', INDETERMINATE) -jmd = express_getattr(IfcCurrencyEnum, 'JMD', INDETERMINATE) -jod = express_getattr(IfcCurrencyEnum, 'JOD', INDETERMINATE) -jpy = express_getattr(IfcCurrencyEnum, 'JPY', INDETERMINATE) -kes = express_getattr(IfcCurrencyEnum, 'KES', INDETERMINATE) -krw = express_getattr(IfcCurrencyEnum, 'KRW', INDETERMINATE) -kwd = express_getattr(IfcCurrencyEnum, 'KWD', INDETERMINATE) -kyd = express_getattr(IfcCurrencyEnum, 'KYD', INDETERMINATE) -lkr = express_getattr(IfcCurrencyEnum, 'LKR', INDETERMINATE) -luf = express_getattr(IfcCurrencyEnum, 'LUF', INDETERMINATE) -mtl = express_getattr(IfcCurrencyEnum, 'MTL', INDETERMINATE) -mur = express_getattr(IfcCurrencyEnum, 'MUR', INDETERMINATE) -mxn = express_getattr(IfcCurrencyEnum, 'MXN', INDETERMINATE) -myr = express_getattr(IfcCurrencyEnum, 'MYR', INDETERMINATE) -nlg = express_getattr(IfcCurrencyEnum, 'NLG', INDETERMINATE) -nzd = express_getattr(IfcCurrencyEnum, 'NZD', INDETERMINATE) -omr = express_getattr(IfcCurrencyEnum, 'OMR', INDETERMINATE) -pgk = express_getattr(IfcCurrencyEnum, 'PGK', INDETERMINATE) -php = express_getattr(IfcCurrencyEnum, 'PHP', INDETERMINATE) -pkr = express_getattr(IfcCurrencyEnum, 'PKR', INDETERMINATE) -pln = express_getattr(IfcCurrencyEnum, 'PLN', INDETERMINATE) -ptn = express_getattr(IfcCurrencyEnum, 'PTN', INDETERMINATE) -qar = express_getattr(IfcCurrencyEnum, 'QAR', INDETERMINATE) -rur = express_getattr(IfcCurrencyEnum, 'RUR', INDETERMINATE) -sar = express_getattr(IfcCurrencyEnum, 'SAR', INDETERMINATE) -scr = express_getattr(IfcCurrencyEnum, 'SCR', INDETERMINATE) -sek = express_getattr(IfcCurrencyEnum, 'SEK', INDETERMINATE) -sgd = express_getattr(IfcCurrencyEnum, 'SGD', INDETERMINATE) -skp = express_getattr(IfcCurrencyEnum, 'SKP', INDETERMINATE) -thb = express_getattr(IfcCurrencyEnum, 'THB', INDETERMINATE) -trl = express_getattr(IfcCurrencyEnum, 'TRL', INDETERMINATE) -ttd = express_getattr(IfcCurrencyEnum, 'TTD', INDETERMINATE) -twd = express_getattr(IfcCurrencyEnum, 'TWD', INDETERMINATE) -usd = express_getattr(IfcCurrencyEnum, 'USD', INDETERMINATE) -veb = express_getattr(IfcCurrencyEnum, 'VEB', INDETERMINATE) -vnd = express_getattr(IfcCurrencyEnum, 'VND', INDETERMINATE) -xeu = express_getattr(IfcCurrencyEnum, 'XEU', INDETERMINATE) -zar = express_getattr(IfcCurrencyEnum, 'ZAR', INDETERMINATE) -zwd = express_getattr(IfcCurrencyEnum, 'ZWD', INDETERMINATE) -nok = express_getattr(IfcCurrencyEnum, 'NOK', INDETERMINATE) +aed = IfcCurrencyEnum.AED +aes = IfcCurrencyEnum.AES +ats = IfcCurrencyEnum.ATS +aud = IfcCurrencyEnum.AUD +bbd = IfcCurrencyEnum.BBD +beg = IfcCurrencyEnum.BEG +bgl = IfcCurrencyEnum.BGL +bhd = IfcCurrencyEnum.BHD +bmd = IfcCurrencyEnum.BMD +bnd = IfcCurrencyEnum.BND +brl = IfcCurrencyEnum.BRL +bsd = IfcCurrencyEnum.BSD +bwp = IfcCurrencyEnum.BWP +bzd = IfcCurrencyEnum.BZD +cad = IfcCurrencyEnum.CAD +cbd = IfcCurrencyEnum.CBD +chf = IfcCurrencyEnum.CHF +clp = IfcCurrencyEnum.CLP +cny = IfcCurrencyEnum.CNY +cys = IfcCurrencyEnum.CYS +czk = IfcCurrencyEnum.CZK +ddp = IfcCurrencyEnum.DDP +dem = IfcCurrencyEnum.DEM +dkk = IfcCurrencyEnum.DKK +egl = IfcCurrencyEnum.EGL +est = IfcCurrencyEnum.EST +eur = IfcCurrencyEnum.EUR +fak = IfcCurrencyEnum.FAK +fim = IfcCurrencyEnum.FIM +fjd = IfcCurrencyEnum.FJD +fkp = IfcCurrencyEnum.FKP +frf = IfcCurrencyEnum.FRF +gbp = IfcCurrencyEnum.GBP +gip = IfcCurrencyEnum.GIP +gmd = IfcCurrencyEnum.GMD +grx = IfcCurrencyEnum.GRX +hkd = IfcCurrencyEnum.HKD +huf = IfcCurrencyEnum.HUF +ick = IfcCurrencyEnum.ICK +idr = IfcCurrencyEnum.IDR +ils = IfcCurrencyEnum.ILS +inr = IfcCurrencyEnum.INR +irp = IfcCurrencyEnum.IRP +itl = IfcCurrencyEnum.ITL +jmd = IfcCurrencyEnum.JMD +jod = IfcCurrencyEnum.JOD +jpy = IfcCurrencyEnum.JPY +kes = IfcCurrencyEnum.KES +krw = IfcCurrencyEnum.KRW +kwd = IfcCurrencyEnum.KWD +kyd = IfcCurrencyEnum.KYD +lkr = IfcCurrencyEnum.LKR +luf = IfcCurrencyEnum.LUF +mtl = IfcCurrencyEnum.MTL +mur = IfcCurrencyEnum.MUR +mxn = IfcCurrencyEnum.MXN +myr = IfcCurrencyEnum.MYR +nlg = IfcCurrencyEnum.NLG +nzd = IfcCurrencyEnum.NZD +omr = IfcCurrencyEnum.OMR +pgk = IfcCurrencyEnum.PGK +php = IfcCurrencyEnum.PHP +pkr = IfcCurrencyEnum.PKR +pln = IfcCurrencyEnum.PLN +ptn = IfcCurrencyEnum.PTN +qar = IfcCurrencyEnum.QAR +rur = IfcCurrencyEnum.RUR +sar = IfcCurrencyEnum.SAR +scr = IfcCurrencyEnum.SCR +sek = IfcCurrencyEnum.SEK +sgd = IfcCurrencyEnum.SGD +skp = IfcCurrencyEnum.SKP +thb = IfcCurrencyEnum.THB +trl = IfcCurrencyEnum.TRL +ttd = IfcCurrencyEnum.TTD +twd = IfcCurrencyEnum.TWD +usd = IfcCurrencyEnum.USD +veb = IfcCurrencyEnum.VEB +vnd = IfcCurrencyEnum.VND +xeu = IfcCurrencyEnum.XEU +zar = IfcCurrencyEnum.ZAR +zwd = IfcCurrencyEnum.ZWD +nok = IfcCurrencyEnum.NOK IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDimensionExtentUsage = enum_namespace() -origin = express_getattr(IfcDimensionExtentUsage, 'ORIGIN', INDETERMINATE) -target = express_getattr(IfcDimensionExtentUsage, 'TARGET', INDETERMINATE) +origin = IfcDimensionExtentUsage.ORIGIN +target = IfcDimensionExtentUsage.TARGET IfcDirectionSenseEnum = enum_namespace() -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = IfcDirectionSenseEnum.POSITIVE +negative = IfcDirectionSenseEnum.NEGATIVE IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +final = IfcDocumentStatusEnum.FINAL +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = IfcDoorPanelOperationEnum.SWINGING +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +sliding = IfcDoorPanelOperationEnum.SLIDING +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +plastic = IfcDoorStyleConstructionEnum.PLASTIC +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -computer = express_getattr(IfcElectricApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -directwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'DIRECTWATERHEATER', INDETERMINATE) -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -electricheater = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICHEATER', INDETERMINATE) -facsimile = express_getattr(IfcElectricApplianceTypeEnum, 'FACSIMILE', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -indirectwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'INDIRECTWATERHEATER', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -printer = express_getattr(IfcElectricApplianceTypeEnum, 'PRINTER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -radiantheater = express_getattr(IfcElectricApplianceTypeEnum, 'RADIANTHEATER', INDETERMINATE) -scanner = express_getattr(IfcElectricApplianceTypeEnum, 'SCANNER', INDETERMINATE) -telephone = express_getattr(IfcElectricApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -tv = express_getattr(IfcElectricApplianceTypeEnum, 'TV', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -waterheater = express_getattr(IfcElectricApplianceTypeEnum, 'WATERHEATER', INDETERMINATE) -watercooler = express_getattr(IfcElectricApplianceTypeEnum, 'WATERCOOLER', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +computer = IfcElectricApplianceTypeEnum.COMPUTER +directwaterheater = IfcElectricApplianceTypeEnum.DIRECTWATERHEATER +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +electricheater = IfcElectricApplianceTypeEnum.ELECTRICHEATER +facsimile = IfcElectricApplianceTypeEnum.FACSIMILE +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +indirectwaterheater = IfcElectricApplianceTypeEnum.INDIRECTWATERHEATER +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +printer = IfcElectricApplianceTypeEnum.PRINTER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +radiantheater = IfcElectricApplianceTypeEnum.RADIANTHEATER +scanner = IfcElectricApplianceTypeEnum.SCANNER +telephone = IfcElectricApplianceTypeEnum.TELEPHONE +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +tv = IfcElectricApplianceTypeEnum.TV +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +waterheater = IfcElectricApplianceTypeEnum.WATERHEATER +watercooler = IfcElectricApplianceTypeEnum.WATERCOOLER +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricCurrentEnum = enum_namespace() -alternating = express_getattr(IfcElectricCurrentEnum, 'ALTERNATING', INDETERMINATE) -direct = express_getattr(IfcElectricCurrentEnum, 'DIRECT', INDETERMINATE) -notdefined = express_getattr(IfcElectricCurrentEnum, 'NOTDEFINED', INDETERMINATE) +alternating = IfcElectricCurrentEnum.ALTERNATING +direct = IfcElectricCurrentEnum.DIRECT +notdefined = IfcElectricCurrentEnum.NOTDEFINED IfcElectricDistributionPointFunctionEnum = enum_namespace() -alarmpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'ALARMPANEL', INDETERMINATE) -consumerunit = express_getattr(IfcElectricDistributionPointFunctionEnum, 'CONSUMERUNIT', INDETERMINATE) -controlpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'CONTROLPANEL', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionPointFunctionEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -gasdetectorpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'GASDETECTORPANEL', INDETERMINATE) -indicatorpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcElectricDistributionPointFunctionEnum, 'MIMICPANEL', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionPointFunctionEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionPointFunctionEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionPointFunctionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionPointFunctionEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcElectricDistributionPointFunctionEnum.ALARMPANEL +consumerunit = IfcElectricDistributionPointFunctionEnum.CONSUMERUNIT +controlpanel = IfcElectricDistributionPointFunctionEnum.CONTROLPANEL +distributionboard = IfcElectricDistributionPointFunctionEnum.DISTRIBUTIONBOARD +gasdetectorpanel = IfcElectricDistributionPointFunctionEnum.GASDETECTORPANEL +indicatorpanel = IfcElectricDistributionPointFunctionEnum.INDICATORPANEL +mimicpanel = IfcElectricDistributionPointFunctionEnum.MIMICPANEL +motorcontrolcentre = IfcElectricDistributionPointFunctionEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionPointFunctionEnum.SWITCHBOARD +userdefined = IfcElectricDistributionPointFunctionEnum.USERDEFINED +notdefined = IfcElectricDistributionPointFunctionEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricHeaterTypeEnum = enum_namespace() -electricpointheater = express_getattr(IfcElectricHeaterTypeEnum, 'ELECTRICPOINTHEATER', INDETERMINATE) -electriccableheater = express_getattr(IfcElectricHeaterTypeEnum, 'ELECTRICCABLEHEATER', INDETERMINATE) -electricmatheater = express_getattr(IfcElectricHeaterTypeEnum, 'ELECTRICMATHEATER', INDETERMINATE) -userdefined = express_getattr(IfcElectricHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricpointheater = IfcElectricHeaterTypeEnum.ELECTRICPOINTHEATER +electriccableheater = IfcElectricHeaterTypeEnum.ELECTRICCABLEHEATER +electricmatheater = IfcElectricHeaterTypeEnum.ELECTRICMATHEATER +userdefined = IfcElectricHeaterTypeEnum.USERDEFINED +notdefined = IfcElectricHeaterTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +relay = IfcElectricTimeControlTypeEnum.RELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +girder = IfcElementAssemblyTypeEnum.GIRDER +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +truss = IfcElementAssemblyTypeEnum.TRUSS +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEnergySequenceEnum = enum_namespace() -primary = express_getattr(IfcEnergySequenceEnum, 'PRIMARY', INDETERMINATE) -secondary = express_getattr(IfcEnergySequenceEnum, 'SECONDARY', INDETERMINATE) -tertiary = express_getattr(IfcEnergySequenceEnum, 'TERTIARY', INDETERMINATE) -auxiliary = express_getattr(IfcEnergySequenceEnum, 'AUXILIARY', INDETERMINATE) -userdefined = express_getattr(IfcEnergySequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEnergySequenceEnum, 'NOTDEFINED', INDETERMINATE) +primary = IfcEnergySequenceEnum.PRIMARY +secondary = IfcEnergySequenceEnum.SECONDARY +tertiary = IfcEnergySequenceEnum.TERTIARY +auxiliary = IfcEnergySequenceEnum.AUXILIARY +userdefined = IfcEnergySequenceEnum.USERDEFINED +notdefined = IfcEnergySequenceEnum.NOTDEFINED IfcEnvironmentalImpactCategoryEnum = enum_namespace() -combinedvalue = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'COMBINEDVALUE', INDETERMINATE) -disposal = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'DISPOSAL', INDETERMINATE) -extraction = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'EXTRACTION', INDETERMINATE) -installation = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'INSTALLATION', INDETERMINATE) -manufacture = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'MANUFACTURE', INDETERMINATE) -transportation = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'TRANSPORTATION', INDETERMINATE) -userdefined = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEnvironmentalImpactCategoryEnum, 'NOTDEFINED', INDETERMINATE) +combinedvalue = IfcEnvironmentalImpactCategoryEnum.COMBINEDVALUE +disposal = IfcEnvironmentalImpactCategoryEnum.DISPOSAL +extraction = IfcEnvironmentalImpactCategoryEnum.EXTRACTION +installation = IfcEnvironmentalImpactCategoryEnum.INSTALLATION +manufacture = IfcEnvironmentalImpactCategoryEnum.MANUFACTURE +transportation = IfcEnvironmentalImpactCategoryEnum.TRANSPORTATION +userdefined = IfcEnvironmentalImpactCategoryEnum.USERDEFINED +notdefined = IfcEnvironmentalImpactCategoryEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = IfcFlowDirectionEnum.SOURCE +sink = IfcFlowDirectionEnum.SINK +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -electricmeter = express_getattr(IfcFlowMeterTypeEnum, 'ELECTRICMETER', INDETERMINATE) -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -flowmeter = express_getattr(IfcFlowMeterTypeEnum, 'FLOWMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricmeter = IfcFlowMeterTypeEnum.ELECTRICMETER +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +flowmeter = IfcFlowMeterTypeEnum.FLOWMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcGasTerminalTypeEnum = enum_namespace() -gasappliance = express_getattr(IfcGasTerminalTypeEnum, 'GASAPPLIANCE', INDETERMINATE) -gasbooster = express_getattr(IfcGasTerminalTypeEnum, 'GASBOOSTER', INDETERMINATE) -gasburner = express_getattr(IfcGasTerminalTypeEnum, 'GASBURNER', INDETERMINATE) -userdefined = express_getattr(IfcGasTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGasTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +gasappliance = IfcGasTerminalTypeEnum.GASAPPLIANCE +gasbooster = IfcGasTerminalTypeEnum.GASBOOSTER +gasburner = IfcGasTerminalTypeEnum.GASBURNER +userdefined = IfcGasTerminalTypeEnum.USERDEFINED +notdefined = IfcGasTerminalTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = IfcInternalOrExternalEnum.INTERNAL +external = IfcInternalOrExternalEnum.EXTERNAL +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +metalhalide = IfcLampTypeEnum.METALHALIDE +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION_GROUP', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination_group = IfcLoadGroupTypeEnum.LOAD_COMBINATION_GROUP +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalor = IfcLogicalOperatorEnum.LOGICALOR IfcMemberTypeEnum = enum_namespace() -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stringer = IfcMemberTypeEnum.STRINGER +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNullStyle = enum_namespace() -null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = IfcNullStyle.NULL IfcObjectTypeEnum = enum_namespace() -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = IfcObjectTypeEnum.PRODUCT +process = IfcObjectTypeEnum.PROCESS +control = IfcObjectTypeEnum.CONTROL +resource = IfcObjectTypeEnum.RESOURCE +actor = IfcObjectTypeEnum.ACTOR +group = IfcObjectTypeEnum.GROUP +project = IfcObjectTypeEnum.PROJECT +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +designintent = IfcObjectiveEnum.DESIGNINTENT +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +cohesion = IfcPileTypeEnum.COHESION +friction = IfcPileTypeEnum.FRICTION +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +sheet = IfcPlateTypeEnum.SHEET +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = IfcProfileTypeEnum.CURVE +area = IfcProfileTypeEnum.AREA IfcProjectOrderRecordTypeEnum = enum_namespace() -change = express_getattr(IfcProjectOrderRecordTypeEnum, 'CHANGE', INDETERMINATE) -maintenance = express_getattr(IfcProjectOrderRecordTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcProjectOrderRecordTypeEnum, 'MOVE', INDETERMINATE) -purchase = express_getattr(IfcProjectOrderRecordTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcProjectOrderRecordTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderRecordTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderRecordTypeEnum, 'NOTDEFINED', INDETERMINATE) +change = IfcProjectOrderRecordTypeEnum.CHANGE +maintenance = IfcProjectOrderRecordTypeEnum.MAINTENANCE +move = IfcProjectOrderRecordTypeEnum.MOVE +purchase = IfcProjectOrderRecordTypeEnum.PURCHASE +work = IfcProjectOrderRecordTypeEnum.WORK +userdefined = IfcProjectOrderRecordTypeEnum.USERDEFINED +notdefined = IfcProjectOrderRecordTypeEnum.NOTDEFINED IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcPropertySourceEnum = enum_namespace() -design = express_getattr(IfcPropertySourceEnum, 'DESIGN', INDETERMINATE) -designmaximum = express_getattr(IfcPropertySourceEnum, 'DESIGNMAXIMUM', INDETERMINATE) -designminimum = express_getattr(IfcPropertySourceEnum, 'DESIGNMINIMUM', INDETERMINATE) -simulated = express_getattr(IfcPropertySourceEnum, 'SIMULATED', INDETERMINATE) -asbuilt = express_getattr(IfcPropertySourceEnum, 'ASBUILT', INDETERMINATE) -commissioning = express_getattr(IfcPropertySourceEnum, 'COMMISSIONING', INDETERMINATE) -measured = express_getattr(IfcPropertySourceEnum, 'MEASURED', INDETERMINATE) -userdefined = express_getattr(IfcPropertySourceEnum, 'USERDEFINED', INDETERMINATE) -notknown = express_getattr(IfcPropertySourceEnum, 'NOTKNOWN', INDETERMINATE) +design = IfcPropertySourceEnum.DESIGN +designmaximum = IfcPropertySourceEnum.DESIGNMAXIMUM +designminimum = IfcPropertySourceEnum.DESIGNMINIMUM +simulated = IfcPropertySourceEnum.SIMULATED +asbuilt = IfcPropertySourceEnum.ASBUILT +commissioning = IfcPropertySourceEnum.COMMISSIONING +measured = IfcPropertySourceEnum.MEASURED +userdefined = IfcPropertySourceEnum.USERDEFINED +notknown = IfcPropertySourceEnum.NOTKNOWN IfcProtectiveDeviceTypeEnum = enum_namespace() -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthfailuredevice = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHFAILUREDEVICE', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthfailuredevice = IfcProtectiveDeviceTypeEnum.EARTHFAILUREDEVICE +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = IfcRailingTypeEnum.HANDRAIL +guardrail = IfcRailingTypeEnum.GUARDRAIL +balustrade = IfcRailingTypeEnum.BALUSTRADE +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcRampFlightTypeEnum.STRAIGHT +spiral = IfcRampFlightTypeEnum.SPIRAL +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = IfcReinforcingBarRoleEnum.MAIN +shear = IfcReinforcingBarRoleEnum.SHEAR +ligature = IfcReinforcingBarRoleEnum.LIGATURE +stud = IfcReinforcingBarRoleEnum.STUD +punching = IfcReinforcingBarRoleEnum.PUNCHING +edge = IfcReinforcingBarRoleEnum.EDGE +ring = IfcReinforcingBarRoleEnum.RING +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcResourceConsumptionEnum = enum_namespace() -consumed = express_getattr(IfcResourceConsumptionEnum, 'CONSUMED', INDETERMINATE) -partiallyconsumed = express_getattr(IfcResourceConsumptionEnum, 'PARTIALLYCONSUMED', INDETERMINATE) -notconsumed = express_getattr(IfcResourceConsumptionEnum, 'NOTCONSUMED', INDETERMINATE) -occupied = express_getattr(IfcResourceConsumptionEnum, 'OCCUPIED', INDETERMINATE) -partiallyoccupied = express_getattr(IfcResourceConsumptionEnum, 'PARTIALLYOCCUPIED', INDETERMINATE) -notoccupied = express_getattr(IfcResourceConsumptionEnum, 'NOTOCCUPIED', INDETERMINATE) -userdefined = express_getattr(IfcResourceConsumptionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcResourceConsumptionEnum, 'NOTDEFINED', INDETERMINATE) +consumed = IfcResourceConsumptionEnum.CONSUMED +partiallyconsumed = IfcResourceConsumptionEnum.PARTIALLYCONSUMED +notconsumed = IfcResourceConsumptionEnum.NOTCONSUMED +occupied = IfcResourceConsumptionEnum.OCCUPIED +partiallyoccupied = IfcResourceConsumptionEnum.PARTIALLYOCCUPIED +notoccupied = IfcResourceConsumptionEnum.NOTOCCUPIED +userdefined = IfcResourceConsumptionEnum.USERDEFINED +notdefined = IfcResourceConsumptionEnum.NOTDEFINED IfcRibPlateDirectionEnum = enum_namespace() -direction_x = express_getattr(IfcRibPlateDirectionEnum, 'DIRECTION_X', INDETERMINATE) -direction_y = express_getattr(IfcRibPlateDirectionEnum, 'DIRECTION_Y', INDETERMINATE) +direction_x = IfcRibPlateDirectionEnum.DIRECTION_X +direction_y = IfcRibPlateDirectionEnum.DIRECTION_Y IfcRoleEnum = enum_namespace() -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -comissioningengineer = express_getattr(IfcRoleEnum, 'COMISSIONINGENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = IfcRoleEnum.SUPPLIER +manufacturer = IfcRoleEnum.MANUFACTURER +contractor = IfcRoleEnum.CONTRACTOR +subcontractor = IfcRoleEnum.SUBCONTRACTOR +architect = IfcRoleEnum.ARCHITECT +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +costengineer = IfcRoleEnum.COSTENGINEER +client = IfcRoleEnum.CLIENT +buildingowner = IfcRoleEnum.BUILDINGOWNER +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +projectmanager = IfcRoleEnum.PROJECTMANAGER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +civilengineer = IfcRoleEnum.CIVILENGINEER +comissioningengineer = IfcRoleEnum.COMISSIONINGENGINEER +engineer = IfcRoleEnum.ENGINEER +owner = IfcRoleEnum.OWNER +consultant = IfcRoleEnum.CONSULTANT +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +reseller = IfcRoleEnum.RESELLER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = IfcSIPrefix.EXA +peta = IfcSIPrefix.PETA +tera = IfcSIPrefix.TERA +giga = IfcSIPrefix.GIGA +mega = IfcSIPrefix.MEGA +kilo = IfcSIPrefix.KILO +hecto = IfcSIPrefix.HECTO +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +centi = IfcSIPrefix.CENTI +milli = IfcSIPrefix.MILLI +micro = IfcSIPrefix.MICRO +nano = IfcSIPrefix.NANO +pico = IfcSIPrefix.PICO +femto = IfcSIPrefix.FEMTO +atto = IfcSIPrefix.ATTO IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = IfcSectionTypeEnum.UNIFORM +tapered = IfcSectionTypeEnum.TAPERED IfcSensorTypeEnum = enum_namespace() -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +co2sensor = IfcSensorTypeEnum.CO2SENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = IfcSequenceEnum.START_START +start_finish = IfcSequenceEnum.START_FINISH +finish_start = IfcSequenceEnum.FINISH_START +finish_finish = IfcSequenceEnum.FINISH_FINISH +notdefined = IfcSequenceEnum.NOTDEFINED IfcServiceLifeFactorTypeEnum = enum_namespace() -a_qualityofcomponents = express_getattr(IfcServiceLifeFactorTypeEnum, 'A_QUALITYOFCOMPONENTS', INDETERMINATE) -b_designlevel = express_getattr(IfcServiceLifeFactorTypeEnum, 'B_DESIGNLEVEL', INDETERMINATE) -c_workexecutionlevel = express_getattr(IfcServiceLifeFactorTypeEnum, 'C_WORKEXECUTIONLEVEL', INDETERMINATE) -d_indoorenvironment = express_getattr(IfcServiceLifeFactorTypeEnum, 'D_INDOORENVIRONMENT', INDETERMINATE) -e_outdoorenvironment = express_getattr(IfcServiceLifeFactorTypeEnum, 'E_OUTDOORENVIRONMENT', INDETERMINATE) -f_inuseconditions = express_getattr(IfcServiceLifeFactorTypeEnum, 'F_INUSECONDITIONS', INDETERMINATE) -g_maintenancelevel = express_getattr(IfcServiceLifeFactorTypeEnum, 'G_MAINTENANCELEVEL', INDETERMINATE) -userdefined = express_getattr(IfcServiceLifeFactorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcServiceLifeFactorTypeEnum, 'NOTDEFINED', INDETERMINATE) +a_qualityofcomponents = IfcServiceLifeFactorTypeEnum.A_QUALITYOFCOMPONENTS +b_designlevel = IfcServiceLifeFactorTypeEnum.B_DESIGNLEVEL +c_workexecutionlevel = IfcServiceLifeFactorTypeEnum.C_WORKEXECUTIONLEVEL +d_indoorenvironment = IfcServiceLifeFactorTypeEnum.D_INDOORENVIRONMENT +e_outdoorenvironment = IfcServiceLifeFactorTypeEnum.E_OUTDOORENVIRONMENT +f_inuseconditions = IfcServiceLifeFactorTypeEnum.F_INUSECONDITIONS +g_maintenancelevel = IfcServiceLifeFactorTypeEnum.G_MAINTENANCELEVEL +userdefined = IfcServiceLifeFactorTypeEnum.USERDEFINED +notdefined = IfcServiceLifeFactorTypeEnum.NOTDEFINED IfcServiceLifeTypeEnum = enum_namespace() -actualservicelife = express_getattr(IfcServiceLifeTypeEnum, 'ACTUALSERVICELIFE', INDETERMINATE) -expectedservicelife = express_getattr(IfcServiceLifeTypeEnum, 'EXPECTEDSERVICELIFE', INDETERMINATE) -optimisticreferenceservicelife = express_getattr(IfcServiceLifeTypeEnum, 'OPTIMISTICREFERENCESERVICELIFE', INDETERMINATE) -pessimisticreferenceservicelife = express_getattr(IfcServiceLifeTypeEnum, 'PESSIMISTICREFERENCESERVICELIFE', INDETERMINATE) -referenceservicelife = express_getattr(IfcServiceLifeTypeEnum, 'REFERENCESERVICELIFE', INDETERMINATE) +actualservicelife = IfcServiceLifeTypeEnum.ACTUALSERVICELIFE +expectedservicelife = IfcServiceLifeTypeEnum.EXPECTEDSERVICELIFE +optimisticreferenceservicelife = IfcServiceLifeTypeEnum.OPTIMISTICREFERENCESERVICELIFE +pessimisticreferenceservicelife = IfcServiceLifeTypeEnum.PESSIMISTICREFERENCESERVICELIFE +referenceservicelife = IfcServiceLifeTypeEnum.REFERENCESERVICELIFE IfcSlabTypeEnum = enum_namespace() -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = IfcSlabTypeEnum.FLOOR +roof = IfcSlabTypeEnum.ROOF +landing = IfcSlabTypeEnum.LANDING +baseslab = IfcSlabTypeEnum.BASESLAB +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSoundScaleEnum = enum_namespace() -dba = express_getattr(IfcSoundScaleEnum, 'DBA', INDETERMINATE) -dbb = express_getattr(IfcSoundScaleEnum, 'DBB', INDETERMINATE) -dbc = express_getattr(IfcSoundScaleEnum, 'DBC', INDETERMINATE) -nc = express_getattr(IfcSoundScaleEnum, 'NC', INDETERMINATE) -nr = express_getattr(IfcSoundScaleEnum, 'NR', INDETERMINATE) -userdefined = express_getattr(IfcSoundScaleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSoundScaleEnum, 'NOTDEFINED', INDETERMINATE) +dba = IfcSoundScaleEnum.DBA +dbb = IfcSoundScaleEnum.DBB +dbc = IfcSoundScaleEnum.DBC +nc = IfcSoundScaleEnum.NC +nr = IfcSoundScaleEnum.NR +userdefined = IfcSoundScaleEnum.USERDEFINED +notdefined = IfcSoundScaleEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -sectionalradiator = express_getattr(IfcSpaceHeaterTypeEnum, 'SECTIONALRADIATOR', INDETERMINATE) -panelradiator = express_getattr(IfcSpaceHeaterTypeEnum, 'PANELRADIATOR', INDETERMINATE) -tubularradiator = express_getattr(IfcSpaceHeaterTypeEnum, 'TUBULARRADIATOR', INDETERMINATE) -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -baseboardheater = express_getattr(IfcSpaceHeaterTypeEnum, 'BASEBOARDHEATER', INDETERMINATE) -finnedtubeunit = express_getattr(IfcSpaceHeaterTypeEnum, 'FINNEDTUBEUNIT', INDETERMINATE) -unitheater = express_getattr(IfcSpaceHeaterTypeEnum, 'UNITHEATER', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +sectionalradiator = IfcSpaceHeaterTypeEnum.SECTIONALRADIATOR +panelradiator = IfcSpaceHeaterTypeEnum.PANELRADIATOR +tubularradiator = IfcSpaceHeaterTypeEnum.TUBULARRADIATOR +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +baseboardheater = IfcSpaceHeaterTypeEnum.BASEBOARDHEATER +finnedtubeunit = IfcSpaceHeaterTypeEnum.FINNEDTUBEUNIT +unitheater = IfcSpaceHeaterTypeEnum.UNITHEATER +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +spiral = IfcStairFlightTypeEnum.SPIRAL +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = IfcStateEnum.READWRITE +readonly = IfcStateEnum.READONLY +locked = IfcStateEnum.LOCKED +readwritelocked = IfcStateEnum.READWRITELOCKED +readonlylocked = IfcStateEnum.READONLYLOCKED IfcStructuralCurveTypeEnum = enum_namespace() -rigid_joined_member = express_getattr(IfcStructuralCurveTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = express_getattr(IfcStructuralCurveTypeEnum, 'CABLE', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = IfcStructuralCurveTypeEnum.RIGID_JOINED_MEMBER +pin_joined_member = IfcStructuralCurveTypeEnum.PIN_JOINED_MEMBER +cable = IfcStructuralCurveTypeEnum.CABLE +tension_member = IfcStructuralCurveTypeEnum.TENSION_MEMBER +compression_member = IfcStructuralCurveTypeEnum.COMPRESSION_MEMBER +userdefined = IfcStructuralCurveTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveTypeEnum.NOTDEFINED IfcStructuralSurfaceTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceTypeEnum.SHELL +userdefined = IfcStructuralSurfaceTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = IfcSurfaceSide.POSITIVE +negative = IfcSurfaceSide.NEGATIVE +both = IfcSurfaceSide.BOTH IfcSurfaceTextureEnum = enum_namespace() -bump = express_getattr(IfcSurfaceTextureEnum, 'BUMP', INDETERMINATE) -opacity = express_getattr(IfcSurfaceTextureEnum, 'OPACITY', INDETERMINATE) -reflection = express_getattr(IfcSurfaceTextureEnum, 'REFLECTION', INDETERMINATE) -selfillumination = express_getattr(IfcSurfaceTextureEnum, 'SELFILLUMINATION', INDETERMINATE) -shininess = express_getattr(IfcSurfaceTextureEnum, 'SHININESS', INDETERMINATE) -specular = express_getattr(IfcSurfaceTextureEnum, 'SPECULAR', INDETERMINATE) -texture = express_getattr(IfcSurfaceTextureEnum, 'TEXTURE', INDETERMINATE) -transparencymap = express_getattr(IfcSurfaceTextureEnum, 'TRANSPARENCYMAP', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceTextureEnum, 'NOTDEFINED', INDETERMINATE) +bump = IfcSurfaceTextureEnum.BUMP +opacity = IfcSurfaceTextureEnum.OPACITY +reflection = IfcSurfaceTextureEnum.REFLECTION +selfillumination = IfcSurfaceTextureEnum.SELFILLUMINATION +shininess = IfcSurfaceTextureEnum.SHININESS +specular = IfcSurfaceTextureEnum.SPECULAR +texture = IfcSurfaceTextureEnum.TEXTURE +transparencymap = IfcSurfaceTextureEnum.TRANSPARENCYMAP +notdefined = IfcSurfaceTextureEnum.NOTDEFINED IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +starter = IfcSwitchingDeviceTypeEnum.STARTER +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -preformed = express_getattr(IfcTankTypeEnum, 'PREFORMED', INDETERMINATE) -sectional = express_getattr(IfcTankTypeEnum, 'SECTIONAL', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +preformed = IfcTankTypeEnum.PREFORMED +sectional = IfcTankTypeEnum.SECTIONAL +expansion = IfcTankTypeEnum.EXPANSION +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP +down = IfcTextPath.DOWN IfcThermalLoadSourceEnum = enum_namespace() -people = express_getattr(IfcThermalLoadSourceEnum, 'PEOPLE', INDETERMINATE) -lighting = express_getattr(IfcThermalLoadSourceEnum, 'LIGHTING', INDETERMINATE) -equipment = express_getattr(IfcThermalLoadSourceEnum, 'EQUIPMENT', INDETERMINATE) -ventilationindoorair = express_getattr(IfcThermalLoadSourceEnum, 'VENTILATIONINDOORAIR', INDETERMINATE) -ventilationoutsideair = express_getattr(IfcThermalLoadSourceEnum, 'VENTILATIONOUTSIDEAIR', INDETERMINATE) -recirculatedair = express_getattr(IfcThermalLoadSourceEnum, 'RECIRCULATEDAIR', INDETERMINATE) -exhaustair = express_getattr(IfcThermalLoadSourceEnum, 'EXHAUSTAIR', INDETERMINATE) -airexchangerate = express_getattr(IfcThermalLoadSourceEnum, 'AIREXCHANGERATE', INDETERMINATE) -drybulbtemperature = express_getattr(IfcThermalLoadSourceEnum, 'DRYBULBTEMPERATURE', INDETERMINATE) -relativehumidity = express_getattr(IfcThermalLoadSourceEnum, 'RELATIVEHUMIDITY', INDETERMINATE) -infiltration = express_getattr(IfcThermalLoadSourceEnum, 'INFILTRATION', INDETERMINATE) -userdefined = express_getattr(IfcThermalLoadSourceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcThermalLoadSourceEnum, 'NOTDEFINED', INDETERMINATE) +people = IfcThermalLoadSourceEnum.PEOPLE +lighting = IfcThermalLoadSourceEnum.LIGHTING +equipment = IfcThermalLoadSourceEnum.EQUIPMENT +ventilationindoorair = IfcThermalLoadSourceEnum.VENTILATIONINDOORAIR +ventilationoutsideair = IfcThermalLoadSourceEnum.VENTILATIONOUTSIDEAIR +recirculatedair = IfcThermalLoadSourceEnum.RECIRCULATEDAIR +exhaustair = IfcThermalLoadSourceEnum.EXHAUSTAIR +airexchangerate = IfcThermalLoadSourceEnum.AIREXCHANGERATE +drybulbtemperature = IfcThermalLoadSourceEnum.DRYBULBTEMPERATURE +relativehumidity = IfcThermalLoadSourceEnum.RELATIVEHUMIDITY +infiltration = IfcThermalLoadSourceEnum.INFILTRATION +userdefined = IfcThermalLoadSourceEnum.USERDEFINED +notdefined = IfcThermalLoadSourceEnum.NOTDEFINED IfcThermalLoadTypeEnum = enum_namespace() -sensible = express_getattr(IfcThermalLoadTypeEnum, 'SENSIBLE', INDETERMINATE) -latent = express_getattr(IfcThermalLoadTypeEnum, 'LATENT', INDETERMINATE) -radiant = express_getattr(IfcThermalLoadTypeEnum, 'RADIANT', INDETERMINATE) -notdefined = express_getattr(IfcThermalLoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +sensible = IfcThermalLoadTypeEnum.SENSIBLE +latent = IfcThermalLoadTypeEnum.LATENT +radiant = IfcThermalLoadTypeEnum.RADIANT +notdefined = IfcThermalLoadTypeEnum.NOTDEFINED IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTimeSeriesScheduleTypeEnum = enum_namespace() -annual = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'ANNUAL', INDETERMINATE) -monthly = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'MONTHLY', INDETERMINATE) -weekly = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'WEEKLY', INDETERMINATE) -daily = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'DAILY', INDETERMINATE) -userdefined = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +annual = IfcTimeSeriesScheduleTypeEnum.ANNUAL +monthly = IfcTimeSeriesScheduleTypeEnum.MONTHLY +weekly = IfcTimeSeriesScheduleTypeEnum.WEEKLY +daily = IfcTimeSeriesScheduleTypeEnum.DAILY +userdefined = IfcTimeSeriesScheduleTypeEnum.USERDEFINED +notdefined = IfcTimeSeriesScheduleTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +voltage = IfcTransformerTypeEnum.VOLTAGE +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = IfcTransitionCode.DISCONTINUOUS +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE IfcTransportElementTypeEnum = enum_namespace() -elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = IfcTransportElementTypeEnum.ELEVATOR +escalator = IfcTransportElementTypeEnum.ESCALATOR +movingwalkway = IfcTransportElementTypeEnum.MOVINGWALKWAY +userdefined = IfcTransportElementTypeEnum.USERDEFINED +notdefined = IfcTransportElementTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +standard = IfcWallTypeEnum.STANDARD +polygonal = IfcWallTypeEnum.POLYGONAL +shear = IfcWallTypeEnum.SHEAR +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -greaseinterceptor = express_getattr(IfcWasteTerminalTypeEnum, 'GREASEINTERCEPTOR', INDETERMINATE) -oilinterceptor = express_getattr(IfcWasteTerminalTypeEnum, 'OILINTERCEPTOR', INDETERMINATE) -petrolinterceptor = express_getattr(IfcWasteTerminalTypeEnum, 'PETROLINTERCEPTOR', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +greaseinterceptor = IfcWasteTerminalTypeEnum.GREASEINTERCEPTOR +oilinterceptor = IfcWasteTerminalTypeEnum.OILINTERCEPTOR +petrolinterceptor = IfcWasteTerminalTypeEnum.PETROLINTERCEPTOR +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +bottom = IfcWindowPanelPositionEnum.BOTTOM +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +plastic = IfcWindowStyleConstructionEnum.PLASTIC +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWorkControlTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkControlTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkControlTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkControlTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkControlTypeEnum.ACTUAL +baseline = IfcWorkControlTypeEnum.BASELINE +planned = IfcWorkControlTypeEnum.PLANNED +userdefined = IfcWorkControlTypeEnum.USERDEFINED +notdefined = IfcWorkControlTypeEnum.NOTDEFINED def Ifc2DCompositeCurve(*args, **kwargs): return ifcopenshell.create_entity('Ifc2DCompositeCurve', 'IFC2X3', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py index bf5e86438f..791737c57a 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,1844 +152,1844 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +snow_s = IfcActionSourceTypeEnum.SNOW_S +wind_w = IfcActionSourceTypeEnum.WIND_W +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +fire = IfcActionSourceTypeEnum.FIRE +impulse = IfcActionSourceTypeEnum.IMPULSE +impact = IfcActionSourceTypeEnum.IMPACT +transport = IfcActionSourceTypeEnum.TRANSPORT +erection = IfcActionSourceTypeEnum.ERECTION +propping = IfcActionSourceTypeEnum.PROPPING +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +creep = IfcActionSourceTypeEnum.CREEP +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +ice = IfcActionSourceTypeEnum.ICE +current = IfcActionSourceTypeEnum.CURRENT +wave = IfcActionSourceTypeEnum.WAVE +rain = IfcActionSourceTypeEnum.RAIN +brakes = IfcActionSourceTypeEnum.BRAKES +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +home = IfcAddressTypeEnum.HOME +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = IfcAssemblyPlaceEnum.SITE +factory = IfcAssemblyPlaceEnum.FACTORY +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +joist = IfcBeamTypeEnum.JOIST +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +lintel = IfcBeamTypeEnum.LINTEL +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +equalto = IfcBenchmarkEnum.EQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +includes = IfcBenchmarkEnum.INCLUDES +notincludes = IfcBenchmarkEnum.NOTINCLUDES +includedin = IfcBenchmarkEnum.INCLUDEDIN +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN IfcBoilerTypeEnum = enum_namespace() -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = IfcBoilerTypeEnum.WATER +steam = IfcBoilerTypeEnum.STEAM +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = IfcBooleanOperator.UNION +intersection = IfcBooleanOperator.INTERSECTION +difference = IfcBooleanOperator.DIFFERENCE IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +cross = IfcCableCarrierFittingTypeEnum.CROSS +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = IfcChangeActionEnum.NOCHANGE +modified = IfcChangeActionEnum.MODIFIED +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +watercooled = IfcChillerTypeEnum.WATERCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pilaster = IfcColumnTypeEnum.PILASTER +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = IfcCompressorTypeEnum.DYNAMIC +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rotary = IfcCompressorTypeEnum.ROTARY +scroll = IfcCompressorTypeEnum.SCROLL +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +booster = IfcCompressorTypeEnum.BOOSTER +opentype = IfcCompressorTypeEnum.OPENTYPE +hermetic = IfcCompressorTypeEnum.HERMETIC +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +twinscrew = IfcCompressorTypeEnum.TWINSCREW +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +atend = IfcConnectionTypeEnum.ATEND +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +advisory = IfcConstraintEnum.ADVISORY +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +multiposition = IfcControllerTypeEnum.MULTIPOSITION +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +tender = IfcCostScheduleTypeEnum.TENDER +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +flooring = IfcCoveringTypeEnum.FLOORING +cladding = IfcCoveringTypeEnum.CLADDING +roofing = IfcCoveringTypeEnum.ROOFING +molding = IfcCoveringTypeEnum.MOLDING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +sleeving = IfcCoveringTypeEnum.SLEEVING +wrapping = IfcCoveringTypeEnum.WRAPPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = IfcDirectionSenseEnum.POSITIVE +negative = IfcDirectionSenseEnum.NEGATIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +final = IfcDocumentStatusEnum.FINAL +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = IfcDoorPanelOperationEnum.SWINGING +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +sliding = IfcDoorPanelOperationEnum.SLIDING +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +plastic = IfcDoorStyleConstructionEnum.PLASTIC +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorTypeOperationEnum.REVOLVING +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +relay = IfcElectricTimeControlTypeEnum.RELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +girder = IfcElementAssemblyTypeEnum.GIRDER +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +truss = IfcElementAssemblyTypeEnum.TRUSS +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = IfcEventTypeEnum.STARTEVENT +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = IfcFlowDirectionEnum.SOURCE +sink = IfcFlowDirectionEnum.SINK +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = IfcFurnitureTypeEnum.CHAIR +table = IfcFurnitureTypeEnum.TABLE +desk = IfcFurnitureTypeEnum.DESK +bed = IfcFurnitureTypeEnum.BED +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = IfcGeographicElementTypeEnum.TERRAIN +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = IfcGridTypeEnum.RECTANGULAR +radial = IfcGridTypeEnum.RADIAL +triangular = IfcGridTypeEnum.TRIANGULAR +irregular = IfcGridTypeEnum.IRREGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = IfcInternalOrExternalEnum.INTERNAL +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = IfcKnotType.UNIFORM_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +rivet = IfcMechanicalFastenerTypeEnum.RIVET +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stringer = IfcMemberTypeEnum.STRINGER +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNullStyle = enum_namespace() -null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = IfcNullStyle.NULL IfcObjectTypeEnum = enum_namespace() -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = IfcObjectTypeEnum.PRODUCT +process = IfcObjectTypeEnum.PROCESS +control = IfcObjectTypeEnum.CONTROL +resource = IfcObjectTypeEnum.RESOURCE +actor = IfcObjectTypeEnum.ACTOR +group = IfcObjectTypeEnum.GROUP +project = IfcObjectTypeEnum.PROJECT +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +driven = IfcPileTypeEnum.DRIVEN +jetgrouting = IfcPileTypeEnum.JETGROUTING +cohesion = IfcPileTypeEnum.COHESION +friction = IfcPileTypeEnum.FRICTION +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +sheet = IfcPlateTypeEnum.SHEET +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = IfcProfileTypeEnum.CURVE +area = IfcProfileTypeEnum.AREA IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = IfcRailingTypeEnum.HANDRAIL +guardrail = IfcRailingTypeEnum.GUARDRAIL +balustrade = IfcRailingTypeEnum.BALUSTRADE +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcRampFlightTypeEnum.STRAIGHT +spiral = IfcRampFlightTypeEnum.SPIRAL +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = IfcRecurrenceTypeEnum.DAILY +weekly = IfcRecurrenceTypeEnum.WEEKLY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = IfcReinforcingBarRoleEnum.MAIN +shear = IfcReinforcingBarRoleEnum.SHEAR +ligature = IfcReinforcingBarRoleEnum.LIGATURE +stud = IfcReinforcingBarRoleEnum.STUD +punching = IfcReinforcingBarRoleEnum.PUNCHING +edge = IfcReinforcingBarRoleEnum.EDGE +ring = IfcReinforcingBarRoleEnum.RING +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +stud = IfcReinforcingBarTypeEnum.STUD +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = IfcRoleEnum.SUPPLIER +manufacturer = IfcRoleEnum.MANUFACTURER +contractor = IfcRoleEnum.CONTRACTOR +subcontractor = IfcRoleEnum.SUBCONTRACTOR +architect = IfcRoleEnum.ARCHITECT +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +costengineer = IfcRoleEnum.COSTENGINEER +client = IfcRoleEnum.CLIENT +buildingowner = IfcRoleEnum.BUILDINGOWNER +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +projectmanager = IfcRoleEnum.PROJECTMANAGER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +civilengineer = IfcRoleEnum.CIVILENGINEER +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +engineer = IfcRoleEnum.ENGINEER +owner = IfcRoleEnum.OWNER +consultant = IfcRoleEnum.CONSULTANT +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +reseller = IfcRoleEnum.RESELLER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = IfcSIPrefix.EXA +peta = IfcSIPrefix.PETA +tera = IfcSIPrefix.TERA +giga = IfcSIPrefix.GIGA +mega = IfcSIPrefix.MEGA +kilo = IfcSIPrefix.KILO +hecto = IfcSIPrefix.HECTO +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +centi = IfcSIPrefix.CENTI +milli = IfcSIPrefix.MILLI +micro = IfcSIPrefix.MICRO +nano = IfcSIPrefix.NANO +pico = IfcSIPrefix.PICO +femto = IfcSIPrefix.FEMTO +atto = IfcSIPrefix.ATTO IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = IfcSectionTypeEnum.UNIFORM +tapered = IfcSectionTypeEnum.TAPERED IfcSensorTypeEnum = enum_namespace() -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = IfcSensorTypeEnum.COSENSOR +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = IfcSequenceEnum.START_START +start_finish = IfcSequenceEnum.START_FINISH +finish_start = IfcSequenceEnum.FINISH_START +finish_finish = IfcSequenceEnum.FINISH_FINISH +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +awning = IfcShadingDeviceTypeEnum.AWNING +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME IfcSlabTypeEnum = enum_namespace() -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = IfcSlabTypeEnum.FLOOR +roof = IfcSlabTypeEnum.ROOF +landing = IfcSlabTypeEnum.LANDING +baseslab = IfcSlabTypeEnum.BASESLAB +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = IfcSpaceTypeEnum.SPACE +parking = IfcSpaceTypeEnum.PARKING +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +external = IfcSpaceTypeEnum.EXTERNAL +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +spiral = IfcStairFlightTypeEnum.SPIRAL +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = IfcStateEnum.READWRITE +readonly = IfcStateEnum.READONLY +locked = IfcStateEnum.LOCKED +readwritelocked = IfcStateEnum.READWRITELOCKED +readonlylocked = IfcStateEnum.READONLYLOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +cable = IfcStructuralCurveMemberTypeEnum.CABLE +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralSurfaceActivityTypeEnum.CONST +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = IfcSurfaceFeatureTypeEnum.MARK +tag = IfcSurfaceFeatureTypeEnum.TAG +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = IfcSurfaceSide.POSITIVE +negative = IfcSurfaceSide.NEGATIVE +both = IfcSurfaceSide.BOTH IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = IfcTaskTypeEnum.ATTENDANCE +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP +down = IfcTextPath.DOWN IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = IfcTransitionCode.DISCONTINUOUS +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE IfcTransportElementTypeEnum = enum_namespace() -elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = IfcTransportElementTypeEnum.ELEVATOR +escalator = IfcTransportElementTypeEnum.ESCALATOR +movingwalkway = IfcTransportElementTypeEnum.MOVINGWALKWAY +craneway = IfcTransportElementTypeEnum.CRANEWAY +liftinggear = IfcTransportElementTypeEnum.LIFTINGGEAR +userdefined = IfcTransportElementTypeEnum.USERDEFINED +notdefined = IfcTransportElementTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +notch = IfcVoidingFeatureTypeEnum.NOTCH +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +edge = IfcVoidingFeatureTypeEnum.EDGE +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +polygonal = IfcWallTypeEnum.POLYGONAL +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +bottom = IfcWindowPanelPositionEnum.BOTTOM +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +plastic = IfcWindowStyleConstructionEnum.PLASTIC +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = IfcWindowTypeEnum.WINDOW +skylight = IfcWindowTypeEnum.SKYLIGHT +lightdome = IfcWindowTypeEnum.LIGHTDOME +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py index afb4197c87..f07f0ee248 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X1.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,1860 +152,1860 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +snow_s = IfcActionSourceTypeEnum.SNOW_S +wind_w = IfcActionSourceTypeEnum.WIND_W +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +fire = IfcActionSourceTypeEnum.FIRE +impulse = IfcActionSourceTypeEnum.IMPULSE +impact = IfcActionSourceTypeEnum.IMPACT +transport = IfcActionSourceTypeEnum.TRANSPORT +erection = IfcActionSourceTypeEnum.ERECTION +propping = IfcActionSourceTypeEnum.PROPPING +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +creep = IfcActionSourceTypeEnum.CREEP +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +ice = IfcActionSourceTypeEnum.ICE +current = IfcActionSourceTypeEnum.CURRENT +wave = IfcActionSourceTypeEnum.WAVE +rain = IfcActionSourceTypeEnum.RAIN +brakes = IfcActionSourceTypeEnum.BRAKES +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +home = IfcAddressTypeEnum.HOME +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = IfcAssemblyPlaceEnum.SITE +factory = IfcAssemblyPlaceEnum.FACTORY +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +joist = IfcBeamTypeEnum.JOIST +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +lintel = IfcBeamTypeEnum.LINTEL +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +equalto = IfcBenchmarkEnum.EQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +includes = IfcBenchmarkEnum.INCLUDES +notincludes = IfcBenchmarkEnum.NOTINCLUDES +includedin = IfcBenchmarkEnum.INCLUDEDIN +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN IfcBoilerTypeEnum = enum_namespace() -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = IfcBoilerTypeEnum.WATER +steam = IfcBoilerTypeEnum.STEAM +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = IfcBooleanOperator.UNION +intersection = IfcBooleanOperator.INTERSECTION +difference = IfcBooleanOperator.DIFFERENCE IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +cross = IfcCableCarrierFittingTypeEnum.CROSS +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = IfcChangeActionEnum.NOCHANGE +modified = IfcChangeActionEnum.MODIFIED +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +watercooled = IfcChillerTypeEnum.WATERCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pilaster = IfcColumnTypeEnum.PILASTER +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = IfcCompressorTypeEnum.DYNAMIC +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rotary = IfcCompressorTypeEnum.ROTARY +scroll = IfcCompressorTypeEnum.SCROLL +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +booster = IfcCompressorTypeEnum.BOOSTER +opentype = IfcCompressorTypeEnum.OPENTYPE +hermetic = IfcCompressorTypeEnum.HERMETIC +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +twinscrew = IfcCompressorTypeEnum.TWINSCREW +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +atend = IfcConnectionTypeEnum.ATEND +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +advisory = IfcConstraintEnum.ADVISORY +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +multiposition = IfcControllerTypeEnum.MULTIPOSITION +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +tender = IfcCostScheduleTypeEnum.TENDER +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +flooring = IfcCoveringTypeEnum.FLOORING +cladding = IfcCoveringTypeEnum.CLADDING +roofing = IfcCoveringTypeEnum.ROOFING +molding = IfcCoveringTypeEnum.MOLDING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +sleeving = IfcCoveringTypeEnum.SLEEVING +wrapping = IfcCoveringTypeEnum.WRAPPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = IfcDirectionSenseEnum.POSITIVE +negative = IfcDirectionSenseEnum.NEGATIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +final = IfcDocumentStatusEnum.FINAL +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = IfcDoorPanelOperationEnum.SWINGING +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +sliding = IfcDoorPanelOperationEnum.SLIDING +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +plastic = IfcDoorStyleConstructionEnum.PLASTIC +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorTypeOperationEnum.REVOLVING +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +relay = IfcElectricTimeControlTypeEnum.RELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +girder = IfcElementAssemblyTypeEnum.GIRDER +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +truss = IfcElementAssemblyTypeEnum.TRUSS +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = IfcEventTypeEnum.STARTEVENT +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = IfcFlowDirectionEnum.SOURCE +sink = IfcFlowDirectionEnum.SINK +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = IfcFurnitureTypeEnum.CHAIR +table = IfcFurnitureTypeEnum.TABLE +desk = IfcFurnitureTypeEnum.DESK +bed = IfcFurnitureTypeEnum.BED +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = IfcGeographicElementTypeEnum.TERRAIN +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = IfcGridTypeEnum.RECTANGULAR +radial = IfcGridTypeEnum.RADIAL +triangular = IfcGridTypeEnum.TRIANGULAR +irregular = IfcGridTypeEnum.IRREGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = IfcInternalOrExternalEnum.INTERNAL +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = IfcKnotType.UNIFORM_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +rivet = IfcMechanicalFastenerTypeEnum.RIVET +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stringer = IfcMemberTypeEnum.STRINGER +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNullStyle = enum_namespace() -null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = IfcNullStyle.NULL IfcObjectTypeEnum = enum_namespace() -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = IfcObjectTypeEnum.PRODUCT +process = IfcObjectTypeEnum.PROCESS +control = IfcObjectTypeEnum.CONTROL +resource = IfcObjectTypeEnum.RESOURCE +actor = IfcObjectTypeEnum.ACTOR +group = IfcObjectTypeEnum.GROUP +project = IfcObjectTypeEnum.PROJECT +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +driven = IfcPileTypeEnum.DRIVEN +jetgrouting = IfcPileTypeEnum.JETGROUTING +cohesion = IfcPileTypeEnum.COHESION +friction = IfcPileTypeEnum.FRICTION +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +sheet = IfcPlateTypeEnum.SHEET +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = IfcProfileTypeEnum.CURVE +area = IfcProfileTypeEnum.AREA IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = IfcRailingTypeEnum.HANDRAIL +guardrail = IfcRailingTypeEnum.GUARDRAIL +balustrade = IfcRailingTypeEnum.BALUSTRADE +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcRampFlightTypeEnum.STRAIGHT +spiral = IfcRampFlightTypeEnum.SPIRAL +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = IfcRecurrenceTypeEnum.DAILY +weekly = IfcRecurrenceTypeEnum.WEEKLY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = IfcReferentTypeEnum.KILOPOINT +milepoint = IfcReferentTypeEnum.MILEPOINT +station = IfcReferentTypeEnum.STATION +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = IfcReinforcingBarRoleEnum.MAIN +shear = IfcReinforcingBarRoleEnum.SHEAR +ligature = IfcReinforcingBarRoleEnum.LIGATURE +stud = IfcReinforcingBarRoleEnum.STUD +punching = IfcReinforcingBarRoleEnum.PUNCHING +edge = IfcReinforcingBarRoleEnum.EDGE +ring = IfcReinforcingBarRoleEnum.RING +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +stud = IfcReinforcingBarTypeEnum.STUD +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = IfcRoleEnum.SUPPLIER +manufacturer = IfcRoleEnum.MANUFACTURER +contractor = IfcRoleEnum.CONTRACTOR +subcontractor = IfcRoleEnum.SUBCONTRACTOR +architect = IfcRoleEnum.ARCHITECT +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +costengineer = IfcRoleEnum.COSTENGINEER +client = IfcRoleEnum.CLIENT +buildingowner = IfcRoleEnum.BUILDINGOWNER +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +projectmanager = IfcRoleEnum.PROJECTMANAGER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +civilengineer = IfcRoleEnum.CIVILENGINEER +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +engineer = IfcRoleEnum.ENGINEER +owner = IfcRoleEnum.OWNER +consultant = IfcRoleEnum.CONSULTANT +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +reseller = IfcRoleEnum.RESELLER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = IfcSIPrefix.EXA +peta = IfcSIPrefix.PETA +tera = IfcSIPrefix.TERA +giga = IfcSIPrefix.GIGA +mega = IfcSIPrefix.MEGA +kilo = IfcSIPrefix.KILO +hecto = IfcSIPrefix.HECTO +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +centi = IfcSIPrefix.CENTI +milli = IfcSIPrefix.MILLI +micro = IfcSIPrefix.MICRO +nano = IfcSIPrefix.NANO +pico = IfcSIPrefix.PICO +femto = IfcSIPrefix.FEMTO +atto = IfcSIPrefix.ATTO IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = IfcSectionTypeEnum.UNIFORM +tapered = IfcSectionTypeEnum.TAPERED IfcSensorTypeEnum = enum_namespace() -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = IfcSensorTypeEnum.COSENSOR +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = IfcSequenceEnum.START_START +start_finish = IfcSequenceEnum.START_FINISH +finish_start = IfcSequenceEnum.FINISH_START +finish_finish = IfcSequenceEnum.FINISH_FINISH +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +awning = IfcShadingDeviceTypeEnum.AWNING +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME IfcSlabTypeEnum = enum_namespace() -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = IfcSlabTypeEnum.FLOOR +roof = IfcSlabTypeEnum.ROOF +landing = IfcSlabTypeEnum.LANDING +baseslab = IfcSlabTypeEnum.BASESLAB +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = IfcSpaceTypeEnum.SPACE +parking = IfcSpaceTypeEnum.PARKING +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +external = IfcSpaceTypeEnum.EXTERNAL +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +spiral = IfcStairFlightTypeEnum.SPIRAL +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = IfcStateEnum.READWRITE +readonly = IfcStateEnum.READONLY +locked = IfcStateEnum.LOCKED +readwritelocked = IfcStateEnum.READWRITELOCKED +readonlylocked = IfcStateEnum.READONLYLOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +cable = IfcStructuralCurveMemberTypeEnum.CABLE +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralSurfaceActivityTypeEnum.CONST +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = IfcSurfaceFeatureTypeEnum.MARK +tag = IfcSurfaceFeatureTypeEnum.TAG +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = IfcSurfaceSide.POSITIVE +negative = IfcSurfaceSide.NEGATIVE +both = IfcSurfaceSide.BOTH IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = IfcTaskTypeEnum.ATTENDANCE +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP +down = IfcTextPath.DOWN IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = IfcTransitionCode.DISCONTINUOUS +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE IfcTransitionCurveType = enum_namespace() -biquadraticparabola = express_getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = express_getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) -clothoidcurve = express_getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) -cosinecurve = express_getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) -cubicparabola = express_getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) -sinecurve = express_getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) +biquadraticparabola = IfcTransitionCurveType.BIQUADRATICPARABOLA +blosscurve = IfcTransitionCurveType.BLOSSCURVE +clothoidcurve = IfcTransitionCurveType.CLOTHOIDCURVE +cosinecurve = IfcTransitionCurveType.COSINECURVE +cubicparabola = IfcTransitionCurveType.CUBICPARABOLA +sinecurve = IfcTransitionCurveType.SINECURVE IfcTransportElementTypeEnum = enum_namespace() -elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = IfcTransportElementTypeEnum.ELEVATOR +escalator = IfcTransportElementTypeEnum.ESCALATOR +movingwalkway = IfcTransportElementTypeEnum.MOVINGWALKWAY +craneway = IfcTransportElementTypeEnum.CRANEWAY +liftinggear = IfcTransportElementTypeEnum.LIFTINGGEAR +userdefined = IfcTransportElementTypeEnum.USERDEFINED +notdefined = IfcTransportElementTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +notch = IfcVoidingFeatureTypeEnum.NOTCH +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +edge = IfcVoidingFeatureTypeEnum.EDGE +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +polygonal = IfcWallTypeEnum.POLYGONAL +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +bottom = IfcWindowPanelPositionEnum.BOTTOM +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +plastic = IfcWindowStyleConstructionEnum.PLASTIC +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = IfcWindowTypeEnum.WINDOW +skylight = IfcWindowTypeEnum.SKYLIGHT +lightdome = IfcWindowTypeEnum.LIGHTDOME +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X1', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py index 9ea3753faf..80376eff4c 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X2.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,1966 +152,1966 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +snow_s = IfcActionSourceTypeEnum.SNOW_S +wind_w = IfcActionSourceTypeEnum.WIND_W +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +fire = IfcActionSourceTypeEnum.FIRE +impulse = IfcActionSourceTypeEnum.IMPULSE +impact = IfcActionSourceTypeEnum.IMPACT +transport = IfcActionSourceTypeEnum.TRANSPORT +erection = IfcActionSourceTypeEnum.ERECTION +propping = IfcActionSourceTypeEnum.PROPPING +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +creep = IfcActionSourceTypeEnum.CREEP +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +ice = IfcActionSourceTypeEnum.ICE +current = IfcActionSourceTypeEnum.CURRENT +wave = IfcActionSourceTypeEnum.WAVE +rain = IfcActionSourceTypeEnum.RAIN +brakes = IfcActionSourceTypeEnum.BRAKES +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +home = IfcAddressTypeEnum.HOME +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = IfcAssemblyPlaceEnum.SITE +factory = IfcAssemblyPlaceEnum.FACTORY +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +joist = IfcBeamTypeEnum.JOIST +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +lintel = IfcBeamTypeEnum.LINTEL +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +piercap = IfcBeamTypeEnum.PIERCAP +hatstone = IfcBeamTypeEnum.HATSTONE +cornice = IfcBeamTypeEnum.CORNICE +edgebeam = IfcBeamTypeEnum.EDGEBEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = IfcBearingTypeDisplacementEnum.FIXED_MOVEMENT +guided_longitudinal = IfcBearingTypeDisplacementEnum.GUIDED_LONGITUDINAL +guided_transversal = IfcBearingTypeDisplacementEnum.GUIDED_TRANSVERSAL +free_movement = IfcBearingTypeDisplacementEnum.FREE_MOVEMENT +notdefined = IfcBearingTypeDisplacementEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +spherical = IfcBearingTypeEnum.SPHERICAL +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +pot = IfcBearingTypeEnum.POT +guide = IfcBearingTypeEnum.GUIDE +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +disk = IfcBearingTypeEnum.DISK +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +equalto = IfcBenchmarkEnum.EQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +includes = IfcBenchmarkEnum.INCLUDES +notincludes = IfcBenchmarkEnum.NOTINCLUDES +includedin = IfcBenchmarkEnum.INCLUDEDIN +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN IfcBoilerTypeEnum = enum_namespace() -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = IfcBoilerTypeEnum.WATER +steam = IfcBoilerTypeEnum.STEAM +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = IfcBooleanOperator.UNION +intersection = IfcBooleanOperator.INTERSECTION +difference = IfcBooleanOperator.DIFFERENCE IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +apron = IfcBuildingElementPartTypeEnum.APRON +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +reinforcing = IfcBuildingSystemTypeEnum.REINFORCING +prestressing = IfcBuildingSystemTypeEnum.PRESTRESSING +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +cross = IfcCableCarrierFittingTypeEnum.CROSS +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = IfcCaissonFoundationTypeEnum.WELL +caisson = IfcCaissonFoundationTypeEnum.CAISSON +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = IfcChangeActionEnum.NOCHANGE +modified = IfcChangeActionEnum.MODIFIED +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +watercooled = IfcChillerTypeEnum.WATERCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pilaster = IfcColumnTypeEnum.PILASTER +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = IfcCompressorTypeEnum.DYNAMIC +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rotary = IfcCompressorTypeEnum.ROTARY +scroll = IfcCompressorTypeEnum.SCROLL +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +booster = IfcCompressorTypeEnum.BOOSTER +opentype = IfcCompressorTypeEnum.OPENTYPE +hermetic = IfcCompressorTypeEnum.HERMETIC +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +twinscrew = IfcCompressorTypeEnum.TWINSCREW +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +atend = IfcConnectionTypeEnum.ATEND +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +advisory = IfcConstraintEnum.ADVISORY +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +multiposition = IfcControllerTypeEnum.MULTIPOSITION +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +tender = IfcCostScheduleTypeEnum.TENDER +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +flooring = IfcCoveringTypeEnum.FLOORING +cladding = IfcCoveringTypeEnum.CLADDING +roofing = IfcCoveringTypeEnum.ROOFING +molding = IfcCoveringTypeEnum.MOLDING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +sleeving = IfcCoveringTypeEnum.SLEEVING +wrapping = IfcCoveringTypeEnum.WRAPPING +coping = IfcCoveringTypeEnum.COPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = IfcDirectionSenseEnum.POSITIVE +negative = IfcDirectionSenseEnum.NEGATIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +final = IfcDocumentStatusEnum.FINAL +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = IfcDoorPanelOperationEnum.SWINGING +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +sliding = IfcDoorPanelOperationEnum.SLIDING +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +plastic = IfcDoorStyleConstructionEnum.PLASTIC +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorTypeOperationEnum.REVOLVING +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +relay = IfcElectricTimeControlTypeEnum.RELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +girder = IfcElementAssemblyTypeEnum.GIRDER +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +truss = IfcElementAssemblyTypeEnum.TRUSS +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = IfcEventTypeEnum.STARTEVENT +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = IfcFlowDirectionEnum.SOURCE +sink = IfcFlowDirectionEnum.SINK +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = IfcFurnitureTypeEnum.CHAIR +table = IfcFurnitureTypeEnum.TABLE +desk = IfcFurnitureTypeEnum.DESK +bed = IfcFurnitureTypeEnum.BED +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = IfcGeographicElementTypeEnum.TERRAIN +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = IfcGridTypeEnum.RECTANGULAR +radial = IfcGridTypeEnum.RADIAL +triangular = IfcGridTypeEnum.TRIANGULAR +irregular = IfcGridTypeEnum.IRREGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = IfcInternalOrExternalEnum.INTERNAL +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = IfcKnotType.UNIFORM_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +rivet = IfcMechanicalFastenerTypeEnum.RIVET +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stringer = IfcMemberTypeEnum.STRINGER +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +suspender = IfcMemberTypeEnum.SUSPENDER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNullStyle = enum_namespace() -null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = IfcNullStyle.NULL IfcObjectTypeEnum = enum_namespace() -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = IfcObjectTypeEnum.PRODUCT +process = IfcObjectTypeEnum.PROCESS +control = IfcObjectTypeEnum.CONTROL +resource = IfcObjectTypeEnum.RESOURCE +actor = IfcObjectTypeEnum.ACTOR +group = IfcObjectTypeEnum.GROUP +project = IfcObjectTypeEnum.PROJECT +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +driven = IfcPileTypeEnum.DRIVEN +jetgrouting = IfcPileTypeEnum.JETGROUTING +cohesion = IfcPileTypeEnum.COHESION +friction = IfcPileTypeEnum.FRICTION +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +sheet = IfcPlateTypeEnum.SHEET +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +base_plate = IfcPlateTypeEnum.BASE_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = IfcProfileTypeEnum.CURVE +area = IfcProfileTypeEnum.AREA IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = IfcRailingTypeEnum.HANDRAIL +guardrail = IfcRailingTypeEnum.GUARDRAIL +balustrade = IfcRailingTypeEnum.BALUSTRADE +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcRampFlightTypeEnum.STRAIGHT +spiral = IfcRampFlightTypeEnum.SPIRAL +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = IfcRecurrenceTypeEnum.DAILY +weekly = IfcRecurrenceTypeEnum.WEEKLY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = IfcReferentTypeEnum.KILOPOINT +milepoint = IfcReferentTypeEnum.MILEPOINT +station = IfcReferentTypeEnum.STATION +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = IfcReinforcingBarRoleEnum.MAIN +shear = IfcReinforcingBarRoleEnum.SHEAR +ligature = IfcReinforcingBarRoleEnum.LIGATURE +stud = IfcReinforcingBarRoleEnum.STUD +punching = IfcReinforcingBarRoleEnum.PUNCHING +edge = IfcReinforcingBarRoleEnum.EDGE +ring = IfcReinforcingBarRoleEnum.RING +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +stud = IfcReinforcingBarTypeEnum.STUD +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = IfcRoleEnum.SUPPLIER +manufacturer = IfcRoleEnum.MANUFACTURER +contractor = IfcRoleEnum.CONTRACTOR +subcontractor = IfcRoleEnum.SUBCONTRACTOR +architect = IfcRoleEnum.ARCHITECT +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +costengineer = IfcRoleEnum.COSTENGINEER +client = IfcRoleEnum.CLIENT +buildingowner = IfcRoleEnum.BUILDINGOWNER +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +projectmanager = IfcRoleEnum.PROJECTMANAGER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +civilengineer = IfcRoleEnum.CIVILENGINEER +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +engineer = IfcRoleEnum.ENGINEER +owner = IfcRoleEnum.OWNER +consultant = IfcRoleEnum.CONSULTANT +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +reseller = IfcRoleEnum.RESELLER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = IfcSIPrefix.EXA +peta = IfcSIPrefix.PETA +tera = IfcSIPrefix.TERA +giga = IfcSIPrefix.GIGA +mega = IfcSIPrefix.MEGA +kilo = IfcSIPrefix.KILO +hecto = IfcSIPrefix.HECTO +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +centi = IfcSIPrefix.CENTI +milli = IfcSIPrefix.MILLI +micro = IfcSIPrefix.MICRO +nano = IfcSIPrefix.NANO +pico = IfcSIPrefix.PICO +femto = IfcSIPrefix.FEMTO +atto = IfcSIPrefix.ATTO IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = IfcSectionTypeEnum.UNIFORM +tapered = IfcSectionTypeEnum.TAPERED IfcSensorTypeEnum = enum_namespace() -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = IfcSensorTypeEnum.COSENSOR +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = IfcSequenceEnum.START_START +start_finish = IfcSequenceEnum.START_FINISH +finish_start = IfcSequenceEnum.FINISH_START +finish_finish = IfcSequenceEnum.FINISH_FINISH +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +awning = IfcShadingDeviceTypeEnum.AWNING +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME IfcSlabTypeEnum = enum_namespace() -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = IfcSlabTypeEnum.FLOOR +roof = IfcSlabTypeEnum.ROOF +landing = IfcSlabTypeEnum.LANDING +baseslab = IfcSlabTypeEnum.BASESLAB +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +paving = IfcSlabTypeEnum.PAVING +wearing = IfcSlabTypeEnum.WEARING +sidewalk = IfcSlabTypeEnum.SIDEWALK +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = IfcSpaceTypeEnum.SPACE +parking = IfcSpaceTypeEnum.PARKING +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +external = IfcSpaceTypeEnum.EXTERNAL +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +spiral = IfcStairFlightTypeEnum.SPIRAL +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = IfcStateEnum.READWRITE +readonly = IfcStateEnum.READONLY +locked = IfcStateEnum.LOCKED +readwritelocked = IfcStateEnum.READWRITELOCKED +readonlylocked = IfcStateEnum.READONLYLOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +cable = IfcStructuralCurveMemberTypeEnum.CABLE +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralSurfaceActivityTypeEnum.CONST +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = IfcSurfaceFeatureTypeEnum.MARK +tag = IfcSurfaceFeatureTypeEnum.TAG +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +defect = IfcSurfaceFeatureTypeEnum.DEFECT +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = IfcSurfaceSide.POSITIVE +negative = IfcSurfaceSide.NEGATIVE +both = IfcSurfaceSide.BOTH IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = IfcTaskTypeEnum.ATTENDANCE +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = IfcTendonConduitTypeEnum.DUCT +coupler = IfcTendonConduitTypeEnum.COUPLER +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +diabolo = IfcTendonConduitTypeEnum.DIABOLO +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP +down = IfcTextPath.DOWN IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = IfcTransitionCode.DISCONTINUOUS +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE IfcTransitionCurveType = enum_namespace() -biquadraticparabola = express_getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = express_getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) -clothoidcurve = express_getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) -cosinecurve = express_getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) -cubicparabola = express_getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) -sinecurve = express_getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) +biquadraticparabola = IfcTransitionCurveType.BIQUADRATICPARABOLA +blosscurve = IfcTransitionCurveType.BLOSSCURVE +clothoidcurve = IfcTransitionCurveType.CLOTHOIDCURVE +cosinecurve = IfcTransitionCurveType.COSINECURVE +cubicparabola = IfcTransitionCurveType.CUBICPARABOLA +sinecurve = IfcTransitionCurveType.SINECURVE IfcTransportElementTypeEnum = enum_namespace() -elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = IfcTransportElementTypeEnum.ELEVATOR +escalator = IfcTransportElementTypeEnum.ESCALATOR +movingwalkway = IfcTransportElementTypeEnum.MOVINGWALKWAY +craneway = IfcTransportElementTypeEnum.CRANEWAY +liftinggear = IfcTransportElementTypeEnum.LIFTINGGEAR +userdefined = IfcTransportElementTypeEnum.USERDEFINED +notdefined = IfcTransportElementTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +viscous = IfcVibrationDamperTypeEnum.VISCOUS +rubber = IfcVibrationDamperTypeEnum.RUBBER +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +base = IfcVibrationIsolatorTypeEnum.BASE +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +notch = IfcVoidingFeatureTypeEnum.NOTCH +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +edge = IfcVoidingFeatureTypeEnum.EDGE +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +polygonal = IfcWallTypeEnum.POLYGONAL +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +retainingwall = IfcWallTypeEnum.RETAININGWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +bottom = IfcWindowPanelPositionEnum.BOTTOM +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +plastic = IfcWindowStyleConstructionEnum.PLASTIC +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = IfcWindowTypeEnum.WINDOW +skylight = IfcWindowTypeEnum.SKYLIGHT +lightdome = IfcWindowTypeEnum.LIGHTDOME +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X2', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py index 9d2f638222..3e99f58511 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,2423 +152,2423 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +brakes = IfcActionSourceTypeEnum.BRAKES +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +creep = IfcActionSourceTypeEnum.CREEP +current = IfcActionSourceTypeEnum.CURRENT +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +erection = IfcActionSourceTypeEnum.ERECTION +fire = IfcActionSourceTypeEnum.FIRE +ice = IfcActionSourceTypeEnum.ICE +impact = IfcActionSourceTypeEnum.IMPACT +impulse = IfcActionSourceTypeEnum.IMPULSE +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +propping = IfcActionSourceTypeEnum.PROPPING +rain = IfcActionSourceTypeEnum.RAIN +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +snow_s = IfcActionSourceTypeEnum.SNOW_S +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +transport = IfcActionSourceTypeEnum.TRANSPORT +wave = IfcActionSourceTypeEnum.WAVE +wind_w = IfcActionSourceTypeEnum.WIND_W +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +home = IfcAddressTypeEnum.HOME +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +railwaycrocodile = IfcAlarmTypeEnum.RAILWAYCROCODILE +railwaydetonator = IfcAlarmTypeEnum.RAILWAYDETONATOR +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentCantSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentCantSegmentTypeEnum.BLOSSCURVE +constantcant = IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT +cosinecurve = IfcAlignmentCantSegmentTypeEnum.COSINECURVE +helmertcurve = IfcAlignmentCantSegmentTypeEnum.HELMERTCURVE +lineartransition = IfcAlignmentCantSegmentTypeEnum.LINEARTRANSITION +sinecurve = IfcAlignmentCantSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentCantSegmentTypeEnum.VIENNESEBEND IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentHorizontalSegmentTypeEnum.BLOSSCURVE +circulararc = IfcAlignmentHorizontalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentHorizontalSegmentTypeEnum.CLOTHOID +cosinecurve = IfcAlignmentHorizontalSegmentTypeEnum.COSINECURVE +cubic = IfcAlignmentHorizontalSegmentTypeEnum.CUBIC +helmertcurve = IfcAlignmentHorizontalSegmentTypeEnum.HELMERTCURVE +line = IfcAlignmentHorizontalSegmentTypeEnum.LINE +sinecurve = IfcAlignmentHorizontalSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentHorizontalSegmentTypeEnum.VIENNESEBEND IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) +circulararc = IfcAlignmentVerticalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentVerticalSegmentTypeEnum.CLOTHOID +constantgradient = IfcAlignmentVerticalSegmentTypeEnum.CONSTANTGRADIENT +parabolicarc = IfcAlignmentVerticalSegmentTypeEnum.PARABOLICARC IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcAnnotationTypeEnum = enum_namespace() -asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +asbuiltarea = IfcAnnotationTypeEnum.ASBUILTAREA +asbuiltline = IfcAnnotationTypeEnum.ASBUILTLINE +asbuiltpoint = IfcAnnotationTypeEnum.ASBUILTPOINT +assumedarea = IfcAnnotationTypeEnum.ASSUMEDAREA +assumedline = IfcAnnotationTypeEnum.ASSUMEDLINE +assumedpoint = IfcAnnotationTypeEnum.ASSUMEDPOINT +non_physical_signal = IfcAnnotationTypeEnum.NON_PHYSICAL_SIGNAL +superelevationevent = IfcAnnotationTypeEnum.SUPERELEVATIONEVENT +widthevent = IfcAnnotationTypeEnum.WIDTHEVENT +userdefined = IfcAnnotationTypeEnum.USERDEFINED +notdefined = IfcAnnotationTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +factory = IfcAssemblyPlaceEnum.FACTORY +site = IfcAssemblyPlaceEnum.SITE +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +communicationterminal = IfcAudioVisualApplianceTypeEnum.COMMUNICATIONTERMINAL +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +recordingequipment = IfcAudioVisualApplianceTypeEnum.RECORDINGEQUIPMENT +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +cornice = IfcBeamTypeEnum.CORNICE +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +edgebeam = IfcBeamTypeEnum.EDGEBEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +hatstone = IfcBeamTypeEnum.HATSTONE +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +joist = IfcBeamTypeEnum.JOIST +lintel = IfcBeamTypeEnum.LINTEL +piercap = IfcBeamTypeEnum.PIERCAP +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = IfcBearingTypeDisplacementEnum.FIXED_MOVEMENT +free_movement = IfcBearingTypeDisplacementEnum.FREE_MOVEMENT +guided_longitudinal = IfcBearingTypeDisplacementEnum.GUIDED_LONGITUDINAL +guided_transversal = IfcBearingTypeDisplacementEnum.GUIDED_TRANSVERSAL +notdefined = IfcBearingTypeDisplacementEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +disk = IfcBearingTypeEnum.DISK +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +guide = IfcBearingTypeEnum.GUIDE +pot = IfcBearingTypeEnum.POT +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +spherical = IfcBearingTypeEnum.SPHERICAL +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +equalto = IfcBenchmarkEnum.EQUALTO +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +includedin = IfcBenchmarkEnum.INCLUDEDIN +includes = IfcBenchmarkEnum.INCLUDES +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN +notincludes = IfcBenchmarkEnum.NOTINCLUDES IfcBoilerTypeEnum = enum_namespace() -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +steam = IfcBoilerTypeEnum.STEAM +water = IfcBoilerTypeEnum.WATER +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +difference = IfcBooleanOperator.DIFFERENCE +intersection = IfcBooleanOperator.INTERSECTION +union = IfcBooleanOperator.UNION IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +apron = IfcBuildingElementPartTypeEnum.APRON +armourunit = IfcBuildingElementPartTypeEnum.ARMOURUNIT +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +safetycage = IfcBuildingElementPartTypeEnum.SAFETYCAGE +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +erosionprevention = IfcBuildingSystemTypeEnum.EROSIONPREVENTION +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +prestressing = IfcBuildingSystemTypeEnum.PRESTRESSING +reinforcing = IfcBuildingSystemTypeEnum.REINFORCING +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBuiltSystemTypeEnum = enum_namespace() -erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -railwayline = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE) -railwaytrack = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE) -reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +erosionprevention = IfcBuiltSystemTypeEnum.EROSIONPREVENTION +fenestration = IfcBuiltSystemTypeEnum.FENESTRATION +foundation = IfcBuiltSystemTypeEnum.FOUNDATION +loadbearing = IfcBuiltSystemTypeEnum.LOADBEARING +mooring = IfcBuiltSystemTypeEnum.MOORING +outershell = IfcBuiltSystemTypeEnum.OUTERSHELL +prestressing = IfcBuiltSystemTypeEnum.PRESTRESSING +railwayline = IfcBuiltSystemTypeEnum.RAILWAYLINE +railwaytrack = IfcBuiltSystemTypeEnum.RAILWAYTRACK +reinforcing = IfcBuiltSystemTypeEnum.REINFORCING +shading = IfcBuiltSystemTypeEnum.SHADING +trackcircuit = IfcBuiltSystemTypeEnum.TRACKCIRCUIT +transport = IfcBuiltSystemTypeEnum.TRANSPORT +userdefined = IfcBuiltSystemTypeEnum.USERDEFINED +notdefined = IfcBuiltSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -junction = express_getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -transition = express_getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +connector = IfcCableCarrierFittingTypeEnum.CONNECTOR +cross = IfcCableCarrierFittingTypeEnum.CROSS +junction = IfcCableCarrierFittingTypeEnum.JUNCTION +tee = IfcCableCarrierFittingTypeEnum.TEE +transition = IfcCableCarrierFittingTypeEnum.TRANSITION +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cablebracket = IfcCableCarrierSegmentTypeEnum.CABLEBRACKET +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +catenarywire = IfcCableCarrierSegmentTypeEnum.CATENARYWIRE +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +dropper = IfcCableCarrierSegmentTypeEnum.DROPPER +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +fanout = IfcCableFittingTypeEnum.FANOUT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) -fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) -opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) -stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) -wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +contactwiresegment = IfcCableSegmentTypeEnum.CONTACTWIRESEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +fibersegment = IfcCableSegmentTypeEnum.FIBERSEGMENT +fibertube = IfcCableSegmentTypeEnum.FIBERTUBE +opticalcablesegment = IfcCableSegmentTypeEnum.OPTICALCABLESEGMENT +stitchwire = IfcCableSegmentTypeEnum.STITCHWIRE +wirepairsegment = IfcCableSegmentTypeEnum.WIREPAIRSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson = IfcCaissonFoundationTypeEnum.CAISSON +well = IfcCaissonFoundationTypeEnum.WELL +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +modified = IfcChangeActionEnum.MODIFIED +nochange = IfcChangeActionEnum.NOCHANGE +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +watercooled = IfcChillerTypeEnum.WATERCOOLED +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +pilaster = IfcColumnTypeEnum.PILASTER +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) -ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) -linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) -opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) -telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) -transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) -transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) -transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +automaton = IfcCommunicationsApplianceTypeEnum.AUTOMATON +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +intelligentperipheral = IfcCommunicationsApplianceTypeEnum.INTELLIGENTPERIPHERAL +ipnetworkequipment = IfcCommunicationsApplianceTypeEnum.IPNETWORKEQUIPMENT +linesideelectronicunit = IfcCommunicationsApplianceTypeEnum.LINESIDEELECTRONICUNIT +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +opticallineterminal = IfcCommunicationsApplianceTypeEnum.OPTICALLINETERMINAL +opticalnetworkunit = IfcCommunicationsApplianceTypeEnum.OPTICALNETWORKUNIT +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +radioblockcenter = IfcCommunicationsApplianceTypeEnum.RADIOBLOCKCENTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +telecommand = IfcCommunicationsApplianceTypeEnum.TELECOMMAND +telephonyexchange = IfcCommunicationsApplianceTypeEnum.TELEPHONYEXCHANGE +transitioncomponent = IfcCommunicationsApplianceTypeEnum.TRANSITIONCOMPONENT +transponder = IfcCommunicationsApplianceTypeEnum.TRANSPONDER +transportequipment = IfcCommunicationsApplianceTypeEnum.TRANSPORTEQUIPMENT +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +booster = IfcCompressorTypeEnum.BOOSTER +dynamic = IfcCompressorTypeEnum.DYNAMIC +hermetic = IfcCompressorTypeEnum.HERMETIC +opentype = IfcCompressorTypeEnum.OPENTYPE +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotary = IfcCompressorTypeEnum.ROTARY +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +scroll = IfcCompressorTypeEnum.SCROLL +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +twinscrew = IfcCompressorTypeEnum.TWINSCREW +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atend = IfcConnectionTypeEnum.ATEND +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +advisory = IfcConstraintEnum.ADVISORY +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +multiposition = IfcControllerTypeEnum.MULTIPOSITION +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcConveyorSegmentTypeEnum = enum_namespace() -beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltconveyor = IfcConveyorSegmentTypeEnum.BELTCONVEYOR +bucketconveyor = IfcConveyorSegmentTypeEnum.BUCKETCONVEYOR +chuteconveyor = IfcConveyorSegmentTypeEnum.CHUTECONVEYOR +screwconveyor = IfcConveyorSegmentTypeEnum.SCREWCONVEYOR +userdefined = IfcConveyorSegmentTypeEnum.USERDEFINED +notdefined = IfcConveyorSegmentTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +tender = IfcCostScheduleTypeEnum.TENDER +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCourseTypeEnum = enum_namespace() -armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = IfcCourseTypeEnum.ARMOUR +ballastbed = IfcCourseTypeEnum.BALLASTBED +core = IfcCourseTypeEnum.CORE +filter = IfcCourseTypeEnum.FILTER +pavement = IfcCourseTypeEnum.PAVEMENT +protection = IfcCourseTypeEnum.PROTECTION +userdefined = IfcCourseTypeEnum.USERDEFINED +notdefined = IfcCourseTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -topping = express_getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +cladding = IfcCoveringTypeEnum.CLADDING +coping = IfcCoveringTypeEnum.COPING +flooring = IfcCoveringTypeEnum.FLOORING +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +molding = IfcCoveringTypeEnum.MOLDING +roofing = IfcCoveringTypeEnum.ROOFING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +sleeving = IfcCoveringTypeEnum.SLEEVING +topping = IfcCoveringTypeEnum.TOPPING +wrapping = IfcCoveringTypeEnum.WRAPPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = IfcDirectionSenseEnum.NEGATIVE +positive = IfcDirectionSenseEnum.POSITIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -filler = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE) -flashing = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE) -insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) -point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) -railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +birdprotection = IfcDiscreteAccessoryTypeEnum.BIRDPROTECTION +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +cablearranger = IfcDiscreteAccessoryTypeEnum.CABLEARRANGER +elastic_cushion = IfcDiscreteAccessoryTypeEnum.ELASTIC_CUSHION +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +filler = IfcDiscreteAccessoryTypeEnum.FILLER +flashing = IfcDiscreteAccessoryTypeEnum.FLASHING +insulator = IfcDiscreteAccessoryTypeEnum.INSULATOR +lock = IfcDiscreteAccessoryTypeEnum.LOCK +panel_strengthening = IfcDiscreteAccessoryTypeEnum.PANEL_STRENGTHENING +pointmachinemountingdevice = IfcDiscreteAccessoryTypeEnum.POINTMACHINEMOUNTINGDEVICE +point_machine_locking_device = IfcDiscreteAccessoryTypeEnum.POINT_MACHINE_LOCKING_DEVICE +railbrace = IfcDiscreteAccessoryTypeEnum.RAILBRACE +railpad = IfcDiscreteAccessoryTypeEnum.RAILPAD +rail_lubrication = IfcDiscreteAccessoryTypeEnum.RAIL_LUBRICATION +rail_mechanical_equipment = IfcDiscreteAccessoryTypeEnum.RAIL_MECHANICAL_EQUIPMENT +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +slidingchair = IfcDiscreteAccessoryTypeEnum.SLIDINGCHAIR +soundabsorption = IfcDiscreteAccessoryTypeEnum.SOUNDABSORPTION +tensioningequipment = IfcDiscreteAccessoryTypeEnum.TENSIONINGEQUIPMENT +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) -distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcDistributionBoardTypeEnum.CONSUMERUNIT +dispatchingboard = IfcDistributionBoardTypeEnum.DISPATCHINGBOARD +distributionboard = IfcDistributionBoardTypeEnum.DISTRIBUTIONBOARD +distributionframe = IfcDistributionBoardTypeEnum.DISTRIBUTIONFRAME +motorcontrolcentre = IfcDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcDistributionBoardTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +wireless = IfcDistributionPortTypeEnum.WIRELESS +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) -monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) -overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +catenary_system = IfcDistributionSystemEnum.CATENARY_SYSTEM +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fixedtransmissionnetwork = IfcDistributionSystemEnum.FIXEDTRANSMISSIONNETWORK +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +mobilenetwork = IfcDistributionSystemEnum.MOBILENETWORK +monitoringsystem = IfcDistributionSystemEnum.MONITORINGSYSTEM +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +operationaltelephonysystem = IfcDistributionSystemEnum.OPERATIONALTELEPHONYSYSTEM +overhead_contactline_system = IfcDistributionSystemEnum.OVERHEAD_CONTACTLINE_SYSTEM +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +return_circuit = IfcDistributionSystemEnum.RETURN_CIRCUIT +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +final = IfcDocumentStatusEnum.FINAL +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +sliding = IfcDoorPanelOperationEnum.SLIDING +swinging = IfcDoorPanelOperationEnum.SWINGING +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +plastic = IfcDoorStyleConstructionEnum.PLASTIC +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +boom_barrier = IfcDoorTypeEnum.BOOM_BARRIER +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +turnstile = IfcDoorTypeEnum.TURNSTILE +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -double_panel_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) -double_panel_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) -double_panel_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', INDETERMINATE) -double_panel_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) -double_panel_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_panel_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_panel_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SLIDING', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) -lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) -lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) -revolving_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', INDETERMINATE) -revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_panel_double_swing = IfcDoorTypeOperationEnum.DOUBLE_PANEL_DOUBLE_SWING +double_panel_folding = IfcDoorTypeOperationEnum.DOUBLE_PANEL_FOLDING +double_panel_lifting_vertical = IfcDoorTypeOperationEnum.DOUBLE_PANEL_LIFTING_VERTICAL +double_panel_single_swing = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING +double_panel_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT +double_panel_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT +double_panel_sliding = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SLIDING +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +lifting_horizontal = IfcDoorTypeOperationEnum.LIFTING_HORIZONTAL +lifting_vertical_left = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_LEFT +lifting_vertical_right = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_RIGHT +revolving_horizontal = IfcDoorTypeOperationEnum.REVOLVING_HORIZONTAL +revolving_vertical = IfcDoorTypeOperationEnum.REVOLVING_VERTICAL +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcEarthworksCutTypeEnum = enum_namespace() -base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +base_excavation = IfcEarthworksCutTypeEnum.BASE_EXCAVATION +cut = IfcEarthworksCutTypeEnum.CUT +dredging = IfcEarthworksCutTypeEnum.DREDGING +excavation = IfcEarthworksCutTypeEnum.EXCAVATION +overexcavation = IfcEarthworksCutTypeEnum.OVEREXCAVATION +pavementmilling = IfcEarthworksCutTypeEnum.PAVEMENTMILLING +stepexcavation = IfcEarthworksCutTypeEnum.STEPEXCAVATION +topsoilremoval = IfcEarthworksCutTypeEnum.TOPSOILREMOVAL +trench = IfcEarthworksCutTypeEnum.TRENCH +userdefined = IfcEarthworksCutTypeEnum.USERDEFINED +notdefined = IfcEarthworksCutTypeEnum.NOTDEFINED IfcEarthworksFillTypeEnum = enum_namespace() -backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = IfcEarthworksFillTypeEnum.BACKFILL +counterweight = IfcEarthworksFillTypeEnum.COUNTERWEIGHT +embankment = IfcEarthworksFillTypeEnum.EMBANKMENT +slopefill = IfcEarthworksFillTypeEnum.SLOPEFILL +subgrade = IfcEarthworksFillTypeEnum.SUBGRADE +subgradebed = IfcEarthworksFillTypeEnum.SUBGRADEBED +transitionsection = IfcEarthworksFillTypeEnum.TRANSITIONSECTION +userdefined = IfcEarthworksFillTypeEnum.USERDEFINED +notdefined = IfcEarthworksFillTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitor = IfcElectricFlowStorageDeviceTypeEnum.CAPACITOR +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +compensator = IfcElectricFlowStorageDeviceTypeEnum.COMPENSATOR +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductor = IfcElectricFlowStorageDeviceTypeEnum.INDUCTOR +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +recharger = IfcElectricFlowStorageDeviceTypeEnum.RECHARGER +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = IfcElectricFlowTreatmentDeviceTypeEnum.ELECTRONICFILTER +userdefined = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowTreatmentDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +relay = IfcElectricTimeControlTypeEnum.RELAY +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +dilatationpanel = IfcElementAssemblyTypeEnum.DILATATIONPANEL +entranceworks = IfcElementAssemblyTypeEnum.ENTRANCEWORKS +girder = IfcElementAssemblyTypeEnum.GIRDER +grid = IfcElementAssemblyTypeEnum.GRID +mast = IfcElementAssemblyTypeEnum.MAST +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +rail_mechanical_equipment_assembly = IfcElementAssemblyTypeEnum.RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +shelter = IfcElementAssemblyTypeEnum.SHELTER +signalassembly = IfcElementAssemblyTypeEnum.SIGNALASSEMBLY +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +sumpbuster = IfcElementAssemblyTypeEnum.SUMPBUSTER +supportingassembly = IfcElementAssemblyTypeEnum.SUPPORTINGASSEMBLY +suspensionassembly = IfcElementAssemblyTypeEnum.SUSPENSIONASSEMBLY +trackpanel = IfcElementAssemblyTypeEnum.TRACKPANEL +traction_switching_assembly = IfcElementAssemblyTypeEnum.TRACTION_SWITCHING_ASSEMBLY +traffic_calming_device = IfcElementAssemblyTypeEnum.TRAFFIC_CALMING_DEVICE +truss = IfcElementAssemblyTypeEnum.TRUSS +turnoutpanel = IfcElementAssemblyTypeEnum.TURNOUTPANEL +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +startevent = IfcEventTypeEnum.STARTEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFacilityPartCommonTypeEnum = enum_namespace() -aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +aboveground = IfcFacilityPartCommonTypeEnum.ABOVEGROUND +belowground = IfcFacilityPartCommonTypeEnum.BELOWGROUND +junction = IfcFacilityPartCommonTypeEnum.JUNCTION +levelcrossing = IfcFacilityPartCommonTypeEnum.LEVELCROSSING +segment = IfcFacilityPartCommonTypeEnum.SEGMENT +substructure = IfcFacilityPartCommonTypeEnum.SUBSTRUCTURE +superstructure = IfcFacilityPartCommonTypeEnum.SUPERSTRUCTURE +terminal = IfcFacilityPartCommonTypeEnum.TERMINAL +userdefined = IfcFacilityPartCommonTypeEnum.USERDEFINED +notdefined = IfcFacilityPartCommonTypeEnum.NOTDEFINED IfcFacilityUsageEnum = enum_namespace() -lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = IfcFacilityUsageEnum.LATERAL +longitudinal = IfcFacilityUsageEnum.LONGITUDINAL +region = IfcFacilityUsageEnum.REGION +vertical = IfcFacilityUsageEnum.VERTICAL +userdefined = IfcFacilityUsageEnum.USERDEFINED +notdefined = IfcFacilityUsageEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +firemonitor = IfcFireSuppressionTerminalTypeEnum.FIREMONITOR +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +sink = IfcFlowDirectionEnum.SINK +source = IfcFlowDirectionEnum.SOURCE +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +combined = IfcFlowInstrumentTypeEnum.COMBINED +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +voltmeter = IfcFlowInstrumentTypeEnum.VOLTMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +bed = IfcFurnitureTypeEnum.BED +chair = IfcFurnitureTypeEnum.CHAIR +desk = IfcFurnitureTypeEnum.DESK +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +table = IfcFurnitureTypeEnum.TABLE +technicalcabinet = IfcFurnitureTypeEnum.TECHNICALCABINET +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -vegetation = express_getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +terrain = IfcGeographicElementTypeEnum.TERRAIN +vegetation = IfcGeographicElementTypeEnum.VEGETATION +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGeotechnicalStratumTypeEnum = enum_namespace() -solid = express_getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE) -void = express_getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE) -water = express_getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE) -userdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE) +solid = IfcGeotechnicalStratumTypeEnum.SOLID +void = IfcGeotechnicalStratumTypeEnum.VOID +water = IfcGeotechnicalStratumTypeEnum.WATER +userdefined = IfcGeotechnicalStratumTypeEnum.USERDEFINED +notdefined = IfcGeotechnicalStratumTypeEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +irregular = IfcGridTypeEnum.IRREGULAR +radial = IfcGridTypeEnum.RADIAL +rectangular = IfcGridTypeEnum.RECTANGULAR +triangular = IfcGridTypeEnum.TRIANGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +turnoutheating = IfcHeatExchangerTypeEnum.TURNOUTHEATING +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcImpactProtectionDeviceTypeEnum = enum_namespace() -bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bumper = IfcImpactProtectionDeviceTypeEnum.BUMPER +crashcushion = IfcImpactProtectionDeviceTypeEnum.CRASHCUSHION +dampingsystem = IfcImpactProtectionDeviceTypeEnum.DAMPINGSYSTEM +fender = IfcImpactProtectionDeviceTypeEnum.FENDER +userdefined = IfcImpactProtectionDeviceTypeEnum.USERDEFINED +notdefined = IfcImpactProtectionDeviceTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +internal = IfcInternalOrExternalEnum.INTERNAL +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +uniform_knots = IfcKnotType.UNIFORM_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLiquidTerminalTypeEnum = enum_namespace() -hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +hosereel = IfcLiquidTerminalTypeEnum.HOSEREEL +loadingarm = IfcLiquidTerminalTypeEnum.LOADINGARM +userdefined = IfcLiquidTerminalTypeEnum.USERDEFINED +notdefined = IfcLiquidTerminalTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR IfcMarineFacilityTypeEnum = enum_namespace() -barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) -shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +barrierbeach = IfcMarineFacilityTypeEnum.BARRIERBEACH +breakwater = IfcMarineFacilityTypeEnum.BREAKWATER +canal = IfcMarineFacilityTypeEnum.CANAL +drydock = IfcMarineFacilityTypeEnum.DRYDOCK +floatingdock = IfcMarineFacilityTypeEnum.FLOATINGDOCK +hydrolift = IfcMarineFacilityTypeEnum.HYDROLIFT +jetty = IfcMarineFacilityTypeEnum.JETTY +launchrecovery = IfcMarineFacilityTypeEnum.LAUNCHRECOVERY +marinedefence = IfcMarineFacilityTypeEnum.MARINEDEFENCE +navigationalchannel = IfcMarineFacilityTypeEnum.NAVIGATIONALCHANNEL +port = IfcMarineFacilityTypeEnum.PORT +quay = IfcMarineFacilityTypeEnum.QUAY +revetment = IfcMarineFacilityTypeEnum.REVETMENT +shiplift = IfcMarineFacilityTypeEnum.SHIPLIFT +shiplock = IfcMarineFacilityTypeEnum.SHIPLOCK +shipyard = IfcMarineFacilityTypeEnum.SHIPYARD +slipway = IfcMarineFacilityTypeEnum.SLIPWAY +waterway = IfcMarineFacilityTypeEnum.WATERWAY +waterwayshiplift = IfcMarineFacilityTypeEnum.WATERWAYSHIPLIFT +userdefined = IfcMarineFacilityTypeEnum.USERDEFINED +notdefined = IfcMarineFacilityTypeEnum.NOTDEFINED IfcMarinePartTypeEnum = enum_namespace() -abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) -vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abovewaterline = IfcMarinePartTypeEnum.ABOVEWATERLINE +anchorage = IfcMarinePartTypeEnum.ANCHORAGE +approachchannel = IfcMarinePartTypeEnum.APPROACHCHANNEL +belowwaterline = IfcMarinePartTypeEnum.BELOWWATERLINE +berthingstructure = IfcMarinePartTypeEnum.BERTHINGSTRUCTURE +chamber = IfcMarinePartTypeEnum.CHAMBER +cill_level = IfcMarinePartTypeEnum.CILL_LEVEL +copelevel = IfcMarinePartTypeEnum.COPELEVEL +core = IfcMarinePartTypeEnum.CORE +crest = IfcMarinePartTypeEnum.CREST +gatehead = IfcMarinePartTypeEnum.GATEHEAD +gudingstructure = IfcMarinePartTypeEnum.GUDINGSTRUCTURE +highwaterline = IfcMarinePartTypeEnum.HIGHWATERLINE +landfield = IfcMarinePartTypeEnum.LANDFIELD +leewardside = IfcMarinePartTypeEnum.LEEWARDSIDE +lowwaterline = IfcMarinePartTypeEnum.LOWWATERLINE +manufacturing = IfcMarinePartTypeEnum.MANUFACTURING +navigationalarea = IfcMarinePartTypeEnum.NAVIGATIONALAREA +protection = IfcMarinePartTypeEnum.PROTECTION +shiptransfer = IfcMarinePartTypeEnum.SHIPTRANSFER +storagearea = IfcMarinePartTypeEnum.STORAGEAREA +vehicleservicing = IfcMarinePartTypeEnum.VEHICLESERVICING +waterfield = IfcMarinePartTypeEnum.WATERFIELD +weatherside = IfcMarinePartTypeEnum.WEATHERSIDE +userdefined = IfcMarinePartTypeEnum.USERDEFINED +notdefined = IfcMarinePartTypeEnum.NOTDEFINED IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +chain = IfcMechanicalFastenerTypeEnum.CHAIN +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +railfastening = IfcMechanicalFastenerTypeEnum.RAILFASTENING +railjoint = IfcMechanicalFastenerTypeEnum.RAILJOINT +rivet = IfcMechanicalFastenerTypeEnum.RIVET +rope = IfcMechanicalFastenerTypeEnum.ROPE +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +stringer = IfcMemberTypeEnum.STRINGER +structuralcable = IfcMemberTypeEnum.STRUCTURALCABLE +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +suspender = IfcMemberTypeEnum.SUSPENDER +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +tiebar = IfcMemberTypeEnum.TIEBAR +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) -masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) -mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) -packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) -remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) -remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) -subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) -userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +accesspoint = IfcMobileTelecommunicationsApplianceTypeEnum.ACCESSPOINT +basebandunit = IfcMobileTelecommunicationsApplianceTypeEnum.BASEBANDUNIT +basetransceiverstation = IfcMobileTelecommunicationsApplianceTypeEnum.BASETRANSCEIVERSTATION +e_utran_node_b = IfcMobileTelecommunicationsApplianceTypeEnum.E_UTRAN_NODE_B +gateway_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.GATEWAY_GPRS_SUPPORT_NODE +masterunit = IfcMobileTelecommunicationsApplianceTypeEnum.MASTERUNIT +mobileswitchingcenter = IfcMobileTelecommunicationsApplianceTypeEnum.MOBILESWITCHINGCENTER +mscserver = IfcMobileTelecommunicationsApplianceTypeEnum.MSCSERVER +packetcontrolunit = IfcMobileTelecommunicationsApplianceTypeEnum.PACKETCONTROLUNIT +remoteradiounit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTERADIOUNIT +remoteunit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTEUNIT +service_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.SERVICE_GPRS_SUPPORT_NODE +subscriberserver = IfcMobileTelecommunicationsApplianceTypeEnum.SUBSCRIBERSERVER +userdefined = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcMobileTelecommunicationsApplianceTypeEnum.NOTDEFINED IfcMooringDeviceTypeEnum = enum_namespace() -bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bollard = IfcMooringDeviceTypeEnum.BOLLARD +linetensioner = IfcMooringDeviceTypeEnum.LINETENSIONER +magneticdevice = IfcMooringDeviceTypeEnum.MAGNETICDEVICE +mooringhooks = IfcMooringDeviceTypeEnum.MOORINGHOOKS +vacuumdevice = IfcMooringDeviceTypeEnum.VACUUMDEVICE +userdefined = IfcMooringDeviceTypeEnum.USERDEFINED +notdefined = IfcMooringDeviceTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNavigationElementTypeEnum = enum_namespace() -beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) -buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) -userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +beacon = IfcNavigationElementTypeEnum.BEACON +buoy = IfcNavigationElementTypeEnum.BUOY +userdefined = IfcNavigationElementTypeEnum.USERDEFINED +notdefined = IfcNavigationElementTypeEnum.NOTDEFINED IfcObjectTypeEnum = enum_namespace() -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +actor = IfcObjectTypeEnum.ACTOR +control = IfcObjectTypeEnum.CONTROL +group = IfcObjectTypeEnum.GROUP +process = IfcObjectTypeEnum.PROCESS +product = IfcObjectTypeEnum.PRODUCT +project = IfcObjectTypeEnum.PROJECT +resource = IfcObjectTypeEnum.RESOURCE +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPavementTypeEnum = enum_namespace() -flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) -rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) -userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexible = IfcPavementTypeEnum.FLEXIBLE +rigid = IfcPavementTypeEnum.RIGID +userdefined = IfcPavementTypeEnum.USERDEFINED +notdefined = IfcPavementTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +cohesion = IfcPileTypeEnum.COHESION +driven = IfcPileTypeEnum.DRIVEN +friction = IfcPileTypeEnum.FRICTION +jetgrouting = IfcPileTypeEnum.JETGROUTING +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +base_plate = IfcPlateTypeEnum.BASE_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +sheet = IfcPlateTypeEnum.SHEET +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = IfcProfileTypeEnum.AREA +curve = IfcProfileTypeEnum.CURVE IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_materialdriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -pset_profiledriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE) -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_materialdriven = IfcPropertySetTemplateTypeEnum.PSET_MATERIALDRIVEN +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +pset_profiledriven = IfcPropertySetTemplateTypeEnum.PSET_PROFILEDRIVEN +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +anti_arcing_device = IfcProtectiveDeviceTypeEnum.ANTI_ARCING_DEVICE +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +sparkgap = IfcProtectiveDeviceTypeEnum.SPARKGAP +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +voltagelimiter = IfcProtectiveDeviceTypeEnum.VOLTAGELIMITER +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailTypeEnum = enum_namespace() -blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +blade = IfcRailTypeEnum.BLADE +checkrail = IfcRailTypeEnum.CHECKRAIL +guardrail = IfcRailTypeEnum.GUARDRAIL +rackrail = IfcRailTypeEnum.RACKRAIL +rail = IfcRailTypeEnum.RAIL +stockrail = IfcRailTypeEnum.STOCKRAIL +userdefined = IfcRailTypeEnum.USERDEFINED +notdefined = IfcRailTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +balustrade = IfcRailingTypeEnum.BALUSTRADE +fence = IfcRailingTypeEnum.FENCE +guardrail = IfcRailingTypeEnum.GUARDRAIL +handrail = IfcRailingTypeEnum.HANDRAIL +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRailwayPartTypeEnum = enum_namespace() -dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -plaintracksuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +dilatationsuperstructure = IfcRailwayPartTypeEnum.DILATATIONSUPERSTRUCTURE +linesidestructure = IfcRailwayPartTypeEnum.LINESIDESTRUCTURE +linesidestructurepart = IfcRailwayPartTypeEnum.LINESIDESTRUCTUREPART +plaintracksuperstructure = IfcRailwayPartTypeEnum.PLAINTRACKSUPERSTRUCTURE +superstructure = IfcRailwayPartTypeEnum.SUPERSTRUCTURE +trackstructure = IfcRailwayPartTypeEnum.TRACKSTRUCTURE +trackstructurepart = IfcRailwayPartTypeEnum.TRACKSTRUCTUREPART +turnoutsuperstructure = IfcRailwayPartTypeEnum.TURNOUTSUPERSTRUCTURE +userdefined = IfcRailwayPartTypeEnum.USERDEFINED +notdefined = IfcRailwayPartTypeEnum.NOTDEFINED IfcRailwayTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRailwayTypeEnum.USERDEFINED +notdefined = IfcRailwayTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +spiral = IfcRampFlightTypeEnum.SPIRAL +straight = IfcRampFlightTypeEnum.STRAIGHT +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +daily = IfcRecurrenceTypeEnum.DAILY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +weekly = IfcRecurrenceTypeEnum.WEEKLY +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) -intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) -referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = IfcReferentTypeEnum.BOUNDARY +intersection = IfcReferentTypeEnum.INTERSECTION +kilopoint = IfcReferentTypeEnum.KILOPOINT +landmark = IfcReferentTypeEnum.LANDMARK +milepoint = IfcReferentTypeEnum.MILEPOINT +position = IfcReferentTypeEnum.POSITION +referencemarker = IfcReferentTypeEnum.REFERENCEMARKER +station = IfcReferentTypeEnum.STATION +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -physical = express_getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +physical = IfcReflectanceMethodEnum.PHYSICAL +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcedSoilTypeEnum = enum_namespace() -dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamicallycompacted = IfcReinforcedSoilTypeEnum.DYNAMICALLYCOMPACTED +grouted = IfcReinforcedSoilTypeEnum.GROUTED +replaced = IfcReinforcedSoilTypeEnum.REPLACED +rollercompacted = IfcReinforcedSoilTypeEnum.ROLLERCOMPACTED +surchargepreloaded = IfcReinforcedSoilTypeEnum.SURCHARGEPRELOADED +verticallydrained = IfcReinforcedSoilTypeEnum.VERTICALLYDRAINED +userdefined = IfcReinforcedSoilTypeEnum.USERDEFINED +notdefined = IfcReinforcedSoilTypeEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +edge = IfcReinforcingBarRoleEnum.EDGE +ligature = IfcReinforcingBarRoleEnum.LIGATURE +main = IfcReinforcingBarRoleEnum.MAIN +punching = IfcReinforcingBarRoleEnum.PUNCHING +ring = IfcReinforcingBarRoleEnum.RING +shear = IfcReinforcingBarRoleEnum.SHEAR +stud = IfcReinforcingBarRoleEnum.STUD +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +stud = IfcReinforcingBarTypeEnum.STUD +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoadPartTypeEnum = enum_namespace() -bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +bicyclecrossing = IfcRoadPartTypeEnum.BICYCLECROSSING +bus_stop = IfcRoadPartTypeEnum.BUS_STOP +carriageway = IfcRoadPartTypeEnum.CARRIAGEWAY +centralisland = IfcRoadPartTypeEnum.CENTRALISLAND +centralreserve = IfcRoadPartTypeEnum.CENTRALRESERVE +hardshoulder = IfcRoadPartTypeEnum.HARDSHOULDER +intersection = IfcRoadPartTypeEnum.INTERSECTION +layby = IfcRoadPartTypeEnum.LAYBY +parkingbay = IfcRoadPartTypeEnum.PARKINGBAY +passingbay = IfcRoadPartTypeEnum.PASSINGBAY +pedestrian_crossing = IfcRoadPartTypeEnum.PEDESTRIAN_CROSSING +railwaycrossing = IfcRoadPartTypeEnum.RAILWAYCROSSING +refugeisland = IfcRoadPartTypeEnum.REFUGEISLAND +roadsegment = IfcRoadPartTypeEnum.ROADSEGMENT +roadside = IfcRoadPartTypeEnum.ROADSIDE +roadsidepart = IfcRoadPartTypeEnum.ROADSIDEPART +roadwayplateau = IfcRoadPartTypeEnum.ROADWAYPLATEAU +roundabout = IfcRoadPartTypeEnum.ROUNDABOUT +shoulder = IfcRoadPartTypeEnum.SHOULDER +sidewalk = IfcRoadPartTypeEnum.SIDEWALK +softshoulder = IfcRoadPartTypeEnum.SOFTSHOULDER +tollplaza = IfcRoadPartTypeEnum.TOLLPLAZA +trafficisland = IfcRoadPartTypeEnum.TRAFFICISLAND +trafficlane = IfcRoadPartTypeEnum.TRAFFICLANE +userdefined = IfcRoadPartTypeEnum.USERDEFINED +notdefined = IfcRoadPartTypeEnum.NOTDEFINED IfcRoadTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRoadTypeEnum.USERDEFINED +notdefined = IfcRoadTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +architect = IfcRoleEnum.ARCHITECT +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +buildingowner = IfcRoleEnum.BUILDINGOWNER +civilengineer = IfcRoleEnum.CIVILENGINEER +client = IfcRoleEnum.CLIENT +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +consultant = IfcRoleEnum.CONSULTANT +contractor = IfcRoleEnum.CONTRACTOR +costengineer = IfcRoleEnum.COSTENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +engineer = IfcRoleEnum.ENGINEER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +manufacturer = IfcRoleEnum.MANUFACTURER +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +owner = IfcRoleEnum.OWNER +projectmanager = IfcRoleEnum.PROJECTMANAGER +reseller = IfcRoleEnum.RESELLER +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +subcontractor = IfcRoleEnum.SUBCONTRACTOR +supplier = IfcRoleEnum.SUPPLIER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +atto = IfcSIPrefix.ATTO +centi = IfcSIPrefix.CENTI +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +exa = IfcSIPrefix.EXA +femto = IfcSIPrefix.FEMTO +giga = IfcSIPrefix.GIGA +hecto = IfcSIPrefix.HECTO +kilo = IfcSIPrefix.KILO +mega = IfcSIPrefix.MEGA +micro = IfcSIPrefix.MICRO +milli = IfcSIPrefix.MILLI +nano = IfcSIPrefix.NANO +peta = IfcSIPrefix.PETA +pico = IfcSIPrefix.PICO +tera = IfcSIPrefix.TERA IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = IfcSectionTypeEnum.TAPERED +uniform = IfcSectionTypeEnum.UNIFORM IfcSensorTypeEnum = enum_namespace() -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +cosensor = IfcSensorTypeEnum.COSENSOR +earthquakesensor = IfcSensorTypeEnum.EARTHQUAKESENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +foreignobjectdetectionsensor = IfcSensorTypeEnum.FOREIGNOBJECTDETECTIONSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +obstaclesensor = IfcSensorTypeEnum.OBSTACLESENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +rainsensor = IfcSensorTypeEnum.RAINSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +snowdepthsensor = IfcSensorTypeEnum.SNOWDEPTHSENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +trainsensor = IfcSensorTypeEnum.TRAINSENSOR +turnoutclosuresensor = IfcSensorTypeEnum.TURNOUTCLOSURESENSOR +wheelsensor = IfcSensorTypeEnum.WHEELSENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +finish_finish = IfcSequenceEnum.FINISH_FINISH +finish_start = IfcSequenceEnum.FINISH_START +start_finish = IfcSequenceEnum.START_FINISH +start_start = IfcSequenceEnum.START_START +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +awning = IfcShadingDeviceTypeEnum.AWNING +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSignTypeEnum = enum_namespace() -marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = IfcSignTypeEnum.MARKER +mirror = IfcSignTypeEnum.MIRROR +pictoral = IfcSignTypeEnum.PICTORAL +userdefined = IfcSignTypeEnum.USERDEFINED +notdefined = IfcSignTypeEnum.NOTDEFINED IfcSignalTypeEnum = enum_namespace() -audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +audio = IfcSignalTypeEnum.AUDIO +mixed = IfcSignalTypeEnum.MIXED +visual = IfcSignalTypeEnum.VISUAL +userdefined = IfcSignalTypeEnum.USERDEFINED +notdefined = IfcSignalTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_number = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_number = IfcSimplePropertyTemplateTypeEnum.Q_NUMBER +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT IfcSlabTypeEnum = enum_namespace() -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +baseslab = IfcSlabTypeEnum.BASESLAB +floor = IfcSlabTypeEnum.FLOOR +landing = IfcSlabTypeEnum.LANDING +paving = IfcSlabTypeEnum.PAVING +roof = IfcSlabTypeEnum.ROOF +sidewalk = IfcSlabTypeEnum.SIDEWALK +trackslab = IfcSlabTypeEnum.TRACKSLAB +wearing = IfcSlabTypeEnum.WEARING +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +berth = IfcSpaceTypeEnum.BERTH +external = IfcSpaceTypeEnum.EXTERNAL +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +parking = IfcSpaceTypeEnum.PARKING +space = IfcSpaceTypeEnum.SPACE +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +interference = IfcSpatialZoneTypeEnum.INTERFERENCE +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +reservation = IfcSpatialZoneTypeEnum.RESERVATION +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +spiral = IfcStairFlightTypeEnum.SPIRAL +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +ladder = IfcStairTypeEnum.LADDER +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +locked = IfcStateEnum.LOCKED +readonly = IfcStateEnum.READONLY +readonlylocked = IfcStateEnum.READONLYLOCKED +readwrite = IfcStateEnum.READWRITE +readwritelocked = IfcStateEnum.READWRITELOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcStructuralCurveMemberTypeEnum.CABLE +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +const = IfcStructuralSurfaceActivityTypeEnum.CONST +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +defect = IfcSurfaceFeatureTypeEnum.DEFECT +hatchmarking = IfcSurfaceFeatureTypeEnum.HATCHMARKING +linemarking = IfcSurfaceFeatureTypeEnum.LINEMARKING +mark = IfcSurfaceFeatureTypeEnum.MARK +nonskidsurfacing = IfcSurfaceFeatureTypeEnum.NONSKIDSURFACING +pavementsurfacemarking = IfcSurfaceFeatureTypeEnum.PAVEMENTSURFACEMARKING +rumblestrip = IfcSurfaceFeatureTypeEnum.RUMBLESTRIP +symbolmarking = IfcSurfaceFeatureTypeEnum.SYMBOLMARKING +tag = IfcSurfaceFeatureTypeEnum.TAG +transverserumblestrip = IfcSurfaceFeatureTypeEnum.TRANSVERSERUMBLESTRIP +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +both = IfcSurfaceSide.BOTH +negative = IfcSurfaceSide.NEGATIVE +positive = IfcSurfaceSide.POSITIVE IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +relay = IfcSwitchingDeviceTypeEnum.RELAY +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +start_and_stop_equipment = IfcSwitchingDeviceTypeEnum.START_AND_STOP_EQUIPMENT +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +subrack = IfcSystemFurnitureElementTypeEnum.SUBRACK +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +oilretentiontray = IfcTankTypeEnum.OILRETENTIONTRAY +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -adjustment = express_getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE) -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -calibration = express_getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -emergency = express_getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE) -inspection = express_getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -safety = express_getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE) -shutdown = express_getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE) -testing = express_getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE) -troubleshooting = express_getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +adjustment = IfcTaskTypeEnum.ADJUSTMENT +attendance = IfcTaskTypeEnum.ATTENDANCE +calibration = IfcTaskTypeEnum.CALIBRATION +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +emergency = IfcTaskTypeEnum.EMERGENCY +inspection = IfcTaskTypeEnum.INSPECTION +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +safety = IfcTaskTypeEnum.SAFETY +shutdown = IfcTaskTypeEnum.SHUTDOWN +startup = IfcTaskTypeEnum.STARTUP +testing = IfcTaskTypeEnum.TESTING +troubleshooting = IfcTaskTypeEnum.TROUBLESHOOTING +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonConduitTypeEnum.COUPLER +diabolo = IfcTendonConduitTypeEnum.DIABOLO +duct = IfcTendonConduitTypeEnum.DUCT +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = IfcTextPath.DOWN +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTrackElementTypeEnum = enum_namespace() -blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blockingdevice = IfcTrackElementTypeEnum.BLOCKINGDEVICE +derailer = IfcTrackElementTypeEnum.DERAILER +frog = IfcTrackElementTypeEnum.FROG +half_set_of_blades = IfcTrackElementTypeEnum.HALF_SET_OF_BLADES +sleeper = IfcTrackElementTypeEnum.SLEEPER +speedregulator = IfcTrackElementTypeEnum.SPEEDREGULATOR +trackendofalignment = IfcTrackElementTypeEnum.TRACKENDOFALIGNMENT +vehiclestop = IfcTrackElementTypeEnum.VEHICLESTOP +userdefined = IfcTrackElementTypeEnum.USERDEFINED +notdefined = IfcTrackElementTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +chopper = IfcTransformerTypeEnum.CHOPPER +combined = IfcTransformerTypeEnum.COMBINED +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE +discontinuous = IfcTransitionCode.DISCONTINUOUS IfcTransportElementTypeEnum = enum_namespace() -craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -haulinggear = express_getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +craneway = IfcTransportElementTypeEnum.CRANEWAY +elevator = IfcTransportElementTypeEnum.ELEVATOR +escalator = IfcTransportElementTypeEnum.ESCALATOR +haulinggear = IfcTransportElementTypeEnum.HAULINGGEAR +liftinggear = IfcTransportElementTypeEnum.LIFTINGGEAR +movingwalkway = IfcTransportElementTypeEnum.MOVINGWALKWAY +userdefined = IfcTransportElementTypeEnum.USERDEFINED +notdefined = IfcTransportElementTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) -combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +basestationcontroller = IfcUnitaryControlElementTypeEnum.BASESTATIONCONTROLLER +combined = IfcUnitaryControlElementTypeEnum.COMBINED +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVehicleTypeEnum = enum_namespace() -cargo = express_getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE) -rollingstock = express_getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehicle = express_getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE) -vehicleair = express_getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE) -vehiclemarine = express_getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -vehicletracked = express_getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -vehiclewheeled = express_getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -userdefined = express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVehicleTypeEnum, 'NOTDEFINED', INDETERMINATE) +cargo = IfcVehicleTypeEnum.CARGO +rollingstock = IfcVehicleTypeEnum.ROLLINGSTOCK +vehicle = IfcVehicleTypeEnum.VEHICLE +vehicleair = IfcVehicleTypeEnum.VEHICLEAIR +vehiclemarine = IfcVehicleTypeEnum.VEHICLEMARINE +vehicletracked = IfcVehicleTypeEnum.VEHICLETRACKED +vehiclewheeled = IfcVehicleTypeEnum.VEHICLEWHEELED +userdefined = IfcVehicleTypeEnum.USERDEFINED +notdefined = IfcVehicleTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +rubber = IfcVibrationDamperTypeEnum.RUBBER +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +viscous = IfcVibrationDamperTypeEnum.VISCOUS +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +base = IfcVibrationIsolatorTypeEnum.BASE +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVirtualElementTypeEnum = enum_namespace() -boundary = express_getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE) -clearance = express_getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE) -provisionforvoid = express_getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -userdefined = express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVirtualElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = IfcVirtualElementTypeEnum.BOUNDARY +clearance = IfcVirtualElementTypeEnum.CLEARANCE +provisionforvoid = IfcVirtualElementTypeEnum.PROVISIONFORVOID +userdefined = IfcVirtualElementTypeEnum.USERDEFINED +notdefined = IfcVirtualElementTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +edge = IfcVoidingFeatureTypeEnum.EDGE +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +notch = IfcVoidingFeatureTypeEnum.NOTCH +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +polygonal = IfcWallTypeEnum.POLYGONAL +retainingwall = IfcWallTypeEnum.RETAININGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +wavewall = IfcWallTypeEnum.WAVEWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +bottom = IfcWindowPanelPositionEnum.BOTTOM +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +plastic = IfcWindowStyleConstructionEnum.PLASTIC +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +lightdome = IfcWindowTypeEnum.LIGHTDOME +skylight = IfcWindowTypeEnum.SKYLIGHT +window = IfcWindowTypeEnum.WINDOW +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py index 2fcbb1f734..64f436782a 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD1.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,2361 +152,2361 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +brakes = IfcActionSourceTypeEnum.BRAKES +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +creep = IfcActionSourceTypeEnum.CREEP +current = IfcActionSourceTypeEnum.CURRENT +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +erection = IfcActionSourceTypeEnum.ERECTION +fire = IfcActionSourceTypeEnum.FIRE +ice = IfcActionSourceTypeEnum.ICE +impact = IfcActionSourceTypeEnum.IMPACT +impulse = IfcActionSourceTypeEnum.IMPULSE +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +propping = IfcActionSourceTypeEnum.PROPPING +rain = IfcActionSourceTypeEnum.RAIN +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +snow_s = IfcActionSourceTypeEnum.SNOW_S +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +transport = IfcActionSourceTypeEnum.TRANSPORT +wave = IfcActionSourceTypeEnum.WAVE +wind_w = IfcActionSourceTypeEnum.WIND_W +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +home = IfcAddressTypeEnum.HOME +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +railwaycrocodile = IfcAlarmTypeEnum.RAILWAYCROCODILE +railwaydetonator = IfcAlarmTypeEnum.RAILWAYDETONATOR +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentCantSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentCantSegmentTypeEnum.BLOSSCURVE +constantcant = IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT +cosinecurve = IfcAlignmentCantSegmentTypeEnum.COSINECURVE +helmertcurve = IfcAlignmentCantSegmentTypeEnum.HELMERTCURVE +lineartransition = IfcAlignmentCantSegmentTypeEnum.LINEARTRANSITION +sinecurve = IfcAlignmentCantSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentCantSegmentTypeEnum.VIENNESEBEND IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentHorizontalSegmentTypeEnum.BLOSSCURVE +circulararc = IfcAlignmentHorizontalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentHorizontalSegmentTypeEnum.CLOTHOID +cosinecurve = IfcAlignmentHorizontalSegmentTypeEnum.COSINECURVE +cubic = IfcAlignmentHorizontalSegmentTypeEnum.CUBIC +helmertcurve = IfcAlignmentHorizontalSegmentTypeEnum.HELMERTCURVE +line = IfcAlignmentHorizontalSegmentTypeEnum.LINE +sinecurve = IfcAlignmentHorizontalSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentHorizontalSegmentTypeEnum.VIENNESEBEND IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) +circulararc = IfcAlignmentVerticalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentVerticalSegmentTypeEnum.CLOTHOID +constantgradient = IfcAlignmentVerticalSegmentTypeEnum.CONSTANTGRADIENT +parabolicarc = IfcAlignmentVerticalSegmentTypeEnum.PARABOLICARC IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcAnnotationTypeEnum = enum_namespace() -asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +asbuiltarea = IfcAnnotationTypeEnum.ASBUILTAREA +asbuiltline = IfcAnnotationTypeEnum.ASBUILTLINE +asbuiltpoint = IfcAnnotationTypeEnum.ASBUILTPOINT +assumedarea = IfcAnnotationTypeEnum.ASSUMEDAREA +assumedline = IfcAnnotationTypeEnum.ASSUMEDLINE +assumedpoint = IfcAnnotationTypeEnum.ASSUMEDPOINT +non_physical_signal = IfcAnnotationTypeEnum.NON_PHYSICAL_SIGNAL +superelevationevent = IfcAnnotationTypeEnum.SUPERELEVATIONEVENT +widthevent = IfcAnnotationTypeEnum.WIDTHEVENT +userdefined = IfcAnnotationTypeEnum.USERDEFINED +notdefined = IfcAnnotationTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +factory = IfcAssemblyPlaceEnum.FACTORY +site = IfcAssemblyPlaceEnum.SITE +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +communicationterminal = IfcAudioVisualApplianceTypeEnum.COMMUNICATIONTERMINAL +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +recordingequipment = IfcAudioVisualApplianceTypeEnum.RECORDINGEQUIPMENT +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +cornice = IfcBeamTypeEnum.CORNICE +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +edgebeam = IfcBeamTypeEnum.EDGEBEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +hatstone = IfcBeamTypeEnum.HATSTONE +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +joist = IfcBeamTypeEnum.JOIST +lintel = IfcBeamTypeEnum.LINTEL +piercap = IfcBeamTypeEnum.PIERCAP +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +disk = IfcBearingTypeEnum.DISK +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +guide = IfcBearingTypeEnum.GUIDE +pot = IfcBearingTypeEnum.POT +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +spherical = IfcBearingTypeEnum.SPHERICAL +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +equalto = IfcBenchmarkEnum.EQUALTO +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +includedin = IfcBenchmarkEnum.INCLUDEDIN +includes = IfcBenchmarkEnum.INCLUDES +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN +notincludes = IfcBenchmarkEnum.NOTINCLUDES IfcBoilerTypeEnum = enum_namespace() -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +steam = IfcBoilerTypeEnum.STEAM +water = IfcBoilerTypeEnum.WATER +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +difference = IfcBooleanOperator.DIFFERENCE +intersection = IfcBooleanOperator.INTERSECTION +union = IfcBooleanOperator.UNION IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +apron = IfcBuildingElementPartTypeEnum.APRON +armourunit = IfcBuildingElementPartTypeEnum.ARMOURUNIT +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +safetycage = IfcBuildingElementPartTypeEnum.SAFETYCAGE +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBuiltSystemTypeEnum = enum_namespace() -erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -railwayline = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE) -railwaytrack = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE) -reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +erosionprevention = IfcBuiltSystemTypeEnum.EROSIONPREVENTION +fenestration = IfcBuiltSystemTypeEnum.FENESTRATION +foundation = IfcBuiltSystemTypeEnum.FOUNDATION +loadbearing = IfcBuiltSystemTypeEnum.LOADBEARING +mooring = IfcBuiltSystemTypeEnum.MOORING +outershell = IfcBuiltSystemTypeEnum.OUTERSHELL +prestressing = IfcBuiltSystemTypeEnum.PRESTRESSING +railwayline = IfcBuiltSystemTypeEnum.RAILWAYLINE +railwaytrack = IfcBuiltSystemTypeEnum.RAILWAYTRACK +reinforcing = IfcBuiltSystemTypeEnum.REINFORCING +shading = IfcBuiltSystemTypeEnum.SHADING +trackcircuit = IfcBuiltSystemTypeEnum.TRACKCIRCUIT +transport = IfcBuiltSystemTypeEnum.TRANSPORT +userdefined = IfcBuiltSystemTypeEnum.USERDEFINED +notdefined = IfcBuiltSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -junction = express_getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -transition = express_getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +connector = IfcCableCarrierFittingTypeEnum.CONNECTOR +cross = IfcCableCarrierFittingTypeEnum.CROSS +junction = IfcCableCarrierFittingTypeEnum.JUNCTION +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +transition = IfcCableCarrierFittingTypeEnum.TRANSITION +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cablebracket = IfcCableCarrierSegmentTypeEnum.CABLEBRACKET +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +catenarywire = IfcCableCarrierSegmentTypeEnum.CATENARYWIRE +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +dropper = IfcCableCarrierSegmentTypeEnum.DROPPER +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +fanout = IfcCableFittingTypeEnum.FANOUT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) -fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) -opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) -stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) -wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +contactwiresegment = IfcCableSegmentTypeEnum.CONTACTWIRESEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +fibersegment = IfcCableSegmentTypeEnum.FIBERSEGMENT +fibertube = IfcCableSegmentTypeEnum.FIBERTUBE +opticalcablesegment = IfcCableSegmentTypeEnum.OPTICALCABLESEGMENT +stitchwire = IfcCableSegmentTypeEnum.STITCHWIRE +wirepairsegment = IfcCableSegmentTypeEnum.WIREPAIRSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson = IfcCaissonFoundationTypeEnum.CAISSON +well = IfcCaissonFoundationTypeEnum.WELL +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +modified = IfcChangeActionEnum.MODIFIED +nochange = IfcChangeActionEnum.NOCHANGE +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +watercooled = IfcChillerTypeEnum.WATERCOOLED +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +pilaster = IfcColumnTypeEnum.PILASTER +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) -ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) -linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) -opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) -telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) -transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) -transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) -transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +automaton = IfcCommunicationsApplianceTypeEnum.AUTOMATON +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +intelligentperipheral = IfcCommunicationsApplianceTypeEnum.INTELLIGENTPERIPHERAL +ipnetworkequipment = IfcCommunicationsApplianceTypeEnum.IPNETWORKEQUIPMENT +linesideelectronicunit = IfcCommunicationsApplianceTypeEnum.LINESIDEELECTRONICUNIT +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +opticallineterminal = IfcCommunicationsApplianceTypeEnum.OPTICALLINETERMINAL +opticalnetworkunit = IfcCommunicationsApplianceTypeEnum.OPTICALNETWORKUNIT +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +radioblockcenter = IfcCommunicationsApplianceTypeEnum.RADIOBLOCKCENTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +telecommand = IfcCommunicationsApplianceTypeEnum.TELECOMMAND +telephonyexchange = IfcCommunicationsApplianceTypeEnum.TELEPHONYEXCHANGE +transitioncomponent = IfcCommunicationsApplianceTypeEnum.TRANSITIONCOMPONENT +transponder = IfcCommunicationsApplianceTypeEnum.TRANSPONDER +transportequipment = IfcCommunicationsApplianceTypeEnum.TRANSPORTEQUIPMENT +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +booster = IfcCompressorTypeEnum.BOOSTER +dynamic = IfcCompressorTypeEnum.DYNAMIC +hermetic = IfcCompressorTypeEnum.HERMETIC +opentype = IfcCompressorTypeEnum.OPENTYPE +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotary = IfcCompressorTypeEnum.ROTARY +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +scroll = IfcCompressorTypeEnum.SCROLL +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +twinscrew = IfcCompressorTypeEnum.TWINSCREW +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atend = IfcConnectionTypeEnum.ATEND +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +advisory = IfcConstraintEnum.ADVISORY +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +multiposition = IfcControllerTypeEnum.MULTIPOSITION +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcConveyorSegmentTypeEnum = enum_namespace() -beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltconveyor = IfcConveyorSegmentTypeEnum.BELTCONVEYOR +bucketconveyor = IfcConveyorSegmentTypeEnum.BUCKETCONVEYOR +chuteconveyor = IfcConveyorSegmentTypeEnum.CHUTECONVEYOR +screwconveyor = IfcConveyorSegmentTypeEnum.SCREWCONVEYOR +userdefined = IfcConveyorSegmentTypeEnum.USERDEFINED +notdefined = IfcConveyorSegmentTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +tender = IfcCostScheduleTypeEnum.TENDER +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCourseTypeEnum = enum_namespace() -armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = IfcCourseTypeEnum.ARMOUR +ballastbed = IfcCourseTypeEnum.BALLASTBED +core = IfcCourseTypeEnum.CORE +filter = IfcCourseTypeEnum.FILTER +pavement = IfcCourseTypeEnum.PAVEMENT +protection = IfcCourseTypeEnum.PROTECTION +userdefined = IfcCourseTypeEnum.USERDEFINED +notdefined = IfcCourseTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -topping = express_getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +cladding = IfcCoveringTypeEnum.CLADDING +coping = IfcCoveringTypeEnum.COPING +flooring = IfcCoveringTypeEnum.FLOORING +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +molding = IfcCoveringTypeEnum.MOLDING +roofing = IfcCoveringTypeEnum.ROOFING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +sleeving = IfcCoveringTypeEnum.SLEEVING +topping = IfcCoveringTypeEnum.TOPPING +wrapping = IfcCoveringTypeEnum.WRAPPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = IfcDirectionSenseEnum.NEGATIVE +positive = IfcDirectionSenseEnum.POSITIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -filler = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE) -flashing = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE) -insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) -point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) -railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +birdprotection = IfcDiscreteAccessoryTypeEnum.BIRDPROTECTION +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +cablearranger = IfcDiscreteAccessoryTypeEnum.CABLEARRANGER +elastic_cushion = IfcDiscreteAccessoryTypeEnum.ELASTIC_CUSHION +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +filler = IfcDiscreteAccessoryTypeEnum.FILLER +flashing = IfcDiscreteAccessoryTypeEnum.FLASHING +insulator = IfcDiscreteAccessoryTypeEnum.INSULATOR +lock = IfcDiscreteAccessoryTypeEnum.LOCK +panel_strengthening = IfcDiscreteAccessoryTypeEnum.PANEL_STRENGTHENING +pointmachinemountingdevice = IfcDiscreteAccessoryTypeEnum.POINTMACHINEMOUNTINGDEVICE +point_machine_locking_device = IfcDiscreteAccessoryTypeEnum.POINT_MACHINE_LOCKING_DEVICE +railbrace = IfcDiscreteAccessoryTypeEnum.RAILBRACE +railpad = IfcDiscreteAccessoryTypeEnum.RAILPAD +rail_lubrication = IfcDiscreteAccessoryTypeEnum.RAIL_LUBRICATION +rail_mechanical_equipment = IfcDiscreteAccessoryTypeEnum.RAIL_MECHANICAL_EQUIPMENT +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +slidingchair = IfcDiscreteAccessoryTypeEnum.SLIDINGCHAIR +soundabsorption = IfcDiscreteAccessoryTypeEnum.SOUNDABSORPTION +tensioningequipment = IfcDiscreteAccessoryTypeEnum.TENSIONINGEQUIPMENT +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) -distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcDistributionBoardTypeEnum.CONSUMERUNIT +dispatchingboard = IfcDistributionBoardTypeEnum.DISPATCHINGBOARD +distributionboard = IfcDistributionBoardTypeEnum.DISTRIBUTIONBOARD +distributionframe = IfcDistributionBoardTypeEnum.DISTRIBUTIONFRAME +motorcontrolcentre = IfcDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcDistributionBoardTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +wireless = IfcDistributionPortTypeEnum.WIRELESS +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) -monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) -overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +catenary_system = IfcDistributionSystemEnum.CATENARY_SYSTEM +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fixedtransmissionnetwork = IfcDistributionSystemEnum.FIXEDTRANSMISSIONNETWORK +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +mobilenetwork = IfcDistributionSystemEnum.MOBILENETWORK +monitoringsystem = IfcDistributionSystemEnum.MONITORINGSYSTEM +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +operationaltelephonysystem = IfcDistributionSystemEnum.OPERATIONALTELEPHONYSYSTEM +overhead_contactline_system = IfcDistributionSystemEnum.OVERHEAD_CONTACTLINE_SYSTEM +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +return_circuit = IfcDistributionSystemEnum.RETURN_CIRCUIT +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +final = IfcDocumentStatusEnum.FINAL +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +sliding = IfcDoorPanelOperationEnum.SLIDING +swinging = IfcDoorPanelOperationEnum.SWINGING +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +boom_barrier = IfcDoorTypeEnum.BOOM_BARRIER +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +turnstile = IfcDoorTypeEnum.TURNSTILE +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -double_door_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_LIFTING_VERTICAL', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) -lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) -lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) -revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_door_double_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +double_door_folding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_FOLDING +double_door_lifting_vertical = IfcDoorTypeOperationEnum.DOUBLE_DOOR_LIFTING_VERTICAL +double_door_single_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_door_sliding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SLIDING +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +lifting_horizontal = IfcDoorTypeOperationEnum.LIFTING_HORIZONTAL +lifting_vertical_left = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_LEFT +lifting_vertical_right = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_RIGHT +revolving = IfcDoorTypeOperationEnum.REVOLVING +revolving_vertical = IfcDoorTypeOperationEnum.REVOLVING_VERTICAL +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcEarthworksCutTypeEnum = enum_namespace() -base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +base_excavation = IfcEarthworksCutTypeEnum.BASE_EXCAVATION +cut = IfcEarthworksCutTypeEnum.CUT +dredging = IfcEarthworksCutTypeEnum.DREDGING +excavation = IfcEarthworksCutTypeEnum.EXCAVATION +overexcavation = IfcEarthworksCutTypeEnum.OVEREXCAVATION +pavementmilling = IfcEarthworksCutTypeEnum.PAVEMENTMILLING +stepexcavation = IfcEarthworksCutTypeEnum.STEPEXCAVATION +topsoilremoval = IfcEarthworksCutTypeEnum.TOPSOILREMOVAL +trench = IfcEarthworksCutTypeEnum.TRENCH +userdefined = IfcEarthworksCutTypeEnum.USERDEFINED +notdefined = IfcEarthworksCutTypeEnum.NOTDEFINED IfcEarthworksFillTypeEnum = enum_namespace() -backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = IfcEarthworksFillTypeEnum.BACKFILL +counterweight = IfcEarthworksFillTypeEnum.COUNTERWEIGHT +embankment = IfcEarthworksFillTypeEnum.EMBANKMENT +slopefill = IfcEarthworksFillTypeEnum.SLOPEFILL +subgrade = IfcEarthworksFillTypeEnum.SUBGRADE +subgradebed = IfcEarthworksFillTypeEnum.SUBGRADEBED +transitionsection = IfcEarthworksFillTypeEnum.TRANSITIONSECTION +userdefined = IfcEarthworksFillTypeEnum.USERDEFINED +notdefined = IfcEarthworksFillTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitor = IfcElectricFlowStorageDeviceTypeEnum.CAPACITOR +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +compensator = IfcElectricFlowStorageDeviceTypeEnum.COMPENSATOR +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductor = IfcElectricFlowStorageDeviceTypeEnum.INDUCTOR +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +recharger = IfcElectricFlowStorageDeviceTypeEnum.RECHARGER +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = IfcElectricFlowTreatmentDeviceTypeEnum.ELECTRONICFILTER +userdefined = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowTreatmentDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +relay = IfcElectricTimeControlTypeEnum.RELAY +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +dilatationpanel = IfcElementAssemblyTypeEnum.DILATATIONPANEL +entranceworks = IfcElementAssemblyTypeEnum.ENTRANCEWORKS +girder = IfcElementAssemblyTypeEnum.GIRDER +grid = IfcElementAssemblyTypeEnum.GRID +mast = IfcElementAssemblyTypeEnum.MAST +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +rail_mechanical_equipment_assembly = IfcElementAssemblyTypeEnum.RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +shelter = IfcElementAssemblyTypeEnum.SHELTER +signalassembly = IfcElementAssemblyTypeEnum.SIGNALASSEMBLY +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +sumpbuster = IfcElementAssemblyTypeEnum.SUMPBUSTER +supportingassembly = IfcElementAssemblyTypeEnum.SUPPORTINGASSEMBLY +suspensionassembly = IfcElementAssemblyTypeEnum.SUSPENSIONASSEMBLY +trackpanel = IfcElementAssemblyTypeEnum.TRACKPANEL +traction_switching_assembly = IfcElementAssemblyTypeEnum.TRACTION_SWITCHING_ASSEMBLY +traffic_calming_device = IfcElementAssemblyTypeEnum.TRAFFIC_CALMING_DEVICE +truss = IfcElementAssemblyTypeEnum.TRUSS +turnoutpanel = IfcElementAssemblyTypeEnum.TURNOUTPANEL +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +startevent = IfcEventTypeEnum.STARTEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFacilityPartCommonTypeEnum = enum_namespace() -aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +aboveground = IfcFacilityPartCommonTypeEnum.ABOVEGROUND +belowground = IfcFacilityPartCommonTypeEnum.BELOWGROUND +junction = IfcFacilityPartCommonTypeEnum.JUNCTION +levelcrossing = IfcFacilityPartCommonTypeEnum.LEVELCROSSING +segment = IfcFacilityPartCommonTypeEnum.SEGMENT +substructure = IfcFacilityPartCommonTypeEnum.SUBSTRUCTURE +superstructure = IfcFacilityPartCommonTypeEnum.SUPERSTRUCTURE +terminal = IfcFacilityPartCommonTypeEnum.TERMINAL +userdefined = IfcFacilityPartCommonTypeEnum.USERDEFINED +notdefined = IfcFacilityPartCommonTypeEnum.NOTDEFINED IfcFacilityUsageEnum = enum_namespace() -lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = IfcFacilityUsageEnum.LATERAL +longitudinal = IfcFacilityUsageEnum.LONGITUDINAL +region = IfcFacilityUsageEnum.REGION +vertical = IfcFacilityUsageEnum.VERTICAL +userdefined = IfcFacilityUsageEnum.USERDEFINED +notdefined = IfcFacilityUsageEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +firemonitor = IfcFireSuppressionTerminalTypeEnum.FIREMONITOR +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +sink = IfcFlowDirectionEnum.SINK +source = IfcFlowDirectionEnum.SOURCE +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +combined = IfcFlowInstrumentTypeEnum.COMBINED +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +voltmeter = IfcFlowInstrumentTypeEnum.VOLTMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +bed = IfcFurnitureTypeEnum.BED +chair = IfcFurnitureTypeEnum.CHAIR +desk = IfcFurnitureTypeEnum.DESK +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +table = IfcFurnitureTypeEnum.TABLE +technicalcabinet = IfcFurnitureTypeEnum.TECHNICALCABINET +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -vegetation = express_getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +terrain = IfcGeographicElementTypeEnum.TERRAIN +vegetation = IfcGeographicElementTypeEnum.VEGETATION +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGeotechnicalStratumTypeEnum = enum_namespace() -solid = express_getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE) -void = express_getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE) -water = express_getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE) -userdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE) +solid = IfcGeotechnicalStratumTypeEnum.SOLID +void = IfcGeotechnicalStratumTypeEnum.VOID +water = IfcGeotechnicalStratumTypeEnum.WATER +userdefined = IfcGeotechnicalStratumTypeEnum.USERDEFINED +notdefined = IfcGeotechnicalStratumTypeEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +irregular = IfcGridTypeEnum.IRREGULAR +radial = IfcGridTypeEnum.RADIAL +rectangular = IfcGridTypeEnum.RECTANGULAR +triangular = IfcGridTypeEnum.TRIANGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +turnoutheating = IfcHeatExchangerTypeEnum.TURNOUTHEATING +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcImpactProtectionDeviceTypeEnum = enum_namespace() -bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bumper = IfcImpactProtectionDeviceTypeEnum.BUMPER +crashcushion = IfcImpactProtectionDeviceTypeEnum.CRASHCUSHION +dampingsystem = IfcImpactProtectionDeviceTypeEnum.DAMPINGSYSTEM +fender = IfcImpactProtectionDeviceTypeEnum.FENDER +userdefined = IfcImpactProtectionDeviceTypeEnum.USERDEFINED +notdefined = IfcImpactProtectionDeviceTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +internal = IfcInternalOrExternalEnum.INTERNAL +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKerbTypeEnum = enum_namespace() -userdefined = express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcKerbTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcKerbTypeEnum.USERDEFINED +notdefined = IfcKerbTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +uniform_knots = IfcKnotType.UNIFORM_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLiquidTerminalTypeEnum = enum_namespace() -hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +hosereel = IfcLiquidTerminalTypeEnum.HOSEREEL +loadingarm = IfcLiquidTerminalTypeEnum.LOADINGARM +userdefined = IfcLiquidTerminalTypeEnum.USERDEFINED +notdefined = IfcLiquidTerminalTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR IfcMarineFacilityTypeEnum = enum_namespace() -barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) -shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +barrierbeach = IfcMarineFacilityTypeEnum.BARRIERBEACH +breakwater = IfcMarineFacilityTypeEnum.BREAKWATER +canal = IfcMarineFacilityTypeEnum.CANAL +drydock = IfcMarineFacilityTypeEnum.DRYDOCK +floatingdock = IfcMarineFacilityTypeEnum.FLOATINGDOCK +hydrolift = IfcMarineFacilityTypeEnum.HYDROLIFT +jetty = IfcMarineFacilityTypeEnum.JETTY +launchrecovery = IfcMarineFacilityTypeEnum.LAUNCHRECOVERY +marinedefence = IfcMarineFacilityTypeEnum.MARINEDEFENCE +navigationalchannel = IfcMarineFacilityTypeEnum.NAVIGATIONALCHANNEL +port = IfcMarineFacilityTypeEnum.PORT +quay = IfcMarineFacilityTypeEnum.QUAY +revetment = IfcMarineFacilityTypeEnum.REVETMENT +shiplift = IfcMarineFacilityTypeEnum.SHIPLIFT +shiplock = IfcMarineFacilityTypeEnum.SHIPLOCK +shipyard = IfcMarineFacilityTypeEnum.SHIPYARD +slipway = IfcMarineFacilityTypeEnum.SLIPWAY +waterway = IfcMarineFacilityTypeEnum.WATERWAY +waterwayshiplift = IfcMarineFacilityTypeEnum.WATERWAYSHIPLIFT +userdefined = IfcMarineFacilityTypeEnum.USERDEFINED +notdefined = IfcMarineFacilityTypeEnum.NOTDEFINED IfcMarinePartTypeEnum = enum_namespace() -abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) -vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abovewaterline = IfcMarinePartTypeEnum.ABOVEWATERLINE +anchorage = IfcMarinePartTypeEnum.ANCHORAGE +approachchannel = IfcMarinePartTypeEnum.APPROACHCHANNEL +belowwaterline = IfcMarinePartTypeEnum.BELOWWATERLINE +berthingstructure = IfcMarinePartTypeEnum.BERTHINGSTRUCTURE +chamber = IfcMarinePartTypeEnum.CHAMBER +cill_level = IfcMarinePartTypeEnum.CILL_LEVEL +copelevel = IfcMarinePartTypeEnum.COPELEVEL +core = IfcMarinePartTypeEnum.CORE +crest = IfcMarinePartTypeEnum.CREST +gatehead = IfcMarinePartTypeEnum.GATEHEAD +gudingstructure = IfcMarinePartTypeEnum.GUDINGSTRUCTURE +highwaterline = IfcMarinePartTypeEnum.HIGHWATERLINE +landfield = IfcMarinePartTypeEnum.LANDFIELD +leewardside = IfcMarinePartTypeEnum.LEEWARDSIDE +lowwaterline = IfcMarinePartTypeEnum.LOWWATERLINE +manufacturing = IfcMarinePartTypeEnum.MANUFACTURING +navigationalarea = IfcMarinePartTypeEnum.NAVIGATIONALAREA +protection = IfcMarinePartTypeEnum.PROTECTION +shiptransfer = IfcMarinePartTypeEnum.SHIPTRANSFER +storagearea = IfcMarinePartTypeEnum.STORAGEAREA +vehicleservicing = IfcMarinePartTypeEnum.VEHICLESERVICING +waterfield = IfcMarinePartTypeEnum.WATERFIELD +weatherside = IfcMarinePartTypeEnum.WEATHERSIDE +userdefined = IfcMarinePartTypeEnum.USERDEFINED +notdefined = IfcMarinePartTypeEnum.NOTDEFINED IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +chain = IfcMechanicalFastenerTypeEnum.CHAIN +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +railfastening = IfcMechanicalFastenerTypeEnum.RAILFASTENING +railjoint = IfcMechanicalFastenerTypeEnum.RAILJOINT +rivet = IfcMechanicalFastenerTypeEnum.RIVET +rope = IfcMechanicalFastenerTypeEnum.ROPE +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +stringer = IfcMemberTypeEnum.STRINGER +structuralcable = IfcMemberTypeEnum.STRUCTURALCABLE +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +suspender = IfcMemberTypeEnum.SUSPENDER +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +tiebar = IfcMemberTypeEnum.TIEBAR +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) -masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) -mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) -packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) -remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) -remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) -subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) -userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +accesspoint = IfcMobileTelecommunicationsApplianceTypeEnum.ACCESSPOINT +basebandunit = IfcMobileTelecommunicationsApplianceTypeEnum.BASEBANDUNIT +basetransceiverstation = IfcMobileTelecommunicationsApplianceTypeEnum.BASETRANSCEIVERSTATION +e_utran_node_b = IfcMobileTelecommunicationsApplianceTypeEnum.E_UTRAN_NODE_B +gateway_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.GATEWAY_GPRS_SUPPORT_NODE +masterunit = IfcMobileTelecommunicationsApplianceTypeEnum.MASTERUNIT +mobileswitchingcenter = IfcMobileTelecommunicationsApplianceTypeEnum.MOBILESWITCHINGCENTER +mscserver = IfcMobileTelecommunicationsApplianceTypeEnum.MSCSERVER +packetcontrolunit = IfcMobileTelecommunicationsApplianceTypeEnum.PACKETCONTROLUNIT +remoteradiounit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTERADIOUNIT +remoteunit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTEUNIT +service_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.SERVICE_GPRS_SUPPORT_NODE +subscriberserver = IfcMobileTelecommunicationsApplianceTypeEnum.SUBSCRIBERSERVER +userdefined = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcMobileTelecommunicationsApplianceTypeEnum.NOTDEFINED IfcMooringDeviceTypeEnum = enum_namespace() -bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bollard = IfcMooringDeviceTypeEnum.BOLLARD +linetensioner = IfcMooringDeviceTypeEnum.LINETENSIONER +magneticdevice = IfcMooringDeviceTypeEnum.MAGNETICDEVICE +mooringhooks = IfcMooringDeviceTypeEnum.MOORINGHOOKS +vacuumdevice = IfcMooringDeviceTypeEnum.VACUUMDEVICE +userdefined = IfcMooringDeviceTypeEnum.USERDEFINED +notdefined = IfcMooringDeviceTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNavigationElementTypeEnum = enum_namespace() -beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) -buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) -userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +beacon = IfcNavigationElementTypeEnum.BEACON +buoy = IfcNavigationElementTypeEnum.BUOY +userdefined = IfcNavigationElementTypeEnum.USERDEFINED +notdefined = IfcNavigationElementTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPavementTypeEnum = enum_namespace() -flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) -rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) -userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexible = IfcPavementTypeEnum.FLEXIBLE +rigid = IfcPavementTypeEnum.RIGID +userdefined = IfcPavementTypeEnum.USERDEFINED +notdefined = IfcPavementTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +cohesion = IfcPileTypeEnum.COHESION +driven = IfcPileTypeEnum.DRIVEN +friction = IfcPileTypeEnum.FRICTION +jetgrouting = IfcPileTypeEnum.JETGROUTING +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +base_plate = IfcPlateTypeEnum.BASE_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +sheet = IfcPlateTypeEnum.SHEET +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = IfcProfileTypeEnum.AREA +curve = IfcProfileTypeEnum.CURVE IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_materialdriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -pset_profiledriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE) -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_materialdriven = IfcPropertySetTemplateTypeEnum.PSET_MATERIALDRIVEN +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +pset_profiledriven = IfcPropertySetTemplateTypeEnum.PSET_PROFILEDRIVEN +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +anti_arcing_device = IfcProtectiveDeviceTypeEnum.ANTI_ARCING_DEVICE +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +sparkgap = IfcProtectiveDeviceTypeEnum.SPARKGAP +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +voltagelimiter = IfcProtectiveDeviceTypeEnum.VOLTAGELIMITER +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailTypeEnum = enum_namespace() -blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +blade = IfcRailTypeEnum.BLADE +checkrail = IfcRailTypeEnum.CHECKRAIL +guardrail = IfcRailTypeEnum.GUARDRAIL +rackrail = IfcRailTypeEnum.RACKRAIL +rail = IfcRailTypeEnum.RAIL +stockrail = IfcRailTypeEnum.STOCKRAIL +userdefined = IfcRailTypeEnum.USERDEFINED +notdefined = IfcRailTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +balustrade = IfcRailingTypeEnum.BALUSTRADE +fence = IfcRailingTypeEnum.FENCE +guardrail = IfcRailingTypeEnum.GUARDRAIL +handrail = IfcRailingTypeEnum.HANDRAIL +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRailwayPartTypeEnum = enum_namespace() -dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -plaintracksuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +dilatationsuperstructure = IfcRailwayPartTypeEnum.DILATATIONSUPERSTRUCTURE +linesidestructure = IfcRailwayPartTypeEnum.LINESIDESTRUCTURE +linesidestructurepart = IfcRailwayPartTypeEnum.LINESIDESTRUCTUREPART +plaintracksuperstructure = IfcRailwayPartTypeEnum.PLAINTRACKSUPERSTRUCTURE +superstructure = IfcRailwayPartTypeEnum.SUPERSTRUCTURE +trackstructure = IfcRailwayPartTypeEnum.TRACKSTRUCTURE +trackstructurepart = IfcRailwayPartTypeEnum.TRACKSTRUCTUREPART +turnoutsuperstructure = IfcRailwayPartTypeEnum.TURNOUTSUPERSTRUCTURE +userdefined = IfcRailwayPartTypeEnum.USERDEFINED +notdefined = IfcRailwayPartTypeEnum.NOTDEFINED IfcRailwayTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRailwayTypeEnum.USERDEFINED +notdefined = IfcRailwayTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +spiral = IfcRampFlightTypeEnum.SPIRAL +straight = IfcRampFlightTypeEnum.STRAIGHT +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +daily = IfcRecurrenceTypeEnum.DAILY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +weekly = IfcRecurrenceTypeEnum.WEEKLY +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) -intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) -referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = IfcReferentTypeEnum.BOUNDARY +intersection = IfcReferentTypeEnum.INTERSECTION +kilopoint = IfcReferentTypeEnum.KILOPOINT +landmark = IfcReferentTypeEnum.LANDMARK +milepoint = IfcReferentTypeEnum.MILEPOINT +position = IfcReferentTypeEnum.POSITION +referencemarker = IfcReferentTypeEnum.REFERENCEMARKER +station = IfcReferentTypeEnum.STATION +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -physical = express_getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +physical = IfcReflectanceMethodEnum.PHYSICAL +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcedSoilTypeEnum = enum_namespace() -dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamicallycompacted = IfcReinforcedSoilTypeEnum.DYNAMICALLYCOMPACTED +grouted = IfcReinforcedSoilTypeEnum.GROUTED +replaced = IfcReinforcedSoilTypeEnum.REPLACED +rollercompacted = IfcReinforcedSoilTypeEnum.ROLLERCOMPACTED +surchargepreloaded = IfcReinforcedSoilTypeEnum.SURCHARGEPRELOADED +verticallydrained = IfcReinforcedSoilTypeEnum.VERTICALLYDRAINED +userdefined = IfcReinforcedSoilTypeEnum.USERDEFINED +notdefined = IfcReinforcedSoilTypeEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +edge = IfcReinforcingBarRoleEnum.EDGE +ligature = IfcReinforcingBarRoleEnum.LIGATURE +main = IfcReinforcingBarRoleEnum.MAIN +punching = IfcReinforcingBarRoleEnum.PUNCHING +ring = IfcReinforcingBarRoleEnum.RING +shear = IfcReinforcingBarRoleEnum.SHEAR +stud = IfcReinforcingBarRoleEnum.STUD +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +stud = IfcReinforcingBarTypeEnum.STUD +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoadPartTypeEnum = enum_namespace() -bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +bicyclecrossing = IfcRoadPartTypeEnum.BICYCLECROSSING +bus_stop = IfcRoadPartTypeEnum.BUS_STOP +carriageway = IfcRoadPartTypeEnum.CARRIAGEWAY +centralisland = IfcRoadPartTypeEnum.CENTRALISLAND +centralreserve = IfcRoadPartTypeEnum.CENTRALRESERVE +hardshoulder = IfcRoadPartTypeEnum.HARDSHOULDER +intersection = IfcRoadPartTypeEnum.INTERSECTION +layby = IfcRoadPartTypeEnum.LAYBY +parkingbay = IfcRoadPartTypeEnum.PARKINGBAY +passingbay = IfcRoadPartTypeEnum.PASSINGBAY +pedestrian_crossing = IfcRoadPartTypeEnum.PEDESTRIAN_CROSSING +railwaycrossing = IfcRoadPartTypeEnum.RAILWAYCROSSING +refugeisland = IfcRoadPartTypeEnum.REFUGEISLAND +roadsegment = IfcRoadPartTypeEnum.ROADSEGMENT +roadside = IfcRoadPartTypeEnum.ROADSIDE +roadsidepart = IfcRoadPartTypeEnum.ROADSIDEPART +roadwayplateau = IfcRoadPartTypeEnum.ROADWAYPLATEAU +roundabout = IfcRoadPartTypeEnum.ROUNDABOUT +shoulder = IfcRoadPartTypeEnum.SHOULDER +sidewalk = IfcRoadPartTypeEnum.SIDEWALK +softshoulder = IfcRoadPartTypeEnum.SOFTSHOULDER +tollplaza = IfcRoadPartTypeEnum.TOLLPLAZA +trafficisland = IfcRoadPartTypeEnum.TRAFFICISLAND +trafficlane = IfcRoadPartTypeEnum.TRAFFICLANE +userdefined = IfcRoadPartTypeEnum.USERDEFINED +notdefined = IfcRoadPartTypeEnum.NOTDEFINED IfcRoadTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRoadTypeEnum.USERDEFINED +notdefined = IfcRoadTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +architect = IfcRoleEnum.ARCHITECT +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +buildingowner = IfcRoleEnum.BUILDINGOWNER +civilengineer = IfcRoleEnum.CIVILENGINEER +client = IfcRoleEnum.CLIENT +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +consultant = IfcRoleEnum.CONSULTANT +contractor = IfcRoleEnum.CONTRACTOR +costengineer = IfcRoleEnum.COSTENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +engineer = IfcRoleEnum.ENGINEER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +manufacturer = IfcRoleEnum.MANUFACTURER +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +owner = IfcRoleEnum.OWNER +projectmanager = IfcRoleEnum.PROJECTMANAGER +reseller = IfcRoleEnum.RESELLER +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +subcontractor = IfcRoleEnum.SUBCONTRACTOR +supplier = IfcRoleEnum.SUPPLIER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +atto = IfcSIPrefix.ATTO +centi = IfcSIPrefix.CENTI +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +exa = IfcSIPrefix.EXA +femto = IfcSIPrefix.FEMTO +giga = IfcSIPrefix.GIGA +hecto = IfcSIPrefix.HECTO +kilo = IfcSIPrefix.KILO +mega = IfcSIPrefix.MEGA +micro = IfcSIPrefix.MICRO +milli = IfcSIPrefix.MILLI +nano = IfcSIPrefix.NANO +peta = IfcSIPrefix.PETA +pico = IfcSIPrefix.PICO +tera = IfcSIPrefix.TERA IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = IfcSectionTypeEnum.TAPERED +uniform = IfcSectionTypeEnum.UNIFORM IfcSensorTypeEnum = enum_namespace() -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +cosensor = IfcSensorTypeEnum.COSENSOR +earthquakesensor = IfcSensorTypeEnum.EARTHQUAKESENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +foreignobjectdetectionsensor = IfcSensorTypeEnum.FOREIGNOBJECTDETECTIONSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +obstaclesensor = IfcSensorTypeEnum.OBSTACLESENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +rainsensor = IfcSensorTypeEnum.RAINSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +snowdepthsensor = IfcSensorTypeEnum.SNOWDEPTHSENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +trainsensor = IfcSensorTypeEnum.TRAINSENSOR +turnoutclosuresensor = IfcSensorTypeEnum.TURNOUTCLOSURESENSOR +wheelsensor = IfcSensorTypeEnum.WHEELSENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +finish_finish = IfcSequenceEnum.FINISH_FINISH +finish_start = IfcSequenceEnum.FINISH_START +start_finish = IfcSequenceEnum.START_FINISH +start_start = IfcSequenceEnum.START_START +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +awning = IfcShadingDeviceTypeEnum.AWNING +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSignTypeEnum = enum_namespace() -marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = IfcSignTypeEnum.MARKER +mirror = IfcSignTypeEnum.MIRROR +pictoral = IfcSignTypeEnum.PICTORAL +userdefined = IfcSignTypeEnum.USERDEFINED +notdefined = IfcSignTypeEnum.NOTDEFINED IfcSignalTypeEnum = enum_namespace() -audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +audio = IfcSignalTypeEnum.AUDIO +mixed = IfcSignalTypeEnum.MIXED +visual = IfcSignalTypeEnum.VISUAL +userdefined = IfcSignalTypeEnum.USERDEFINED +notdefined = IfcSignalTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_number = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_number = IfcSimplePropertyTemplateTypeEnum.Q_NUMBER +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT IfcSlabTypeEnum = enum_namespace() -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +baseslab = IfcSlabTypeEnum.BASESLAB +floor = IfcSlabTypeEnum.FLOOR +landing = IfcSlabTypeEnum.LANDING +paving = IfcSlabTypeEnum.PAVING +roof = IfcSlabTypeEnum.ROOF +sidewalk = IfcSlabTypeEnum.SIDEWALK +trackslab = IfcSlabTypeEnum.TRACKSLAB +wearing = IfcSlabTypeEnum.WEARING +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +berth = IfcSpaceTypeEnum.BERTH +external = IfcSpaceTypeEnum.EXTERNAL +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +parking = IfcSpaceTypeEnum.PARKING +space = IfcSpaceTypeEnum.SPACE +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +interference = IfcSpatialZoneTypeEnum.INTERFERENCE +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +reservation = IfcSpatialZoneTypeEnum.RESERVATION +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +spiral = IfcStairFlightTypeEnum.SPIRAL +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +ladder = IfcStairTypeEnum.LADDER +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +locked = IfcStateEnum.LOCKED +readonly = IfcStateEnum.READONLY +readonlylocked = IfcStateEnum.READONLYLOCKED +readwrite = IfcStateEnum.READWRITE +readwritelocked = IfcStateEnum.READWRITELOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcStructuralCurveMemberTypeEnum.CABLE +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +const = IfcStructuralSurfaceActivityTypeEnum.CONST +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +defect = IfcSurfaceFeatureTypeEnum.DEFECT +hatchmarking = IfcSurfaceFeatureTypeEnum.HATCHMARKING +linemarking = IfcSurfaceFeatureTypeEnum.LINEMARKING +mark = IfcSurfaceFeatureTypeEnum.MARK +nonskidsurfacing = IfcSurfaceFeatureTypeEnum.NONSKIDSURFACING +pavementsurfacemarking = IfcSurfaceFeatureTypeEnum.PAVEMENTSURFACEMARKING +rumblestrip = IfcSurfaceFeatureTypeEnum.RUMBLESTRIP +symbolmarking = IfcSurfaceFeatureTypeEnum.SYMBOLMARKING +tag = IfcSurfaceFeatureTypeEnum.TAG +transverserumblestrip = IfcSurfaceFeatureTypeEnum.TRANSVERSERUMBLESTRIP +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +both = IfcSurfaceSide.BOTH +negative = IfcSurfaceSide.NEGATIVE +positive = IfcSurfaceSide.POSITIVE IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +relay = IfcSwitchingDeviceTypeEnum.RELAY +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +start_and_stop_equipment = IfcSwitchingDeviceTypeEnum.START_AND_STOP_EQUIPMENT +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +subrack = IfcSystemFurnitureElementTypeEnum.SUBRACK +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +oilretentiontray = IfcTankTypeEnum.OILRETENTIONTRAY +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -adjustment = express_getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE) -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -calibration = express_getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -emergency = express_getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE) -inspection = express_getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -safety = express_getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE) -shutdown = express_getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE) -testing = express_getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE) -troubleshooting = express_getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +adjustment = IfcTaskTypeEnum.ADJUSTMENT +attendance = IfcTaskTypeEnum.ATTENDANCE +calibration = IfcTaskTypeEnum.CALIBRATION +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +emergency = IfcTaskTypeEnum.EMERGENCY +inspection = IfcTaskTypeEnum.INSPECTION +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +safety = IfcTaskTypeEnum.SAFETY +shutdown = IfcTaskTypeEnum.SHUTDOWN +startup = IfcTaskTypeEnum.STARTUP +testing = IfcTaskTypeEnum.TESTING +troubleshooting = IfcTaskTypeEnum.TROUBLESHOOTING +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonConduitTypeEnum.COUPLER +diabolo = IfcTendonConduitTypeEnum.DIABOLO +duct = IfcTendonConduitTypeEnum.DUCT +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = IfcTextPath.DOWN +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTrackElementTypeEnum = enum_namespace() -blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blockingdevice = IfcTrackElementTypeEnum.BLOCKINGDEVICE +derailer = IfcTrackElementTypeEnum.DERAILER +frog = IfcTrackElementTypeEnum.FROG +half_set_of_blades = IfcTrackElementTypeEnum.HALF_SET_OF_BLADES +sleeper = IfcTrackElementTypeEnum.SLEEPER +speedregulator = IfcTrackElementTypeEnum.SPEEDREGULATOR +trackendofalignment = IfcTrackElementTypeEnum.TRACKENDOFALIGNMENT +vehiclestop = IfcTrackElementTypeEnum.VEHICLESTOP +userdefined = IfcTrackElementTypeEnum.USERDEFINED +notdefined = IfcTrackElementTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +chopper = IfcTransformerTypeEnum.CHOPPER +combined = IfcTransformerTypeEnum.COMBINED +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE +discontinuous = IfcTransitionCode.DISCONTINUOUS IfcTransportElementTypeEnum = enum_namespace() -craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -haulinggear = express_getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +craneway = IfcTransportElementTypeEnum.CRANEWAY +elevator = IfcTransportElementTypeEnum.ELEVATOR +escalator = IfcTransportElementTypeEnum.ESCALATOR +haulinggear = IfcTransportElementTypeEnum.HAULINGGEAR +liftinggear = IfcTransportElementTypeEnum.LIFTINGGEAR +movingwalkway = IfcTransportElementTypeEnum.MOVINGWALKWAY +userdefined = IfcTransportElementTypeEnum.USERDEFINED +notdefined = IfcTransportElementTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) -combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +basestationcontroller = IfcUnitaryControlElementTypeEnum.BASESTATIONCONTROLLER +combined = IfcUnitaryControlElementTypeEnum.COMBINED +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVehicleTypeEnum = enum_namespace() -cargo = express_getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE) -rollingstock = express_getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehicle = express_getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE) -vehicleair = express_getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE) -vehiclemarine = express_getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -vehicletracked = express_getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -vehiclewheeled = express_getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -userdefined = express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVehicleTypeEnum, 'NOTDEFINED', INDETERMINATE) +cargo = IfcVehicleTypeEnum.CARGO +rollingstock = IfcVehicleTypeEnum.ROLLINGSTOCK +vehicle = IfcVehicleTypeEnum.VEHICLE +vehicleair = IfcVehicleTypeEnum.VEHICLEAIR +vehiclemarine = IfcVehicleTypeEnum.VEHICLEMARINE +vehicletracked = IfcVehicleTypeEnum.VEHICLETRACKED +vehiclewheeled = IfcVehicleTypeEnum.VEHICLEWHEELED +userdefined = IfcVehicleTypeEnum.USERDEFINED +notdefined = IfcVehicleTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +rubber = IfcVibrationDamperTypeEnum.RUBBER +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +viscous = IfcVibrationDamperTypeEnum.VISCOUS +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +base = IfcVibrationIsolatorTypeEnum.BASE +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVirtualElementTypeEnum = enum_namespace() -boundary = express_getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE) -clearance = express_getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE) -provisionforvoid = express_getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -userdefined = express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVirtualElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = IfcVirtualElementTypeEnum.BOUNDARY +clearance = IfcVirtualElementTypeEnum.CLEARANCE +provisionforvoid = IfcVirtualElementTypeEnum.PROVISIONFORVOID +userdefined = IfcVirtualElementTypeEnum.USERDEFINED +notdefined = IfcVirtualElementTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +edge = IfcVoidingFeatureTypeEnum.EDGE +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +notch = IfcVoidingFeatureTypeEnum.NOTCH +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +polygonal = IfcWallTypeEnum.POLYGONAL +retainingwall = IfcWallTypeEnum.RETAININGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +wavewall = IfcWallTypeEnum.WAVEWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +bottom = IfcWindowPanelPositionEnum.BOTTOM +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +lightdome = IfcWindowTypeEnum.LIGHTDOME +skylight = IfcWindowTypeEnum.SKYLIGHT +window = IfcWindowTypeEnum.WINDOW +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_ADD1', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py index 5e6f27dd99..5eebf0d4d4 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,2365 +152,2365 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +brakes = IfcActionSourceTypeEnum.BRAKES +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +creep = IfcActionSourceTypeEnum.CREEP +current = IfcActionSourceTypeEnum.CURRENT +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +erection = IfcActionSourceTypeEnum.ERECTION +fire = IfcActionSourceTypeEnum.FIRE +ice = IfcActionSourceTypeEnum.ICE +impact = IfcActionSourceTypeEnum.IMPACT +impulse = IfcActionSourceTypeEnum.IMPULSE +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +propping = IfcActionSourceTypeEnum.PROPPING +rain = IfcActionSourceTypeEnum.RAIN +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +snow_s = IfcActionSourceTypeEnum.SNOW_S +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +transport = IfcActionSourceTypeEnum.TRANSPORT +wave = IfcActionSourceTypeEnum.WAVE +wind_w = IfcActionSourceTypeEnum.WIND_W +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +home = IfcAddressTypeEnum.HOME +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +railwaycrocodile = IfcAlarmTypeEnum.RAILWAYCROCODILE +railwaydetonator = IfcAlarmTypeEnum.RAILWAYDETONATOR +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentCantSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentCantSegmentTypeEnum.BLOSSCURVE +constantcant = IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT +cosinecurve = IfcAlignmentCantSegmentTypeEnum.COSINECURVE +helmertcurve = IfcAlignmentCantSegmentTypeEnum.HELMERTCURVE +lineartransition = IfcAlignmentCantSegmentTypeEnum.LINEARTRANSITION +sinecurve = IfcAlignmentCantSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentCantSegmentTypeEnum.VIENNESEBEND IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentHorizontalSegmentTypeEnum.BLOSSCURVE +circulararc = IfcAlignmentHorizontalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentHorizontalSegmentTypeEnum.CLOTHOID +cosinecurve = IfcAlignmentHorizontalSegmentTypeEnum.COSINECURVE +cubic = IfcAlignmentHorizontalSegmentTypeEnum.CUBIC +helmertcurve = IfcAlignmentHorizontalSegmentTypeEnum.HELMERTCURVE +line = IfcAlignmentHorizontalSegmentTypeEnum.LINE +sinecurve = IfcAlignmentHorizontalSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentHorizontalSegmentTypeEnum.VIENNESEBEND IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) +circulararc = IfcAlignmentVerticalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentVerticalSegmentTypeEnum.CLOTHOID +constantgradient = IfcAlignmentVerticalSegmentTypeEnum.CONSTANTGRADIENT +parabolicarc = IfcAlignmentVerticalSegmentTypeEnum.PARABOLICARC IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcAnnotationTypeEnum = enum_namespace() -contourline = express_getattr(IfcAnnotationTypeEnum, 'CONTOURLINE', INDETERMINATE) -dimension = express_getattr(IfcAnnotationTypeEnum, 'DIMENSION', INDETERMINATE) -isobar = express_getattr(IfcAnnotationTypeEnum, 'ISOBAR', INDETERMINATE) -isolux = express_getattr(IfcAnnotationTypeEnum, 'ISOLUX', INDETERMINATE) -isotherm = express_getattr(IfcAnnotationTypeEnum, 'ISOTHERM', INDETERMINATE) -leader = express_getattr(IfcAnnotationTypeEnum, 'LEADER', INDETERMINATE) -survey = express_getattr(IfcAnnotationTypeEnum, 'SURVEY', INDETERMINATE) -symbol = express_getattr(IfcAnnotationTypeEnum, 'SYMBOL', INDETERMINATE) -text = express_getattr(IfcAnnotationTypeEnum, 'TEXT', INDETERMINATE) -userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +contourline = IfcAnnotationTypeEnum.CONTOURLINE +dimension = IfcAnnotationTypeEnum.DIMENSION +isobar = IfcAnnotationTypeEnum.ISOBAR +isolux = IfcAnnotationTypeEnum.ISOLUX +isotherm = IfcAnnotationTypeEnum.ISOTHERM +leader = IfcAnnotationTypeEnum.LEADER +survey = IfcAnnotationTypeEnum.SURVEY +symbol = IfcAnnotationTypeEnum.SYMBOL +text = IfcAnnotationTypeEnum.TEXT +userdefined = IfcAnnotationTypeEnum.USERDEFINED +notdefined = IfcAnnotationTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -modulo = express_getattr(IfcArithmeticOperatorEnum, 'MODULO', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +modulo = IfcArithmeticOperatorEnum.MODULO +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +factory = IfcAssemblyPlaceEnum.FACTORY +site = IfcAssemblyPlaceEnum.SITE +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +communicationterminal = IfcAudioVisualApplianceTypeEnum.COMMUNICATIONTERMINAL +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +recordingequipment = IfcAudioVisualApplianceTypeEnum.RECORDINGEQUIPMENT +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +cornice = IfcBeamTypeEnum.CORNICE +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +edgebeam = IfcBeamTypeEnum.EDGEBEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +hatstone = IfcBeamTypeEnum.HATSTONE +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +joist = IfcBeamTypeEnum.JOIST +lintel = IfcBeamTypeEnum.LINTEL +piercap = IfcBeamTypeEnum.PIERCAP +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +disk = IfcBearingTypeEnum.DISK +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +guide = IfcBearingTypeEnum.GUIDE +pot = IfcBearingTypeEnum.POT +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +spherical = IfcBearingTypeEnum.SPHERICAL +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +equalto = IfcBenchmarkEnum.EQUALTO +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +includedin = IfcBenchmarkEnum.INCLUDEDIN +includes = IfcBenchmarkEnum.INCLUDES +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN +notincludes = IfcBenchmarkEnum.NOTINCLUDES IfcBoilerTypeEnum = enum_namespace() -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +steam = IfcBoilerTypeEnum.STEAM +water = IfcBoilerTypeEnum.WATER +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +difference = IfcBooleanOperator.DIFFERENCE +intersection = IfcBooleanOperator.INTERSECTION +union = IfcBooleanOperator.UNION IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +apron = IfcBuildingElementPartTypeEnum.APRON +armourunit = IfcBuildingElementPartTypeEnum.ARMOURUNIT +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +safetycage = IfcBuildingElementPartTypeEnum.SAFETYCAGE +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBuiltSystemTypeEnum = enum_namespace() -erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -railwayline = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE) -railwaytrack = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE) -reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +erosionprevention = IfcBuiltSystemTypeEnum.EROSIONPREVENTION +fenestration = IfcBuiltSystemTypeEnum.FENESTRATION +foundation = IfcBuiltSystemTypeEnum.FOUNDATION +loadbearing = IfcBuiltSystemTypeEnum.LOADBEARING +mooring = IfcBuiltSystemTypeEnum.MOORING +outershell = IfcBuiltSystemTypeEnum.OUTERSHELL +prestressing = IfcBuiltSystemTypeEnum.PRESTRESSING +railwayline = IfcBuiltSystemTypeEnum.RAILWAYLINE +railwaytrack = IfcBuiltSystemTypeEnum.RAILWAYTRACK +reinforcing = IfcBuiltSystemTypeEnum.REINFORCING +shading = IfcBuiltSystemTypeEnum.SHADING +trackcircuit = IfcBuiltSystemTypeEnum.TRACKCIRCUIT +transport = IfcBuiltSystemTypeEnum.TRANSPORT +userdefined = IfcBuiltSystemTypeEnum.USERDEFINED +notdefined = IfcBuiltSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -junction = express_getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -transition = express_getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +connector = IfcCableCarrierFittingTypeEnum.CONNECTOR +cross = IfcCableCarrierFittingTypeEnum.CROSS +junction = IfcCableCarrierFittingTypeEnum.JUNCTION +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +transition = IfcCableCarrierFittingTypeEnum.TRANSITION +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cablebracket = IfcCableCarrierSegmentTypeEnum.CABLEBRACKET +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +catenarywire = IfcCableCarrierSegmentTypeEnum.CATENARYWIRE +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +dropper = IfcCableCarrierSegmentTypeEnum.DROPPER +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +fanout = IfcCableFittingTypeEnum.FANOUT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) -fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) -opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) -stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) -wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +contactwiresegment = IfcCableSegmentTypeEnum.CONTACTWIRESEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +fibersegment = IfcCableSegmentTypeEnum.FIBERSEGMENT +fibertube = IfcCableSegmentTypeEnum.FIBERTUBE +opticalcablesegment = IfcCableSegmentTypeEnum.OPTICALCABLESEGMENT +stitchwire = IfcCableSegmentTypeEnum.STITCHWIRE +wirepairsegment = IfcCableSegmentTypeEnum.WIREPAIRSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson = IfcCaissonFoundationTypeEnum.CAISSON +well = IfcCaissonFoundationTypeEnum.WELL +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +modified = IfcChangeActionEnum.MODIFIED +nochange = IfcChangeActionEnum.NOCHANGE +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +watercooled = IfcChillerTypeEnum.WATERCOOLED +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +pilaster = IfcColumnTypeEnum.PILASTER +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) -ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) -linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) -opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) -telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) -transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) -transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) -transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +automaton = IfcCommunicationsApplianceTypeEnum.AUTOMATON +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +intelligentperipheral = IfcCommunicationsApplianceTypeEnum.INTELLIGENTPERIPHERAL +ipnetworkequipment = IfcCommunicationsApplianceTypeEnum.IPNETWORKEQUIPMENT +linesideelectronicunit = IfcCommunicationsApplianceTypeEnum.LINESIDEELECTRONICUNIT +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +opticallineterminal = IfcCommunicationsApplianceTypeEnum.OPTICALLINETERMINAL +opticalnetworkunit = IfcCommunicationsApplianceTypeEnum.OPTICALNETWORKUNIT +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +radioblockcenter = IfcCommunicationsApplianceTypeEnum.RADIOBLOCKCENTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +telecommand = IfcCommunicationsApplianceTypeEnum.TELECOMMAND +telephonyexchange = IfcCommunicationsApplianceTypeEnum.TELEPHONYEXCHANGE +transitioncomponent = IfcCommunicationsApplianceTypeEnum.TRANSITIONCOMPONENT +transponder = IfcCommunicationsApplianceTypeEnum.TRANSPONDER +transportequipment = IfcCommunicationsApplianceTypeEnum.TRANSPORTEQUIPMENT +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +booster = IfcCompressorTypeEnum.BOOSTER +dynamic = IfcCompressorTypeEnum.DYNAMIC +hermetic = IfcCompressorTypeEnum.HERMETIC +opentype = IfcCompressorTypeEnum.OPENTYPE +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotary = IfcCompressorTypeEnum.ROTARY +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +scroll = IfcCompressorTypeEnum.SCROLL +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +twinscrew = IfcCompressorTypeEnum.TWINSCREW +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atend = IfcConnectionTypeEnum.ATEND +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +advisory = IfcConstraintEnum.ADVISORY +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +multiposition = IfcControllerTypeEnum.MULTIPOSITION +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcConveyorSegmentTypeEnum = enum_namespace() -beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltconveyor = IfcConveyorSegmentTypeEnum.BELTCONVEYOR +bucketconveyor = IfcConveyorSegmentTypeEnum.BUCKETCONVEYOR +chuteconveyor = IfcConveyorSegmentTypeEnum.CHUTECONVEYOR +screwconveyor = IfcConveyorSegmentTypeEnum.SCREWCONVEYOR +userdefined = IfcConveyorSegmentTypeEnum.USERDEFINED +notdefined = IfcConveyorSegmentTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +tender = IfcCostScheduleTypeEnum.TENDER +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCourseTypeEnum = enum_namespace() -armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = IfcCourseTypeEnum.ARMOUR +ballastbed = IfcCourseTypeEnum.BALLASTBED +core = IfcCourseTypeEnum.CORE +filter = IfcCourseTypeEnum.FILTER +pavement = IfcCourseTypeEnum.PAVEMENT +protection = IfcCourseTypeEnum.PROTECTION +userdefined = IfcCourseTypeEnum.USERDEFINED +notdefined = IfcCourseTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -topping = express_getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +cladding = IfcCoveringTypeEnum.CLADDING +coping = IfcCoveringTypeEnum.COPING +flooring = IfcCoveringTypeEnum.FLOORING +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +molding = IfcCoveringTypeEnum.MOLDING +roofing = IfcCoveringTypeEnum.ROOFING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +sleeving = IfcCoveringTypeEnum.SLEEVING +topping = IfcCoveringTypeEnum.TOPPING +wrapping = IfcCoveringTypeEnum.WRAPPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = IfcDirectionSenseEnum.NEGATIVE +positive = IfcDirectionSenseEnum.POSITIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -filler = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE) -flashing = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE) -insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) -point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) -railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +birdprotection = IfcDiscreteAccessoryTypeEnum.BIRDPROTECTION +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +cablearranger = IfcDiscreteAccessoryTypeEnum.CABLEARRANGER +elastic_cushion = IfcDiscreteAccessoryTypeEnum.ELASTIC_CUSHION +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +filler = IfcDiscreteAccessoryTypeEnum.FILLER +flashing = IfcDiscreteAccessoryTypeEnum.FLASHING +insulator = IfcDiscreteAccessoryTypeEnum.INSULATOR +lock = IfcDiscreteAccessoryTypeEnum.LOCK +panel_strengthening = IfcDiscreteAccessoryTypeEnum.PANEL_STRENGTHENING +pointmachinemountingdevice = IfcDiscreteAccessoryTypeEnum.POINTMACHINEMOUNTINGDEVICE +point_machine_locking_device = IfcDiscreteAccessoryTypeEnum.POINT_MACHINE_LOCKING_DEVICE +railbrace = IfcDiscreteAccessoryTypeEnum.RAILBRACE +railpad = IfcDiscreteAccessoryTypeEnum.RAILPAD +rail_lubrication = IfcDiscreteAccessoryTypeEnum.RAIL_LUBRICATION +rail_mechanical_equipment = IfcDiscreteAccessoryTypeEnum.RAIL_MECHANICAL_EQUIPMENT +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +slidingchair = IfcDiscreteAccessoryTypeEnum.SLIDINGCHAIR +soundabsorption = IfcDiscreteAccessoryTypeEnum.SOUNDABSORPTION +tensioningequipment = IfcDiscreteAccessoryTypeEnum.TENSIONINGEQUIPMENT +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) -distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcDistributionBoardTypeEnum.CONSUMERUNIT +dispatchingboard = IfcDistributionBoardTypeEnum.DISPATCHINGBOARD +distributionboard = IfcDistributionBoardTypeEnum.DISTRIBUTIONBOARD +distributionframe = IfcDistributionBoardTypeEnum.DISTRIBUTIONFRAME +motorcontrolcentre = IfcDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcDistributionBoardTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +wireless = IfcDistributionPortTypeEnum.WIRELESS +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) -monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) -overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +catenary_system = IfcDistributionSystemEnum.CATENARY_SYSTEM +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fixedtransmissionnetwork = IfcDistributionSystemEnum.FIXEDTRANSMISSIONNETWORK +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +mobilenetwork = IfcDistributionSystemEnum.MOBILENETWORK +monitoringsystem = IfcDistributionSystemEnum.MONITORINGSYSTEM +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +operationaltelephonysystem = IfcDistributionSystemEnum.OPERATIONALTELEPHONYSYSTEM +overhead_contactline_system = IfcDistributionSystemEnum.OVERHEAD_CONTACTLINE_SYSTEM +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +return_circuit = IfcDistributionSystemEnum.RETURN_CIRCUIT +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +final = IfcDocumentStatusEnum.FINAL +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +sliding = IfcDoorPanelOperationEnum.SLIDING +swinging = IfcDoorPanelOperationEnum.SWINGING +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +boom_barrier = IfcDoorTypeEnum.BOOM_BARRIER +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +turnstile = IfcDoorTypeEnum.TURNSTILE +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -double_door_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_LIFTING_VERTICAL', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) -lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) -lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) -revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_door_double_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +double_door_folding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_FOLDING +double_door_lifting_vertical = IfcDoorTypeOperationEnum.DOUBLE_DOOR_LIFTING_VERTICAL +double_door_single_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_door_sliding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SLIDING +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +lifting_horizontal = IfcDoorTypeOperationEnum.LIFTING_HORIZONTAL +lifting_vertical_left = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_LEFT +lifting_vertical_right = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_RIGHT +revolving = IfcDoorTypeOperationEnum.REVOLVING +revolving_vertical = IfcDoorTypeOperationEnum.REVOLVING_VERTICAL +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcEarthworksCutTypeEnum = enum_namespace() -base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +base_excavation = IfcEarthworksCutTypeEnum.BASE_EXCAVATION +cut = IfcEarthworksCutTypeEnum.CUT +dredging = IfcEarthworksCutTypeEnum.DREDGING +excavation = IfcEarthworksCutTypeEnum.EXCAVATION +overexcavation = IfcEarthworksCutTypeEnum.OVEREXCAVATION +pavementmilling = IfcEarthworksCutTypeEnum.PAVEMENTMILLING +stepexcavation = IfcEarthworksCutTypeEnum.STEPEXCAVATION +topsoilremoval = IfcEarthworksCutTypeEnum.TOPSOILREMOVAL +trench = IfcEarthworksCutTypeEnum.TRENCH +userdefined = IfcEarthworksCutTypeEnum.USERDEFINED +notdefined = IfcEarthworksCutTypeEnum.NOTDEFINED IfcEarthworksFillTypeEnum = enum_namespace() -backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = IfcEarthworksFillTypeEnum.BACKFILL +counterweight = IfcEarthworksFillTypeEnum.COUNTERWEIGHT +embankment = IfcEarthworksFillTypeEnum.EMBANKMENT +slopefill = IfcEarthworksFillTypeEnum.SLOPEFILL +subgrade = IfcEarthworksFillTypeEnum.SUBGRADE +subgradebed = IfcEarthworksFillTypeEnum.SUBGRADEBED +transitionsection = IfcEarthworksFillTypeEnum.TRANSITIONSECTION +userdefined = IfcEarthworksFillTypeEnum.USERDEFINED +notdefined = IfcEarthworksFillTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitor = IfcElectricFlowStorageDeviceTypeEnum.CAPACITOR +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +compensator = IfcElectricFlowStorageDeviceTypeEnum.COMPENSATOR +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductor = IfcElectricFlowStorageDeviceTypeEnum.INDUCTOR +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +recharger = IfcElectricFlowStorageDeviceTypeEnum.RECHARGER +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = IfcElectricFlowTreatmentDeviceTypeEnum.ELECTRONICFILTER +userdefined = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowTreatmentDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +relay = IfcElectricTimeControlTypeEnum.RELAY +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +dilatationpanel = IfcElementAssemblyTypeEnum.DILATATIONPANEL +entranceworks = IfcElementAssemblyTypeEnum.ENTRANCEWORKS +girder = IfcElementAssemblyTypeEnum.GIRDER +grid = IfcElementAssemblyTypeEnum.GRID +mast = IfcElementAssemblyTypeEnum.MAST +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +rail_mechanical_equipment_assembly = IfcElementAssemblyTypeEnum.RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +shelter = IfcElementAssemblyTypeEnum.SHELTER +signalassembly = IfcElementAssemblyTypeEnum.SIGNALASSEMBLY +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +sumpbuster = IfcElementAssemblyTypeEnum.SUMPBUSTER +supportingassembly = IfcElementAssemblyTypeEnum.SUPPORTINGASSEMBLY +suspensionassembly = IfcElementAssemblyTypeEnum.SUSPENSIONASSEMBLY +trackpanel = IfcElementAssemblyTypeEnum.TRACKPANEL +traction_switching_assembly = IfcElementAssemblyTypeEnum.TRACTION_SWITCHING_ASSEMBLY +traffic_calming_device = IfcElementAssemblyTypeEnum.TRAFFIC_CALMING_DEVICE +truss = IfcElementAssemblyTypeEnum.TRUSS +turnoutpanel = IfcElementAssemblyTypeEnum.TURNOUTPANEL +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +startevent = IfcEventTypeEnum.STARTEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFacilityPartCommonTypeEnum = enum_namespace() -aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +aboveground = IfcFacilityPartCommonTypeEnum.ABOVEGROUND +belowground = IfcFacilityPartCommonTypeEnum.BELOWGROUND +junction = IfcFacilityPartCommonTypeEnum.JUNCTION +levelcrossing = IfcFacilityPartCommonTypeEnum.LEVELCROSSING +segment = IfcFacilityPartCommonTypeEnum.SEGMENT +substructure = IfcFacilityPartCommonTypeEnum.SUBSTRUCTURE +superstructure = IfcFacilityPartCommonTypeEnum.SUPERSTRUCTURE +terminal = IfcFacilityPartCommonTypeEnum.TERMINAL +userdefined = IfcFacilityPartCommonTypeEnum.USERDEFINED +notdefined = IfcFacilityPartCommonTypeEnum.NOTDEFINED IfcFacilityUsageEnum = enum_namespace() -lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = IfcFacilityUsageEnum.LATERAL +longitudinal = IfcFacilityUsageEnum.LONGITUDINAL +region = IfcFacilityUsageEnum.REGION +vertical = IfcFacilityUsageEnum.VERTICAL +userdefined = IfcFacilityUsageEnum.USERDEFINED +notdefined = IfcFacilityUsageEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +firemonitor = IfcFireSuppressionTerminalTypeEnum.FIREMONITOR +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +sink = IfcFlowDirectionEnum.SINK +source = IfcFlowDirectionEnum.SOURCE +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +combined = IfcFlowInstrumentTypeEnum.COMBINED +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +voltmeter = IfcFlowInstrumentTypeEnum.VOLTMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +bed = IfcFurnitureTypeEnum.BED +chair = IfcFurnitureTypeEnum.CHAIR +desk = IfcFurnitureTypeEnum.DESK +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +table = IfcFurnitureTypeEnum.TABLE +technicalcabinet = IfcFurnitureTypeEnum.TECHNICALCABINET +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -vegetation = express_getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +terrain = IfcGeographicElementTypeEnum.TERRAIN +vegetation = IfcGeographicElementTypeEnum.VEGETATION +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGeotechnicalStratumTypeEnum = enum_namespace() -solid = express_getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE) -void = express_getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE) -water = express_getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE) -userdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE) +solid = IfcGeotechnicalStratumTypeEnum.SOLID +void = IfcGeotechnicalStratumTypeEnum.VOID +water = IfcGeotechnicalStratumTypeEnum.WATER +userdefined = IfcGeotechnicalStratumTypeEnum.USERDEFINED +notdefined = IfcGeotechnicalStratumTypeEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +irregular = IfcGridTypeEnum.IRREGULAR +radial = IfcGridTypeEnum.RADIAL +rectangular = IfcGridTypeEnum.RECTANGULAR +triangular = IfcGridTypeEnum.TRIANGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +turnoutheating = IfcHeatExchangerTypeEnum.TURNOUTHEATING +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcImpactProtectionDeviceTypeEnum = enum_namespace() -bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bumper = IfcImpactProtectionDeviceTypeEnum.BUMPER +crashcushion = IfcImpactProtectionDeviceTypeEnum.CRASHCUSHION +dampingsystem = IfcImpactProtectionDeviceTypeEnum.DAMPINGSYSTEM +fender = IfcImpactProtectionDeviceTypeEnum.FENDER +userdefined = IfcImpactProtectionDeviceTypeEnum.USERDEFINED +notdefined = IfcImpactProtectionDeviceTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +internal = IfcInternalOrExternalEnum.INTERNAL +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKerbTypeEnum = enum_namespace() -userdefined = express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcKerbTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcKerbTypeEnum.USERDEFINED +notdefined = IfcKerbTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +uniform_knots = IfcKnotType.UNIFORM_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLiquidTerminalTypeEnum = enum_namespace() -hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +hosereel = IfcLiquidTerminalTypeEnum.HOSEREEL +loadingarm = IfcLiquidTerminalTypeEnum.LOADINGARM +userdefined = IfcLiquidTerminalTypeEnum.USERDEFINED +notdefined = IfcLiquidTerminalTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR IfcMarineFacilityTypeEnum = enum_namespace() -barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) -shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +barrierbeach = IfcMarineFacilityTypeEnum.BARRIERBEACH +breakwater = IfcMarineFacilityTypeEnum.BREAKWATER +canal = IfcMarineFacilityTypeEnum.CANAL +drydock = IfcMarineFacilityTypeEnum.DRYDOCK +floatingdock = IfcMarineFacilityTypeEnum.FLOATINGDOCK +hydrolift = IfcMarineFacilityTypeEnum.HYDROLIFT +jetty = IfcMarineFacilityTypeEnum.JETTY +launchrecovery = IfcMarineFacilityTypeEnum.LAUNCHRECOVERY +marinedefence = IfcMarineFacilityTypeEnum.MARINEDEFENCE +navigationalchannel = IfcMarineFacilityTypeEnum.NAVIGATIONALCHANNEL +port = IfcMarineFacilityTypeEnum.PORT +quay = IfcMarineFacilityTypeEnum.QUAY +revetment = IfcMarineFacilityTypeEnum.REVETMENT +shiplift = IfcMarineFacilityTypeEnum.SHIPLIFT +shiplock = IfcMarineFacilityTypeEnum.SHIPLOCK +shipyard = IfcMarineFacilityTypeEnum.SHIPYARD +slipway = IfcMarineFacilityTypeEnum.SLIPWAY +waterway = IfcMarineFacilityTypeEnum.WATERWAY +waterwayshiplift = IfcMarineFacilityTypeEnum.WATERWAYSHIPLIFT +userdefined = IfcMarineFacilityTypeEnum.USERDEFINED +notdefined = IfcMarineFacilityTypeEnum.NOTDEFINED IfcMarinePartTypeEnum = enum_namespace() -abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) -vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abovewaterline = IfcMarinePartTypeEnum.ABOVEWATERLINE +anchorage = IfcMarinePartTypeEnum.ANCHORAGE +approachchannel = IfcMarinePartTypeEnum.APPROACHCHANNEL +belowwaterline = IfcMarinePartTypeEnum.BELOWWATERLINE +berthingstructure = IfcMarinePartTypeEnum.BERTHINGSTRUCTURE +chamber = IfcMarinePartTypeEnum.CHAMBER +cill_level = IfcMarinePartTypeEnum.CILL_LEVEL +copelevel = IfcMarinePartTypeEnum.COPELEVEL +core = IfcMarinePartTypeEnum.CORE +crest = IfcMarinePartTypeEnum.CREST +gatehead = IfcMarinePartTypeEnum.GATEHEAD +gudingstructure = IfcMarinePartTypeEnum.GUDINGSTRUCTURE +highwaterline = IfcMarinePartTypeEnum.HIGHWATERLINE +landfield = IfcMarinePartTypeEnum.LANDFIELD +leewardside = IfcMarinePartTypeEnum.LEEWARDSIDE +lowwaterline = IfcMarinePartTypeEnum.LOWWATERLINE +manufacturing = IfcMarinePartTypeEnum.MANUFACTURING +navigationalarea = IfcMarinePartTypeEnum.NAVIGATIONALAREA +protection = IfcMarinePartTypeEnum.PROTECTION +shiptransfer = IfcMarinePartTypeEnum.SHIPTRANSFER +storagearea = IfcMarinePartTypeEnum.STORAGEAREA +vehicleservicing = IfcMarinePartTypeEnum.VEHICLESERVICING +waterfield = IfcMarinePartTypeEnum.WATERFIELD +weatherside = IfcMarinePartTypeEnum.WEATHERSIDE +userdefined = IfcMarinePartTypeEnum.USERDEFINED +notdefined = IfcMarinePartTypeEnum.NOTDEFINED IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +chain = IfcMechanicalFastenerTypeEnum.CHAIN +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +railfastening = IfcMechanicalFastenerTypeEnum.RAILFASTENING +railjoint = IfcMechanicalFastenerTypeEnum.RAILJOINT +rivet = IfcMechanicalFastenerTypeEnum.RIVET +rope = IfcMechanicalFastenerTypeEnum.ROPE +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +stringer = IfcMemberTypeEnum.STRINGER +structuralcable = IfcMemberTypeEnum.STRUCTURALCABLE +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +suspender = IfcMemberTypeEnum.SUSPENDER +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +tiebar = IfcMemberTypeEnum.TIEBAR +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) -masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) -mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) -packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) -remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) -remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) -subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) -userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +accesspoint = IfcMobileTelecommunicationsApplianceTypeEnum.ACCESSPOINT +basebandunit = IfcMobileTelecommunicationsApplianceTypeEnum.BASEBANDUNIT +basetransceiverstation = IfcMobileTelecommunicationsApplianceTypeEnum.BASETRANSCEIVERSTATION +e_utran_node_b = IfcMobileTelecommunicationsApplianceTypeEnum.E_UTRAN_NODE_B +gateway_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.GATEWAY_GPRS_SUPPORT_NODE +masterunit = IfcMobileTelecommunicationsApplianceTypeEnum.MASTERUNIT +mobileswitchingcenter = IfcMobileTelecommunicationsApplianceTypeEnum.MOBILESWITCHINGCENTER +mscserver = IfcMobileTelecommunicationsApplianceTypeEnum.MSCSERVER +packetcontrolunit = IfcMobileTelecommunicationsApplianceTypeEnum.PACKETCONTROLUNIT +remoteradiounit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTERADIOUNIT +remoteunit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTEUNIT +service_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.SERVICE_GPRS_SUPPORT_NODE +subscriberserver = IfcMobileTelecommunicationsApplianceTypeEnum.SUBSCRIBERSERVER +userdefined = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcMobileTelecommunicationsApplianceTypeEnum.NOTDEFINED IfcMooringDeviceTypeEnum = enum_namespace() -bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bollard = IfcMooringDeviceTypeEnum.BOLLARD +linetensioner = IfcMooringDeviceTypeEnum.LINETENSIONER +magneticdevice = IfcMooringDeviceTypeEnum.MAGNETICDEVICE +mooringhooks = IfcMooringDeviceTypeEnum.MOORINGHOOKS +vacuumdevice = IfcMooringDeviceTypeEnum.VACUUMDEVICE +userdefined = IfcMooringDeviceTypeEnum.USERDEFINED +notdefined = IfcMooringDeviceTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNavigationElementTypeEnum = enum_namespace() -beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) -buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) -userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +beacon = IfcNavigationElementTypeEnum.BEACON +buoy = IfcNavigationElementTypeEnum.BUOY +userdefined = IfcNavigationElementTypeEnum.USERDEFINED +notdefined = IfcNavigationElementTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPavementTypeEnum = enum_namespace() -flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) -rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) -userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexible = IfcPavementTypeEnum.FLEXIBLE +rigid = IfcPavementTypeEnum.RIGID +userdefined = IfcPavementTypeEnum.USERDEFINED +notdefined = IfcPavementTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +cohesion = IfcPileTypeEnum.COHESION +driven = IfcPileTypeEnum.DRIVEN +friction = IfcPileTypeEnum.FRICTION +jetgrouting = IfcPileTypeEnum.JETGROUTING +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +base_plate = IfcPlateTypeEnum.BASE_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +sheet = IfcPlateTypeEnum.SHEET +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = IfcProfileTypeEnum.AREA +curve = IfcProfileTypeEnum.CURVE IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_materialdriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -pset_profiledriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE) -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_materialdriven = IfcPropertySetTemplateTypeEnum.PSET_MATERIALDRIVEN +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +pset_profiledriven = IfcPropertySetTemplateTypeEnum.PSET_PROFILEDRIVEN +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +anti_arcing_device = IfcProtectiveDeviceTypeEnum.ANTI_ARCING_DEVICE +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +sparkgap = IfcProtectiveDeviceTypeEnum.SPARKGAP +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +voltagelimiter = IfcProtectiveDeviceTypeEnum.VOLTAGELIMITER +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailTypeEnum = enum_namespace() -blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +blade = IfcRailTypeEnum.BLADE +checkrail = IfcRailTypeEnum.CHECKRAIL +guardrail = IfcRailTypeEnum.GUARDRAIL +rackrail = IfcRailTypeEnum.RACKRAIL +rail = IfcRailTypeEnum.RAIL +stockrail = IfcRailTypeEnum.STOCKRAIL +userdefined = IfcRailTypeEnum.USERDEFINED +notdefined = IfcRailTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +balustrade = IfcRailingTypeEnum.BALUSTRADE +fence = IfcRailingTypeEnum.FENCE +guardrail = IfcRailingTypeEnum.GUARDRAIL +handrail = IfcRailingTypeEnum.HANDRAIL +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRailwayPartTypeEnum = enum_namespace() -abovetrack = express_getattr(IfcRailwayPartTypeEnum, 'ABOVETRACK', INDETERMINATE) -dilationtrack = express_getattr(IfcRailwayPartTypeEnum, 'DILATIONTRACK', INDETERMINATE) -lineside = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDE', INDETERMINATE) -linesidepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDEPART', INDETERMINATE) -plaintrack = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACK', INDETERMINATE) -substructure = express_getattr(IfcRailwayPartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -track = express_getattr(IfcRailwayPartTypeEnum, 'TRACK', INDETERMINATE) -trackpart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKPART', INDETERMINATE) -turnouttrack = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTTRACK', INDETERMINATE) -userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abovetrack = IfcRailwayPartTypeEnum.ABOVETRACK +dilationtrack = IfcRailwayPartTypeEnum.DILATIONTRACK +lineside = IfcRailwayPartTypeEnum.LINESIDE +linesidepart = IfcRailwayPartTypeEnum.LINESIDEPART +plaintrack = IfcRailwayPartTypeEnum.PLAINTRACK +substructure = IfcRailwayPartTypeEnum.SUBSTRUCTURE +track = IfcRailwayPartTypeEnum.TRACK +trackpart = IfcRailwayPartTypeEnum.TRACKPART +turnouttrack = IfcRailwayPartTypeEnum.TURNOUTTRACK +userdefined = IfcRailwayPartTypeEnum.USERDEFINED +notdefined = IfcRailwayPartTypeEnum.NOTDEFINED IfcRailwayTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRailwayTypeEnum.USERDEFINED +notdefined = IfcRailwayTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +spiral = IfcRampFlightTypeEnum.SPIRAL +straight = IfcRampFlightTypeEnum.STRAIGHT +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +daily = IfcRecurrenceTypeEnum.DAILY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +weekly = IfcRecurrenceTypeEnum.WEEKLY +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) -intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) -referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -superelevationevent = express_getattr(IfcReferentTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -widthevent = express_getattr(IfcReferentTypeEnum, 'WIDTHEVENT', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = IfcReferentTypeEnum.BOUNDARY +intersection = IfcReferentTypeEnum.INTERSECTION +kilopoint = IfcReferentTypeEnum.KILOPOINT +landmark = IfcReferentTypeEnum.LANDMARK +milepoint = IfcReferentTypeEnum.MILEPOINT +position = IfcReferentTypeEnum.POSITION +referencemarker = IfcReferentTypeEnum.REFERENCEMARKER +station = IfcReferentTypeEnum.STATION +superelevationevent = IfcReferentTypeEnum.SUPERELEVATIONEVENT +widthevent = IfcReferentTypeEnum.WIDTHEVENT +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -physical = express_getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +physical = IfcReflectanceMethodEnum.PHYSICAL +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcedSoilTypeEnum = enum_namespace() -dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamicallycompacted = IfcReinforcedSoilTypeEnum.DYNAMICALLYCOMPACTED +grouted = IfcReinforcedSoilTypeEnum.GROUTED +replaced = IfcReinforcedSoilTypeEnum.REPLACED +rollercompacted = IfcReinforcedSoilTypeEnum.ROLLERCOMPACTED +surchargepreloaded = IfcReinforcedSoilTypeEnum.SURCHARGEPRELOADED +verticallydrained = IfcReinforcedSoilTypeEnum.VERTICALLYDRAINED +userdefined = IfcReinforcedSoilTypeEnum.USERDEFINED +notdefined = IfcReinforcedSoilTypeEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +edge = IfcReinforcingBarRoleEnum.EDGE +ligature = IfcReinforcingBarRoleEnum.LIGATURE +main = IfcReinforcingBarRoleEnum.MAIN +punching = IfcReinforcingBarRoleEnum.PUNCHING +ring = IfcReinforcingBarRoleEnum.RING +shear = IfcReinforcingBarRoleEnum.SHEAR +stud = IfcReinforcingBarRoleEnum.STUD +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +stud = IfcReinforcingBarTypeEnum.STUD +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoadPartTypeEnum = enum_namespace() -bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +bicyclecrossing = IfcRoadPartTypeEnum.BICYCLECROSSING +bus_stop = IfcRoadPartTypeEnum.BUS_STOP +carriageway = IfcRoadPartTypeEnum.CARRIAGEWAY +centralisland = IfcRoadPartTypeEnum.CENTRALISLAND +centralreserve = IfcRoadPartTypeEnum.CENTRALRESERVE +hardshoulder = IfcRoadPartTypeEnum.HARDSHOULDER +intersection = IfcRoadPartTypeEnum.INTERSECTION +layby = IfcRoadPartTypeEnum.LAYBY +parkingbay = IfcRoadPartTypeEnum.PARKINGBAY +passingbay = IfcRoadPartTypeEnum.PASSINGBAY +pedestrian_crossing = IfcRoadPartTypeEnum.PEDESTRIAN_CROSSING +railwaycrossing = IfcRoadPartTypeEnum.RAILWAYCROSSING +refugeisland = IfcRoadPartTypeEnum.REFUGEISLAND +roadsegment = IfcRoadPartTypeEnum.ROADSEGMENT +roadside = IfcRoadPartTypeEnum.ROADSIDE +roadsidepart = IfcRoadPartTypeEnum.ROADSIDEPART +roadwayplateau = IfcRoadPartTypeEnum.ROADWAYPLATEAU +roundabout = IfcRoadPartTypeEnum.ROUNDABOUT +shoulder = IfcRoadPartTypeEnum.SHOULDER +sidewalk = IfcRoadPartTypeEnum.SIDEWALK +softshoulder = IfcRoadPartTypeEnum.SOFTSHOULDER +tollplaza = IfcRoadPartTypeEnum.TOLLPLAZA +trafficisland = IfcRoadPartTypeEnum.TRAFFICISLAND +trafficlane = IfcRoadPartTypeEnum.TRAFFICLANE +userdefined = IfcRoadPartTypeEnum.USERDEFINED +notdefined = IfcRoadPartTypeEnum.NOTDEFINED IfcRoadTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRoadTypeEnum.USERDEFINED +notdefined = IfcRoadTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +architect = IfcRoleEnum.ARCHITECT +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +buildingowner = IfcRoleEnum.BUILDINGOWNER +civilengineer = IfcRoleEnum.CIVILENGINEER +client = IfcRoleEnum.CLIENT +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +consultant = IfcRoleEnum.CONSULTANT +contractor = IfcRoleEnum.CONTRACTOR +costengineer = IfcRoleEnum.COSTENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +engineer = IfcRoleEnum.ENGINEER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +manufacturer = IfcRoleEnum.MANUFACTURER +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +owner = IfcRoleEnum.OWNER +projectmanager = IfcRoleEnum.PROJECTMANAGER +reseller = IfcRoleEnum.RESELLER +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +subcontractor = IfcRoleEnum.SUBCONTRACTOR +supplier = IfcRoleEnum.SUPPLIER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +atto = IfcSIPrefix.ATTO +centi = IfcSIPrefix.CENTI +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +exa = IfcSIPrefix.EXA +femto = IfcSIPrefix.FEMTO +giga = IfcSIPrefix.GIGA +hecto = IfcSIPrefix.HECTO +kilo = IfcSIPrefix.KILO +mega = IfcSIPrefix.MEGA +micro = IfcSIPrefix.MICRO +milli = IfcSIPrefix.MILLI +nano = IfcSIPrefix.NANO +peta = IfcSIPrefix.PETA +pico = IfcSIPrefix.PICO +tera = IfcSIPrefix.TERA IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = IfcSectionTypeEnum.TAPERED +uniform = IfcSectionTypeEnum.UNIFORM IfcSensorTypeEnum = enum_namespace() -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +cosensor = IfcSensorTypeEnum.COSENSOR +earthquakesensor = IfcSensorTypeEnum.EARTHQUAKESENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +foreignobjectdetectionsensor = IfcSensorTypeEnum.FOREIGNOBJECTDETECTIONSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +obstaclesensor = IfcSensorTypeEnum.OBSTACLESENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +rainsensor = IfcSensorTypeEnum.RAINSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +snowdepthsensor = IfcSensorTypeEnum.SNOWDEPTHSENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +trainsensor = IfcSensorTypeEnum.TRAINSENSOR +turnoutclosuresensor = IfcSensorTypeEnum.TURNOUTCLOSURESENSOR +wheelsensor = IfcSensorTypeEnum.WHEELSENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +finish_finish = IfcSequenceEnum.FINISH_FINISH +finish_start = IfcSequenceEnum.FINISH_START +start_finish = IfcSequenceEnum.START_FINISH +start_start = IfcSequenceEnum.START_START +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +awning = IfcShadingDeviceTypeEnum.AWNING +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSignTypeEnum = enum_namespace() -marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = IfcSignTypeEnum.MARKER +mirror = IfcSignTypeEnum.MIRROR +pictoral = IfcSignTypeEnum.PICTORAL +userdefined = IfcSignTypeEnum.USERDEFINED +notdefined = IfcSignTypeEnum.NOTDEFINED IfcSignalTypeEnum = enum_namespace() -audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +audio = IfcSignalTypeEnum.AUDIO +mixed = IfcSignalTypeEnum.MIXED +visual = IfcSignalTypeEnum.VISUAL +userdefined = IfcSignalTypeEnum.USERDEFINED +notdefined = IfcSignalTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_number = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_number = IfcSimplePropertyTemplateTypeEnum.Q_NUMBER +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT IfcSlabTypeEnum = enum_namespace() -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +baseslab = IfcSlabTypeEnum.BASESLAB +floor = IfcSlabTypeEnum.FLOOR +landing = IfcSlabTypeEnum.LANDING +paving = IfcSlabTypeEnum.PAVING +roof = IfcSlabTypeEnum.ROOF +sidewalk = IfcSlabTypeEnum.SIDEWALK +trackslab = IfcSlabTypeEnum.TRACKSLAB +wearing = IfcSlabTypeEnum.WEARING +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +berth = IfcSpaceTypeEnum.BERTH +external = IfcSpaceTypeEnum.EXTERNAL +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +parking = IfcSpaceTypeEnum.PARKING +space = IfcSpaceTypeEnum.SPACE +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +interference = IfcSpatialZoneTypeEnum.INTERFERENCE +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +reservation = IfcSpatialZoneTypeEnum.RESERVATION +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +spiral = IfcStairFlightTypeEnum.SPIRAL +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +ladder = IfcStairTypeEnum.LADDER +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +locked = IfcStateEnum.LOCKED +readonly = IfcStateEnum.READONLY +readonlylocked = IfcStateEnum.READONLYLOCKED +readwrite = IfcStateEnum.READWRITE +readwritelocked = IfcStateEnum.READWRITELOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcStructuralCurveMemberTypeEnum.CABLE +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +const = IfcStructuralSurfaceActivityTypeEnum.CONST +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +defect = IfcSurfaceFeatureTypeEnum.DEFECT +hatchmarking = IfcSurfaceFeatureTypeEnum.HATCHMARKING +linemarking = IfcSurfaceFeatureTypeEnum.LINEMARKING +mark = IfcSurfaceFeatureTypeEnum.MARK +nonskidsurfacing = IfcSurfaceFeatureTypeEnum.NONSKIDSURFACING +pavementsurfacemarking = IfcSurfaceFeatureTypeEnum.PAVEMENTSURFACEMARKING +rumblestrip = IfcSurfaceFeatureTypeEnum.RUMBLESTRIP +symbolmarking = IfcSurfaceFeatureTypeEnum.SYMBOLMARKING +tag = IfcSurfaceFeatureTypeEnum.TAG +transverserumblestrip = IfcSurfaceFeatureTypeEnum.TRANSVERSERUMBLESTRIP +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +both = IfcSurfaceSide.BOTH +negative = IfcSurfaceSide.NEGATIVE +positive = IfcSurfaceSide.POSITIVE IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +relay = IfcSwitchingDeviceTypeEnum.RELAY +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +start_and_stop_equipment = IfcSwitchingDeviceTypeEnum.START_AND_STOP_EQUIPMENT +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +subrack = IfcSystemFurnitureElementTypeEnum.SUBRACK +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +oilretentiontray = IfcTankTypeEnum.OILRETENTIONTRAY +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -adjustment = express_getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE) -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -calibration = express_getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -emergency = express_getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE) -inspection = express_getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -safety = express_getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE) -shutdown = express_getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE) -testing = express_getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE) -troubleshooting = express_getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +adjustment = IfcTaskTypeEnum.ADJUSTMENT +attendance = IfcTaskTypeEnum.ATTENDANCE +calibration = IfcTaskTypeEnum.CALIBRATION +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +emergency = IfcTaskTypeEnum.EMERGENCY +inspection = IfcTaskTypeEnum.INSPECTION +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +safety = IfcTaskTypeEnum.SAFETY +shutdown = IfcTaskTypeEnum.SHUTDOWN +startup = IfcTaskTypeEnum.STARTUP +testing = IfcTaskTypeEnum.TESTING +troubleshooting = IfcTaskTypeEnum.TROUBLESHOOTING +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonConduitTypeEnum.COUPLER +diabolo = IfcTendonConduitTypeEnum.DIABOLO +duct = IfcTendonConduitTypeEnum.DUCT +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = IfcTextPath.DOWN +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTrackElementTypeEnum = enum_namespace() -blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blockingdevice = IfcTrackElementTypeEnum.BLOCKINGDEVICE +derailer = IfcTrackElementTypeEnum.DERAILER +frog = IfcTrackElementTypeEnum.FROG +half_set_of_blades = IfcTrackElementTypeEnum.HALF_SET_OF_BLADES +sleeper = IfcTrackElementTypeEnum.SLEEPER +speedregulator = IfcTrackElementTypeEnum.SPEEDREGULATOR +trackendofalignment = IfcTrackElementTypeEnum.TRACKENDOFALIGNMENT +vehiclestop = IfcTrackElementTypeEnum.VEHICLESTOP +userdefined = IfcTrackElementTypeEnum.USERDEFINED +notdefined = IfcTrackElementTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +chopper = IfcTransformerTypeEnum.CHOPPER +combined = IfcTransformerTypeEnum.COMBINED +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE +discontinuous = IfcTransitionCode.DISCONTINUOUS IfcTransportElementTypeEnum = enum_namespace() -craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -haulinggear = express_getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +craneway = IfcTransportElementTypeEnum.CRANEWAY +elevator = IfcTransportElementTypeEnum.ELEVATOR +escalator = IfcTransportElementTypeEnum.ESCALATOR +haulinggear = IfcTransportElementTypeEnum.HAULINGGEAR +liftinggear = IfcTransportElementTypeEnum.LIFTINGGEAR +movingwalkway = IfcTransportElementTypeEnum.MOVINGWALKWAY +userdefined = IfcTransportElementTypeEnum.USERDEFINED +notdefined = IfcTransportElementTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) -combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +basestationcontroller = IfcUnitaryControlElementTypeEnum.BASESTATIONCONTROLLER +combined = IfcUnitaryControlElementTypeEnum.COMBINED +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVehicleTypeEnum = enum_namespace() -cargo = express_getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE) -rollingstock = express_getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehicle = express_getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE) -vehicleair = express_getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE) -vehiclemarine = express_getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -vehicletracked = express_getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -vehiclewheeled = express_getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -userdefined = express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVehicleTypeEnum, 'NOTDEFINED', INDETERMINATE) +cargo = IfcVehicleTypeEnum.CARGO +rollingstock = IfcVehicleTypeEnum.ROLLINGSTOCK +vehicle = IfcVehicleTypeEnum.VEHICLE +vehicleair = IfcVehicleTypeEnum.VEHICLEAIR +vehiclemarine = IfcVehicleTypeEnum.VEHICLEMARINE +vehicletracked = IfcVehicleTypeEnum.VEHICLETRACKED +vehiclewheeled = IfcVehicleTypeEnum.VEHICLEWHEELED +userdefined = IfcVehicleTypeEnum.USERDEFINED +notdefined = IfcVehicleTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +rubber = IfcVibrationDamperTypeEnum.RUBBER +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +viscous = IfcVibrationDamperTypeEnum.VISCOUS +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +base = IfcVibrationIsolatorTypeEnum.BASE +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVirtualElementTypeEnum = enum_namespace() -boundary = express_getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE) -clearance = express_getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE) -provisionforvoid = express_getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -userdefined = express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVirtualElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = IfcVirtualElementTypeEnum.BOUNDARY +clearance = IfcVirtualElementTypeEnum.CLEARANCE +provisionforvoid = IfcVirtualElementTypeEnum.PROVISIONFORVOID +userdefined = IfcVirtualElementTypeEnum.USERDEFINED +notdefined = IfcVirtualElementTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +edge = IfcVoidingFeatureTypeEnum.EDGE +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +notch = IfcVoidingFeatureTypeEnum.NOTCH +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +polygonal = IfcWallTypeEnum.POLYGONAL +retainingwall = IfcWallTypeEnum.RETAININGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +wavewall = IfcWallTypeEnum.WAVEWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +bottom = IfcWindowPanelPositionEnum.BOTTOM +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +lightdome = IfcWindowTypeEnum.LIGHTDOME +skylight = IfcWindowTypeEnum.SKYLIGHT +window = IfcWindowTypeEnum.WINDOW +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_ADD2', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py index 13e34ec4f8..ee645919aa 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC1.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,2337 +152,2337 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +snow_s = IfcActionSourceTypeEnum.SNOW_S +wind_w = IfcActionSourceTypeEnum.WIND_W +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +fire = IfcActionSourceTypeEnum.FIRE +impulse = IfcActionSourceTypeEnum.IMPULSE +impact = IfcActionSourceTypeEnum.IMPACT +transport = IfcActionSourceTypeEnum.TRANSPORT +erection = IfcActionSourceTypeEnum.ERECTION +propping = IfcActionSourceTypeEnum.PROPPING +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +creep = IfcActionSourceTypeEnum.CREEP +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +ice = IfcActionSourceTypeEnum.ICE +current = IfcActionSourceTypeEnum.CURRENT +wave = IfcActionSourceTypeEnum.WAVE +rain = IfcActionSourceTypeEnum.RAIN +brakes = IfcActionSourceTypeEnum.BRAKES +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +home = IfcAddressTypeEnum.HOME +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +railwaycrocodile = IfcAlarmTypeEnum.RAILWAYCROCODILE +railwaydetonator = IfcAlarmTypeEnum.RAILWAYDETONATOR +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcAnnotationTypeEnum = enum_namespace() -assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +assumedpoint = IfcAnnotationTypeEnum.ASSUMEDPOINT +asbuiltarea = IfcAnnotationTypeEnum.ASBUILTAREA +asbuiltline = IfcAnnotationTypeEnum.ASBUILTLINE +non_physical_signal = IfcAnnotationTypeEnum.NON_PHYSICAL_SIGNAL +assumedline = IfcAnnotationTypeEnum.ASSUMEDLINE +widthevent = IfcAnnotationTypeEnum.WIDTHEVENT +assumedarea = IfcAnnotationTypeEnum.ASSUMEDAREA +superelevationevent = IfcAnnotationTypeEnum.SUPERELEVATIONEVENT +asbuiltpoint = IfcAnnotationTypeEnum.ASBUILTPOINT +userdefined = IfcAnnotationTypeEnum.USERDEFINED +notdefined = IfcAnnotationTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = IfcAssemblyPlaceEnum.SITE +factory = IfcAssemblyPlaceEnum.FACTORY +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -railway_communication_terminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +railway_communication_terminal = IfcAudioVisualApplianceTypeEnum.RAILWAY_COMMUNICATION_TERMINAL +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +joist = IfcBeamTypeEnum.JOIST +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +lintel = IfcBeamTypeEnum.LINTEL +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +piercap = IfcBeamTypeEnum.PIERCAP +hatstone = IfcBeamTypeEnum.HATSTONE +cornice = IfcBeamTypeEnum.CORNICE +edgebeam = IfcBeamTypeEnum.EDGEBEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = IfcBearingTypeDisplacementEnum.FIXED_MOVEMENT +guided_longitudinal = IfcBearingTypeDisplacementEnum.GUIDED_LONGITUDINAL +guided_transversal = IfcBearingTypeDisplacementEnum.GUIDED_TRANSVERSAL +free_movement = IfcBearingTypeDisplacementEnum.FREE_MOVEMENT +notdefined = IfcBearingTypeDisplacementEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +spherical = IfcBearingTypeEnum.SPHERICAL +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +pot = IfcBearingTypeEnum.POT +guide = IfcBearingTypeEnum.GUIDE +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +disk = IfcBearingTypeEnum.DISK +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +equalto = IfcBenchmarkEnum.EQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +includes = IfcBenchmarkEnum.INCLUDES +notincludes = IfcBenchmarkEnum.NOTINCLUDES +includedin = IfcBenchmarkEnum.INCLUDEDIN +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN IfcBoilerTypeEnum = enum_namespace() -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = IfcBoilerTypeEnum.WATER +steam = IfcBoilerTypeEnum.STEAM +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = IfcBooleanOperator.UNION +intersection = IfcBooleanOperator.INTERSECTION +difference = IfcBooleanOperator.DIFFERENCE IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +apron = IfcBuildingElementPartTypeEnum.APRON +armourunit = IfcBuildingElementPartTypeEnum.ARMOURUNIT +safetycage = IfcBuildingElementPartTypeEnum.SAFETYCAGE +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +reinforcing = IfcBuildingSystemTypeEnum.REINFORCING +prestressing = IfcBuildingSystemTypeEnum.PRESTRESSING +erosionprevention = IfcBuildingSystemTypeEnum.EROSIONPREVENTION +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBuiltSystemTypeEnum = enum_namespace() -reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -mooringsystem = express_getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) -transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +reinforcing = IfcBuiltSystemTypeEnum.REINFORCING +mooring = IfcBuiltSystemTypeEnum.MOORING +outershell = IfcBuiltSystemTypeEnum.OUTERSHELL +trackcircuit = IfcBuiltSystemTypeEnum.TRACKCIRCUIT +erosionprevention = IfcBuiltSystemTypeEnum.EROSIONPREVENTION +foundation = IfcBuiltSystemTypeEnum.FOUNDATION +loadbearing = IfcBuiltSystemTypeEnum.LOADBEARING +shading = IfcBuiltSystemTypeEnum.SHADING +fenestration = IfcBuiltSystemTypeEnum.FENESTRATION +mooringsystem = IfcBuiltSystemTypeEnum.MOORINGSYSTEM +transport = IfcBuiltSystemTypeEnum.TRANSPORT +prestressing = IfcBuiltSystemTypeEnum.PRESTRESSING +userdefined = IfcBuiltSystemTypeEnum.USERDEFINED +notdefined = IfcBuiltSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +cross = IfcCableCarrierFittingTypeEnum.CROSS +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +cablebracket = IfcCableCarrierSegmentTypeEnum.CABLEBRACKET +catenarywire = IfcCableCarrierSegmentTypeEnum.CATENARYWIRE +dropper = IfcCableCarrierSegmentTypeEnum.DROPPER +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +fanout = IfcCableFittingTypeEnum.FANOUT +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) -fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) -fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) -opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) -stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) -wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +contactwiresegment = IfcCableSegmentTypeEnum.CONTACTWIRESEGMENT +fibersegment = IfcCableSegmentTypeEnum.FIBERSEGMENT +fibertube = IfcCableSegmentTypeEnum.FIBERTUBE +opticalcablesegment = IfcCableSegmentTypeEnum.OPTICALCABLESEGMENT +stitchwire = IfcCableSegmentTypeEnum.STITCHWIRE +wirepairsegment = IfcCableSegmentTypeEnum.WIREPAIRSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = IfcCaissonFoundationTypeEnum.WELL +caisson = IfcCaissonFoundationTypeEnum.CAISSON +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = IfcChangeActionEnum.NOCHANGE +modified = IfcChangeActionEnum.MODIFIED +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +watercooled = IfcChillerTypeEnum.WATERCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pilaster = IfcColumnTypeEnum.PILASTER +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -intelligent_peripheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) -ip_network_equipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) -optical_network_unit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', INDETERMINATE) -telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) -telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) -transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) -transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) -transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +automaton = IfcCommunicationsApplianceTypeEnum.AUTOMATON +intelligent_peripheral = IfcCommunicationsApplianceTypeEnum.INTELLIGENT_PERIPHERAL +ip_network_equipment = IfcCommunicationsApplianceTypeEnum.IP_NETWORK_EQUIPMENT +optical_network_unit = IfcCommunicationsApplianceTypeEnum.OPTICAL_NETWORK_UNIT +telecommand = IfcCommunicationsApplianceTypeEnum.TELECOMMAND +telephonyexchange = IfcCommunicationsApplianceTypeEnum.TELEPHONYEXCHANGE +transitioncomponent = IfcCommunicationsApplianceTypeEnum.TRANSITIONCOMPONENT +transponder = IfcCommunicationsApplianceTypeEnum.TRANSPONDER +transportequipment = IfcCommunicationsApplianceTypeEnum.TRANSPORTEQUIPMENT +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = IfcCompressorTypeEnum.DYNAMIC +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rotary = IfcCompressorTypeEnum.ROTARY +scroll = IfcCompressorTypeEnum.SCROLL +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +booster = IfcCompressorTypeEnum.BOOSTER +opentype = IfcCompressorTypeEnum.OPENTYPE +hermetic = IfcCompressorTypeEnum.HERMETIC +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +twinscrew = IfcCompressorTypeEnum.TWINSCREW +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +atend = IfcConnectionTypeEnum.ATEND +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +advisory = IfcConstraintEnum.ADVISORY +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +multiposition = IfcControllerTypeEnum.MULTIPOSITION +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcConveyorSegmentTypeEnum = enum_namespace() -chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +chuteconveyor = IfcConveyorSegmentTypeEnum.CHUTECONVEYOR +beltconveyor = IfcConveyorSegmentTypeEnum.BELTCONVEYOR +screwconveyor = IfcConveyorSegmentTypeEnum.SCREWCONVEYOR +bucketconveyor = IfcConveyorSegmentTypeEnum.BUCKETCONVEYOR +userdefined = IfcConveyorSegmentTypeEnum.USERDEFINED +notdefined = IfcConveyorSegmentTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +tender = IfcCostScheduleTypeEnum.TENDER +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCourseTypeEnum = enum_namespace() -armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = IfcCourseTypeEnum.ARMOUR +filter = IfcCourseTypeEnum.FILTER +ballastbed = IfcCourseTypeEnum.BALLASTBED +core = IfcCourseTypeEnum.CORE +pavement = IfcCourseTypeEnum.PAVEMENT +protection = IfcCourseTypeEnum.PROTECTION +userdefined = IfcCourseTypeEnum.USERDEFINED +notdefined = IfcCourseTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +flooring = IfcCoveringTypeEnum.FLOORING +cladding = IfcCoveringTypeEnum.CLADDING +roofing = IfcCoveringTypeEnum.ROOFING +molding = IfcCoveringTypeEnum.MOLDING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +sleeving = IfcCoveringTypeEnum.SLEEVING +wrapping = IfcCoveringTypeEnum.WRAPPING +coping = IfcCoveringTypeEnum.COPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = IfcDirectionSenseEnum.POSITIVE +negative = IfcDirectionSenseEnum.NEGATIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +birdprotection = IfcDiscreteAccessoryTypeEnum.BIRDPROTECTION +cablearranger = IfcDiscreteAccessoryTypeEnum.CABLEARRANGER +insulator = IfcDiscreteAccessoryTypeEnum.INSULATOR +lock = IfcDiscreteAccessoryTypeEnum.LOCK +tensioningequipment = IfcDiscreteAccessoryTypeEnum.TENSIONINGEQUIPMENT +railpad = IfcDiscreteAccessoryTypeEnum.RAILPAD +slidingchair = IfcDiscreteAccessoryTypeEnum.SLIDINGCHAIR +panel_strengthening = IfcDiscreteAccessoryTypeEnum.PANEL_STRENGTHENING +railbrace = IfcDiscreteAccessoryTypeEnum.RAILBRACE +elastic_cushion = IfcDiscreteAccessoryTypeEnum.ELASTIC_CUSHION +soundabsorption = IfcDiscreteAccessoryTypeEnum.SOUNDABSORPTION +rail_lubrication = IfcDiscreteAccessoryTypeEnum.RAIL_LUBRICATION +rail_mechanical_equipment = IfcDiscreteAccessoryTypeEnum.RAIL_MECHANICAL_EQUIPMENT +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionBoardTypeEnum = enum_namespace() -switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +switchboard = IfcDistributionBoardTypeEnum.SWITCHBOARD +consumerunit = IfcDistributionBoardTypeEnum.CONSUMERUNIT +motorcontrolcentre = IfcDistributionBoardTypeEnum.MOTORCONTROLCENTRE +distributionframe = IfcDistributionBoardTypeEnum.DISTRIBUTIONFRAME +distributionboard = IfcDistributionBoardTypeEnum.DISTRIBUTIONBOARD +userdefined = IfcDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcDistributionBoardTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +wireless = IfcDistributionPortTypeEnum.WIRELESS +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +catenary_system = IfcDistributionSystemEnum.CATENARY_SYSTEM +overhead_contactline_system = IfcDistributionSystemEnum.OVERHEAD_CONTACTLINE_SYSTEM +return_circuit = IfcDistributionSystemEnum.RETURN_CIRCUIT +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +final = IfcDocumentStatusEnum.FINAL +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = IfcDoorPanelOperationEnum.SWINGING +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +sliding = IfcDoorPanelOperationEnum.SLIDING +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +plastic = IfcDoorStyleConstructionEnum.PLASTIC +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +boom_barrier = IfcDoorTypeEnum.BOOM_BARRIER +turnstile = IfcDoorTypeEnum.TURNSTILE +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorTypeOperationEnum.REVOLVING +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcEarthworksCutTypeEnum = enum_namespace() -trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +trench = IfcEarthworksCutTypeEnum.TRENCH +dredging = IfcEarthworksCutTypeEnum.DREDGING +excavation = IfcEarthworksCutTypeEnum.EXCAVATION +overexcavation = IfcEarthworksCutTypeEnum.OVEREXCAVATION +topsoilremoval = IfcEarthworksCutTypeEnum.TOPSOILREMOVAL +stepexcavation = IfcEarthworksCutTypeEnum.STEPEXCAVATION +pavementmilling = IfcEarthworksCutTypeEnum.PAVEMENTMILLING +cut = IfcEarthworksCutTypeEnum.CUT +base_excavation = IfcEarthworksCutTypeEnum.BASE_EXCAVATION +userdefined = IfcEarthworksCutTypeEnum.USERDEFINED +notdefined = IfcEarthworksCutTypeEnum.NOTDEFINED IfcEarthworksFillTypeEnum = enum_namespace() -backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = IfcEarthworksFillTypeEnum.BACKFILL +counterweight = IfcEarthworksFillTypeEnum.COUNTERWEIGHT +subgrade = IfcEarthworksFillTypeEnum.SUBGRADE +embankment = IfcEarthworksFillTypeEnum.EMBANKMENT +transitionsection = IfcEarthworksFillTypeEnum.TRANSITIONSECTION +subgradebed = IfcEarthworksFillTypeEnum.SUBGRADEBED +slopefill = IfcEarthworksFillTypeEnum.SLOPEFILL +userdefined = IfcEarthworksFillTypeEnum.USERDEFINED +notdefined = IfcEarthworksFillTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +capacitor = IfcElectricFlowStorageDeviceTypeEnum.CAPACITOR +compensator = IfcElectricFlowStorageDeviceTypeEnum.COMPENSATOR +inductor = IfcElectricFlowStorageDeviceTypeEnum.INDUCTOR +recharger = IfcElectricFlowStorageDeviceTypeEnum.RECHARGER +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = IfcElectricFlowTreatmentDeviceTypeEnum.ELECTRONICFILTER +userdefined = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowTreatmentDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +relay = IfcElectricTimeControlTypeEnum.RELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +girder = IfcElementAssemblyTypeEnum.GIRDER +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +truss = IfcElementAssemblyTypeEnum.TRUSS +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +mast = IfcElementAssemblyTypeEnum.MAST +signalassembly = IfcElementAssemblyTypeEnum.SIGNALASSEMBLY +grid = IfcElementAssemblyTypeEnum.GRID +shelter = IfcElementAssemblyTypeEnum.SHELTER +supportingassembly = IfcElementAssemblyTypeEnum.SUPPORTINGASSEMBLY +suspensionassembly = IfcElementAssemblyTypeEnum.SUSPENSIONASSEMBLY +traction_switching_assembly = IfcElementAssemblyTypeEnum.TRACTION_SWITCHING_ASSEMBLY +trackpanel = IfcElementAssemblyTypeEnum.TRACKPANEL +turnoutpanel = IfcElementAssemblyTypeEnum.TURNOUTPANEL +dilatationpanel = IfcElementAssemblyTypeEnum.DILATATIONPANEL +rail_mechanical_equipment_assembly = IfcElementAssemblyTypeEnum.RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY +entranceworks = IfcElementAssemblyTypeEnum.ENTRANCEWORKS +sumpbuster = IfcElementAssemblyTypeEnum.SUMPBUSTER +traffic_calming_device = IfcElementAssemblyTypeEnum.TRAFFIC_CALMING_DEVICE +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = IfcEventTypeEnum.STARTEVENT +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFacilityPartCommonTypeEnum = enum_namespace() -segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +segment = IfcFacilityPartCommonTypeEnum.SEGMENT +aboveground = IfcFacilityPartCommonTypeEnum.ABOVEGROUND +junction = IfcFacilityPartCommonTypeEnum.JUNCTION +levelcrossing = IfcFacilityPartCommonTypeEnum.LEVELCROSSING +belowground = IfcFacilityPartCommonTypeEnum.BELOWGROUND +substructure = IfcFacilityPartCommonTypeEnum.SUBSTRUCTURE +terminal = IfcFacilityPartCommonTypeEnum.TERMINAL +superstructure = IfcFacilityPartCommonTypeEnum.SUPERSTRUCTURE +userdefined = IfcFacilityPartCommonTypeEnum.USERDEFINED +notdefined = IfcFacilityPartCommonTypeEnum.NOTDEFINED IfcFacilityUsageEnum = enum_namespace() -lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = IfcFacilityUsageEnum.LATERAL +region = IfcFacilityUsageEnum.REGION +vertical = IfcFacilityUsageEnum.VERTICAL +longitudinal = IfcFacilityUsageEnum.LONGITUDINAL +userdefined = IfcFacilityUsageEnum.USERDEFINED +notdefined = IfcFacilityUsageEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = IfcFlowDirectionEnum.SOURCE +sink = IfcFlowDirectionEnum.SINK +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +combined = IfcFlowInstrumentTypeEnum.COMBINED +voltmeter = IfcFlowInstrumentTypeEnum.VOLTMETER +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = IfcFurnitureTypeEnum.CHAIR +table = IfcFurnitureTypeEnum.TABLE +desk = IfcFurnitureTypeEnum.DESK +bed = IfcFurnitureTypeEnum.BED +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +technicalcabinet = IfcFurnitureTypeEnum.TECHNICALCABINET +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = IfcGeographicElementTypeEnum.TERRAIN +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = IfcGridTypeEnum.RECTANGULAR +radial = IfcGridTypeEnum.RADIAL +triangular = IfcGridTypeEnum.TRIANGULAR +irregular = IfcGridTypeEnum.IRREGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +turnoutheating = IfcHeatExchangerTypeEnum.TURNOUTHEATING +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcImpactProtectionDeviceTypeEnum = enum_namespace() -crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +crashcushion = IfcImpactProtectionDeviceTypeEnum.CRASHCUSHION +dampingsystem = IfcImpactProtectionDeviceTypeEnum.DAMPINGSYSTEM +fender = IfcImpactProtectionDeviceTypeEnum.FENDER +bumper = IfcImpactProtectionDeviceTypeEnum.BUMPER +userdefined = IfcImpactProtectionDeviceTypeEnum.USERDEFINED +notdefined = IfcImpactProtectionDeviceTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = IfcInternalOrExternalEnum.INTERNAL +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = IfcKnotType.UNIFORM_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLiquidTerminalTypeEnum = enum_namespace() -loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +loadingarm = IfcLiquidTerminalTypeEnum.LOADINGARM +hosereel = IfcLiquidTerminalTypeEnum.HOSEREEL +userdefined = IfcLiquidTerminalTypeEnum.USERDEFINED +notdefined = IfcLiquidTerminalTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR IfcMarineFacilityTypeEnum = enum_namespace() -canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -embankment = express_getattr(IfcMarineFacilityTypeEnum, 'EMBANKMENT', INDETERMINATE) -launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +canal = IfcMarineFacilityTypeEnum.CANAL +waterwayshiplift = IfcMarineFacilityTypeEnum.WATERWAYSHIPLIFT +embankment = IfcMarineFacilityTypeEnum.EMBANKMENT +launchrecovery = IfcMarineFacilityTypeEnum.LAUNCHRECOVERY +marinedefence = IfcMarineFacilityTypeEnum.MARINEDEFENCE +hydrolift = IfcMarineFacilityTypeEnum.HYDROLIFT +shipyard = IfcMarineFacilityTypeEnum.SHIPYARD +shiplift = IfcMarineFacilityTypeEnum.SHIPLIFT +port = IfcMarineFacilityTypeEnum.PORT +quay = IfcMarineFacilityTypeEnum.QUAY +floatingdock = IfcMarineFacilityTypeEnum.FLOATINGDOCK +navigationalchannel = IfcMarineFacilityTypeEnum.NAVIGATIONALCHANNEL +breakwater = IfcMarineFacilityTypeEnum.BREAKWATER +drydock = IfcMarineFacilityTypeEnum.DRYDOCK +jetty = IfcMarineFacilityTypeEnum.JETTY +shiplock = IfcMarineFacilityTypeEnum.SHIPLOCK +barrierbeach = IfcMarineFacilityTypeEnum.BARRIERBEACH +slipway = IfcMarineFacilityTypeEnum.SLIPWAY +waterway = IfcMarineFacilityTypeEnum.WATERWAY +userdefined = IfcMarineFacilityTypeEnum.USERDEFINED +notdefined = IfcMarineFacilityTypeEnum.NOTDEFINED IfcMarinePartTypeEnum = enum_namespace() -crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -storage = express_getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) -approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +crest = IfcMarinePartTypeEnum.CREST +manufacturing = IfcMarinePartTypeEnum.MANUFACTURING +lowwaterline = IfcMarinePartTypeEnum.LOWWATERLINE +core = IfcMarinePartTypeEnum.CORE +waterfield = IfcMarinePartTypeEnum.WATERFIELD +cill_level = IfcMarinePartTypeEnum.CILL_LEVEL +berthingstructure = IfcMarinePartTypeEnum.BERTHINGSTRUCTURE +copelevel = IfcMarinePartTypeEnum.COPELEVEL +chamber = IfcMarinePartTypeEnum.CHAMBER +storage = IfcMarinePartTypeEnum.STORAGE +approachchannel = IfcMarinePartTypeEnum.APPROACHCHANNEL +vehicleservicing = IfcMarinePartTypeEnum.VEHICLESERVICING +shiptransfer = IfcMarinePartTypeEnum.SHIPTRANSFER +gatehead = IfcMarinePartTypeEnum.GATEHEAD +gudingstructure = IfcMarinePartTypeEnum.GUDINGSTRUCTURE +belowwaterline = IfcMarinePartTypeEnum.BELOWWATERLINE +weatherside = IfcMarinePartTypeEnum.WEATHERSIDE +landfield = IfcMarinePartTypeEnum.LANDFIELD +protection = IfcMarinePartTypeEnum.PROTECTION +leewardside = IfcMarinePartTypeEnum.LEEWARDSIDE +abovewaterline = IfcMarinePartTypeEnum.ABOVEWATERLINE +anchorage = IfcMarinePartTypeEnum.ANCHORAGE +navigationalarea = IfcMarinePartTypeEnum.NAVIGATIONALAREA +highwaterline = IfcMarinePartTypeEnum.HIGHWATERLINE +userdefined = IfcMarinePartTypeEnum.USERDEFINED +notdefined = IfcMarinePartTypeEnum.NOTDEFINED IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +rivet = IfcMechanicalFastenerTypeEnum.RIVET +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +railjoint = IfcMechanicalFastenerTypeEnum.RAILJOINT +railfastening = IfcMechanicalFastenerTypeEnum.RAILFASTENING +chain = IfcMechanicalFastenerTypeEnum.CHAIN +rope = IfcMechanicalFastenerTypeEnum.ROPE +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stringer = IfcMemberTypeEnum.STRINGER +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +suspender = IfcMemberTypeEnum.SUSPENDER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +structuralcable = IfcMemberTypeEnum.STRUCTURALCABLE +tiebar = IfcMemberTypeEnum.TIEBAR +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -remote_radio_unit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) -accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +e_utran_node_b = IfcMobileTelecommunicationsApplianceTypeEnum.E_UTRAN_NODE_B +remote_radio_unit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTE_RADIO_UNIT +accesspoint = IfcMobileTelecommunicationsApplianceTypeEnum.ACCESSPOINT +basetransceiverstation = IfcMobileTelecommunicationsApplianceTypeEnum.BASETRANSCEIVERSTATION +remoteunit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTEUNIT +basebandunit = IfcMobileTelecommunicationsApplianceTypeEnum.BASEBANDUNIT +masterunit = IfcMobileTelecommunicationsApplianceTypeEnum.MASTERUNIT +userdefined = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcMobileTelecommunicationsApplianceTypeEnum.NOTDEFINED IfcMooringDeviceTypeEnum = enum_namespace() -linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +linetensioner = IfcMooringDeviceTypeEnum.LINETENSIONER +magneticdevice = IfcMooringDeviceTypeEnum.MAGNETICDEVICE +mooringhooks = IfcMooringDeviceTypeEnum.MOORINGHOOKS +vacuumdevice = IfcMooringDeviceTypeEnum.VACUUMDEVICE +bollard = IfcMooringDeviceTypeEnum.BOLLARD +userdefined = IfcMooringDeviceTypeEnum.USERDEFINED +notdefined = IfcMooringDeviceTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNavigationElementTypeEnum = enum_namespace() -beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) -buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) -userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +beacon = IfcNavigationElementTypeEnum.BEACON +buoy = IfcNavigationElementTypeEnum.BUOY +userdefined = IfcNavigationElementTypeEnum.USERDEFINED +notdefined = IfcNavigationElementTypeEnum.NOTDEFINED IfcNullStyle = enum_namespace() -null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = IfcNullStyle.NULL IfcObjectTypeEnum = enum_namespace() -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = IfcObjectTypeEnum.PRODUCT +process = IfcObjectTypeEnum.PROCESS +control = IfcObjectTypeEnum.CONTROL +resource = IfcObjectTypeEnum.RESOURCE +actor = IfcObjectTypeEnum.ACTOR +group = IfcObjectTypeEnum.GROUP +project = IfcObjectTypeEnum.PROJECT +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +driven = IfcPileTypeEnum.DRIVEN +jetgrouting = IfcPileTypeEnum.JETGROUTING +cohesion = IfcPileTypeEnum.COHESION +friction = IfcPileTypeEnum.FRICTION +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +sheet = IfcPlateTypeEnum.SHEET +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +base_plate = IfcPlateTypeEnum.BASE_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = IfcProfileTypeEnum.CURVE +area = IfcProfileTypeEnum.AREA IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +anti_arcing_device = IfcProtectiveDeviceTypeEnum.ANTI_ARCING_DEVICE +sparkgap = IfcProtectiveDeviceTypeEnum.SPARKGAP +voltagelimiter = IfcProtectiveDeviceTypeEnum.VOLTAGELIMITER +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailTypeEnum = enum_namespace() -rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +rackrail = IfcRailTypeEnum.RACKRAIL +blade = IfcRailTypeEnum.BLADE +guardrail = IfcRailTypeEnum.GUARDRAIL +stockrail = IfcRailTypeEnum.STOCKRAIL +checkrail = IfcRailTypeEnum.CHECKRAIL +rail = IfcRailTypeEnum.RAIL +userdefined = IfcRailTypeEnum.USERDEFINED +notdefined = IfcRailTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = IfcRailingTypeEnum.HANDRAIL +guardrail = IfcRailingTypeEnum.GUARDRAIL +balustrade = IfcRailingTypeEnum.BALUSTRADE +fence = IfcRailingTypeEnum.FENCE +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRailwayPartTypeEnum = enum_namespace() -trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -plaintracksupestructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) -linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackstructure = IfcRailwayPartTypeEnum.TRACKSTRUCTURE +trackstructurepart = IfcRailwayPartTypeEnum.TRACKSTRUCTUREPART +linesidestructurepart = IfcRailwayPartTypeEnum.LINESIDESTRUCTUREPART +dilatationsuperstructure = IfcRailwayPartTypeEnum.DILATATIONSUPERSTRUCTURE +plaintracksupestructure = IfcRailwayPartTypeEnum.PLAINTRACKSUPESTRUCTURE +linesidestructure = IfcRailwayPartTypeEnum.LINESIDESTRUCTURE +superstructure = IfcRailwayPartTypeEnum.SUPERSTRUCTURE +turnoutsuperstructure = IfcRailwayPartTypeEnum.TURNOUTSUPERSTRUCTURE +userdefined = IfcRailwayPartTypeEnum.USERDEFINED +notdefined = IfcRailwayPartTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcRampFlightTypeEnum.STRAIGHT +spiral = IfcRampFlightTypeEnum.SPIRAL +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = IfcRecurrenceTypeEnum.DAILY +weekly = IfcRecurrenceTypeEnum.WEEKLY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = IfcReferentTypeEnum.KILOPOINT +milepoint = IfcReferentTypeEnum.MILEPOINT +station = IfcReferentTypeEnum.STATION +referencemarker = IfcReferentTypeEnum.REFERENCEMARKER +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcedSoilTypeEnum = enum_namespace() -surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +surchargepreloaded = IfcReinforcedSoilTypeEnum.SURCHARGEPRELOADED +verticallydrained = IfcReinforcedSoilTypeEnum.VERTICALLYDRAINED +dynamicallycompacted = IfcReinforcedSoilTypeEnum.DYNAMICALLYCOMPACTED +replaced = IfcReinforcedSoilTypeEnum.REPLACED +rollercompacted = IfcReinforcedSoilTypeEnum.ROLLERCOMPACTED +grouted = IfcReinforcedSoilTypeEnum.GROUTED +userdefined = IfcReinforcedSoilTypeEnum.USERDEFINED +notdefined = IfcReinforcedSoilTypeEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = IfcReinforcingBarRoleEnum.MAIN +shear = IfcReinforcingBarRoleEnum.SHEAR +ligature = IfcReinforcingBarRoleEnum.LIGATURE +stud = IfcReinforcingBarRoleEnum.STUD +punching = IfcReinforcingBarRoleEnum.PUNCHING +edge = IfcReinforcingBarRoleEnum.EDGE +ring = IfcReinforcingBarRoleEnum.RING +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +stud = IfcReinforcingBarTypeEnum.STUD +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoadPartTypeEnum = enum_namespace() -roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +roadsidepart = IfcRoadPartTypeEnum.ROADSIDEPART +bus_stop = IfcRoadPartTypeEnum.BUS_STOP +hardshoulder = IfcRoadPartTypeEnum.HARDSHOULDER +intersection = IfcRoadPartTypeEnum.INTERSECTION +passingbay = IfcRoadPartTypeEnum.PASSINGBAY +roadwayplateau = IfcRoadPartTypeEnum.ROADWAYPLATEAU +roadside = IfcRoadPartTypeEnum.ROADSIDE +refugeisland = IfcRoadPartTypeEnum.REFUGEISLAND +tollplaza = IfcRoadPartTypeEnum.TOLLPLAZA +centralreserve = IfcRoadPartTypeEnum.CENTRALRESERVE +sidewalk = IfcRoadPartTypeEnum.SIDEWALK +parkingbay = IfcRoadPartTypeEnum.PARKINGBAY +railwaycrossing = IfcRoadPartTypeEnum.RAILWAYCROSSING +pedestrian_crossing = IfcRoadPartTypeEnum.PEDESTRIAN_CROSSING +softshoulder = IfcRoadPartTypeEnum.SOFTSHOULDER +bicyclecrossing = IfcRoadPartTypeEnum.BICYCLECROSSING +centralisland = IfcRoadPartTypeEnum.CENTRALISLAND +shoulder = IfcRoadPartTypeEnum.SHOULDER +trafficlane = IfcRoadPartTypeEnum.TRAFFICLANE +roadsegment = IfcRoadPartTypeEnum.ROADSEGMENT +roundabout = IfcRoadPartTypeEnum.ROUNDABOUT +layby = IfcRoadPartTypeEnum.LAYBY +carriageway = IfcRoadPartTypeEnum.CARRIAGEWAY +trafficisland = IfcRoadPartTypeEnum.TRAFFICISLAND +userdefined = IfcRoadPartTypeEnum.USERDEFINED +notdefined = IfcRoadPartTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = IfcRoleEnum.SUPPLIER +manufacturer = IfcRoleEnum.MANUFACTURER +contractor = IfcRoleEnum.CONTRACTOR +subcontractor = IfcRoleEnum.SUBCONTRACTOR +architect = IfcRoleEnum.ARCHITECT +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +costengineer = IfcRoleEnum.COSTENGINEER +client = IfcRoleEnum.CLIENT +buildingowner = IfcRoleEnum.BUILDINGOWNER +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +projectmanager = IfcRoleEnum.PROJECTMANAGER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +civilengineer = IfcRoleEnum.CIVILENGINEER +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +engineer = IfcRoleEnum.ENGINEER +owner = IfcRoleEnum.OWNER +consultant = IfcRoleEnum.CONSULTANT +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +reseller = IfcRoleEnum.RESELLER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = IfcSIPrefix.EXA +peta = IfcSIPrefix.PETA +tera = IfcSIPrefix.TERA +giga = IfcSIPrefix.GIGA +mega = IfcSIPrefix.MEGA +kilo = IfcSIPrefix.KILO +hecto = IfcSIPrefix.HECTO +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +centi = IfcSIPrefix.CENTI +milli = IfcSIPrefix.MILLI +micro = IfcSIPrefix.MICRO +nano = IfcSIPrefix.NANO +pico = IfcSIPrefix.PICO +femto = IfcSIPrefix.FEMTO +atto = IfcSIPrefix.ATTO IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = IfcSectionTypeEnum.UNIFORM +tapered = IfcSectionTypeEnum.TAPERED IfcSensorTypeEnum = enum_namespace() -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = IfcSensorTypeEnum.COSENSOR +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +earthquakesensor = IfcSensorTypeEnum.EARTHQUAKESENSOR +foreignobjectdetectionsensor = IfcSensorTypeEnum.FOREIGNOBJECTDETECTIONSENSOR +obstaclesensor = IfcSensorTypeEnum.OBSTACLESENSOR +rainsensor = IfcSensorTypeEnum.RAINSENSOR +snowdepthsensor = IfcSensorTypeEnum.SNOWDEPTHSENSOR +trainsensor = IfcSensorTypeEnum.TRAINSENSOR +turnoutclosuresensor = IfcSensorTypeEnum.TURNOUTCLOSURESENSOR +wheelsensor = IfcSensorTypeEnum.WHEELSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = IfcSequenceEnum.START_START +start_finish = IfcSequenceEnum.START_FINISH +finish_start = IfcSequenceEnum.FINISH_START +finish_finish = IfcSequenceEnum.FINISH_FINISH +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +awning = IfcShadingDeviceTypeEnum.AWNING +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSignTypeEnum = enum_namespace() -marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = IfcSignTypeEnum.MARKER +pictoral = IfcSignTypeEnum.PICTORAL +mirror = IfcSignTypeEnum.MIRROR +userdefined = IfcSignTypeEnum.USERDEFINED +notdefined = IfcSignTypeEnum.NOTDEFINED IfcSignalTypeEnum = enum_namespace() -visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +visual = IfcSignalTypeEnum.VISUAL +audio = IfcSignalTypeEnum.AUDIO +mixed = IfcSignalTypeEnum.MIXED +userdefined = IfcSignalTypeEnum.USERDEFINED +notdefined = IfcSignalTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME IfcSlabTypeEnum = enum_namespace() -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = IfcSlabTypeEnum.FLOOR +roof = IfcSlabTypeEnum.ROOF +landing = IfcSlabTypeEnum.LANDING +baseslab = IfcSlabTypeEnum.BASESLAB +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +paving = IfcSlabTypeEnum.PAVING +wearing = IfcSlabTypeEnum.WEARING +sidewalk = IfcSlabTypeEnum.SIDEWALK +trackslab = IfcSlabTypeEnum.TRACKSLAB +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = IfcSpaceTypeEnum.SPACE +parking = IfcSpaceTypeEnum.PARKING +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +external = IfcSpaceTypeEnum.EXTERNAL +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +reservation = IfcSpatialZoneTypeEnum.RESERVATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +spiral = IfcStairFlightTypeEnum.SPIRAL +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +ladder = IfcStairTypeEnum.LADDER +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = IfcStateEnum.READWRITE +readonly = IfcStateEnum.READONLY +locked = IfcStateEnum.LOCKED +readwritelocked = IfcStateEnum.READWRITELOCKED +readonlylocked = IfcStateEnum.READONLYLOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +cable = IfcStructuralCurveMemberTypeEnum.CABLE +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralSurfaceActivityTypeEnum.CONST +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = IfcSurfaceFeatureTypeEnum.MARK +tag = IfcSurfaceFeatureTypeEnum.TAG +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +defect = IfcSurfaceFeatureTypeEnum.DEFECT +hatchmarking = IfcSurfaceFeatureTypeEnum.HATCHMARKING +linemarking = IfcSurfaceFeatureTypeEnum.LINEMARKING +pavementsurfacemarking = IfcSurfaceFeatureTypeEnum.PAVEMENTSURFACEMARKING +symbolmarking = IfcSurfaceFeatureTypeEnum.SYMBOLMARKING +nonskidsurfacing = IfcSurfaceFeatureTypeEnum.NONSKIDSURFACING +rumblestrip = IfcSurfaceFeatureTypeEnum.RUMBLESTRIP +transverserumblestrip = IfcSurfaceFeatureTypeEnum.TRANSVERSERUMBLESTRIP +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = IfcSurfaceSide.POSITIVE +negative = IfcSurfaceSide.NEGATIVE +both = IfcSurfaceSide.BOTH IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +relay = IfcSwitchingDeviceTypeEnum.RELAY +start_and_stop_equipment = IfcSwitchingDeviceTypeEnum.START_AND_STOP_EQUIPMENT +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +subrack = IfcSystemFurnitureElementTypeEnum.SUBRACK +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +oilretentiontray = IfcTankTypeEnum.OILRETENTIONTRAY +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = IfcTaskTypeEnum.ATTENDANCE +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = IfcTendonConduitTypeEnum.DUCT +coupler = IfcTendonConduitTypeEnum.COUPLER +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +diabolo = IfcTendonConduitTypeEnum.DIABOLO +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP +down = IfcTextPath.DOWN IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTrackElementTypeEnum = enum_namespace() -trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackendofalignment = IfcTrackElementTypeEnum.TRACKENDOFALIGNMENT +blockingdevice = IfcTrackElementTypeEnum.BLOCKINGDEVICE +vehiclestop = IfcTrackElementTypeEnum.VEHICLESTOP +sleeper = IfcTrackElementTypeEnum.SLEEPER +half_set_of_blades = IfcTrackElementTypeEnum.HALF_SET_OF_BLADES +speedregulator = IfcTrackElementTypeEnum.SPEEDREGULATOR +derailer = IfcTrackElementTypeEnum.DERAILER +frog = IfcTrackElementTypeEnum.FROG +userdefined = IfcTrackElementTypeEnum.USERDEFINED +notdefined = IfcTrackElementTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +chopper = IfcTransformerTypeEnum.CHOPPER +combined = IfcTransformerTypeEnum.COMBINED +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = IfcTransitionCode.DISCONTINUOUS +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE IfcTransitionCurveType = enum_namespace() -biquadraticparabola = express_getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = express_getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) -clothoidcurve = express_getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) -cosinecurve = express_getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) -cubicparabola = express_getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) -sinecurve = express_getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) +biquadraticparabola = IfcTransitionCurveType.BIQUADRATICPARABOLA +blosscurve = IfcTransitionCurveType.BLOSSCURVE +clothoidcurve = IfcTransitionCurveType.CLOTHOIDCURVE +cosinecurve = IfcTransitionCurveType.COSINECURVE +cubicparabola = IfcTransitionCurveType.CUBICPARABOLA +sinecurve = IfcTransitionCurveType.SINECURVE IfcTransportElementFixedTypeEnum = enum_namespace() -elevator = express_getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = express_getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = IfcTransportElementFixedTypeEnum.ELEVATOR +escalator = IfcTransportElementFixedTypeEnum.ESCALATOR +movingwalkway = IfcTransportElementFixedTypeEnum.MOVINGWALKWAY +craneway = IfcTransportElementFixedTypeEnum.CRANEWAY +liftinggear = IfcTransportElementFixedTypeEnum.LIFTINGGEAR +userdefined = IfcTransportElementFixedTypeEnum.USERDEFINED +notdefined = IfcTransportElementFixedTypeEnum.NOTDEFINED IfcTransportElementNonFixedTypeEnum = enum_namespace() -vehicle = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) -vehicletracked = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -rollingstock = express_getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehiclewheeled = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -vehicleair = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) -cargo = express_getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) -vehiclemarine = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +vehicle = IfcTransportElementNonFixedTypeEnum.VEHICLE +vehicletracked = IfcTransportElementNonFixedTypeEnum.VEHICLETRACKED +rollingstock = IfcTransportElementNonFixedTypeEnum.ROLLINGSTOCK +vehiclewheeled = IfcTransportElementNonFixedTypeEnum.VEHICLEWHEELED +vehicleair = IfcTransportElementNonFixedTypeEnum.VEHICLEAIR +cargo = IfcTransportElementNonFixedTypeEnum.CARGO +vehiclemarine = IfcTransportElementNonFixedTypeEnum.VEHICLEMARINE +userdefined = IfcTransportElementNonFixedTypeEnum.USERDEFINED +notdefined = IfcTransportElementNonFixedTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +combined = IfcUnitaryControlElementTypeEnum.COMBINED +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +viscous = IfcVibrationDamperTypeEnum.VISCOUS +rubber = IfcVibrationDamperTypeEnum.RUBBER +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +base = IfcVibrationIsolatorTypeEnum.BASE +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +notch = IfcVoidingFeatureTypeEnum.NOTCH +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +edge = IfcVoidingFeatureTypeEnum.EDGE +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +polygonal = IfcWallTypeEnum.POLYGONAL +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +retainingwall = IfcWallTypeEnum.RETAININGWALL +wavewall = IfcWallTypeEnum.WAVEWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +bottom = IfcWindowPanelPositionEnum.BOTTOM +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +plastic = IfcWindowStyleConstructionEnum.PLASTIC +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = IfcWindowTypeEnum.WINDOW +skylight = IfcWindowTypeEnum.SKYLIGHT +lightdome = IfcWindowTypeEnum.LIGHTDOME +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_RC1', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py index 516271085a..0303689be5 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC2.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,2360 +152,2360 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +snow_s = IfcActionSourceTypeEnum.SNOW_S +wind_w = IfcActionSourceTypeEnum.WIND_W +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +fire = IfcActionSourceTypeEnum.FIRE +impulse = IfcActionSourceTypeEnum.IMPULSE +impact = IfcActionSourceTypeEnum.IMPACT +transport = IfcActionSourceTypeEnum.TRANSPORT +erection = IfcActionSourceTypeEnum.ERECTION +propping = IfcActionSourceTypeEnum.PROPPING +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +creep = IfcActionSourceTypeEnum.CREEP +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +ice = IfcActionSourceTypeEnum.ICE +current = IfcActionSourceTypeEnum.CURRENT +wave = IfcActionSourceTypeEnum.WAVE +rain = IfcActionSourceTypeEnum.RAIN +brakes = IfcActionSourceTypeEnum.BRAKES +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +home = IfcAddressTypeEnum.HOME +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +railwaycrocodile = IfcAlarmTypeEnum.RAILWAYCROCODILE +railwaydetonator = IfcAlarmTypeEnum.RAILWAYDETONATOR +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentCantSegmentTypeEnum = enum_namespace() -constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -biquadraticparabola = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +constantcant = IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT +lineartransition = IfcAlignmentCantSegmentTypeEnum.LINEARTRANSITION +biquadraticparabola = IfcAlignmentCantSegmentTypeEnum.BIQUADRATICPARABOLA +blosscurve = IfcAlignmentCantSegmentTypeEnum.BLOSSCURVE +cosinecurve = IfcAlignmentCantSegmentTypeEnum.COSINECURVE +sinecurve = IfcAlignmentCantSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentCantSegmentTypeEnum.VIENNESEBEND IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cubicspiral = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBICSPIRAL', INDETERMINATE) -biquadraticparabola = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +line = IfcAlignmentHorizontalSegmentTypeEnum.LINE +circulararc = IfcAlignmentHorizontalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentHorizontalSegmentTypeEnum.CLOTHOID +cubicspiral = IfcAlignmentHorizontalSegmentTypeEnum.CUBICSPIRAL +biquadraticparabola = IfcAlignmentHorizontalSegmentTypeEnum.BIQUADRATICPARABOLA +blosscurve = IfcAlignmentHorizontalSegmentTypeEnum.BLOSSCURVE +cosinecurve = IfcAlignmentHorizontalSegmentTypeEnum.COSINECURVE +sinecurve = IfcAlignmentHorizontalSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentHorizontalSegmentTypeEnum.VIENNESEBEND IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = IfcAlignmentVerticalSegmentTypeEnum.CONSTANTGRADIENT +circulararc = IfcAlignmentVerticalSegmentTypeEnum.CIRCULARARC +parabolicarc = IfcAlignmentVerticalSegmentTypeEnum.PARABOLICARC +clothoid = IfcAlignmentVerticalSegmentTypeEnum.CLOTHOID IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcAnnotationTypeEnum = enum_namespace() -assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +assumedpoint = IfcAnnotationTypeEnum.ASSUMEDPOINT +asbuiltarea = IfcAnnotationTypeEnum.ASBUILTAREA +asbuiltline = IfcAnnotationTypeEnum.ASBUILTLINE +non_physical_signal = IfcAnnotationTypeEnum.NON_PHYSICAL_SIGNAL +assumedline = IfcAnnotationTypeEnum.ASSUMEDLINE +widthevent = IfcAnnotationTypeEnum.WIDTHEVENT +assumedarea = IfcAnnotationTypeEnum.ASSUMEDAREA +superelevationevent = IfcAnnotationTypeEnum.SUPERELEVATIONEVENT +asbuiltpoint = IfcAnnotationTypeEnum.ASBUILTPOINT +userdefined = IfcAnnotationTypeEnum.USERDEFINED +notdefined = IfcAnnotationTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = IfcAssemblyPlaceEnum.SITE +factory = IfcAssemblyPlaceEnum.FACTORY +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -railway_communication_terminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +railway_communication_terminal = IfcAudioVisualApplianceTypeEnum.RAILWAY_COMMUNICATION_TERMINAL +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +joist = IfcBeamTypeEnum.JOIST +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +lintel = IfcBeamTypeEnum.LINTEL +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +piercap = IfcBeamTypeEnum.PIERCAP +hatstone = IfcBeamTypeEnum.HATSTONE +cornice = IfcBeamTypeEnum.CORNICE +edgebeam = IfcBeamTypeEnum.EDGEBEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = IfcBearingTypeDisplacementEnum.FIXED_MOVEMENT +guided_longitudinal = IfcBearingTypeDisplacementEnum.GUIDED_LONGITUDINAL +guided_transversal = IfcBearingTypeDisplacementEnum.GUIDED_TRANSVERSAL +free_movement = IfcBearingTypeDisplacementEnum.FREE_MOVEMENT +notdefined = IfcBearingTypeDisplacementEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +spherical = IfcBearingTypeEnum.SPHERICAL +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +pot = IfcBearingTypeEnum.POT +guide = IfcBearingTypeEnum.GUIDE +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +disk = IfcBearingTypeEnum.DISK +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +equalto = IfcBenchmarkEnum.EQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +includes = IfcBenchmarkEnum.INCLUDES +notincludes = IfcBenchmarkEnum.NOTINCLUDES +includedin = IfcBenchmarkEnum.INCLUDEDIN +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN IfcBoilerTypeEnum = enum_namespace() -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = IfcBoilerTypeEnum.WATER +steam = IfcBoilerTypeEnum.STEAM +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = IfcBooleanOperator.UNION +intersection = IfcBooleanOperator.INTERSECTION +difference = IfcBooleanOperator.DIFFERENCE IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +apron = IfcBuildingElementPartTypeEnum.APRON +armourunit = IfcBuildingElementPartTypeEnum.ARMOURUNIT +safetycage = IfcBuildingElementPartTypeEnum.SAFETYCAGE +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +reinforcing = IfcBuildingSystemTypeEnum.REINFORCING +prestressing = IfcBuildingSystemTypeEnum.PRESTRESSING +erosionprevention = IfcBuildingSystemTypeEnum.EROSIONPREVENTION +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBuiltSystemTypeEnum = enum_namespace() -reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -mooringsystem = express_getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) -transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +reinforcing = IfcBuiltSystemTypeEnum.REINFORCING +mooring = IfcBuiltSystemTypeEnum.MOORING +outershell = IfcBuiltSystemTypeEnum.OUTERSHELL +trackcircuit = IfcBuiltSystemTypeEnum.TRACKCIRCUIT +erosionprevention = IfcBuiltSystemTypeEnum.EROSIONPREVENTION +foundation = IfcBuiltSystemTypeEnum.FOUNDATION +loadbearing = IfcBuiltSystemTypeEnum.LOADBEARING +shading = IfcBuiltSystemTypeEnum.SHADING +fenestration = IfcBuiltSystemTypeEnum.FENESTRATION +mooringsystem = IfcBuiltSystemTypeEnum.MOORINGSYSTEM +transport = IfcBuiltSystemTypeEnum.TRANSPORT +prestressing = IfcBuiltSystemTypeEnum.PRESTRESSING +userdefined = IfcBuiltSystemTypeEnum.USERDEFINED +notdefined = IfcBuiltSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +cross = IfcCableCarrierFittingTypeEnum.CROSS +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +cablebracket = IfcCableCarrierSegmentTypeEnum.CABLEBRACKET +catenarywire = IfcCableCarrierSegmentTypeEnum.CATENARYWIRE +dropper = IfcCableCarrierSegmentTypeEnum.DROPPER +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +fanout = IfcCableFittingTypeEnum.FANOUT +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) -fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) -fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) -opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) -stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) -wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +contactwiresegment = IfcCableSegmentTypeEnum.CONTACTWIRESEGMENT +fibersegment = IfcCableSegmentTypeEnum.FIBERSEGMENT +fibertube = IfcCableSegmentTypeEnum.FIBERTUBE +opticalcablesegment = IfcCableSegmentTypeEnum.OPTICALCABLESEGMENT +stitchwire = IfcCableSegmentTypeEnum.STITCHWIRE +wirepairsegment = IfcCableSegmentTypeEnum.WIREPAIRSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = IfcCaissonFoundationTypeEnum.WELL +caisson = IfcCaissonFoundationTypeEnum.CAISSON +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = IfcChangeActionEnum.NOCHANGE +modified = IfcChangeActionEnum.MODIFIED +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +watercooled = IfcChillerTypeEnum.WATERCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pilaster = IfcColumnTypeEnum.PILASTER +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -intelligent_peripheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) -ip_network_equipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) -optical_network_unit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', INDETERMINATE) -telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) -telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) -transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) -transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) -transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +automaton = IfcCommunicationsApplianceTypeEnum.AUTOMATON +intelligent_peripheral = IfcCommunicationsApplianceTypeEnum.INTELLIGENT_PERIPHERAL +ip_network_equipment = IfcCommunicationsApplianceTypeEnum.IP_NETWORK_EQUIPMENT +optical_network_unit = IfcCommunicationsApplianceTypeEnum.OPTICAL_NETWORK_UNIT +telecommand = IfcCommunicationsApplianceTypeEnum.TELECOMMAND +telephonyexchange = IfcCommunicationsApplianceTypeEnum.TELEPHONYEXCHANGE +transitioncomponent = IfcCommunicationsApplianceTypeEnum.TRANSITIONCOMPONENT +transponder = IfcCommunicationsApplianceTypeEnum.TRANSPONDER +transportequipment = IfcCommunicationsApplianceTypeEnum.TRANSPORTEQUIPMENT +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = IfcCompressorTypeEnum.DYNAMIC +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rotary = IfcCompressorTypeEnum.ROTARY +scroll = IfcCompressorTypeEnum.SCROLL +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +booster = IfcCompressorTypeEnum.BOOSTER +opentype = IfcCompressorTypeEnum.OPENTYPE +hermetic = IfcCompressorTypeEnum.HERMETIC +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +twinscrew = IfcCompressorTypeEnum.TWINSCREW +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +atend = IfcConnectionTypeEnum.ATEND +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +advisory = IfcConstraintEnum.ADVISORY +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +multiposition = IfcControllerTypeEnum.MULTIPOSITION +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcConveyorSegmentTypeEnum = enum_namespace() -chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +chuteconveyor = IfcConveyorSegmentTypeEnum.CHUTECONVEYOR +beltconveyor = IfcConveyorSegmentTypeEnum.BELTCONVEYOR +screwconveyor = IfcConveyorSegmentTypeEnum.SCREWCONVEYOR +bucketconveyor = IfcConveyorSegmentTypeEnum.BUCKETCONVEYOR +userdefined = IfcConveyorSegmentTypeEnum.USERDEFINED +notdefined = IfcConveyorSegmentTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +tender = IfcCostScheduleTypeEnum.TENDER +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCourseTypeEnum = enum_namespace() -armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = IfcCourseTypeEnum.ARMOUR +filter = IfcCourseTypeEnum.FILTER +ballastbed = IfcCourseTypeEnum.BALLASTBED +core = IfcCourseTypeEnum.CORE +pavement = IfcCourseTypeEnum.PAVEMENT +protection = IfcCourseTypeEnum.PROTECTION +userdefined = IfcCourseTypeEnum.USERDEFINED +notdefined = IfcCourseTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +flooring = IfcCoveringTypeEnum.FLOORING +cladding = IfcCoveringTypeEnum.CLADDING +roofing = IfcCoveringTypeEnum.ROOFING +molding = IfcCoveringTypeEnum.MOLDING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +sleeving = IfcCoveringTypeEnum.SLEEVING +wrapping = IfcCoveringTypeEnum.WRAPPING +coping = IfcCoveringTypeEnum.COPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = IfcDirectionSenseEnum.POSITIVE +negative = IfcDirectionSenseEnum.NEGATIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +birdprotection = IfcDiscreteAccessoryTypeEnum.BIRDPROTECTION +cablearranger = IfcDiscreteAccessoryTypeEnum.CABLEARRANGER +insulator = IfcDiscreteAccessoryTypeEnum.INSULATOR +lock = IfcDiscreteAccessoryTypeEnum.LOCK +tensioningequipment = IfcDiscreteAccessoryTypeEnum.TENSIONINGEQUIPMENT +railpad = IfcDiscreteAccessoryTypeEnum.RAILPAD +slidingchair = IfcDiscreteAccessoryTypeEnum.SLIDINGCHAIR +panel_strengthening = IfcDiscreteAccessoryTypeEnum.PANEL_STRENGTHENING +railbrace = IfcDiscreteAccessoryTypeEnum.RAILBRACE +elastic_cushion = IfcDiscreteAccessoryTypeEnum.ELASTIC_CUSHION +soundabsorption = IfcDiscreteAccessoryTypeEnum.SOUNDABSORPTION +rail_lubrication = IfcDiscreteAccessoryTypeEnum.RAIL_LUBRICATION +rail_mechanical_equipment = IfcDiscreteAccessoryTypeEnum.RAIL_MECHANICAL_EQUIPMENT +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionBoardTypeEnum = enum_namespace() -switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +switchboard = IfcDistributionBoardTypeEnum.SWITCHBOARD +consumerunit = IfcDistributionBoardTypeEnum.CONSUMERUNIT +motorcontrolcentre = IfcDistributionBoardTypeEnum.MOTORCONTROLCENTRE +distributionframe = IfcDistributionBoardTypeEnum.DISTRIBUTIONFRAME +distributionboard = IfcDistributionBoardTypeEnum.DISTRIBUTIONBOARD +userdefined = IfcDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcDistributionBoardTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +wireless = IfcDistributionPortTypeEnum.WIRELESS +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +catenary_system = IfcDistributionSystemEnum.CATENARY_SYSTEM +overhead_contactline_system = IfcDistributionSystemEnum.OVERHEAD_CONTACTLINE_SYSTEM +return_circuit = IfcDistributionSystemEnum.RETURN_CIRCUIT +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +final = IfcDocumentStatusEnum.FINAL +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = IfcDoorPanelOperationEnum.SWINGING +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +sliding = IfcDoorPanelOperationEnum.SLIDING +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +plastic = IfcDoorStyleConstructionEnum.PLASTIC +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +boom_barrier = IfcDoorTypeEnum.BOOM_BARRIER +turnstile = IfcDoorTypeEnum.TURNSTILE +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorTypeOperationEnum.REVOLVING +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcEarthworksCutTypeEnum = enum_namespace() -trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +trench = IfcEarthworksCutTypeEnum.TRENCH +dredging = IfcEarthworksCutTypeEnum.DREDGING +excavation = IfcEarthworksCutTypeEnum.EXCAVATION +overexcavation = IfcEarthworksCutTypeEnum.OVEREXCAVATION +topsoilremoval = IfcEarthworksCutTypeEnum.TOPSOILREMOVAL +stepexcavation = IfcEarthworksCutTypeEnum.STEPEXCAVATION +pavementmilling = IfcEarthworksCutTypeEnum.PAVEMENTMILLING +cut = IfcEarthworksCutTypeEnum.CUT +base_excavation = IfcEarthworksCutTypeEnum.BASE_EXCAVATION +userdefined = IfcEarthworksCutTypeEnum.USERDEFINED +notdefined = IfcEarthworksCutTypeEnum.NOTDEFINED IfcEarthworksFillTypeEnum = enum_namespace() -backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = IfcEarthworksFillTypeEnum.BACKFILL +counterweight = IfcEarthworksFillTypeEnum.COUNTERWEIGHT +subgrade = IfcEarthworksFillTypeEnum.SUBGRADE +embankment = IfcEarthworksFillTypeEnum.EMBANKMENT +transitionsection = IfcEarthworksFillTypeEnum.TRANSITIONSECTION +subgradebed = IfcEarthworksFillTypeEnum.SUBGRADEBED +slopefill = IfcEarthworksFillTypeEnum.SLOPEFILL +userdefined = IfcEarthworksFillTypeEnum.USERDEFINED +notdefined = IfcEarthworksFillTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +capacitor = IfcElectricFlowStorageDeviceTypeEnum.CAPACITOR +compensator = IfcElectricFlowStorageDeviceTypeEnum.COMPENSATOR +inductor = IfcElectricFlowStorageDeviceTypeEnum.INDUCTOR +recharger = IfcElectricFlowStorageDeviceTypeEnum.RECHARGER +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = IfcElectricFlowTreatmentDeviceTypeEnum.ELECTRONICFILTER +userdefined = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowTreatmentDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +relay = IfcElectricTimeControlTypeEnum.RELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +girder = IfcElementAssemblyTypeEnum.GIRDER +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +truss = IfcElementAssemblyTypeEnum.TRUSS +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +mast = IfcElementAssemblyTypeEnum.MAST +signalassembly = IfcElementAssemblyTypeEnum.SIGNALASSEMBLY +grid = IfcElementAssemblyTypeEnum.GRID +shelter = IfcElementAssemblyTypeEnum.SHELTER +supportingassembly = IfcElementAssemblyTypeEnum.SUPPORTINGASSEMBLY +suspensionassembly = IfcElementAssemblyTypeEnum.SUSPENSIONASSEMBLY +traction_switching_assembly = IfcElementAssemblyTypeEnum.TRACTION_SWITCHING_ASSEMBLY +trackpanel = IfcElementAssemblyTypeEnum.TRACKPANEL +turnoutpanel = IfcElementAssemblyTypeEnum.TURNOUTPANEL +dilatationpanel = IfcElementAssemblyTypeEnum.DILATATIONPANEL +rail_mechanical_equipment_assembly = IfcElementAssemblyTypeEnum.RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY +entranceworks = IfcElementAssemblyTypeEnum.ENTRANCEWORKS +sumpbuster = IfcElementAssemblyTypeEnum.SUMPBUSTER +traffic_calming_device = IfcElementAssemblyTypeEnum.TRAFFIC_CALMING_DEVICE +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = IfcEventTypeEnum.STARTEVENT +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFacilityPartCommonTypeEnum = enum_namespace() -segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +segment = IfcFacilityPartCommonTypeEnum.SEGMENT +aboveground = IfcFacilityPartCommonTypeEnum.ABOVEGROUND +junction = IfcFacilityPartCommonTypeEnum.JUNCTION +levelcrossing = IfcFacilityPartCommonTypeEnum.LEVELCROSSING +belowground = IfcFacilityPartCommonTypeEnum.BELOWGROUND +substructure = IfcFacilityPartCommonTypeEnum.SUBSTRUCTURE +terminal = IfcFacilityPartCommonTypeEnum.TERMINAL +superstructure = IfcFacilityPartCommonTypeEnum.SUPERSTRUCTURE +userdefined = IfcFacilityPartCommonTypeEnum.USERDEFINED +notdefined = IfcFacilityPartCommonTypeEnum.NOTDEFINED IfcFacilityUsageEnum = enum_namespace() -lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = IfcFacilityUsageEnum.LATERAL +region = IfcFacilityUsageEnum.REGION +vertical = IfcFacilityUsageEnum.VERTICAL +longitudinal = IfcFacilityUsageEnum.LONGITUDINAL +userdefined = IfcFacilityUsageEnum.USERDEFINED +notdefined = IfcFacilityUsageEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = IfcFlowDirectionEnum.SOURCE +sink = IfcFlowDirectionEnum.SINK +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +combined = IfcFlowInstrumentTypeEnum.COMBINED +voltmeter = IfcFlowInstrumentTypeEnum.VOLTMETER +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = IfcFurnitureTypeEnum.CHAIR +table = IfcFurnitureTypeEnum.TABLE +desk = IfcFurnitureTypeEnum.DESK +bed = IfcFurnitureTypeEnum.BED +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +technicalcabinet = IfcFurnitureTypeEnum.TECHNICALCABINET +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = IfcGeographicElementTypeEnum.TERRAIN +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = IfcGridTypeEnum.RECTANGULAR +radial = IfcGridTypeEnum.RADIAL +triangular = IfcGridTypeEnum.TRIANGULAR +irregular = IfcGridTypeEnum.IRREGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +turnoutheating = IfcHeatExchangerTypeEnum.TURNOUTHEATING +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcImpactProtectionDeviceTypeEnum = enum_namespace() -crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +crashcushion = IfcImpactProtectionDeviceTypeEnum.CRASHCUSHION +dampingsystem = IfcImpactProtectionDeviceTypeEnum.DAMPINGSYSTEM +fender = IfcImpactProtectionDeviceTypeEnum.FENDER +bumper = IfcImpactProtectionDeviceTypeEnum.BUMPER +userdefined = IfcImpactProtectionDeviceTypeEnum.USERDEFINED +notdefined = IfcImpactProtectionDeviceTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = IfcInternalOrExternalEnum.INTERNAL +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = IfcKnotType.UNIFORM_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLiquidTerminalTypeEnum = enum_namespace() -loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +loadingarm = IfcLiquidTerminalTypeEnum.LOADINGARM +hosereel = IfcLiquidTerminalTypeEnum.HOSEREEL +userdefined = IfcLiquidTerminalTypeEnum.USERDEFINED +notdefined = IfcLiquidTerminalTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR IfcMarineFacilityTypeEnum = enum_namespace() -canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -embankment = express_getattr(IfcMarineFacilityTypeEnum, 'EMBANKMENT', INDETERMINATE) -launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +canal = IfcMarineFacilityTypeEnum.CANAL +waterwayshiplift = IfcMarineFacilityTypeEnum.WATERWAYSHIPLIFT +embankment = IfcMarineFacilityTypeEnum.EMBANKMENT +launchrecovery = IfcMarineFacilityTypeEnum.LAUNCHRECOVERY +marinedefence = IfcMarineFacilityTypeEnum.MARINEDEFENCE +hydrolift = IfcMarineFacilityTypeEnum.HYDROLIFT +shipyard = IfcMarineFacilityTypeEnum.SHIPYARD +shiplift = IfcMarineFacilityTypeEnum.SHIPLIFT +port = IfcMarineFacilityTypeEnum.PORT +quay = IfcMarineFacilityTypeEnum.QUAY +floatingdock = IfcMarineFacilityTypeEnum.FLOATINGDOCK +navigationalchannel = IfcMarineFacilityTypeEnum.NAVIGATIONALCHANNEL +breakwater = IfcMarineFacilityTypeEnum.BREAKWATER +drydock = IfcMarineFacilityTypeEnum.DRYDOCK +jetty = IfcMarineFacilityTypeEnum.JETTY +shiplock = IfcMarineFacilityTypeEnum.SHIPLOCK +barrierbeach = IfcMarineFacilityTypeEnum.BARRIERBEACH +slipway = IfcMarineFacilityTypeEnum.SLIPWAY +waterway = IfcMarineFacilityTypeEnum.WATERWAY +userdefined = IfcMarineFacilityTypeEnum.USERDEFINED +notdefined = IfcMarineFacilityTypeEnum.NOTDEFINED IfcMarinePartTypeEnum = enum_namespace() -crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -storage = express_getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) -approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +crest = IfcMarinePartTypeEnum.CREST +manufacturing = IfcMarinePartTypeEnum.MANUFACTURING +lowwaterline = IfcMarinePartTypeEnum.LOWWATERLINE +core = IfcMarinePartTypeEnum.CORE +waterfield = IfcMarinePartTypeEnum.WATERFIELD +cill_level = IfcMarinePartTypeEnum.CILL_LEVEL +berthingstructure = IfcMarinePartTypeEnum.BERTHINGSTRUCTURE +copelevel = IfcMarinePartTypeEnum.COPELEVEL +chamber = IfcMarinePartTypeEnum.CHAMBER +storage = IfcMarinePartTypeEnum.STORAGE +approachchannel = IfcMarinePartTypeEnum.APPROACHCHANNEL +vehicleservicing = IfcMarinePartTypeEnum.VEHICLESERVICING +shiptransfer = IfcMarinePartTypeEnum.SHIPTRANSFER +gatehead = IfcMarinePartTypeEnum.GATEHEAD +gudingstructure = IfcMarinePartTypeEnum.GUDINGSTRUCTURE +belowwaterline = IfcMarinePartTypeEnum.BELOWWATERLINE +weatherside = IfcMarinePartTypeEnum.WEATHERSIDE +landfield = IfcMarinePartTypeEnum.LANDFIELD +protection = IfcMarinePartTypeEnum.PROTECTION +leewardside = IfcMarinePartTypeEnum.LEEWARDSIDE +abovewaterline = IfcMarinePartTypeEnum.ABOVEWATERLINE +anchorage = IfcMarinePartTypeEnum.ANCHORAGE +navigationalarea = IfcMarinePartTypeEnum.NAVIGATIONALAREA +highwaterline = IfcMarinePartTypeEnum.HIGHWATERLINE +userdefined = IfcMarinePartTypeEnum.USERDEFINED +notdefined = IfcMarinePartTypeEnum.NOTDEFINED IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +rivet = IfcMechanicalFastenerTypeEnum.RIVET +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +railjoint = IfcMechanicalFastenerTypeEnum.RAILJOINT +railfastening = IfcMechanicalFastenerTypeEnum.RAILFASTENING +chain = IfcMechanicalFastenerTypeEnum.CHAIN +rope = IfcMechanicalFastenerTypeEnum.ROPE +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stringer = IfcMemberTypeEnum.STRINGER +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +suspender = IfcMemberTypeEnum.SUSPENDER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +structuralcable = IfcMemberTypeEnum.STRUCTURALCABLE +tiebar = IfcMemberTypeEnum.TIEBAR +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -remote_radio_unit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) -accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +e_utran_node_b = IfcMobileTelecommunicationsApplianceTypeEnum.E_UTRAN_NODE_B +remote_radio_unit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTE_RADIO_UNIT +accesspoint = IfcMobileTelecommunicationsApplianceTypeEnum.ACCESSPOINT +basetransceiverstation = IfcMobileTelecommunicationsApplianceTypeEnum.BASETRANSCEIVERSTATION +remoteunit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTEUNIT +basebandunit = IfcMobileTelecommunicationsApplianceTypeEnum.BASEBANDUNIT +masterunit = IfcMobileTelecommunicationsApplianceTypeEnum.MASTERUNIT +userdefined = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcMobileTelecommunicationsApplianceTypeEnum.NOTDEFINED IfcMooringDeviceTypeEnum = enum_namespace() -linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +linetensioner = IfcMooringDeviceTypeEnum.LINETENSIONER +magneticdevice = IfcMooringDeviceTypeEnum.MAGNETICDEVICE +mooringhooks = IfcMooringDeviceTypeEnum.MOORINGHOOKS +vacuumdevice = IfcMooringDeviceTypeEnum.VACUUMDEVICE +bollard = IfcMooringDeviceTypeEnum.BOLLARD +userdefined = IfcMooringDeviceTypeEnum.USERDEFINED +notdefined = IfcMooringDeviceTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNavigationElementTypeEnum = enum_namespace() -beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) -buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) -userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +beacon = IfcNavigationElementTypeEnum.BEACON +buoy = IfcNavigationElementTypeEnum.BUOY +userdefined = IfcNavigationElementTypeEnum.USERDEFINED +notdefined = IfcNavigationElementTypeEnum.NOTDEFINED IfcNullStyle = enum_namespace() -null = express_getattr(IfcNullStyle, 'NULL', INDETERMINATE) +null = IfcNullStyle.NULL IfcObjectTypeEnum = enum_namespace() -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = IfcObjectTypeEnum.PRODUCT +process = IfcObjectTypeEnum.PROCESS +control = IfcObjectTypeEnum.CONTROL +resource = IfcObjectTypeEnum.RESOURCE +actor = IfcObjectTypeEnum.ACTOR +group = IfcObjectTypeEnum.GROUP +project = IfcObjectTypeEnum.PROJECT +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +driven = IfcPileTypeEnum.DRIVEN +jetgrouting = IfcPileTypeEnum.JETGROUTING +cohesion = IfcPileTypeEnum.COHESION +friction = IfcPileTypeEnum.FRICTION +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +sheet = IfcPlateTypeEnum.SHEET +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +base_plate = IfcPlateTypeEnum.BASE_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = IfcProfileTypeEnum.CURVE +area = IfcProfileTypeEnum.AREA IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +anti_arcing_device = IfcProtectiveDeviceTypeEnum.ANTI_ARCING_DEVICE +sparkgap = IfcProtectiveDeviceTypeEnum.SPARKGAP +voltagelimiter = IfcProtectiveDeviceTypeEnum.VOLTAGELIMITER +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailTypeEnum = enum_namespace() -rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +rackrail = IfcRailTypeEnum.RACKRAIL +blade = IfcRailTypeEnum.BLADE +guardrail = IfcRailTypeEnum.GUARDRAIL +stockrail = IfcRailTypeEnum.STOCKRAIL +checkrail = IfcRailTypeEnum.CHECKRAIL +rail = IfcRailTypeEnum.RAIL +userdefined = IfcRailTypeEnum.USERDEFINED +notdefined = IfcRailTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = IfcRailingTypeEnum.HANDRAIL +guardrail = IfcRailingTypeEnum.GUARDRAIL +balustrade = IfcRailingTypeEnum.BALUSTRADE +fence = IfcRailingTypeEnum.FENCE +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRailwayPartTypeEnum = enum_namespace() -trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -plaintracksupestructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) -linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackstructure = IfcRailwayPartTypeEnum.TRACKSTRUCTURE +trackstructurepart = IfcRailwayPartTypeEnum.TRACKSTRUCTUREPART +linesidestructurepart = IfcRailwayPartTypeEnum.LINESIDESTRUCTUREPART +dilatationsuperstructure = IfcRailwayPartTypeEnum.DILATATIONSUPERSTRUCTURE +plaintracksupestructure = IfcRailwayPartTypeEnum.PLAINTRACKSUPESTRUCTURE +linesidestructure = IfcRailwayPartTypeEnum.LINESIDESTRUCTURE +superstructure = IfcRailwayPartTypeEnum.SUPERSTRUCTURE +turnoutsuperstructure = IfcRailwayPartTypeEnum.TURNOUTSUPERSTRUCTURE +userdefined = IfcRailwayPartTypeEnum.USERDEFINED +notdefined = IfcRailwayPartTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcRampFlightTypeEnum.STRAIGHT +spiral = IfcRampFlightTypeEnum.SPIRAL +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = IfcRecurrenceTypeEnum.DAILY +weekly = IfcRecurrenceTypeEnum.WEEKLY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = IfcReferentTypeEnum.KILOPOINT +milepoint = IfcReferentTypeEnum.MILEPOINT +station = IfcReferentTypeEnum.STATION +referencemarker = IfcReferentTypeEnum.REFERENCEMARKER +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcedSoilTypeEnum = enum_namespace() -surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +surchargepreloaded = IfcReinforcedSoilTypeEnum.SURCHARGEPRELOADED +verticallydrained = IfcReinforcedSoilTypeEnum.VERTICALLYDRAINED +dynamicallycompacted = IfcReinforcedSoilTypeEnum.DYNAMICALLYCOMPACTED +replaced = IfcReinforcedSoilTypeEnum.REPLACED +rollercompacted = IfcReinforcedSoilTypeEnum.ROLLERCOMPACTED +grouted = IfcReinforcedSoilTypeEnum.GROUTED +userdefined = IfcReinforcedSoilTypeEnum.USERDEFINED +notdefined = IfcReinforcedSoilTypeEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = IfcReinforcingBarRoleEnum.MAIN +shear = IfcReinforcingBarRoleEnum.SHEAR +ligature = IfcReinforcingBarRoleEnum.LIGATURE +stud = IfcReinforcingBarRoleEnum.STUD +punching = IfcReinforcingBarRoleEnum.PUNCHING +edge = IfcReinforcingBarRoleEnum.EDGE +ring = IfcReinforcingBarRoleEnum.RING +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +stud = IfcReinforcingBarTypeEnum.STUD +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoadPartTypeEnum = enum_namespace() -roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +roadsidepart = IfcRoadPartTypeEnum.ROADSIDEPART +bus_stop = IfcRoadPartTypeEnum.BUS_STOP +hardshoulder = IfcRoadPartTypeEnum.HARDSHOULDER +intersection = IfcRoadPartTypeEnum.INTERSECTION +passingbay = IfcRoadPartTypeEnum.PASSINGBAY +roadwayplateau = IfcRoadPartTypeEnum.ROADWAYPLATEAU +roadside = IfcRoadPartTypeEnum.ROADSIDE +refugeisland = IfcRoadPartTypeEnum.REFUGEISLAND +tollplaza = IfcRoadPartTypeEnum.TOLLPLAZA +centralreserve = IfcRoadPartTypeEnum.CENTRALRESERVE +sidewalk = IfcRoadPartTypeEnum.SIDEWALK +parkingbay = IfcRoadPartTypeEnum.PARKINGBAY +railwaycrossing = IfcRoadPartTypeEnum.RAILWAYCROSSING +pedestrian_crossing = IfcRoadPartTypeEnum.PEDESTRIAN_CROSSING +softshoulder = IfcRoadPartTypeEnum.SOFTSHOULDER +bicyclecrossing = IfcRoadPartTypeEnum.BICYCLECROSSING +centralisland = IfcRoadPartTypeEnum.CENTRALISLAND +shoulder = IfcRoadPartTypeEnum.SHOULDER +trafficlane = IfcRoadPartTypeEnum.TRAFFICLANE +roadsegment = IfcRoadPartTypeEnum.ROADSEGMENT +roundabout = IfcRoadPartTypeEnum.ROUNDABOUT +layby = IfcRoadPartTypeEnum.LAYBY +carriageway = IfcRoadPartTypeEnum.CARRIAGEWAY +trafficisland = IfcRoadPartTypeEnum.TRAFFICISLAND +userdefined = IfcRoadPartTypeEnum.USERDEFINED +notdefined = IfcRoadPartTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = IfcRoleEnum.SUPPLIER +manufacturer = IfcRoleEnum.MANUFACTURER +contractor = IfcRoleEnum.CONTRACTOR +subcontractor = IfcRoleEnum.SUBCONTRACTOR +architect = IfcRoleEnum.ARCHITECT +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +costengineer = IfcRoleEnum.COSTENGINEER +client = IfcRoleEnum.CLIENT +buildingowner = IfcRoleEnum.BUILDINGOWNER +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +projectmanager = IfcRoleEnum.PROJECTMANAGER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +civilengineer = IfcRoleEnum.CIVILENGINEER +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +engineer = IfcRoleEnum.ENGINEER +owner = IfcRoleEnum.OWNER +consultant = IfcRoleEnum.CONSULTANT +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +reseller = IfcRoleEnum.RESELLER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = IfcSIPrefix.EXA +peta = IfcSIPrefix.PETA +tera = IfcSIPrefix.TERA +giga = IfcSIPrefix.GIGA +mega = IfcSIPrefix.MEGA +kilo = IfcSIPrefix.KILO +hecto = IfcSIPrefix.HECTO +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +centi = IfcSIPrefix.CENTI +milli = IfcSIPrefix.MILLI +micro = IfcSIPrefix.MICRO +nano = IfcSIPrefix.NANO +pico = IfcSIPrefix.PICO +femto = IfcSIPrefix.FEMTO +atto = IfcSIPrefix.ATTO IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = IfcSectionTypeEnum.UNIFORM +tapered = IfcSectionTypeEnum.TAPERED IfcSensorTypeEnum = enum_namespace() -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = IfcSensorTypeEnum.COSENSOR +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +earthquakesensor = IfcSensorTypeEnum.EARTHQUAKESENSOR +foreignobjectdetectionsensor = IfcSensorTypeEnum.FOREIGNOBJECTDETECTIONSENSOR +obstaclesensor = IfcSensorTypeEnum.OBSTACLESENSOR +rainsensor = IfcSensorTypeEnum.RAINSENSOR +snowdepthsensor = IfcSensorTypeEnum.SNOWDEPTHSENSOR +trainsensor = IfcSensorTypeEnum.TRAINSENSOR +turnoutclosuresensor = IfcSensorTypeEnum.TURNOUTCLOSURESENSOR +wheelsensor = IfcSensorTypeEnum.WHEELSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = IfcSequenceEnum.START_START +start_finish = IfcSequenceEnum.START_FINISH +finish_start = IfcSequenceEnum.FINISH_START +finish_finish = IfcSequenceEnum.FINISH_FINISH +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +awning = IfcShadingDeviceTypeEnum.AWNING +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSignTypeEnum = enum_namespace() -marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = IfcSignTypeEnum.MARKER +pictoral = IfcSignTypeEnum.PICTORAL +mirror = IfcSignTypeEnum.MIRROR +userdefined = IfcSignTypeEnum.USERDEFINED +notdefined = IfcSignTypeEnum.NOTDEFINED IfcSignalTypeEnum = enum_namespace() -visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +visual = IfcSignalTypeEnum.VISUAL +audio = IfcSignalTypeEnum.AUDIO +mixed = IfcSignalTypeEnum.MIXED +userdefined = IfcSignalTypeEnum.USERDEFINED +notdefined = IfcSignalTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME IfcSlabTypeEnum = enum_namespace() -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = IfcSlabTypeEnum.FLOOR +roof = IfcSlabTypeEnum.ROOF +landing = IfcSlabTypeEnum.LANDING +baseslab = IfcSlabTypeEnum.BASESLAB +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +paving = IfcSlabTypeEnum.PAVING +wearing = IfcSlabTypeEnum.WEARING +sidewalk = IfcSlabTypeEnum.SIDEWALK +trackslab = IfcSlabTypeEnum.TRACKSLAB +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = IfcSpaceTypeEnum.SPACE +parking = IfcSpaceTypeEnum.PARKING +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +external = IfcSpaceTypeEnum.EXTERNAL +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +reservation = IfcSpatialZoneTypeEnum.RESERVATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +spiral = IfcStairFlightTypeEnum.SPIRAL +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +ladder = IfcStairTypeEnum.LADDER +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = IfcStateEnum.READWRITE +readonly = IfcStateEnum.READONLY +locked = IfcStateEnum.LOCKED +readwritelocked = IfcStateEnum.READWRITELOCKED +readonlylocked = IfcStateEnum.READONLYLOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +cable = IfcStructuralCurveMemberTypeEnum.CABLE +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralSurfaceActivityTypeEnum.CONST +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = IfcSurfaceFeatureTypeEnum.MARK +tag = IfcSurfaceFeatureTypeEnum.TAG +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +defect = IfcSurfaceFeatureTypeEnum.DEFECT +hatchmarking = IfcSurfaceFeatureTypeEnum.HATCHMARKING +linemarking = IfcSurfaceFeatureTypeEnum.LINEMARKING +pavementsurfacemarking = IfcSurfaceFeatureTypeEnum.PAVEMENTSURFACEMARKING +symbolmarking = IfcSurfaceFeatureTypeEnum.SYMBOLMARKING +nonskidsurfacing = IfcSurfaceFeatureTypeEnum.NONSKIDSURFACING +rumblestrip = IfcSurfaceFeatureTypeEnum.RUMBLESTRIP +transverserumblestrip = IfcSurfaceFeatureTypeEnum.TRANSVERSERUMBLESTRIP +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = IfcSurfaceSide.POSITIVE +negative = IfcSurfaceSide.NEGATIVE +both = IfcSurfaceSide.BOTH IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +relay = IfcSwitchingDeviceTypeEnum.RELAY +start_and_stop_equipment = IfcSwitchingDeviceTypeEnum.START_AND_STOP_EQUIPMENT +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +subrack = IfcSystemFurnitureElementTypeEnum.SUBRACK +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +oilretentiontray = IfcTankTypeEnum.OILRETENTIONTRAY +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = IfcTaskTypeEnum.ATTENDANCE +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = IfcTendonConduitTypeEnum.DUCT +coupler = IfcTendonConduitTypeEnum.COUPLER +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +diabolo = IfcTendonConduitTypeEnum.DIABOLO +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP +down = IfcTextPath.DOWN IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTrackElementTypeEnum = enum_namespace() -trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackendofalignment = IfcTrackElementTypeEnum.TRACKENDOFALIGNMENT +blockingdevice = IfcTrackElementTypeEnum.BLOCKINGDEVICE +vehiclestop = IfcTrackElementTypeEnum.VEHICLESTOP +sleeper = IfcTrackElementTypeEnum.SLEEPER +half_set_of_blades = IfcTrackElementTypeEnum.HALF_SET_OF_BLADES +speedregulator = IfcTrackElementTypeEnum.SPEEDREGULATOR +derailer = IfcTrackElementTypeEnum.DERAILER +frog = IfcTrackElementTypeEnum.FROG +userdefined = IfcTrackElementTypeEnum.USERDEFINED +notdefined = IfcTrackElementTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +chopper = IfcTransformerTypeEnum.CHOPPER +combined = IfcTransformerTypeEnum.COMBINED +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = IfcTransitionCode.DISCONTINUOUS +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE IfcTransitionCurveType = enum_namespace() -biquadraticparabola = express_getattr(IfcTransitionCurveType, 'BIQUADRATICPARABOLA', INDETERMINATE) -blosscurve = express_getattr(IfcTransitionCurveType, 'BLOSSCURVE', INDETERMINATE) -clothoidcurve = express_getattr(IfcTransitionCurveType, 'CLOTHOIDCURVE', INDETERMINATE) -cosinecurve = express_getattr(IfcTransitionCurveType, 'COSINECURVE', INDETERMINATE) -cubicparabola = express_getattr(IfcTransitionCurveType, 'CUBICPARABOLA', INDETERMINATE) -sinecurve = express_getattr(IfcTransitionCurveType, 'SINECURVE', INDETERMINATE) +biquadraticparabola = IfcTransitionCurveType.BIQUADRATICPARABOLA +blosscurve = IfcTransitionCurveType.BLOSSCURVE +clothoidcurve = IfcTransitionCurveType.CLOTHOIDCURVE +cosinecurve = IfcTransitionCurveType.COSINECURVE +cubicparabola = IfcTransitionCurveType.CUBICPARABOLA +sinecurve = IfcTransitionCurveType.SINECURVE IfcTransportElementFixedTypeEnum = enum_namespace() -elevator = express_getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = express_getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = IfcTransportElementFixedTypeEnum.ELEVATOR +escalator = IfcTransportElementFixedTypeEnum.ESCALATOR +movingwalkway = IfcTransportElementFixedTypeEnum.MOVINGWALKWAY +craneway = IfcTransportElementFixedTypeEnum.CRANEWAY +liftinggear = IfcTransportElementFixedTypeEnum.LIFTINGGEAR +userdefined = IfcTransportElementFixedTypeEnum.USERDEFINED +notdefined = IfcTransportElementFixedTypeEnum.NOTDEFINED IfcTransportElementNonFixedTypeEnum = enum_namespace() -vehicle = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) -vehicletracked = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -rollingstock = express_getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehiclewheeled = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -vehicleair = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) -cargo = express_getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) -vehiclemarine = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +vehicle = IfcTransportElementNonFixedTypeEnum.VEHICLE +vehicletracked = IfcTransportElementNonFixedTypeEnum.VEHICLETRACKED +rollingstock = IfcTransportElementNonFixedTypeEnum.ROLLINGSTOCK +vehiclewheeled = IfcTransportElementNonFixedTypeEnum.VEHICLEWHEELED +vehicleair = IfcTransportElementNonFixedTypeEnum.VEHICLEAIR +cargo = IfcTransportElementNonFixedTypeEnum.CARGO +vehiclemarine = IfcTransportElementNonFixedTypeEnum.VEHICLEMARINE +userdefined = IfcTransportElementNonFixedTypeEnum.USERDEFINED +notdefined = IfcTransportElementNonFixedTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +combined = IfcUnitaryControlElementTypeEnum.COMBINED +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +viscous = IfcVibrationDamperTypeEnum.VISCOUS +rubber = IfcVibrationDamperTypeEnum.RUBBER +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +base = IfcVibrationIsolatorTypeEnum.BASE +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +notch = IfcVoidingFeatureTypeEnum.NOTCH +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +edge = IfcVoidingFeatureTypeEnum.EDGE +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +polygonal = IfcWallTypeEnum.POLYGONAL +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +retainingwall = IfcWallTypeEnum.RETAININGWALL +wavewall = IfcWallTypeEnum.WAVEWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +bottom = IfcWindowPanelPositionEnum.BOTTOM +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +plastic = IfcWindowStyleConstructionEnum.PLASTIC +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = IfcWindowTypeEnum.WINDOW +skylight = IfcWindowTypeEnum.SKYLIGHT +lightdome = IfcWindowTypeEnum.LIGHTDOME +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_RC2', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py index 02c8a5a37d..38e4f8b448 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC3.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,2373 +152,2373 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +snow_s = IfcActionSourceTypeEnum.SNOW_S +wind_w = IfcActionSourceTypeEnum.WIND_W +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +fire = IfcActionSourceTypeEnum.FIRE +impulse = IfcActionSourceTypeEnum.IMPULSE +impact = IfcActionSourceTypeEnum.IMPACT +transport = IfcActionSourceTypeEnum.TRANSPORT +erection = IfcActionSourceTypeEnum.ERECTION +propping = IfcActionSourceTypeEnum.PROPPING +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +creep = IfcActionSourceTypeEnum.CREEP +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +ice = IfcActionSourceTypeEnum.ICE +current = IfcActionSourceTypeEnum.CURRENT +wave = IfcActionSourceTypeEnum.WAVE +rain = IfcActionSourceTypeEnum.RAIN +brakes = IfcActionSourceTypeEnum.BRAKES +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +home = IfcAddressTypeEnum.HOME +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +railwaycrocodile = IfcAlarmTypeEnum.RAILWAYCROCODILE +railwaydetonator = IfcAlarmTypeEnum.RAILWAYDETONATOR +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentCantSegmentTypeEnum = enum_namespace() -constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +constantcant = IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT +lineartransition = IfcAlignmentCantSegmentTypeEnum.LINEARTRANSITION +helmertcurve = IfcAlignmentCantSegmentTypeEnum.HELMERTCURVE +blosscurve = IfcAlignmentCantSegmentTypeEnum.BLOSSCURVE +cosinecurve = IfcAlignmentCantSegmentTypeEnum.COSINECURVE +sinecurve = IfcAlignmentCantSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentCantSegmentTypeEnum.VIENNESEBEND IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cubicspiral = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBICSPIRAL', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +line = IfcAlignmentHorizontalSegmentTypeEnum.LINE +circulararc = IfcAlignmentHorizontalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentHorizontalSegmentTypeEnum.CLOTHOID +cubic = IfcAlignmentHorizontalSegmentTypeEnum.CUBIC +helmertcurve = IfcAlignmentHorizontalSegmentTypeEnum.HELMERTCURVE +blosscurve = IfcAlignmentHorizontalSegmentTypeEnum.BLOSSCURVE +cubicspiral = IfcAlignmentHorizontalSegmentTypeEnum.CUBICSPIRAL +cosinecurve = IfcAlignmentHorizontalSegmentTypeEnum.COSINECURVE +sinecurve = IfcAlignmentHorizontalSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentHorizontalSegmentTypeEnum.VIENNESEBEND IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = IfcAlignmentVerticalSegmentTypeEnum.CONSTANTGRADIENT +circulararc = IfcAlignmentVerticalSegmentTypeEnum.CIRCULARARC +parabolicarc = IfcAlignmentVerticalSegmentTypeEnum.PARABOLICARC +clothoid = IfcAlignmentVerticalSegmentTypeEnum.CLOTHOID IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcAnnotationTypeEnum = enum_namespace() -assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +assumedpoint = IfcAnnotationTypeEnum.ASSUMEDPOINT +asbuiltarea = IfcAnnotationTypeEnum.ASBUILTAREA +asbuiltline = IfcAnnotationTypeEnum.ASBUILTLINE +non_physical_signal = IfcAnnotationTypeEnum.NON_PHYSICAL_SIGNAL +assumedline = IfcAnnotationTypeEnum.ASSUMEDLINE +widthevent = IfcAnnotationTypeEnum.WIDTHEVENT +assumedarea = IfcAnnotationTypeEnum.ASSUMEDAREA +superelevationevent = IfcAnnotationTypeEnum.SUPERELEVATIONEVENT +asbuiltpoint = IfcAnnotationTypeEnum.ASBUILTPOINT +userdefined = IfcAnnotationTypeEnum.USERDEFINED +notdefined = IfcAnnotationTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = IfcAssemblyPlaceEnum.SITE +factory = IfcAssemblyPlaceEnum.FACTORY +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -railway_communication_terminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RAILWAY_COMMUNICATION_TERMINAL', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +railway_communication_terminal = IfcAudioVisualApplianceTypeEnum.RAILWAY_COMMUNICATION_TERMINAL +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +joist = IfcBeamTypeEnum.JOIST +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +lintel = IfcBeamTypeEnum.LINTEL +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +piercap = IfcBeamTypeEnum.PIERCAP +hatstone = IfcBeamTypeEnum.HATSTONE +cornice = IfcBeamTypeEnum.CORNICE +edgebeam = IfcBeamTypeEnum.EDGEBEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = IfcBearingTypeDisplacementEnum.FIXED_MOVEMENT +guided_longitudinal = IfcBearingTypeDisplacementEnum.GUIDED_LONGITUDINAL +guided_transversal = IfcBearingTypeDisplacementEnum.GUIDED_TRANSVERSAL +free_movement = IfcBearingTypeDisplacementEnum.FREE_MOVEMENT +notdefined = IfcBearingTypeDisplacementEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +spherical = IfcBearingTypeEnum.SPHERICAL +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +pot = IfcBearingTypeEnum.POT +guide = IfcBearingTypeEnum.GUIDE +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +disk = IfcBearingTypeEnum.DISK +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +equalto = IfcBenchmarkEnum.EQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +includes = IfcBenchmarkEnum.INCLUDES +notincludes = IfcBenchmarkEnum.NOTINCLUDES +includedin = IfcBenchmarkEnum.INCLUDEDIN +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN IfcBoilerTypeEnum = enum_namespace() -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = IfcBoilerTypeEnum.WATER +steam = IfcBoilerTypeEnum.STEAM +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = IfcBooleanOperator.UNION +intersection = IfcBooleanOperator.INTERSECTION +difference = IfcBooleanOperator.DIFFERENCE IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +apron = IfcBuildingElementPartTypeEnum.APRON +armourunit = IfcBuildingElementPartTypeEnum.ARMOURUNIT +safetycage = IfcBuildingElementPartTypeEnum.SAFETYCAGE +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +reinforcing = IfcBuildingSystemTypeEnum.REINFORCING +prestressing = IfcBuildingSystemTypeEnum.PRESTRESSING +erosionprevention = IfcBuildingSystemTypeEnum.EROSIONPREVENTION +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBuiltSystemTypeEnum = enum_namespace() -reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -mooringsystem = express_getattr(IfcBuiltSystemTypeEnum, 'MOORINGSYSTEM', INDETERMINATE) -transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +reinforcing = IfcBuiltSystemTypeEnum.REINFORCING +mooring = IfcBuiltSystemTypeEnum.MOORING +outershell = IfcBuiltSystemTypeEnum.OUTERSHELL +trackcircuit = IfcBuiltSystemTypeEnum.TRACKCIRCUIT +erosionprevention = IfcBuiltSystemTypeEnum.EROSIONPREVENTION +foundation = IfcBuiltSystemTypeEnum.FOUNDATION +loadbearing = IfcBuiltSystemTypeEnum.LOADBEARING +shading = IfcBuiltSystemTypeEnum.SHADING +fenestration = IfcBuiltSystemTypeEnum.FENESTRATION +mooringsystem = IfcBuiltSystemTypeEnum.MOORINGSYSTEM +transport = IfcBuiltSystemTypeEnum.TRANSPORT +prestressing = IfcBuiltSystemTypeEnum.PRESTRESSING +userdefined = IfcBuiltSystemTypeEnum.USERDEFINED +notdefined = IfcBuiltSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +cross = IfcCableCarrierFittingTypeEnum.CROSS +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +cablebracket = IfcCableCarrierSegmentTypeEnum.CABLEBRACKET +catenarywire = IfcCableCarrierSegmentTypeEnum.CATENARYWIRE +dropper = IfcCableCarrierSegmentTypeEnum.DROPPER +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +fanout = IfcCableFittingTypeEnum.FANOUT +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) -fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) -fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) -opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) -stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) -wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +contactwiresegment = IfcCableSegmentTypeEnum.CONTACTWIRESEGMENT +fibersegment = IfcCableSegmentTypeEnum.FIBERSEGMENT +fibertube = IfcCableSegmentTypeEnum.FIBERTUBE +opticalcablesegment = IfcCableSegmentTypeEnum.OPTICALCABLESEGMENT +stitchwire = IfcCableSegmentTypeEnum.STITCHWIRE +wirepairsegment = IfcCableSegmentTypeEnum.WIREPAIRSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = IfcCaissonFoundationTypeEnum.WELL +caisson = IfcCaissonFoundationTypeEnum.CAISSON +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = IfcChangeActionEnum.NOCHANGE +modified = IfcChangeActionEnum.MODIFIED +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +watercooled = IfcChillerTypeEnum.WATERCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pilaster = IfcColumnTypeEnum.PILASTER +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -intelligent_peripheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENT_PERIPHERAL', INDETERMINATE) -ip_network_equipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IP_NETWORK_EQUIPMENT', INDETERMINATE) -optical_network_unit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICAL_NETWORK_UNIT', INDETERMINATE) -telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) -telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) -transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) -transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) -transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +automaton = IfcCommunicationsApplianceTypeEnum.AUTOMATON +intelligent_peripheral = IfcCommunicationsApplianceTypeEnum.INTELLIGENT_PERIPHERAL +ip_network_equipment = IfcCommunicationsApplianceTypeEnum.IP_NETWORK_EQUIPMENT +optical_network_unit = IfcCommunicationsApplianceTypeEnum.OPTICAL_NETWORK_UNIT +telecommand = IfcCommunicationsApplianceTypeEnum.TELECOMMAND +telephonyexchange = IfcCommunicationsApplianceTypeEnum.TELEPHONYEXCHANGE +transitioncomponent = IfcCommunicationsApplianceTypeEnum.TRANSITIONCOMPONENT +transponder = IfcCommunicationsApplianceTypeEnum.TRANSPONDER +transportequipment = IfcCommunicationsApplianceTypeEnum.TRANSPORTEQUIPMENT +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = IfcCompressorTypeEnum.DYNAMIC +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rotary = IfcCompressorTypeEnum.ROTARY +scroll = IfcCompressorTypeEnum.SCROLL +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +booster = IfcCompressorTypeEnum.BOOSTER +opentype = IfcCompressorTypeEnum.OPENTYPE +hermetic = IfcCompressorTypeEnum.HERMETIC +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +twinscrew = IfcCompressorTypeEnum.TWINSCREW +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +atend = IfcConnectionTypeEnum.ATEND +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +advisory = IfcConstraintEnum.ADVISORY +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +multiposition = IfcControllerTypeEnum.MULTIPOSITION +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcConveyorSegmentTypeEnum = enum_namespace() -chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +chuteconveyor = IfcConveyorSegmentTypeEnum.CHUTECONVEYOR +beltconveyor = IfcConveyorSegmentTypeEnum.BELTCONVEYOR +screwconveyor = IfcConveyorSegmentTypeEnum.SCREWCONVEYOR +bucketconveyor = IfcConveyorSegmentTypeEnum.BUCKETCONVEYOR +userdefined = IfcConveyorSegmentTypeEnum.USERDEFINED +notdefined = IfcConveyorSegmentTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +tender = IfcCostScheduleTypeEnum.TENDER +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCourseTypeEnum = enum_namespace() -armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = IfcCourseTypeEnum.ARMOUR +filter = IfcCourseTypeEnum.FILTER +ballastbed = IfcCourseTypeEnum.BALLASTBED +core = IfcCourseTypeEnum.CORE +pavement = IfcCourseTypeEnum.PAVEMENT +protection = IfcCourseTypeEnum.PROTECTION +userdefined = IfcCourseTypeEnum.USERDEFINED +notdefined = IfcCourseTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +flooring = IfcCoveringTypeEnum.FLOORING +cladding = IfcCoveringTypeEnum.CLADDING +roofing = IfcCoveringTypeEnum.ROOFING +molding = IfcCoveringTypeEnum.MOLDING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +sleeving = IfcCoveringTypeEnum.SLEEVING +wrapping = IfcCoveringTypeEnum.WRAPPING +coping = IfcCoveringTypeEnum.COPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = IfcDirectionSenseEnum.POSITIVE +negative = IfcDirectionSenseEnum.NEGATIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) -point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) -rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +cablearranger = IfcDiscreteAccessoryTypeEnum.CABLEARRANGER +insulator = IfcDiscreteAccessoryTypeEnum.INSULATOR +lock = IfcDiscreteAccessoryTypeEnum.LOCK +tensioningequipment = IfcDiscreteAccessoryTypeEnum.TENSIONINGEQUIPMENT +railpad = IfcDiscreteAccessoryTypeEnum.RAILPAD +slidingchair = IfcDiscreteAccessoryTypeEnum.SLIDINGCHAIR +rail_lubrication = IfcDiscreteAccessoryTypeEnum.RAIL_LUBRICATION +panel_strengthening = IfcDiscreteAccessoryTypeEnum.PANEL_STRENGTHENING +railbrace = IfcDiscreteAccessoryTypeEnum.RAILBRACE +elastic_cushion = IfcDiscreteAccessoryTypeEnum.ELASTIC_CUSHION +soundabsorption = IfcDiscreteAccessoryTypeEnum.SOUNDABSORPTION +pointmachinemountingdevice = IfcDiscreteAccessoryTypeEnum.POINTMACHINEMOUNTINGDEVICE +point_machine_locking_device = IfcDiscreteAccessoryTypeEnum.POINT_MACHINE_LOCKING_DEVICE +rail_mechanical_equipment = IfcDiscreteAccessoryTypeEnum.RAIL_MECHANICAL_EQUIPMENT +birdprotection = IfcDiscreteAccessoryTypeEnum.BIRDPROTECTION +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionBoardTypeEnum = enum_namespace() -switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +switchboard = IfcDistributionBoardTypeEnum.SWITCHBOARD +consumerunit = IfcDistributionBoardTypeEnum.CONSUMERUNIT +motorcontrolcentre = IfcDistributionBoardTypeEnum.MOTORCONTROLCENTRE +distributionframe = IfcDistributionBoardTypeEnum.DISTRIBUTIONFRAME +distributionboard = IfcDistributionBoardTypeEnum.DISTRIBUTIONBOARD +userdefined = IfcDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcDistributionBoardTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +wireless = IfcDistributionPortTypeEnum.WIRELESS +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +catenary_system = IfcDistributionSystemEnum.CATENARY_SYSTEM +overhead_contactline_system = IfcDistributionSystemEnum.OVERHEAD_CONTACTLINE_SYSTEM +return_circuit = IfcDistributionSystemEnum.RETURN_CIRCUIT +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +final = IfcDocumentStatusEnum.FINAL +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = IfcDoorPanelOperationEnum.SWINGING +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +sliding = IfcDoorPanelOperationEnum.SLIDING +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +plastic = IfcDoorStyleConstructionEnum.PLASTIC +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +boom_barrier = IfcDoorTypeEnum.BOOM_BARRIER +turnstile = IfcDoorTypeEnum.TURNSTILE +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_panel_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) -double_panel_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_panel_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_panel_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_panel_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_panel_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) -revolving_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -double_panel_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', INDETERMINATE) -lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) -lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) -lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) -revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +double_panel_single_swing = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING +double_panel_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT +double_panel_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +double_panel_double_swing = IfcDoorTypeOperationEnum.DOUBLE_PANEL_DOUBLE_SWING +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +double_panel_sliding = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SLIDING +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +double_panel_folding = IfcDoorTypeOperationEnum.DOUBLE_PANEL_FOLDING +revolving_horizontal = IfcDoorTypeOperationEnum.REVOLVING_HORIZONTAL +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +double_panel_lifting_vertical = IfcDoorTypeOperationEnum.DOUBLE_PANEL_LIFTING_VERTICAL +lifting_horizontal = IfcDoorTypeOperationEnum.LIFTING_HORIZONTAL +lifting_vertical_left = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_LEFT +lifting_vertical_right = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_RIGHT +revolving_vertical = IfcDoorTypeOperationEnum.REVOLVING_VERTICAL +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcEarthworksCutTypeEnum = enum_namespace() -trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +trench = IfcEarthworksCutTypeEnum.TRENCH +dredging = IfcEarthworksCutTypeEnum.DREDGING +excavation = IfcEarthworksCutTypeEnum.EXCAVATION +overexcavation = IfcEarthworksCutTypeEnum.OVEREXCAVATION +topsoilremoval = IfcEarthworksCutTypeEnum.TOPSOILREMOVAL +stepexcavation = IfcEarthworksCutTypeEnum.STEPEXCAVATION +pavementmilling = IfcEarthworksCutTypeEnum.PAVEMENTMILLING +cut = IfcEarthworksCutTypeEnum.CUT +base_excavation = IfcEarthworksCutTypeEnum.BASE_EXCAVATION +userdefined = IfcEarthworksCutTypeEnum.USERDEFINED +notdefined = IfcEarthworksCutTypeEnum.NOTDEFINED IfcEarthworksFillTypeEnum = enum_namespace() -backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = IfcEarthworksFillTypeEnum.BACKFILL +counterweight = IfcEarthworksFillTypeEnum.COUNTERWEIGHT +subgrade = IfcEarthworksFillTypeEnum.SUBGRADE +embankment = IfcEarthworksFillTypeEnum.EMBANKMENT +transitionsection = IfcEarthworksFillTypeEnum.TRANSITIONSECTION +subgradebed = IfcEarthworksFillTypeEnum.SUBGRADEBED +slopefill = IfcEarthworksFillTypeEnum.SLOPEFILL +userdefined = IfcEarthworksFillTypeEnum.USERDEFINED +notdefined = IfcEarthworksFillTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +capacitor = IfcElectricFlowStorageDeviceTypeEnum.CAPACITOR +compensator = IfcElectricFlowStorageDeviceTypeEnum.COMPENSATOR +inductor = IfcElectricFlowStorageDeviceTypeEnum.INDUCTOR +recharger = IfcElectricFlowStorageDeviceTypeEnum.RECHARGER +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = IfcElectricFlowTreatmentDeviceTypeEnum.ELECTRONICFILTER +userdefined = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowTreatmentDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +relay = IfcElectricTimeControlTypeEnum.RELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +girder = IfcElementAssemblyTypeEnum.GIRDER +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +truss = IfcElementAssemblyTypeEnum.TRUSS +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +mast = IfcElementAssemblyTypeEnum.MAST +signalassembly = IfcElementAssemblyTypeEnum.SIGNALASSEMBLY +grid = IfcElementAssemblyTypeEnum.GRID +shelter = IfcElementAssemblyTypeEnum.SHELTER +supportingassembly = IfcElementAssemblyTypeEnum.SUPPORTINGASSEMBLY +suspensionassembly = IfcElementAssemblyTypeEnum.SUSPENSIONASSEMBLY +traction_switching_assembly = IfcElementAssemblyTypeEnum.TRACTION_SWITCHING_ASSEMBLY +trackpanel = IfcElementAssemblyTypeEnum.TRACKPANEL +turnoutpanel = IfcElementAssemblyTypeEnum.TURNOUTPANEL +dilatationpanel = IfcElementAssemblyTypeEnum.DILATATIONPANEL +rail_mechanical_equipment_assembly = IfcElementAssemblyTypeEnum.RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY +entranceworks = IfcElementAssemblyTypeEnum.ENTRANCEWORKS +sumpbuster = IfcElementAssemblyTypeEnum.SUMPBUSTER +traffic_calming_device = IfcElementAssemblyTypeEnum.TRAFFIC_CALMING_DEVICE +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = IfcEventTypeEnum.STARTEVENT +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFacilityPartCommonTypeEnum = enum_namespace() -segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +segment = IfcFacilityPartCommonTypeEnum.SEGMENT +aboveground = IfcFacilityPartCommonTypeEnum.ABOVEGROUND +junction = IfcFacilityPartCommonTypeEnum.JUNCTION +levelcrossing = IfcFacilityPartCommonTypeEnum.LEVELCROSSING +belowground = IfcFacilityPartCommonTypeEnum.BELOWGROUND +substructure = IfcFacilityPartCommonTypeEnum.SUBSTRUCTURE +terminal = IfcFacilityPartCommonTypeEnum.TERMINAL +superstructure = IfcFacilityPartCommonTypeEnum.SUPERSTRUCTURE +userdefined = IfcFacilityPartCommonTypeEnum.USERDEFINED +notdefined = IfcFacilityPartCommonTypeEnum.NOTDEFINED IfcFacilityUsageEnum = enum_namespace() -lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = IfcFacilityUsageEnum.LATERAL +region = IfcFacilityUsageEnum.REGION +vertical = IfcFacilityUsageEnum.VERTICAL +longitudinal = IfcFacilityUsageEnum.LONGITUDINAL +userdefined = IfcFacilityUsageEnum.USERDEFINED +notdefined = IfcFacilityUsageEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +firemonitor = IfcFireSuppressionTerminalTypeEnum.FIREMONITOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = IfcFlowDirectionEnum.SOURCE +sink = IfcFlowDirectionEnum.SINK +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +combined = IfcFlowInstrumentTypeEnum.COMBINED +voltmeter = IfcFlowInstrumentTypeEnum.VOLTMETER +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = IfcFurnitureTypeEnum.CHAIR +table = IfcFurnitureTypeEnum.TABLE +desk = IfcFurnitureTypeEnum.DESK +bed = IfcFurnitureTypeEnum.BED +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +technicalcabinet = IfcFurnitureTypeEnum.TECHNICALCABINET +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = IfcGeographicElementTypeEnum.TERRAIN +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = IfcGridTypeEnum.RECTANGULAR +radial = IfcGridTypeEnum.RADIAL +triangular = IfcGridTypeEnum.TRIANGULAR +irregular = IfcGridTypeEnum.IRREGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +turnoutheating = IfcHeatExchangerTypeEnum.TURNOUTHEATING +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcImpactProtectionDeviceTypeEnum = enum_namespace() -crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +crashcushion = IfcImpactProtectionDeviceTypeEnum.CRASHCUSHION +dampingsystem = IfcImpactProtectionDeviceTypeEnum.DAMPINGSYSTEM +fender = IfcImpactProtectionDeviceTypeEnum.FENDER +bumper = IfcImpactProtectionDeviceTypeEnum.BUMPER +userdefined = IfcImpactProtectionDeviceTypeEnum.USERDEFINED +notdefined = IfcImpactProtectionDeviceTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = IfcInternalOrExternalEnum.INTERNAL +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = IfcKnotType.UNIFORM_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLiquidTerminalTypeEnum = enum_namespace() -loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +loadingarm = IfcLiquidTerminalTypeEnum.LOADINGARM +hosereel = IfcLiquidTerminalTypeEnum.HOSEREEL +userdefined = IfcLiquidTerminalTypeEnum.USERDEFINED +notdefined = IfcLiquidTerminalTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR IfcMarineFacilityTypeEnum = enum_namespace() -canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) -launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +canal = IfcMarineFacilityTypeEnum.CANAL +waterwayshiplift = IfcMarineFacilityTypeEnum.WATERWAYSHIPLIFT +revetment = IfcMarineFacilityTypeEnum.REVETMENT +launchrecovery = IfcMarineFacilityTypeEnum.LAUNCHRECOVERY +marinedefence = IfcMarineFacilityTypeEnum.MARINEDEFENCE +hydrolift = IfcMarineFacilityTypeEnum.HYDROLIFT +shipyard = IfcMarineFacilityTypeEnum.SHIPYARD +shiplift = IfcMarineFacilityTypeEnum.SHIPLIFT +port = IfcMarineFacilityTypeEnum.PORT +quay = IfcMarineFacilityTypeEnum.QUAY +floatingdock = IfcMarineFacilityTypeEnum.FLOATINGDOCK +navigationalchannel = IfcMarineFacilityTypeEnum.NAVIGATIONALCHANNEL +breakwater = IfcMarineFacilityTypeEnum.BREAKWATER +drydock = IfcMarineFacilityTypeEnum.DRYDOCK +jetty = IfcMarineFacilityTypeEnum.JETTY +shiplock = IfcMarineFacilityTypeEnum.SHIPLOCK +barrierbeach = IfcMarineFacilityTypeEnum.BARRIERBEACH +slipway = IfcMarineFacilityTypeEnum.SLIPWAY +waterway = IfcMarineFacilityTypeEnum.WATERWAY +userdefined = IfcMarineFacilityTypeEnum.USERDEFINED +notdefined = IfcMarineFacilityTypeEnum.NOTDEFINED IfcMarinePartTypeEnum = enum_namespace() -crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -storage = express_getattr(IfcMarinePartTypeEnum, 'STORAGE', INDETERMINATE) -approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +crest = IfcMarinePartTypeEnum.CREST +manufacturing = IfcMarinePartTypeEnum.MANUFACTURING +lowwaterline = IfcMarinePartTypeEnum.LOWWATERLINE +core = IfcMarinePartTypeEnum.CORE +waterfield = IfcMarinePartTypeEnum.WATERFIELD +cill_level = IfcMarinePartTypeEnum.CILL_LEVEL +berthingstructure = IfcMarinePartTypeEnum.BERTHINGSTRUCTURE +copelevel = IfcMarinePartTypeEnum.COPELEVEL +chamber = IfcMarinePartTypeEnum.CHAMBER +storage = IfcMarinePartTypeEnum.STORAGE +approachchannel = IfcMarinePartTypeEnum.APPROACHCHANNEL +vehicleservicing = IfcMarinePartTypeEnum.VEHICLESERVICING +shiptransfer = IfcMarinePartTypeEnum.SHIPTRANSFER +gatehead = IfcMarinePartTypeEnum.GATEHEAD +gudingstructure = IfcMarinePartTypeEnum.GUDINGSTRUCTURE +belowwaterline = IfcMarinePartTypeEnum.BELOWWATERLINE +weatherside = IfcMarinePartTypeEnum.WEATHERSIDE +landfield = IfcMarinePartTypeEnum.LANDFIELD +protection = IfcMarinePartTypeEnum.PROTECTION +leewardside = IfcMarinePartTypeEnum.LEEWARDSIDE +abovewaterline = IfcMarinePartTypeEnum.ABOVEWATERLINE +anchorage = IfcMarinePartTypeEnum.ANCHORAGE +navigationalarea = IfcMarinePartTypeEnum.NAVIGATIONALAREA +highwaterline = IfcMarinePartTypeEnum.HIGHWATERLINE +userdefined = IfcMarinePartTypeEnum.USERDEFINED +notdefined = IfcMarinePartTypeEnum.NOTDEFINED IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +rivet = IfcMechanicalFastenerTypeEnum.RIVET +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +railjoint = IfcMechanicalFastenerTypeEnum.RAILJOINT +railfastening = IfcMechanicalFastenerTypeEnum.RAILFASTENING +chain = IfcMechanicalFastenerTypeEnum.CHAIN +rope = IfcMechanicalFastenerTypeEnum.ROPE +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stringer = IfcMemberTypeEnum.STRINGER +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +suspender = IfcMemberTypeEnum.SUSPENDER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +structuralcable = IfcMemberTypeEnum.STRUCTURALCABLE +tiebar = IfcMemberTypeEnum.TIEBAR +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -remote_radio_unit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTE_RADIO_UNIT', INDETERMINATE) -accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +e_utran_node_b = IfcMobileTelecommunicationsApplianceTypeEnum.E_UTRAN_NODE_B +remote_radio_unit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTE_RADIO_UNIT +accesspoint = IfcMobileTelecommunicationsApplianceTypeEnum.ACCESSPOINT +basetransceiverstation = IfcMobileTelecommunicationsApplianceTypeEnum.BASETRANSCEIVERSTATION +remoteunit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTEUNIT +basebandunit = IfcMobileTelecommunicationsApplianceTypeEnum.BASEBANDUNIT +masterunit = IfcMobileTelecommunicationsApplianceTypeEnum.MASTERUNIT +userdefined = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcMobileTelecommunicationsApplianceTypeEnum.NOTDEFINED IfcMooringDeviceTypeEnum = enum_namespace() -linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +linetensioner = IfcMooringDeviceTypeEnum.LINETENSIONER +magneticdevice = IfcMooringDeviceTypeEnum.MAGNETICDEVICE +mooringhooks = IfcMooringDeviceTypeEnum.MOORINGHOOKS +vacuumdevice = IfcMooringDeviceTypeEnum.VACUUMDEVICE +bollard = IfcMooringDeviceTypeEnum.BOLLARD +userdefined = IfcMooringDeviceTypeEnum.USERDEFINED +notdefined = IfcMooringDeviceTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNavigationElementTypeEnum = enum_namespace() -beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) -buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) -userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +beacon = IfcNavigationElementTypeEnum.BEACON +buoy = IfcNavigationElementTypeEnum.BUOY +userdefined = IfcNavigationElementTypeEnum.USERDEFINED +notdefined = IfcNavigationElementTypeEnum.NOTDEFINED IfcObjectTypeEnum = enum_namespace() -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = IfcObjectTypeEnum.PRODUCT +process = IfcObjectTypeEnum.PROCESS +control = IfcObjectTypeEnum.CONTROL +resource = IfcObjectTypeEnum.RESOURCE +actor = IfcObjectTypeEnum.ACTOR +group = IfcObjectTypeEnum.GROUP +project = IfcObjectTypeEnum.PROJECT +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPavementTypeEnum = enum_namespace() -flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) -rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) -userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexible = IfcPavementTypeEnum.FLEXIBLE +rigid = IfcPavementTypeEnum.RIGID +userdefined = IfcPavementTypeEnum.USERDEFINED +notdefined = IfcPavementTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +driven = IfcPileTypeEnum.DRIVEN +jetgrouting = IfcPileTypeEnum.JETGROUTING +cohesion = IfcPileTypeEnum.COHESION +friction = IfcPileTypeEnum.FRICTION +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +sheet = IfcPlateTypeEnum.SHEET +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +base_plate = IfcPlateTypeEnum.BASE_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = IfcProfileTypeEnum.CURVE +area = IfcProfileTypeEnum.AREA IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +anti_arcing_device = IfcProtectiveDeviceTypeEnum.ANTI_ARCING_DEVICE +sparkgap = IfcProtectiveDeviceTypeEnum.SPARKGAP +voltagelimiter = IfcProtectiveDeviceTypeEnum.VOLTAGELIMITER +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailTypeEnum = enum_namespace() -rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +rackrail = IfcRailTypeEnum.RACKRAIL +blade = IfcRailTypeEnum.BLADE +guardrail = IfcRailTypeEnum.GUARDRAIL +stockrail = IfcRailTypeEnum.STOCKRAIL +checkrail = IfcRailTypeEnum.CHECKRAIL +rail = IfcRailTypeEnum.RAIL +userdefined = IfcRailTypeEnum.USERDEFINED +notdefined = IfcRailTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = IfcRailingTypeEnum.HANDRAIL +guardrail = IfcRailingTypeEnum.GUARDRAIL +balustrade = IfcRailingTypeEnum.BALUSTRADE +fence = IfcRailingTypeEnum.FENCE +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRailwayPartTypeEnum = enum_namespace() -trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -plaintracksupestructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) -linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackstructure = IfcRailwayPartTypeEnum.TRACKSTRUCTURE +trackstructurepart = IfcRailwayPartTypeEnum.TRACKSTRUCTUREPART +linesidestructurepart = IfcRailwayPartTypeEnum.LINESIDESTRUCTUREPART +dilatationsuperstructure = IfcRailwayPartTypeEnum.DILATATIONSUPERSTRUCTURE +plaintracksupestructure = IfcRailwayPartTypeEnum.PLAINTRACKSUPESTRUCTURE +linesidestructure = IfcRailwayPartTypeEnum.LINESIDESTRUCTURE +superstructure = IfcRailwayPartTypeEnum.SUPERSTRUCTURE +turnoutsuperstructure = IfcRailwayPartTypeEnum.TURNOUTSUPERSTRUCTURE +userdefined = IfcRailwayPartTypeEnum.USERDEFINED +notdefined = IfcRailwayPartTypeEnum.NOTDEFINED IfcRailwayTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRailwayTypeEnum.USERDEFINED +notdefined = IfcRailwayTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcRampFlightTypeEnum.STRAIGHT +spiral = IfcRampFlightTypeEnum.SPIRAL +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = IfcRecurrenceTypeEnum.DAILY +weekly = IfcRecurrenceTypeEnum.WEEKLY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = IfcReferentTypeEnum.KILOPOINT +milepoint = IfcReferentTypeEnum.MILEPOINT +station = IfcReferentTypeEnum.STATION +referencemarker = IfcReferentTypeEnum.REFERENCEMARKER +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcedSoilTypeEnum = enum_namespace() -surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +surchargepreloaded = IfcReinforcedSoilTypeEnum.SURCHARGEPRELOADED +verticallydrained = IfcReinforcedSoilTypeEnum.VERTICALLYDRAINED +dynamicallycompacted = IfcReinforcedSoilTypeEnum.DYNAMICALLYCOMPACTED +replaced = IfcReinforcedSoilTypeEnum.REPLACED +rollercompacted = IfcReinforcedSoilTypeEnum.ROLLERCOMPACTED +grouted = IfcReinforcedSoilTypeEnum.GROUTED +userdefined = IfcReinforcedSoilTypeEnum.USERDEFINED +notdefined = IfcReinforcedSoilTypeEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = IfcReinforcingBarRoleEnum.MAIN +shear = IfcReinforcingBarRoleEnum.SHEAR +ligature = IfcReinforcingBarRoleEnum.LIGATURE +stud = IfcReinforcingBarRoleEnum.STUD +punching = IfcReinforcingBarRoleEnum.PUNCHING +edge = IfcReinforcingBarRoleEnum.EDGE +ring = IfcReinforcingBarRoleEnum.RING +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +stud = IfcReinforcingBarTypeEnum.STUD +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoadPartTypeEnum = enum_namespace() -roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +roadsidepart = IfcRoadPartTypeEnum.ROADSIDEPART +bus_stop = IfcRoadPartTypeEnum.BUS_STOP +hardshoulder = IfcRoadPartTypeEnum.HARDSHOULDER +intersection = IfcRoadPartTypeEnum.INTERSECTION +passingbay = IfcRoadPartTypeEnum.PASSINGBAY +roadwayplateau = IfcRoadPartTypeEnum.ROADWAYPLATEAU +roadside = IfcRoadPartTypeEnum.ROADSIDE +refugeisland = IfcRoadPartTypeEnum.REFUGEISLAND +tollplaza = IfcRoadPartTypeEnum.TOLLPLAZA +centralreserve = IfcRoadPartTypeEnum.CENTRALRESERVE +sidewalk = IfcRoadPartTypeEnum.SIDEWALK +parkingbay = IfcRoadPartTypeEnum.PARKINGBAY +railwaycrossing = IfcRoadPartTypeEnum.RAILWAYCROSSING +pedestrian_crossing = IfcRoadPartTypeEnum.PEDESTRIAN_CROSSING +softshoulder = IfcRoadPartTypeEnum.SOFTSHOULDER +bicyclecrossing = IfcRoadPartTypeEnum.BICYCLECROSSING +centralisland = IfcRoadPartTypeEnum.CENTRALISLAND +shoulder = IfcRoadPartTypeEnum.SHOULDER +trafficlane = IfcRoadPartTypeEnum.TRAFFICLANE +roadsegment = IfcRoadPartTypeEnum.ROADSEGMENT +roundabout = IfcRoadPartTypeEnum.ROUNDABOUT +layby = IfcRoadPartTypeEnum.LAYBY +carriageway = IfcRoadPartTypeEnum.CARRIAGEWAY +trafficisland = IfcRoadPartTypeEnum.TRAFFICISLAND +userdefined = IfcRoadPartTypeEnum.USERDEFINED +notdefined = IfcRoadPartTypeEnum.NOTDEFINED IfcRoadTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRoadTypeEnum.USERDEFINED +notdefined = IfcRoadTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = IfcRoleEnum.SUPPLIER +manufacturer = IfcRoleEnum.MANUFACTURER +contractor = IfcRoleEnum.CONTRACTOR +subcontractor = IfcRoleEnum.SUBCONTRACTOR +architect = IfcRoleEnum.ARCHITECT +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +costengineer = IfcRoleEnum.COSTENGINEER +client = IfcRoleEnum.CLIENT +buildingowner = IfcRoleEnum.BUILDINGOWNER +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +projectmanager = IfcRoleEnum.PROJECTMANAGER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +civilengineer = IfcRoleEnum.CIVILENGINEER +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +engineer = IfcRoleEnum.ENGINEER +owner = IfcRoleEnum.OWNER +consultant = IfcRoleEnum.CONSULTANT +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +reseller = IfcRoleEnum.RESELLER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = IfcSIPrefix.EXA +peta = IfcSIPrefix.PETA +tera = IfcSIPrefix.TERA +giga = IfcSIPrefix.GIGA +mega = IfcSIPrefix.MEGA +kilo = IfcSIPrefix.KILO +hecto = IfcSIPrefix.HECTO +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +centi = IfcSIPrefix.CENTI +milli = IfcSIPrefix.MILLI +micro = IfcSIPrefix.MICRO +nano = IfcSIPrefix.NANO +pico = IfcSIPrefix.PICO +femto = IfcSIPrefix.FEMTO +atto = IfcSIPrefix.ATTO IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = IfcSectionTypeEnum.UNIFORM +tapered = IfcSectionTypeEnum.TAPERED IfcSensorTypeEnum = enum_namespace() -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = IfcSensorTypeEnum.COSENSOR +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +earthquakesensor = IfcSensorTypeEnum.EARTHQUAKESENSOR +foreignobjectdetectionsensor = IfcSensorTypeEnum.FOREIGNOBJECTDETECTIONSENSOR +obstaclesensor = IfcSensorTypeEnum.OBSTACLESENSOR +rainsensor = IfcSensorTypeEnum.RAINSENSOR +snowdepthsensor = IfcSensorTypeEnum.SNOWDEPTHSENSOR +trainsensor = IfcSensorTypeEnum.TRAINSENSOR +turnoutclosuresensor = IfcSensorTypeEnum.TURNOUTCLOSURESENSOR +wheelsensor = IfcSensorTypeEnum.WHEELSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = IfcSequenceEnum.START_START +start_finish = IfcSequenceEnum.START_FINISH +finish_start = IfcSequenceEnum.FINISH_START +finish_finish = IfcSequenceEnum.FINISH_FINISH +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +awning = IfcShadingDeviceTypeEnum.AWNING +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSignTypeEnum = enum_namespace() -marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = IfcSignTypeEnum.MARKER +pictoral = IfcSignTypeEnum.PICTORAL +mirror = IfcSignTypeEnum.MIRROR +userdefined = IfcSignTypeEnum.USERDEFINED +notdefined = IfcSignTypeEnum.NOTDEFINED IfcSignalTypeEnum = enum_namespace() -visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +visual = IfcSignalTypeEnum.VISUAL +audio = IfcSignalTypeEnum.AUDIO +mixed = IfcSignalTypeEnum.MIXED +userdefined = IfcSignalTypeEnum.USERDEFINED +notdefined = IfcSignalTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME IfcSlabTypeEnum = enum_namespace() -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = IfcSlabTypeEnum.FLOOR +roof = IfcSlabTypeEnum.ROOF +landing = IfcSlabTypeEnum.LANDING +baseslab = IfcSlabTypeEnum.BASESLAB +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +paving = IfcSlabTypeEnum.PAVING +wearing = IfcSlabTypeEnum.WEARING +sidewalk = IfcSlabTypeEnum.SIDEWALK +trackslab = IfcSlabTypeEnum.TRACKSLAB +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = IfcSpaceTypeEnum.SPACE +parking = IfcSpaceTypeEnum.PARKING +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +external = IfcSpaceTypeEnum.EXTERNAL +berth = IfcSpaceTypeEnum.BERTH +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +reservation = IfcSpatialZoneTypeEnum.RESERVATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +spiral = IfcStairFlightTypeEnum.SPIRAL +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +ladder = IfcStairTypeEnum.LADDER +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = IfcStateEnum.READWRITE +readonly = IfcStateEnum.READONLY +locked = IfcStateEnum.LOCKED +readwritelocked = IfcStateEnum.READWRITELOCKED +readonlylocked = IfcStateEnum.READONLYLOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +cable = IfcStructuralCurveMemberTypeEnum.CABLE +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralSurfaceActivityTypeEnum.CONST +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = IfcSurfaceFeatureTypeEnum.MARK +tag = IfcSurfaceFeatureTypeEnum.TAG +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +defect = IfcSurfaceFeatureTypeEnum.DEFECT +hatchmarking = IfcSurfaceFeatureTypeEnum.HATCHMARKING +linemarking = IfcSurfaceFeatureTypeEnum.LINEMARKING +pavementsurfacemarking = IfcSurfaceFeatureTypeEnum.PAVEMENTSURFACEMARKING +symbolmarking = IfcSurfaceFeatureTypeEnum.SYMBOLMARKING +nonskidsurfacing = IfcSurfaceFeatureTypeEnum.NONSKIDSURFACING +rumblestrip = IfcSurfaceFeatureTypeEnum.RUMBLESTRIP +transverserumblestrip = IfcSurfaceFeatureTypeEnum.TRANSVERSERUMBLESTRIP +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = IfcSurfaceSide.POSITIVE +negative = IfcSurfaceSide.NEGATIVE +both = IfcSurfaceSide.BOTH IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +relay = IfcSwitchingDeviceTypeEnum.RELAY +start_and_stop_equipment = IfcSwitchingDeviceTypeEnum.START_AND_STOP_EQUIPMENT +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +subrack = IfcSystemFurnitureElementTypeEnum.SUBRACK +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +oilretentiontray = IfcTankTypeEnum.OILRETENTIONTRAY +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = IfcTaskTypeEnum.ATTENDANCE +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = IfcTendonConduitTypeEnum.DUCT +coupler = IfcTendonConduitTypeEnum.COUPLER +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +diabolo = IfcTendonConduitTypeEnum.DIABOLO +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP +down = IfcTextPath.DOWN IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTrackElementTypeEnum = enum_namespace() -trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackendofalignment = IfcTrackElementTypeEnum.TRACKENDOFALIGNMENT +blockingdevice = IfcTrackElementTypeEnum.BLOCKINGDEVICE +vehiclestop = IfcTrackElementTypeEnum.VEHICLESTOP +sleeper = IfcTrackElementTypeEnum.SLEEPER +half_set_of_blades = IfcTrackElementTypeEnum.HALF_SET_OF_BLADES +speedregulator = IfcTrackElementTypeEnum.SPEEDREGULATOR +derailer = IfcTrackElementTypeEnum.DERAILER +frog = IfcTrackElementTypeEnum.FROG +userdefined = IfcTrackElementTypeEnum.USERDEFINED +notdefined = IfcTrackElementTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +chopper = IfcTransformerTypeEnum.CHOPPER +combined = IfcTransformerTypeEnum.COMBINED +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = IfcTransitionCode.DISCONTINUOUS +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE IfcTransportElementFixedTypeEnum = enum_namespace() -elevator = express_getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = express_getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -haulinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'HAULINGGEAR', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = IfcTransportElementFixedTypeEnum.ELEVATOR +escalator = IfcTransportElementFixedTypeEnum.ESCALATOR +movingwalkway = IfcTransportElementFixedTypeEnum.MOVINGWALKWAY +craneway = IfcTransportElementFixedTypeEnum.CRANEWAY +liftinggear = IfcTransportElementFixedTypeEnum.LIFTINGGEAR +haulinggear = IfcTransportElementFixedTypeEnum.HAULINGGEAR +userdefined = IfcTransportElementFixedTypeEnum.USERDEFINED +notdefined = IfcTransportElementFixedTypeEnum.NOTDEFINED IfcTransportElementNonFixedTypeEnum = enum_namespace() -vehicle = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) -vehicletracked = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -rollingstock = express_getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehiclewheeled = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -vehicleair = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) -cargo = express_getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) -vehiclemarine = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +vehicle = IfcTransportElementNonFixedTypeEnum.VEHICLE +vehicletracked = IfcTransportElementNonFixedTypeEnum.VEHICLETRACKED +rollingstock = IfcTransportElementNonFixedTypeEnum.ROLLINGSTOCK +vehiclewheeled = IfcTransportElementNonFixedTypeEnum.VEHICLEWHEELED +vehicleair = IfcTransportElementNonFixedTypeEnum.VEHICLEAIR +cargo = IfcTransportElementNonFixedTypeEnum.CARGO +vehiclemarine = IfcTransportElementNonFixedTypeEnum.VEHICLEMARINE +userdefined = IfcTransportElementNonFixedTypeEnum.USERDEFINED +notdefined = IfcTransportElementNonFixedTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +combined = IfcUnitaryControlElementTypeEnum.COMBINED +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +viscous = IfcVibrationDamperTypeEnum.VISCOUS +rubber = IfcVibrationDamperTypeEnum.RUBBER +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +base = IfcVibrationIsolatorTypeEnum.BASE +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +notch = IfcVoidingFeatureTypeEnum.NOTCH +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +edge = IfcVoidingFeatureTypeEnum.EDGE +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +polygonal = IfcWallTypeEnum.POLYGONAL +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +retainingwall = IfcWallTypeEnum.RETAININGWALL +wavewall = IfcWallTypeEnum.WAVEWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +bottom = IfcWindowPanelPositionEnum.BOTTOM +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +plastic = IfcWindowStyleConstructionEnum.PLASTIC +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = IfcWindowTypeEnum.WINDOW +skylight = IfcWindowTypeEnum.SKYLIGHT +lightdome = IfcWindowTypeEnum.LIGHTDOME +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_RC3', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py index c83c75b94a..1a0dbfb756 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_RC4.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,2392 +152,2392 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +snow_s = IfcActionSourceTypeEnum.SNOW_S +wind_w = IfcActionSourceTypeEnum.WIND_W +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +fire = IfcActionSourceTypeEnum.FIRE +impulse = IfcActionSourceTypeEnum.IMPULSE +impact = IfcActionSourceTypeEnum.IMPACT +transport = IfcActionSourceTypeEnum.TRANSPORT +erection = IfcActionSourceTypeEnum.ERECTION +propping = IfcActionSourceTypeEnum.PROPPING +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +creep = IfcActionSourceTypeEnum.CREEP +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +ice = IfcActionSourceTypeEnum.ICE +current = IfcActionSourceTypeEnum.CURRENT +wave = IfcActionSourceTypeEnum.WAVE +rain = IfcActionSourceTypeEnum.RAIN +brakes = IfcActionSourceTypeEnum.BRAKES +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +home = IfcAddressTypeEnum.HOME +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +railwaycrocodile = IfcAlarmTypeEnum.RAILWAYCROCODILE +railwaydetonator = IfcAlarmTypeEnum.RAILWAYDETONATOR +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentCantSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentCantSegmentTypeEnum.BLOSSCURVE +constantcant = IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT +cosinecurve = IfcAlignmentCantSegmentTypeEnum.COSINECURVE +helmertcurve = IfcAlignmentCantSegmentTypeEnum.HELMERTCURVE +lineartransition = IfcAlignmentCantSegmentTypeEnum.LINEARTRANSITION +sinecurve = IfcAlignmentCantSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentCantSegmentTypeEnum.VIENNESEBEND IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +line = IfcAlignmentHorizontalSegmentTypeEnum.LINE +circulararc = IfcAlignmentHorizontalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentHorizontalSegmentTypeEnum.CLOTHOID +cubic = IfcAlignmentHorizontalSegmentTypeEnum.CUBIC +helmertcurve = IfcAlignmentHorizontalSegmentTypeEnum.HELMERTCURVE +blosscurve = IfcAlignmentHorizontalSegmentTypeEnum.BLOSSCURVE +cosinecurve = IfcAlignmentHorizontalSegmentTypeEnum.COSINECURVE +sinecurve = IfcAlignmentHorizontalSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentHorizontalSegmentTypeEnum.VIENNESEBEND IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) +constantgradient = IfcAlignmentVerticalSegmentTypeEnum.CONSTANTGRADIENT +circulararc = IfcAlignmentVerticalSegmentTypeEnum.CIRCULARARC +parabolicarc = IfcAlignmentVerticalSegmentTypeEnum.PARABOLICARC +clothoid = IfcAlignmentVerticalSegmentTypeEnum.CLOTHOID IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcAnnotationTypeEnum = enum_namespace() -assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +assumedpoint = IfcAnnotationTypeEnum.ASSUMEDPOINT +asbuiltarea = IfcAnnotationTypeEnum.ASBUILTAREA +asbuiltline = IfcAnnotationTypeEnum.ASBUILTLINE +non_physical_signal = IfcAnnotationTypeEnum.NON_PHYSICAL_SIGNAL +assumedline = IfcAnnotationTypeEnum.ASSUMEDLINE +widthevent = IfcAnnotationTypeEnum.WIDTHEVENT +assumedarea = IfcAnnotationTypeEnum.ASSUMEDAREA +superelevationevent = IfcAnnotationTypeEnum.SUPERELEVATIONEVENT +asbuiltpoint = IfcAnnotationTypeEnum.ASBUILTPOINT +userdefined = IfcAnnotationTypeEnum.USERDEFINED +notdefined = IfcAnnotationTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +site = IfcAssemblyPlaceEnum.SITE +factory = IfcAssemblyPlaceEnum.FACTORY +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) -recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +communicationterminal = IfcAudioVisualApplianceTypeEnum.COMMUNICATIONTERMINAL +recordingequipment = IfcAudioVisualApplianceTypeEnum.RECORDINGEQUIPMENT +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +joist = IfcBeamTypeEnum.JOIST +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +lintel = IfcBeamTypeEnum.LINTEL +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +piercap = IfcBeamTypeEnum.PIERCAP +hatstone = IfcBeamTypeEnum.HATSTONE +cornice = IfcBeamTypeEnum.CORNICE +edgebeam = IfcBeamTypeEnum.EDGEBEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeDisplacementEnum = enum_namespace() -fixed_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FIXED_MOVEMENT', INDETERMINATE) -guided_longitudinal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_LONGITUDINAL', INDETERMINATE) -guided_transversal = express_getattr(IfcBearingTypeDisplacementEnum, 'GUIDED_TRANSVERSAL', INDETERMINATE) -free_movement = express_getattr(IfcBearingTypeDisplacementEnum, 'FREE_MOVEMENT', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeDisplacementEnum, 'NOTDEFINED', INDETERMINATE) +fixed_movement = IfcBearingTypeDisplacementEnum.FIXED_MOVEMENT +guided_longitudinal = IfcBearingTypeDisplacementEnum.GUIDED_LONGITUDINAL +guided_transversal = IfcBearingTypeDisplacementEnum.GUIDED_TRANSVERSAL +free_movement = IfcBearingTypeDisplacementEnum.FREE_MOVEMENT +notdefined = IfcBearingTypeDisplacementEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +spherical = IfcBearingTypeEnum.SPHERICAL +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +pot = IfcBearingTypeEnum.POT +guide = IfcBearingTypeEnum.GUIDE +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +disk = IfcBearingTypeEnum.DISK +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +equalto = IfcBenchmarkEnum.EQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +includes = IfcBenchmarkEnum.INCLUDES +notincludes = IfcBenchmarkEnum.NOTINCLUDES +includedin = IfcBenchmarkEnum.INCLUDEDIN +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN IfcBoilerTypeEnum = enum_namespace() -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +water = IfcBoilerTypeEnum.WATER +steam = IfcBoilerTypeEnum.STEAM +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) +union = IfcBooleanOperator.UNION +intersection = IfcBooleanOperator.INTERSECTION +difference = IfcBooleanOperator.DIFFERENCE IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +apron = IfcBuildingElementPartTypeEnum.APRON +armourunit = IfcBuildingElementPartTypeEnum.ARMOURUNIT +safetycage = IfcBuildingElementPartTypeEnum.SAFETYCAGE +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -reinforcing = express_getattr(IfcBuildingSystemTypeEnum, 'REINFORCING', INDETERMINATE) -prestressing = express_getattr(IfcBuildingSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -erosionprevention = express_getattr(IfcBuildingSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +reinforcing = IfcBuildingSystemTypeEnum.REINFORCING +prestressing = IfcBuildingSystemTypeEnum.PRESTRESSING +erosionprevention = IfcBuildingSystemTypeEnum.EROSIONPREVENTION +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBuiltSystemTypeEnum = enum_namespace() -reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +reinforcing = IfcBuiltSystemTypeEnum.REINFORCING +mooring = IfcBuiltSystemTypeEnum.MOORING +outershell = IfcBuiltSystemTypeEnum.OUTERSHELL +trackcircuit = IfcBuiltSystemTypeEnum.TRACKCIRCUIT +erosionprevention = IfcBuiltSystemTypeEnum.EROSIONPREVENTION +foundation = IfcBuiltSystemTypeEnum.FOUNDATION +loadbearing = IfcBuiltSystemTypeEnum.LOADBEARING +shading = IfcBuiltSystemTypeEnum.SHADING +fenestration = IfcBuiltSystemTypeEnum.FENESTRATION +transport = IfcBuiltSystemTypeEnum.TRANSPORT +prestressing = IfcBuiltSystemTypeEnum.PRESTRESSING +userdefined = IfcBuiltSystemTypeEnum.USERDEFINED +notdefined = IfcBuiltSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +cross = IfcCableCarrierFittingTypeEnum.CROSS +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +cablebracket = IfcCableCarrierSegmentTypeEnum.CABLEBRACKET +catenarywire = IfcCableCarrierSegmentTypeEnum.CATENARYWIRE +dropper = IfcCableCarrierSegmentTypeEnum.DROPPER +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +fanout = IfcCableFittingTypeEnum.FANOUT +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) -fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) -fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) -opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) -stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) -wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +contactwiresegment = IfcCableSegmentTypeEnum.CONTACTWIRESEGMENT +fibersegment = IfcCableSegmentTypeEnum.FIBERSEGMENT +fibertube = IfcCableSegmentTypeEnum.FIBERTUBE +opticalcablesegment = IfcCableSegmentTypeEnum.OPTICALCABLESEGMENT +stitchwire = IfcCableSegmentTypeEnum.STITCHWIRE +wirepairsegment = IfcCableSegmentTypeEnum.WIREPAIRSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +well = IfcCaissonFoundationTypeEnum.WELL +caisson = IfcCaissonFoundationTypeEnum.CAISSON +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +nochange = IfcChangeActionEnum.NOCHANGE +modified = IfcChangeActionEnum.MODIFIED +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +watercooled = IfcChillerTypeEnum.WATERCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pilaster = IfcColumnTypeEnum.PILASTER +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) -ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) -opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) -telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) -telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) -transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) -transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) -transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) -opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) -linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) -radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +automaton = IfcCommunicationsApplianceTypeEnum.AUTOMATON +intelligentperipheral = IfcCommunicationsApplianceTypeEnum.INTELLIGENTPERIPHERAL +ipnetworkequipment = IfcCommunicationsApplianceTypeEnum.IPNETWORKEQUIPMENT +opticalnetworkunit = IfcCommunicationsApplianceTypeEnum.OPTICALNETWORKUNIT +telecommand = IfcCommunicationsApplianceTypeEnum.TELECOMMAND +telephonyexchange = IfcCommunicationsApplianceTypeEnum.TELEPHONYEXCHANGE +transitioncomponent = IfcCommunicationsApplianceTypeEnum.TRANSITIONCOMPONENT +transponder = IfcCommunicationsApplianceTypeEnum.TRANSPONDER +transportequipment = IfcCommunicationsApplianceTypeEnum.TRANSPORTEQUIPMENT +opticallineterminal = IfcCommunicationsApplianceTypeEnum.OPTICALLINETERMINAL +linesideelectronicunit = IfcCommunicationsApplianceTypeEnum.LINESIDEELECTRONICUNIT +radioblockcenter = IfcCommunicationsApplianceTypeEnum.RADIOBLOCKCENTER +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamic = IfcCompressorTypeEnum.DYNAMIC +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rotary = IfcCompressorTypeEnum.ROTARY +scroll = IfcCompressorTypeEnum.SCROLL +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +booster = IfcCompressorTypeEnum.BOOSTER +opentype = IfcCompressorTypeEnum.OPENTYPE +hermetic = IfcCompressorTypeEnum.HERMETIC +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +twinscrew = IfcCompressorTypeEnum.TWINSCREW +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +atend = IfcConnectionTypeEnum.ATEND +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +advisory = IfcConstraintEnum.ADVISORY +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +multiposition = IfcControllerTypeEnum.MULTIPOSITION +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcConveyorSegmentTypeEnum = enum_namespace() -chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +chuteconveyor = IfcConveyorSegmentTypeEnum.CHUTECONVEYOR +beltconveyor = IfcConveyorSegmentTypeEnum.BELTCONVEYOR +screwconveyor = IfcConveyorSegmentTypeEnum.SCREWCONVEYOR +bucketconveyor = IfcConveyorSegmentTypeEnum.BUCKETCONVEYOR +userdefined = IfcConveyorSegmentTypeEnum.USERDEFINED +notdefined = IfcConveyorSegmentTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +tender = IfcCostScheduleTypeEnum.TENDER +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCourseTypeEnum = enum_namespace() -armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = IfcCourseTypeEnum.ARMOUR +filter = IfcCourseTypeEnum.FILTER +ballastbed = IfcCourseTypeEnum.BALLASTBED +core = IfcCourseTypeEnum.CORE +pavement = IfcCourseTypeEnum.PAVEMENT +protection = IfcCourseTypeEnum.PROTECTION +userdefined = IfcCourseTypeEnum.USERDEFINED +notdefined = IfcCourseTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +flooring = IfcCoveringTypeEnum.FLOORING +cladding = IfcCoveringTypeEnum.CLADDING +roofing = IfcCoveringTypeEnum.ROOFING +molding = IfcCoveringTypeEnum.MOLDING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +sleeving = IfcCoveringTypeEnum.SLEEVING +wrapping = IfcCoveringTypeEnum.WRAPPING +coping = IfcCoveringTypeEnum.COPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) +positive = IfcDirectionSenseEnum.POSITIVE +negative = IfcDirectionSenseEnum.NEGATIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) -point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) -rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +cablearranger = IfcDiscreteAccessoryTypeEnum.CABLEARRANGER +insulator = IfcDiscreteAccessoryTypeEnum.INSULATOR +lock = IfcDiscreteAccessoryTypeEnum.LOCK +tensioningequipment = IfcDiscreteAccessoryTypeEnum.TENSIONINGEQUIPMENT +railpad = IfcDiscreteAccessoryTypeEnum.RAILPAD +slidingchair = IfcDiscreteAccessoryTypeEnum.SLIDINGCHAIR +rail_lubrication = IfcDiscreteAccessoryTypeEnum.RAIL_LUBRICATION +panel_strengthening = IfcDiscreteAccessoryTypeEnum.PANEL_STRENGTHENING +railbrace = IfcDiscreteAccessoryTypeEnum.RAILBRACE +elastic_cushion = IfcDiscreteAccessoryTypeEnum.ELASTIC_CUSHION +soundabsorption = IfcDiscreteAccessoryTypeEnum.SOUNDABSORPTION +pointmachinemountingdevice = IfcDiscreteAccessoryTypeEnum.POINTMACHINEMOUNTINGDEVICE +point_machine_locking_device = IfcDiscreteAccessoryTypeEnum.POINT_MACHINE_LOCKING_DEVICE +rail_mechanical_equipment = IfcDiscreteAccessoryTypeEnum.RAIL_MECHANICAL_EQUIPMENT +birdprotection = IfcDiscreteAccessoryTypeEnum.BIRDPROTECTION +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionBoardTypeEnum = enum_namespace() -switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) -userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +switchboard = IfcDistributionBoardTypeEnum.SWITCHBOARD +consumerunit = IfcDistributionBoardTypeEnum.CONSUMERUNIT +motorcontrolcentre = IfcDistributionBoardTypeEnum.MOTORCONTROLCENTRE +distributionframe = IfcDistributionBoardTypeEnum.DISTRIBUTIONFRAME +distributionboard = IfcDistributionBoardTypeEnum.DISTRIBUTIONBOARD +dispatchingboard = IfcDistributionBoardTypeEnum.DISPATCHINGBOARD +userdefined = IfcDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcDistributionBoardTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +wireless = IfcDistributionPortTypeEnum.WIRELESS +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) -operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) -mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) -monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +catenary_system = IfcDistributionSystemEnum.CATENARY_SYSTEM +overhead_contactline_system = IfcDistributionSystemEnum.OVERHEAD_CONTACTLINE_SYSTEM +return_circuit = IfcDistributionSystemEnum.RETURN_CIRCUIT +fixedtransmissionnetwork = IfcDistributionSystemEnum.FIXEDTRANSMISSIONNETWORK +operationaltelephonysystem = IfcDistributionSystemEnum.OPERATIONALTELEPHONYSYSTEM +mobilenetwork = IfcDistributionSystemEnum.MOBILENETWORK +monitoringsystem = IfcDistributionSystemEnum.MONITORINGSYSTEM +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +final = IfcDocumentStatusEnum.FINAL +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +swinging = IfcDoorPanelOperationEnum.SWINGING +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +sliding = IfcDoorPanelOperationEnum.SLIDING +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcDoorStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcDoorStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcDoorStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -aluminium_plastic = express_getattr(IfcDoorStyleConstructionEnum, 'ALUMINIUM_PLASTIC', INDETERMINATE) -plastic = express_getattr(IfcDoorStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcDoorStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcDoorStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcDoorStyleConstructionEnum.STEEL +wood = IfcDoorStyleConstructionEnum.WOOD +aluminium_wood = IfcDoorStyleConstructionEnum.ALUMINIUM_WOOD +aluminium_plastic = IfcDoorStyleConstructionEnum.ALUMINIUM_PLASTIC +plastic = IfcDoorStyleConstructionEnum.PLASTIC +userdefined = IfcDoorStyleConstructionEnum.USERDEFINED +notdefined = IfcDoorStyleConstructionEnum.NOTDEFINED IfcDoorStyleOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_door_double_swing = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorStyleOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorStyleOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorStyleOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorStyleOperationEnum, 'ROLLINGUP', INDETERMINATE) -userdefined = express_getattr(IfcDoorStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorStyleOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorStyleOperationEnum.SINGLE_SWING_RIGHT +double_door_single_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorStyleOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorStyleOperationEnum.DOUBLE_SWING_RIGHT +double_door_double_swing = IfcDoorStyleOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +sliding_to_left = IfcDoorStyleOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorStyleOperationEnum.SLIDING_TO_RIGHT +double_door_sliding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_SLIDING +folding_to_left = IfcDoorStyleOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorStyleOperationEnum.FOLDING_TO_RIGHT +double_door_folding = IfcDoorStyleOperationEnum.DOUBLE_DOOR_FOLDING +revolving = IfcDoorStyleOperationEnum.REVOLVING +rollingup = IfcDoorStyleOperationEnum.ROLLINGUP +userdefined = IfcDoorStyleOperationEnum.USERDEFINED +notdefined = IfcDoorStyleOperationEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +boom_barrier = IfcDoorTypeEnum.BOOM_BARRIER +turnstile = IfcDoorTypeEnum.TURNSTILE +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -double_panel_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING', INDETERMINATE) -double_panel_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_panel_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -double_panel_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_DOUBLE_SWING', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -double_panel_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_SLIDING', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -double_panel_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_FOLDING', INDETERMINATE) -revolving_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_HORIZONTAL', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -double_panel_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_PANEL_LIFTING_VERTICAL', INDETERMINATE) -lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) -lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) -lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) -revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +double_panel_single_swing = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING +double_panel_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT +double_panel_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +double_panel_double_swing = IfcDoorTypeOperationEnum.DOUBLE_PANEL_DOUBLE_SWING +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +double_panel_sliding = IfcDoorTypeOperationEnum.DOUBLE_PANEL_SLIDING +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +double_panel_folding = IfcDoorTypeOperationEnum.DOUBLE_PANEL_FOLDING +revolving_horizontal = IfcDoorTypeOperationEnum.REVOLVING_HORIZONTAL +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +double_panel_lifting_vertical = IfcDoorTypeOperationEnum.DOUBLE_PANEL_LIFTING_VERTICAL +lifting_horizontal = IfcDoorTypeOperationEnum.LIFTING_HORIZONTAL +lifting_vertical_left = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_LEFT +lifting_vertical_right = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_RIGHT +revolving_vertical = IfcDoorTypeOperationEnum.REVOLVING_VERTICAL +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcEarthworksCutTypeEnum = enum_namespace() -trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +trench = IfcEarthworksCutTypeEnum.TRENCH +dredging = IfcEarthworksCutTypeEnum.DREDGING +excavation = IfcEarthworksCutTypeEnum.EXCAVATION +overexcavation = IfcEarthworksCutTypeEnum.OVEREXCAVATION +topsoilremoval = IfcEarthworksCutTypeEnum.TOPSOILREMOVAL +stepexcavation = IfcEarthworksCutTypeEnum.STEPEXCAVATION +pavementmilling = IfcEarthworksCutTypeEnum.PAVEMENTMILLING +cut = IfcEarthworksCutTypeEnum.CUT +base_excavation = IfcEarthworksCutTypeEnum.BASE_EXCAVATION +userdefined = IfcEarthworksCutTypeEnum.USERDEFINED +notdefined = IfcEarthworksCutTypeEnum.NOTDEFINED IfcEarthworksFillTypeEnum = enum_namespace() -backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = IfcEarthworksFillTypeEnum.BACKFILL +counterweight = IfcEarthworksFillTypeEnum.COUNTERWEIGHT +subgrade = IfcEarthworksFillTypeEnum.SUBGRADE +embankment = IfcEarthworksFillTypeEnum.EMBANKMENT +transitionsection = IfcEarthworksFillTypeEnum.TRANSITIONSECTION +subgradebed = IfcEarthworksFillTypeEnum.SUBGRADEBED +slopefill = IfcEarthworksFillTypeEnum.SLOPEFILL +userdefined = IfcEarthworksFillTypeEnum.USERDEFINED +notdefined = IfcEarthworksFillTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +capacitor = IfcElectricFlowStorageDeviceTypeEnum.CAPACITOR +compensator = IfcElectricFlowStorageDeviceTypeEnum.COMPENSATOR +inductor = IfcElectricFlowStorageDeviceTypeEnum.INDUCTOR +recharger = IfcElectricFlowStorageDeviceTypeEnum.RECHARGER +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = IfcElectricFlowTreatmentDeviceTypeEnum.ELECTRONICFILTER +userdefined = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowTreatmentDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +relay = IfcElectricTimeControlTypeEnum.RELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +girder = IfcElementAssemblyTypeEnum.GIRDER +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +truss = IfcElementAssemblyTypeEnum.TRUSS +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +mast = IfcElementAssemblyTypeEnum.MAST +signalassembly = IfcElementAssemblyTypeEnum.SIGNALASSEMBLY +grid = IfcElementAssemblyTypeEnum.GRID +shelter = IfcElementAssemblyTypeEnum.SHELTER +supportingassembly = IfcElementAssemblyTypeEnum.SUPPORTINGASSEMBLY +suspensionassembly = IfcElementAssemblyTypeEnum.SUSPENSIONASSEMBLY +traction_switching_assembly = IfcElementAssemblyTypeEnum.TRACTION_SWITCHING_ASSEMBLY +trackpanel = IfcElementAssemblyTypeEnum.TRACKPANEL +turnoutpanel = IfcElementAssemblyTypeEnum.TURNOUTPANEL +dilatationpanel = IfcElementAssemblyTypeEnum.DILATATIONPANEL +rail_mechanical_equipment_assembly = IfcElementAssemblyTypeEnum.RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY +entranceworks = IfcElementAssemblyTypeEnum.ENTRANCEWORKS +sumpbuster = IfcElementAssemblyTypeEnum.SUMPBUSTER +traffic_calming_device = IfcElementAssemblyTypeEnum.TRAFFIC_CALMING_DEVICE +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +startevent = IfcEventTypeEnum.STARTEVENT +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFacilityPartCommonTypeEnum = enum_namespace() -segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +segment = IfcFacilityPartCommonTypeEnum.SEGMENT +aboveground = IfcFacilityPartCommonTypeEnum.ABOVEGROUND +junction = IfcFacilityPartCommonTypeEnum.JUNCTION +levelcrossing = IfcFacilityPartCommonTypeEnum.LEVELCROSSING +belowground = IfcFacilityPartCommonTypeEnum.BELOWGROUND +substructure = IfcFacilityPartCommonTypeEnum.SUBSTRUCTURE +terminal = IfcFacilityPartCommonTypeEnum.TERMINAL +superstructure = IfcFacilityPartCommonTypeEnum.SUPERSTRUCTURE +userdefined = IfcFacilityPartCommonTypeEnum.USERDEFINED +notdefined = IfcFacilityPartCommonTypeEnum.NOTDEFINED IfcFacilityUsageEnum = enum_namespace() -lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = IfcFacilityUsageEnum.LATERAL +region = IfcFacilityUsageEnum.REGION +vertical = IfcFacilityUsageEnum.VERTICAL +longitudinal = IfcFacilityUsageEnum.LONGITUDINAL +userdefined = IfcFacilityUsageEnum.USERDEFINED +notdefined = IfcFacilityUsageEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +firemonitor = IfcFireSuppressionTerminalTypeEnum.FIREMONITOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +source = IfcFlowDirectionEnum.SOURCE +sink = IfcFlowDirectionEnum.SINK +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +combined = IfcFlowInstrumentTypeEnum.COMBINED +voltmeter = IfcFlowInstrumentTypeEnum.VOLTMETER +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chair = IfcFurnitureTypeEnum.CHAIR +table = IfcFurnitureTypeEnum.TABLE +desk = IfcFurnitureTypeEnum.DESK +bed = IfcFurnitureTypeEnum.BED +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +technicalcabinet = IfcFurnitureTypeEnum.TECHNICALCABINET +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +terrain = IfcGeographicElementTypeEnum.TERRAIN +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +rectangular = IfcGridTypeEnum.RECTANGULAR +radial = IfcGridTypeEnum.RADIAL +triangular = IfcGridTypeEnum.TRIANGULAR +irregular = IfcGridTypeEnum.IRREGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +turnoutheating = IfcHeatExchangerTypeEnum.TURNOUTHEATING +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcImpactProtectionDeviceTypeEnum = enum_namespace() -crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +crashcushion = IfcImpactProtectionDeviceTypeEnum.CRASHCUSHION +dampingsystem = IfcImpactProtectionDeviceTypeEnum.DAMPINGSYSTEM +fender = IfcImpactProtectionDeviceTypeEnum.FENDER +bumper = IfcImpactProtectionDeviceTypeEnum.BUMPER +userdefined = IfcImpactProtectionDeviceTypeEnum.USERDEFINED +notdefined = IfcImpactProtectionDeviceTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +internal = IfcInternalOrExternalEnum.INTERNAL +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +uniform_knots = IfcKnotType.UNIFORM_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLiquidTerminalTypeEnum = enum_namespace() -loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +loadingarm = IfcLiquidTerminalTypeEnum.LOADINGARM +hosereel = IfcLiquidTerminalTypeEnum.HOSEREEL +userdefined = IfcLiquidTerminalTypeEnum.USERDEFINED +notdefined = IfcLiquidTerminalTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR IfcMarineFacilityTypeEnum = enum_namespace() -canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) -launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +canal = IfcMarineFacilityTypeEnum.CANAL +waterwayshiplift = IfcMarineFacilityTypeEnum.WATERWAYSHIPLIFT +revetment = IfcMarineFacilityTypeEnum.REVETMENT +launchrecovery = IfcMarineFacilityTypeEnum.LAUNCHRECOVERY +marinedefence = IfcMarineFacilityTypeEnum.MARINEDEFENCE +hydrolift = IfcMarineFacilityTypeEnum.HYDROLIFT +shipyard = IfcMarineFacilityTypeEnum.SHIPYARD +shiplift = IfcMarineFacilityTypeEnum.SHIPLIFT +port = IfcMarineFacilityTypeEnum.PORT +quay = IfcMarineFacilityTypeEnum.QUAY +floatingdock = IfcMarineFacilityTypeEnum.FLOATINGDOCK +navigationalchannel = IfcMarineFacilityTypeEnum.NAVIGATIONALCHANNEL +breakwater = IfcMarineFacilityTypeEnum.BREAKWATER +drydock = IfcMarineFacilityTypeEnum.DRYDOCK +jetty = IfcMarineFacilityTypeEnum.JETTY +shiplock = IfcMarineFacilityTypeEnum.SHIPLOCK +barrierbeach = IfcMarineFacilityTypeEnum.BARRIERBEACH +slipway = IfcMarineFacilityTypeEnum.SLIPWAY +waterway = IfcMarineFacilityTypeEnum.WATERWAY +userdefined = IfcMarineFacilityTypeEnum.USERDEFINED +notdefined = IfcMarineFacilityTypeEnum.NOTDEFINED IfcMarinePartTypeEnum = enum_namespace() -crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) -approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +crest = IfcMarinePartTypeEnum.CREST +manufacturing = IfcMarinePartTypeEnum.MANUFACTURING +lowwaterline = IfcMarinePartTypeEnum.LOWWATERLINE +core = IfcMarinePartTypeEnum.CORE +waterfield = IfcMarinePartTypeEnum.WATERFIELD +cill_level = IfcMarinePartTypeEnum.CILL_LEVEL +berthingstructure = IfcMarinePartTypeEnum.BERTHINGSTRUCTURE +copelevel = IfcMarinePartTypeEnum.COPELEVEL +chamber = IfcMarinePartTypeEnum.CHAMBER +storagearea = IfcMarinePartTypeEnum.STORAGEAREA +approachchannel = IfcMarinePartTypeEnum.APPROACHCHANNEL +vehicleservicing = IfcMarinePartTypeEnum.VEHICLESERVICING +shiptransfer = IfcMarinePartTypeEnum.SHIPTRANSFER +gatehead = IfcMarinePartTypeEnum.GATEHEAD +gudingstructure = IfcMarinePartTypeEnum.GUDINGSTRUCTURE +belowwaterline = IfcMarinePartTypeEnum.BELOWWATERLINE +weatherside = IfcMarinePartTypeEnum.WEATHERSIDE +landfield = IfcMarinePartTypeEnum.LANDFIELD +protection = IfcMarinePartTypeEnum.PROTECTION +leewardside = IfcMarinePartTypeEnum.LEEWARDSIDE +abovewaterline = IfcMarinePartTypeEnum.ABOVEWATERLINE +anchorage = IfcMarinePartTypeEnum.ANCHORAGE +navigationalarea = IfcMarinePartTypeEnum.NAVIGATIONALAREA +highwaterline = IfcMarinePartTypeEnum.HIGHWATERLINE +userdefined = IfcMarinePartTypeEnum.USERDEFINED +notdefined = IfcMarinePartTypeEnum.NOTDEFINED IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +rivet = IfcMechanicalFastenerTypeEnum.RIVET +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +railjoint = IfcMechanicalFastenerTypeEnum.RAILJOINT +railfastening = IfcMechanicalFastenerTypeEnum.RAILFASTENING +chain = IfcMechanicalFastenerTypeEnum.CHAIN +rope = IfcMechanicalFastenerTypeEnum.ROPE +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stringer = IfcMemberTypeEnum.STRINGER +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +suspender = IfcMemberTypeEnum.SUSPENDER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +structuralcable = IfcMemberTypeEnum.STRUCTURALCABLE +tiebar = IfcMemberTypeEnum.TIEBAR +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) -accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) -subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) -mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) -mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) -packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) -service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) -userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +e_utran_node_b = IfcMobileTelecommunicationsApplianceTypeEnum.E_UTRAN_NODE_B +remoteradiounit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTERADIOUNIT +accesspoint = IfcMobileTelecommunicationsApplianceTypeEnum.ACCESSPOINT +basetransceiverstation = IfcMobileTelecommunicationsApplianceTypeEnum.BASETRANSCEIVERSTATION +remoteunit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTEUNIT +basebandunit = IfcMobileTelecommunicationsApplianceTypeEnum.BASEBANDUNIT +masterunit = IfcMobileTelecommunicationsApplianceTypeEnum.MASTERUNIT +gateway_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.GATEWAY_GPRS_SUPPORT_NODE +subscriberserver = IfcMobileTelecommunicationsApplianceTypeEnum.SUBSCRIBERSERVER +mobileswitchingcenter = IfcMobileTelecommunicationsApplianceTypeEnum.MOBILESWITCHINGCENTER +mscserver = IfcMobileTelecommunicationsApplianceTypeEnum.MSCSERVER +packetcontrolunit = IfcMobileTelecommunicationsApplianceTypeEnum.PACKETCONTROLUNIT +service_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.SERVICE_GPRS_SUPPORT_NODE +userdefined = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcMobileTelecommunicationsApplianceTypeEnum.NOTDEFINED IfcMooringDeviceTypeEnum = enum_namespace() -linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +linetensioner = IfcMooringDeviceTypeEnum.LINETENSIONER +magneticdevice = IfcMooringDeviceTypeEnum.MAGNETICDEVICE +mooringhooks = IfcMooringDeviceTypeEnum.MOORINGHOOKS +vacuumdevice = IfcMooringDeviceTypeEnum.VACUUMDEVICE +bollard = IfcMooringDeviceTypeEnum.BOLLARD +userdefined = IfcMooringDeviceTypeEnum.USERDEFINED +notdefined = IfcMooringDeviceTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNavigationElementTypeEnum = enum_namespace() -beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) -buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) -userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +beacon = IfcNavigationElementTypeEnum.BEACON +buoy = IfcNavigationElementTypeEnum.BUOY +userdefined = IfcNavigationElementTypeEnum.USERDEFINED +notdefined = IfcNavigationElementTypeEnum.NOTDEFINED IfcObjectTypeEnum = enum_namespace() -product = express_getattr(IfcObjectTypeEnum, 'PRODUCT', INDETERMINATE) -process = express_getattr(IfcObjectTypeEnum, 'PROCESS', INDETERMINATE) -control = express_getattr(IfcObjectTypeEnum, 'CONTROL', INDETERMINATE) -resource = express_getattr(IfcObjectTypeEnum, 'RESOURCE', INDETERMINATE) -actor = express_getattr(IfcObjectTypeEnum, 'ACTOR', INDETERMINATE) -group = express_getattr(IfcObjectTypeEnum, 'GROUP', INDETERMINATE) -project = express_getattr(IfcObjectTypeEnum, 'PROJECT', INDETERMINATE) -notdefined = express_getattr(IfcObjectTypeEnum, 'NOTDEFINED', INDETERMINATE) +product = IfcObjectTypeEnum.PRODUCT +process = IfcObjectTypeEnum.PROCESS +control = IfcObjectTypeEnum.CONTROL +resource = IfcObjectTypeEnum.RESOURCE +actor = IfcObjectTypeEnum.ACTOR +group = IfcObjectTypeEnum.GROUP +project = IfcObjectTypeEnum.PROJECT +notdefined = IfcObjectTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPavementTypeEnum = enum_namespace() -flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) -rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) -userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexible = IfcPavementTypeEnum.FLEXIBLE +rigid = IfcPavementTypeEnum.RIGID +userdefined = IfcPavementTypeEnum.USERDEFINED +notdefined = IfcPavementTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +driven = IfcPileTypeEnum.DRIVEN +jetgrouting = IfcPileTypeEnum.JETGROUTING +cohesion = IfcPileTypeEnum.COHESION +friction = IfcPileTypeEnum.FRICTION +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +sheet = IfcPlateTypeEnum.SHEET +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +base_plate = IfcPlateTypeEnum.BASE_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) +curve = IfcProfileTypeEnum.CURVE +area = IfcProfileTypeEnum.AREA IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +anti_arcing_device = IfcProtectiveDeviceTypeEnum.ANTI_ARCING_DEVICE +sparkgap = IfcProtectiveDeviceTypeEnum.SPARKGAP +voltagelimiter = IfcProtectiveDeviceTypeEnum.VOLTAGELIMITER +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailTypeEnum = enum_namespace() -rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +rackrail = IfcRailTypeEnum.RACKRAIL +blade = IfcRailTypeEnum.BLADE +guardrail = IfcRailTypeEnum.GUARDRAIL +stockrail = IfcRailTypeEnum.STOCKRAIL +checkrail = IfcRailTypeEnum.CHECKRAIL +rail = IfcRailTypeEnum.RAIL +userdefined = IfcRailTypeEnum.USERDEFINED +notdefined = IfcRailTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +handrail = IfcRailingTypeEnum.HANDRAIL +guardrail = IfcRailingTypeEnum.GUARDRAIL +balustrade = IfcRailingTypeEnum.BALUSTRADE +fence = IfcRailingTypeEnum.FENCE +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRailwayPartTypeEnum = enum_namespace() -trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -plaintracksupestructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPESTRUCTURE', INDETERMINATE) -linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackstructure = IfcRailwayPartTypeEnum.TRACKSTRUCTURE +trackstructurepart = IfcRailwayPartTypeEnum.TRACKSTRUCTUREPART +linesidestructurepart = IfcRailwayPartTypeEnum.LINESIDESTRUCTUREPART +dilatationsuperstructure = IfcRailwayPartTypeEnum.DILATATIONSUPERSTRUCTURE +plaintracksupestructure = IfcRailwayPartTypeEnum.PLAINTRACKSUPESTRUCTURE +linesidestructure = IfcRailwayPartTypeEnum.LINESIDESTRUCTURE +superstructure = IfcRailwayPartTypeEnum.SUPERSTRUCTURE +turnoutsuperstructure = IfcRailwayPartTypeEnum.TURNOUTSUPERSTRUCTURE +userdefined = IfcRailwayPartTypeEnum.USERDEFINED +notdefined = IfcRailwayPartTypeEnum.NOTDEFINED IfcRailwayTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRailwayTypeEnum.USERDEFINED +notdefined = IfcRailwayTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcRampFlightTypeEnum.STRAIGHT +spiral = IfcRampFlightTypeEnum.SPIRAL +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +daily = IfcRecurrenceTypeEnum.DAILY +weekly = IfcRecurrenceTypeEnum.WEEKLY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) -boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) -intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) -position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +kilopoint = IfcReferentTypeEnum.KILOPOINT +milepoint = IfcReferentTypeEnum.MILEPOINT +station = IfcReferentTypeEnum.STATION +referencemarker = IfcReferentTypeEnum.REFERENCEMARKER +landmark = IfcReferentTypeEnum.LANDMARK +boundary = IfcReferentTypeEnum.BOUNDARY +intersection = IfcReferentTypeEnum.INTERSECTION +position = IfcReferentTypeEnum.POSITION +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcedSoilTypeEnum = enum_namespace() -surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +surchargepreloaded = IfcReinforcedSoilTypeEnum.SURCHARGEPRELOADED +verticallydrained = IfcReinforcedSoilTypeEnum.VERTICALLYDRAINED +dynamicallycompacted = IfcReinforcedSoilTypeEnum.DYNAMICALLYCOMPACTED +replaced = IfcReinforcedSoilTypeEnum.REPLACED +rollercompacted = IfcReinforcedSoilTypeEnum.ROLLERCOMPACTED +grouted = IfcReinforcedSoilTypeEnum.GROUTED +userdefined = IfcReinforcedSoilTypeEnum.USERDEFINED +notdefined = IfcReinforcedSoilTypeEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +main = IfcReinforcingBarRoleEnum.MAIN +shear = IfcReinforcingBarRoleEnum.SHEAR +ligature = IfcReinforcingBarRoleEnum.LIGATURE +stud = IfcReinforcingBarRoleEnum.STUD +punching = IfcReinforcingBarRoleEnum.PUNCHING +edge = IfcReinforcingBarRoleEnum.EDGE +ring = IfcReinforcingBarRoleEnum.RING +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +stud = IfcReinforcingBarTypeEnum.STUD +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoadPartTypeEnum = enum_namespace() -roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +roadsidepart = IfcRoadPartTypeEnum.ROADSIDEPART +bus_stop = IfcRoadPartTypeEnum.BUS_STOP +hardshoulder = IfcRoadPartTypeEnum.HARDSHOULDER +intersection = IfcRoadPartTypeEnum.INTERSECTION +passingbay = IfcRoadPartTypeEnum.PASSINGBAY +roadwayplateau = IfcRoadPartTypeEnum.ROADWAYPLATEAU +roadside = IfcRoadPartTypeEnum.ROADSIDE +refugeisland = IfcRoadPartTypeEnum.REFUGEISLAND +tollplaza = IfcRoadPartTypeEnum.TOLLPLAZA +centralreserve = IfcRoadPartTypeEnum.CENTRALRESERVE +sidewalk = IfcRoadPartTypeEnum.SIDEWALK +parkingbay = IfcRoadPartTypeEnum.PARKINGBAY +railwaycrossing = IfcRoadPartTypeEnum.RAILWAYCROSSING +pedestrian_crossing = IfcRoadPartTypeEnum.PEDESTRIAN_CROSSING +softshoulder = IfcRoadPartTypeEnum.SOFTSHOULDER +bicyclecrossing = IfcRoadPartTypeEnum.BICYCLECROSSING +centralisland = IfcRoadPartTypeEnum.CENTRALISLAND +shoulder = IfcRoadPartTypeEnum.SHOULDER +trafficlane = IfcRoadPartTypeEnum.TRAFFICLANE +roadsegment = IfcRoadPartTypeEnum.ROADSEGMENT +roundabout = IfcRoadPartTypeEnum.ROUNDABOUT +layby = IfcRoadPartTypeEnum.LAYBY +carriageway = IfcRoadPartTypeEnum.CARRIAGEWAY +trafficisland = IfcRoadPartTypeEnum.TRAFFICISLAND +userdefined = IfcRoadPartTypeEnum.USERDEFINED +notdefined = IfcRoadPartTypeEnum.NOTDEFINED IfcRoadTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRoadTypeEnum.USERDEFINED +notdefined = IfcRoadTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +supplier = IfcRoleEnum.SUPPLIER +manufacturer = IfcRoleEnum.MANUFACTURER +contractor = IfcRoleEnum.CONTRACTOR +subcontractor = IfcRoleEnum.SUBCONTRACTOR +architect = IfcRoleEnum.ARCHITECT +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +costengineer = IfcRoleEnum.COSTENGINEER +client = IfcRoleEnum.CLIENT +buildingowner = IfcRoleEnum.BUILDINGOWNER +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +projectmanager = IfcRoleEnum.PROJECTMANAGER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +civilengineer = IfcRoleEnum.CIVILENGINEER +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +engineer = IfcRoleEnum.ENGINEER +owner = IfcRoleEnum.OWNER +consultant = IfcRoleEnum.CONSULTANT +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +reseller = IfcRoleEnum.RESELLER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) +exa = IfcSIPrefix.EXA +peta = IfcSIPrefix.PETA +tera = IfcSIPrefix.TERA +giga = IfcSIPrefix.GIGA +mega = IfcSIPrefix.MEGA +kilo = IfcSIPrefix.KILO +hecto = IfcSIPrefix.HECTO +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +centi = IfcSIPrefix.CENTI +milli = IfcSIPrefix.MILLI +micro = IfcSIPrefix.MICRO +nano = IfcSIPrefix.NANO +pico = IfcSIPrefix.PICO +femto = IfcSIPrefix.FEMTO +atto = IfcSIPrefix.ATTO IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) +uniform = IfcSectionTypeEnum.UNIFORM +tapered = IfcSectionTypeEnum.TAPERED IfcSensorTypeEnum = enum_namespace() -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cosensor = IfcSensorTypeEnum.COSENSOR +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +earthquakesensor = IfcSensorTypeEnum.EARTHQUAKESENSOR +foreignobjectdetectionsensor = IfcSensorTypeEnum.FOREIGNOBJECTDETECTIONSENSOR +obstaclesensor = IfcSensorTypeEnum.OBSTACLESENSOR +rainsensor = IfcSensorTypeEnum.RAINSENSOR +snowdepthsensor = IfcSensorTypeEnum.SNOWDEPTHSENSOR +trainsensor = IfcSensorTypeEnum.TRAINSENSOR +turnoutclosuresensor = IfcSensorTypeEnum.TURNOUTCLOSURESENSOR +wheelsensor = IfcSensorTypeEnum.WHEELSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +start_start = IfcSequenceEnum.START_START +start_finish = IfcSequenceEnum.START_FINISH +finish_start = IfcSequenceEnum.FINISH_START +finish_finish = IfcSequenceEnum.FINISH_FINISH +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +awning = IfcShadingDeviceTypeEnum.AWNING +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSignTypeEnum = enum_namespace() -marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = IfcSignTypeEnum.MARKER +pictoral = IfcSignTypeEnum.PICTORAL +mirror = IfcSignTypeEnum.MIRROR +userdefined = IfcSignTypeEnum.USERDEFINED +notdefined = IfcSignTypeEnum.NOTDEFINED IfcSignalTypeEnum = enum_namespace() -visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +visual = IfcSignalTypeEnum.VISUAL +audio = IfcSignalTypeEnum.AUDIO +mixed = IfcSignalTypeEnum.MIXED +userdefined = IfcSignalTypeEnum.USERDEFINED +notdefined = IfcSignalTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME IfcSlabTypeEnum = enum_namespace() -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +floor = IfcSlabTypeEnum.FLOOR +roof = IfcSlabTypeEnum.ROOF +landing = IfcSlabTypeEnum.LANDING +baseslab = IfcSlabTypeEnum.BASESLAB +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +paving = IfcSlabTypeEnum.PAVING +wearing = IfcSlabTypeEnum.WEARING +sidewalk = IfcSlabTypeEnum.SIDEWALK +trackslab = IfcSlabTypeEnum.TRACKSLAB +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +space = IfcSpaceTypeEnum.SPACE +parking = IfcSpaceTypeEnum.PARKING +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +external = IfcSpaceTypeEnum.EXTERNAL +berth = IfcSpaceTypeEnum.BERTH +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +reservation = IfcSpatialZoneTypeEnum.RESERVATION +interference = IfcSpatialZoneTypeEnum.INTERFERENCE +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +spiral = IfcStairFlightTypeEnum.SPIRAL +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +ladder = IfcStairTypeEnum.LADDER +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) +readwrite = IfcStateEnum.READWRITE +readonly = IfcStateEnum.READONLY +locked = IfcStateEnum.LOCKED +readwritelocked = IfcStateEnum.READWRITELOCKED +readonlylocked = IfcStateEnum.READONLYLOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +cable = IfcStructuralCurveMemberTypeEnum.CABLE +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralSurfaceActivityTypeEnum.CONST +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +mark = IfcSurfaceFeatureTypeEnum.MARK +tag = IfcSurfaceFeatureTypeEnum.TAG +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +defect = IfcSurfaceFeatureTypeEnum.DEFECT +hatchmarking = IfcSurfaceFeatureTypeEnum.HATCHMARKING +linemarking = IfcSurfaceFeatureTypeEnum.LINEMARKING +pavementsurfacemarking = IfcSurfaceFeatureTypeEnum.PAVEMENTSURFACEMARKING +symbolmarking = IfcSurfaceFeatureTypeEnum.SYMBOLMARKING +nonskidsurfacing = IfcSurfaceFeatureTypeEnum.NONSKIDSURFACING +rumblestrip = IfcSurfaceFeatureTypeEnum.RUMBLESTRIP +transverserumblestrip = IfcSurfaceFeatureTypeEnum.TRANSVERSERUMBLESTRIP +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) +positive = IfcSurfaceSide.POSITIVE +negative = IfcSurfaceSide.NEGATIVE +both = IfcSurfaceSide.BOTH IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +relay = IfcSwitchingDeviceTypeEnum.RELAY +start_and_stop_equipment = IfcSwitchingDeviceTypeEnum.START_AND_STOP_EQUIPMENT +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +subrack = IfcSystemFurnitureElementTypeEnum.SUBRACK +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +oilretentiontray = IfcTankTypeEnum.OILRETENTIONTRAY +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +attendance = IfcTaskTypeEnum.ATTENDANCE +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +duct = IfcTendonConduitTypeEnum.DUCT +coupler = IfcTendonConduitTypeEnum.COUPLER +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +diabolo = IfcTendonConduitTypeEnum.DIABOLO +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP +down = IfcTextPath.DOWN IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTrackElementTypeEnum = enum_namespace() -trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +trackendofalignment = IfcTrackElementTypeEnum.TRACKENDOFALIGNMENT +blockingdevice = IfcTrackElementTypeEnum.BLOCKINGDEVICE +vehiclestop = IfcTrackElementTypeEnum.VEHICLESTOP +sleeper = IfcTrackElementTypeEnum.SLEEPER +half_set_of_blades = IfcTrackElementTypeEnum.HALF_SET_OF_BLADES +speedregulator = IfcTrackElementTypeEnum.SPEEDREGULATOR +derailer = IfcTrackElementTypeEnum.DERAILER +frog = IfcTrackElementTypeEnum.FROG +userdefined = IfcTrackElementTypeEnum.USERDEFINED +notdefined = IfcTrackElementTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +chopper = IfcTransformerTypeEnum.CHOPPER +combined = IfcTransformerTypeEnum.COMBINED +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) +discontinuous = IfcTransitionCode.DISCONTINUOUS +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE IfcTransportElementFixedTypeEnum = enum_namespace() -elevator = express_getattr(IfcTransportElementFixedTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementFixedTypeEnum, 'ESCALATOR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementFixedTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -craneway = express_getattr(IfcTransportElementFixedTypeEnum, 'CRANEWAY', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -haulinggear = express_getattr(IfcTransportElementFixedTypeEnum, 'HAULINGGEAR', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +elevator = IfcTransportElementFixedTypeEnum.ELEVATOR +escalator = IfcTransportElementFixedTypeEnum.ESCALATOR +movingwalkway = IfcTransportElementFixedTypeEnum.MOVINGWALKWAY +craneway = IfcTransportElementFixedTypeEnum.CRANEWAY +liftinggear = IfcTransportElementFixedTypeEnum.LIFTINGGEAR +haulinggear = IfcTransportElementFixedTypeEnum.HAULINGGEAR +userdefined = IfcTransportElementFixedTypeEnum.USERDEFINED +notdefined = IfcTransportElementFixedTypeEnum.NOTDEFINED IfcTransportElementNonFixedTypeEnum = enum_namespace() -vehicle = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLE', INDETERMINATE) -vehicletracked = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -rollingstock = express_getattr(IfcTransportElementNonFixedTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehiclewheeled = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -vehicleair = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEAIR', INDETERMINATE) -cargo = express_getattr(IfcTransportElementNonFixedTypeEnum, 'CARGO', INDETERMINATE) -vehiclemarine = express_getattr(IfcTransportElementNonFixedTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementNonFixedTypeEnum, 'NOTDEFINED', INDETERMINATE) +vehicle = IfcTransportElementNonFixedTypeEnum.VEHICLE +vehicletracked = IfcTransportElementNonFixedTypeEnum.VEHICLETRACKED +rollingstock = IfcTransportElementNonFixedTypeEnum.ROLLINGSTOCK +vehiclewheeled = IfcTransportElementNonFixedTypeEnum.VEHICLEWHEELED +vehicleair = IfcTransportElementNonFixedTypeEnum.VEHICLEAIR +cargo = IfcTransportElementNonFixedTypeEnum.CARGO +vehiclemarine = IfcTransportElementNonFixedTypeEnum.VEHICLEMARINE +userdefined = IfcTransportElementNonFixedTypeEnum.USERDEFINED +notdefined = IfcTransportElementNonFixedTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +combined = IfcUnitaryControlElementTypeEnum.COMBINED +basestationcontroller = IfcUnitaryControlElementTypeEnum.BASESTATIONCONTROLLER +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +viscous = IfcVibrationDamperTypeEnum.VISCOUS +rubber = IfcVibrationDamperTypeEnum.RUBBER +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +base = IfcVibrationIsolatorTypeEnum.BASE +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +notch = IfcVoidingFeatureTypeEnum.NOTCH +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +edge = IfcVoidingFeatureTypeEnum.EDGE +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +polygonal = IfcWallTypeEnum.POLYGONAL +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +retainingwall = IfcWallTypeEnum.RETAININGWALL +wavewall = IfcWallTypeEnum.WAVEWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +bottom = IfcWindowPanelPositionEnum.BOTTOM +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowStyleConstructionEnum = enum_namespace() -aluminium = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM', INDETERMINATE) -high_grade_steel = express_getattr(IfcWindowStyleConstructionEnum, 'HIGH_GRADE_STEEL', INDETERMINATE) -steel = express_getattr(IfcWindowStyleConstructionEnum, 'STEEL', INDETERMINATE) -wood = express_getattr(IfcWindowStyleConstructionEnum, 'WOOD', INDETERMINATE) -aluminium_wood = express_getattr(IfcWindowStyleConstructionEnum, 'ALUMINIUM_WOOD', INDETERMINATE) -plastic = express_getattr(IfcWindowStyleConstructionEnum, 'PLASTIC', INDETERMINATE) -other_construction = express_getattr(IfcWindowStyleConstructionEnum, 'OTHER_CONSTRUCTION', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleConstructionEnum, 'NOTDEFINED', INDETERMINATE) +aluminium = IfcWindowStyleConstructionEnum.ALUMINIUM +high_grade_steel = IfcWindowStyleConstructionEnum.HIGH_GRADE_STEEL +steel = IfcWindowStyleConstructionEnum.STEEL +wood = IfcWindowStyleConstructionEnum.WOOD +aluminium_wood = IfcWindowStyleConstructionEnum.ALUMINIUM_WOOD +plastic = IfcWindowStyleConstructionEnum.PLASTIC +other_construction = IfcWindowStyleConstructionEnum.OTHER_CONSTRUCTION +notdefined = IfcWindowStyleConstructionEnum.NOTDEFINED IfcWindowStyleOperationEnum = enum_namespace() -single_panel = express_getattr(IfcWindowStyleOperationEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowStyleOperationEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowStyleOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowStyleOperationEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowStyleOperationEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowStyleOperationEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowStyleOperationEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowStyleOperationEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowStyleOperationEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowStyleOperationEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowStyleOperationEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowStyleOperationEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowStyleOperationEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowStyleOperationEnum.USERDEFINED +notdefined = IfcWindowStyleOperationEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +window = IfcWindowTypeEnum.WINDOW +skylight = IfcWindowTypeEnum.SKYLIGHT +lightdome = IfcWindowTypeEnum.LIGHTDOME +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_RC4', *args, **kwargs) diff --git a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py index ec18f39a93..ce2c064993 100644 --- a/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py +++ b/src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_TC1.py @@ -1,5 +1,8 @@ import ifcopenshell +def is_indeterminate(v): + return v is None or type(v).__name__ == 'indeterminate_type' + def exists(v): if callable(v): try: @@ -7,10 +10,10 @@ def exists(v): except IndexError as e: return False else: - return v is not None + return not is_indeterminate(v) def nvl(v, default): - return v if v is not None else default + return v if not is_indeterminate(v) else default def is_entity(inst): if isinstance(inst, ifcopenshell.entity_instance): @@ -22,13 +25,13 @@ def is_entity(inst): 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: + elif is_indeterminate(v): return INDETERMINATE return len(v) old_range = range def range(*args): - if INDETERMINATE in args: + if any(map(is_indeterminate, args)): return yield from old_range(*args) sizeof = express_len @@ -149,2361 +152,2361 @@ class enum_namespace: def __getattr__(self, k): return express_getattr(k, 'upper', INDETERMINATE)() IfcActionRequestTypeEnum = enum_namespace() -email = express_getattr(IfcActionRequestTypeEnum, 'EMAIL', INDETERMINATE) -fax = express_getattr(IfcActionRequestTypeEnum, 'FAX', INDETERMINATE) -phone = express_getattr(IfcActionRequestTypeEnum, 'PHONE', INDETERMINATE) -post = express_getattr(IfcActionRequestTypeEnum, 'POST', INDETERMINATE) -verbal = express_getattr(IfcActionRequestTypeEnum, 'VERBAL', INDETERMINATE) -userdefined = express_getattr(IfcActionRequestTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionRequestTypeEnum, 'NOTDEFINED', INDETERMINATE) +email = IfcActionRequestTypeEnum.EMAIL +fax = IfcActionRequestTypeEnum.FAX +phone = IfcActionRequestTypeEnum.PHONE +post = IfcActionRequestTypeEnum.POST +verbal = IfcActionRequestTypeEnum.VERBAL +userdefined = IfcActionRequestTypeEnum.USERDEFINED +notdefined = IfcActionRequestTypeEnum.NOTDEFINED IfcActionSourceTypeEnum = enum_namespace() -brakes = express_getattr(IfcActionSourceTypeEnum, 'BRAKES', INDETERMINATE) -buoyancy = express_getattr(IfcActionSourceTypeEnum, 'BUOYANCY', INDETERMINATE) -completion_g1 = express_getattr(IfcActionSourceTypeEnum, 'COMPLETION_G1', INDETERMINATE) -creep = express_getattr(IfcActionSourceTypeEnum, 'CREEP', INDETERMINATE) -current = express_getattr(IfcActionSourceTypeEnum, 'CURRENT', INDETERMINATE) -dead_load_g = express_getattr(IfcActionSourceTypeEnum, 'DEAD_LOAD_G', INDETERMINATE) -earthquake_e = express_getattr(IfcActionSourceTypeEnum, 'EARTHQUAKE_E', INDETERMINATE) -erection = express_getattr(IfcActionSourceTypeEnum, 'ERECTION', INDETERMINATE) -fire = express_getattr(IfcActionSourceTypeEnum, 'FIRE', INDETERMINATE) -ice = express_getattr(IfcActionSourceTypeEnum, 'ICE', INDETERMINATE) -impact = express_getattr(IfcActionSourceTypeEnum, 'IMPACT', INDETERMINATE) -impulse = express_getattr(IfcActionSourceTypeEnum, 'IMPULSE', INDETERMINATE) -lack_of_fit = express_getattr(IfcActionSourceTypeEnum, 'LACK_OF_FIT', INDETERMINATE) -live_load_q = express_getattr(IfcActionSourceTypeEnum, 'LIVE_LOAD_Q', INDETERMINATE) -prestressing_p = express_getattr(IfcActionSourceTypeEnum, 'PRESTRESSING_P', INDETERMINATE) -propping = express_getattr(IfcActionSourceTypeEnum, 'PROPPING', INDETERMINATE) -rain = express_getattr(IfcActionSourceTypeEnum, 'RAIN', INDETERMINATE) -settlement_u = express_getattr(IfcActionSourceTypeEnum, 'SETTLEMENT_U', INDETERMINATE) -shrinkage = express_getattr(IfcActionSourceTypeEnum, 'SHRINKAGE', INDETERMINATE) -snow_s = express_getattr(IfcActionSourceTypeEnum, 'SNOW_S', INDETERMINATE) -system_imperfection = express_getattr(IfcActionSourceTypeEnum, 'SYSTEM_IMPERFECTION', INDETERMINATE) -temperature_t = express_getattr(IfcActionSourceTypeEnum, 'TEMPERATURE_T', INDETERMINATE) -transport = express_getattr(IfcActionSourceTypeEnum, 'TRANSPORT', INDETERMINATE) -wave = express_getattr(IfcActionSourceTypeEnum, 'WAVE', INDETERMINATE) -wind_w = express_getattr(IfcActionSourceTypeEnum, 'WIND_W', INDETERMINATE) -userdefined = express_getattr(IfcActionSourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionSourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +brakes = IfcActionSourceTypeEnum.BRAKES +buoyancy = IfcActionSourceTypeEnum.BUOYANCY +completion_g1 = IfcActionSourceTypeEnum.COMPLETION_G1 +creep = IfcActionSourceTypeEnum.CREEP +current = IfcActionSourceTypeEnum.CURRENT +dead_load_g = IfcActionSourceTypeEnum.DEAD_LOAD_G +earthquake_e = IfcActionSourceTypeEnum.EARTHQUAKE_E +erection = IfcActionSourceTypeEnum.ERECTION +fire = IfcActionSourceTypeEnum.FIRE +ice = IfcActionSourceTypeEnum.ICE +impact = IfcActionSourceTypeEnum.IMPACT +impulse = IfcActionSourceTypeEnum.IMPULSE +lack_of_fit = IfcActionSourceTypeEnum.LACK_OF_FIT +live_load_q = IfcActionSourceTypeEnum.LIVE_LOAD_Q +prestressing_p = IfcActionSourceTypeEnum.PRESTRESSING_P +propping = IfcActionSourceTypeEnum.PROPPING +rain = IfcActionSourceTypeEnum.RAIN +settlement_u = IfcActionSourceTypeEnum.SETTLEMENT_U +shrinkage = IfcActionSourceTypeEnum.SHRINKAGE +snow_s = IfcActionSourceTypeEnum.SNOW_S +system_imperfection = IfcActionSourceTypeEnum.SYSTEM_IMPERFECTION +temperature_t = IfcActionSourceTypeEnum.TEMPERATURE_T +transport = IfcActionSourceTypeEnum.TRANSPORT +wave = IfcActionSourceTypeEnum.WAVE +wind_w = IfcActionSourceTypeEnum.WIND_W +userdefined = IfcActionSourceTypeEnum.USERDEFINED +notdefined = IfcActionSourceTypeEnum.NOTDEFINED IfcActionTypeEnum = enum_namespace() -extraordinary_a = express_getattr(IfcActionTypeEnum, 'EXTRAORDINARY_A', INDETERMINATE) -permanent_g = express_getattr(IfcActionTypeEnum, 'PERMANENT_G', INDETERMINATE) -variable_q = express_getattr(IfcActionTypeEnum, 'VARIABLE_Q', INDETERMINATE) -userdefined = express_getattr(IfcActionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActionTypeEnum, 'NOTDEFINED', INDETERMINATE) +extraordinary_a = IfcActionTypeEnum.EXTRAORDINARY_A +permanent_g = IfcActionTypeEnum.PERMANENT_G +variable_q = IfcActionTypeEnum.VARIABLE_Q +userdefined = IfcActionTypeEnum.USERDEFINED +notdefined = IfcActionTypeEnum.NOTDEFINED IfcActuatorTypeEnum = enum_namespace() -electricactuator = express_getattr(IfcActuatorTypeEnum, 'ELECTRICACTUATOR', INDETERMINATE) -handoperatedactuator = express_getattr(IfcActuatorTypeEnum, 'HANDOPERATEDACTUATOR', INDETERMINATE) -hydraulicactuator = express_getattr(IfcActuatorTypeEnum, 'HYDRAULICACTUATOR', INDETERMINATE) -pneumaticactuator = express_getattr(IfcActuatorTypeEnum, 'PNEUMATICACTUATOR', INDETERMINATE) -thermostaticactuator = express_getattr(IfcActuatorTypeEnum, 'THERMOSTATICACTUATOR', INDETERMINATE) -userdefined = express_getattr(IfcActuatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcActuatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +electricactuator = IfcActuatorTypeEnum.ELECTRICACTUATOR +handoperatedactuator = IfcActuatorTypeEnum.HANDOPERATEDACTUATOR +hydraulicactuator = IfcActuatorTypeEnum.HYDRAULICACTUATOR +pneumaticactuator = IfcActuatorTypeEnum.PNEUMATICACTUATOR +thermostaticactuator = IfcActuatorTypeEnum.THERMOSTATICACTUATOR +userdefined = IfcActuatorTypeEnum.USERDEFINED +notdefined = IfcActuatorTypeEnum.NOTDEFINED IfcAddressTypeEnum = enum_namespace() -distributionpoint = express_getattr(IfcAddressTypeEnum, 'DISTRIBUTIONPOINT', INDETERMINATE) -home = express_getattr(IfcAddressTypeEnum, 'HOME', INDETERMINATE) -office = express_getattr(IfcAddressTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcAddressTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcAddressTypeEnum, 'USERDEFINED', INDETERMINATE) +distributionpoint = IfcAddressTypeEnum.DISTRIBUTIONPOINT +home = IfcAddressTypeEnum.HOME +office = IfcAddressTypeEnum.OFFICE +site = IfcAddressTypeEnum.SITE +userdefined = IfcAddressTypeEnum.USERDEFINED IfcAirTerminalBoxTypeEnum = enum_namespace() -constantflow = express_getattr(IfcAirTerminalBoxTypeEnum, 'CONSTANTFLOW', INDETERMINATE) -variableflowpressuredependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREDEPENDANT', INDETERMINATE) -variableflowpressureindependant = express_getattr(IfcAirTerminalBoxTypeEnum, 'VARIABLEFLOWPRESSUREINDEPENDANT', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +constantflow = IfcAirTerminalBoxTypeEnum.CONSTANTFLOW +variableflowpressuredependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREDEPENDANT +variableflowpressureindependant = IfcAirTerminalBoxTypeEnum.VARIABLEFLOWPRESSUREINDEPENDANT +userdefined = IfcAirTerminalBoxTypeEnum.USERDEFINED +notdefined = IfcAirTerminalBoxTypeEnum.NOTDEFINED IfcAirTerminalTypeEnum = enum_namespace() -diffuser = express_getattr(IfcAirTerminalTypeEnum, 'DIFFUSER', INDETERMINATE) -grille = express_getattr(IfcAirTerminalTypeEnum, 'GRILLE', INDETERMINATE) -louvre = express_getattr(IfcAirTerminalTypeEnum, 'LOUVRE', INDETERMINATE) -register = express_getattr(IfcAirTerminalTypeEnum, 'REGISTER', INDETERMINATE) -userdefined = express_getattr(IfcAirTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +diffuser = IfcAirTerminalTypeEnum.DIFFUSER +grille = IfcAirTerminalTypeEnum.GRILLE +louvre = IfcAirTerminalTypeEnum.LOUVRE +register = IfcAirTerminalTypeEnum.REGISTER +userdefined = IfcAirTerminalTypeEnum.USERDEFINED +notdefined = IfcAirTerminalTypeEnum.NOTDEFINED IfcAirToAirHeatRecoveryTypeEnum = enum_namespace() -fixedplatecounterflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECOUNTERFLOWEXCHANGER', INDETERMINATE) -fixedplatecrossflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATECROSSFLOWEXCHANGER', INDETERMINATE) -fixedplateparallelflowexchanger = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'FIXEDPLATEPARALLELFLOWEXCHANGER', INDETERMINATE) -heatpipe = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'HEATPIPE', INDETERMINATE) -rotarywheel = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'ROTARYWHEEL', INDETERMINATE) -runaroundcoilloop = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'RUNAROUNDCOILLOOP', INDETERMINATE) -thermosiphoncoiltypeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONCOILTYPEHEATEXCHANGERS', INDETERMINATE) -thermosiphonsealedtubeheatexchangers = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'THERMOSIPHONSEALEDTUBEHEATEXCHANGERS', INDETERMINATE) -twintowerenthalpyrecoveryloops = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'TWINTOWERENTHALPYRECOVERYLOOPS', INDETERMINATE) -userdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAirToAirHeatRecoveryTypeEnum, 'NOTDEFINED', INDETERMINATE) +fixedplatecounterflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECOUNTERFLOWEXCHANGER +fixedplatecrossflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATECROSSFLOWEXCHANGER +fixedplateparallelflowexchanger = IfcAirToAirHeatRecoveryTypeEnum.FIXEDPLATEPARALLELFLOWEXCHANGER +heatpipe = IfcAirToAirHeatRecoveryTypeEnum.HEATPIPE +rotarywheel = IfcAirToAirHeatRecoveryTypeEnum.ROTARYWHEEL +runaroundcoilloop = IfcAirToAirHeatRecoveryTypeEnum.RUNAROUNDCOILLOOP +thermosiphoncoiltypeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONCOILTYPEHEATEXCHANGERS +thermosiphonsealedtubeheatexchangers = IfcAirToAirHeatRecoveryTypeEnum.THERMOSIPHONSEALEDTUBEHEATEXCHANGERS +twintowerenthalpyrecoveryloops = IfcAirToAirHeatRecoveryTypeEnum.TWINTOWERENTHALPYRECOVERYLOOPS +userdefined = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED +notdefined = IfcAirToAirHeatRecoveryTypeEnum.NOTDEFINED IfcAlarmTypeEnum = enum_namespace() -bell = express_getattr(IfcAlarmTypeEnum, 'BELL', INDETERMINATE) -breakglassbutton = express_getattr(IfcAlarmTypeEnum, 'BREAKGLASSBUTTON', INDETERMINATE) -light = express_getattr(IfcAlarmTypeEnum, 'LIGHT', INDETERMINATE) -manualpullbox = express_getattr(IfcAlarmTypeEnum, 'MANUALPULLBOX', INDETERMINATE) -railwaycrocodile = express_getattr(IfcAlarmTypeEnum, 'RAILWAYCROCODILE', INDETERMINATE) -railwaydetonator = express_getattr(IfcAlarmTypeEnum, 'RAILWAYDETONATOR', INDETERMINATE) -siren = express_getattr(IfcAlarmTypeEnum, 'SIREN', INDETERMINATE) -whistle = express_getattr(IfcAlarmTypeEnum, 'WHISTLE', INDETERMINATE) -userdefined = express_getattr(IfcAlarmTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlarmTypeEnum, 'NOTDEFINED', INDETERMINATE) +bell = IfcAlarmTypeEnum.BELL +breakglassbutton = IfcAlarmTypeEnum.BREAKGLASSBUTTON +light = IfcAlarmTypeEnum.LIGHT +manualpullbox = IfcAlarmTypeEnum.MANUALPULLBOX +railwaycrocodile = IfcAlarmTypeEnum.RAILWAYCROCODILE +railwaydetonator = IfcAlarmTypeEnum.RAILWAYDETONATOR +siren = IfcAlarmTypeEnum.SIREN +whistle = IfcAlarmTypeEnum.WHISTLE +userdefined = IfcAlarmTypeEnum.USERDEFINED +notdefined = IfcAlarmTypeEnum.NOTDEFINED IfcAlignmentCantSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -constantcant = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'CONSTANTCANT', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -lineartransition = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'LINEARTRANSITION', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentCantSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentCantSegmentTypeEnum.BLOSSCURVE +constantcant = IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT +cosinecurve = IfcAlignmentCantSegmentTypeEnum.COSINECURVE +helmertcurve = IfcAlignmentCantSegmentTypeEnum.HELMERTCURVE +lineartransition = IfcAlignmentCantSegmentTypeEnum.LINEARTRANSITION +sinecurve = IfcAlignmentCantSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentCantSegmentTypeEnum.VIENNESEBEND IfcAlignmentHorizontalSegmentTypeEnum = enum_namespace() -blosscurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'BLOSSCURVE', INDETERMINATE) -circulararc = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -cosinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'COSINECURVE', INDETERMINATE) -cubic = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'CUBIC', INDETERMINATE) -helmertcurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'HELMERTCURVE', INDETERMINATE) -line = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'LINE', INDETERMINATE) -sinecurve = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'SINECURVE', INDETERMINATE) -viennesebend = express_getattr(IfcAlignmentHorizontalSegmentTypeEnum, 'VIENNESEBEND', INDETERMINATE) +blosscurve = IfcAlignmentHorizontalSegmentTypeEnum.BLOSSCURVE +circulararc = IfcAlignmentHorizontalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentHorizontalSegmentTypeEnum.CLOTHOID +cosinecurve = IfcAlignmentHorizontalSegmentTypeEnum.COSINECURVE +cubic = IfcAlignmentHorizontalSegmentTypeEnum.CUBIC +helmertcurve = IfcAlignmentHorizontalSegmentTypeEnum.HELMERTCURVE +line = IfcAlignmentHorizontalSegmentTypeEnum.LINE +sinecurve = IfcAlignmentHorizontalSegmentTypeEnum.SINECURVE +viennesebend = IfcAlignmentHorizontalSegmentTypeEnum.VIENNESEBEND IfcAlignmentTypeEnum = enum_namespace() -userdefined = express_getattr(IfcAlignmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAlignmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcAlignmentTypeEnum.USERDEFINED +notdefined = IfcAlignmentTypeEnum.NOTDEFINED IfcAlignmentVerticalSegmentTypeEnum = enum_namespace() -circulararc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CIRCULARARC', INDETERMINATE) -clothoid = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CLOTHOID', INDETERMINATE) -constantgradient = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'CONSTANTGRADIENT', INDETERMINATE) -parabolicarc = express_getattr(IfcAlignmentVerticalSegmentTypeEnum, 'PARABOLICARC', INDETERMINATE) +circulararc = IfcAlignmentVerticalSegmentTypeEnum.CIRCULARARC +clothoid = IfcAlignmentVerticalSegmentTypeEnum.CLOTHOID +constantgradient = IfcAlignmentVerticalSegmentTypeEnum.CONSTANTGRADIENT +parabolicarc = IfcAlignmentVerticalSegmentTypeEnum.PARABOLICARC IfcAnalysisModelTypeEnum = enum_namespace() -in_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'IN_PLANE_LOADING_2D', INDETERMINATE) -loading_3d = express_getattr(IfcAnalysisModelTypeEnum, 'LOADING_3D', INDETERMINATE) -out_plane_loading_2d = express_getattr(IfcAnalysisModelTypeEnum, 'OUT_PLANE_LOADING_2D', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisModelTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisModelTypeEnum, 'NOTDEFINED', INDETERMINATE) +in_plane_loading_2d = IfcAnalysisModelTypeEnum.IN_PLANE_LOADING_2D +loading_3d = IfcAnalysisModelTypeEnum.LOADING_3D +out_plane_loading_2d = IfcAnalysisModelTypeEnum.OUT_PLANE_LOADING_2D +userdefined = IfcAnalysisModelTypeEnum.USERDEFINED +notdefined = IfcAnalysisModelTypeEnum.NOTDEFINED IfcAnalysisTheoryTypeEnum = enum_namespace() -first_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FIRST_ORDER_THEORY', INDETERMINATE) -full_nonlinear_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'FULL_NONLINEAR_THEORY', INDETERMINATE) -second_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'SECOND_ORDER_THEORY', INDETERMINATE) -third_order_theory = express_getattr(IfcAnalysisTheoryTypeEnum, 'THIRD_ORDER_THEORY', INDETERMINATE) -userdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnalysisTheoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +first_order_theory = IfcAnalysisTheoryTypeEnum.FIRST_ORDER_THEORY +full_nonlinear_theory = IfcAnalysisTheoryTypeEnum.FULL_NONLINEAR_THEORY +second_order_theory = IfcAnalysisTheoryTypeEnum.SECOND_ORDER_THEORY +third_order_theory = IfcAnalysisTheoryTypeEnum.THIRD_ORDER_THEORY +userdefined = IfcAnalysisTheoryTypeEnum.USERDEFINED +notdefined = IfcAnalysisTheoryTypeEnum.NOTDEFINED IfcAnnotationTypeEnum = enum_namespace() -asbuiltarea = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTAREA', INDETERMINATE) -asbuiltline = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTLINE', INDETERMINATE) -asbuiltpoint = express_getattr(IfcAnnotationTypeEnum, 'ASBUILTPOINT', INDETERMINATE) -assumedarea = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDAREA', INDETERMINATE) -assumedline = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDLINE', INDETERMINATE) -assumedpoint = express_getattr(IfcAnnotationTypeEnum, 'ASSUMEDPOINT', INDETERMINATE) -non_physical_signal = express_getattr(IfcAnnotationTypeEnum, 'NON_PHYSICAL_SIGNAL', INDETERMINATE) -superelevationevent = express_getattr(IfcAnnotationTypeEnum, 'SUPERELEVATIONEVENT', INDETERMINATE) -widthevent = express_getattr(IfcAnnotationTypeEnum, 'WIDTHEVENT', INDETERMINATE) -userdefined = express_getattr(IfcAnnotationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAnnotationTypeEnum, 'NOTDEFINED', INDETERMINATE) +asbuiltarea = IfcAnnotationTypeEnum.ASBUILTAREA +asbuiltline = IfcAnnotationTypeEnum.ASBUILTLINE +asbuiltpoint = IfcAnnotationTypeEnum.ASBUILTPOINT +assumedarea = IfcAnnotationTypeEnum.ASSUMEDAREA +assumedline = IfcAnnotationTypeEnum.ASSUMEDLINE +assumedpoint = IfcAnnotationTypeEnum.ASSUMEDPOINT +non_physical_signal = IfcAnnotationTypeEnum.NON_PHYSICAL_SIGNAL +superelevationevent = IfcAnnotationTypeEnum.SUPERELEVATIONEVENT +widthevent = IfcAnnotationTypeEnum.WIDTHEVENT +userdefined = IfcAnnotationTypeEnum.USERDEFINED +notdefined = IfcAnnotationTypeEnum.NOTDEFINED IfcArithmeticOperatorEnum = enum_namespace() -add = express_getattr(IfcArithmeticOperatorEnum, 'ADD', INDETERMINATE) -divide = express_getattr(IfcArithmeticOperatorEnum, 'DIVIDE', INDETERMINATE) -multiply = express_getattr(IfcArithmeticOperatorEnum, 'MULTIPLY', INDETERMINATE) -subtract = express_getattr(IfcArithmeticOperatorEnum, 'SUBTRACT', INDETERMINATE) +add = IfcArithmeticOperatorEnum.ADD +divide = IfcArithmeticOperatorEnum.DIVIDE +multiply = IfcArithmeticOperatorEnum.MULTIPLY +subtract = IfcArithmeticOperatorEnum.SUBTRACT IfcAssemblyPlaceEnum = enum_namespace() -factory = express_getattr(IfcAssemblyPlaceEnum, 'FACTORY', INDETERMINATE) -site = express_getattr(IfcAssemblyPlaceEnum, 'SITE', INDETERMINATE) -notdefined = express_getattr(IfcAssemblyPlaceEnum, 'NOTDEFINED', INDETERMINATE) +factory = IfcAssemblyPlaceEnum.FACTORY +site = IfcAssemblyPlaceEnum.SITE +notdefined = IfcAssemblyPlaceEnum.NOTDEFINED IfcAudioVisualApplianceTypeEnum = enum_namespace() -amplifier = express_getattr(IfcAudioVisualApplianceTypeEnum, 'AMPLIFIER', INDETERMINATE) -camera = express_getattr(IfcAudioVisualApplianceTypeEnum, 'CAMERA', INDETERMINATE) -communicationterminal = express_getattr(IfcAudioVisualApplianceTypeEnum, 'COMMUNICATIONTERMINAL', INDETERMINATE) -display = express_getattr(IfcAudioVisualApplianceTypeEnum, 'DISPLAY', INDETERMINATE) -microphone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'MICROPHONE', INDETERMINATE) -player = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PLAYER', INDETERMINATE) -projector = express_getattr(IfcAudioVisualApplianceTypeEnum, 'PROJECTOR', INDETERMINATE) -receiver = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECEIVER', INDETERMINATE) -recordingequipment = express_getattr(IfcAudioVisualApplianceTypeEnum, 'RECORDINGEQUIPMENT', INDETERMINATE) -speaker = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SPEAKER', INDETERMINATE) -switcher = express_getattr(IfcAudioVisualApplianceTypeEnum, 'SWITCHER', INDETERMINATE) -telephone = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TELEPHONE', INDETERMINATE) -tuner = express_getattr(IfcAudioVisualApplianceTypeEnum, 'TUNER', INDETERMINATE) -userdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcAudioVisualApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +amplifier = IfcAudioVisualApplianceTypeEnum.AMPLIFIER +camera = IfcAudioVisualApplianceTypeEnum.CAMERA +communicationterminal = IfcAudioVisualApplianceTypeEnum.COMMUNICATIONTERMINAL +display = IfcAudioVisualApplianceTypeEnum.DISPLAY +microphone = IfcAudioVisualApplianceTypeEnum.MICROPHONE +player = IfcAudioVisualApplianceTypeEnum.PLAYER +projector = IfcAudioVisualApplianceTypeEnum.PROJECTOR +receiver = IfcAudioVisualApplianceTypeEnum.RECEIVER +recordingequipment = IfcAudioVisualApplianceTypeEnum.RECORDINGEQUIPMENT +speaker = IfcAudioVisualApplianceTypeEnum.SPEAKER +switcher = IfcAudioVisualApplianceTypeEnum.SWITCHER +telephone = IfcAudioVisualApplianceTypeEnum.TELEPHONE +tuner = IfcAudioVisualApplianceTypeEnum.TUNER +userdefined = IfcAudioVisualApplianceTypeEnum.USERDEFINED +notdefined = IfcAudioVisualApplianceTypeEnum.NOTDEFINED IfcBSplineCurveForm = enum_namespace() -circular_arc = express_getattr(IfcBSplineCurveForm, 'CIRCULAR_ARC', INDETERMINATE) -elliptic_arc = express_getattr(IfcBSplineCurveForm, 'ELLIPTIC_ARC', INDETERMINATE) -hyperbolic_arc = express_getattr(IfcBSplineCurveForm, 'HYPERBOLIC_ARC', INDETERMINATE) -parabolic_arc = express_getattr(IfcBSplineCurveForm, 'PARABOLIC_ARC', INDETERMINATE) -polyline_form = express_getattr(IfcBSplineCurveForm, 'POLYLINE_FORM', INDETERMINATE) -unspecified = express_getattr(IfcBSplineCurveForm, 'UNSPECIFIED', INDETERMINATE) +circular_arc = IfcBSplineCurveForm.CIRCULAR_ARC +elliptic_arc = IfcBSplineCurveForm.ELLIPTIC_ARC +hyperbolic_arc = IfcBSplineCurveForm.HYPERBOLIC_ARC +parabolic_arc = IfcBSplineCurveForm.PARABOLIC_ARC +polyline_form = IfcBSplineCurveForm.POLYLINE_FORM +unspecified = IfcBSplineCurveForm.UNSPECIFIED IfcBSplineSurfaceForm = enum_namespace() -conical_surf = express_getattr(IfcBSplineSurfaceForm, 'CONICAL_SURF', INDETERMINATE) -cylindrical_surf = express_getattr(IfcBSplineSurfaceForm, 'CYLINDRICAL_SURF', INDETERMINATE) -generalised_cone = express_getattr(IfcBSplineSurfaceForm, 'GENERALISED_CONE', INDETERMINATE) -plane_surf = express_getattr(IfcBSplineSurfaceForm, 'PLANE_SURF', INDETERMINATE) -quadric_surf = express_getattr(IfcBSplineSurfaceForm, 'QUADRIC_SURF', INDETERMINATE) -ruled_surf = express_getattr(IfcBSplineSurfaceForm, 'RULED_SURF', INDETERMINATE) -spherical_surf = express_getattr(IfcBSplineSurfaceForm, 'SPHERICAL_SURF', INDETERMINATE) -surf_of_linear_extrusion = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_LINEAR_EXTRUSION', INDETERMINATE) -surf_of_revolution = express_getattr(IfcBSplineSurfaceForm, 'SURF_OF_REVOLUTION', INDETERMINATE) -toroidal_surf = express_getattr(IfcBSplineSurfaceForm, 'TOROIDAL_SURF', INDETERMINATE) -unspecified = express_getattr(IfcBSplineSurfaceForm, 'UNSPECIFIED', INDETERMINATE) +conical_surf = IfcBSplineSurfaceForm.CONICAL_SURF +cylindrical_surf = IfcBSplineSurfaceForm.CYLINDRICAL_SURF +generalised_cone = IfcBSplineSurfaceForm.GENERALISED_CONE +plane_surf = IfcBSplineSurfaceForm.PLANE_SURF +quadric_surf = IfcBSplineSurfaceForm.QUADRIC_SURF +ruled_surf = IfcBSplineSurfaceForm.RULED_SURF +spherical_surf = IfcBSplineSurfaceForm.SPHERICAL_SURF +surf_of_linear_extrusion = IfcBSplineSurfaceForm.SURF_OF_LINEAR_EXTRUSION +surf_of_revolution = IfcBSplineSurfaceForm.SURF_OF_REVOLUTION +toroidal_surf = IfcBSplineSurfaceForm.TOROIDAL_SURF +unspecified = IfcBSplineSurfaceForm.UNSPECIFIED IfcBeamTypeEnum = enum_namespace() -beam = express_getattr(IfcBeamTypeEnum, 'BEAM', INDETERMINATE) -cornice = express_getattr(IfcBeamTypeEnum, 'CORNICE', INDETERMINATE) -diaphragm = express_getattr(IfcBeamTypeEnum, 'DIAPHRAGM', INDETERMINATE) -edgebeam = express_getattr(IfcBeamTypeEnum, 'EDGEBEAM', INDETERMINATE) -girder_segment = express_getattr(IfcBeamTypeEnum, 'GIRDER_SEGMENT', INDETERMINATE) -hatstone = express_getattr(IfcBeamTypeEnum, 'HATSTONE', INDETERMINATE) -hollowcore = express_getattr(IfcBeamTypeEnum, 'HOLLOWCORE', INDETERMINATE) -joist = express_getattr(IfcBeamTypeEnum, 'JOIST', INDETERMINATE) -lintel = express_getattr(IfcBeamTypeEnum, 'LINTEL', INDETERMINATE) -piercap = express_getattr(IfcBeamTypeEnum, 'PIERCAP', INDETERMINATE) -spandrel = express_getattr(IfcBeamTypeEnum, 'SPANDREL', INDETERMINATE) -t_beam = express_getattr(IfcBeamTypeEnum, 'T_BEAM', INDETERMINATE) -userdefined = express_getattr(IfcBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +beam = IfcBeamTypeEnum.BEAM +cornice = IfcBeamTypeEnum.CORNICE +diaphragm = IfcBeamTypeEnum.DIAPHRAGM +edgebeam = IfcBeamTypeEnum.EDGEBEAM +girder_segment = IfcBeamTypeEnum.GIRDER_SEGMENT +hatstone = IfcBeamTypeEnum.HATSTONE +hollowcore = IfcBeamTypeEnum.HOLLOWCORE +joist = IfcBeamTypeEnum.JOIST +lintel = IfcBeamTypeEnum.LINTEL +piercap = IfcBeamTypeEnum.PIERCAP +spandrel = IfcBeamTypeEnum.SPANDREL +t_beam = IfcBeamTypeEnum.T_BEAM +userdefined = IfcBeamTypeEnum.USERDEFINED +notdefined = IfcBeamTypeEnum.NOTDEFINED IfcBearingTypeEnum = enum_namespace() -cylindrical = express_getattr(IfcBearingTypeEnum, 'CYLINDRICAL', INDETERMINATE) -disk = express_getattr(IfcBearingTypeEnum, 'DISK', INDETERMINATE) -elastomeric = express_getattr(IfcBearingTypeEnum, 'ELASTOMERIC', INDETERMINATE) -guide = express_getattr(IfcBearingTypeEnum, 'GUIDE', INDETERMINATE) -pot = express_getattr(IfcBearingTypeEnum, 'POT', INDETERMINATE) -rocker = express_getattr(IfcBearingTypeEnum, 'ROCKER', INDETERMINATE) -roller = express_getattr(IfcBearingTypeEnum, 'ROLLER', INDETERMINATE) -spherical = express_getattr(IfcBearingTypeEnum, 'SPHERICAL', INDETERMINATE) -userdefined = express_getattr(IfcBearingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBearingTypeEnum, 'NOTDEFINED', INDETERMINATE) +cylindrical = IfcBearingTypeEnum.CYLINDRICAL +disk = IfcBearingTypeEnum.DISK +elastomeric = IfcBearingTypeEnum.ELASTOMERIC +guide = IfcBearingTypeEnum.GUIDE +pot = IfcBearingTypeEnum.POT +rocker = IfcBearingTypeEnum.ROCKER +roller = IfcBearingTypeEnum.ROLLER +spherical = IfcBearingTypeEnum.SPHERICAL +userdefined = IfcBearingTypeEnum.USERDEFINED +notdefined = IfcBearingTypeEnum.NOTDEFINED IfcBenchmarkEnum = enum_namespace() -equalto = express_getattr(IfcBenchmarkEnum, 'EQUALTO', INDETERMINATE) -greaterthan = express_getattr(IfcBenchmarkEnum, 'GREATERTHAN', INDETERMINATE) -greaterthanorequalto = express_getattr(IfcBenchmarkEnum, 'GREATERTHANOREQUALTO', INDETERMINATE) -includedin = express_getattr(IfcBenchmarkEnum, 'INCLUDEDIN', INDETERMINATE) -includes = express_getattr(IfcBenchmarkEnum, 'INCLUDES', INDETERMINATE) -lessthan = express_getattr(IfcBenchmarkEnum, 'LESSTHAN', INDETERMINATE) -lessthanorequalto = express_getattr(IfcBenchmarkEnum, 'LESSTHANOREQUALTO', INDETERMINATE) -notequalto = express_getattr(IfcBenchmarkEnum, 'NOTEQUALTO', INDETERMINATE) -notincludedin = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDEDIN', INDETERMINATE) -notincludes = express_getattr(IfcBenchmarkEnum, 'NOTINCLUDES', INDETERMINATE) +equalto = IfcBenchmarkEnum.EQUALTO +greaterthan = IfcBenchmarkEnum.GREATERTHAN +greaterthanorequalto = IfcBenchmarkEnum.GREATERTHANOREQUALTO +includedin = IfcBenchmarkEnum.INCLUDEDIN +includes = IfcBenchmarkEnum.INCLUDES +lessthan = IfcBenchmarkEnum.LESSTHAN +lessthanorequalto = IfcBenchmarkEnum.LESSTHANOREQUALTO +notequalto = IfcBenchmarkEnum.NOTEQUALTO +notincludedin = IfcBenchmarkEnum.NOTINCLUDEDIN +notincludes = IfcBenchmarkEnum.NOTINCLUDES IfcBoilerTypeEnum = enum_namespace() -steam = express_getattr(IfcBoilerTypeEnum, 'STEAM', INDETERMINATE) -water = express_getattr(IfcBoilerTypeEnum, 'WATER', INDETERMINATE) -userdefined = express_getattr(IfcBoilerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBoilerTypeEnum, 'NOTDEFINED', INDETERMINATE) +steam = IfcBoilerTypeEnum.STEAM +water = IfcBoilerTypeEnum.WATER +userdefined = IfcBoilerTypeEnum.USERDEFINED +notdefined = IfcBoilerTypeEnum.NOTDEFINED IfcBooleanOperator = enum_namespace() -difference = express_getattr(IfcBooleanOperator, 'DIFFERENCE', INDETERMINATE) -intersection = express_getattr(IfcBooleanOperator, 'INTERSECTION', INDETERMINATE) -union = express_getattr(IfcBooleanOperator, 'UNION', INDETERMINATE) +difference = IfcBooleanOperator.DIFFERENCE +intersection = IfcBooleanOperator.INTERSECTION +union = IfcBooleanOperator.UNION IfcBridgePartTypeEnum = enum_namespace() -abutment = express_getattr(IfcBridgePartTypeEnum, 'ABUTMENT', INDETERMINATE) -deck = express_getattr(IfcBridgePartTypeEnum, 'DECK', INDETERMINATE) -deck_segment = express_getattr(IfcBridgePartTypeEnum, 'DECK_SEGMENT', INDETERMINATE) -foundation = express_getattr(IfcBridgePartTypeEnum, 'FOUNDATION', INDETERMINATE) -pier = express_getattr(IfcBridgePartTypeEnum, 'PIER', INDETERMINATE) -pier_segment = express_getattr(IfcBridgePartTypeEnum, 'PIER_SEGMENT', INDETERMINATE) -pylon = express_getattr(IfcBridgePartTypeEnum, 'PYLON', INDETERMINATE) -substructure = express_getattr(IfcBridgePartTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcBridgePartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -surfacestructure = express_getattr(IfcBridgePartTypeEnum, 'SURFACESTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcBridgePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcBridgePartTypeEnum.ABUTMENT +deck = IfcBridgePartTypeEnum.DECK +deck_segment = IfcBridgePartTypeEnum.DECK_SEGMENT +foundation = IfcBridgePartTypeEnum.FOUNDATION +pier = IfcBridgePartTypeEnum.PIER +pier_segment = IfcBridgePartTypeEnum.PIER_SEGMENT +pylon = IfcBridgePartTypeEnum.PYLON +substructure = IfcBridgePartTypeEnum.SUBSTRUCTURE +superstructure = IfcBridgePartTypeEnum.SUPERSTRUCTURE +surfacestructure = IfcBridgePartTypeEnum.SURFACESTRUCTURE +userdefined = IfcBridgePartTypeEnum.USERDEFINED +notdefined = IfcBridgePartTypeEnum.NOTDEFINED IfcBridgeTypeEnum = enum_namespace() -arched = express_getattr(IfcBridgeTypeEnum, 'ARCHED', INDETERMINATE) -cable_stayed = express_getattr(IfcBridgeTypeEnum, 'CABLE_STAYED', INDETERMINATE) -cantilever = express_getattr(IfcBridgeTypeEnum, 'CANTILEVER', INDETERMINATE) -culvert = express_getattr(IfcBridgeTypeEnum, 'CULVERT', INDETERMINATE) -framework = express_getattr(IfcBridgeTypeEnum, 'FRAMEWORK', INDETERMINATE) -girder = express_getattr(IfcBridgeTypeEnum, 'GIRDER', INDETERMINATE) -suspension = express_getattr(IfcBridgeTypeEnum, 'SUSPENSION', INDETERMINATE) -truss = express_getattr(IfcBridgeTypeEnum, 'TRUSS', INDETERMINATE) -userdefined = express_getattr(IfcBridgeTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBridgeTypeEnum, 'NOTDEFINED', INDETERMINATE) +arched = IfcBridgeTypeEnum.ARCHED +cable_stayed = IfcBridgeTypeEnum.CABLE_STAYED +cantilever = IfcBridgeTypeEnum.CANTILEVER +culvert = IfcBridgeTypeEnum.CULVERT +framework = IfcBridgeTypeEnum.FRAMEWORK +girder = IfcBridgeTypeEnum.GIRDER +suspension = IfcBridgeTypeEnum.SUSPENSION +truss = IfcBridgeTypeEnum.TRUSS +userdefined = IfcBridgeTypeEnum.USERDEFINED +notdefined = IfcBridgeTypeEnum.NOTDEFINED IfcBuildingElementPartTypeEnum = enum_namespace() -apron = express_getattr(IfcBuildingElementPartTypeEnum, 'APRON', INDETERMINATE) -armourunit = express_getattr(IfcBuildingElementPartTypeEnum, 'ARMOURUNIT', INDETERMINATE) -insulation = express_getattr(IfcBuildingElementPartTypeEnum, 'INSULATION', INDETERMINATE) -precastpanel = express_getattr(IfcBuildingElementPartTypeEnum, 'PRECASTPANEL', INDETERMINATE) -safetycage = express_getattr(IfcBuildingElementPartTypeEnum, 'SAFETYCAGE', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +apron = IfcBuildingElementPartTypeEnum.APRON +armourunit = IfcBuildingElementPartTypeEnum.ARMOURUNIT +insulation = IfcBuildingElementPartTypeEnum.INSULATION +precastpanel = IfcBuildingElementPartTypeEnum.PRECASTPANEL +safetycage = IfcBuildingElementPartTypeEnum.SAFETYCAGE +userdefined = IfcBuildingElementPartTypeEnum.USERDEFINED +notdefined = IfcBuildingElementPartTypeEnum.NOTDEFINED IfcBuildingElementProxyTypeEnum = enum_namespace() -complex = express_getattr(IfcBuildingElementProxyTypeEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcBuildingElementProxyTypeEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcBuildingElementProxyTypeEnum, 'PARTIAL', INDETERMINATE) -provisionforspace = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORSPACE', INDETERMINATE) -provisionforvoid = express_getattr(IfcBuildingElementProxyTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -userdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingElementProxyTypeEnum, 'NOTDEFINED', INDETERMINATE) +complex = IfcBuildingElementProxyTypeEnum.COMPLEX +element = IfcBuildingElementProxyTypeEnum.ELEMENT +partial = IfcBuildingElementProxyTypeEnum.PARTIAL +provisionforspace = IfcBuildingElementProxyTypeEnum.PROVISIONFORSPACE +provisionforvoid = IfcBuildingElementProxyTypeEnum.PROVISIONFORVOID +userdefined = IfcBuildingElementProxyTypeEnum.USERDEFINED +notdefined = IfcBuildingElementProxyTypeEnum.NOTDEFINED IfcBuildingSystemTypeEnum = enum_namespace() -fenestration = express_getattr(IfcBuildingSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuildingSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuildingSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -outershell = express_getattr(IfcBuildingSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -shading = express_getattr(IfcBuildingSystemTypeEnum, 'SHADING', INDETERMINATE) -transport = express_getattr(IfcBuildingSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuildingSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuildingSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +fenestration = IfcBuildingSystemTypeEnum.FENESTRATION +foundation = IfcBuildingSystemTypeEnum.FOUNDATION +loadbearing = IfcBuildingSystemTypeEnum.LOADBEARING +outershell = IfcBuildingSystemTypeEnum.OUTERSHELL +shading = IfcBuildingSystemTypeEnum.SHADING +transport = IfcBuildingSystemTypeEnum.TRANSPORT +userdefined = IfcBuildingSystemTypeEnum.USERDEFINED +notdefined = IfcBuildingSystemTypeEnum.NOTDEFINED IfcBuiltSystemTypeEnum = enum_namespace() -erosionprevention = express_getattr(IfcBuiltSystemTypeEnum, 'EROSIONPREVENTION', INDETERMINATE) -fenestration = express_getattr(IfcBuiltSystemTypeEnum, 'FENESTRATION', INDETERMINATE) -foundation = express_getattr(IfcBuiltSystemTypeEnum, 'FOUNDATION', INDETERMINATE) -loadbearing = express_getattr(IfcBuiltSystemTypeEnum, 'LOADBEARING', INDETERMINATE) -mooring = express_getattr(IfcBuiltSystemTypeEnum, 'MOORING', INDETERMINATE) -outershell = express_getattr(IfcBuiltSystemTypeEnum, 'OUTERSHELL', INDETERMINATE) -prestressing = express_getattr(IfcBuiltSystemTypeEnum, 'PRESTRESSING', INDETERMINATE) -railwayline = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYLINE', INDETERMINATE) -railwaytrack = express_getattr(IfcBuiltSystemTypeEnum, 'RAILWAYTRACK', INDETERMINATE) -reinforcing = express_getattr(IfcBuiltSystemTypeEnum, 'REINFORCING', INDETERMINATE) -shading = express_getattr(IfcBuiltSystemTypeEnum, 'SHADING', INDETERMINATE) -trackcircuit = express_getattr(IfcBuiltSystemTypeEnum, 'TRACKCIRCUIT', INDETERMINATE) -transport = express_getattr(IfcBuiltSystemTypeEnum, 'TRANSPORT', INDETERMINATE) -userdefined = express_getattr(IfcBuiltSystemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBuiltSystemTypeEnum, 'NOTDEFINED', INDETERMINATE) +erosionprevention = IfcBuiltSystemTypeEnum.EROSIONPREVENTION +fenestration = IfcBuiltSystemTypeEnum.FENESTRATION +foundation = IfcBuiltSystemTypeEnum.FOUNDATION +loadbearing = IfcBuiltSystemTypeEnum.LOADBEARING +mooring = IfcBuiltSystemTypeEnum.MOORING +outershell = IfcBuiltSystemTypeEnum.OUTERSHELL +prestressing = IfcBuiltSystemTypeEnum.PRESTRESSING +railwayline = IfcBuiltSystemTypeEnum.RAILWAYLINE +railwaytrack = IfcBuiltSystemTypeEnum.RAILWAYTRACK +reinforcing = IfcBuiltSystemTypeEnum.REINFORCING +shading = IfcBuiltSystemTypeEnum.SHADING +trackcircuit = IfcBuiltSystemTypeEnum.TRACKCIRCUIT +transport = IfcBuiltSystemTypeEnum.TRANSPORT +userdefined = IfcBuiltSystemTypeEnum.USERDEFINED +notdefined = IfcBuiltSystemTypeEnum.NOTDEFINED IfcBurnerTypeEnum = enum_namespace() -userdefined = express_getattr(IfcBurnerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcBurnerTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcBurnerTypeEnum.USERDEFINED +notdefined = IfcBurnerTypeEnum.NOTDEFINED IfcCableCarrierFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcCableCarrierFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcCableCarrierFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -cross = express_getattr(IfcCableCarrierFittingTypeEnum, 'CROSS', INDETERMINATE) -junction = express_getattr(IfcCableCarrierFittingTypeEnum, 'JUNCTION', INDETERMINATE) -reducer = express_getattr(IfcCableCarrierFittingTypeEnum, 'REDUCER', INDETERMINATE) -tee = express_getattr(IfcCableCarrierFittingTypeEnum, 'TEE', INDETERMINATE) -transition = express_getattr(IfcCableCarrierFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcCableCarrierFittingTypeEnum.BEND +connector = IfcCableCarrierFittingTypeEnum.CONNECTOR +cross = IfcCableCarrierFittingTypeEnum.CROSS +junction = IfcCableCarrierFittingTypeEnum.JUNCTION +reducer = IfcCableCarrierFittingTypeEnum.REDUCER +tee = IfcCableCarrierFittingTypeEnum.TEE +transition = IfcCableCarrierFittingTypeEnum.TRANSITION +userdefined = IfcCableCarrierFittingTypeEnum.USERDEFINED +notdefined = IfcCableCarrierFittingTypeEnum.NOTDEFINED IfcCableCarrierSegmentTypeEnum = enum_namespace() -cablebracket = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLEBRACKET', INDETERMINATE) -cableladdersegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLELADDERSEGMENT', INDETERMINATE) -cabletraysegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRAYSEGMENT', INDETERMINATE) -cabletrunkingsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CABLETRUNKINGSEGMENT', INDETERMINATE) -catenarywire = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CATENARYWIRE', INDETERMINATE) -conduitsegment = express_getattr(IfcCableCarrierSegmentTypeEnum, 'CONDUITSEGMENT', INDETERMINATE) -dropper = express_getattr(IfcCableCarrierSegmentTypeEnum, 'DROPPER', INDETERMINATE) -userdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableCarrierSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +cablebracket = IfcCableCarrierSegmentTypeEnum.CABLEBRACKET +cableladdersegment = IfcCableCarrierSegmentTypeEnum.CABLELADDERSEGMENT +cabletraysegment = IfcCableCarrierSegmentTypeEnum.CABLETRAYSEGMENT +cabletrunkingsegment = IfcCableCarrierSegmentTypeEnum.CABLETRUNKINGSEGMENT +catenarywire = IfcCableCarrierSegmentTypeEnum.CATENARYWIRE +conduitsegment = IfcCableCarrierSegmentTypeEnum.CONDUITSEGMENT +dropper = IfcCableCarrierSegmentTypeEnum.DROPPER +userdefined = IfcCableCarrierSegmentTypeEnum.USERDEFINED +notdefined = IfcCableCarrierSegmentTypeEnum.NOTDEFINED IfcCableFittingTypeEnum = enum_namespace() -connector = express_getattr(IfcCableFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcCableFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcCableFittingTypeEnum, 'EXIT', INDETERMINATE) -fanout = express_getattr(IfcCableFittingTypeEnum, 'FANOUT', INDETERMINATE) -junction = express_getattr(IfcCableFittingTypeEnum, 'JUNCTION', INDETERMINATE) -transition = express_getattr(IfcCableFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcCableFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +connector = IfcCableFittingTypeEnum.CONNECTOR +entry = IfcCableFittingTypeEnum.ENTRY +exit = IfcCableFittingTypeEnum.EXIT +fanout = IfcCableFittingTypeEnum.FANOUT +junction = IfcCableFittingTypeEnum.JUNCTION +transition = IfcCableFittingTypeEnum.TRANSITION +userdefined = IfcCableFittingTypeEnum.USERDEFINED +notdefined = IfcCableFittingTypeEnum.NOTDEFINED IfcCableSegmentTypeEnum = enum_namespace() -busbarsegment = express_getattr(IfcCableSegmentTypeEnum, 'BUSBARSEGMENT', INDETERMINATE) -cablesegment = express_getattr(IfcCableSegmentTypeEnum, 'CABLESEGMENT', INDETERMINATE) -conductorsegment = express_getattr(IfcCableSegmentTypeEnum, 'CONDUCTORSEGMENT', INDETERMINATE) -contactwiresegment = express_getattr(IfcCableSegmentTypeEnum, 'CONTACTWIRESEGMENT', INDETERMINATE) -coresegment = express_getattr(IfcCableSegmentTypeEnum, 'CORESEGMENT', INDETERMINATE) -fibersegment = express_getattr(IfcCableSegmentTypeEnum, 'FIBERSEGMENT', INDETERMINATE) -fibertube = express_getattr(IfcCableSegmentTypeEnum, 'FIBERTUBE', INDETERMINATE) -opticalcablesegment = express_getattr(IfcCableSegmentTypeEnum, 'OPTICALCABLESEGMENT', INDETERMINATE) -stitchwire = express_getattr(IfcCableSegmentTypeEnum, 'STITCHWIRE', INDETERMINATE) -wirepairsegment = express_getattr(IfcCableSegmentTypeEnum, 'WIREPAIRSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcCableSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCableSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +busbarsegment = IfcCableSegmentTypeEnum.BUSBARSEGMENT +cablesegment = IfcCableSegmentTypeEnum.CABLESEGMENT +conductorsegment = IfcCableSegmentTypeEnum.CONDUCTORSEGMENT +contactwiresegment = IfcCableSegmentTypeEnum.CONTACTWIRESEGMENT +coresegment = IfcCableSegmentTypeEnum.CORESEGMENT +fibersegment = IfcCableSegmentTypeEnum.FIBERSEGMENT +fibertube = IfcCableSegmentTypeEnum.FIBERTUBE +opticalcablesegment = IfcCableSegmentTypeEnum.OPTICALCABLESEGMENT +stitchwire = IfcCableSegmentTypeEnum.STITCHWIRE +wirepairsegment = IfcCableSegmentTypeEnum.WIREPAIRSEGMENT +userdefined = IfcCableSegmentTypeEnum.USERDEFINED +notdefined = IfcCableSegmentTypeEnum.NOTDEFINED IfcCaissonFoundationTypeEnum = enum_namespace() -caisson = express_getattr(IfcCaissonFoundationTypeEnum, 'CAISSON', INDETERMINATE) -well = express_getattr(IfcCaissonFoundationTypeEnum, 'WELL', INDETERMINATE) -userdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCaissonFoundationTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson = IfcCaissonFoundationTypeEnum.CAISSON +well = IfcCaissonFoundationTypeEnum.WELL +userdefined = IfcCaissonFoundationTypeEnum.USERDEFINED +notdefined = IfcCaissonFoundationTypeEnum.NOTDEFINED IfcChangeActionEnum = enum_namespace() -added = express_getattr(IfcChangeActionEnum, 'ADDED', INDETERMINATE) -deleted = express_getattr(IfcChangeActionEnum, 'DELETED', INDETERMINATE) -modified = express_getattr(IfcChangeActionEnum, 'MODIFIED', INDETERMINATE) -nochange = express_getattr(IfcChangeActionEnum, 'NOCHANGE', INDETERMINATE) -notdefined = express_getattr(IfcChangeActionEnum, 'NOTDEFINED', INDETERMINATE) +added = IfcChangeActionEnum.ADDED +deleted = IfcChangeActionEnum.DELETED +modified = IfcChangeActionEnum.MODIFIED +nochange = IfcChangeActionEnum.NOCHANGE +notdefined = IfcChangeActionEnum.NOTDEFINED IfcChillerTypeEnum = enum_namespace() -aircooled = express_getattr(IfcChillerTypeEnum, 'AIRCOOLED', INDETERMINATE) -heatrecovery = express_getattr(IfcChillerTypeEnum, 'HEATRECOVERY', INDETERMINATE) -watercooled = express_getattr(IfcChillerTypeEnum, 'WATERCOOLED', INDETERMINATE) -userdefined = express_getattr(IfcChillerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChillerTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcChillerTypeEnum.AIRCOOLED +heatrecovery = IfcChillerTypeEnum.HEATRECOVERY +watercooled = IfcChillerTypeEnum.WATERCOOLED +userdefined = IfcChillerTypeEnum.USERDEFINED +notdefined = IfcChillerTypeEnum.NOTDEFINED IfcChimneyTypeEnum = enum_namespace() -userdefined = express_getattr(IfcChimneyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcChimneyTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcChimneyTypeEnum.USERDEFINED +notdefined = IfcChimneyTypeEnum.NOTDEFINED IfcCoilTypeEnum = enum_namespace() -dxcoolingcoil = express_getattr(IfcCoilTypeEnum, 'DXCOOLINGCOIL', INDETERMINATE) -electricheatingcoil = express_getattr(IfcCoilTypeEnum, 'ELECTRICHEATINGCOIL', INDETERMINATE) -gasheatingcoil = express_getattr(IfcCoilTypeEnum, 'GASHEATINGCOIL', INDETERMINATE) -hydroniccoil = express_getattr(IfcCoilTypeEnum, 'HYDRONICCOIL', INDETERMINATE) -steamheatingcoil = express_getattr(IfcCoilTypeEnum, 'STEAMHEATINGCOIL', INDETERMINATE) -watercoolingcoil = express_getattr(IfcCoilTypeEnum, 'WATERCOOLINGCOIL', INDETERMINATE) -waterheatingcoil = express_getattr(IfcCoilTypeEnum, 'WATERHEATINGCOIL', INDETERMINATE) -userdefined = express_getattr(IfcCoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dxcoolingcoil = IfcCoilTypeEnum.DXCOOLINGCOIL +electricheatingcoil = IfcCoilTypeEnum.ELECTRICHEATINGCOIL +gasheatingcoil = IfcCoilTypeEnum.GASHEATINGCOIL +hydroniccoil = IfcCoilTypeEnum.HYDRONICCOIL +steamheatingcoil = IfcCoilTypeEnum.STEAMHEATINGCOIL +watercoolingcoil = IfcCoilTypeEnum.WATERCOOLINGCOIL +waterheatingcoil = IfcCoilTypeEnum.WATERHEATINGCOIL +userdefined = IfcCoilTypeEnum.USERDEFINED +notdefined = IfcCoilTypeEnum.NOTDEFINED IfcColumnTypeEnum = enum_namespace() -column = express_getattr(IfcColumnTypeEnum, 'COLUMN', INDETERMINATE) -pierstem = express_getattr(IfcColumnTypeEnum, 'PIERSTEM', INDETERMINATE) -pierstem_segment = express_getattr(IfcColumnTypeEnum, 'PIERSTEM_SEGMENT', INDETERMINATE) -pilaster = express_getattr(IfcColumnTypeEnum, 'PILASTER', INDETERMINATE) -standcolumn = express_getattr(IfcColumnTypeEnum, 'STANDCOLUMN', INDETERMINATE) -userdefined = express_getattr(IfcColumnTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcColumnTypeEnum, 'NOTDEFINED', INDETERMINATE) +column = IfcColumnTypeEnum.COLUMN +pierstem = IfcColumnTypeEnum.PIERSTEM +pierstem_segment = IfcColumnTypeEnum.PIERSTEM_SEGMENT +pilaster = IfcColumnTypeEnum.PILASTER +standcolumn = IfcColumnTypeEnum.STANDCOLUMN +userdefined = IfcColumnTypeEnum.USERDEFINED +notdefined = IfcColumnTypeEnum.NOTDEFINED IfcCommunicationsApplianceTypeEnum = enum_namespace() -antenna = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ANTENNA', INDETERMINATE) -automaton = express_getattr(IfcCommunicationsApplianceTypeEnum, 'AUTOMATON', INDETERMINATE) -computer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'COMPUTER', INDETERMINATE) -fax = express_getattr(IfcCommunicationsApplianceTypeEnum, 'FAX', INDETERMINATE) -gateway = express_getattr(IfcCommunicationsApplianceTypeEnum, 'GATEWAY', INDETERMINATE) -intelligentperipheral = express_getattr(IfcCommunicationsApplianceTypeEnum, 'INTELLIGENTPERIPHERAL', INDETERMINATE) -ipnetworkequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'IPNETWORKEQUIPMENT', INDETERMINATE) -linesideelectronicunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'LINESIDEELECTRONICUNIT', INDETERMINATE) -modem = express_getattr(IfcCommunicationsApplianceTypeEnum, 'MODEM', INDETERMINATE) -networkappliance = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKAPPLIANCE', INDETERMINATE) -networkbridge = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKBRIDGE', INDETERMINATE) -networkhub = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NETWORKHUB', INDETERMINATE) -opticallineterminal = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALLINETERMINAL', INDETERMINATE) -opticalnetworkunit = express_getattr(IfcCommunicationsApplianceTypeEnum, 'OPTICALNETWORKUNIT', INDETERMINATE) -printer = express_getattr(IfcCommunicationsApplianceTypeEnum, 'PRINTER', INDETERMINATE) -radioblockcenter = express_getattr(IfcCommunicationsApplianceTypeEnum, 'RADIOBLOCKCENTER', INDETERMINATE) -repeater = express_getattr(IfcCommunicationsApplianceTypeEnum, 'REPEATER', INDETERMINATE) -router = express_getattr(IfcCommunicationsApplianceTypeEnum, 'ROUTER', INDETERMINATE) -scanner = express_getattr(IfcCommunicationsApplianceTypeEnum, 'SCANNER', INDETERMINATE) -telecommand = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELECOMMAND', INDETERMINATE) -telephonyexchange = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TELEPHONYEXCHANGE', INDETERMINATE) -transitioncomponent = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSITIONCOMPONENT', INDETERMINATE) -transponder = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPONDER', INDETERMINATE) -transportequipment = express_getattr(IfcCommunicationsApplianceTypeEnum, 'TRANSPORTEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +antenna = IfcCommunicationsApplianceTypeEnum.ANTENNA +automaton = IfcCommunicationsApplianceTypeEnum.AUTOMATON +computer = IfcCommunicationsApplianceTypeEnum.COMPUTER +fax = IfcCommunicationsApplianceTypeEnum.FAX +gateway = IfcCommunicationsApplianceTypeEnum.GATEWAY +intelligentperipheral = IfcCommunicationsApplianceTypeEnum.INTELLIGENTPERIPHERAL +ipnetworkequipment = IfcCommunicationsApplianceTypeEnum.IPNETWORKEQUIPMENT +linesideelectronicunit = IfcCommunicationsApplianceTypeEnum.LINESIDEELECTRONICUNIT +modem = IfcCommunicationsApplianceTypeEnum.MODEM +networkappliance = IfcCommunicationsApplianceTypeEnum.NETWORKAPPLIANCE +networkbridge = IfcCommunicationsApplianceTypeEnum.NETWORKBRIDGE +networkhub = IfcCommunicationsApplianceTypeEnum.NETWORKHUB +opticallineterminal = IfcCommunicationsApplianceTypeEnum.OPTICALLINETERMINAL +opticalnetworkunit = IfcCommunicationsApplianceTypeEnum.OPTICALNETWORKUNIT +printer = IfcCommunicationsApplianceTypeEnum.PRINTER +radioblockcenter = IfcCommunicationsApplianceTypeEnum.RADIOBLOCKCENTER +repeater = IfcCommunicationsApplianceTypeEnum.REPEATER +router = IfcCommunicationsApplianceTypeEnum.ROUTER +scanner = IfcCommunicationsApplianceTypeEnum.SCANNER +telecommand = IfcCommunicationsApplianceTypeEnum.TELECOMMAND +telephonyexchange = IfcCommunicationsApplianceTypeEnum.TELEPHONYEXCHANGE +transitioncomponent = IfcCommunicationsApplianceTypeEnum.TRANSITIONCOMPONENT +transponder = IfcCommunicationsApplianceTypeEnum.TRANSPONDER +transportequipment = IfcCommunicationsApplianceTypeEnum.TRANSPORTEQUIPMENT +userdefined = IfcCommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcCommunicationsApplianceTypeEnum.NOTDEFINED IfcComplexPropertyTemplateTypeEnum = enum_namespace() -p_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'P_COMPLEX', INDETERMINATE) -q_complex = express_getattr(IfcComplexPropertyTemplateTypeEnum, 'Q_COMPLEX', INDETERMINATE) +p_complex = IfcComplexPropertyTemplateTypeEnum.P_COMPLEX +q_complex = IfcComplexPropertyTemplateTypeEnum.Q_COMPLEX IfcCompressorTypeEnum = enum_namespace() -booster = express_getattr(IfcCompressorTypeEnum, 'BOOSTER', INDETERMINATE) -dynamic = express_getattr(IfcCompressorTypeEnum, 'DYNAMIC', INDETERMINATE) -hermetic = express_getattr(IfcCompressorTypeEnum, 'HERMETIC', INDETERMINATE) -opentype = express_getattr(IfcCompressorTypeEnum, 'OPENTYPE', INDETERMINATE) -reciprocating = express_getattr(IfcCompressorTypeEnum, 'RECIPROCATING', INDETERMINATE) -rollingpiston = express_getattr(IfcCompressorTypeEnum, 'ROLLINGPISTON', INDETERMINATE) -rotary = express_getattr(IfcCompressorTypeEnum, 'ROTARY', INDETERMINATE) -rotaryvane = express_getattr(IfcCompressorTypeEnum, 'ROTARYVANE', INDETERMINATE) -scroll = express_getattr(IfcCompressorTypeEnum, 'SCROLL', INDETERMINATE) -semihermetic = express_getattr(IfcCompressorTypeEnum, 'SEMIHERMETIC', INDETERMINATE) -singlescrew = express_getattr(IfcCompressorTypeEnum, 'SINGLESCREW', INDETERMINATE) -singlestage = express_getattr(IfcCompressorTypeEnum, 'SINGLESTAGE', INDETERMINATE) -trochoidal = express_getattr(IfcCompressorTypeEnum, 'TROCHOIDAL', INDETERMINATE) -twinscrew = express_getattr(IfcCompressorTypeEnum, 'TWINSCREW', INDETERMINATE) -weldedshellhermetic = express_getattr(IfcCompressorTypeEnum, 'WELDEDSHELLHERMETIC', INDETERMINATE) -userdefined = express_getattr(IfcCompressorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCompressorTypeEnum, 'NOTDEFINED', INDETERMINATE) +booster = IfcCompressorTypeEnum.BOOSTER +dynamic = IfcCompressorTypeEnum.DYNAMIC +hermetic = IfcCompressorTypeEnum.HERMETIC +opentype = IfcCompressorTypeEnum.OPENTYPE +reciprocating = IfcCompressorTypeEnum.RECIPROCATING +rollingpiston = IfcCompressorTypeEnum.ROLLINGPISTON +rotary = IfcCompressorTypeEnum.ROTARY +rotaryvane = IfcCompressorTypeEnum.ROTARYVANE +scroll = IfcCompressorTypeEnum.SCROLL +semihermetic = IfcCompressorTypeEnum.SEMIHERMETIC +singlescrew = IfcCompressorTypeEnum.SINGLESCREW +singlestage = IfcCompressorTypeEnum.SINGLESTAGE +trochoidal = IfcCompressorTypeEnum.TROCHOIDAL +twinscrew = IfcCompressorTypeEnum.TWINSCREW +weldedshellhermetic = IfcCompressorTypeEnum.WELDEDSHELLHERMETIC +userdefined = IfcCompressorTypeEnum.USERDEFINED +notdefined = IfcCompressorTypeEnum.NOTDEFINED IfcCondenserTypeEnum = enum_namespace() -aircooled = express_getattr(IfcCondenserTypeEnum, 'AIRCOOLED', INDETERMINATE) -evaporativecooled = express_getattr(IfcCondenserTypeEnum, 'EVAPORATIVECOOLED', INDETERMINATE) -watercooled = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLED', INDETERMINATE) -watercooledbrazedplate = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDBRAZEDPLATE', INDETERMINATE) -watercooledshellcoil = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLCOIL', INDETERMINATE) -watercooledshelltube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDSHELLTUBE', INDETERMINATE) -watercooledtubeintube = express_getattr(IfcCondenserTypeEnum, 'WATERCOOLEDTUBEINTUBE', INDETERMINATE) -userdefined = express_getattr(IfcCondenserTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCondenserTypeEnum, 'NOTDEFINED', INDETERMINATE) +aircooled = IfcCondenserTypeEnum.AIRCOOLED +evaporativecooled = IfcCondenserTypeEnum.EVAPORATIVECOOLED +watercooled = IfcCondenserTypeEnum.WATERCOOLED +watercooledbrazedplate = IfcCondenserTypeEnum.WATERCOOLEDBRAZEDPLATE +watercooledshellcoil = IfcCondenserTypeEnum.WATERCOOLEDSHELLCOIL +watercooledshelltube = IfcCondenserTypeEnum.WATERCOOLEDSHELLTUBE +watercooledtubeintube = IfcCondenserTypeEnum.WATERCOOLEDTUBEINTUBE +userdefined = IfcCondenserTypeEnum.USERDEFINED +notdefined = IfcCondenserTypeEnum.NOTDEFINED IfcConnectionTypeEnum = enum_namespace() -atend = express_getattr(IfcConnectionTypeEnum, 'ATEND', INDETERMINATE) -atpath = express_getattr(IfcConnectionTypeEnum, 'ATPATH', INDETERMINATE) -atstart = express_getattr(IfcConnectionTypeEnum, 'ATSTART', INDETERMINATE) -notdefined = express_getattr(IfcConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +atend = IfcConnectionTypeEnum.ATEND +atpath = IfcConnectionTypeEnum.ATPATH +atstart = IfcConnectionTypeEnum.ATSTART +notdefined = IfcConnectionTypeEnum.NOTDEFINED IfcConstraintEnum = enum_namespace() -advisory = express_getattr(IfcConstraintEnum, 'ADVISORY', INDETERMINATE) -hard = express_getattr(IfcConstraintEnum, 'HARD', INDETERMINATE) -soft = express_getattr(IfcConstraintEnum, 'SOFT', INDETERMINATE) -userdefined = express_getattr(IfcConstraintEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstraintEnum, 'NOTDEFINED', INDETERMINATE) +advisory = IfcConstraintEnum.ADVISORY +hard = IfcConstraintEnum.HARD +soft = IfcConstraintEnum.SOFT +userdefined = IfcConstraintEnum.USERDEFINED +notdefined = IfcConstraintEnum.NOTDEFINED IfcConstructionEquipmentResourceTypeEnum = enum_namespace() -demolishing = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'DEMOLISHING', INDETERMINATE) -earthmoving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'EARTHMOVING', INDETERMINATE) -erecting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'ERECTING', INDETERMINATE) -heating = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'LIGHTING', INDETERMINATE) -paving = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PAVING', INDETERMINATE) -pumping = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'PUMPING', INDETERMINATE) -transporting = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'TRANSPORTING', INDETERMINATE) -userdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionEquipmentResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +demolishing = IfcConstructionEquipmentResourceTypeEnum.DEMOLISHING +earthmoving = IfcConstructionEquipmentResourceTypeEnum.EARTHMOVING +erecting = IfcConstructionEquipmentResourceTypeEnum.ERECTING +heating = IfcConstructionEquipmentResourceTypeEnum.HEATING +lighting = IfcConstructionEquipmentResourceTypeEnum.LIGHTING +paving = IfcConstructionEquipmentResourceTypeEnum.PAVING +pumping = IfcConstructionEquipmentResourceTypeEnum.PUMPING +transporting = IfcConstructionEquipmentResourceTypeEnum.TRANSPORTING +userdefined = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionEquipmentResourceTypeEnum.NOTDEFINED IfcConstructionMaterialResourceTypeEnum = enum_namespace() -aggregates = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'AGGREGATES', INDETERMINATE) -concrete = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'DRYWALL', INDETERMINATE) -fuel = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'FUEL', INDETERMINATE) -gypsum = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'GYPSUM', INDETERMINATE) -masonry = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'MASONRY', INDETERMINATE) -metal = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'METAL', INDETERMINATE) -plastic = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'PLASTIC', INDETERMINATE) -wood = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'WOOD', INDETERMINATE) -userdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionMaterialResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +aggregates = IfcConstructionMaterialResourceTypeEnum.AGGREGATES +concrete = IfcConstructionMaterialResourceTypeEnum.CONCRETE +drywall = IfcConstructionMaterialResourceTypeEnum.DRYWALL +fuel = IfcConstructionMaterialResourceTypeEnum.FUEL +gypsum = IfcConstructionMaterialResourceTypeEnum.GYPSUM +masonry = IfcConstructionMaterialResourceTypeEnum.MASONRY +metal = IfcConstructionMaterialResourceTypeEnum.METAL +plastic = IfcConstructionMaterialResourceTypeEnum.PLASTIC +wood = IfcConstructionMaterialResourceTypeEnum.WOOD +userdefined = IfcConstructionMaterialResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionMaterialResourceTypeEnum.NOTDEFINED IfcConstructionProductResourceTypeEnum = enum_namespace() -assembly = express_getattr(IfcConstructionProductResourceTypeEnum, 'ASSEMBLY', INDETERMINATE) -formwork = express_getattr(IfcConstructionProductResourceTypeEnum, 'FORMWORK', INDETERMINATE) -userdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConstructionProductResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +assembly = IfcConstructionProductResourceTypeEnum.ASSEMBLY +formwork = IfcConstructionProductResourceTypeEnum.FORMWORK +userdefined = IfcConstructionProductResourceTypeEnum.USERDEFINED +notdefined = IfcConstructionProductResourceTypeEnum.NOTDEFINED IfcControllerTypeEnum = enum_namespace() -floating = express_getattr(IfcControllerTypeEnum, 'FLOATING', INDETERMINATE) -multiposition = express_getattr(IfcControllerTypeEnum, 'MULTIPOSITION', INDETERMINATE) -programmable = express_getattr(IfcControllerTypeEnum, 'PROGRAMMABLE', INDETERMINATE) -proportional = express_getattr(IfcControllerTypeEnum, 'PROPORTIONAL', INDETERMINATE) -twoposition = express_getattr(IfcControllerTypeEnum, 'TWOPOSITION', INDETERMINATE) -userdefined = express_getattr(IfcControllerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcControllerTypeEnum, 'NOTDEFINED', INDETERMINATE) +floating = IfcControllerTypeEnum.FLOATING +multiposition = IfcControllerTypeEnum.MULTIPOSITION +programmable = IfcControllerTypeEnum.PROGRAMMABLE +proportional = IfcControllerTypeEnum.PROPORTIONAL +twoposition = IfcControllerTypeEnum.TWOPOSITION +userdefined = IfcControllerTypeEnum.USERDEFINED +notdefined = IfcControllerTypeEnum.NOTDEFINED IfcConveyorSegmentTypeEnum = enum_namespace() -beltconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BELTCONVEYOR', INDETERMINATE) -bucketconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'BUCKETCONVEYOR', INDETERMINATE) -chuteconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'CHUTECONVEYOR', INDETERMINATE) -screwconveyor = express_getattr(IfcConveyorSegmentTypeEnum, 'SCREWCONVEYOR', INDETERMINATE) -userdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcConveyorSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltconveyor = IfcConveyorSegmentTypeEnum.BELTCONVEYOR +bucketconveyor = IfcConveyorSegmentTypeEnum.BUCKETCONVEYOR +chuteconveyor = IfcConveyorSegmentTypeEnum.CHUTECONVEYOR +screwconveyor = IfcConveyorSegmentTypeEnum.SCREWCONVEYOR +userdefined = IfcConveyorSegmentTypeEnum.USERDEFINED +notdefined = IfcConveyorSegmentTypeEnum.NOTDEFINED IfcCooledBeamTypeEnum = enum_namespace() -active = express_getattr(IfcCooledBeamTypeEnum, 'ACTIVE', INDETERMINATE) -passive = express_getattr(IfcCooledBeamTypeEnum, 'PASSIVE', INDETERMINATE) -userdefined = express_getattr(IfcCooledBeamTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCooledBeamTypeEnum, 'NOTDEFINED', INDETERMINATE) +active = IfcCooledBeamTypeEnum.ACTIVE +passive = IfcCooledBeamTypeEnum.PASSIVE +userdefined = IfcCooledBeamTypeEnum.USERDEFINED +notdefined = IfcCooledBeamTypeEnum.NOTDEFINED IfcCoolingTowerTypeEnum = enum_namespace() -mechanicalforceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALFORCEDDRAFT', INDETERMINATE) -mechanicalinduceddraft = express_getattr(IfcCoolingTowerTypeEnum, 'MECHANICALINDUCEDDRAFT', INDETERMINATE) -naturaldraft = express_getattr(IfcCoolingTowerTypeEnum, 'NATURALDRAFT', INDETERMINATE) -userdefined = express_getattr(IfcCoolingTowerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoolingTowerTypeEnum, 'NOTDEFINED', INDETERMINATE) +mechanicalforceddraft = IfcCoolingTowerTypeEnum.MECHANICALFORCEDDRAFT +mechanicalinduceddraft = IfcCoolingTowerTypeEnum.MECHANICALINDUCEDDRAFT +naturaldraft = IfcCoolingTowerTypeEnum.NATURALDRAFT +userdefined = IfcCoolingTowerTypeEnum.USERDEFINED +notdefined = IfcCoolingTowerTypeEnum.NOTDEFINED IfcCostItemTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCostItemTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostItemTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCostItemTypeEnum.USERDEFINED +notdefined = IfcCostItemTypeEnum.NOTDEFINED IfcCostScheduleTypeEnum = enum_namespace() -budget = express_getattr(IfcCostScheduleTypeEnum, 'BUDGET', INDETERMINATE) -costplan = express_getattr(IfcCostScheduleTypeEnum, 'COSTPLAN', INDETERMINATE) -estimate = express_getattr(IfcCostScheduleTypeEnum, 'ESTIMATE', INDETERMINATE) -pricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'PRICEDBILLOFQUANTITIES', INDETERMINATE) -scheduleofrates = express_getattr(IfcCostScheduleTypeEnum, 'SCHEDULEOFRATES', INDETERMINATE) -tender = express_getattr(IfcCostScheduleTypeEnum, 'TENDER', INDETERMINATE) -unpricedbillofquantities = express_getattr(IfcCostScheduleTypeEnum, 'UNPRICEDBILLOFQUANTITIES', INDETERMINATE) -userdefined = express_getattr(IfcCostScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCostScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +budget = IfcCostScheduleTypeEnum.BUDGET +costplan = IfcCostScheduleTypeEnum.COSTPLAN +estimate = IfcCostScheduleTypeEnum.ESTIMATE +pricedbillofquantities = IfcCostScheduleTypeEnum.PRICEDBILLOFQUANTITIES +scheduleofrates = IfcCostScheduleTypeEnum.SCHEDULEOFRATES +tender = IfcCostScheduleTypeEnum.TENDER +unpricedbillofquantities = IfcCostScheduleTypeEnum.UNPRICEDBILLOFQUANTITIES +userdefined = IfcCostScheduleTypeEnum.USERDEFINED +notdefined = IfcCostScheduleTypeEnum.NOTDEFINED IfcCourseTypeEnum = enum_namespace() -armour = express_getattr(IfcCourseTypeEnum, 'ARMOUR', INDETERMINATE) -ballastbed = express_getattr(IfcCourseTypeEnum, 'BALLASTBED', INDETERMINATE) -core = express_getattr(IfcCourseTypeEnum, 'CORE', INDETERMINATE) -filter = express_getattr(IfcCourseTypeEnum, 'FILTER', INDETERMINATE) -pavement = express_getattr(IfcCourseTypeEnum, 'PAVEMENT', INDETERMINATE) -protection = express_getattr(IfcCourseTypeEnum, 'PROTECTION', INDETERMINATE) -userdefined = express_getattr(IfcCourseTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCourseTypeEnum, 'NOTDEFINED', INDETERMINATE) +armour = IfcCourseTypeEnum.ARMOUR +ballastbed = IfcCourseTypeEnum.BALLASTBED +core = IfcCourseTypeEnum.CORE +filter = IfcCourseTypeEnum.FILTER +pavement = IfcCourseTypeEnum.PAVEMENT +protection = IfcCourseTypeEnum.PROTECTION +userdefined = IfcCourseTypeEnum.USERDEFINED +notdefined = IfcCourseTypeEnum.NOTDEFINED IfcCoveringTypeEnum = enum_namespace() -ceiling = express_getattr(IfcCoveringTypeEnum, 'CEILING', INDETERMINATE) -cladding = express_getattr(IfcCoveringTypeEnum, 'CLADDING', INDETERMINATE) -coping = express_getattr(IfcCoveringTypeEnum, 'COPING', INDETERMINATE) -flooring = express_getattr(IfcCoveringTypeEnum, 'FLOORING', INDETERMINATE) -insulation = express_getattr(IfcCoveringTypeEnum, 'INSULATION', INDETERMINATE) -membrane = express_getattr(IfcCoveringTypeEnum, 'MEMBRANE', INDETERMINATE) -molding = express_getattr(IfcCoveringTypeEnum, 'MOLDING', INDETERMINATE) -roofing = express_getattr(IfcCoveringTypeEnum, 'ROOFING', INDETERMINATE) -skirtingboard = express_getattr(IfcCoveringTypeEnum, 'SKIRTINGBOARD', INDETERMINATE) -sleeving = express_getattr(IfcCoveringTypeEnum, 'SLEEVING', INDETERMINATE) -topping = express_getattr(IfcCoveringTypeEnum, 'TOPPING', INDETERMINATE) -wrapping = express_getattr(IfcCoveringTypeEnum, 'WRAPPING', INDETERMINATE) -userdefined = express_getattr(IfcCoveringTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCoveringTypeEnum, 'NOTDEFINED', INDETERMINATE) +ceiling = IfcCoveringTypeEnum.CEILING +cladding = IfcCoveringTypeEnum.CLADDING +coping = IfcCoveringTypeEnum.COPING +flooring = IfcCoveringTypeEnum.FLOORING +insulation = IfcCoveringTypeEnum.INSULATION +membrane = IfcCoveringTypeEnum.MEMBRANE +molding = IfcCoveringTypeEnum.MOLDING +roofing = IfcCoveringTypeEnum.ROOFING +skirtingboard = IfcCoveringTypeEnum.SKIRTINGBOARD +sleeving = IfcCoveringTypeEnum.SLEEVING +topping = IfcCoveringTypeEnum.TOPPING +wrapping = IfcCoveringTypeEnum.WRAPPING +userdefined = IfcCoveringTypeEnum.USERDEFINED +notdefined = IfcCoveringTypeEnum.NOTDEFINED IfcCrewResourceTypeEnum = enum_namespace() -office = express_getattr(IfcCrewResourceTypeEnum, 'OFFICE', INDETERMINATE) -site = express_getattr(IfcCrewResourceTypeEnum, 'SITE', INDETERMINATE) -userdefined = express_getattr(IfcCrewResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCrewResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +office = IfcCrewResourceTypeEnum.OFFICE +site = IfcCrewResourceTypeEnum.SITE +userdefined = IfcCrewResourceTypeEnum.USERDEFINED +notdefined = IfcCrewResourceTypeEnum.NOTDEFINED IfcCurtainWallTypeEnum = enum_namespace() -userdefined = express_getattr(IfcCurtainWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcCurtainWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcCurtainWallTypeEnum.USERDEFINED +notdefined = IfcCurtainWallTypeEnum.NOTDEFINED IfcCurveInterpolationEnum = enum_namespace() -linear = express_getattr(IfcCurveInterpolationEnum, 'LINEAR', INDETERMINATE) -log_linear = express_getattr(IfcCurveInterpolationEnum, 'LOG_LINEAR', INDETERMINATE) -log_log = express_getattr(IfcCurveInterpolationEnum, 'LOG_LOG', INDETERMINATE) -notdefined = express_getattr(IfcCurveInterpolationEnum, 'NOTDEFINED', INDETERMINATE) +linear = IfcCurveInterpolationEnum.LINEAR +log_linear = IfcCurveInterpolationEnum.LOG_LINEAR +log_log = IfcCurveInterpolationEnum.LOG_LOG +notdefined = IfcCurveInterpolationEnum.NOTDEFINED IfcDamperTypeEnum = enum_namespace() -backdraftdamper = express_getattr(IfcDamperTypeEnum, 'BACKDRAFTDAMPER', INDETERMINATE) -balancingdamper = express_getattr(IfcDamperTypeEnum, 'BALANCINGDAMPER', INDETERMINATE) -blastdamper = express_getattr(IfcDamperTypeEnum, 'BLASTDAMPER', INDETERMINATE) -controldamper = express_getattr(IfcDamperTypeEnum, 'CONTROLDAMPER', INDETERMINATE) -firedamper = express_getattr(IfcDamperTypeEnum, 'FIREDAMPER', INDETERMINATE) -firesmokedamper = express_getattr(IfcDamperTypeEnum, 'FIRESMOKEDAMPER', INDETERMINATE) -fumehoodexhaust = express_getattr(IfcDamperTypeEnum, 'FUMEHOODEXHAUST', INDETERMINATE) -gravitydamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYDAMPER', INDETERMINATE) -gravityreliefdamper = express_getattr(IfcDamperTypeEnum, 'GRAVITYRELIEFDAMPER', INDETERMINATE) -reliefdamper = express_getattr(IfcDamperTypeEnum, 'RELIEFDAMPER', INDETERMINATE) -smokedamper = express_getattr(IfcDamperTypeEnum, 'SMOKEDAMPER', INDETERMINATE) -userdefined = express_getattr(IfcDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +backdraftdamper = IfcDamperTypeEnum.BACKDRAFTDAMPER +balancingdamper = IfcDamperTypeEnum.BALANCINGDAMPER +blastdamper = IfcDamperTypeEnum.BLASTDAMPER +controldamper = IfcDamperTypeEnum.CONTROLDAMPER +firedamper = IfcDamperTypeEnum.FIREDAMPER +firesmokedamper = IfcDamperTypeEnum.FIRESMOKEDAMPER +fumehoodexhaust = IfcDamperTypeEnum.FUMEHOODEXHAUST +gravitydamper = IfcDamperTypeEnum.GRAVITYDAMPER +gravityreliefdamper = IfcDamperTypeEnum.GRAVITYRELIEFDAMPER +reliefdamper = IfcDamperTypeEnum.RELIEFDAMPER +smokedamper = IfcDamperTypeEnum.SMOKEDAMPER +userdefined = IfcDamperTypeEnum.USERDEFINED +notdefined = IfcDamperTypeEnum.NOTDEFINED IfcDataOriginEnum = enum_namespace() -measured = express_getattr(IfcDataOriginEnum, 'MEASURED', INDETERMINATE) -predicted = express_getattr(IfcDataOriginEnum, 'PREDICTED', INDETERMINATE) -simulated = express_getattr(IfcDataOriginEnum, 'SIMULATED', INDETERMINATE) -userdefined = express_getattr(IfcDataOriginEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDataOriginEnum, 'NOTDEFINED', INDETERMINATE) +measured = IfcDataOriginEnum.MEASURED +predicted = IfcDataOriginEnum.PREDICTED +simulated = IfcDataOriginEnum.SIMULATED +userdefined = IfcDataOriginEnum.USERDEFINED +notdefined = IfcDataOriginEnum.NOTDEFINED IfcDerivedUnitEnum = enum_namespace() -accelerationunit = express_getattr(IfcDerivedUnitEnum, 'ACCELERATIONUNIT', INDETERMINATE) -angularvelocityunit = express_getattr(IfcDerivedUnitEnum, 'ANGULARVELOCITYUNIT', INDETERMINATE) -areadensityunit = express_getattr(IfcDerivedUnitEnum, 'AREADENSITYUNIT', INDETERMINATE) -compoundplaneangleunit = express_getattr(IfcDerivedUnitEnum, 'COMPOUNDPLANEANGLEUNIT', INDETERMINATE) -curvatureunit = express_getattr(IfcDerivedUnitEnum, 'CURVATUREUNIT', INDETERMINATE) -dynamicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'DYNAMICVISCOSITYUNIT', INDETERMINATE) -heatfluxdensityunit = express_getattr(IfcDerivedUnitEnum, 'HEATFLUXDENSITYUNIT', INDETERMINATE) -heatingvalueunit = express_getattr(IfcDerivedUnitEnum, 'HEATINGVALUEUNIT', INDETERMINATE) -integercountrateunit = express_getattr(IfcDerivedUnitEnum, 'INTEGERCOUNTRATEUNIT', INDETERMINATE) -ionconcentrationunit = express_getattr(IfcDerivedUnitEnum, 'IONCONCENTRATIONUNIT', INDETERMINATE) -isothermalmoisturecapacityunit = express_getattr(IfcDerivedUnitEnum, 'ISOTHERMALMOISTURECAPACITYUNIT', INDETERMINATE) -kinematicviscosityunit = express_getattr(IfcDerivedUnitEnum, 'KINEMATICVISCOSITYUNIT', INDETERMINATE) -linearforceunit = express_getattr(IfcDerivedUnitEnum, 'LINEARFORCEUNIT', INDETERMINATE) -linearmomentunit = express_getattr(IfcDerivedUnitEnum, 'LINEARMOMENTUNIT', INDETERMINATE) -linearstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'LINEARSTIFFNESSUNIT', INDETERMINATE) -linearvelocityunit = express_getattr(IfcDerivedUnitEnum, 'LINEARVELOCITYUNIT', INDETERMINATE) -luminousintensitydistributionunit = express_getattr(IfcDerivedUnitEnum, 'LUMINOUSINTENSITYDISTRIBUTIONUNIT', INDETERMINATE) -massdensityunit = express_getattr(IfcDerivedUnitEnum, 'MASSDENSITYUNIT', INDETERMINATE) -massflowrateunit = express_getattr(IfcDerivedUnitEnum, 'MASSFLOWRATEUNIT', INDETERMINATE) -massperlengthunit = express_getattr(IfcDerivedUnitEnum, 'MASSPERLENGTHUNIT', INDETERMINATE) -modulusofelasticityunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFELASTICITYUNIT', INDETERMINATE) -modulusoflinearsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFLINEARSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofrotationalsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFROTATIONALSUBGRADEREACTIONUNIT', INDETERMINATE) -modulusofsubgradereactionunit = express_getattr(IfcDerivedUnitEnum, 'MODULUSOFSUBGRADEREACTIONUNIT', INDETERMINATE) -moisturediffusivityunit = express_getattr(IfcDerivedUnitEnum, 'MOISTUREDIFFUSIVITYUNIT', INDETERMINATE) -molecularweightunit = express_getattr(IfcDerivedUnitEnum, 'MOLECULARWEIGHTUNIT', INDETERMINATE) -momentofinertiaunit = express_getattr(IfcDerivedUnitEnum, 'MOMENTOFINERTIAUNIT', INDETERMINATE) -phunit = express_getattr(IfcDerivedUnitEnum, 'PHUNIT', INDETERMINATE) -planarforceunit = express_getattr(IfcDerivedUnitEnum, 'PLANARFORCEUNIT', INDETERMINATE) -rotationalfrequencyunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALFREQUENCYUNIT', INDETERMINATE) -rotationalmassunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALMASSUNIT', INDETERMINATE) -rotationalstiffnessunit = express_getattr(IfcDerivedUnitEnum, 'ROTATIONALSTIFFNESSUNIT', INDETERMINATE) -sectionareaintegralunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONAREAINTEGRALUNIT', INDETERMINATE) -sectionmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SECTIONMODULUSUNIT', INDETERMINATE) -shearmodulusunit = express_getattr(IfcDerivedUnitEnum, 'SHEARMODULUSUNIT', INDETERMINATE) -soundpowerlevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERLEVELUNIT', INDETERMINATE) -soundpowerunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPOWERUNIT', INDETERMINATE) -soundpressurelevelunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSURELEVELUNIT', INDETERMINATE) -soundpressureunit = express_getattr(IfcDerivedUnitEnum, 'SOUNDPRESSUREUNIT', INDETERMINATE) -specificheatcapacityunit = express_getattr(IfcDerivedUnitEnum, 'SPECIFICHEATCAPACITYUNIT', INDETERMINATE) -temperaturegradientunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATUREGRADIENTUNIT', INDETERMINATE) -temperaturerateofchangeunit = express_getattr(IfcDerivedUnitEnum, 'TEMPERATURERATEOFCHANGEUNIT', INDETERMINATE) -thermaladmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALADMITTANCEUNIT', INDETERMINATE) -thermalconductanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALCONDUCTANCEUNIT', INDETERMINATE) -thermalexpansioncoefficientunit = express_getattr(IfcDerivedUnitEnum, 'THERMALEXPANSIONCOEFFICIENTUNIT', INDETERMINATE) -thermalresistanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALRESISTANCEUNIT', INDETERMINATE) -thermaltransmittanceunit = express_getattr(IfcDerivedUnitEnum, 'THERMALTRANSMITTANCEUNIT', INDETERMINATE) -torqueunit = express_getattr(IfcDerivedUnitEnum, 'TORQUEUNIT', INDETERMINATE) -vaporpermeabilityunit = express_getattr(IfcDerivedUnitEnum, 'VAPORPERMEABILITYUNIT', INDETERMINATE) -volumetricflowrateunit = express_getattr(IfcDerivedUnitEnum, 'VOLUMETRICFLOWRATEUNIT', INDETERMINATE) -warpingconstantunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGCONSTANTUNIT', INDETERMINATE) -warpingmomentunit = express_getattr(IfcDerivedUnitEnum, 'WARPINGMOMENTUNIT', INDETERMINATE) -userdefined = express_getattr(IfcDerivedUnitEnum, 'USERDEFINED', INDETERMINATE) +accelerationunit = IfcDerivedUnitEnum.ACCELERATIONUNIT +angularvelocityunit = IfcDerivedUnitEnum.ANGULARVELOCITYUNIT +areadensityunit = IfcDerivedUnitEnum.AREADENSITYUNIT +compoundplaneangleunit = IfcDerivedUnitEnum.COMPOUNDPLANEANGLEUNIT +curvatureunit = IfcDerivedUnitEnum.CURVATUREUNIT +dynamicviscosityunit = IfcDerivedUnitEnum.DYNAMICVISCOSITYUNIT +heatfluxdensityunit = IfcDerivedUnitEnum.HEATFLUXDENSITYUNIT +heatingvalueunit = IfcDerivedUnitEnum.HEATINGVALUEUNIT +integercountrateunit = IfcDerivedUnitEnum.INTEGERCOUNTRATEUNIT +ionconcentrationunit = IfcDerivedUnitEnum.IONCONCENTRATIONUNIT +isothermalmoisturecapacityunit = IfcDerivedUnitEnum.ISOTHERMALMOISTURECAPACITYUNIT +kinematicviscosityunit = IfcDerivedUnitEnum.KINEMATICVISCOSITYUNIT +linearforceunit = IfcDerivedUnitEnum.LINEARFORCEUNIT +linearmomentunit = IfcDerivedUnitEnum.LINEARMOMENTUNIT +linearstiffnessunit = IfcDerivedUnitEnum.LINEARSTIFFNESSUNIT +linearvelocityunit = IfcDerivedUnitEnum.LINEARVELOCITYUNIT +luminousintensitydistributionunit = IfcDerivedUnitEnum.LUMINOUSINTENSITYDISTRIBUTIONUNIT +massdensityunit = IfcDerivedUnitEnum.MASSDENSITYUNIT +massflowrateunit = IfcDerivedUnitEnum.MASSFLOWRATEUNIT +massperlengthunit = IfcDerivedUnitEnum.MASSPERLENGTHUNIT +modulusofelasticityunit = IfcDerivedUnitEnum.MODULUSOFELASTICITYUNIT +modulusoflinearsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFLINEARSUBGRADEREACTIONUNIT +modulusofrotationalsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFROTATIONALSUBGRADEREACTIONUNIT +modulusofsubgradereactionunit = IfcDerivedUnitEnum.MODULUSOFSUBGRADEREACTIONUNIT +moisturediffusivityunit = IfcDerivedUnitEnum.MOISTUREDIFFUSIVITYUNIT +molecularweightunit = IfcDerivedUnitEnum.MOLECULARWEIGHTUNIT +momentofinertiaunit = IfcDerivedUnitEnum.MOMENTOFINERTIAUNIT +phunit = IfcDerivedUnitEnum.PHUNIT +planarforceunit = IfcDerivedUnitEnum.PLANARFORCEUNIT +rotationalfrequencyunit = IfcDerivedUnitEnum.ROTATIONALFREQUENCYUNIT +rotationalmassunit = IfcDerivedUnitEnum.ROTATIONALMASSUNIT +rotationalstiffnessunit = IfcDerivedUnitEnum.ROTATIONALSTIFFNESSUNIT +sectionareaintegralunit = IfcDerivedUnitEnum.SECTIONAREAINTEGRALUNIT +sectionmodulusunit = IfcDerivedUnitEnum.SECTIONMODULUSUNIT +shearmodulusunit = IfcDerivedUnitEnum.SHEARMODULUSUNIT +soundpowerlevelunit = IfcDerivedUnitEnum.SOUNDPOWERLEVELUNIT +soundpowerunit = IfcDerivedUnitEnum.SOUNDPOWERUNIT +soundpressurelevelunit = IfcDerivedUnitEnum.SOUNDPRESSURELEVELUNIT +soundpressureunit = IfcDerivedUnitEnum.SOUNDPRESSUREUNIT +specificheatcapacityunit = IfcDerivedUnitEnum.SPECIFICHEATCAPACITYUNIT +temperaturegradientunit = IfcDerivedUnitEnum.TEMPERATUREGRADIENTUNIT +temperaturerateofchangeunit = IfcDerivedUnitEnum.TEMPERATURERATEOFCHANGEUNIT +thermaladmittanceunit = IfcDerivedUnitEnum.THERMALADMITTANCEUNIT +thermalconductanceunit = IfcDerivedUnitEnum.THERMALCONDUCTANCEUNIT +thermalexpansioncoefficientunit = IfcDerivedUnitEnum.THERMALEXPANSIONCOEFFICIENTUNIT +thermalresistanceunit = IfcDerivedUnitEnum.THERMALRESISTANCEUNIT +thermaltransmittanceunit = IfcDerivedUnitEnum.THERMALTRANSMITTANCEUNIT +torqueunit = IfcDerivedUnitEnum.TORQUEUNIT +vaporpermeabilityunit = IfcDerivedUnitEnum.VAPORPERMEABILITYUNIT +volumetricflowrateunit = IfcDerivedUnitEnum.VOLUMETRICFLOWRATEUNIT +warpingconstantunit = IfcDerivedUnitEnum.WARPINGCONSTANTUNIT +warpingmomentunit = IfcDerivedUnitEnum.WARPINGMOMENTUNIT +userdefined = IfcDerivedUnitEnum.USERDEFINED IfcDirectionSenseEnum = enum_namespace() -negative = express_getattr(IfcDirectionSenseEnum, 'NEGATIVE', INDETERMINATE) -positive = express_getattr(IfcDirectionSenseEnum, 'POSITIVE', INDETERMINATE) +negative = IfcDirectionSenseEnum.NEGATIVE +positive = IfcDirectionSenseEnum.POSITIVE IfcDiscreteAccessoryTypeEnum = enum_namespace() -anchorplate = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ANCHORPLATE', INDETERMINATE) -birdprotection = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BIRDPROTECTION', INDETERMINATE) -bracket = express_getattr(IfcDiscreteAccessoryTypeEnum, 'BRACKET', INDETERMINATE) -cablearranger = express_getattr(IfcDiscreteAccessoryTypeEnum, 'CABLEARRANGER', INDETERMINATE) -elastic_cushion = express_getattr(IfcDiscreteAccessoryTypeEnum, 'ELASTIC_CUSHION', INDETERMINATE) -expansion_joint_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'EXPANSION_JOINT_DEVICE', INDETERMINATE) -filler = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FILLER', INDETERMINATE) -flashing = express_getattr(IfcDiscreteAccessoryTypeEnum, 'FLASHING', INDETERMINATE) -insulator = express_getattr(IfcDiscreteAccessoryTypeEnum, 'INSULATOR', INDETERMINATE) -lock = express_getattr(IfcDiscreteAccessoryTypeEnum, 'LOCK', INDETERMINATE) -panel_strengthening = express_getattr(IfcDiscreteAccessoryTypeEnum, 'PANEL_STRENGTHENING', INDETERMINATE) -pointmachinemountingdevice = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINTMACHINEMOUNTINGDEVICE', INDETERMINATE) -point_machine_locking_device = express_getattr(IfcDiscreteAccessoryTypeEnum, 'POINT_MACHINE_LOCKING_DEVICE', INDETERMINATE) -railbrace = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILBRACE', INDETERMINATE) -railpad = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAILPAD', INDETERMINATE) -rail_lubrication = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_LUBRICATION', INDETERMINATE) -rail_mechanical_equipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT', INDETERMINATE) -shoe = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SHOE', INDETERMINATE) -slidingchair = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SLIDINGCHAIR', INDETERMINATE) -soundabsorption = express_getattr(IfcDiscreteAccessoryTypeEnum, 'SOUNDABSORPTION', INDETERMINATE) -tensioningequipment = express_getattr(IfcDiscreteAccessoryTypeEnum, 'TENSIONINGEQUIPMENT', INDETERMINATE) -userdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDiscreteAccessoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorplate = IfcDiscreteAccessoryTypeEnum.ANCHORPLATE +birdprotection = IfcDiscreteAccessoryTypeEnum.BIRDPROTECTION +bracket = IfcDiscreteAccessoryTypeEnum.BRACKET +cablearranger = IfcDiscreteAccessoryTypeEnum.CABLEARRANGER +elastic_cushion = IfcDiscreteAccessoryTypeEnum.ELASTIC_CUSHION +expansion_joint_device = IfcDiscreteAccessoryTypeEnum.EXPANSION_JOINT_DEVICE +filler = IfcDiscreteAccessoryTypeEnum.FILLER +flashing = IfcDiscreteAccessoryTypeEnum.FLASHING +insulator = IfcDiscreteAccessoryTypeEnum.INSULATOR +lock = IfcDiscreteAccessoryTypeEnum.LOCK +panel_strengthening = IfcDiscreteAccessoryTypeEnum.PANEL_STRENGTHENING +pointmachinemountingdevice = IfcDiscreteAccessoryTypeEnum.POINTMACHINEMOUNTINGDEVICE +point_machine_locking_device = IfcDiscreteAccessoryTypeEnum.POINT_MACHINE_LOCKING_DEVICE +railbrace = IfcDiscreteAccessoryTypeEnum.RAILBRACE +railpad = IfcDiscreteAccessoryTypeEnum.RAILPAD +rail_lubrication = IfcDiscreteAccessoryTypeEnum.RAIL_LUBRICATION +rail_mechanical_equipment = IfcDiscreteAccessoryTypeEnum.RAIL_MECHANICAL_EQUIPMENT +shoe = IfcDiscreteAccessoryTypeEnum.SHOE +slidingchair = IfcDiscreteAccessoryTypeEnum.SLIDINGCHAIR +soundabsorption = IfcDiscreteAccessoryTypeEnum.SOUNDABSORPTION +tensioningequipment = IfcDiscreteAccessoryTypeEnum.TENSIONINGEQUIPMENT +userdefined = IfcDiscreteAccessoryTypeEnum.USERDEFINED +notdefined = IfcDiscreteAccessoryTypeEnum.NOTDEFINED IfcDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -dispatchingboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISPATCHINGBOARD', INDETERMINATE) -distributionboard = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -distributionframe = express_getattr(IfcDistributionBoardTypeEnum, 'DISTRIBUTIONFRAME', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcDistributionBoardTypeEnum.CONSUMERUNIT +dispatchingboard = IfcDistributionBoardTypeEnum.DISPATCHINGBOARD +distributionboard = IfcDistributionBoardTypeEnum.DISTRIBUTIONBOARD +distributionframe = IfcDistributionBoardTypeEnum.DISTRIBUTIONFRAME +motorcontrolcentre = IfcDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcDistributionBoardTypeEnum.NOTDEFINED IfcDistributionChamberElementTypeEnum = enum_namespace() -formedduct = express_getattr(IfcDistributionChamberElementTypeEnum, 'FORMEDDUCT', INDETERMINATE) -inspectionchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONCHAMBER', INDETERMINATE) -inspectionpit = express_getattr(IfcDistributionChamberElementTypeEnum, 'INSPECTIONPIT', INDETERMINATE) -manhole = express_getattr(IfcDistributionChamberElementTypeEnum, 'MANHOLE', INDETERMINATE) -meterchamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'METERCHAMBER', INDETERMINATE) -sump = express_getattr(IfcDistributionChamberElementTypeEnum, 'SUMP', INDETERMINATE) -trench = express_getattr(IfcDistributionChamberElementTypeEnum, 'TRENCH', INDETERMINATE) -valvechamber = express_getattr(IfcDistributionChamberElementTypeEnum, 'VALVECHAMBER', INDETERMINATE) -userdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionChamberElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +formedduct = IfcDistributionChamberElementTypeEnum.FORMEDDUCT +inspectionchamber = IfcDistributionChamberElementTypeEnum.INSPECTIONCHAMBER +inspectionpit = IfcDistributionChamberElementTypeEnum.INSPECTIONPIT +manhole = IfcDistributionChamberElementTypeEnum.MANHOLE +meterchamber = IfcDistributionChamberElementTypeEnum.METERCHAMBER +sump = IfcDistributionChamberElementTypeEnum.SUMP +trench = IfcDistributionChamberElementTypeEnum.TRENCH +valvechamber = IfcDistributionChamberElementTypeEnum.VALVECHAMBER +userdefined = IfcDistributionChamberElementTypeEnum.USERDEFINED +notdefined = IfcDistributionChamberElementTypeEnum.NOTDEFINED IfcDistributionPortTypeEnum = enum_namespace() -cable = express_getattr(IfcDistributionPortTypeEnum, 'CABLE', INDETERMINATE) -cablecarrier = express_getattr(IfcDistributionPortTypeEnum, 'CABLECARRIER', INDETERMINATE) -duct = express_getattr(IfcDistributionPortTypeEnum, 'DUCT', INDETERMINATE) -pipe = express_getattr(IfcDistributionPortTypeEnum, 'PIPE', INDETERMINATE) -wireless = express_getattr(IfcDistributionPortTypeEnum, 'WIRELESS', INDETERMINATE) -userdefined = express_getattr(IfcDistributionPortTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionPortTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcDistributionPortTypeEnum.CABLE +cablecarrier = IfcDistributionPortTypeEnum.CABLECARRIER +duct = IfcDistributionPortTypeEnum.DUCT +pipe = IfcDistributionPortTypeEnum.PIPE +wireless = IfcDistributionPortTypeEnum.WIRELESS +userdefined = IfcDistributionPortTypeEnum.USERDEFINED +notdefined = IfcDistributionPortTypeEnum.NOTDEFINED IfcDistributionSystemEnum = enum_namespace() -airconditioning = express_getattr(IfcDistributionSystemEnum, 'AIRCONDITIONING', INDETERMINATE) -audiovisual = express_getattr(IfcDistributionSystemEnum, 'AUDIOVISUAL', INDETERMINATE) -catenary_system = express_getattr(IfcDistributionSystemEnum, 'CATENARY_SYSTEM', INDETERMINATE) -chemical = express_getattr(IfcDistributionSystemEnum, 'CHEMICAL', INDETERMINATE) -chilledwater = express_getattr(IfcDistributionSystemEnum, 'CHILLEDWATER', INDETERMINATE) -communication = express_getattr(IfcDistributionSystemEnum, 'COMMUNICATION', INDETERMINATE) -compressedair = express_getattr(IfcDistributionSystemEnum, 'COMPRESSEDAIR', INDETERMINATE) -condenserwater = express_getattr(IfcDistributionSystemEnum, 'CONDENSERWATER', INDETERMINATE) -control = express_getattr(IfcDistributionSystemEnum, 'CONTROL', INDETERMINATE) -conveying = express_getattr(IfcDistributionSystemEnum, 'CONVEYING', INDETERMINATE) -data = express_getattr(IfcDistributionSystemEnum, 'DATA', INDETERMINATE) -disposal = express_getattr(IfcDistributionSystemEnum, 'DISPOSAL', INDETERMINATE) -domesticcoldwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICCOLDWATER', INDETERMINATE) -domestichotwater = express_getattr(IfcDistributionSystemEnum, 'DOMESTICHOTWATER', INDETERMINATE) -drainage = express_getattr(IfcDistributionSystemEnum, 'DRAINAGE', INDETERMINATE) -earthing = express_getattr(IfcDistributionSystemEnum, 'EARTHING', INDETERMINATE) -electrical = express_getattr(IfcDistributionSystemEnum, 'ELECTRICAL', INDETERMINATE) -electroacoustic = express_getattr(IfcDistributionSystemEnum, 'ELECTROACOUSTIC', INDETERMINATE) -exhaust = express_getattr(IfcDistributionSystemEnum, 'EXHAUST', INDETERMINATE) -fireprotection = express_getattr(IfcDistributionSystemEnum, 'FIREPROTECTION', INDETERMINATE) -fixedtransmissionnetwork = express_getattr(IfcDistributionSystemEnum, 'FIXEDTRANSMISSIONNETWORK', INDETERMINATE) -fuel = express_getattr(IfcDistributionSystemEnum, 'FUEL', INDETERMINATE) -gas = express_getattr(IfcDistributionSystemEnum, 'GAS', INDETERMINATE) -hazardous = express_getattr(IfcDistributionSystemEnum, 'HAZARDOUS', INDETERMINATE) -heating = express_getattr(IfcDistributionSystemEnum, 'HEATING', INDETERMINATE) -lighting = express_getattr(IfcDistributionSystemEnum, 'LIGHTING', INDETERMINATE) -lightningprotection = express_getattr(IfcDistributionSystemEnum, 'LIGHTNINGPROTECTION', INDETERMINATE) -mobilenetwork = express_getattr(IfcDistributionSystemEnum, 'MOBILENETWORK', INDETERMINATE) -monitoringsystem = express_getattr(IfcDistributionSystemEnum, 'MONITORINGSYSTEM', INDETERMINATE) -municipalsolidwaste = express_getattr(IfcDistributionSystemEnum, 'MUNICIPALSOLIDWASTE', INDETERMINATE) -oil = express_getattr(IfcDistributionSystemEnum, 'OIL', INDETERMINATE) -operational = express_getattr(IfcDistributionSystemEnum, 'OPERATIONAL', INDETERMINATE) -operationaltelephonysystem = express_getattr(IfcDistributionSystemEnum, 'OPERATIONALTELEPHONYSYSTEM', INDETERMINATE) -overhead_contactline_system = express_getattr(IfcDistributionSystemEnum, 'OVERHEAD_CONTACTLINE_SYSTEM', INDETERMINATE) -powergeneration = express_getattr(IfcDistributionSystemEnum, 'POWERGENERATION', INDETERMINATE) -rainwater = express_getattr(IfcDistributionSystemEnum, 'RAINWATER', INDETERMINATE) -refrigeration = express_getattr(IfcDistributionSystemEnum, 'REFRIGERATION', INDETERMINATE) -return_circuit = express_getattr(IfcDistributionSystemEnum, 'RETURN_CIRCUIT', INDETERMINATE) -security = express_getattr(IfcDistributionSystemEnum, 'SECURITY', INDETERMINATE) -sewage = express_getattr(IfcDistributionSystemEnum, 'SEWAGE', INDETERMINATE) -signal = express_getattr(IfcDistributionSystemEnum, 'SIGNAL', INDETERMINATE) -stormwater = express_getattr(IfcDistributionSystemEnum, 'STORMWATER', INDETERMINATE) -telephone = express_getattr(IfcDistributionSystemEnum, 'TELEPHONE', INDETERMINATE) -tv = express_getattr(IfcDistributionSystemEnum, 'TV', INDETERMINATE) -vacuum = express_getattr(IfcDistributionSystemEnum, 'VACUUM', INDETERMINATE) -vent = express_getattr(IfcDistributionSystemEnum, 'VENT', INDETERMINATE) -ventilation = express_getattr(IfcDistributionSystemEnum, 'VENTILATION', INDETERMINATE) -wastewater = express_getattr(IfcDistributionSystemEnum, 'WASTEWATER', INDETERMINATE) -watersupply = express_getattr(IfcDistributionSystemEnum, 'WATERSUPPLY', INDETERMINATE) -userdefined = express_getattr(IfcDistributionSystemEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDistributionSystemEnum, 'NOTDEFINED', INDETERMINATE) +airconditioning = IfcDistributionSystemEnum.AIRCONDITIONING +audiovisual = IfcDistributionSystemEnum.AUDIOVISUAL +catenary_system = IfcDistributionSystemEnum.CATENARY_SYSTEM +chemical = IfcDistributionSystemEnum.CHEMICAL +chilledwater = IfcDistributionSystemEnum.CHILLEDWATER +communication = IfcDistributionSystemEnum.COMMUNICATION +compressedair = IfcDistributionSystemEnum.COMPRESSEDAIR +condenserwater = IfcDistributionSystemEnum.CONDENSERWATER +control = IfcDistributionSystemEnum.CONTROL +conveying = IfcDistributionSystemEnum.CONVEYING +data = IfcDistributionSystemEnum.DATA +disposal = IfcDistributionSystemEnum.DISPOSAL +domesticcoldwater = IfcDistributionSystemEnum.DOMESTICCOLDWATER +domestichotwater = IfcDistributionSystemEnum.DOMESTICHOTWATER +drainage = IfcDistributionSystemEnum.DRAINAGE +earthing = IfcDistributionSystemEnum.EARTHING +electrical = IfcDistributionSystemEnum.ELECTRICAL +electroacoustic = IfcDistributionSystemEnum.ELECTROACOUSTIC +exhaust = IfcDistributionSystemEnum.EXHAUST +fireprotection = IfcDistributionSystemEnum.FIREPROTECTION +fixedtransmissionnetwork = IfcDistributionSystemEnum.FIXEDTRANSMISSIONNETWORK +fuel = IfcDistributionSystemEnum.FUEL +gas = IfcDistributionSystemEnum.GAS +hazardous = IfcDistributionSystemEnum.HAZARDOUS +heating = IfcDistributionSystemEnum.HEATING +lighting = IfcDistributionSystemEnum.LIGHTING +lightningprotection = IfcDistributionSystemEnum.LIGHTNINGPROTECTION +mobilenetwork = IfcDistributionSystemEnum.MOBILENETWORK +monitoringsystem = IfcDistributionSystemEnum.MONITORINGSYSTEM +municipalsolidwaste = IfcDistributionSystemEnum.MUNICIPALSOLIDWASTE +oil = IfcDistributionSystemEnum.OIL +operational = IfcDistributionSystemEnum.OPERATIONAL +operationaltelephonysystem = IfcDistributionSystemEnum.OPERATIONALTELEPHONYSYSTEM +overhead_contactline_system = IfcDistributionSystemEnum.OVERHEAD_CONTACTLINE_SYSTEM +powergeneration = IfcDistributionSystemEnum.POWERGENERATION +rainwater = IfcDistributionSystemEnum.RAINWATER +refrigeration = IfcDistributionSystemEnum.REFRIGERATION +return_circuit = IfcDistributionSystemEnum.RETURN_CIRCUIT +security = IfcDistributionSystemEnum.SECURITY +sewage = IfcDistributionSystemEnum.SEWAGE +signal = IfcDistributionSystemEnum.SIGNAL +stormwater = IfcDistributionSystemEnum.STORMWATER +telephone = IfcDistributionSystemEnum.TELEPHONE +tv = IfcDistributionSystemEnum.TV +vacuum = IfcDistributionSystemEnum.VACUUM +vent = IfcDistributionSystemEnum.VENT +ventilation = IfcDistributionSystemEnum.VENTILATION +wastewater = IfcDistributionSystemEnum.WASTEWATER +watersupply = IfcDistributionSystemEnum.WATERSUPPLY +userdefined = IfcDistributionSystemEnum.USERDEFINED +notdefined = IfcDistributionSystemEnum.NOTDEFINED IfcDocumentConfidentialityEnum = enum_namespace() -confidential = express_getattr(IfcDocumentConfidentialityEnum, 'CONFIDENTIAL', INDETERMINATE) -personal = express_getattr(IfcDocumentConfidentialityEnum, 'PERSONAL', INDETERMINATE) -public = express_getattr(IfcDocumentConfidentialityEnum, 'PUBLIC', INDETERMINATE) -restricted = express_getattr(IfcDocumentConfidentialityEnum, 'RESTRICTED', INDETERMINATE) -userdefined = express_getattr(IfcDocumentConfidentialityEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDocumentConfidentialityEnum, 'NOTDEFINED', INDETERMINATE) +confidential = IfcDocumentConfidentialityEnum.CONFIDENTIAL +personal = IfcDocumentConfidentialityEnum.PERSONAL +public = IfcDocumentConfidentialityEnum.PUBLIC +restricted = IfcDocumentConfidentialityEnum.RESTRICTED +userdefined = IfcDocumentConfidentialityEnum.USERDEFINED +notdefined = IfcDocumentConfidentialityEnum.NOTDEFINED IfcDocumentStatusEnum = enum_namespace() -draft = express_getattr(IfcDocumentStatusEnum, 'DRAFT', INDETERMINATE) -final = express_getattr(IfcDocumentStatusEnum, 'FINAL', INDETERMINATE) -finaldraft = express_getattr(IfcDocumentStatusEnum, 'FINALDRAFT', INDETERMINATE) -revision = express_getattr(IfcDocumentStatusEnum, 'REVISION', INDETERMINATE) -notdefined = express_getattr(IfcDocumentStatusEnum, 'NOTDEFINED', INDETERMINATE) +draft = IfcDocumentStatusEnum.DRAFT +final = IfcDocumentStatusEnum.FINAL +finaldraft = IfcDocumentStatusEnum.FINALDRAFT +revision = IfcDocumentStatusEnum.REVISION +notdefined = IfcDocumentStatusEnum.NOTDEFINED IfcDoorPanelOperationEnum = enum_namespace() -double_acting = express_getattr(IfcDoorPanelOperationEnum, 'DOUBLE_ACTING', INDETERMINATE) -fixedpanel = express_getattr(IfcDoorPanelOperationEnum, 'FIXEDPANEL', INDETERMINATE) -folding = express_getattr(IfcDoorPanelOperationEnum, 'FOLDING', INDETERMINATE) -revolving = express_getattr(IfcDoorPanelOperationEnum, 'REVOLVING', INDETERMINATE) -rollingup = express_getattr(IfcDoorPanelOperationEnum, 'ROLLINGUP', INDETERMINATE) -sliding = express_getattr(IfcDoorPanelOperationEnum, 'SLIDING', INDETERMINATE) -swinging = express_getattr(IfcDoorPanelOperationEnum, 'SWINGING', INDETERMINATE) -userdefined = express_getattr(IfcDoorPanelOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_acting = IfcDoorPanelOperationEnum.DOUBLE_ACTING +fixedpanel = IfcDoorPanelOperationEnum.FIXEDPANEL +folding = IfcDoorPanelOperationEnum.FOLDING +revolving = IfcDoorPanelOperationEnum.REVOLVING +rollingup = IfcDoorPanelOperationEnum.ROLLINGUP +sliding = IfcDoorPanelOperationEnum.SLIDING +swinging = IfcDoorPanelOperationEnum.SWINGING +userdefined = IfcDoorPanelOperationEnum.USERDEFINED +notdefined = IfcDoorPanelOperationEnum.NOTDEFINED IfcDoorPanelPositionEnum = enum_namespace() -left = express_getattr(IfcDoorPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcDoorPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcDoorPanelPositionEnum, 'RIGHT', INDETERMINATE) -notdefined = express_getattr(IfcDoorPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +left = IfcDoorPanelPositionEnum.LEFT +middle = IfcDoorPanelPositionEnum.MIDDLE +right = IfcDoorPanelPositionEnum.RIGHT +notdefined = IfcDoorPanelPositionEnum.NOTDEFINED IfcDoorTypeEnum = enum_namespace() -boom_barrier = express_getattr(IfcDoorTypeEnum, 'BOOM_BARRIER', INDETERMINATE) -door = express_getattr(IfcDoorTypeEnum, 'DOOR', INDETERMINATE) -gate = express_getattr(IfcDoorTypeEnum, 'GATE', INDETERMINATE) -trapdoor = express_getattr(IfcDoorTypeEnum, 'TRAPDOOR', INDETERMINATE) -turnstile = express_getattr(IfcDoorTypeEnum, 'TURNSTILE', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeEnum, 'NOTDEFINED', INDETERMINATE) +boom_barrier = IfcDoorTypeEnum.BOOM_BARRIER +door = IfcDoorTypeEnum.DOOR +gate = IfcDoorTypeEnum.GATE +trapdoor = IfcDoorTypeEnum.TRAPDOOR +turnstile = IfcDoorTypeEnum.TURNSTILE +userdefined = IfcDoorTypeEnum.USERDEFINED +notdefined = IfcDoorTypeEnum.NOTDEFINED IfcDoorTypeOperationEnum = enum_namespace() -double_door_double_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_DOUBLE_SWING', INDETERMINATE) -double_door_folding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_FOLDING', INDETERMINATE) -double_door_lifting_vertical = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_LIFTING_VERTICAL', INDETERMINATE) -double_door_single_swing = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING', INDETERMINATE) -double_door_single_swing_opposite_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT', INDETERMINATE) -double_door_single_swing_opposite_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT', INDETERMINATE) -double_door_sliding = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_DOOR_SLIDING', INDETERMINATE) -double_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_LEFT', INDETERMINATE) -double_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'DOUBLE_SWING_RIGHT', INDETERMINATE) -folding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_LEFT', INDETERMINATE) -folding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'FOLDING_TO_RIGHT', INDETERMINATE) -lifting_horizontal = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_HORIZONTAL', INDETERMINATE) -lifting_vertical_left = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_LEFT', INDETERMINATE) -lifting_vertical_right = express_getattr(IfcDoorTypeOperationEnum, 'LIFTING_VERTICAL_RIGHT', INDETERMINATE) -revolving = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING', INDETERMINATE) -revolving_vertical = express_getattr(IfcDoorTypeOperationEnum, 'REVOLVING_VERTICAL', INDETERMINATE) -rollingup = express_getattr(IfcDoorTypeOperationEnum, 'ROLLINGUP', INDETERMINATE) -single_swing_left = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_LEFT', INDETERMINATE) -single_swing_right = express_getattr(IfcDoorTypeOperationEnum, 'SINGLE_SWING_RIGHT', INDETERMINATE) -sliding_to_left = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_LEFT', INDETERMINATE) -sliding_to_right = express_getattr(IfcDoorTypeOperationEnum, 'SLIDING_TO_RIGHT', INDETERMINATE) -swing_fixed_left = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_LEFT', INDETERMINATE) -swing_fixed_right = express_getattr(IfcDoorTypeOperationEnum, 'SWING_FIXED_RIGHT', INDETERMINATE) -userdefined = express_getattr(IfcDoorTypeOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDoorTypeOperationEnum, 'NOTDEFINED', INDETERMINATE) +double_door_double_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_DOUBLE_SWING +double_door_folding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_FOLDING +double_door_lifting_vertical = IfcDoorTypeOperationEnum.DOUBLE_DOOR_LIFTING_VERTICAL +double_door_single_swing = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING +double_door_single_swing_opposite_left = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT +double_door_single_swing_opposite_right = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT +double_door_sliding = IfcDoorTypeOperationEnum.DOUBLE_DOOR_SLIDING +double_swing_left = IfcDoorTypeOperationEnum.DOUBLE_SWING_LEFT +double_swing_right = IfcDoorTypeOperationEnum.DOUBLE_SWING_RIGHT +folding_to_left = IfcDoorTypeOperationEnum.FOLDING_TO_LEFT +folding_to_right = IfcDoorTypeOperationEnum.FOLDING_TO_RIGHT +lifting_horizontal = IfcDoorTypeOperationEnum.LIFTING_HORIZONTAL +lifting_vertical_left = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_LEFT +lifting_vertical_right = IfcDoorTypeOperationEnum.LIFTING_VERTICAL_RIGHT +revolving = IfcDoorTypeOperationEnum.REVOLVING +revolving_vertical = IfcDoorTypeOperationEnum.REVOLVING_VERTICAL +rollingup = IfcDoorTypeOperationEnum.ROLLINGUP +single_swing_left = IfcDoorTypeOperationEnum.SINGLE_SWING_LEFT +single_swing_right = IfcDoorTypeOperationEnum.SINGLE_SWING_RIGHT +sliding_to_left = IfcDoorTypeOperationEnum.SLIDING_TO_LEFT +sliding_to_right = IfcDoorTypeOperationEnum.SLIDING_TO_RIGHT +swing_fixed_left = IfcDoorTypeOperationEnum.SWING_FIXED_LEFT +swing_fixed_right = IfcDoorTypeOperationEnum.SWING_FIXED_RIGHT +userdefined = IfcDoorTypeOperationEnum.USERDEFINED +notdefined = IfcDoorTypeOperationEnum.NOTDEFINED IfcDuctFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcDuctFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcDuctFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcDuctFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcDuctFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcDuctFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcDuctFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcDuctFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcDuctFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcDuctFittingTypeEnum.BEND +connector = IfcDuctFittingTypeEnum.CONNECTOR +entry = IfcDuctFittingTypeEnum.ENTRY +exit = IfcDuctFittingTypeEnum.EXIT +junction = IfcDuctFittingTypeEnum.JUNCTION +obstruction = IfcDuctFittingTypeEnum.OBSTRUCTION +transition = IfcDuctFittingTypeEnum.TRANSITION +userdefined = IfcDuctFittingTypeEnum.USERDEFINED +notdefined = IfcDuctFittingTypeEnum.NOTDEFINED IfcDuctSegmentTypeEnum = enum_namespace() -flexiblesegment = express_getattr(IfcDuctSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -rigidsegment = express_getattr(IfcDuctSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -userdefined = express_getattr(IfcDuctSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexiblesegment = IfcDuctSegmentTypeEnum.FLEXIBLESEGMENT +rigidsegment = IfcDuctSegmentTypeEnum.RIGIDSEGMENT +userdefined = IfcDuctSegmentTypeEnum.USERDEFINED +notdefined = IfcDuctSegmentTypeEnum.NOTDEFINED IfcDuctSilencerTypeEnum = enum_namespace() -flatoval = express_getattr(IfcDuctSilencerTypeEnum, 'FLATOVAL', INDETERMINATE) -rectangular = express_getattr(IfcDuctSilencerTypeEnum, 'RECTANGULAR', INDETERMINATE) -round = express_getattr(IfcDuctSilencerTypeEnum, 'ROUND', INDETERMINATE) -userdefined = express_getattr(IfcDuctSilencerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcDuctSilencerTypeEnum, 'NOTDEFINED', INDETERMINATE) +flatoval = IfcDuctSilencerTypeEnum.FLATOVAL +rectangular = IfcDuctSilencerTypeEnum.RECTANGULAR +round = IfcDuctSilencerTypeEnum.ROUND +userdefined = IfcDuctSilencerTypeEnum.USERDEFINED +notdefined = IfcDuctSilencerTypeEnum.NOTDEFINED IfcEarthworksCutTypeEnum = enum_namespace() -base_excavation = express_getattr(IfcEarthworksCutTypeEnum, 'BASE_EXCAVATION', INDETERMINATE) -cut = express_getattr(IfcEarthworksCutTypeEnum, 'CUT', INDETERMINATE) -dredging = express_getattr(IfcEarthworksCutTypeEnum, 'DREDGING', INDETERMINATE) -excavation = express_getattr(IfcEarthworksCutTypeEnum, 'EXCAVATION', INDETERMINATE) -overexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'OVEREXCAVATION', INDETERMINATE) -pavementmilling = express_getattr(IfcEarthworksCutTypeEnum, 'PAVEMENTMILLING', INDETERMINATE) -stepexcavation = express_getattr(IfcEarthworksCutTypeEnum, 'STEPEXCAVATION', INDETERMINATE) -topsoilremoval = express_getattr(IfcEarthworksCutTypeEnum, 'TOPSOILREMOVAL', INDETERMINATE) -trench = express_getattr(IfcEarthworksCutTypeEnum, 'TRENCH', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksCutTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksCutTypeEnum, 'NOTDEFINED', INDETERMINATE) +base_excavation = IfcEarthworksCutTypeEnum.BASE_EXCAVATION +cut = IfcEarthworksCutTypeEnum.CUT +dredging = IfcEarthworksCutTypeEnum.DREDGING +excavation = IfcEarthworksCutTypeEnum.EXCAVATION +overexcavation = IfcEarthworksCutTypeEnum.OVEREXCAVATION +pavementmilling = IfcEarthworksCutTypeEnum.PAVEMENTMILLING +stepexcavation = IfcEarthworksCutTypeEnum.STEPEXCAVATION +topsoilremoval = IfcEarthworksCutTypeEnum.TOPSOILREMOVAL +trench = IfcEarthworksCutTypeEnum.TRENCH +userdefined = IfcEarthworksCutTypeEnum.USERDEFINED +notdefined = IfcEarthworksCutTypeEnum.NOTDEFINED IfcEarthworksFillTypeEnum = enum_namespace() -backfill = express_getattr(IfcEarthworksFillTypeEnum, 'BACKFILL', INDETERMINATE) -counterweight = express_getattr(IfcEarthworksFillTypeEnum, 'COUNTERWEIGHT', INDETERMINATE) -embankment = express_getattr(IfcEarthworksFillTypeEnum, 'EMBANKMENT', INDETERMINATE) -slopefill = express_getattr(IfcEarthworksFillTypeEnum, 'SLOPEFILL', INDETERMINATE) -subgrade = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADE', INDETERMINATE) -subgradebed = express_getattr(IfcEarthworksFillTypeEnum, 'SUBGRADEBED', INDETERMINATE) -transitionsection = express_getattr(IfcEarthworksFillTypeEnum, 'TRANSITIONSECTION', INDETERMINATE) -userdefined = express_getattr(IfcEarthworksFillTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEarthworksFillTypeEnum, 'NOTDEFINED', INDETERMINATE) +backfill = IfcEarthworksFillTypeEnum.BACKFILL +counterweight = IfcEarthworksFillTypeEnum.COUNTERWEIGHT +embankment = IfcEarthworksFillTypeEnum.EMBANKMENT +slopefill = IfcEarthworksFillTypeEnum.SLOPEFILL +subgrade = IfcEarthworksFillTypeEnum.SUBGRADE +subgradebed = IfcEarthworksFillTypeEnum.SUBGRADEBED +transitionsection = IfcEarthworksFillTypeEnum.TRANSITIONSECTION +userdefined = IfcEarthworksFillTypeEnum.USERDEFINED +notdefined = IfcEarthworksFillTypeEnum.NOTDEFINED IfcElectricApplianceTypeEnum = enum_namespace() -dishwasher = express_getattr(IfcElectricApplianceTypeEnum, 'DISHWASHER', INDETERMINATE) -electriccooker = express_getattr(IfcElectricApplianceTypeEnum, 'ELECTRICCOOKER', INDETERMINATE) -freestandingelectricheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGELECTRICHEATER', INDETERMINATE) -freestandingfan = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGFAN', INDETERMINATE) -freestandingwatercooler = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERCOOLER', INDETERMINATE) -freestandingwaterheater = express_getattr(IfcElectricApplianceTypeEnum, 'FREESTANDINGWATERHEATER', INDETERMINATE) -freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FREEZER', INDETERMINATE) -fridge_freezer = express_getattr(IfcElectricApplianceTypeEnum, 'FRIDGE_FREEZER', INDETERMINATE) -handdryer = express_getattr(IfcElectricApplianceTypeEnum, 'HANDDRYER', INDETERMINATE) -kitchenmachine = express_getattr(IfcElectricApplianceTypeEnum, 'KITCHENMACHINE', INDETERMINATE) -microwave = express_getattr(IfcElectricApplianceTypeEnum, 'MICROWAVE', INDETERMINATE) -photocopier = express_getattr(IfcElectricApplianceTypeEnum, 'PHOTOCOPIER', INDETERMINATE) -refrigerator = express_getattr(IfcElectricApplianceTypeEnum, 'REFRIGERATOR', INDETERMINATE) -tumbledryer = express_getattr(IfcElectricApplianceTypeEnum, 'TUMBLEDRYER', INDETERMINATE) -vendingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'VENDINGMACHINE', INDETERMINATE) -washingmachine = express_getattr(IfcElectricApplianceTypeEnum, 'WASHINGMACHINE', INDETERMINATE) -userdefined = express_getattr(IfcElectricApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +dishwasher = IfcElectricApplianceTypeEnum.DISHWASHER +electriccooker = IfcElectricApplianceTypeEnum.ELECTRICCOOKER +freestandingelectricheater = IfcElectricApplianceTypeEnum.FREESTANDINGELECTRICHEATER +freestandingfan = IfcElectricApplianceTypeEnum.FREESTANDINGFAN +freestandingwatercooler = IfcElectricApplianceTypeEnum.FREESTANDINGWATERCOOLER +freestandingwaterheater = IfcElectricApplianceTypeEnum.FREESTANDINGWATERHEATER +freezer = IfcElectricApplianceTypeEnum.FREEZER +fridge_freezer = IfcElectricApplianceTypeEnum.FRIDGE_FREEZER +handdryer = IfcElectricApplianceTypeEnum.HANDDRYER +kitchenmachine = IfcElectricApplianceTypeEnum.KITCHENMACHINE +microwave = IfcElectricApplianceTypeEnum.MICROWAVE +photocopier = IfcElectricApplianceTypeEnum.PHOTOCOPIER +refrigerator = IfcElectricApplianceTypeEnum.REFRIGERATOR +tumbledryer = IfcElectricApplianceTypeEnum.TUMBLEDRYER +vendingmachine = IfcElectricApplianceTypeEnum.VENDINGMACHINE +washingmachine = IfcElectricApplianceTypeEnum.WASHINGMACHINE +userdefined = IfcElectricApplianceTypeEnum.USERDEFINED +notdefined = IfcElectricApplianceTypeEnum.NOTDEFINED IfcElectricDistributionBoardTypeEnum = enum_namespace() -consumerunit = express_getattr(IfcElectricDistributionBoardTypeEnum, 'CONSUMERUNIT', INDETERMINATE) -distributionboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'DISTRIBUTIONBOARD', INDETERMINATE) -motorcontrolcentre = express_getattr(IfcElectricDistributionBoardTypeEnum, 'MOTORCONTROLCENTRE', INDETERMINATE) -switchboard = express_getattr(IfcElectricDistributionBoardTypeEnum, 'SWITCHBOARD', INDETERMINATE) -userdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricDistributionBoardTypeEnum, 'NOTDEFINED', INDETERMINATE) +consumerunit = IfcElectricDistributionBoardTypeEnum.CONSUMERUNIT +distributionboard = IfcElectricDistributionBoardTypeEnum.DISTRIBUTIONBOARD +motorcontrolcentre = IfcElectricDistributionBoardTypeEnum.MOTORCONTROLCENTRE +switchboard = IfcElectricDistributionBoardTypeEnum.SWITCHBOARD +userdefined = IfcElectricDistributionBoardTypeEnum.USERDEFINED +notdefined = IfcElectricDistributionBoardTypeEnum.NOTDEFINED IfcElectricFlowStorageDeviceTypeEnum = enum_namespace() -battery = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'BATTERY', INDETERMINATE) -capacitor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITOR', INDETERMINATE) -capacitorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'CAPACITORBANK', INDETERMINATE) -compensator = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'COMPENSATOR', INDETERMINATE) -harmonicfilter = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'HARMONICFILTER', INDETERMINATE) -inductor = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTOR', INDETERMINATE) -inductorbank = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'INDUCTORBANK', INDETERMINATE) -recharger = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'RECHARGER', INDETERMINATE) -ups = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'UPS', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowStorageDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +battery = IfcElectricFlowStorageDeviceTypeEnum.BATTERY +capacitor = IfcElectricFlowStorageDeviceTypeEnum.CAPACITOR +capacitorbank = IfcElectricFlowStorageDeviceTypeEnum.CAPACITORBANK +compensator = IfcElectricFlowStorageDeviceTypeEnum.COMPENSATOR +harmonicfilter = IfcElectricFlowStorageDeviceTypeEnum.HARMONICFILTER +inductor = IfcElectricFlowStorageDeviceTypeEnum.INDUCTOR +inductorbank = IfcElectricFlowStorageDeviceTypeEnum.INDUCTORBANK +recharger = IfcElectricFlowStorageDeviceTypeEnum.RECHARGER +ups = IfcElectricFlowStorageDeviceTypeEnum.UPS +userdefined = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowStorageDeviceTypeEnum.NOTDEFINED IfcElectricFlowTreatmentDeviceTypeEnum = enum_namespace() -electronicfilter = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'ELECTRONICFILTER', INDETERMINATE) -userdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricFlowTreatmentDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +electronicfilter = IfcElectricFlowTreatmentDeviceTypeEnum.ELECTRONICFILTER +userdefined = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED +notdefined = IfcElectricFlowTreatmentDeviceTypeEnum.NOTDEFINED IfcElectricGeneratorTypeEnum = enum_namespace() -chp = express_getattr(IfcElectricGeneratorTypeEnum, 'CHP', INDETERMINATE) -enginegenerator = express_getattr(IfcElectricGeneratorTypeEnum, 'ENGINEGENERATOR', INDETERMINATE) -standalone = express_getattr(IfcElectricGeneratorTypeEnum, 'STANDALONE', INDETERMINATE) -userdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricGeneratorTypeEnum, 'NOTDEFINED', INDETERMINATE) +chp = IfcElectricGeneratorTypeEnum.CHP +enginegenerator = IfcElectricGeneratorTypeEnum.ENGINEGENERATOR +standalone = IfcElectricGeneratorTypeEnum.STANDALONE +userdefined = IfcElectricGeneratorTypeEnum.USERDEFINED +notdefined = IfcElectricGeneratorTypeEnum.NOTDEFINED IfcElectricMotorTypeEnum = enum_namespace() -dc = express_getattr(IfcElectricMotorTypeEnum, 'DC', INDETERMINATE) -induction = express_getattr(IfcElectricMotorTypeEnum, 'INDUCTION', INDETERMINATE) -polyphase = express_getattr(IfcElectricMotorTypeEnum, 'POLYPHASE', INDETERMINATE) -reluctancesynchronous = express_getattr(IfcElectricMotorTypeEnum, 'RELUCTANCESYNCHRONOUS', INDETERMINATE) -synchronous = express_getattr(IfcElectricMotorTypeEnum, 'SYNCHRONOUS', INDETERMINATE) -userdefined = express_getattr(IfcElectricMotorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricMotorTypeEnum, 'NOTDEFINED', INDETERMINATE) +dc = IfcElectricMotorTypeEnum.DC +induction = IfcElectricMotorTypeEnum.INDUCTION +polyphase = IfcElectricMotorTypeEnum.POLYPHASE +reluctancesynchronous = IfcElectricMotorTypeEnum.RELUCTANCESYNCHRONOUS +synchronous = IfcElectricMotorTypeEnum.SYNCHRONOUS +userdefined = IfcElectricMotorTypeEnum.USERDEFINED +notdefined = IfcElectricMotorTypeEnum.NOTDEFINED IfcElectricTimeControlTypeEnum = enum_namespace() -relay = express_getattr(IfcElectricTimeControlTypeEnum, 'RELAY', INDETERMINATE) -timeclock = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMECLOCK', INDETERMINATE) -timedelay = express_getattr(IfcElectricTimeControlTypeEnum, 'TIMEDELAY', INDETERMINATE) -userdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElectricTimeControlTypeEnum, 'NOTDEFINED', INDETERMINATE) +relay = IfcElectricTimeControlTypeEnum.RELAY +timeclock = IfcElectricTimeControlTypeEnum.TIMECLOCK +timedelay = IfcElectricTimeControlTypeEnum.TIMEDELAY +userdefined = IfcElectricTimeControlTypeEnum.USERDEFINED +notdefined = IfcElectricTimeControlTypeEnum.NOTDEFINED IfcElementAssemblyTypeEnum = enum_namespace() -abutment = express_getattr(IfcElementAssemblyTypeEnum, 'ABUTMENT', INDETERMINATE) -accessory_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'ACCESSORY_ASSEMBLY', INDETERMINATE) -arch = express_getattr(IfcElementAssemblyTypeEnum, 'ARCH', INDETERMINATE) -beam_grid = express_getattr(IfcElementAssemblyTypeEnum, 'BEAM_GRID', INDETERMINATE) -braced_frame = express_getattr(IfcElementAssemblyTypeEnum, 'BRACED_FRAME', INDETERMINATE) -cross_bracing = express_getattr(IfcElementAssemblyTypeEnum, 'CROSS_BRACING', INDETERMINATE) -deck = express_getattr(IfcElementAssemblyTypeEnum, 'DECK', INDETERMINATE) -dilatationpanel = express_getattr(IfcElementAssemblyTypeEnum, 'DILATATIONPANEL', INDETERMINATE) -entranceworks = express_getattr(IfcElementAssemblyTypeEnum, 'ENTRANCEWORKS', INDETERMINATE) -girder = express_getattr(IfcElementAssemblyTypeEnum, 'GIRDER', INDETERMINATE) -grid = express_getattr(IfcElementAssemblyTypeEnum, 'GRID', INDETERMINATE) -mast = express_getattr(IfcElementAssemblyTypeEnum, 'MAST', INDETERMINATE) -pier = express_getattr(IfcElementAssemblyTypeEnum, 'PIER', INDETERMINATE) -pylon = express_getattr(IfcElementAssemblyTypeEnum, 'PYLON', INDETERMINATE) -rail_mechanical_equipment_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY', INDETERMINATE) -reinforcement_unit = express_getattr(IfcElementAssemblyTypeEnum, 'REINFORCEMENT_UNIT', INDETERMINATE) -rigid_frame = express_getattr(IfcElementAssemblyTypeEnum, 'RIGID_FRAME', INDETERMINATE) -shelter = express_getattr(IfcElementAssemblyTypeEnum, 'SHELTER', INDETERMINATE) -signalassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SIGNALASSEMBLY', INDETERMINATE) -slab_field = express_getattr(IfcElementAssemblyTypeEnum, 'SLAB_FIELD', INDETERMINATE) -sumpbuster = express_getattr(IfcElementAssemblyTypeEnum, 'SUMPBUSTER', INDETERMINATE) -supportingassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUPPORTINGASSEMBLY', INDETERMINATE) -suspensionassembly = express_getattr(IfcElementAssemblyTypeEnum, 'SUSPENSIONASSEMBLY', INDETERMINATE) -trackpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TRACKPANEL', INDETERMINATE) -traction_switching_assembly = express_getattr(IfcElementAssemblyTypeEnum, 'TRACTION_SWITCHING_ASSEMBLY', INDETERMINATE) -traffic_calming_device = express_getattr(IfcElementAssemblyTypeEnum, 'TRAFFIC_CALMING_DEVICE', INDETERMINATE) -truss = express_getattr(IfcElementAssemblyTypeEnum, 'TRUSS', INDETERMINATE) -turnoutpanel = express_getattr(IfcElementAssemblyTypeEnum, 'TURNOUTPANEL', INDETERMINATE) -userdefined = express_getattr(IfcElementAssemblyTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcElementAssemblyTypeEnum, 'NOTDEFINED', INDETERMINATE) +abutment = IfcElementAssemblyTypeEnum.ABUTMENT +accessory_assembly = IfcElementAssemblyTypeEnum.ACCESSORY_ASSEMBLY +arch = IfcElementAssemblyTypeEnum.ARCH +beam_grid = IfcElementAssemblyTypeEnum.BEAM_GRID +braced_frame = IfcElementAssemblyTypeEnum.BRACED_FRAME +cross_bracing = IfcElementAssemblyTypeEnum.CROSS_BRACING +deck = IfcElementAssemblyTypeEnum.DECK +dilatationpanel = IfcElementAssemblyTypeEnum.DILATATIONPANEL +entranceworks = IfcElementAssemblyTypeEnum.ENTRANCEWORKS +girder = IfcElementAssemblyTypeEnum.GIRDER +grid = IfcElementAssemblyTypeEnum.GRID +mast = IfcElementAssemblyTypeEnum.MAST +pier = IfcElementAssemblyTypeEnum.PIER +pylon = IfcElementAssemblyTypeEnum.PYLON +rail_mechanical_equipment_assembly = IfcElementAssemblyTypeEnum.RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY +reinforcement_unit = IfcElementAssemblyTypeEnum.REINFORCEMENT_UNIT +rigid_frame = IfcElementAssemblyTypeEnum.RIGID_FRAME +shelter = IfcElementAssemblyTypeEnum.SHELTER +signalassembly = IfcElementAssemblyTypeEnum.SIGNALASSEMBLY +slab_field = IfcElementAssemblyTypeEnum.SLAB_FIELD +sumpbuster = IfcElementAssemblyTypeEnum.SUMPBUSTER +supportingassembly = IfcElementAssemblyTypeEnum.SUPPORTINGASSEMBLY +suspensionassembly = IfcElementAssemblyTypeEnum.SUSPENSIONASSEMBLY +trackpanel = IfcElementAssemblyTypeEnum.TRACKPANEL +traction_switching_assembly = IfcElementAssemblyTypeEnum.TRACTION_SWITCHING_ASSEMBLY +traffic_calming_device = IfcElementAssemblyTypeEnum.TRAFFIC_CALMING_DEVICE +truss = IfcElementAssemblyTypeEnum.TRUSS +turnoutpanel = IfcElementAssemblyTypeEnum.TURNOUTPANEL +userdefined = IfcElementAssemblyTypeEnum.USERDEFINED +notdefined = IfcElementAssemblyTypeEnum.NOTDEFINED IfcElementCompositionEnum = enum_namespace() -complex = express_getattr(IfcElementCompositionEnum, 'COMPLEX', INDETERMINATE) -element = express_getattr(IfcElementCompositionEnum, 'ELEMENT', INDETERMINATE) -partial = express_getattr(IfcElementCompositionEnum, 'PARTIAL', INDETERMINATE) +complex = IfcElementCompositionEnum.COMPLEX +element = IfcElementCompositionEnum.ELEMENT +partial = IfcElementCompositionEnum.PARTIAL IfcEngineTypeEnum = enum_namespace() -externalcombustion = express_getattr(IfcEngineTypeEnum, 'EXTERNALCOMBUSTION', INDETERMINATE) -internalcombustion = express_getattr(IfcEngineTypeEnum, 'INTERNALCOMBUSTION', INDETERMINATE) -userdefined = express_getattr(IfcEngineTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEngineTypeEnum, 'NOTDEFINED', INDETERMINATE) +externalcombustion = IfcEngineTypeEnum.EXTERNALCOMBUSTION +internalcombustion = IfcEngineTypeEnum.INTERNALCOMBUSTION +userdefined = IfcEngineTypeEnum.USERDEFINED +notdefined = IfcEngineTypeEnum.NOTDEFINED IfcEvaporativeCoolerTypeEnum = enum_namespace() -directevaporativeairwasher = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEAIRWASHER', INDETERMINATE) -directevaporativepackagedrotaryaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER', INDETERMINATE) -directevaporativerandommediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER', INDETERMINATE) -directevaporativerigidmediaaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER', INDETERMINATE) -directevaporativeslingerspackagedaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER', INDETERMINATE) -indirectdirectcombination = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTDIRECTCOMBINATION', INDETERMINATE) -indirectevaporativecoolingtowerorcoilcooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER', INDETERMINATE) -indirectevaporativepackageaircooler = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEPACKAGEAIRCOOLER', INDETERMINATE) -indirectevaporativewetcoil = express_getattr(IfcEvaporativeCoolerTypeEnum, 'INDIRECTEVAPORATIVEWETCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporativeCoolerTypeEnum, 'NOTDEFINED', INDETERMINATE) +directevaporativeairwasher = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEAIRWASHER +directevaporativepackagedrotaryaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER +directevaporativerandommediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER +directevaporativerigidmediaaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER +directevaporativeslingerspackagedaircooler = IfcEvaporativeCoolerTypeEnum.DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER +indirectdirectcombination = IfcEvaporativeCoolerTypeEnum.INDIRECTDIRECTCOMBINATION +indirectevaporativecoolingtowerorcoilcooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER +indirectevaporativepackageaircooler = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEPACKAGEAIRCOOLER +indirectevaporativewetcoil = IfcEvaporativeCoolerTypeEnum.INDIRECTEVAPORATIVEWETCOIL +userdefined = IfcEvaporativeCoolerTypeEnum.USERDEFINED +notdefined = IfcEvaporativeCoolerTypeEnum.NOTDEFINED IfcEvaporatorTypeEnum = enum_namespace() -directexpansion = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSION', INDETERMINATE) -directexpansionbrazedplate = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONBRAZEDPLATE', INDETERMINATE) -directexpansionshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONSHELLANDTUBE', INDETERMINATE) -directexpansiontubeintube = express_getattr(IfcEvaporatorTypeEnum, 'DIRECTEXPANSIONTUBEINTUBE', INDETERMINATE) -floodedshellandtube = express_getattr(IfcEvaporatorTypeEnum, 'FLOODEDSHELLANDTUBE', INDETERMINATE) -shellandcoil = express_getattr(IfcEvaporatorTypeEnum, 'SHELLANDCOIL', INDETERMINATE) -userdefined = express_getattr(IfcEvaporatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEvaporatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +directexpansion = IfcEvaporatorTypeEnum.DIRECTEXPANSION +directexpansionbrazedplate = IfcEvaporatorTypeEnum.DIRECTEXPANSIONBRAZEDPLATE +directexpansionshellandtube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONSHELLANDTUBE +directexpansiontubeintube = IfcEvaporatorTypeEnum.DIRECTEXPANSIONTUBEINTUBE +floodedshellandtube = IfcEvaporatorTypeEnum.FLOODEDSHELLANDTUBE +shellandcoil = IfcEvaporatorTypeEnum.SHELLANDCOIL +userdefined = IfcEvaporatorTypeEnum.USERDEFINED +notdefined = IfcEvaporatorTypeEnum.NOTDEFINED IfcEventTriggerTypeEnum = enum_namespace() -eventcomplex = express_getattr(IfcEventTriggerTypeEnum, 'EVENTCOMPLEX', INDETERMINATE) -eventmessage = express_getattr(IfcEventTriggerTypeEnum, 'EVENTMESSAGE', INDETERMINATE) -eventrule = express_getattr(IfcEventTriggerTypeEnum, 'EVENTRULE', INDETERMINATE) -eventtime = express_getattr(IfcEventTriggerTypeEnum, 'EVENTTIME', INDETERMINATE) -userdefined = express_getattr(IfcEventTriggerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTriggerTypeEnum, 'NOTDEFINED', INDETERMINATE) +eventcomplex = IfcEventTriggerTypeEnum.EVENTCOMPLEX +eventmessage = IfcEventTriggerTypeEnum.EVENTMESSAGE +eventrule = IfcEventTriggerTypeEnum.EVENTRULE +eventtime = IfcEventTriggerTypeEnum.EVENTTIME +userdefined = IfcEventTriggerTypeEnum.USERDEFINED +notdefined = IfcEventTriggerTypeEnum.NOTDEFINED IfcEventTypeEnum = enum_namespace() -endevent = express_getattr(IfcEventTypeEnum, 'ENDEVENT', INDETERMINATE) -intermediateevent = express_getattr(IfcEventTypeEnum, 'INTERMEDIATEEVENT', INDETERMINATE) -startevent = express_getattr(IfcEventTypeEnum, 'STARTEVENT', INDETERMINATE) -userdefined = express_getattr(IfcEventTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcEventTypeEnum, 'NOTDEFINED', INDETERMINATE) +endevent = IfcEventTypeEnum.ENDEVENT +intermediateevent = IfcEventTypeEnum.INTERMEDIATEEVENT +startevent = IfcEventTypeEnum.STARTEVENT +userdefined = IfcEventTypeEnum.USERDEFINED +notdefined = IfcEventTypeEnum.NOTDEFINED IfcExternalSpatialElementTypeEnum = enum_namespace() -external = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_fire = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_FIRE', INDETERMINATE) -external_water = express_getattr(IfcExternalSpatialElementTypeEnum, 'EXTERNAL_WATER', INDETERMINATE) -userdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcExternalSpatialElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcExternalSpatialElementTypeEnum.EXTERNAL +external_earth = IfcExternalSpatialElementTypeEnum.EXTERNAL_EARTH +external_fire = IfcExternalSpatialElementTypeEnum.EXTERNAL_FIRE +external_water = IfcExternalSpatialElementTypeEnum.EXTERNAL_WATER +userdefined = IfcExternalSpatialElementTypeEnum.USERDEFINED +notdefined = IfcExternalSpatialElementTypeEnum.NOTDEFINED IfcFacilityPartCommonTypeEnum = enum_namespace() -aboveground = express_getattr(IfcFacilityPartCommonTypeEnum, 'ABOVEGROUND', INDETERMINATE) -belowground = express_getattr(IfcFacilityPartCommonTypeEnum, 'BELOWGROUND', INDETERMINATE) -junction = express_getattr(IfcFacilityPartCommonTypeEnum, 'JUNCTION', INDETERMINATE) -levelcrossing = express_getattr(IfcFacilityPartCommonTypeEnum, 'LEVELCROSSING', INDETERMINATE) -segment = express_getattr(IfcFacilityPartCommonTypeEnum, 'SEGMENT', INDETERMINATE) -substructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUBSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcFacilityPartCommonTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -terminal = express_getattr(IfcFacilityPartCommonTypeEnum, 'TERMINAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityPartCommonTypeEnum, 'NOTDEFINED', INDETERMINATE) +aboveground = IfcFacilityPartCommonTypeEnum.ABOVEGROUND +belowground = IfcFacilityPartCommonTypeEnum.BELOWGROUND +junction = IfcFacilityPartCommonTypeEnum.JUNCTION +levelcrossing = IfcFacilityPartCommonTypeEnum.LEVELCROSSING +segment = IfcFacilityPartCommonTypeEnum.SEGMENT +substructure = IfcFacilityPartCommonTypeEnum.SUBSTRUCTURE +superstructure = IfcFacilityPartCommonTypeEnum.SUPERSTRUCTURE +terminal = IfcFacilityPartCommonTypeEnum.TERMINAL +userdefined = IfcFacilityPartCommonTypeEnum.USERDEFINED +notdefined = IfcFacilityPartCommonTypeEnum.NOTDEFINED IfcFacilityUsageEnum = enum_namespace() -lateral = express_getattr(IfcFacilityUsageEnum, 'LATERAL', INDETERMINATE) -longitudinal = express_getattr(IfcFacilityUsageEnum, 'LONGITUDINAL', INDETERMINATE) -region = express_getattr(IfcFacilityUsageEnum, 'REGION', INDETERMINATE) -vertical = express_getattr(IfcFacilityUsageEnum, 'VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcFacilityUsageEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFacilityUsageEnum, 'NOTDEFINED', INDETERMINATE) +lateral = IfcFacilityUsageEnum.LATERAL +longitudinal = IfcFacilityUsageEnum.LONGITUDINAL +region = IfcFacilityUsageEnum.REGION +vertical = IfcFacilityUsageEnum.VERTICAL +userdefined = IfcFacilityUsageEnum.USERDEFINED +notdefined = IfcFacilityUsageEnum.NOTDEFINED IfcFanTypeEnum = enum_namespace() -centrifugalairfoil = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALAIRFOIL', INDETERMINATE) -centrifugalbackwardinclinedcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALBACKWARDINCLINEDCURVED', INDETERMINATE) -centrifugalforwardcurved = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALFORWARDCURVED', INDETERMINATE) -centrifugalradial = express_getattr(IfcFanTypeEnum, 'CENTRIFUGALRADIAL', INDETERMINATE) -propelloraxial = express_getattr(IfcFanTypeEnum, 'PROPELLORAXIAL', INDETERMINATE) -tubeaxial = express_getattr(IfcFanTypeEnum, 'TUBEAXIAL', INDETERMINATE) -vaneaxial = express_getattr(IfcFanTypeEnum, 'VANEAXIAL', INDETERMINATE) -userdefined = express_getattr(IfcFanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFanTypeEnum, 'NOTDEFINED', INDETERMINATE) +centrifugalairfoil = IfcFanTypeEnum.CENTRIFUGALAIRFOIL +centrifugalbackwardinclinedcurved = IfcFanTypeEnum.CENTRIFUGALBACKWARDINCLINEDCURVED +centrifugalforwardcurved = IfcFanTypeEnum.CENTRIFUGALFORWARDCURVED +centrifugalradial = IfcFanTypeEnum.CENTRIFUGALRADIAL +propelloraxial = IfcFanTypeEnum.PROPELLORAXIAL +tubeaxial = IfcFanTypeEnum.TUBEAXIAL +vaneaxial = IfcFanTypeEnum.VANEAXIAL +userdefined = IfcFanTypeEnum.USERDEFINED +notdefined = IfcFanTypeEnum.NOTDEFINED IfcFastenerTypeEnum = enum_namespace() -glue = express_getattr(IfcFastenerTypeEnum, 'GLUE', INDETERMINATE) -mortar = express_getattr(IfcFastenerTypeEnum, 'MORTAR', INDETERMINATE) -weld = express_getattr(IfcFastenerTypeEnum, 'WELD', INDETERMINATE) -userdefined = express_getattr(IfcFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +glue = IfcFastenerTypeEnum.GLUE +mortar = IfcFastenerTypeEnum.MORTAR +weld = IfcFastenerTypeEnum.WELD +userdefined = IfcFastenerTypeEnum.USERDEFINED +notdefined = IfcFastenerTypeEnum.NOTDEFINED IfcFilterTypeEnum = enum_namespace() -airparticlefilter = express_getattr(IfcFilterTypeEnum, 'AIRPARTICLEFILTER', INDETERMINATE) -compressedairfilter = express_getattr(IfcFilterTypeEnum, 'COMPRESSEDAIRFILTER', INDETERMINATE) -odorfilter = express_getattr(IfcFilterTypeEnum, 'ODORFILTER', INDETERMINATE) -oilfilter = express_getattr(IfcFilterTypeEnum, 'OILFILTER', INDETERMINATE) -strainer = express_getattr(IfcFilterTypeEnum, 'STRAINER', INDETERMINATE) -waterfilter = express_getattr(IfcFilterTypeEnum, 'WATERFILTER', INDETERMINATE) -userdefined = express_getattr(IfcFilterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFilterTypeEnum, 'NOTDEFINED', INDETERMINATE) +airparticlefilter = IfcFilterTypeEnum.AIRPARTICLEFILTER +compressedairfilter = IfcFilterTypeEnum.COMPRESSEDAIRFILTER +odorfilter = IfcFilterTypeEnum.ODORFILTER +oilfilter = IfcFilterTypeEnum.OILFILTER +strainer = IfcFilterTypeEnum.STRAINER +waterfilter = IfcFilterTypeEnum.WATERFILTER +userdefined = IfcFilterTypeEnum.USERDEFINED +notdefined = IfcFilterTypeEnum.NOTDEFINED IfcFireSuppressionTerminalTypeEnum = enum_namespace() -breechinginlet = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'BREECHINGINLET', INDETERMINATE) -firehydrant = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREHYDRANT', INDETERMINATE) -firemonitor = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'FIREMONITOR', INDETERMINATE) -hosereel = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -sprinkler = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLER', INDETERMINATE) -sprinklerdeflector = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'SPRINKLERDEFLECTOR', INDETERMINATE) -userdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFireSuppressionTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +breechinginlet = IfcFireSuppressionTerminalTypeEnum.BREECHINGINLET +firehydrant = IfcFireSuppressionTerminalTypeEnum.FIREHYDRANT +firemonitor = IfcFireSuppressionTerminalTypeEnum.FIREMONITOR +hosereel = IfcFireSuppressionTerminalTypeEnum.HOSEREEL +sprinkler = IfcFireSuppressionTerminalTypeEnum.SPRINKLER +sprinklerdeflector = IfcFireSuppressionTerminalTypeEnum.SPRINKLERDEFLECTOR +userdefined = IfcFireSuppressionTerminalTypeEnum.USERDEFINED +notdefined = IfcFireSuppressionTerminalTypeEnum.NOTDEFINED IfcFlowDirectionEnum = enum_namespace() -sink = express_getattr(IfcFlowDirectionEnum, 'SINK', INDETERMINATE) -source = express_getattr(IfcFlowDirectionEnum, 'SOURCE', INDETERMINATE) -sourceandsink = express_getattr(IfcFlowDirectionEnum, 'SOURCEANDSINK', INDETERMINATE) -notdefined = express_getattr(IfcFlowDirectionEnum, 'NOTDEFINED', INDETERMINATE) +sink = IfcFlowDirectionEnum.SINK +source = IfcFlowDirectionEnum.SOURCE +sourceandsink = IfcFlowDirectionEnum.SOURCEANDSINK +notdefined = IfcFlowDirectionEnum.NOTDEFINED IfcFlowInstrumentTypeEnum = enum_namespace() -ammeter = express_getattr(IfcFlowInstrumentTypeEnum, 'AMMETER', INDETERMINATE) -combined = express_getattr(IfcFlowInstrumentTypeEnum, 'COMBINED', INDETERMINATE) -frequencymeter = express_getattr(IfcFlowInstrumentTypeEnum, 'FREQUENCYMETER', INDETERMINATE) -phaseanglemeter = express_getattr(IfcFlowInstrumentTypeEnum, 'PHASEANGLEMETER', INDETERMINATE) -powerfactormeter = express_getattr(IfcFlowInstrumentTypeEnum, 'POWERFACTORMETER', INDETERMINATE) -pressuregauge = express_getattr(IfcFlowInstrumentTypeEnum, 'PRESSUREGAUGE', INDETERMINATE) -thermometer = express_getattr(IfcFlowInstrumentTypeEnum, 'THERMOMETER', INDETERMINATE) -voltmeter = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER', INDETERMINATE) -voltmeter_peak = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_PEAK', INDETERMINATE) -voltmeter_rms = express_getattr(IfcFlowInstrumentTypeEnum, 'VOLTMETER_RMS', INDETERMINATE) -userdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowInstrumentTypeEnum, 'NOTDEFINED', INDETERMINATE) +ammeter = IfcFlowInstrumentTypeEnum.AMMETER +combined = IfcFlowInstrumentTypeEnum.COMBINED +frequencymeter = IfcFlowInstrumentTypeEnum.FREQUENCYMETER +phaseanglemeter = IfcFlowInstrumentTypeEnum.PHASEANGLEMETER +powerfactormeter = IfcFlowInstrumentTypeEnum.POWERFACTORMETER +pressuregauge = IfcFlowInstrumentTypeEnum.PRESSUREGAUGE +thermometer = IfcFlowInstrumentTypeEnum.THERMOMETER +voltmeter = IfcFlowInstrumentTypeEnum.VOLTMETER +voltmeter_peak = IfcFlowInstrumentTypeEnum.VOLTMETER_PEAK +voltmeter_rms = IfcFlowInstrumentTypeEnum.VOLTMETER_RMS +userdefined = IfcFlowInstrumentTypeEnum.USERDEFINED +notdefined = IfcFlowInstrumentTypeEnum.NOTDEFINED IfcFlowMeterTypeEnum = enum_namespace() -energymeter = express_getattr(IfcFlowMeterTypeEnum, 'ENERGYMETER', INDETERMINATE) -gasmeter = express_getattr(IfcFlowMeterTypeEnum, 'GASMETER', INDETERMINATE) -oilmeter = express_getattr(IfcFlowMeterTypeEnum, 'OILMETER', INDETERMINATE) -watermeter = express_getattr(IfcFlowMeterTypeEnum, 'WATERMETER', INDETERMINATE) -userdefined = express_getattr(IfcFlowMeterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFlowMeterTypeEnum, 'NOTDEFINED', INDETERMINATE) +energymeter = IfcFlowMeterTypeEnum.ENERGYMETER +gasmeter = IfcFlowMeterTypeEnum.GASMETER +oilmeter = IfcFlowMeterTypeEnum.OILMETER +watermeter = IfcFlowMeterTypeEnum.WATERMETER +userdefined = IfcFlowMeterTypeEnum.USERDEFINED +notdefined = IfcFlowMeterTypeEnum.NOTDEFINED IfcFootingTypeEnum = enum_namespace() -caisson_foundation = express_getattr(IfcFootingTypeEnum, 'CAISSON_FOUNDATION', INDETERMINATE) -footing_beam = express_getattr(IfcFootingTypeEnum, 'FOOTING_BEAM', INDETERMINATE) -pad_footing = express_getattr(IfcFootingTypeEnum, 'PAD_FOOTING', INDETERMINATE) -pile_cap = express_getattr(IfcFootingTypeEnum, 'PILE_CAP', INDETERMINATE) -strip_footing = express_getattr(IfcFootingTypeEnum, 'STRIP_FOOTING', INDETERMINATE) -userdefined = express_getattr(IfcFootingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFootingTypeEnum, 'NOTDEFINED', INDETERMINATE) +caisson_foundation = IfcFootingTypeEnum.CAISSON_FOUNDATION +footing_beam = IfcFootingTypeEnum.FOOTING_BEAM +pad_footing = IfcFootingTypeEnum.PAD_FOOTING +pile_cap = IfcFootingTypeEnum.PILE_CAP +strip_footing = IfcFootingTypeEnum.STRIP_FOOTING +userdefined = IfcFootingTypeEnum.USERDEFINED +notdefined = IfcFootingTypeEnum.NOTDEFINED IfcFurnitureTypeEnum = enum_namespace() -bed = express_getattr(IfcFurnitureTypeEnum, 'BED', INDETERMINATE) -chair = express_getattr(IfcFurnitureTypeEnum, 'CHAIR', INDETERMINATE) -desk = express_getattr(IfcFurnitureTypeEnum, 'DESK', INDETERMINATE) -filecabinet = express_getattr(IfcFurnitureTypeEnum, 'FILECABINET', INDETERMINATE) -shelf = express_getattr(IfcFurnitureTypeEnum, 'SHELF', INDETERMINATE) -sofa = express_getattr(IfcFurnitureTypeEnum, 'SOFA', INDETERMINATE) -table = express_getattr(IfcFurnitureTypeEnum, 'TABLE', INDETERMINATE) -technicalcabinet = express_getattr(IfcFurnitureTypeEnum, 'TECHNICALCABINET', INDETERMINATE) -userdefined = express_getattr(IfcFurnitureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcFurnitureTypeEnum, 'NOTDEFINED', INDETERMINATE) +bed = IfcFurnitureTypeEnum.BED +chair = IfcFurnitureTypeEnum.CHAIR +desk = IfcFurnitureTypeEnum.DESK +filecabinet = IfcFurnitureTypeEnum.FILECABINET +shelf = IfcFurnitureTypeEnum.SHELF +sofa = IfcFurnitureTypeEnum.SOFA +table = IfcFurnitureTypeEnum.TABLE +technicalcabinet = IfcFurnitureTypeEnum.TECHNICALCABINET +userdefined = IfcFurnitureTypeEnum.USERDEFINED +notdefined = IfcFurnitureTypeEnum.NOTDEFINED IfcGeographicElementTypeEnum = enum_namespace() -soil_boring_point = express_getattr(IfcGeographicElementTypeEnum, 'SOIL_BORING_POINT', INDETERMINATE) -terrain = express_getattr(IfcGeographicElementTypeEnum, 'TERRAIN', INDETERMINATE) -vegetation = express_getattr(IfcGeographicElementTypeEnum, 'VEGETATION', INDETERMINATE) -userdefined = express_getattr(IfcGeographicElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeographicElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +soil_boring_point = IfcGeographicElementTypeEnum.SOIL_BORING_POINT +terrain = IfcGeographicElementTypeEnum.TERRAIN +vegetation = IfcGeographicElementTypeEnum.VEGETATION +userdefined = IfcGeographicElementTypeEnum.USERDEFINED +notdefined = IfcGeographicElementTypeEnum.NOTDEFINED IfcGeometricProjectionEnum = enum_namespace() -elevation_view = express_getattr(IfcGeometricProjectionEnum, 'ELEVATION_VIEW', INDETERMINATE) -graph_view = express_getattr(IfcGeometricProjectionEnum, 'GRAPH_VIEW', INDETERMINATE) -model_view = express_getattr(IfcGeometricProjectionEnum, 'MODEL_VIEW', INDETERMINATE) -plan_view = express_getattr(IfcGeometricProjectionEnum, 'PLAN_VIEW', INDETERMINATE) -reflected_plan_view = express_getattr(IfcGeometricProjectionEnum, 'REFLECTED_PLAN_VIEW', INDETERMINATE) -section_view = express_getattr(IfcGeometricProjectionEnum, 'SECTION_VIEW', INDETERMINATE) -sketch_view = express_getattr(IfcGeometricProjectionEnum, 'SKETCH_VIEW', INDETERMINATE) -userdefined = express_getattr(IfcGeometricProjectionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeometricProjectionEnum, 'NOTDEFINED', INDETERMINATE) +elevation_view = IfcGeometricProjectionEnum.ELEVATION_VIEW +graph_view = IfcGeometricProjectionEnum.GRAPH_VIEW +model_view = IfcGeometricProjectionEnum.MODEL_VIEW +plan_view = IfcGeometricProjectionEnum.PLAN_VIEW +reflected_plan_view = IfcGeometricProjectionEnum.REFLECTED_PLAN_VIEW +section_view = IfcGeometricProjectionEnum.SECTION_VIEW +sketch_view = IfcGeometricProjectionEnum.SKETCH_VIEW +userdefined = IfcGeometricProjectionEnum.USERDEFINED +notdefined = IfcGeometricProjectionEnum.NOTDEFINED IfcGeotechnicalStratumTypeEnum = enum_namespace() -solid = express_getattr(IfcGeotechnicalStratumTypeEnum, 'SOLID', INDETERMINATE) -void = express_getattr(IfcGeotechnicalStratumTypeEnum, 'VOID', INDETERMINATE) -water = express_getattr(IfcGeotechnicalStratumTypeEnum, 'WATER', INDETERMINATE) -userdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGeotechnicalStratumTypeEnum, 'NOTDEFINED', INDETERMINATE) +solid = IfcGeotechnicalStratumTypeEnum.SOLID +void = IfcGeotechnicalStratumTypeEnum.VOID +water = IfcGeotechnicalStratumTypeEnum.WATER +userdefined = IfcGeotechnicalStratumTypeEnum.USERDEFINED +notdefined = IfcGeotechnicalStratumTypeEnum.NOTDEFINED IfcGlobalOrLocalEnum = enum_namespace() -global_coords = express_getattr(IfcGlobalOrLocalEnum, 'GLOBAL_COORDS', INDETERMINATE) -local_coords = express_getattr(IfcGlobalOrLocalEnum, 'LOCAL_COORDS', INDETERMINATE) +global_coords = IfcGlobalOrLocalEnum.GLOBAL_COORDS +local_coords = IfcGlobalOrLocalEnum.LOCAL_COORDS IfcGridTypeEnum = enum_namespace() -irregular = express_getattr(IfcGridTypeEnum, 'IRREGULAR', INDETERMINATE) -radial = express_getattr(IfcGridTypeEnum, 'RADIAL', INDETERMINATE) -rectangular = express_getattr(IfcGridTypeEnum, 'RECTANGULAR', INDETERMINATE) -triangular = express_getattr(IfcGridTypeEnum, 'TRIANGULAR', INDETERMINATE) -userdefined = express_getattr(IfcGridTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcGridTypeEnum, 'NOTDEFINED', INDETERMINATE) +irregular = IfcGridTypeEnum.IRREGULAR +radial = IfcGridTypeEnum.RADIAL +rectangular = IfcGridTypeEnum.RECTANGULAR +triangular = IfcGridTypeEnum.TRIANGULAR +userdefined = IfcGridTypeEnum.USERDEFINED +notdefined = IfcGridTypeEnum.NOTDEFINED IfcHeatExchangerTypeEnum = enum_namespace() -plate = express_getattr(IfcHeatExchangerTypeEnum, 'PLATE', INDETERMINATE) -shellandtube = express_getattr(IfcHeatExchangerTypeEnum, 'SHELLANDTUBE', INDETERMINATE) -turnoutheating = express_getattr(IfcHeatExchangerTypeEnum, 'TURNOUTHEATING', INDETERMINATE) -userdefined = express_getattr(IfcHeatExchangerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHeatExchangerTypeEnum, 'NOTDEFINED', INDETERMINATE) +plate = IfcHeatExchangerTypeEnum.PLATE +shellandtube = IfcHeatExchangerTypeEnum.SHELLANDTUBE +turnoutheating = IfcHeatExchangerTypeEnum.TURNOUTHEATING +userdefined = IfcHeatExchangerTypeEnum.USERDEFINED +notdefined = IfcHeatExchangerTypeEnum.NOTDEFINED IfcHumidifierTypeEnum = enum_namespace() -adiabaticairwasher = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICAIRWASHER', INDETERMINATE) -adiabaticatomizing = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICATOMIZING', INDETERMINATE) -adiabaticcompressedairnozzle = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICCOMPRESSEDAIRNOZZLE', INDETERMINATE) -adiabaticpan = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICPAN', INDETERMINATE) -adiabaticrigidmedia = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICRIGIDMEDIA', INDETERMINATE) -adiabaticultrasonic = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICULTRASONIC', INDETERMINATE) -adiabaticwettedelement = express_getattr(IfcHumidifierTypeEnum, 'ADIABATICWETTEDELEMENT', INDETERMINATE) -assistedbutane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDBUTANE', INDETERMINATE) -assistedelectric = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDELECTRIC', INDETERMINATE) -assistednaturalgas = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDNATURALGAS', INDETERMINATE) -assistedpropane = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDPROPANE', INDETERMINATE) -assistedsteam = express_getattr(IfcHumidifierTypeEnum, 'ASSISTEDSTEAM', INDETERMINATE) -steaminjection = express_getattr(IfcHumidifierTypeEnum, 'STEAMINJECTION', INDETERMINATE) -userdefined = express_getattr(IfcHumidifierTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcHumidifierTypeEnum, 'NOTDEFINED', INDETERMINATE) +adiabaticairwasher = IfcHumidifierTypeEnum.ADIABATICAIRWASHER +adiabaticatomizing = IfcHumidifierTypeEnum.ADIABATICATOMIZING +adiabaticcompressedairnozzle = IfcHumidifierTypeEnum.ADIABATICCOMPRESSEDAIRNOZZLE +adiabaticpan = IfcHumidifierTypeEnum.ADIABATICPAN +adiabaticrigidmedia = IfcHumidifierTypeEnum.ADIABATICRIGIDMEDIA +adiabaticultrasonic = IfcHumidifierTypeEnum.ADIABATICULTRASONIC +adiabaticwettedelement = IfcHumidifierTypeEnum.ADIABATICWETTEDELEMENT +assistedbutane = IfcHumidifierTypeEnum.ASSISTEDBUTANE +assistedelectric = IfcHumidifierTypeEnum.ASSISTEDELECTRIC +assistednaturalgas = IfcHumidifierTypeEnum.ASSISTEDNATURALGAS +assistedpropane = IfcHumidifierTypeEnum.ASSISTEDPROPANE +assistedsteam = IfcHumidifierTypeEnum.ASSISTEDSTEAM +steaminjection = IfcHumidifierTypeEnum.STEAMINJECTION +userdefined = IfcHumidifierTypeEnum.USERDEFINED +notdefined = IfcHumidifierTypeEnum.NOTDEFINED IfcImpactProtectionDeviceTypeEnum = enum_namespace() -bumper = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'BUMPER', INDETERMINATE) -crashcushion = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'CRASHCUSHION', INDETERMINATE) -dampingsystem = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'DAMPINGSYSTEM', INDETERMINATE) -fender = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'FENDER', INDETERMINATE) -userdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcImpactProtectionDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bumper = IfcImpactProtectionDeviceTypeEnum.BUMPER +crashcushion = IfcImpactProtectionDeviceTypeEnum.CRASHCUSHION +dampingsystem = IfcImpactProtectionDeviceTypeEnum.DAMPINGSYSTEM +fender = IfcImpactProtectionDeviceTypeEnum.FENDER +userdefined = IfcImpactProtectionDeviceTypeEnum.USERDEFINED +notdefined = IfcImpactProtectionDeviceTypeEnum.NOTDEFINED IfcInterceptorTypeEnum = enum_namespace() -cyclonic = express_getattr(IfcInterceptorTypeEnum, 'CYCLONIC', INDETERMINATE) -grease = express_getattr(IfcInterceptorTypeEnum, 'GREASE', INDETERMINATE) -oil = express_getattr(IfcInterceptorTypeEnum, 'OIL', INDETERMINATE) -petrol = express_getattr(IfcInterceptorTypeEnum, 'PETROL', INDETERMINATE) -userdefined = express_getattr(IfcInterceptorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInterceptorTypeEnum, 'NOTDEFINED', INDETERMINATE) +cyclonic = IfcInterceptorTypeEnum.CYCLONIC +grease = IfcInterceptorTypeEnum.GREASE +oil = IfcInterceptorTypeEnum.OIL +petrol = IfcInterceptorTypeEnum.PETROL +userdefined = IfcInterceptorTypeEnum.USERDEFINED +notdefined = IfcInterceptorTypeEnum.NOTDEFINED IfcInternalOrExternalEnum = enum_namespace() -external = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL', INDETERMINATE) -external_earth = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_EARTH', INDETERMINATE) -external_fire = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_FIRE', INDETERMINATE) -external_water = express_getattr(IfcInternalOrExternalEnum, 'EXTERNAL_WATER', INDETERMINATE) -internal = express_getattr(IfcInternalOrExternalEnum, 'INTERNAL', INDETERMINATE) -notdefined = express_getattr(IfcInternalOrExternalEnum, 'NOTDEFINED', INDETERMINATE) +external = IfcInternalOrExternalEnum.EXTERNAL +external_earth = IfcInternalOrExternalEnum.EXTERNAL_EARTH +external_fire = IfcInternalOrExternalEnum.EXTERNAL_FIRE +external_water = IfcInternalOrExternalEnum.EXTERNAL_WATER +internal = IfcInternalOrExternalEnum.INTERNAL +notdefined = IfcInternalOrExternalEnum.NOTDEFINED IfcInventoryTypeEnum = enum_namespace() -assetinventory = express_getattr(IfcInventoryTypeEnum, 'ASSETINVENTORY', INDETERMINATE) -furnitureinventory = express_getattr(IfcInventoryTypeEnum, 'FURNITUREINVENTORY', INDETERMINATE) -spaceinventory = express_getattr(IfcInventoryTypeEnum, 'SPACEINVENTORY', INDETERMINATE) -userdefined = express_getattr(IfcInventoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcInventoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +assetinventory = IfcInventoryTypeEnum.ASSETINVENTORY +furnitureinventory = IfcInventoryTypeEnum.FURNITUREINVENTORY +spaceinventory = IfcInventoryTypeEnum.SPACEINVENTORY +userdefined = IfcInventoryTypeEnum.USERDEFINED +notdefined = IfcInventoryTypeEnum.NOTDEFINED IfcJunctionBoxTypeEnum = enum_namespace() -data = express_getattr(IfcJunctionBoxTypeEnum, 'DATA', INDETERMINATE) -power = express_getattr(IfcJunctionBoxTypeEnum, 'POWER', INDETERMINATE) -userdefined = express_getattr(IfcJunctionBoxTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcJunctionBoxTypeEnum, 'NOTDEFINED', INDETERMINATE) +data = IfcJunctionBoxTypeEnum.DATA +power = IfcJunctionBoxTypeEnum.POWER +userdefined = IfcJunctionBoxTypeEnum.USERDEFINED +notdefined = IfcJunctionBoxTypeEnum.NOTDEFINED IfcKerbTypeEnum = enum_namespace() -userdefined = express_getattr(IfcKerbTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcKerbTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcKerbTypeEnum.USERDEFINED +notdefined = IfcKerbTypeEnum.NOTDEFINED IfcKnotType = enum_namespace() -piecewise_bezier_knots = express_getattr(IfcKnotType, 'PIECEWISE_BEZIER_KNOTS', INDETERMINATE) -quasi_uniform_knots = express_getattr(IfcKnotType, 'QUASI_UNIFORM_KNOTS', INDETERMINATE) -uniform_knots = express_getattr(IfcKnotType, 'UNIFORM_KNOTS', INDETERMINATE) -unspecified = express_getattr(IfcKnotType, 'UNSPECIFIED', INDETERMINATE) +piecewise_bezier_knots = IfcKnotType.PIECEWISE_BEZIER_KNOTS +quasi_uniform_knots = IfcKnotType.QUASI_UNIFORM_KNOTS +uniform_knots = IfcKnotType.UNIFORM_KNOTS +unspecified = IfcKnotType.UNSPECIFIED IfcLaborResourceTypeEnum = enum_namespace() -administration = express_getattr(IfcLaborResourceTypeEnum, 'ADMINISTRATION', INDETERMINATE) -carpentry = express_getattr(IfcLaborResourceTypeEnum, 'CARPENTRY', INDETERMINATE) -cleaning = express_getattr(IfcLaborResourceTypeEnum, 'CLEANING', INDETERMINATE) -concrete = express_getattr(IfcLaborResourceTypeEnum, 'CONCRETE', INDETERMINATE) -drywall = express_getattr(IfcLaborResourceTypeEnum, 'DRYWALL', INDETERMINATE) -electric = express_getattr(IfcLaborResourceTypeEnum, 'ELECTRIC', INDETERMINATE) -finishing = express_getattr(IfcLaborResourceTypeEnum, 'FINISHING', INDETERMINATE) -flooring = express_getattr(IfcLaborResourceTypeEnum, 'FLOORING', INDETERMINATE) -general = express_getattr(IfcLaborResourceTypeEnum, 'GENERAL', INDETERMINATE) -hvac = express_getattr(IfcLaborResourceTypeEnum, 'HVAC', INDETERMINATE) -landscaping = express_getattr(IfcLaborResourceTypeEnum, 'LANDSCAPING', INDETERMINATE) -masonry = express_getattr(IfcLaborResourceTypeEnum, 'MASONRY', INDETERMINATE) -painting = express_getattr(IfcLaborResourceTypeEnum, 'PAINTING', INDETERMINATE) -paving = express_getattr(IfcLaborResourceTypeEnum, 'PAVING', INDETERMINATE) -plumbing = express_getattr(IfcLaborResourceTypeEnum, 'PLUMBING', INDETERMINATE) -roofing = express_getattr(IfcLaborResourceTypeEnum, 'ROOFING', INDETERMINATE) -sitegrading = express_getattr(IfcLaborResourceTypeEnum, 'SITEGRADING', INDETERMINATE) -steelwork = express_getattr(IfcLaborResourceTypeEnum, 'STEELWORK', INDETERMINATE) -surveying = express_getattr(IfcLaborResourceTypeEnum, 'SURVEYING', INDETERMINATE) -userdefined = express_getattr(IfcLaborResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLaborResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +administration = IfcLaborResourceTypeEnum.ADMINISTRATION +carpentry = IfcLaborResourceTypeEnum.CARPENTRY +cleaning = IfcLaborResourceTypeEnum.CLEANING +concrete = IfcLaborResourceTypeEnum.CONCRETE +drywall = IfcLaborResourceTypeEnum.DRYWALL +electric = IfcLaborResourceTypeEnum.ELECTRIC +finishing = IfcLaborResourceTypeEnum.FINISHING +flooring = IfcLaborResourceTypeEnum.FLOORING +general = IfcLaborResourceTypeEnum.GENERAL +hvac = IfcLaborResourceTypeEnum.HVAC +landscaping = IfcLaborResourceTypeEnum.LANDSCAPING +masonry = IfcLaborResourceTypeEnum.MASONRY +painting = IfcLaborResourceTypeEnum.PAINTING +paving = IfcLaborResourceTypeEnum.PAVING +plumbing = IfcLaborResourceTypeEnum.PLUMBING +roofing = IfcLaborResourceTypeEnum.ROOFING +sitegrading = IfcLaborResourceTypeEnum.SITEGRADING +steelwork = IfcLaborResourceTypeEnum.STEELWORK +surveying = IfcLaborResourceTypeEnum.SURVEYING +userdefined = IfcLaborResourceTypeEnum.USERDEFINED +notdefined = IfcLaborResourceTypeEnum.NOTDEFINED IfcLampTypeEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLampTypeEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLampTypeEnum, 'FLUORESCENT', INDETERMINATE) -halogen = express_getattr(IfcLampTypeEnum, 'HALOGEN', INDETERMINATE) -highpressuremercury = express_getattr(IfcLampTypeEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLampTypeEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -led = express_getattr(IfcLampTypeEnum, 'LED', INDETERMINATE) -metalhalide = express_getattr(IfcLampTypeEnum, 'METALHALIDE', INDETERMINATE) -oled = express_getattr(IfcLampTypeEnum, 'OLED', INDETERMINATE) -tungstenfilament = express_getattr(IfcLampTypeEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -userdefined = express_getattr(IfcLampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLampTypeEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLampTypeEnum.COMPACTFLUORESCENT +fluorescent = IfcLampTypeEnum.FLUORESCENT +halogen = IfcLampTypeEnum.HALOGEN +highpressuremercury = IfcLampTypeEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLampTypeEnum.HIGHPRESSURESODIUM +led = IfcLampTypeEnum.LED +metalhalide = IfcLampTypeEnum.METALHALIDE +oled = IfcLampTypeEnum.OLED +tungstenfilament = IfcLampTypeEnum.TUNGSTENFILAMENT +userdefined = IfcLampTypeEnum.USERDEFINED +notdefined = IfcLampTypeEnum.NOTDEFINED IfcLayerSetDirectionEnum = enum_namespace() -axis1 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS1', INDETERMINATE) -axis2 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS2', INDETERMINATE) -axis3 = express_getattr(IfcLayerSetDirectionEnum, 'AXIS3', INDETERMINATE) +axis1 = IfcLayerSetDirectionEnum.AXIS1 +axis2 = IfcLayerSetDirectionEnum.AXIS2 +axis3 = IfcLayerSetDirectionEnum.AXIS3 IfcLightDistributionCurveEnum = enum_namespace() -type_a = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_A', INDETERMINATE) -type_b = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_B', INDETERMINATE) -type_c = express_getattr(IfcLightDistributionCurveEnum, 'TYPE_C', INDETERMINATE) -notdefined = express_getattr(IfcLightDistributionCurveEnum, 'NOTDEFINED', INDETERMINATE) +type_a = IfcLightDistributionCurveEnum.TYPE_A +type_b = IfcLightDistributionCurveEnum.TYPE_B +type_c = IfcLightDistributionCurveEnum.TYPE_C +notdefined = IfcLightDistributionCurveEnum.NOTDEFINED IfcLightEmissionSourceEnum = enum_namespace() -compactfluorescent = express_getattr(IfcLightEmissionSourceEnum, 'COMPACTFLUORESCENT', INDETERMINATE) -fluorescent = express_getattr(IfcLightEmissionSourceEnum, 'FLUORESCENT', INDETERMINATE) -highpressuremercury = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSUREMERCURY', INDETERMINATE) -highpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'HIGHPRESSURESODIUM', INDETERMINATE) -lightemittingdiode = express_getattr(IfcLightEmissionSourceEnum, 'LIGHTEMITTINGDIODE', INDETERMINATE) -lowpressuresodium = express_getattr(IfcLightEmissionSourceEnum, 'LOWPRESSURESODIUM', INDETERMINATE) -lowvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'LOWVOLTAGEHALOGEN', INDETERMINATE) -mainvoltagehalogen = express_getattr(IfcLightEmissionSourceEnum, 'MAINVOLTAGEHALOGEN', INDETERMINATE) -metalhalide = express_getattr(IfcLightEmissionSourceEnum, 'METALHALIDE', INDETERMINATE) -tungstenfilament = express_getattr(IfcLightEmissionSourceEnum, 'TUNGSTENFILAMENT', INDETERMINATE) -notdefined = express_getattr(IfcLightEmissionSourceEnum, 'NOTDEFINED', INDETERMINATE) +compactfluorescent = IfcLightEmissionSourceEnum.COMPACTFLUORESCENT +fluorescent = IfcLightEmissionSourceEnum.FLUORESCENT +highpressuremercury = IfcLightEmissionSourceEnum.HIGHPRESSUREMERCURY +highpressuresodium = IfcLightEmissionSourceEnum.HIGHPRESSURESODIUM +lightemittingdiode = IfcLightEmissionSourceEnum.LIGHTEMITTINGDIODE +lowpressuresodium = IfcLightEmissionSourceEnum.LOWPRESSURESODIUM +lowvoltagehalogen = IfcLightEmissionSourceEnum.LOWVOLTAGEHALOGEN +mainvoltagehalogen = IfcLightEmissionSourceEnum.MAINVOLTAGEHALOGEN +metalhalide = IfcLightEmissionSourceEnum.METALHALIDE +tungstenfilament = IfcLightEmissionSourceEnum.TUNGSTENFILAMENT +notdefined = IfcLightEmissionSourceEnum.NOTDEFINED IfcLightFixtureTypeEnum = enum_namespace() -directionsource = express_getattr(IfcLightFixtureTypeEnum, 'DIRECTIONSOURCE', INDETERMINATE) -pointsource = express_getattr(IfcLightFixtureTypeEnum, 'POINTSOURCE', INDETERMINATE) -securitylighting = express_getattr(IfcLightFixtureTypeEnum, 'SECURITYLIGHTING', INDETERMINATE) -userdefined = express_getattr(IfcLightFixtureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLightFixtureTypeEnum, 'NOTDEFINED', INDETERMINATE) +directionsource = IfcLightFixtureTypeEnum.DIRECTIONSOURCE +pointsource = IfcLightFixtureTypeEnum.POINTSOURCE +securitylighting = IfcLightFixtureTypeEnum.SECURITYLIGHTING +userdefined = IfcLightFixtureTypeEnum.USERDEFINED +notdefined = IfcLightFixtureTypeEnum.NOTDEFINED IfcLiquidTerminalTypeEnum = enum_namespace() -hosereel = express_getattr(IfcLiquidTerminalTypeEnum, 'HOSEREEL', INDETERMINATE) -loadingarm = express_getattr(IfcLiquidTerminalTypeEnum, 'LOADINGARM', INDETERMINATE) -userdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLiquidTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +hosereel = IfcLiquidTerminalTypeEnum.HOSEREEL +loadingarm = IfcLiquidTerminalTypeEnum.LOADINGARM +userdefined = IfcLiquidTerminalTypeEnum.USERDEFINED +notdefined = IfcLiquidTerminalTypeEnum.NOTDEFINED IfcLoadGroupTypeEnum = enum_namespace() -load_case = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_CASE', INDETERMINATE) -load_combination = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_COMBINATION', INDETERMINATE) -load_group = express_getattr(IfcLoadGroupTypeEnum, 'LOAD_GROUP', INDETERMINATE) -userdefined = express_getattr(IfcLoadGroupTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcLoadGroupTypeEnum, 'NOTDEFINED', INDETERMINATE) +load_case = IfcLoadGroupTypeEnum.LOAD_CASE +load_combination = IfcLoadGroupTypeEnum.LOAD_COMBINATION +load_group = IfcLoadGroupTypeEnum.LOAD_GROUP +userdefined = IfcLoadGroupTypeEnum.USERDEFINED +notdefined = IfcLoadGroupTypeEnum.NOTDEFINED IfcLogicalOperatorEnum = enum_namespace() -logicaland = express_getattr(IfcLogicalOperatorEnum, 'LOGICALAND', INDETERMINATE) -logicalnotand = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTAND', INDETERMINATE) -logicalnotor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALNOTOR', INDETERMINATE) -logicalor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALOR', INDETERMINATE) -logicalxor = express_getattr(IfcLogicalOperatorEnum, 'LOGICALXOR', INDETERMINATE) +logicaland = IfcLogicalOperatorEnum.LOGICALAND +logicalnotand = IfcLogicalOperatorEnum.LOGICALNOTAND +logicalnotor = IfcLogicalOperatorEnum.LOGICALNOTOR +logicalor = IfcLogicalOperatorEnum.LOGICALOR +logicalxor = IfcLogicalOperatorEnum.LOGICALXOR IfcMarineFacilityTypeEnum = enum_namespace() -barrierbeach = express_getattr(IfcMarineFacilityTypeEnum, 'BARRIERBEACH', INDETERMINATE) -breakwater = express_getattr(IfcMarineFacilityTypeEnum, 'BREAKWATER', INDETERMINATE) -canal = express_getattr(IfcMarineFacilityTypeEnum, 'CANAL', INDETERMINATE) -drydock = express_getattr(IfcMarineFacilityTypeEnum, 'DRYDOCK', INDETERMINATE) -floatingdock = express_getattr(IfcMarineFacilityTypeEnum, 'FLOATINGDOCK', INDETERMINATE) -hydrolift = express_getattr(IfcMarineFacilityTypeEnum, 'HYDROLIFT', INDETERMINATE) -jetty = express_getattr(IfcMarineFacilityTypeEnum, 'JETTY', INDETERMINATE) -launchrecovery = express_getattr(IfcMarineFacilityTypeEnum, 'LAUNCHRECOVERY', INDETERMINATE) -marinedefence = express_getattr(IfcMarineFacilityTypeEnum, 'MARINEDEFENCE', INDETERMINATE) -navigationalchannel = express_getattr(IfcMarineFacilityTypeEnum, 'NAVIGATIONALCHANNEL', INDETERMINATE) -port = express_getattr(IfcMarineFacilityTypeEnum, 'PORT', INDETERMINATE) -quay = express_getattr(IfcMarineFacilityTypeEnum, 'QUAY', INDETERMINATE) -revetment = express_getattr(IfcMarineFacilityTypeEnum, 'REVETMENT', INDETERMINATE) -shiplift = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLIFT', INDETERMINATE) -shiplock = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPLOCK', INDETERMINATE) -shipyard = express_getattr(IfcMarineFacilityTypeEnum, 'SHIPYARD', INDETERMINATE) -slipway = express_getattr(IfcMarineFacilityTypeEnum, 'SLIPWAY', INDETERMINATE) -waterway = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAY', INDETERMINATE) -waterwayshiplift = express_getattr(IfcMarineFacilityTypeEnum, 'WATERWAYSHIPLIFT', INDETERMINATE) -userdefined = express_getattr(IfcMarineFacilityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarineFacilityTypeEnum, 'NOTDEFINED', INDETERMINATE) +barrierbeach = IfcMarineFacilityTypeEnum.BARRIERBEACH +breakwater = IfcMarineFacilityTypeEnum.BREAKWATER +canal = IfcMarineFacilityTypeEnum.CANAL +drydock = IfcMarineFacilityTypeEnum.DRYDOCK +floatingdock = IfcMarineFacilityTypeEnum.FLOATINGDOCK +hydrolift = IfcMarineFacilityTypeEnum.HYDROLIFT +jetty = IfcMarineFacilityTypeEnum.JETTY +launchrecovery = IfcMarineFacilityTypeEnum.LAUNCHRECOVERY +marinedefence = IfcMarineFacilityTypeEnum.MARINEDEFENCE +navigationalchannel = IfcMarineFacilityTypeEnum.NAVIGATIONALCHANNEL +port = IfcMarineFacilityTypeEnum.PORT +quay = IfcMarineFacilityTypeEnum.QUAY +revetment = IfcMarineFacilityTypeEnum.REVETMENT +shiplift = IfcMarineFacilityTypeEnum.SHIPLIFT +shiplock = IfcMarineFacilityTypeEnum.SHIPLOCK +shipyard = IfcMarineFacilityTypeEnum.SHIPYARD +slipway = IfcMarineFacilityTypeEnum.SLIPWAY +waterway = IfcMarineFacilityTypeEnum.WATERWAY +waterwayshiplift = IfcMarineFacilityTypeEnum.WATERWAYSHIPLIFT +userdefined = IfcMarineFacilityTypeEnum.USERDEFINED +notdefined = IfcMarineFacilityTypeEnum.NOTDEFINED IfcMarinePartTypeEnum = enum_namespace() -abovewaterline = express_getattr(IfcMarinePartTypeEnum, 'ABOVEWATERLINE', INDETERMINATE) -anchorage = express_getattr(IfcMarinePartTypeEnum, 'ANCHORAGE', INDETERMINATE) -approachchannel = express_getattr(IfcMarinePartTypeEnum, 'APPROACHCHANNEL', INDETERMINATE) -belowwaterline = express_getattr(IfcMarinePartTypeEnum, 'BELOWWATERLINE', INDETERMINATE) -berthingstructure = express_getattr(IfcMarinePartTypeEnum, 'BERTHINGSTRUCTURE', INDETERMINATE) -chamber = express_getattr(IfcMarinePartTypeEnum, 'CHAMBER', INDETERMINATE) -cill_level = express_getattr(IfcMarinePartTypeEnum, 'CILL_LEVEL', INDETERMINATE) -copelevel = express_getattr(IfcMarinePartTypeEnum, 'COPELEVEL', INDETERMINATE) -core = express_getattr(IfcMarinePartTypeEnum, 'CORE', INDETERMINATE) -crest = express_getattr(IfcMarinePartTypeEnum, 'CREST', INDETERMINATE) -gatehead = express_getattr(IfcMarinePartTypeEnum, 'GATEHEAD', INDETERMINATE) -gudingstructure = express_getattr(IfcMarinePartTypeEnum, 'GUDINGSTRUCTURE', INDETERMINATE) -highwaterline = express_getattr(IfcMarinePartTypeEnum, 'HIGHWATERLINE', INDETERMINATE) -landfield = express_getattr(IfcMarinePartTypeEnum, 'LANDFIELD', INDETERMINATE) -leewardside = express_getattr(IfcMarinePartTypeEnum, 'LEEWARDSIDE', INDETERMINATE) -lowwaterline = express_getattr(IfcMarinePartTypeEnum, 'LOWWATERLINE', INDETERMINATE) -manufacturing = express_getattr(IfcMarinePartTypeEnum, 'MANUFACTURING', INDETERMINATE) -navigationalarea = express_getattr(IfcMarinePartTypeEnum, 'NAVIGATIONALAREA', INDETERMINATE) -protection = express_getattr(IfcMarinePartTypeEnum, 'PROTECTION', INDETERMINATE) -shiptransfer = express_getattr(IfcMarinePartTypeEnum, 'SHIPTRANSFER', INDETERMINATE) -storagearea = express_getattr(IfcMarinePartTypeEnum, 'STORAGEAREA', INDETERMINATE) -vehicleservicing = express_getattr(IfcMarinePartTypeEnum, 'VEHICLESERVICING', INDETERMINATE) -waterfield = express_getattr(IfcMarinePartTypeEnum, 'WATERFIELD', INDETERMINATE) -weatherside = express_getattr(IfcMarinePartTypeEnum, 'WEATHERSIDE', INDETERMINATE) -userdefined = express_getattr(IfcMarinePartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMarinePartTypeEnum, 'NOTDEFINED', INDETERMINATE) +abovewaterline = IfcMarinePartTypeEnum.ABOVEWATERLINE +anchorage = IfcMarinePartTypeEnum.ANCHORAGE +approachchannel = IfcMarinePartTypeEnum.APPROACHCHANNEL +belowwaterline = IfcMarinePartTypeEnum.BELOWWATERLINE +berthingstructure = IfcMarinePartTypeEnum.BERTHINGSTRUCTURE +chamber = IfcMarinePartTypeEnum.CHAMBER +cill_level = IfcMarinePartTypeEnum.CILL_LEVEL +copelevel = IfcMarinePartTypeEnum.COPELEVEL +core = IfcMarinePartTypeEnum.CORE +crest = IfcMarinePartTypeEnum.CREST +gatehead = IfcMarinePartTypeEnum.GATEHEAD +gudingstructure = IfcMarinePartTypeEnum.GUDINGSTRUCTURE +highwaterline = IfcMarinePartTypeEnum.HIGHWATERLINE +landfield = IfcMarinePartTypeEnum.LANDFIELD +leewardside = IfcMarinePartTypeEnum.LEEWARDSIDE +lowwaterline = IfcMarinePartTypeEnum.LOWWATERLINE +manufacturing = IfcMarinePartTypeEnum.MANUFACTURING +navigationalarea = IfcMarinePartTypeEnum.NAVIGATIONALAREA +protection = IfcMarinePartTypeEnum.PROTECTION +shiptransfer = IfcMarinePartTypeEnum.SHIPTRANSFER +storagearea = IfcMarinePartTypeEnum.STORAGEAREA +vehicleservicing = IfcMarinePartTypeEnum.VEHICLESERVICING +waterfield = IfcMarinePartTypeEnum.WATERFIELD +weatherside = IfcMarinePartTypeEnum.WEATHERSIDE +userdefined = IfcMarinePartTypeEnum.USERDEFINED +notdefined = IfcMarinePartTypeEnum.NOTDEFINED IfcMechanicalFastenerTypeEnum = enum_namespace() -anchorbolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'ANCHORBOLT', INDETERMINATE) -bolt = express_getattr(IfcMechanicalFastenerTypeEnum, 'BOLT', INDETERMINATE) -chain = express_getattr(IfcMechanicalFastenerTypeEnum, 'CHAIN', INDETERMINATE) -coupler = express_getattr(IfcMechanicalFastenerTypeEnum, 'COUPLER', INDETERMINATE) -dowel = express_getattr(IfcMechanicalFastenerTypeEnum, 'DOWEL', INDETERMINATE) -nail = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAIL', INDETERMINATE) -nailplate = express_getattr(IfcMechanicalFastenerTypeEnum, 'NAILPLATE', INDETERMINATE) -railfastening = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILFASTENING', INDETERMINATE) -railjoint = express_getattr(IfcMechanicalFastenerTypeEnum, 'RAILJOINT', INDETERMINATE) -rivet = express_getattr(IfcMechanicalFastenerTypeEnum, 'RIVET', INDETERMINATE) -rope = express_getattr(IfcMechanicalFastenerTypeEnum, 'ROPE', INDETERMINATE) -screw = express_getattr(IfcMechanicalFastenerTypeEnum, 'SCREW', INDETERMINATE) -shearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'SHEARCONNECTOR', INDETERMINATE) -staple = express_getattr(IfcMechanicalFastenerTypeEnum, 'STAPLE', INDETERMINATE) -studshearconnector = express_getattr(IfcMechanicalFastenerTypeEnum, 'STUDSHEARCONNECTOR', INDETERMINATE) -userdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMechanicalFastenerTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchorbolt = IfcMechanicalFastenerTypeEnum.ANCHORBOLT +bolt = IfcMechanicalFastenerTypeEnum.BOLT +chain = IfcMechanicalFastenerTypeEnum.CHAIN +coupler = IfcMechanicalFastenerTypeEnum.COUPLER +dowel = IfcMechanicalFastenerTypeEnum.DOWEL +nail = IfcMechanicalFastenerTypeEnum.NAIL +nailplate = IfcMechanicalFastenerTypeEnum.NAILPLATE +railfastening = IfcMechanicalFastenerTypeEnum.RAILFASTENING +railjoint = IfcMechanicalFastenerTypeEnum.RAILJOINT +rivet = IfcMechanicalFastenerTypeEnum.RIVET +rope = IfcMechanicalFastenerTypeEnum.ROPE +screw = IfcMechanicalFastenerTypeEnum.SCREW +shearconnector = IfcMechanicalFastenerTypeEnum.SHEARCONNECTOR +staple = IfcMechanicalFastenerTypeEnum.STAPLE +studshearconnector = IfcMechanicalFastenerTypeEnum.STUDSHEARCONNECTOR +userdefined = IfcMechanicalFastenerTypeEnum.USERDEFINED +notdefined = IfcMechanicalFastenerTypeEnum.NOTDEFINED IfcMedicalDeviceTypeEnum = enum_namespace() -airstation = express_getattr(IfcMedicalDeviceTypeEnum, 'AIRSTATION', INDETERMINATE) -feedairunit = express_getattr(IfcMedicalDeviceTypeEnum, 'FEEDAIRUNIT', INDETERMINATE) -oxygengenerator = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENGENERATOR', INDETERMINATE) -oxygenplant = express_getattr(IfcMedicalDeviceTypeEnum, 'OXYGENPLANT', INDETERMINATE) -vacuumstation = express_getattr(IfcMedicalDeviceTypeEnum, 'VACUUMSTATION', INDETERMINATE) -userdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMedicalDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +airstation = IfcMedicalDeviceTypeEnum.AIRSTATION +feedairunit = IfcMedicalDeviceTypeEnum.FEEDAIRUNIT +oxygengenerator = IfcMedicalDeviceTypeEnum.OXYGENGENERATOR +oxygenplant = IfcMedicalDeviceTypeEnum.OXYGENPLANT +vacuumstation = IfcMedicalDeviceTypeEnum.VACUUMSTATION +userdefined = IfcMedicalDeviceTypeEnum.USERDEFINED +notdefined = IfcMedicalDeviceTypeEnum.NOTDEFINED IfcMemberTypeEnum = enum_namespace() -arch_segment = express_getattr(IfcMemberTypeEnum, 'ARCH_SEGMENT', INDETERMINATE) -brace = express_getattr(IfcMemberTypeEnum, 'BRACE', INDETERMINATE) -chord = express_getattr(IfcMemberTypeEnum, 'CHORD', INDETERMINATE) -collar = express_getattr(IfcMemberTypeEnum, 'COLLAR', INDETERMINATE) -member = express_getattr(IfcMemberTypeEnum, 'MEMBER', INDETERMINATE) -mullion = express_getattr(IfcMemberTypeEnum, 'MULLION', INDETERMINATE) -plate = express_getattr(IfcMemberTypeEnum, 'PLATE', INDETERMINATE) -post = express_getattr(IfcMemberTypeEnum, 'POST', INDETERMINATE) -purlin = express_getattr(IfcMemberTypeEnum, 'PURLIN', INDETERMINATE) -rafter = express_getattr(IfcMemberTypeEnum, 'RAFTER', INDETERMINATE) -stay_cable = express_getattr(IfcMemberTypeEnum, 'STAY_CABLE', INDETERMINATE) -stiffening_rib = express_getattr(IfcMemberTypeEnum, 'STIFFENING_RIB', INDETERMINATE) -stringer = express_getattr(IfcMemberTypeEnum, 'STRINGER', INDETERMINATE) -structuralcable = express_getattr(IfcMemberTypeEnum, 'STRUCTURALCABLE', INDETERMINATE) -strut = express_getattr(IfcMemberTypeEnum, 'STRUT', INDETERMINATE) -stud = express_getattr(IfcMemberTypeEnum, 'STUD', INDETERMINATE) -suspender = express_getattr(IfcMemberTypeEnum, 'SUSPENDER', INDETERMINATE) -suspension_cable = express_getattr(IfcMemberTypeEnum, 'SUSPENSION_CABLE', INDETERMINATE) -tiebar = express_getattr(IfcMemberTypeEnum, 'TIEBAR', INDETERMINATE) -userdefined = express_getattr(IfcMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +arch_segment = IfcMemberTypeEnum.ARCH_SEGMENT +brace = IfcMemberTypeEnum.BRACE +chord = IfcMemberTypeEnum.CHORD +collar = IfcMemberTypeEnum.COLLAR +member = IfcMemberTypeEnum.MEMBER +mullion = IfcMemberTypeEnum.MULLION +plate = IfcMemberTypeEnum.PLATE +post = IfcMemberTypeEnum.POST +purlin = IfcMemberTypeEnum.PURLIN +rafter = IfcMemberTypeEnum.RAFTER +stay_cable = IfcMemberTypeEnum.STAY_CABLE +stiffening_rib = IfcMemberTypeEnum.STIFFENING_RIB +stringer = IfcMemberTypeEnum.STRINGER +structuralcable = IfcMemberTypeEnum.STRUCTURALCABLE +strut = IfcMemberTypeEnum.STRUT +stud = IfcMemberTypeEnum.STUD +suspender = IfcMemberTypeEnum.SUSPENDER +suspension_cable = IfcMemberTypeEnum.SUSPENSION_CABLE +tiebar = IfcMemberTypeEnum.TIEBAR +userdefined = IfcMemberTypeEnum.USERDEFINED +notdefined = IfcMemberTypeEnum.NOTDEFINED IfcMobileTelecommunicationsApplianceTypeEnum = enum_namespace() -accesspoint = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'ACCESSPOINT', INDETERMINATE) -basebandunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASEBANDUNIT', INDETERMINATE) -basetransceiverstation = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'BASETRANSCEIVERSTATION', INDETERMINATE) -e_utran_node_b = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'E_UTRAN_NODE_B', INDETERMINATE) -gateway_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'GATEWAY_GPRS_SUPPORT_NODE', INDETERMINATE) -masterunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MASTERUNIT', INDETERMINATE) -mobileswitchingcenter = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MOBILESWITCHINGCENTER', INDETERMINATE) -mscserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'MSCSERVER', INDETERMINATE) -packetcontrolunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'PACKETCONTROLUNIT', INDETERMINATE) -remoteradiounit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTERADIOUNIT', INDETERMINATE) -remoteunit = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'REMOTEUNIT', INDETERMINATE) -service_gprs_support_node = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SERVICE_GPRS_SUPPORT_NODE', INDETERMINATE) -subscriberserver = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'SUBSCRIBERSERVER', INDETERMINATE) -userdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMobileTelecommunicationsApplianceTypeEnum, 'NOTDEFINED', INDETERMINATE) +accesspoint = IfcMobileTelecommunicationsApplianceTypeEnum.ACCESSPOINT +basebandunit = IfcMobileTelecommunicationsApplianceTypeEnum.BASEBANDUNIT +basetransceiverstation = IfcMobileTelecommunicationsApplianceTypeEnum.BASETRANSCEIVERSTATION +e_utran_node_b = IfcMobileTelecommunicationsApplianceTypeEnum.E_UTRAN_NODE_B +gateway_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.GATEWAY_GPRS_SUPPORT_NODE +masterunit = IfcMobileTelecommunicationsApplianceTypeEnum.MASTERUNIT +mobileswitchingcenter = IfcMobileTelecommunicationsApplianceTypeEnum.MOBILESWITCHINGCENTER +mscserver = IfcMobileTelecommunicationsApplianceTypeEnum.MSCSERVER +packetcontrolunit = IfcMobileTelecommunicationsApplianceTypeEnum.PACKETCONTROLUNIT +remoteradiounit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTERADIOUNIT +remoteunit = IfcMobileTelecommunicationsApplianceTypeEnum.REMOTEUNIT +service_gprs_support_node = IfcMobileTelecommunicationsApplianceTypeEnum.SERVICE_GPRS_SUPPORT_NODE +subscriberserver = IfcMobileTelecommunicationsApplianceTypeEnum.SUBSCRIBERSERVER +userdefined = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED +notdefined = IfcMobileTelecommunicationsApplianceTypeEnum.NOTDEFINED IfcMooringDeviceTypeEnum = enum_namespace() -bollard = express_getattr(IfcMooringDeviceTypeEnum, 'BOLLARD', INDETERMINATE) -linetensioner = express_getattr(IfcMooringDeviceTypeEnum, 'LINETENSIONER', INDETERMINATE) -magneticdevice = express_getattr(IfcMooringDeviceTypeEnum, 'MAGNETICDEVICE', INDETERMINATE) -mooringhooks = express_getattr(IfcMooringDeviceTypeEnum, 'MOORINGHOOKS', INDETERMINATE) -vacuumdevice = express_getattr(IfcMooringDeviceTypeEnum, 'VACUUMDEVICE', INDETERMINATE) -userdefined = express_getattr(IfcMooringDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMooringDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +bollard = IfcMooringDeviceTypeEnum.BOLLARD +linetensioner = IfcMooringDeviceTypeEnum.LINETENSIONER +magneticdevice = IfcMooringDeviceTypeEnum.MAGNETICDEVICE +mooringhooks = IfcMooringDeviceTypeEnum.MOORINGHOOKS +vacuumdevice = IfcMooringDeviceTypeEnum.VACUUMDEVICE +userdefined = IfcMooringDeviceTypeEnum.USERDEFINED +notdefined = IfcMooringDeviceTypeEnum.NOTDEFINED IfcMotorConnectionTypeEnum = enum_namespace() -beltdrive = express_getattr(IfcMotorConnectionTypeEnum, 'BELTDRIVE', INDETERMINATE) -coupling = express_getattr(IfcMotorConnectionTypeEnum, 'COUPLING', INDETERMINATE) -directdrive = express_getattr(IfcMotorConnectionTypeEnum, 'DIRECTDRIVE', INDETERMINATE) -userdefined = express_getattr(IfcMotorConnectionTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcMotorConnectionTypeEnum, 'NOTDEFINED', INDETERMINATE) +beltdrive = IfcMotorConnectionTypeEnum.BELTDRIVE +coupling = IfcMotorConnectionTypeEnum.COUPLING +directdrive = IfcMotorConnectionTypeEnum.DIRECTDRIVE +userdefined = IfcMotorConnectionTypeEnum.USERDEFINED +notdefined = IfcMotorConnectionTypeEnum.NOTDEFINED IfcNavigationElementTypeEnum = enum_namespace() -beacon = express_getattr(IfcNavigationElementTypeEnum, 'BEACON', INDETERMINATE) -buoy = express_getattr(IfcNavigationElementTypeEnum, 'BUOY', INDETERMINATE) -userdefined = express_getattr(IfcNavigationElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcNavigationElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +beacon = IfcNavigationElementTypeEnum.BEACON +buoy = IfcNavigationElementTypeEnum.BUOY +userdefined = IfcNavigationElementTypeEnum.USERDEFINED +notdefined = IfcNavigationElementTypeEnum.NOTDEFINED IfcObjectiveEnum = enum_namespace() -codecompliance = express_getattr(IfcObjectiveEnum, 'CODECOMPLIANCE', INDETERMINATE) -codewaiver = express_getattr(IfcObjectiveEnum, 'CODEWAIVER', INDETERMINATE) -designintent = express_getattr(IfcObjectiveEnum, 'DESIGNINTENT', INDETERMINATE) -external = express_getattr(IfcObjectiveEnum, 'EXTERNAL', INDETERMINATE) -healthandsafety = express_getattr(IfcObjectiveEnum, 'HEALTHANDSAFETY', INDETERMINATE) -mergeconflict = express_getattr(IfcObjectiveEnum, 'MERGECONFLICT', INDETERMINATE) -modelview = express_getattr(IfcObjectiveEnum, 'MODELVIEW', INDETERMINATE) -parameter = express_getattr(IfcObjectiveEnum, 'PARAMETER', INDETERMINATE) -requirement = express_getattr(IfcObjectiveEnum, 'REQUIREMENT', INDETERMINATE) -specification = express_getattr(IfcObjectiveEnum, 'SPECIFICATION', INDETERMINATE) -triggercondition = express_getattr(IfcObjectiveEnum, 'TRIGGERCONDITION', INDETERMINATE) -userdefined = express_getattr(IfcObjectiveEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcObjectiveEnum, 'NOTDEFINED', INDETERMINATE) +codecompliance = IfcObjectiveEnum.CODECOMPLIANCE +codewaiver = IfcObjectiveEnum.CODEWAIVER +designintent = IfcObjectiveEnum.DESIGNINTENT +external = IfcObjectiveEnum.EXTERNAL +healthandsafety = IfcObjectiveEnum.HEALTHANDSAFETY +mergeconflict = IfcObjectiveEnum.MERGECONFLICT +modelview = IfcObjectiveEnum.MODELVIEW +parameter = IfcObjectiveEnum.PARAMETER +requirement = IfcObjectiveEnum.REQUIREMENT +specification = IfcObjectiveEnum.SPECIFICATION +triggercondition = IfcObjectiveEnum.TRIGGERCONDITION +userdefined = IfcObjectiveEnum.USERDEFINED +notdefined = IfcObjectiveEnum.NOTDEFINED IfcOccupantTypeEnum = enum_namespace() -assignee = express_getattr(IfcOccupantTypeEnum, 'ASSIGNEE', INDETERMINATE) -assignor = express_getattr(IfcOccupantTypeEnum, 'ASSIGNOR', INDETERMINATE) -lessee = express_getattr(IfcOccupantTypeEnum, 'LESSEE', INDETERMINATE) -lessor = express_getattr(IfcOccupantTypeEnum, 'LESSOR', INDETERMINATE) -lettingagent = express_getattr(IfcOccupantTypeEnum, 'LETTINGAGENT', INDETERMINATE) -owner = express_getattr(IfcOccupantTypeEnum, 'OWNER', INDETERMINATE) -tenant = express_getattr(IfcOccupantTypeEnum, 'TENANT', INDETERMINATE) -userdefined = express_getattr(IfcOccupantTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOccupantTypeEnum, 'NOTDEFINED', INDETERMINATE) +assignee = IfcOccupantTypeEnum.ASSIGNEE +assignor = IfcOccupantTypeEnum.ASSIGNOR +lessee = IfcOccupantTypeEnum.LESSEE +lessor = IfcOccupantTypeEnum.LESSOR +lettingagent = IfcOccupantTypeEnum.LETTINGAGENT +owner = IfcOccupantTypeEnum.OWNER +tenant = IfcOccupantTypeEnum.TENANT +userdefined = IfcOccupantTypeEnum.USERDEFINED +notdefined = IfcOccupantTypeEnum.NOTDEFINED IfcOpeningElementTypeEnum = enum_namespace() -opening = express_getattr(IfcOpeningElementTypeEnum, 'OPENING', INDETERMINATE) -recess = express_getattr(IfcOpeningElementTypeEnum, 'RECESS', INDETERMINATE) -userdefined = express_getattr(IfcOpeningElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOpeningElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +opening = IfcOpeningElementTypeEnum.OPENING +recess = IfcOpeningElementTypeEnum.RECESS +userdefined = IfcOpeningElementTypeEnum.USERDEFINED +notdefined = IfcOpeningElementTypeEnum.NOTDEFINED IfcOutletTypeEnum = enum_namespace() -audiovisualoutlet = express_getattr(IfcOutletTypeEnum, 'AUDIOVISUALOUTLET', INDETERMINATE) -communicationsoutlet = express_getattr(IfcOutletTypeEnum, 'COMMUNICATIONSOUTLET', INDETERMINATE) -dataoutlet = express_getattr(IfcOutletTypeEnum, 'DATAOUTLET', INDETERMINATE) -poweroutlet = express_getattr(IfcOutletTypeEnum, 'POWEROUTLET', INDETERMINATE) -telephoneoutlet = express_getattr(IfcOutletTypeEnum, 'TELEPHONEOUTLET', INDETERMINATE) -userdefined = express_getattr(IfcOutletTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcOutletTypeEnum, 'NOTDEFINED', INDETERMINATE) +audiovisualoutlet = IfcOutletTypeEnum.AUDIOVISUALOUTLET +communicationsoutlet = IfcOutletTypeEnum.COMMUNICATIONSOUTLET +dataoutlet = IfcOutletTypeEnum.DATAOUTLET +poweroutlet = IfcOutletTypeEnum.POWEROUTLET +telephoneoutlet = IfcOutletTypeEnum.TELEPHONEOUTLET +userdefined = IfcOutletTypeEnum.USERDEFINED +notdefined = IfcOutletTypeEnum.NOTDEFINED IfcPavementTypeEnum = enum_namespace() -flexible = express_getattr(IfcPavementTypeEnum, 'FLEXIBLE', INDETERMINATE) -rigid = express_getattr(IfcPavementTypeEnum, 'RIGID', INDETERMINATE) -userdefined = express_getattr(IfcPavementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPavementTypeEnum, 'NOTDEFINED', INDETERMINATE) +flexible = IfcPavementTypeEnum.FLEXIBLE +rigid = IfcPavementTypeEnum.RIGID +userdefined = IfcPavementTypeEnum.USERDEFINED +notdefined = IfcPavementTypeEnum.NOTDEFINED IfcPerformanceHistoryTypeEnum = enum_namespace() -userdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPerformanceHistoryTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcPerformanceHistoryTypeEnum.USERDEFINED +notdefined = IfcPerformanceHistoryTypeEnum.NOTDEFINED IfcPermeableCoveringOperationEnum = enum_namespace() -grill = express_getattr(IfcPermeableCoveringOperationEnum, 'GRILL', INDETERMINATE) -louver = express_getattr(IfcPermeableCoveringOperationEnum, 'LOUVER', INDETERMINATE) -screen = express_getattr(IfcPermeableCoveringOperationEnum, 'SCREEN', INDETERMINATE) -userdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermeableCoveringOperationEnum, 'NOTDEFINED', INDETERMINATE) +grill = IfcPermeableCoveringOperationEnum.GRILL +louver = IfcPermeableCoveringOperationEnum.LOUVER +screen = IfcPermeableCoveringOperationEnum.SCREEN +userdefined = IfcPermeableCoveringOperationEnum.USERDEFINED +notdefined = IfcPermeableCoveringOperationEnum.NOTDEFINED IfcPermitTypeEnum = enum_namespace() -access = express_getattr(IfcPermitTypeEnum, 'ACCESS', INDETERMINATE) -building = express_getattr(IfcPermitTypeEnum, 'BUILDING', INDETERMINATE) -work = express_getattr(IfcPermitTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcPermitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPermitTypeEnum, 'NOTDEFINED', INDETERMINATE) +access = IfcPermitTypeEnum.ACCESS +building = IfcPermitTypeEnum.BUILDING +work = IfcPermitTypeEnum.WORK +userdefined = IfcPermitTypeEnum.USERDEFINED +notdefined = IfcPermitTypeEnum.NOTDEFINED IfcPhysicalOrVirtualEnum = enum_namespace() -physical = express_getattr(IfcPhysicalOrVirtualEnum, 'PHYSICAL', INDETERMINATE) -virtual = express_getattr(IfcPhysicalOrVirtualEnum, 'VIRTUAL', INDETERMINATE) -notdefined = express_getattr(IfcPhysicalOrVirtualEnum, 'NOTDEFINED', INDETERMINATE) +physical = IfcPhysicalOrVirtualEnum.PHYSICAL +virtual = IfcPhysicalOrVirtualEnum.VIRTUAL +notdefined = IfcPhysicalOrVirtualEnum.NOTDEFINED IfcPileConstructionEnum = enum_namespace() -cast_in_place = express_getattr(IfcPileConstructionEnum, 'CAST_IN_PLACE', INDETERMINATE) -composite = express_getattr(IfcPileConstructionEnum, 'COMPOSITE', INDETERMINATE) -precast_concrete = express_getattr(IfcPileConstructionEnum, 'PRECAST_CONCRETE', INDETERMINATE) -prefab_steel = express_getattr(IfcPileConstructionEnum, 'PREFAB_STEEL', INDETERMINATE) -userdefined = express_getattr(IfcPileConstructionEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileConstructionEnum, 'NOTDEFINED', INDETERMINATE) +cast_in_place = IfcPileConstructionEnum.CAST_IN_PLACE +composite = IfcPileConstructionEnum.COMPOSITE +precast_concrete = IfcPileConstructionEnum.PRECAST_CONCRETE +prefab_steel = IfcPileConstructionEnum.PREFAB_STEEL +userdefined = IfcPileConstructionEnum.USERDEFINED +notdefined = IfcPileConstructionEnum.NOTDEFINED IfcPileTypeEnum = enum_namespace() -bored = express_getattr(IfcPileTypeEnum, 'BORED', INDETERMINATE) -cohesion = express_getattr(IfcPileTypeEnum, 'COHESION', INDETERMINATE) -driven = express_getattr(IfcPileTypeEnum, 'DRIVEN', INDETERMINATE) -friction = express_getattr(IfcPileTypeEnum, 'FRICTION', INDETERMINATE) -jetgrouting = express_getattr(IfcPileTypeEnum, 'JETGROUTING', INDETERMINATE) -support = express_getattr(IfcPileTypeEnum, 'SUPPORT', INDETERMINATE) -userdefined = express_getattr(IfcPileTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPileTypeEnum, 'NOTDEFINED', INDETERMINATE) +bored = IfcPileTypeEnum.BORED +cohesion = IfcPileTypeEnum.COHESION +driven = IfcPileTypeEnum.DRIVEN +friction = IfcPileTypeEnum.FRICTION +jetgrouting = IfcPileTypeEnum.JETGROUTING +support = IfcPileTypeEnum.SUPPORT +userdefined = IfcPileTypeEnum.USERDEFINED +notdefined = IfcPileTypeEnum.NOTDEFINED IfcPipeFittingTypeEnum = enum_namespace() -bend = express_getattr(IfcPipeFittingTypeEnum, 'BEND', INDETERMINATE) -connector = express_getattr(IfcPipeFittingTypeEnum, 'CONNECTOR', INDETERMINATE) -entry = express_getattr(IfcPipeFittingTypeEnum, 'ENTRY', INDETERMINATE) -exit = express_getattr(IfcPipeFittingTypeEnum, 'EXIT', INDETERMINATE) -junction = express_getattr(IfcPipeFittingTypeEnum, 'JUNCTION', INDETERMINATE) -obstruction = express_getattr(IfcPipeFittingTypeEnum, 'OBSTRUCTION', INDETERMINATE) -transition = express_getattr(IfcPipeFittingTypeEnum, 'TRANSITION', INDETERMINATE) -userdefined = express_getattr(IfcPipeFittingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeFittingTypeEnum, 'NOTDEFINED', INDETERMINATE) +bend = IfcPipeFittingTypeEnum.BEND +connector = IfcPipeFittingTypeEnum.CONNECTOR +entry = IfcPipeFittingTypeEnum.ENTRY +exit = IfcPipeFittingTypeEnum.EXIT +junction = IfcPipeFittingTypeEnum.JUNCTION +obstruction = IfcPipeFittingTypeEnum.OBSTRUCTION +transition = IfcPipeFittingTypeEnum.TRANSITION +userdefined = IfcPipeFittingTypeEnum.USERDEFINED +notdefined = IfcPipeFittingTypeEnum.NOTDEFINED IfcPipeSegmentTypeEnum = enum_namespace() -culvert = express_getattr(IfcPipeSegmentTypeEnum, 'CULVERT', INDETERMINATE) -flexiblesegment = express_getattr(IfcPipeSegmentTypeEnum, 'FLEXIBLESEGMENT', INDETERMINATE) -gutter = express_getattr(IfcPipeSegmentTypeEnum, 'GUTTER', INDETERMINATE) -rigidsegment = express_getattr(IfcPipeSegmentTypeEnum, 'RIGIDSEGMENT', INDETERMINATE) -spool = express_getattr(IfcPipeSegmentTypeEnum, 'SPOOL', INDETERMINATE) -userdefined = express_getattr(IfcPipeSegmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPipeSegmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +culvert = IfcPipeSegmentTypeEnum.CULVERT +flexiblesegment = IfcPipeSegmentTypeEnum.FLEXIBLESEGMENT +gutter = IfcPipeSegmentTypeEnum.GUTTER +rigidsegment = IfcPipeSegmentTypeEnum.RIGIDSEGMENT +spool = IfcPipeSegmentTypeEnum.SPOOL +userdefined = IfcPipeSegmentTypeEnum.USERDEFINED +notdefined = IfcPipeSegmentTypeEnum.NOTDEFINED IfcPlateTypeEnum = enum_namespace() -base_plate = express_getattr(IfcPlateTypeEnum, 'BASE_PLATE', INDETERMINATE) -cover_plate = express_getattr(IfcPlateTypeEnum, 'COVER_PLATE', INDETERMINATE) -curtain_panel = express_getattr(IfcPlateTypeEnum, 'CURTAIN_PANEL', INDETERMINATE) -flange_plate = express_getattr(IfcPlateTypeEnum, 'FLANGE_PLATE', INDETERMINATE) -gusset_plate = express_getattr(IfcPlateTypeEnum, 'GUSSET_PLATE', INDETERMINATE) -sheet = express_getattr(IfcPlateTypeEnum, 'SHEET', INDETERMINATE) -splice_plate = express_getattr(IfcPlateTypeEnum, 'SPLICE_PLATE', INDETERMINATE) -stiffener_plate = express_getattr(IfcPlateTypeEnum, 'STIFFENER_PLATE', INDETERMINATE) -web_plate = express_getattr(IfcPlateTypeEnum, 'WEB_PLATE', INDETERMINATE) -userdefined = express_getattr(IfcPlateTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPlateTypeEnum, 'NOTDEFINED', INDETERMINATE) +base_plate = IfcPlateTypeEnum.BASE_PLATE +cover_plate = IfcPlateTypeEnum.COVER_PLATE +curtain_panel = IfcPlateTypeEnum.CURTAIN_PANEL +flange_plate = IfcPlateTypeEnum.FLANGE_PLATE +gusset_plate = IfcPlateTypeEnum.GUSSET_PLATE +sheet = IfcPlateTypeEnum.SHEET +splice_plate = IfcPlateTypeEnum.SPLICE_PLATE +stiffener_plate = IfcPlateTypeEnum.STIFFENER_PLATE +web_plate = IfcPlateTypeEnum.WEB_PLATE +userdefined = IfcPlateTypeEnum.USERDEFINED +notdefined = IfcPlateTypeEnum.NOTDEFINED IfcPreferredSurfaceCurveRepresentation = enum_namespace() -curve3d = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'CURVE3D', INDETERMINATE) -pcurve_s1 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S1', INDETERMINATE) -pcurve_s2 = express_getattr(IfcPreferredSurfaceCurveRepresentation, 'PCURVE_S2', INDETERMINATE) +curve3d = IfcPreferredSurfaceCurveRepresentation.CURVE3D +pcurve_s1 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S1 +pcurve_s2 = IfcPreferredSurfaceCurveRepresentation.PCURVE_S2 IfcProcedureTypeEnum = enum_namespace() -advice_caution = express_getattr(IfcProcedureTypeEnum, 'ADVICE_CAUTION', INDETERMINATE) -advice_note = express_getattr(IfcProcedureTypeEnum, 'ADVICE_NOTE', INDETERMINATE) -advice_warning = express_getattr(IfcProcedureTypeEnum, 'ADVICE_WARNING', INDETERMINATE) -calibration = express_getattr(IfcProcedureTypeEnum, 'CALIBRATION', INDETERMINATE) -diagnostic = express_getattr(IfcProcedureTypeEnum, 'DIAGNOSTIC', INDETERMINATE) -shutdown = express_getattr(IfcProcedureTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcProcedureTypeEnum, 'STARTUP', INDETERMINATE) -userdefined = express_getattr(IfcProcedureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProcedureTypeEnum, 'NOTDEFINED', INDETERMINATE) +advice_caution = IfcProcedureTypeEnum.ADVICE_CAUTION +advice_note = IfcProcedureTypeEnum.ADVICE_NOTE +advice_warning = IfcProcedureTypeEnum.ADVICE_WARNING +calibration = IfcProcedureTypeEnum.CALIBRATION +diagnostic = IfcProcedureTypeEnum.DIAGNOSTIC +shutdown = IfcProcedureTypeEnum.SHUTDOWN +startup = IfcProcedureTypeEnum.STARTUP +userdefined = IfcProcedureTypeEnum.USERDEFINED +notdefined = IfcProcedureTypeEnum.NOTDEFINED IfcProfileTypeEnum = enum_namespace() -area = express_getattr(IfcProfileTypeEnum, 'AREA', INDETERMINATE) -curve = express_getattr(IfcProfileTypeEnum, 'CURVE', INDETERMINATE) +area = IfcProfileTypeEnum.AREA +curve = IfcProfileTypeEnum.CURVE IfcProjectOrderTypeEnum = enum_namespace() -changeorder = express_getattr(IfcProjectOrderTypeEnum, 'CHANGEORDER', INDETERMINATE) -maintenanceworkorder = express_getattr(IfcProjectOrderTypeEnum, 'MAINTENANCEWORKORDER', INDETERMINATE) -moveorder = express_getattr(IfcProjectOrderTypeEnum, 'MOVEORDER', INDETERMINATE) -purchaseorder = express_getattr(IfcProjectOrderTypeEnum, 'PURCHASEORDER', INDETERMINATE) -workorder = express_getattr(IfcProjectOrderTypeEnum, 'WORKORDER', INDETERMINATE) -userdefined = express_getattr(IfcProjectOrderTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectOrderTypeEnum, 'NOTDEFINED', INDETERMINATE) +changeorder = IfcProjectOrderTypeEnum.CHANGEORDER +maintenanceworkorder = IfcProjectOrderTypeEnum.MAINTENANCEWORKORDER +moveorder = IfcProjectOrderTypeEnum.MOVEORDER +purchaseorder = IfcProjectOrderTypeEnum.PURCHASEORDER +workorder = IfcProjectOrderTypeEnum.WORKORDER +userdefined = IfcProjectOrderTypeEnum.USERDEFINED +notdefined = IfcProjectOrderTypeEnum.NOTDEFINED IfcProjectedOrTrueLengthEnum = enum_namespace() -projected_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'PROJECTED_LENGTH', INDETERMINATE) -true_length = express_getattr(IfcProjectedOrTrueLengthEnum, 'TRUE_LENGTH', INDETERMINATE) +projected_length = IfcProjectedOrTrueLengthEnum.PROJECTED_LENGTH +true_length = IfcProjectedOrTrueLengthEnum.TRUE_LENGTH IfcProjectionElementTypeEnum = enum_namespace() -blister = express_getattr(IfcProjectionElementTypeEnum, 'BLISTER', INDETERMINATE) -deviator = express_getattr(IfcProjectionElementTypeEnum, 'DEVIATOR', INDETERMINATE) -userdefined = express_getattr(IfcProjectionElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProjectionElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blister = IfcProjectionElementTypeEnum.BLISTER +deviator = IfcProjectionElementTypeEnum.DEVIATOR +userdefined = IfcProjectionElementTypeEnum.USERDEFINED +notdefined = IfcProjectionElementTypeEnum.NOTDEFINED IfcPropertySetTemplateTypeEnum = enum_namespace() -pset_materialdriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_MATERIALDRIVEN', INDETERMINATE) -pset_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_OCCURRENCEDRIVEN', INDETERMINATE) -pset_performancedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PERFORMANCEDRIVEN', INDETERMINATE) -pset_profiledriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_PROFILEDRIVEN', INDETERMINATE) -pset_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENONLY', INDETERMINATE) -pset_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'PSET_TYPEDRIVENOVERRIDE', INDETERMINATE) -qto_occurrencedriven = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_OCCURRENCEDRIVEN', INDETERMINATE) -qto_typedrivenonly = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENONLY', INDETERMINATE) -qto_typedrivenoverride = express_getattr(IfcPropertySetTemplateTypeEnum, 'QTO_TYPEDRIVENOVERRIDE', INDETERMINATE) -notdefined = express_getattr(IfcPropertySetTemplateTypeEnum, 'NOTDEFINED', INDETERMINATE) +pset_materialdriven = IfcPropertySetTemplateTypeEnum.PSET_MATERIALDRIVEN +pset_occurrencedriven = IfcPropertySetTemplateTypeEnum.PSET_OCCURRENCEDRIVEN +pset_performancedriven = IfcPropertySetTemplateTypeEnum.PSET_PERFORMANCEDRIVEN +pset_profiledriven = IfcPropertySetTemplateTypeEnum.PSET_PROFILEDRIVEN +pset_typedrivenonly = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENONLY +pset_typedrivenoverride = IfcPropertySetTemplateTypeEnum.PSET_TYPEDRIVENOVERRIDE +qto_occurrencedriven = IfcPropertySetTemplateTypeEnum.QTO_OCCURRENCEDRIVEN +qto_typedrivenonly = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENONLY +qto_typedrivenoverride = IfcPropertySetTemplateTypeEnum.QTO_TYPEDRIVENOVERRIDE +notdefined = IfcPropertySetTemplateTypeEnum.NOTDEFINED IfcProtectiveDeviceTrippingUnitTypeEnum = enum_namespace() -electromagnetic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTROMAGNETIC', INDETERMINATE) -electronic = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'ELECTRONIC', INDETERMINATE) -residualcurrent = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'RESIDUALCURRENT', INDETERMINATE) -thermal = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'THERMAL', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTrippingUnitTypeEnum, 'NOTDEFINED', INDETERMINATE) +electromagnetic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTROMAGNETIC +electronic = IfcProtectiveDeviceTrippingUnitTypeEnum.ELECTRONIC +residualcurrent = IfcProtectiveDeviceTrippingUnitTypeEnum.RESIDUALCURRENT +thermal = IfcProtectiveDeviceTrippingUnitTypeEnum.THERMAL +userdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTrippingUnitTypeEnum.NOTDEFINED IfcProtectiveDeviceTypeEnum = enum_namespace() -anti_arcing_device = express_getattr(IfcProtectiveDeviceTypeEnum, 'ANTI_ARCING_DEVICE', INDETERMINATE) -circuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'CIRCUITBREAKER', INDETERMINATE) -earthingswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHINGSWITCH', INDETERMINATE) -earthleakagecircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'EARTHLEAKAGECIRCUITBREAKER', INDETERMINATE) -fusedisconnector = express_getattr(IfcProtectiveDeviceTypeEnum, 'FUSEDISCONNECTOR', INDETERMINATE) -residualcurrentcircuitbreaker = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTCIRCUITBREAKER', INDETERMINATE) -residualcurrentswitch = express_getattr(IfcProtectiveDeviceTypeEnum, 'RESIDUALCURRENTSWITCH', INDETERMINATE) -sparkgap = express_getattr(IfcProtectiveDeviceTypeEnum, 'SPARKGAP', INDETERMINATE) -varistor = express_getattr(IfcProtectiveDeviceTypeEnum, 'VARISTOR', INDETERMINATE) -voltagelimiter = express_getattr(IfcProtectiveDeviceTypeEnum, 'VOLTAGELIMITER', INDETERMINATE) -userdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcProtectiveDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +anti_arcing_device = IfcProtectiveDeviceTypeEnum.ANTI_ARCING_DEVICE +circuitbreaker = IfcProtectiveDeviceTypeEnum.CIRCUITBREAKER +earthingswitch = IfcProtectiveDeviceTypeEnum.EARTHINGSWITCH +earthleakagecircuitbreaker = IfcProtectiveDeviceTypeEnum.EARTHLEAKAGECIRCUITBREAKER +fusedisconnector = IfcProtectiveDeviceTypeEnum.FUSEDISCONNECTOR +residualcurrentcircuitbreaker = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTCIRCUITBREAKER +residualcurrentswitch = IfcProtectiveDeviceTypeEnum.RESIDUALCURRENTSWITCH +sparkgap = IfcProtectiveDeviceTypeEnum.SPARKGAP +varistor = IfcProtectiveDeviceTypeEnum.VARISTOR +voltagelimiter = IfcProtectiveDeviceTypeEnum.VOLTAGELIMITER +userdefined = IfcProtectiveDeviceTypeEnum.USERDEFINED +notdefined = IfcProtectiveDeviceTypeEnum.NOTDEFINED IfcPumpTypeEnum = enum_namespace() -circulator = express_getattr(IfcPumpTypeEnum, 'CIRCULATOR', INDETERMINATE) -endsuction = express_getattr(IfcPumpTypeEnum, 'ENDSUCTION', INDETERMINATE) -splitcase = express_getattr(IfcPumpTypeEnum, 'SPLITCASE', INDETERMINATE) -submersiblepump = express_getattr(IfcPumpTypeEnum, 'SUBMERSIBLEPUMP', INDETERMINATE) -sumppump = express_getattr(IfcPumpTypeEnum, 'SUMPPUMP', INDETERMINATE) -verticalinline = express_getattr(IfcPumpTypeEnum, 'VERTICALINLINE', INDETERMINATE) -verticalturbine = express_getattr(IfcPumpTypeEnum, 'VERTICALTURBINE', INDETERMINATE) -userdefined = express_getattr(IfcPumpTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcPumpTypeEnum, 'NOTDEFINED', INDETERMINATE) +circulator = IfcPumpTypeEnum.CIRCULATOR +endsuction = IfcPumpTypeEnum.ENDSUCTION +splitcase = IfcPumpTypeEnum.SPLITCASE +submersiblepump = IfcPumpTypeEnum.SUBMERSIBLEPUMP +sumppump = IfcPumpTypeEnum.SUMPPUMP +verticalinline = IfcPumpTypeEnum.VERTICALINLINE +verticalturbine = IfcPumpTypeEnum.VERTICALTURBINE +userdefined = IfcPumpTypeEnum.USERDEFINED +notdefined = IfcPumpTypeEnum.NOTDEFINED IfcRailTypeEnum = enum_namespace() -blade = express_getattr(IfcRailTypeEnum, 'BLADE', INDETERMINATE) -checkrail = express_getattr(IfcRailTypeEnum, 'CHECKRAIL', INDETERMINATE) -guardrail = express_getattr(IfcRailTypeEnum, 'GUARDRAIL', INDETERMINATE) -rackrail = express_getattr(IfcRailTypeEnum, 'RACKRAIL', INDETERMINATE) -rail = express_getattr(IfcRailTypeEnum, 'RAIL', INDETERMINATE) -stockrail = express_getattr(IfcRailTypeEnum, 'STOCKRAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailTypeEnum, 'NOTDEFINED', INDETERMINATE) +blade = IfcRailTypeEnum.BLADE +checkrail = IfcRailTypeEnum.CHECKRAIL +guardrail = IfcRailTypeEnum.GUARDRAIL +rackrail = IfcRailTypeEnum.RACKRAIL +rail = IfcRailTypeEnum.RAIL +stockrail = IfcRailTypeEnum.STOCKRAIL +userdefined = IfcRailTypeEnum.USERDEFINED +notdefined = IfcRailTypeEnum.NOTDEFINED IfcRailingTypeEnum = enum_namespace() -balustrade = express_getattr(IfcRailingTypeEnum, 'BALUSTRADE', INDETERMINATE) -fence = express_getattr(IfcRailingTypeEnum, 'FENCE', INDETERMINATE) -guardrail = express_getattr(IfcRailingTypeEnum, 'GUARDRAIL', INDETERMINATE) -handrail = express_getattr(IfcRailingTypeEnum, 'HANDRAIL', INDETERMINATE) -userdefined = express_getattr(IfcRailingTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailingTypeEnum, 'NOTDEFINED', INDETERMINATE) +balustrade = IfcRailingTypeEnum.BALUSTRADE +fence = IfcRailingTypeEnum.FENCE +guardrail = IfcRailingTypeEnum.GUARDRAIL +handrail = IfcRailingTypeEnum.HANDRAIL +userdefined = IfcRailingTypeEnum.USERDEFINED +notdefined = IfcRailingTypeEnum.NOTDEFINED IfcRailwayPartTypeEnum = enum_namespace() -dilatationsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'DILATATIONSUPERSTRUCTURE', INDETERMINATE) -linesidestructure = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTURE', INDETERMINATE) -linesidestructurepart = express_getattr(IfcRailwayPartTypeEnum, 'LINESIDESTRUCTUREPART', INDETERMINATE) -plaintracksuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'PLAINTRACKSUPERSTRUCTURE', INDETERMINATE) -superstructure = express_getattr(IfcRailwayPartTypeEnum, 'SUPERSTRUCTURE', INDETERMINATE) -trackstructure = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTURE', INDETERMINATE) -trackstructurepart = express_getattr(IfcRailwayPartTypeEnum, 'TRACKSTRUCTUREPART', INDETERMINATE) -turnoutsuperstructure = express_getattr(IfcRailwayPartTypeEnum, 'TURNOUTSUPERSTRUCTURE', INDETERMINATE) -userdefined = express_getattr(IfcRailwayPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +dilatationsuperstructure = IfcRailwayPartTypeEnum.DILATATIONSUPERSTRUCTURE +linesidestructure = IfcRailwayPartTypeEnum.LINESIDESTRUCTURE +linesidestructurepart = IfcRailwayPartTypeEnum.LINESIDESTRUCTUREPART +plaintracksuperstructure = IfcRailwayPartTypeEnum.PLAINTRACKSUPERSTRUCTURE +superstructure = IfcRailwayPartTypeEnum.SUPERSTRUCTURE +trackstructure = IfcRailwayPartTypeEnum.TRACKSTRUCTURE +trackstructurepart = IfcRailwayPartTypeEnum.TRACKSTRUCTUREPART +turnoutsuperstructure = IfcRailwayPartTypeEnum.TURNOUTSUPERSTRUCTURE +userdefined = IfcRailwayPartTypeEnum.USERDEFINED +notdefined = IfcRailwayPartTypeEnum.NOTDEFINED IfcRailwayTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRailwayTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRailwayTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRailwayTypeEnum.USERDEFINED +notdefined = IfcRailwayTypeEnum.NOTDEFINED IfcRampFlightTypeEnum = enum_namespace() -spiral = express_getattr(IfcRampFlightTypeEnum, 'SPIRAL', INDETERMINATE) -straight = express_getattr(IfcRampFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -userdefined = express_getattr(IfcRampFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +spiral = IfcRampFlightTypeEnum.SPIRAL +straight = IfcRampFlightTypeEnum.STRAIGHT +userdefined = IfcRampFlightTypeEnum.USERDEFINED +notdefined = IfcRampFlightTypeEnum.NOTDEFINED IfcRampTypeEnum = enum_namespace() -half_turn_ramp = express_getattr(IfcRampTypeEnum, 'HALF_TURN_RAMP', INDETERMINATE) -quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'QUARTER_TURN_RAMP', INDETERMINATE) -spiral_ramp = express_getattr(IfcRampTypeEnum, 'SPIRAL_RAMP', INDETERMINATE) -straight_run_ramp = express_getattr(IfcRampTypeEnum, 'STRAIGHT_RUN_RAMP', INDETERMINATE) -two_quarter_turn_ramp = express_getattr(IfcRampTypeEnum, 'TWO_QUARTER_TURN_RAMP', INDETERMINATE) -two_straight_run_ramp = express_getattr(IfcRampTypeEnum, 'TWO_STRAIGHT_RUN_RAMP', INDETERMINATE) -userdefined = express_getattr(IfcRampTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRampTypeEnum, 'NOTDEFINED', INDETERMINATE) +half_turn_ramp = IfcRampTypeEnum.HALF_TURN_RAMP +quarter_turn_ramp = IfcRampTypeEnum.QUARTER_TURN_RAMP +spiral_ramp = IfcRampTypeEnum.SPIRAL_RAMP +straight_run_ramp = IfcRampTypeEnum.STRAIGHT_RUN_RAMP +two_quarter_turn_ramp = IfcRampTypeEnum.TWO_QUARTER_TURN_RAMP +two_straight_run_ramp = IfcRampTypeEnum.TWO_STRAIGHT_RUN_RAMP +userdefined = IfcRampTypeEnum.USERDEFINED +notdefined = IfcRampTypeEnum.NOTDEFINED IfcRecurrenceTypeEnum = enum_namespace() -by_day_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_DAY_COUNT', INDETERMINATE) -by_weekday_count = express_getattr(IfcRecurrenceTypeEnum, 'BY_WEEKDAY_COUNT', INDETERMINATE) -daily = express_getattr(IfcRecurrenceTypeEnum, 'DAILY', INDETERMINATE) -monthly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_DAY_OF_MONTH', INDETERMINATE) -monthly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'MONTHLY_BY_POSITION', INDETERMINATE) -weekly = express_getattr(IfcRecurrenceTypeEnum, 'WEEKLY', INDETERMINATE) -yearly_by_day_of_month = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_DAY_OF_MONTH', INDETERMINATE) -yearly_by_position = express_getattr(IfcRecurrenceTypeEnum, 'YEARLY_BY_POSITION', INDETERMINATE) +by_day_count = IfcRecurrenceTypeEnum.BY_DAY_COUNT +by_weekday_count = IfcRecurrenceTypeEnum.BY_WEEKDAY_COUNT +daily = IfcRecurrenceTypeEnum.DAILY +monthly_by_day_of_month = IfcRecurrenceTypeEnum.MONTHLY_BY_DAY_OF_MONTH +monthly_by_position = IfcRecurrenceTypeEnum.MONTHLY_BY_POSITION +weekly = IfcRecurrenceTypeEnum.WEEKLY +yearly_by_day_of_month = IfcRecurrenceTypeEnum.YEARLY_BY_DAY_OF_MONTH +yearly_by_position = IfcRecurrenceTypeEnum.YEARLY_BY_POSITION IfcReferentTypeEnum = enum_namespace() -boundary = express_getattr(IfcReferentTypeEnum, 'BOUNDARY', INDETERMINATE) -intersection = express_getattr(IfcReferentTypeEnum, 'INTERSECTION', INDETERMINATE) -kilopoint = express_getattr(IfcReferentTypeEnum, 'KILOPOINT', INDETERMINATE) -landmark = express_getattr(IfcReferentTypeEnum, 'LANDMARK', INDETERMINATE) -milepoint = express_getattr(IfcReferentTypeEnum, 'MILEPOINT', INDETERMINATE) -position = express_getattr(IfcReferentTypeEnum, 'POSITION', INDETERMINATE) -referencemarker = express_getattr(IfcReferentTypeEnum, 'REFERENCEMARKER', INDETERMINATE) -station = express_getattr(IfcReferentTypeEnum, 'STATION', INDETERMINATE) -userdefined = express_getattr(IfcReferentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReferentTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = IfcReferentTypeEnum.BOUNDARY +intersection = IfcReferentTypeEnum.INTERSECTION +kilopoint = IfcReferentTypeEnum.KILOPOINT +landmark = IfcReferentTypeEnum.LANDMARK +milepoint = IfcReferentTypeEnum.MILEPOINT +position = IfcReferentTypeEnum.POSITION +referencemarker = IfcReferentTypeEnum.REFERENCEMARKER +station = IfcReferentTypeEnum.STATION +userdefined = IfcReferentTypeEnum.USERDEFINED +notdefined = IfcReferentTypeEnum.NOTDEFINED IfcReflectanceMethodEnum = enum_namespace() -blinn = express_getattr(IfcReflectanceMethodEnum, 'BLINN', INDETERMINATE) -flat = express_getattr(IfcReflectanceMethodEnum, 'FLAT', INDETERMINATE) -glass = express_getattr(IfcReflectanceMethodEnum, 'GLASS', INDETERMINATE) -matt = express_getattr(IfcReflectanceMethodEnum, 'MATT', INDETERMINATE) -metal = express_getattr(IfcReflectanceMethodEnum, 'METAL', INDETERMINATE) -mirror = express_getattr(IfcReflectanceMethodEnum, 'MIRROR', INDETERMINATE) -phong = express_getattr(IfcReflectanceMethodEnum, 'PHONG', INDETERMINATE) -physical = express_getattr(IfcReflectanceMethodEnum, 'PHYSICAL', INDETERMINATE) -plastic = express_getattr(IfcReflectanceMethodEnum, 'PLASTIC', INDETERMINATE) -strauss = express_getattr(IfcReflectanceMethodEnum, 'STRAUSS', INDETERMINATE) -notdefined = express_getattr(IfcReflectanceMethodEnum, 'NOTDEFINED', INDETERMINATE) +blinn = IfcReflectanceMethodEnum.BLINN +flat = IfcReflectanceMethodEnum.FLAT +glass = IfcReflectanceMethodEnum.GLASS +matt = IfcReflectanceMethodEnum.MATT +metal = IfcReflectanceMethodEnum.METAL +mirror = IfcReflectanceMethodEnum.MIRROR +phong = IfcReflectanceMethodEnum.PHONG +physical = IfcReflectanceMethodEnum.PHYSICAL +plastic = IfcReflectanceMethodEnum.PLASTIC +strauss = IfcReflectanceMethodEnum.STRAUSS +notdefined = IfcReflectanceMethodEnum.NOTDEFINED IfcReinforcedSoilTypeEnum = enum_namespace() -dynamicallycompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'DYNAMICALLYCOMPACTED', INDETERMINATE) -grouted = express_getattr(IfcReinforcedSoilTypeEnum, 'GROUTED', INDETERMINATE) -replaced = express_getattr(IfcReinforcedSoilTypeEnum, 'REPLACED', INDETERMINATE) -rollercompacted = express_getattr(IfcReinforcedSoilTypeEnum, 'ROLLERCOMPACTED', INDETERMINATE) -surchargepreloaded = express_getattr(IfcReinforcedSoilTypeEnum, 'SURCHARGEPRELOADED', INDETERMINATE) -verticallydrained = express_getattr(IfcReinforcedSoilTypeEnum, 'VERTICALLYDRAINED', INDETERMINATE) -userdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcedSoilTypeEnum, 'NOTDEFINED', INDETERMINATE) +dynamicallycompacted = IfcReinforcedSoilTypeEnum.DYNAMICALLYCOMPACTED +grouted = IfcReinforcedSoilTypeEnum.GROUTED +replaced = IfcReinforcedSoilTypeEnum.REPLACED +rollercompacted = IfcReinforcedSoilTypeEnum.ROLLERCOMPACTED +surchargepreloaded = IfcReinforcedSoilTypeEnum.SURCHARGEPRELOADED +verticallydrained = IfcReinforcedSoilTypeEnum.VERTICALLYDRAINED +userdefined = IfcReinforcedSoilTypeEnum.USERDEFINED +notdefined = IfcReinforcedSoilTypeEnum.NOTDEFINED IfcReinforcingBarRoleEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarRoleEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarRoleEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarRoleEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarRoleEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarRoleEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarRoleEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarRoleEnum, 'SHEAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarRoleEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarRoleEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarRoleEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarRoleEnum.ANCHORING +edge = IfcReinforcingBarRoleEnum.EDGE +ligature = IfcReinforcingBarRoleEnum.LIGATURE +main = IfcReinforcingBarRoleEnum.MAIN +punching = IfcReinforcingBarRoleEnum.PUNCHING +ring = IfcReinforcingBarRoleEnum.RING +shear = IfcReinforcingBarRoleEnum.SHEAR +stud = IfcReinforcingBarRoleEnum.STUD +userdefined = IfcReinforcingBarRoleEnum.USERDEFINED +notdefined = IfcReinforcingBarRoleEnum.NOTDEFINED IfcReinforcingBarSurfaceEnum = enum_namespace() -plain = express_getattr(IfcReinforcingBarSurfaceEnum, 'PLAIN', INDETERMINATE) -textured = express_getattr(IfcReinforcingBarSurfaceEnum, 'TEXTURED', INDETERMINATE) +plain = IfcReinforcingBarSurfaceEnum.PLAIN +textured = IfcReinforcingBarSurfaceEnum.TEXTURED IfcReinforcingBarTypeEnum = enum_namespace() -anchoring = express_getattr(IfcReinforcingBarTypeEnum, 'ANCHORING', INDETERMINATE) -edge = express_getattr(IfcReinforcingBarTypeEnum, 'EDGE', INDETERMINATE) -ligature = express_getattr(IfcReinforcingBarTypeEnum, 'LIGATURE', INDETERMINATE) -main = express_getattr(IfcReinforcingBarTypeEnum, 'MAIN', INDETERMINATE) -punching = express_getattr(IfcReinforcingBarTypeEnum, 'PUNCHING', INDETERMINATE) -ring = express_getattr(IfcReinforcingBarTypeEnum, 'RING', INDETERMINATE) -shear = express_getattr(IfcReinforcingBarTypeEnum, 'SHEAR', INDETERMINATE) -spacebar = express_getattr(IfcReinforcingBarTypeEnum, 'SPACEBAR', INDETERMINATE) -stud = express_getattr(IfcReinforcingBarTypeEnum, 'STUD', INDETERMINATE) -userdefined = express_getattr(IfcReinforcingBarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingBarTypeEnum, 'NOTDEFINED', INDETERMINATE) +anchoring = IfcReinforcingBarTypeEnum.ANCHORING +edge = IfcReinforcingBarTypeEnum.EDGE +ligature = IfcReinforcingBarTypeEnum.LIGATURE +main = IfcReinforcingBarTypeEnum.MAIN +punching = IfcReinforcingBarTypeEnum.PUNCHING +ring = IfcReinforcingBarTypeEnum.RING +shear = IfcReinforcingBarTypeEnum.SHEAR +spacebar = IfcReinforcingBarTypeEnum.SPACEBAR +stud = IfcReinforcingBarTypeEnum.STUD +userdefined = IfcReinforcingBarTypeEnum.USERDEFINED +notdefined = IfcReinforcingBarTypeEnum.NOTDEFINED IfcReinforcingMeshTypeEnum = enum_namespace() -userdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcReinforcingMeshTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcReinforcingMeshTypeEnum.USERDEFINED +notdefined = IfcReinforcingMeshTypeEnum.NOTDEFINED IfcRoadPartTypeEnum = enum_namespace() -bicyclecrossing = express_getattr(IfcRoadPartTypeEnum, 'BICYCLECROSSING', INDETERMINATE) -bus_stop = express_getattr(IfcRoadPartTypeEnum, 'BUS_STOP', INDETERMINATE) -carriageway = express_getattr(IfcRoadPartTypeEnum, 'CARRIAGEWAY', INDETERMINATE) -centralisland = express_getattr(IfcRoadPartTypeEnum, 'CENTRALISLAND', INDETERMINATE) -centralreserve = express_getattr(IfcRoadPartTypeEnum, 'CENTRALRESERVE', INDETERMINATE) -hardshoulder = express_getattr(IfcRoadPartTypeEnum, 'HARDSHOULDER', INDETERMINATE) -intersection = express_getattr(IfcRoadPartTypeEnum, 'INTERSECTION', INDETERMINATE) -layby = express_getattr(IfcRoadPartTypeEnum, 'LAYBY', INDETERMINATE) -parkingbay = express_getattr(IfcRoadPartTypeEnum, 'PARKINGBAY', INDETERMINATE) -passingbay = express_getattr(IfcRoadPartTypeEnum, 'PASSINGBAY', INDETERMINATE) -pedestrian_crossing = express_getattr(IfcRoadPartTypeEnum, 'PEDESTRIAN_CROSSING', INDETERMINATE) -railwaycrossing = express_getattr(IfcRoadPartTypeEnum, 'RAILWAYCROSSING', INDETERMINATE) -refugeisland = express_getattr(IfcRoadPartTypeEnum, 'REFUGEISLAND', INDETERMINATE) -roadsegment = express_getattr(IfcRoadPartTypeEnum, 'ROADSEGMENT', INDETERMINATE) -roadside = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDE', INDETERMINATE) -roadsidepart = express_getattr(IfcRoadPartTypeEnum, 'ROADSIDEPART', INDETERMINATE) -roadwayplateau = express_getattr(IfcRoadPartTypeEnum, 'ROADWAYPLATEAU', INDETERMINATE) -roundabout = express_getattr(IfcRoadPartTypeEnum, 'ROUNDABOUT', INDETERMINATE) -shoulder = express_getattr(IfcRoadPartTypeEnum, 'SHOULDER', INDETERMINATE) -sidewalk = express_getattr(IfcRoadPartTypeEnum, 'SIDEWALK', INDETERMINATE) -softshoulder = express_getattr(IfcRoadPartTypeEnum, 'SOFTSHOULDER', INDETERMINATE) -tollplaza = express_getattr(IfcRoadPartTypeEnum, 'TOLLPLAZA', INDETERMINATE) -trafficisland = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICISLAND', INDETERMINATE) -trafficlane = express_getattr(IfcRoadPartTypeEnum, 'TRAFFICLANE', INDETERMINATE) -userdefined = express_getattr(IfcRoadPartTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadPartTypeEnum, 'NOTDEFINED', INDETERMINATE) +bicyclecrossing = IfcRoadPartTypeEnum.BICYCLECROSSING +bus_stop = IfcRoadPartTypeEnum.BUS_STOP +carriageway = IfcRoadPartTypeEnum.CARRIAGEWAY +centralisland = IfcRoadPartTypeEnum.CENTRALISLAND +centralreserve = IfcRoadPartTypeEnum.CENTRALRESERVE +hardshoulder = IfcRoadPartTypeEnum.HARDSHOULDER +intersection = IfcRoadPartTypeEnum.INTERSECTION +layby = IfcRoadPartTypeEnum.LAYBY +parkingbay = IfcRoadPartTypeEnum.PARKINGBAY +passingbay = IfcRoadPartTypeEnum.PASSINGBAY +pedestrian_crossing = IfcRoadPartTypeEnum.PEDESTRIAN_CROSSING +railwaycrossing = IfcRoadPartTypeEnum.RAILWAYCROSSING +refugeisland = IfcRoadPartTypeEnum.REFUGEISLAND +roadsegment = IfcRoadPartTypeEnum.ROADSEGMENT +roadside = IfcRoadPartTypeEnum.ROADSIDE +roadsidepart = IfcRoadPartTypeEnum.ROADSIDEPART +roadwayplateau = IfcRoadPartTypeEnum.ROADWAYPLATEAU +roundabout = IfcRoadPartTypeEnum.ROUNDABOUT +shoulder = IfcRoadPartTypeEnum.SHOULDER +sidewalk = IfcRoadPartTypeEnum.SIDEWALK +softshoulder = IfcRoadPartTypeEnum.SOFTSHOULDER +tollplaza = IfcRoadPartTypeEnum.TOLLPLAZA +trafficisland = IfcRoadPartTypeEnum.TRAFFICISLAND +trafficlane = IfcRoadPartTypeEnum.TRAFFICLANE +userdefined = IfcRoadPartTypeEnum.USERDEFINED +notdefined = IfcRoadPartTypeEnum.NOTDEFINED IfcRoadTypeEnum = enum_namespace() -userdefined = express_getattr(IfcRoadTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoadTypeEnum, 'NOTDEFINED', INDETERMINATE) +userdefined = IfcRoadTypeEnum.USERDEFINED +notdefined = IfcRoadTypeEnum.NOTDEFINED IfcRoleEnum = enum_namespace() -architect = express_getattr(IfcRoleEnum, 'ARCHITECT', INDETERMINATE) -buildingoperator = express_getattr(IfcRoleEnum, 'BUILDINGOPERATOR', INDETERMINATE) -buildingowner = express_getattr(IfcRoleEnum, 'BUILDINGOWNER', INDETERMINATE) -civilengineer = express_getattr(IfcRoleEnum, 'CIVILENGINEER', INDETERMINATE) -client = express_getattr(IfcRoleEnum, 'CLIENT', INDETERMINATE) -commissioningengineer = express_getattr(IfcRoleEnum, 'COMMISSIONINGENGINEER', INDETERMINATE) -constructionmanager = express_getattr(IfcRoleEnum, 'CONSTRUCTIONMANAGER', INDETERMINATE) -consultant = express_getattr(IfcRoleEnum, 'CONSULTANT', INDETERMINATE) -contractor = express_getattr(IfcRoleEnum, 'CONTRACTOR', INDETERMINATE) -costengineer = express_getattr(IfcRoleEnum, 'COSTENGINEER', INDETERMINATE) -electricalengineer = express_getattr(IfcRoleEnum, 'ELECTRICALENGINEER', INDETERMINATE) -engineer = express_getattr(IfcRoleEnum, 'ENGINEER', INDETERMINATE) -facilitiesmanager = express_getattr(IfcRoleEnum, 'FACILITIESMANAGER', INDETERMINATE) -fieldconstructionmanager = express_getattr(IfcRoleEnum, 'FIELDCONSTRUCTIONMANAGER', INDETERMINATE) -manufacturer = express_getattr(IfcRoleEnum, 'MANUFACTURER', INDETERMINATE) -mechanicalengineer = express_getattr(IfcRoleEnum, 'MECHANICALENGINEER', INDETERMINATE) -owner = express_getattr(IfcRoleEnum, 'OWNER', INDETERMINATE) -projectmanager = express_getattr(IfcRoleEnum, 'PROJECTMANAGER', INDETERMINATE) -reseller = express_getattr(IfcRoleEnum, 'RESELLER', INDETERMINATE) -structuralengineer = express_getattr(IfcRoleEnum, 'STRUCTURALENGINEER', INDETERMINATE) -subcontractor = express_getattr(IfcRoleEnum, 'SUBCONTRACTOR', INDETERMINATE) -supplier = express_getattr(IfcRoleEnum, 'SUPPLIER', INDETERMINATE) -userdefined = express_getattr(IfcRoleEnum, 'USERDEFINED', INDETERMINATE) +architect = IfcRoleEnum.ARCHITECT +buildingoperator = IfcRoleEnum.BUILDINGOPERATOR +buildingowner = IfcRoleEnum.BUILDINGOWNER +civilengineer = IfcRoleEnum.CIVILENGINEER +client = IfcRoleEnum.CLIENT +commissioningengineer = IfcRoleEnum.COMMISSIONINGENGINEER +constructionmanager = IfcRoleEnum.CONSTRUCTIONMANAGER +consultant = IfcRoleEnum.CONSULTANT +contractor = IfcRoleEnum.CONTRACTOR +costengineer = IfcRoleEnum.COSTENGINEER +electricalengineer = IfcRoleEnum.ELECTRICALENGINEER +engineer = IfcRoleEnum.ENGINEER +facilitiesmanager = IfcRoleEnum.FACILITIESMANAGER +fieldconstructionmanager = IfcRoleEnum.FIELDCONSTRUCTIONMANAGER +manufacturer = IfcRoleEnum.MANUFACTURER +mechanicalengineer = IfcRoleEnum.MECHANICALENGINEER +owner = IfcRoleEnum.OWNER +projectmanager = IfcRoleEnum.PROJECTMANAGER +reseller = IfcRoleEnum.RESELLER +structuralengineer = IfcRoleEnum.STRUCTURALENGINEER +subcontractor = IfcRoleEnum.SUBCONTRACTOR +supplier = IfcRoleEnum.SUPPLIER +userdefined = IfcRoleEnum.USERDEFINED IfcRoofTypeEnum = enum_namespace() -barrel_roof = express_getattr(IfcRoofTypeEnum, 'BARREL_ROOF', INDETERMINATE) -butterfly_roof = express_getattr(IfcRoofTypeEnum, 'BUTTERFLY_ROOF', INDETERMINATE) -dome_roof = express_getattr(IfcRoofTypeEnum, 'DOME_ROOF', INDETERMINATE) -flat_roof = express_getattr(IfcRoofTypeEnum, 'FLAT_ROOF', INDETERMINATE) -freeform = express_getattr(IfcRoofTypeEnum, 'FREEFORM', INDETERMINATE) -gable_roof = express_getattr(IfcRoofTypeEnum, 'GABLE_ROOF', INDETERMINATE) -gambrel_roof = express_getattr(IfcRoofTypeEnum, 'GAMBREL_ROOF', INDETERMINATE) -hipped_gable_roof = express_getattr(IfcRoofTypeEnum, 'HIPPED_GABLE_ROOF', INDETERMINATE) -hip_roof = express_getattr(IfcRoofTypeEnum, 'HIP_ROOF', INDETERMINATE) -mansard_roof = express_getattr(IfcRoofTypeEnum, 'MANSARD_ROOF', INDETERMINATE) -pavilion_roof = express_getattr(IfcRoofTypeEnum, 'PAVILION_ROOF', INDETERMINATE) -rainbow_roof = express_getattr(IfcRoofTypeEnum, 'RAINBOW_ROOF', INDETERMINATE) -shed_roof = express_getattr(IfcRoofTypeEnum, 'SHED_ROOF', INDETERMINATE) -userdefined = express_getattr(IfcRoofTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcRoofTypeEnum, 'NOTDEFINED', INDETERMINATE) +barrel_roof = IfcRoofTypeEnum.BARREL_ROOF +butterfly_roof = IfcRoofTypeEnum.BUTTERFLY_ROOF +dome_roof = IfcRoofTypeEnum.DOME_ROOF +flat_roof = IfcRoofTypeEnum.FLAT_ROOF +freeform = IfcRoofTypeEnum.FREEFORM +gable_roof = IfcRoofTypeEnum.GABLE_ROOF +gambrel_roof = IfcRoofTypeEnum.GAMBREL_ROOF +hipped_gable_roof = IfcRoofTypeEnum.HIPPED_GABLE_ROOF +hip_roof = IfcRoofTypeEnum.HIP_ROOF +mansard_roof = IfcRoofTypeEnum.MANSARD_ROOF +pavilion_roof = IfcRoofTypeEnum.PAVILION_ROOF +rainbow_roof = IfcRoofTypeEnum.RAINBOW_ROOF +shed_roof = IfcRoofTypeEnum.SHED_ROOF +userdefined = IfcRoofTypeEnum.USERDEFINED +notdefined = IfcRoofTypeEnum.NOTDEFINED IfcSIPrefix = enum_namespace() -atto = express_getattr(IfcSIPrefix, 'ATTO', INDETERMINATE) -centi = express_getattr(IfcSIPrefix, 'CENTI', INDETERMINATE) -deca = express_getattr(IfcSIPrefix, 'DECA', INDETERMINATE) -deci = express_getattr(IfcSIPrefix, 'DECI', INDETERMINATE) -exa = express_getattr(IfcSIPrefix, 'EXA', INDETERMINATE) -femto = express_getattr(IfcSIPrefix, 'FEMTO', INDETERMINATE) -giga = express_getattr(IfcSIPrefix, 'GIGA', INDETERMINATE) -hecto = express_getattr(IfcSIPrefix, 'HECTO', INDETERMINATE) -kilo = express_getattr(IfcSIPrefix, 'KILO', INDETERMINATE) -mega = express_getattr(IfcSIPrefix, 'MEGA', INDETERMINATE) -micro = express_getattr(IfcSIPrefix, 'MICRO', INDETERMINATE) -milli = express_getattr(IfcSIPrefix, 'MILLI', INDETERMINATE) -nano = express_getattr(IfcSIPrefix, 'NANO', INDETERMINATE) -peta = express_getattr(IfcSIPrefix, 'PETA', INDETERMINATE) -pico = express_getattr(IfcSIPrefix, 'PICO', INDETERMINATE) -tera = express_getattr(IfcSIPrefix, 'TERA', INDETERMINATE) +atto = IfcSIPrefix.ATTO +centi = IfcSIPrefix.CENTI +deca = IfcSIPrefix.DECA +deci = IfcSIPrefix.DECI +exa = IfcSIPrefix.EXA +femto = IfcSIPrefix.FEMTO +giga = IfcSIPrefix.GIGA +hecto = IfcSIPrefix.HECTO +kilo = IfcSIPrefix.KILO +mega = IfcSIPrefix.MEGA +micro = IfcSIPrefix.MICRO +milli = IfcSIPrefix.MILLI +nano = IfcSIPrefix.NANO +peta = IfcSIPrefix.PETA +pico = IfcSIPrefix.PICO +tera = IfcSIPrefix.TERA IfcSIUnitName = enum_namespace() -ampere = express_getattr(IfcSIUnitName, 'AMPERE', INDETERMINATE) -becquerel = express_getattr(IfcSIUnitName, 'BECQUEREL', INDETERMINATE) -candela = express_getattr(IfcSIUnitName, 'CANDELA', INDETERMINATE) -coulomb = express_getattr(IfcSIUnitName, 'COULOMB', INDETERMINATE) -cubic_metre = express_getattr(IfcSIUnitName, 'CUBIC_METRE', INDETERMINATE) -degree_celsius = express_getattr(IfcSIUnitName, 'DEGREE_CELSIUS', INDETERMINATE) -farad = express_getattr(IfcSIUnitName, 'FARAD', INDETERMINATE) -gram = express_getattr(IfcSIUnitName, 'GRAM', INDETERMINATE) -gray = express_getattr(IfcSIUnitName, 'GRAY', INDETERMINATE) -henry = express_getattr(IfcSIUnitName, 'HENRY', INDETERMINATE) -hertz = express_getattr(IfcSIUnitName, 'HERTZ', INDETERMINATE) -joule = express_getattr(IfcSIUnitName, 'JOULE', INDETERMINATE) -kelvin = express_getattr(IfcSIUnitName, 'KELVIN', INDETERMINATE) -lumen = express_getattr(IfcSIUnitName, 'LUMEN', INDETERMINATE) -lux = express_getattr(IfcSIUnitName, 'LUX', INDETERMINATE) -metre = express_getattr(IfcSIUnitName, 'METRE', INDETERMINATE) -mole = express_getattr(IfcSIUnitName, 'MOLE', INDETERMINATE) -newton = express_getattr(IfcSIUnitName, 'NEWTON', INDETERMINATE) -ohm = express_getattr(IfcSIUnitName, 'OHM', INDETERMINATE) -pascal = express_getattr(IfcSIUnitName, 'PASCAL', INDETERMINATE) -radian = express_getattr(IfcSIUnitName, 'RADIAN', INDETERMINATE) -second = express_getattr(IfcSIUnitName, 'SECOND', INDETERMINATE) -siemens = express_getattr(IfcSIUnitName, 'SIEMENS', INDETERMINATE) -sievert = express_getattr(IfcSIUnitName, 'SIEVERT', INDETERMINATE) -square_metre = express_getattr(IfcSIUnitName, 'SQUARE_METRE', INDETERMINATE) -steradian = express_getattr(IfcSIUnitName, 'STERADIAN', INDETERMINATE) -tesla = express_getattr(IfcSIUnitName, 'TESLA', INDETERMINATE) -volt = express_getattr(IfcSIUnitName, 'VOLT', INDETERMINATE) -watt = express_getattr(IfcSIUnitName, 'WATT', INDETERMINATE) -weber = express_getattr(IfcSIUnitName, 'WEBER', INDETERMINATE) +ampere = IfcSIUnitName.AMPERE +becquerel = IfcSIUnitName.BECQUEREL +candela = IfcSIUnitName.CANDELA +coulomb = IfcSIUnitName.COULOMB +cubic_metre = IfcSIUnitName.CUBIC_METRE +degree_celsius = IfcSIUnitName.DEGREE_CELSIUS +farad = IfcSIUnitName.FARAD +gram = IfcSIUnitName.GRAM +gray = IfcSIUnitName.GRAY +henry = IfcSIUnitName.HENRY +hertz = IfcSIUnitName.HERTZ +joule = IfcSIUnitName.JOULE +kelvin = IfcSIUnitName.KELVIN +lumen = IfcSIUnitName.LUMEN +lux = IfcSIUnitName.LUX +metre = IfcSIUnitName.METRE +mole = IfcSIUnitName.MOLE +newton = IfcSIUnitName.NEWTON +ohm = IfcSIUnitName.OHM +pascal = IfcSIUnitName.PASCAL +radian = IfcSIUnitName.RADIAN +second = IfcSIUnitName.SECOND +siemens = IfcSIUnitName.SIEMENS +sievert = IfcSIUnitName.SIEVERT +square_metre = IfcSIUnitName.SQUARE_METRE +steradian = IfcSIUnitName.STERADIAN +tesla = IfcSIUnitName.TESLA +volt = IfcSIUnitName.VOLT +watt = IfcSIUnitName.WATT +weber = IfcSIUnitName.WEBER IfcSanitaryTerminalTypeEnum = enum_namespace() -bath = express_getattr(IfcSanitaryTerminalTypeEnum, 'BATH', INDETERMINATE) -bidet = express_getattr(IfcSanitaryTerminalTypeEnum, 'BIDET', INDETERMINATE) -cistern = express_getattr(IfcSanitaryTerminalTypeEnum, 'CISTERN', INDETERMINATE) -sanitaryfountain = express_getattr(IfcSanitaryTerminalTypeEnum, 'SANITARYFOUNTAIN', INDETERMINATE) -shower = express_getattr(IfcSanitaryTerminalTypeEnum, 'SHOWER', INDETERMINATE) -sink = express_getattr(IfcSanitaryTerminalTypeEnum, 'SINK', INDETERMINATE) -toiletpan = express_getattr(IfcSanitaryTerminalTypeEnum, 'TOILETPAN', INDETERMINATE) -urinal = express_getattr(IfcSanitaryTerminalTypeEnum, 'URINAL', INDETERMINATE) -washhandbasin = express_getattr(IfcSanitaryTerminalTypeEnum, 'WASHHANDBASIN', INDETERMINATE) -wcseat = express_getattr(IfcSanitaryTerminalTypeEnum, 'WCSEAT', INDETERMINATE) -userdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSanitaryTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +bath = IfcSanitaryTerminalTypeEnum.BATH +bidet = IfcSanitaryTerminalTypeEnum.BIDET +cistern = IfcSanitaryTerminalTypeEnum.CISTERN +sanitaryfountain = IfcSanitaryTerminalTypeEnum.SANITARYFOUNTAIN +shower = IfcSanitaryTerminalTypeEnum.SHOWER +sink = IfcSanitaryTerminalTypeEnum.SINK +toiletpan = IfcSanitaryTerminalTypeEnum.TOILETPAN +urinal = IfcSanitaryTerminalTypeEnum.URINAL +washhandbasin = IfcSanitaryTerminalTypeEnum.WASHHANDBASIN +wcseat = IfcSanitaryTerminalTypeEnum.WCSEAT +userdefined = IfcSanitaryTerminalTypeEnum.USERDEFINED +notdefined = IfcSanitaryTerminalTypeEnum.NOTDEFINED IfcSectionTypeEnum = enum_namespace() -tapered = express_getattr(IfcSectionTypeEnum, 'TAPERED', INDETERMINATE) -uniform = express_getattr(IfcSectionTypeEnum, 'UNIFORM', INDETERMINATE) +tapered = IfcSectionTypeEnum.TAPERED +uniform = IfcSectionTypeEnum.UNIFORM IfcSensorTypeEnum = enum_namespace() -co2sensor = express_getattr(IfcSensorTypeEnum, 'CO2SENSOR', INDETERMINATE) -conductancesensor = express_getattr(IfcSensorTypeEnum, 'CONDUCTANCESENSOR', INDETERMINATE) -contactsensor = express_getattr(IfcSensorTypeEnum, 'CONTACTSENSOR', INDETERMINATE) -cosensor = express_getattr(IfcSensorTypeEnum, 'COSENSOR', INDETERMINATE) -earthquakesensor = express_getattr(IfcSensorTypeEnum, 'EARTHQUAKESENSOR', INDETERMINATE) -firesensor = express_getattr(IfcSensorTypeEnum, 'FIRESENSOR', INDETERMINATE) -flowsensor = express_getattr(IfcSensorTypeEnum, 'FLOWSENSOR', INDETERMINATE) -foreignobjectdetectionsensor = express_getattr(IfcSensorTypeEnum, 'FOREIGNOBJECTDETECTIONSENSOR', INDETERMINATE) -frostsensor = express_getattr(IfcSensorTypeEnum, 'FROSTSENSOR', INDETERMINATE) -gassensor = express_getattr(IfcSensorTypeEnum, 'GASSENSOR', INDETERMINATE) -heatsensor = express_getattr(IfcSensorTypeEnum, 'HEATSENSOR', INDETERMINATE) -humiditysensor = express_getattr(IfcSensorTypeEnum, 'HUMIDITYSENSOR', INDETERMINATE) -identifiersensor = express_getattr(IfcSensorTypeEnum, 'IDENTIFIERSENSOR', INDETERMINATE) -ionconcentrationsensor = express_getattr(IfcSensorTypeEnum, 'IONCONCENTRATIONSENSOR', INDETERMINATE) -levelsensor = express_getattr(IfcSensorTypeEnum, 'LEVELSENSOR', INDETERMINATE) -lightsensor = express_getattr(IfcSensorTypeEnum, 'LIGHTSENSOR', INDETERMINATE) -moisturesensor = express_getattr(IfcSensorTypeEnum, 'MOISTURESENSOR', INDETERMINATE) -movementsensor = express_getattr(IfcSensorTypeEnum, 'MOVEMENTSENSOR', INDETERMINATE) -obstaclesensor = express_getattr(IfcSensorTypeEnum, 'OBSTACLESENSOR', INDETERMINATE) -phsensor = express_getattr(IfcSensorTypeEnum, 'PHSENSOR', INDETERMINATE) -pressuresensor = express_getattr(IfcSensorTypeEnum, 'PRESSURESENSOR', INDETERMINATE) -radiationsensor = express_getattr(IfcSensorTypeEnum, 'RADIATIONSENSOR', INDETERMINATE) -radioactivitysensor = express_getattr(IfcSensorTypeEnum, 'RADIOACTIVITYSENSOR', INDETERMINATE) -rainsensor = express_getattr(IfcSensorTypeEnum, 'RAINSENSOR', INDETERMINATE) -smokesensor = express_getattr(IfcSensorTypeEnum, 'SMOKESENSOR', INDETERMINATE) -snowdepthsensor = express_getattr(IfcSensorTypeEnum, 'SNOWDEPTHSENSOR', INDETERMINATE) -soundsensor = express_getattr(IfcSensorTypeEnum, 'SOUNDSENSOR', INDETERMINATE) -temperaturesensor = express_getattr(IfcSensorTypeEnum, 'TEMPERATURESENSOR', INDETERMINATE) -trainsensor = express_getattr(IfcSensorTypeEnum, 'TRAINSENSOR', INDETERMINATE) -turnoutclosuresensor = express_getattr(IfcSensorTypeEnum, 'TURNOUTCLOSURESENSOR', INDETERMINATE) -wheelsensor = express_getattr(IfcSensorTypeEnum, 'WHEELSENSOR', INDETERMINATE) -windsensor = express_getattr(IfcSensorTypeEnum, 'WINDSENSOR', INDETERMINATE) -userdefined = express_getattr(IfcSensorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSensorTypeEnum, 'NOTDEFINED', INDETERMINATE) +co2sensor = IfcSensorTypeEnum.CO2SENSOR +conductancesensor = IfcSensorTypeEnum.CONDUCTANCESENSOR +contactsensor = IfcSensorTypeEnum.CONTACTSENSOR +cosensor = IfcSensorTypeEnum.COSENSOR +earthquakesensor = IfcSensorTypeEnum.EARTHQUAKESENSOR +firesensor = IfcSensorTypeEnum.FIRESENSOR +flowsensor = IfcSensorTypeEnum.FLOWSENSOR +foreignobjectdetectionsensor = IfcSensorTypeEnum.FOREIGNOBJECTDETECTIONSENSOR +frostsensor = IfcSensorTypeEnum.FROSTSENSOR +gassensor = IfcSensorTypeEnum.GASSENSOR +heatsensor = IfcSensorTypeEnum.HEATSENSOR +humiditysensor = IfcSensorTypeEnum.HUMIDITYSENSOR +identifiersensor = IfcSensorTypeEnum.IDENTIFIERSENSOR +ionconcentrationsensor = IfcSensorTypeEnum.IONCONCENTRATIONSENSOR +levelsensor = IfcSensorTypeEnum.LEVELSENSOR +lightsensor = IfcSensorTypeEnum.LIGHTSENSOR +moisturesensor = IfcSensorTypeEnum.MOISTURESENSOR +movementsensor = IfcSensorTypeEnum.MOVEMENTSENSOR +obstaclesensor = IfcSensorTypeEnum.OBSTACLESENSOR +phsensor = IfcSensorTypeEnum.PHSENSOR +pressuresensor = IfcSensorTypeEnum.PRESSURESENSOR +radiationsensor = IfcSensorTypeEnum.RADIATIONSENSOR +radioactivitysensor = IfcSensorTypeEnum.RADIOACTIVITYSENSOR +rainsensor = IfcSensorTypeEnum.RAINSENSOR +smokesensor = IfcSensorTypeEnum.SMOKESENSOR +snowdepthsensor = IfcSensorTypeEnum.SNOWDEPTHSENSOR +soundsensor = IfcSensorTypeEnum.SOUNDSENSOR +temperaturesensor = IfcSensorTypeEnum.TEMPERATURESENSOR +trainsensor = IfcSensorTypeEnum.TRAINSENSOR +turnoutclosuresensor = IfcSensorTypeEnum.TURNOUTCLOSURESENSOR +wheelsensor = IfcSensorTypeEnum.WHEELSENSOR +windsensor = IfcSensorTypeEnum.WINDSENSOR +userdefined = IfcSensorTypeEnum.USERDEFINED +notdefined = IfcSensorTypeEnum.NOTDEFINED IfcSequenceEnum = enum_namespace() -finish_finish = express_getattr(IfcSequenceEnum, 'FINISH_FINISH', INDETERMINATE) -finish_start = express_getattr(IfcSequenceEnum, 'FINISH_START', INDETERMINATE) -start_finish = express_getattr(IfcSequenceEnum, 'START_FINISH', INDETERMINATE) -start_start = express_getattr(IfcSequenceEnum, 'START_START', INDETERMINATE) -userdefined = express_getattr(IfcSequenceEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSequenceEnum, 'NOTDEFINED', INDETERMINATE) +finish_finish = IfcSequenceEnum.FINISH_FINISH +finish_start = IfcSequenceEnum.FINISH_START +start_finish = IfcSequenceEnum.START_FINISH +start_start = IfcSequenceEnum.START_START +userdefined = IfcSequenceEnum.USERDEFINED +notdefined = IfcSequenceEnum.NOTDEFINED IfcShadingDeviceTypeEnum = enum_namespace() -awning = express_getattr(IfcShadingDeviceTypeEnum, 'AWNING', INDETERMINATE) -jalousie = express_getattr(IfcShadingDeviceTypeEnum, 'JALOUSIE', INDETERMINATE) -shutter = express_getattr(IfcShadingDeviceTypeEnum, 'SHUTTER', INDETERMINATE) -userdefined = express_getattr(IfcShadingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcShadingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +awning = IfcShadingDeviceTypeEnum.AWNING +jalousie = IfcShadingDeviceTypeEnum.JALOUSIE +shutter = IfcShadingDeviceTypeEnum.SHUTTER +userdefined = IfcShadingDeviceTypeEnum.USERDEFINED +notdefined = IfcShadingDeviceTypeEnum.NOTDEFINED IfcSignTypeEnum = enum_namespace() -marker = express_getattr(IfcSignTypeEnum, 'MARKER', INDETERMINATE) -mirror = express_getattr(IfcSignTypeEnum, 'MIRROR', INDETERMINATE) -pictoral = express_getattr(IfcSignTypeEnum, 'PICTORAL', INDETERMINATE) -userdefined = express_getattr(IfcSignTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignTypeEnum, 'NOTDEFINED', INDETERMINATE) +marker = IfcSignTypeEnum.MARKER +mirror = IfcSignTypeEnum.MIRROR +pictoral = IfcSignTypeEnum.PICTORAL +userdefined = IfcSignTypeEnum.USERDEFINED +notdefined = IfcSignTypeEnum.NOTDEFINED IfcSignalTypeEnum = enum_namespace() -audio = express_getattr(IfcSignalTypeEnum, 'AUDIO', INDETERMINATE) -mixed = express_getattr(IfcSignalTypeEnum, 'MIXED', INDETERMINATE) -visual = express_getattr(IfcSignalTypeEnum, 'VISUAL', INDETERMINATE) -userdefined = express_getattr(IfcSignalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSignalTypeEnum, 'NOTDEFINED', INDETERMINATE) +audio = IfcSignalTypeEnum.AUDIO +mixed = IfcSignalTypeEnum.MIXED +visual = IfcSignalTypeEnum.VISUAL +userdefined = IfcSignalTypeEnum.USERDEFINED +notdefined = IfcSignalTypeEnum.NOTDEFINED IfcSimplePropertyTemplateTypeEnum = enum_namespace() -p_boundedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_BOUNDEDVALUE', INDETERMINATE) -p_enumeratedvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_ENUMERATEDVALUE', INDETERMINATE) -p_listvalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_LISTVALUE', INDETERMINATE) -p_referencevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_REFERENCEVALUE', INDETERMINATE) -p_singlevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_SINGLEVALUE', INDETERMINATE) -p_tablevalue = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'P_TABLEVALUE', INDETERMINATE) -q_area = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_AREA', INDETERMINATE) -q_count = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_COUNT', INDETERMINATE) -q_length = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_LENGTH', INDETERMINATE) -q_number = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_NUMBER', INDETERMINATE) -q_time = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_TIME', INDETERMINATE) -q_volume = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_VOLUME', INDETERMINATE) -q_weight = express_getattr(IfcSimplePropertyTemplateTypeEnum, 'Q_WEIGHT', INDETERMINATE) +p_boundedvalue = IfcSimplePropertyTemplateTypeEnum.P_BOUNDEDVALUE +p_enumeratedvalue = IfcSimplePropertyTemplateTypeEnum.P_ENUMERATEDVALUE +p_listvalue = IfcSimplePropertyTemplateTypeEnum.P_LISTVALUE +p_referencevalue = IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE +p_singlevalue = IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE +p_tablevalue = IfcSimplePropertyTemplateTypeEnum.P_TABLEVALUE +q_area = IfcSimplePropertyTemplateTypeEnum.Q_AREA +q_count = IfcSimplePropertyTemplateTypeEnum.Q_COUNT +q_length = IfcSimplePropertyTemplateTypeEnum.Q_LENGTH +q_number = IfcSimplePropertyTemplateTypeEnum.Q_NUMBER +q_time = IfcSimplePropertyTemplateTypeEnum.Q_TIME +q_volume = IfcSimplePropertyTemplateTypeEnum.Q_VOLUME +q_weight = IfcSimplePropertyTemplateTypeEnum.Q_WEIGHT IfcSlabTypeEnum = enum_namespace() -approach_slab = express_getattr(IfcSlabTypeEnum, 'APPROACH_SLAB', INDETERMINATE) -baseslab = express_getattr(IfcSlabTypeEnum, 'BASESLAB', INDETERMINATE) -floor = express_getattr(IfcSlabTypeEnum, 'FLOOR', INDETERMINATE) -landing = express_getattr(IfcSlabTypeEnum, 'LANDING', INDETERMINATE) -paving = express_getattr(IfcSlabTypeEnum, 'PAVING', INDETERMINATE) -roof = express_getattr(IfcSlabTypeEnum, 'ROOF', INDETERMINATE) -sidewalk = express_getattr(IfcSlabTypeEnum, 'SIDEWALK', INDETERMINATE) -trackslab = express_getattr(IfcSlabTypeEnum, 'TRACKSLAB', INDETERMINATE) -wearing = express_getattr(IfcSlabTypeEnum, 'WEARING', INDETERMINATE) -userdefined = express_getattr(IfcSlabTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSlabTypeEnum, 'NOTDEFINED', INDETERMINATE) +approach_slab = IfcSlabTypeEnum.APPROACH_SLAB +baseslab = IfcSlabTypeEnum.BASESLAB +floor = IfcSlabTypeEnum.FLOOR +landing = IfcSlabTypeEnum.LANDING +paving = IfcSlabTypeEnum.PAVING +roof = IfcSlabTypeEnum.ROOF +sidewalk = IfcSlabTypeEnum.SIDEWALK +trackslab = IfcSlabTypeEnum.TRACKSLAB +wearing = IfcSlabTypeEnum.WEARING +userdefined = IfcSlabTypeEnum.USERDEFINED +notdefined = IfcSlabTypeEnum.NOTDEFINED IfcSolarDeviceTypeEnum = enum_namespace() -solarcollector = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARCOLLECTOR', INDETERMINATE) -solarpanel = express_getattr(IfcSolarDeviceTypeEnum, 'SOLARPANEL', INDETERMINATE) -userdefined = express_getattr(IfcSolarDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSolarDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +solarcollector = IfcSolarDeviceTypeEnum.SOLARCOLLECTOR +solarpanel = IfcSolarDeviceTypeEnum.SOLARPANEL +userdefined = IfcSolarDeviceTypeEnum.USERDEFINED +notdefined = IfcSolarDeviceTypeEnum.NOTDEFINED IfcSpaceHeaterTypeEnum = enum_namespace() -convector = express_getattr(IfcSpaceHeaterTypeEnum, 'CONVECTOR', INDETERMINATE) -radiator = express_getattr(IfcSpaceHeaterTypeEnum, 'RADIATOR', INDETERMINATE) -userdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceHeaterTypeEnum, 'NOTDEFINED', INDETERMINATE) +convector = IfcSpaceHeaterTypeEnum.CONVECTOR +radiator = IfcSpaceHeaterTypeEnum.RADIATOR +userdefined = IfcSpaceHeaterTypeEnum.USERDEFINED +notdefined = IfcSpaceHeaterTypeEnum.NOTDEFINED IfcSpaceTypeEnum = enum_namespace() -berth = express_getattr(IfcSpaceTypeEnum, 'BERTH', INDETERMINATE) -external = express_getattr(IfcSpaceTypeEnum, 'EXTERNAL', INDETERMINATE) -gfa = express_getattr(IfcSpaceTypeEnum, 'GFA', INDETERMINATE) -internal = express_getattr(IfcSpaceTypeEnum, 'INTERNAL', INDETERMINATE) -parking = express_getattr(IfcSpaceTypeEnum, 'PARKING', INDETERMINATE) -space = express_getattr(IfcSpaceTypeEnum, 'SPACE', INDETERMINATE) -userdefined = express_getattr(IfcSpaceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpaceTypeEnum, 'NOTDEFINED', INDETERMINATE) +berth = IfcSpaceTypeEnum.BERTH +external = IfcSpaceTypeEnum.EXTERNAL +gfa = IfcSpaceTypeEnum.GFA +internal = IfcSpaceTypeEnum.INTERNAL +parking = IfcSpaceTypeEnum.PARKING +space = IfcSpaceTypeEnum.SPACE +userdefined = IfcSpaceTypeEnum.USERDEFINED +notdefined = IfcSpaceTypeEnum.NOTDEFINED IfcSpatialZoneTypeEnum = enum_namespace() -construction = express_getattr(IfcSpatialZoneTypeEnum, 'CONSTRUCTION', INDETERMINATE) -firesafety = express_getattr(IfcSpatialZoneTypeEnum, 'FIRESAFETY', INDETERMINATE) -interference = express_getattr(IfcSpatialZoneTypeEnum, 'INTERFERENCE', INDETERMINATE) -lighting = express_getattr(IfcSpatialZoneTypeEnum, 'LIGHTING', INDETERMINATE) -occupancy = express_getattr(IfcSpatialZoneTypeEnum, 'OCCUPANCY', INDETERMINATE) -reservation = express_getattr(IfcSpatialZoneTypeEnum, 'RESERVATION', INDETERMINATE) -security = express_getattr(IfcSpatialZoneTypeEnum, 'SECURITY', INDETERMINATE) -thermal = express_getattr(IfcSpatialZoneTypeEnum, 'THERMAL', INDETERMINATE) -transport = express_getattr(IfcSpatialZoneTypeEnum, 'TRANSPORT', INDETERMINATE) -ventilation = express_getattr(IfcSpatialZoneTypeEnum, 'VENTILATION', INDETERMINATE) -userdefined = express_getattr(IfcSpatialZoneTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSpatialZoneTypeEnum, 'NOTDEFINED', INDETERMINATE) +construction = IfcSpatialZoneTypeEnum.CONSTRUCTION +firesafety = IfcSpatialZoneTypeEnum.FIRESAFETY +interference = IfcSpatialZoneTypeEnum.INTERFERENCE +lighting = IfcSpatialZoneTypeEnum.LIGHTING +occupancy = IfcSpatialZoneTypeEnum.OCCUPANCY +reservation = IfcSpatialZoneTypeEnum.RESERVATION +security = IfcSpatialZoneTypeEnum.SECURITY +thermal = IfcSpatialZoneTypeEnum.THERMAL +transport = IfcSpatialZoneTypeEnum.TRANSPORT +ventilation = IfcSpatialZoneTypeEnum.VENTILATION +userdefined = IfcSpatialZoneTypeEnum.USERDEFINED +notdefined = IfcSpatialZoneTypeEnum.NOTDEFINED IfcStackTerminalTypeEnum = enum_namespace() -birdcage = express_getattr(IfcStackTerminalTypeEnum, 'BIRDCAGE', INDETERMINATE) -cowl = express_getattr(IfcStackTerminalTypeEnum, 'COWL', INDETERMINATE) -rainwaterhopper = express_getattr(IfcStackTerminalTypeEnum, 'RAINWATERHOPPER', INDETERMINATE) -userdefined = express_getattr(IfcStackTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStackTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +birdcage = IfcStackTerminalTypeEnum.BIRDCAGE +cowl = IfcStackTerminalTypeEnum.COWL +rainwaterhopper = IfcStackTerminalTypeEnum.RAINWATERHOPPER +userdefined = IfcStackTerminalTypeEnum.USERDEFINED +notdefined = IfcStackTerminalTypeEnum.NOTDEFINED IfcStairFlightTypeEnum = enum_namespace() -curved = express_getattr(IfcStairFlightTypeEnum, 'CURVED', INDETERMINATE) -freeform = express_getattr(IfcStairFlightTypeEnum, 'FREEFORM', INDETERMINATE) -spiral = express_getattr(IfcStairFlightTypeEnum, 'SPIRAL', INDETERMINATE) -straight = express_getattr(IfcStairFlightTypeEnum, 'STRAIGHT', INDETERMINATE) -winder = express_getattr(IfcStairFlightTypeEnum, 'WINDER', INDETERMINATE) -userdefined = express_getattr(IfcStairFlightTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairFlightTypeEnum, 'NOTDEFINED', INDETERMINATE) +curved = IfcStairFlightTypeEnum.CURVED +freeform = IfcStairFlightTypeEnum.FREEFORM +spiral = IfcStairFlightTypeEnum.SPIRAL +straight = IfcStairFlightTypeEnum.STRAIGHT +winder = IfcStairFlightTypeEnum.WINDER +userdefined = IfcStairFlightTypeEnum.USERDEFINED +notdefined = IfcStairFlightTypeEnum.NOTDEFINED IfcStairTypeEnum = enum_namespace() -curved_run_stair = express_getattr(IfcStairTypeEnum, 'CURVED_RUN_STAIR', INDETERMINATE) -double_return_stair = express_getattr(IfcStairTypeEnum, 'DOUBLE_RETURN_STAIR', INDETERMINATE) -half_turn_stair = express_getattr(IfcStairTypeEnum, 'HALF_TURN_STAIR', INDETERMINATE) -half_winding_stair = express_getattr(IfcStairTypeEnum, 'HALF_WINDING_STAIR', INDETERMINATE) -ladder = express_getattr(IfcStairTypeEnum, 'LADDER', INDETERMINATE) -quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_TURN_STAIR', INDETERMINATE) -quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'QUARTER_WINDING_STAIR', INDETERMINATE) -spiral_stair = express_getattr(IfcStairTypeEnum, 'SPIRAL_STAIR', INDETERMINATE) -straight_run_stair = express_getattr(IfcStairTypeEnum, 'STRAIGHT_RUN_STAIR', INDETERMINATE) -three_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_TURN_STAIR', INDETERMINATE) -three_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'THREE_QUARTER_WINDING_STAIR', INDETERMINATE) -two_curved_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_CURVED_RUN_STAIR', INDETERMINATE) -two_quarter_turn_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_TURN_STAIR', INDETERMINATE) -two_quarter_winding_stair = express_getattr(IfcStairTypeEnum, 'TWO_QUARTER_WINDING_STAIR', INDETERMINATE) -two_straight_run_stair = express_getattr(IfcStairTypeEnum, 'TWO_STRAIGHT_RUN_STAIR', INDETERMINATE) -userdefined = express_getattr(IfcStairTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStairTypeEnum, 'NOTDEFINED', INDETERMINATE) +curved_run_stair = IfcStairTypeEnum.CURVED_RUN_STAIR +double_return_stair = IfcStairTypeEnum.DOUBLE_RETURN_STAIR +half_turn_stair = IfcStairTypeEnum.HALF_TURN_STAIR +half_winding_stair = IfcStairTypeEnum.HALF_WINDING_STAIR +ladder = IfcStairTypeEnum.LADDER +quarter_turn_stair = IfcStairTypeEnum.QUARTER_TURN_STAIR +quarter_winding_stair = IfcStairTypeEnum.QUARTER_WINDING_STAIR +spiral_stair = IfcStairTypeEnum.SPIRAL_STAIR +straight_run_stair = IfcStairTypeEnum.STRAIGHT_RUN_STAIR +three_quarter_turn_stair = IfcStairTypeEnum.THREE_QUARTER_TURN_STAIR +three_quarter_winding_stair = IfcStairTypeEnum.THREE_QUARTER_WINDING_STAIR +two_curved_run_stair = IfcStairTypeEnum.TWO_CURVED_RUN_STAIR +two_quarter_turn_stair = IfcStairTypeEnum.TWO_QUARTER_TURN_STAIR +two_quarter_winding_stair = IfcStairTypeEnum.TWO_QUARTER_WINDING_STAIR +two_straight_run_stair = IfcStairTypeEnum.TWO_STRAIGHT_RUN_STAIR +userdefined = IfcStairTypeEnum.USERDEFINED +notdefined = IfcStairTypeEnum.NOTDEFINED IfcStateEnum = enum_namespace() -locked = express_getattr(IfcStateEnum, 'LOCKED', INDETERMINATE) -readonly = express_getattr(IfcStateEnum, 'READONLY', INDETERMINATE) -readonlylocked = express_getattr(IfcStateEnum, 'READONLYLOCKED', INDETERMINATE) -readwrite = express_getattr(IfcStateEnum, 'READWRITE', INDETERMINATE) -readwritelocked = express_getattr(IfcStateEnum, 'READWRITELOCKED', INDETERMINATE) +locked = IfcStateEnum.LOCKED +readonly = IfcStateEnum.READONLY +readonlylocked = IfcStateEnum.READONLYLOCKED +readwrite = IfcStateEnum.READWRITE +readwritelocked = IfcStateEnum.READWRITELOCKED IfcStructuralCurveActivityTypeEnum = enum_namespace() -const = express_getattr(IfcStructuralCurveActivityTypeEnum, 'CONST', INDETERMINATE) -discrete = express_getattr(IfcStructuralCurveActivityTypeEnum, 'DISCRETE', INDETERMINATE) -equidistant = express_getattr(IfcStructuralCurveActivityTypeEnum, 'EQUIDISTANT', INDETERMINATE) -linear = express_getattr(IfcStructuralCurveActivityTypeEnum, 'LINEAR', INDETERMINATE) -parabola = express_getattr(IfcStructuralCurveActivityTypeEnum, 'PARABOLA', INDETERMINATE) -polygonal = express_getattr(IfcStructuralCurveActivityTypeEnum, 'POLYGONAL', INDETERMINATE) -sinus = express_getattr(IfcStructuralCurveActivityTypeEnum, 'SINUS', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +const = IfcStructuralCurveActivityTypeEnum.CONST +discrete = IfcStructuralCurveActivityTypeEnum.DISCRETE +equidistant = IfcStructuralCurveActivityTypeEnum.EQUIDISTANT +linear = IfcStructuralCurveActivityTypeEnum.LINEAR +parabola = IfcStructuralCurveActivityTypeEnum.PARABOLA +polygonal = IfcStructuralCurveActivityTypeEnum.POLYGONAL +sinus = IfcStructuralCurveActivityTypeEnum.SINUS +userdefined = IfcStructuralCurveActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveActivityTypeEnum.NOTDEFINED IfcStructuralCurveMemberTypeEnum = enum_namespace() -cable = express_getattr(IfcStructuralCurveMemberTypeEnum, 'CABLE', INDETERMINATE) -compression_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'COMPRESSION_MEMBER', INDETERMINATE) -pin_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'PIN_JOINED_MEMBER', INDETERMINATE) -rigid_joined_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'RIGID_JOINED_MEMBER', INDETERMINATE) -tension_member = express_getattr(IfcStructuralCurveMemberTypeEnum, 'TENSION_MEMBER', INDETERMINATE) -userdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralCurveMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +cable = IfcStructuralCurveMemberTypeEnum.CABLE +compression_member = IfcStructuralCurveMemberTypeEnum.COMPRESSION_MEMBER +pin_joined_member = IfcStructuralCurveMemberTypeEnum.PIN_JOINED_MEMBER +rigid_joined_member = IfcStructuralCurveMemberTypeEnum.RIGID_JOINED_MEMBER +tension_member = IfcStructuralCurveMemberTypeEnum.TENSION_MEMBER +userdefined = IfcStructuralCurveMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralCurveMemberTypeEnum.NOTDEFINED IfcStructuralSurfaceActivityTypeEnum = enum_namespace() -bilinear = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'BILINEAR', INDETERMINATE) -const = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'CONST', INDETERMINATE) -discrete = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'DISCRETE', INDETERMINATE) -isocontour = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'ISOCONTOUR', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceActivityTypeEnum, 'NOTDEFINED', INDETERMINATE) +bilinear = IfcStructuralSurfaceActivityTypeEnum.BILINEAR +const = IfcStructuralSurfaceActivityTypeEnum.CONST +discrete = IfcStructuralSurfaceActivityTypeEnum.DISCRETE +isocontour = IfcStructuralSurfaceActivityTypeEnum.ISOCONTOUR +userdefined = IfcStructuralSurfaceActivityTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceActivityTypeEnum.NOTDEFINED IfcStructuralSurfaceMemberTypeEnum = enum_namespace() -bending_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'BENDING_ELEMENT', INDETERMINATE) -membrane_element = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'MEMBRANE_ELEMENT', INDETERMINATE) -shell = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'SHELL', INDETERMINATE) -userdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcStructuralSurfaceMemberTypeEnum, 'NOTDEFINED', INDETERMINATE) +bending_element = IfcStructuralSurfaceMemberTypeEnum.BENDING_ELEMENT +membrane_element = IfcStructuralSurfaceMemberTypeEnum.MEMBRANE_ELEMENT +shell = IfcStructuralSurfaceMemberTypeEnum.SHELL +userdefined = IfcStructuralSurfaceMemberTypeEnum.USERDEFINED +notdefined = IfcStructuralSurfaceMemberTypeEnum.NOTDEFINED IfcSubContractResourceTypeEnum = enum_namespace() -purchase = express_getattr(IfcSubContractResourceTypeEnum, 'PURCHASE', INDETERMINATE) -work = express_getattr(IfcSubContractResourceTypeEnum, 'WORK', INDETERMINATE) -userdefined = express_getattr(IfcSubContractResourceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSubContractResourceTypeEnum, 'NOTDEFINED', INDETERMINATE) +purchase = IfcSubContractResourceTypeEnum.PURCHASE +work = IfcSubContractResourceTypeEnum.WORK +userdefined = IfcSubContractResourceTypeEnum.USERDEFINED +notdefined = IfcSubContractResourceTypeEnum.NOTDEFINED IfcSurfaceFeatureTypeEnum = enum_namespace() -defect = express_getattr(IfcSurfaceFeatureTypeEnum, 'DEFECT', INDETERMINATE) -hatchmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'HATCHMARKING', INDETERMINATE) -linemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'LINEMARKING', INDETERMINATE) -mark = express_getattr(IfcSurfaceFeatureTypeEnum, 'MARK', INDETERMINATE) -nonskidsurfacing = express_getattr(IfcSurfaceFeatureTypeEnum, 'NONSKIDSURFACING', INDETERMINATE) -pavementsurfacemarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'PAVEMENTSURFACEMARKING', INDETERMINATE) -rumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'RUMBLESTRIP', INDETERMINATE) -symbolmarking = express_getattr(IfcSurfaceFeatureTypeEnum, 'SYMBOLMARKING', INDETERMINATE) -tag = express_getattr(IfcSurfaceFeatureTypeEnum, 'TAG', INDETERMINATE) -transverserumblestrip = express_getattr(IfcSurfaceFeatureTypeEnum, 'TRANSVERSERUMBLESTRIP', INDETERMINATE) -treatment = express_getattr(IfcSurfaceFeatureTypeEnum, 'TREATMENT', INDETERMINATE) -userdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSurfaceFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +defect = IfcSurfaceFeatureTypeEnum.DEFECT +hatchmarking = IfcSurfaceFeatureTypeEnum.HATCHMARKING +linemarking = IfcSurfaceFeatureTypeEnum.LINEMARKING +mark = IfcSurfaceFeatureTypeEnum.MARK +nonskidsurfacing = IfcSurfaceFeatureTypeEnum.NONSKIDSURFACING +pavementsurfacemarking = IfcSurfaceFeatureTypeEnum.PAVEMENTSURFACEMARKING +rumblestrip = IfcSurfaceFeatureTypeEnum.RUMBLESTRIP +symbolmarking = IfcSurfaceFeatureTypeEnum.SYMBOLMARKING +tag = IfcSurfaceFeatureTypeEnum.TAG +transverserumblestrip = IfcSurfaceFeatureTypeEnum.TRANSVERSERUMBLESTRIP +treatment = IfcSurfaceFeatureTypeEnum.TREATMENT +userdefined = IfcSurfaceFeatureTypeEnum.USERDEFINED +notdefined = IfcSurfaceFeatureTypeEnum.NOTDEFINED IfcSurfaceSide = enum_namespace() -both = express_getattr(IfcSurfaceSide, 'BOTH', INDETERMINATE) -negative = express_getattr(IfcSurfaceSide, 'NEGATIVE', INDETERMINATE) -positive = express_getattr(IfcSurfaceSide, 'POSITIVE', INDETERMINATE) +both = IfcSurfaceSide.BOTH +negative = IfcSurfaceSide.NEGATIVE +positive = IfcSurfaceSide.POSITIVE IfcSwitchingDeviceTypeEnum = enum_namespace() -contactor = express_getattr(IfcSwitchingDeviceTypeEnum, 'CONTACTOR', INDETERMINATE) -dimmerswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'DIMMERSWITCH', INDETERMINATE) -emergencystop = express_getattr(IfcSwitchingDeviceTypeEnum, 'EMERGENCYSTOP', INDETERMINATE) -keypad = express_getattr(IfcSwitchingDeviceTypeEnum, 'KEYPAD', INDETERMINATE) -momentaryswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'MOMENTARYSWITCH', INDETERMINATE) -relay = express_getattr(IfcSwitchingDeviceTypeEnum, 'RELAY', INDETERMINATE) -selectorswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'SELECTORSWITCH', INDETERMINATE) -starter = express_getattr(IfcSwitchingDeviceTypeEnum, 'STARTER', INDETERMINATE) -start_and_stop_equipment = express_getattr(IfcSwitchingDeviceTypeEnum, 'START_AND_STOP_EQUIPMENT', INDETERMINATE) -switchdisconnector = express_getattr(IfcSwitchingDeviceTypeEnum, 'SWITCHDISCONNECTOR', INDETERMINATE) -toggleswitch = express_getattr(IfcSwitchingDeviceTypeEnum, 'TOGGLESWITCH', INDETERMINATE) -userdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSwitchingDeviceTypeEnum, 'NOTDEFINED', INDETERMINATE) +contactor = IfcSwitchingDeviceTypeEnum.CONTACTOR +dimmerswitch = IfcSwitchingDeviceTypeEnum.DIMMERSWITCH +emergencystop = IfcSwitchingDeviceTypeEnum.EMERGENCYSTOP +keypad = IfcSwitchingDeviceTypeEnum.KEYPAD +momentaryswitch = IfcSwitchingDeviceTypeEnum.MOMENTARYSWITCH +relay = IfcSwitchingDeviceTypeEnum.RELAY +selectorswitch = IfcSwitchingDeviceTypeEnum.SELECTORSWITCH +starter = IfcSwitchingDeviceTypeEnum.STARTER +start_and_stop_equipment = IfcSwitchingDeviceTypeEnum.START_AND_STOP_EQUIPMENT +switchdisconnector = IfcSwitchingDeviceTypeEnum.SWITCHDISCONNECTOR +toggleswitch = IfcSwitchingDeviceTypeEnum.TOGGLESWITCH +userdefined = IfcSwitchingDeviceTypeEnum.USERDEFINED +notdefined = IfcSwitchingDeviceTypeEnum.NOTDEFINED IfcSystemFurnitureElementTypeEnum = enum_namespace() -panel = express_getattr(IfcSystemFurnitureElementTypeEnum, 'PANEL', INDETERMINATE) -subrack = express_getattr(IfcSystemFurnitureElementTypeEnum, 'SUBRACK', INDETERMINATE) -worksurface = express_getattr(IfcSystemFurnitureElementTypeEnum, 'WORKSURFACE', INDETERMINATE) -userdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcSystemFurnitureElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +panel = IfcSystemFurnitureElementTypeEnum.PANEL +subrack = IfcSystemFurnitureElementTypeEnum.SUBRACK +worksurface = IfcSystemFurnitureElementTypeEnum.WORKSURFACE +userdefined = IfcSystemFurnitureElementTypeEnum.USERDEFINED +notdefined = IfcSystemFurnitureElementTypeEnum.NOTDEFINED IfcTankTypeEnum = enum_namespace() -basin = express_getattr(IfcTankTypeEnum, 'BASIN', INDETERMINATE) -breakpressure = express_getattr(IfcTankTypeEnum, 'BREAKPRESSURE', INDETERMINATE) -expansion = express_getattr(IfcTankTypeEnum, 'EXPANSION', INDETERMINATE) -feedandexpansion = express_getattr(IfcTankTypeEnum, 'FEEDANDEXPANSION', INDETERMINATE) -oilretentiontray = express_getattr(IfcTankTypeEnum, 'OILRETENTIONTRAY', INDETERMINATE) -pressurevessel = express_getattr(IfcTankTypeEnum, 'PRESSUREVESSEL', INDETERMINATE) -storage = express_getattr(IfcTankTypeEnum, 'STORAGE', INDETERMINATE) -vessel = express_getattr(IfcTankTypeEnum, 'VESSEL', INDETERMINATE) -userdefined = express_getattr(IfcTankTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTankTypeEnum, 'NOTDEFINED', INDETERMINATE) +basin = IfcTankTypeEnum.BASIN +breakpressure = IfcTankTypeEnum.BREAKPRESSURE +expansion = IfcTankTypeEnum.EXPANSION +feedandexpansion = IfcTankTypeEnum.FEEDANDEXPANSION +oilretentiontray = IfcTankTypeEnum.OILRETENTIONTRAY +pressurevessel = IfcTankTypeEnum.PRESSUREVESSEL +storage = IfcTankTypeEnum.STORAGE +vessel = IfcTankTypeEnum.VESSEL +userdefined = IfcTankTypeEnum.USERDEFINED +notdefined = IfcTankTypeEnum.NOTDEFINED IfcTaskDurationEnum = enum_namespace() -elapsedtime = express_getattr(IfcTaskDurationEnum, 'ELAPSEDTIME', INDETERMINATE) -worktime = express_getattr(IfcTaskDurationEnum, 'WORKTIME', INDETERMINATE) -notdefined = express_getattr(IfcTaskDurationEnum, 'NOTDEFINED', INDETERMINATE) +elapsedtime = IfcTaskDurationEnum.ELAPSEDTIME +worktime = IfcTaskDurationEnum.WORKTIME +notdefined = IfcTaskDurationEnum.NOTDEFINED IfcTaskTypeEnum = enum_namespace() -adjustment = express_getattr(IfcTaskTypeEnum, 'ADJUSTMENT', INDETERMINATE) -attendance = express_getattr(IfcTaskTypeEnum, 'ATTENDANCE', INDETERMINATE) -calibration = express_getattr(IfcTaskTypeEnum, 'CALIBRATION', INDETERMINATE) -construction = express_getattr(IfcTaskTypeEnum, 'CONSTRUCTION', INDETERMINATE) -demolition = express_getattr(IfcTaskTypeEnum, 'DEMOLITION', INDETERMINATE) -dismantle = express_getattr(IfcTaskTypeEnum, 'DISMANTLE', INDETERMINATE) -disposal = express_getattr(IfcTaskTypeEnum, 'DISPOSAL', INDETERMINATE) -emergency = express_getattr(IfcTaskTypeEnum, 'EMERGENCY', INDETERMINATE) -inspection = express_getattr(IfcTaskTypeEnum, 'INSPECTION', INDETERMINATE) -installation = express_getattr(IfcTaskTypeEnum, 'INSTALLATION', INDETERMINATE) -logistic = express_getattr(IfcTaskTypeEnum, 'LOGISTIC', INDETERMINATE) -maintenance = express_getattr(IfcTaskTypeEnum, 'MAINTENANCE', INDETERMINATE) -move = express_getattr(IfcTaskTypeEnum, 'MOVE', INDETERMINATE) -operation = express_getattr(IfcTaskTypeEnum, 'OPERATION', INDETERMINATE) -removal = express_getattr(IfcTaskTypeEnum, 'REMOVAL', INDETERMINATE) -renovation = express_getattr(IfcTaskTypeEnum, 'RENOVATION', INDETERMINATE) -safety = express_getattr(IfcTaskTypeEnum, 'SAFETY', INDETERMINATE) -shutdown = express_getattr(IfcTaskTypeEnum, 'SHUTDOWN', INDETERMINATE) -startup = express_getattr(IfcTaskTypeEnum, 'STARTUP', INDETERMINATE) -testing = express_getattr(IfcTaskTypeEnum, 'TESTING', INDETERMINATE) -troubleshooting = express_getattr(IfcTaskTypeEnum, 'TROUBLESHOOTING', INDETERMINATE) -userdefined = express_getattr(IfcTaskTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTaskTypeEnum, 'NOTDEFINED', INDETERMINATE) +adjustment = IfcTaskTypeEnum.ADJUSTMENT +attendance = IfcTaskTypeEnum.ATTENDANCE +calibration = IfcTaskTypeEnum.CALIBRATION +construction = IfcTaskTypeEnum.CONSTRUCTION +demolition = IfcTaskTypeEnum.DEMOLITION +dismantle = IfcTaskTypeEnum.DISMANTLE +disposal = IfcTaskTypeEnum.DISPOSAL +emergency = IfcTaskTypeEnum.EMERGENCY +inspection = IfcTaskTypeEnum.INSPECTION +installation = IfcTaskTypeEnum.INSTALLATION +logistic = IfcTaskTypeEnum.LOGISTIC +maintenance = IfcTaskTypeEnum.MAINTENANCE +move = IfcTaskTypeEnum.MOVE +operation = IfcTaskTypeEnum.OPERATION +removal = IfcTaskTypeEnum.REMOVAL +renovation = IfcTaskTypeEnum.RENOVATION +safety = IfcTaskTypeEnum.SAFETY +shutdown = IfcTaskTypeEnum.SHUTDOWN +startup = IfcTaskTypeEnum.STARTUP +testing = IfcTaskTypeEnum.TESTING +troubleshooting = IfcTaskTypeEnum.TROUBLESHOOTING +userdefined = IfcTaskTypeEnum.USERDEFINED +notdefined = IfcTaskTypeEnum.NOTDEFINED IfcTendonAnchorTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonAnchorTypeEnum, 'COUPLER', INDETERMINATE) -fixed_end = express_getattr(IfcTendonAnchorTypeEnum, 'FIXED_END', INDETERMINATE) -tensioning_end = express_getattr(IfcTendonAnchorTypeEnum, 'TENSIONING_END', INDETERMINATE) -userdefined = express_getattr(IfcTendonAnchorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonAnchorTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonAnchorTypeEnum.COUPLER +fixed_end = IfcTendonAnchorTypeEnum.FIXED_END +tensioning_end = IfcTendonAnchorTypeEnum.TENSIONING_END +userdefined = IfcTendonAnchorTypeEnum.USERDEFINED +notdefined = IfcTendonAnchorTypeEnum.NOTDEFINED IfcTendonConduitTypeEnum = enum_namespace() -coupler = express_getattr(IfcTendonConduitTypeEnum, 'COUPLER', INDETERMINATE) -diabolo = express_getattr(IfcTendonConduitTypeEnum, 'DIABOLO', INDETERMINATE) -duct = express_getattr(IfcTendonConduitTypeEnum, 'DUCT', INDETERMINATE) -grouting_duct = express_getattr(IfcTendonConduitTypeEnum, 'GROUTING_DUCT', INDETERMINATE) -trumpet = express_getattr(IfcTendonConduitTypeEnum, 'TRUMPET', INDETERMINATE) -userdefined = express_getattr(IfcTendonConduitTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonConduitTypeEnum, 'NOTDEFINED', INDETERMINATE) +coupler = IfcTendonConduitTypeEnum.COUPLER +diabolo = IfcTendonConduitTypeEnum.DIABOLO +duct = IfcTendonConduitTypeEnum.DUCT +grouting_duct = IfcTendonConduitTypeEnum.GROUTING_DUCT +trumpet = IfcTendonConduitTypeEnum.TRUMPET +userdefined = IfcTendonConduitTypeEnum.USERDEFINED +notdefined = IfcTendonConduitTypeEnum.NOTDEFINED IfcTendonTypeEnum = enum_namespace() -bar = express_getattr(IfcTendonTypeEnum, 'BAR', INDETERMINATE) -coated = express_getattr(IfcTendonTypeEnum, 'COATED', INDETERMINATE) -strand = express_getattr(IfcTendonTypeEnum, 'STRAND', INDETERMINATE) -wire = express_getattr(IfcTendonTypeEnum, 'WIRE', INDETERMINATE) -userdefined = express_getattr(IfcTendonTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTendonTypeEnum, 'NOTDEFINED', INDETERMINATE) +bar = IfcTendonTypeEnum.BAR +coated = IfcTendonTypeEnum.COATED +strand = IfcTendonTypeEnum.STRAND +wire = IfcTendonTypeEnum.WIRE +userdefined = IfcTendonTypeEnum.USERDEFINED +notdefined = IfcTendonTypeEnum.NOTDEFINED IfcTextPath = enum_namespace() -down = express_getattr(IfcTextPath, 'DOWN', INDETERMINATE) -left = express_getattr(IfcTextPath, 'LEFT', INDETERMINATE) -right = express_getattr(IfcTextPath, 'RIGHT', INDETERMINATE) -up = express_getattr(IfcTextPath, 'UP', INDETERMINATE) +down = IfcTextPath.DOWN +left = IfcTextPath.LEFT +right = IfcTextPath.RIGHT +up = IfcTextPath.UP IfcTimeSeriesDataTypeEnum = enum_namespace() -continuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'CONTINUOUS', INDETERMINATE) -discrete = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETE', INDETERMINATE) -discretebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'DISCRETEBINARY', INDETERMINATE) -piecewisebinary = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISEBINARY', INDETERMINATE) -piecewiseconstant = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONSTANT', INDETERMINATE) -piecewisecontinuous = express_getattr(IfcTimeSeriesDataTypeEnum, 'PIECEWISECONTINUOUS', INDETERMINATE) -notdefined = express_getattr(IfcTimeSeriesDataTypeEnum, 'NOTDEFINED', INDETERMINATE) +continuous = IfcTimeSeriesDataTypeEnum.CONTINUOUS +discrete = IfcTimeSeriesDataTypeEnum.DISCRETE +discretebinary = IfcTimeSeriesDataTypeEnum.DISCRETEBINARY +piecewisebinary = IfcTimeSeriesDataTypeEnum.PIECEWISEBINARY +piecewiseconstant = IfcTimeSeriesDataTypeEnum.PIECEWISECONSTANT +piecewisecontinuous = IfcTimeSeriesDataTypeEnum.PIECEWISECONTINUOUS +notdefined = IfcTimeSeriesDataTypeEnum.NOTDEFINED IfcTrackElementTypeEnum = enum_namespace() -blockingdevice = express_getattr(IfcTrackElementTypeEnum, 'BLOCKINGDEVICE', INDETERMINATE) -derailer = express_getattr(IfcTrackElementTypeEnum, 'DERAILER', INDETERMINATE) -frog = express_getattr(IfcTrackElementTypeEnum, 'FROG', INDETERMINATE) -half_set_of_blades = express_getattr(IfcTrackElementTypeEnum, 'HALF_SET_OF_BLADES', INDETERMINATE) -sleeper = express_getattr(IfcTrackElementTypeEnum, 'SLEEPER', INDETERMINATE) -speedregulator = express_getattr(IfcTrackElementTypeEnum, 'SPEEDREGULATOR', INDETERMINATE) -trackendofalignment = express_getattr(IfcTrackElementTypeEnum, 'TRACKENDOFALIGNMENT', INDETERMINATE) -vehiclestop = express_getattr(IfcTrackElementTypeEnum, 'VEHICLESTOP', INDETERMINATE) -userdefined = express_getattr(IfcTrackElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTrackElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +blockingdevice = IfcTrackElementTypeEnum.BLOCKINGDEVICE +derailer = IfcTrackElementTypeEnum.DERAILER +frog = IfcTrackElementTypeEnum.FROG +half_set_of_blades = IfcTrackElementTypeEnum.HALF_SET_OF_BLADES +sleeper = IfcTrackElementTypeEnum.SLEEPER +speedregulator = IfcTrackElementTypeEnum.SPEEDREGULATOR +trackendofalignment = IfcTrackElementTypeEnum.TRACKENDOFALIGNMENT +vehiclestop = IfcTrackElementTypeEnum.VEHICLESTOP +userdefined = IfcTrackElementTypeEnum.USERDEFINED +notdefined = IfcTrackElementTypeEnum.NOTDEFINED IfcTransformerTypeEnum = enum_namespace() -chopper = express_getattr(IfcTransformerTypeEnum, 'CHOPPER', INDETERMINATE) -combined = express_getattr(IfcTransformerTypeEnum, 'COMBINED', INDETERMINATE) -current = express_getattr(IfcTransformerTypeEnum, 'CURRENT', INDETERMINATE) -frequency = express_getattr(IfcTransformerTypeEnum, 'FREQUENCY', INDETERMINATE) -inverter = express_getattr(IfcTransformerTypeEnum, 'INVERTER', INDETERMINATE) -rectifier = express_getattr(IfcTransformerTypeEnum, 'RECTIFIER', INDETERMINATE) -voltage = express_getattr(IfcTransformerTypeEnum, 'VOLTAGE', INDETERMINATE) -userdefined = express_getattr(IfcTransformerTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransformerTypeEnum, 'NOTDEFINED', INDETERMINATE) +chopper = IfcTransformerTypeEnum.CHOPPER +combined = IfcTransformerTypeEnum.COMBINED +current = IfcTransformerTypeEnum.CURRENT +frequency = IfcTransformerTypeEnum.FREQUENCY +inverter = IfcTransformerTypeEnum.INVERTER +rectifier = IfcTransformerTypeEnum.RECTIFIER +voltage = IfcTransformerTypeEnum.VOLTAGE +userdefined = IfcTransformerTypeEnum.USERDEFINED +notdefined = IfcTransformerTypeEnum.NOTDEFINED IfcTransitionCode = enum_namespace() -continuous = express_getattr(IfcTransitionCode, 'CONTINUOUS', INDETERMINATE) -contsamegradient = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENT', INDETERMINATE) -contsamegradientsamecurvature = express_getattr(IfcTransitionCode, 'CONTSAMEGRADIENTSAMECURVATURE', INDETERMINATE) -discontinuous = express_getattr(IfcTransitionCode, 'DISCONTINUOUS', INDETERMINATE) +continuous = IfcTransitionCode.CONTINUOUS +contsamegradient = IfcTransitionCode.CONTSAMEGRADIENT +contsamegradientsamecurvature = IfcTransitionCode.CONTSAMEGRADIENTSAMECURVATURE +discontinuous = IfcTransitionCode.DISCONTINUOUS IfcTransportElementTypeEnum = enum_namespace() -craneway = express_getattr(IfcTransportElementTypeEnum, 'CRANEWAY', INDETERMINATE) -elevator = express_getattr(IfcTransportElementTypeEnum, 'ELEVATOR', INDETERMINATE) -escalator = express_getattr(IfcTransportElementTypeEnum, 'ESCALATOR', INDETERMINATE) -haulinggear = express_getattr(IfcTransportElementTypeEnum, 'HAULINGGEAR', INDETERMINATE) -liftinggear = express_getattr(IfcTransportElementTypeEnum, 'LIFTINGGEAR', INDETERMINATE) -movingwalkway = express_getattr(IfcTransportElementTypeEnum, 'MOVINGWALKWAY', INDETERMINATE) -userdefined = express_getattr(IfcTransportElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTransportElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +craneway = IfcTransportElementTypeEnum.CRANEWAY +elevator = IfcTransportElementTypeEnum.ELEVATOR +escalator = IfcTransportElementTypeEnum.ESCALATOR +haulinggear = IfcTransportElementTypeEnum.HAULINGGEAR +liftinggear = IfcTransportElementTypeEnum.LIFTINGGEAR +movingwalkway = IfcTransportElementTypeEnum.MOVINGWALKWAY +userdefined = IfcTransportElementTypeEnum.USERDEFINED +notdefined = IfcTransportElementTypeEnum.NOTDEFINED IfcTrimmingPreference = enum_namespace() -cartesian = express_getattr(IfcTrimmingPreference, 'CARTESIAN', INDETERMINATE) -parameter = express_getattr(IfcTrimmingPreference, 'PARAMETER', INDETERMINATE) -unspecified = express_getattr(IfcTrimmingPreference, 'UNSPECIFIED', INDETERMINATE) +cartesian = IfcTrimmingPreference.CARTESIAN +parameter = IfcTrimmingPreference.PARAMETER +unspecified = IfcTrimmingPreference.UNSPECIFIED IfcTubeBundleTypeEnum = enum_namespace() -finned = express_getattr(IfcTubeBundleTypeEnum, 'FINNED', INDETERMINATE) -userdefined = express_getattr(IfcTubeBundleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcTubeBundleTypeEnum, 'NOTDEFINED', INDETERMINATE) +finned = IfcTubeBundleTypeEnum.FINNED +userdefined = IfcTubeBundleTypeEnum.USERDEFINED +notdefined = IfcTubeBundleTypeEnum.NOTDEFINED IfcUnitEnum = enum_namespace() -absorbeddoseunit = express_getattr(IfcUnitEnum, 'ABSORBEDDOSEUNIT', INDETERMINATE) -amountofsubstanceunit = express_getattr(IfcUnitEnum, 'AMOUNTOFSUBSTANCEUNIT', INDETERMINATE) -areaunit = express_getattr(IfcUnitEnum, 'AREAUNIT', INDETERMINATE) -doseequivalentunit = express_getattr(IfcUnitEnum, 'DOSEEQUIVALENTUNIT', INDETERMINATE) -electriccapacitanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCAPACITANCEUNIT', INDETERMINATE) -electricchargeunit = express_getattr(IfcUnitEnum, 'ELECTRICCHARGEUNIT', INDETERMINATE) -electricconductanceunit = express_getattr(IfcUnitEnum, 'ELECTRICCONDUCTANCEUNIT', INDETERMINATE) -electriccurrentunit = express_getattr(IfcUnitEnum, 'ELECTRICCURRENTUNIT', INDETERMINATE) -electricresistanceunit = express_getattr(IfcUnitEnum, 'ELECTRICRESISTANCEUNIT', INDETERMINATE) -electricvoltageunit = express_getattr(IfcUnitEnum, 'ELECTRICVOLTAGEUNIT', INDETERMINATE) -energyunit = express_getattr(IfcUnitEnum, 'ENERGYUNIT', INDETERMINATE) -forceunit = express_getattr(IfcUnitEnum, 'FORCEUNIT', INDETERMINATE) -frequencyunit = express_getattr(IfcUnitEnum, 'FREQUENCYUNIT', INDETERMINATE) -illuminanceunit = express_getattr(IfcUnitEnum, 'ILLUMINANCEUNIT', INDETERMINATE) -inductanceunit = express_getattr(IfcUnitEnum, 'INDUCTANCEUNIT', INDETERMINATE) -lengthunit = express_getattr(IfcUnitEnum, 'LENGTHUNIT', INDETERMINATE) -luminousfluxunit = express_getattr(IfcUnitEnum, 'LUMINOUSFLUXUNIT', INDETERMINATE) -luminousintensityunit = express_getattr(IfcUnitEnum, 'LUMINOUSINTENSITYUNIT', INDETERMINATE) -magneticfluxdensityunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXDENSITYUNIT', INDETERMINATE) -magneticfluxunit = express_getattr(IfcUnitEnum, 'MAGNETICFLUXUNIT', INDETERMINATE) -massunit = express_getattr(IfcUnitEnum, 'MASSUNIT', INDETERMINATE) -planeangleunit = express_getattr(IfcUnitEnum, 'PLANEANGLEUNIT', INDETERMINATE) -powerunit = express_getattr(IfcUnitEnum, 'POWERUNIT', INDETERMINATE) -pressureunit = express_getattr(IfcUnitEnum, 'PRESSUREUNIT', INDETERMINATE) -radioactivityunit = express_getattr(IfcUnitEnum, 'RADIOACTIVITYUNIT', INDETERMINATE) -solidangleunit = express_getattr(IfcUnitEnum, 'SOLIDANGLEUNIT', INDETERMINATE) -thermodynamictemperatureunit = express_getattr(IfcUnitEnum, 'THERMODYNAMICTEMPERATUREUNIT', INDETERMINATE) -timeunit = express_getattr(IfcUnitEnum, 'TIMEUNIT', INDETERMINATE) -volumeunit = express_getattr(IfcUnitEnum, 'VOLUMEUNIT', INDETERMINATE) -userdefined = express_getattr(IfcUnitEnum, 'USERDEFINED', INDETERMINATE) +absorbeddoseunit = IfcUnitEnum.ABSORBEDDOSEUNIT +amountofsubstanceunit = IfcUnitEnum.AMOUNTOFSUBSTANCEUNIT +areaunit = IfcUnitEnum.AREAUNIT +doseequivalentunit = IfcUnitEnum.DOSEEQUIVALENTUNIT +electriccapacitanceunit = IfcUnitEnum.ELECTRICCAPACITANCEUNIT +electricchargeunit = IfcUnitEnum.ELECTRICCHARGEUNIT +electricconductanceunit = IfcUnitEnum.ELECTRICCONDUCTANCEUNIT +electriccurrentunit = IfcUnitEnum.ELECTRICCURRENTUNIT +electricresistanceunit = IfcUnitEnum.ELECTRICRESISTANCEUNIT +electricvoltageunit = IfcUnitEnum.ELECTRICVOLTAGEUNIT +energyunit = IfcUnitEnum.ENERGYUNIT +forceunit = IfcUnitEnum.FORCEUNIT +frequencyunit = IfcUnitEnum.FREQUENCYUNIT +illuminanceunit = IfcUnitEnum.ILLUMINANCEUNIT +inductanceunit = IfcUnitEnum.INDUCTANCEUNIT +lengthunit = IfcUnitEnum.LENGTHUNIT +luminousfluxunit = IfcUnitEnum.LUMINOUSFLUXUNIT +luminousintensityunit = IfcUnitEnum.LUMINOUSINTENSITYUNIT +magneticfluxdensityunit = IfcUnitEnum.MAGNETICFLUXDENSITYUNIT +magneticfluxunit = IfcUnitEnum.MAGNETICFLUXUNIT +massunit = IfcUnitEnum.MASSUNIT +planeangleunit = IfcUnitEnum.PLANEANGLEUNIT +powerunit = IfcUnitEnum.POWERUNIT +pressureunit = IfcUnitEnum.PRESSUREUNIT +radioactivityunit = IfcUnitEnum.RADIOACTIVITYUNIT +solidangleunit = IfcUnitEnum.SOLIDANGLEUNIT +thermodynamictemperatureunit = IfcUnitEnum.THERMODYNAMICTEMPERATUREUNIT +timeunit = IfcUnitEnum.TIMEUNIT +volumeunit = IfcUnitEnum.VOLUMEUNIT +userdefined = IfcUnitEnum.USERDEFINED IfcUnitaryControlElementTypeEnum = enum_namespace() -alarmpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'ALARMPANEL', INDETERMINATE) -basestationcontroller = express_getattr(IfcUnitaryControlElementTypeEnum, 'BASESTATIONCONTROLLER', INDETERMINATE) -combined = express_getattr(IfcUnitaryControlElementTypeEnum, 'COMBINED', INDETERMINATE) -controlpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'CONTROLPANEL', INDETERMINATE) -gasdetectionpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'GASDETECTIONPANEL', INDETERMINATE) -humidistat = express_getattr(IfcUnitaryControlElementTypeEnum, 'HUMIDISTAT', INDETERMINATE) -indicatorpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'INDICATORPANEL', INDETERMINATE) -mimicpanel = express_getattr(IfcUnitaryControlElementTypeEnum, 'MIMICPANEL', INDETERMINATE) -thermostat = express_getattr(IfcUnitaryControlElementTypeEnum, 'THERMOSTAT', INDETERMINATE) -weatherstation = express_getattr(IfcUnitaryControlElementTypeEnum, 'WEATHERSTATION', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryControlElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +alarmpanel = IfcUnitaryControlElementTypeEnum.ALARMPANEL +basestationcontroller = IfcUnitaryControlElementTypeEnum.BASESTATIONCONTROLLER +combined = IfcUnitaryControlElementTypeEnum.COMBINED +controlpanel = IfcUnitaryControlElementTypeEnum.CONTROLPANEL +gasdetectionpanel = IfcUnitaryControlElementTypeEnum.GASDETECTIONPANEL +humidistat = IfcUnitaryControlElementTypeEnum.HUMIDISTAT +indicatorpanel = IfcUnitaryControlElementTypeEnum.INDICATORPANEL +mimicpanel = IfcUnitaryControlElementTypeEnum.MIMICPANEL +thermostat = IfcUnitaryControlElementTypeEnum.THERMOSTAT +weatherstation = IfcUnitaryControlElementTypeEnum.WEATHERSTATION +userdefined = IfcUnitaryControlElementTypeEnum.USERDEFINED +notdefined = IfcUnitaryControlElementTypeEnum.NOTDEFINED IfcUnitaryEquipmentTypeEnum = enum_namespace() -airconditioningunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRCONDITIONINGUNIT', INDETERMINATE) -airhandler = express_getattr(IfcUnitaryEquipmentTypeEnum, 'AIRHANDLER', INDETERMINATE) -dehumidifier = express_getattr(IfcUnitaryEquipmentTypeEnum, 'DEHUMIDIFIER', INDETERMINATE) -rooftopunit = express_getattr(IfcUnitaryEquipmentTypeEnum, 'ROOFTOPUNIT', INDETERMINATE) -splitsystem = express_getattr(IfcUnitaryEquipmentTypeEnum, 'SPLITSYSTEM', INDETERMINATE) -userdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcUnitaryEquipmentTypeEnum, 'NOTDEFINED', INDETERMINATE) +airconditioningunit = IfcUnitaryEquipmentTypeEnum.AIRCONDITIONINGUNIT +airhandler = IfcUnitaryEquipmentTypeEnum.AIRHANDLER +dehumidifier = IfcUnitaryEquipmentTypeEnum.DEHUMIDIFIER +rooftopunit = IfcUnitaryEquipmentTypeEnum.ROOFTOPUNIT +splitsystem = IfcUnitaryEquipmentTypeEnum.SPLITSYSTEM +userdefined = IfcUnitaryEquipmentTypeEnum.USERDEFINED +notdefined = IfcUnitaryEquipmentTypeEnum.NOTDEFINED IfcValveTypeEnum = enum_namespace() -airrelease = express_getattr(IfcValveTypeEnum, 'AIRRELEASE', INDETERMINATE) -antivacuum = express_getattr(IfcValveTypeEnum, 'ANTIVACUUM', INDETERMINATE) -changeover = express_getattr(IfcValveTypeEnum, 'CHANGEOVER', INDETERMINATE) -check = express_getattr(IfcValveTypeEnum, 'CHECK', INDETERMINATE) -commissioning = express_getattr(IfcValveTypeEnum, 'COMMISSIONING', INDETERMINATE) -diverting = express_getattr(IfcValveTypeEnum, 'DIVERTING', INDETERMINATE) -doublecheck = express_getattr(IfcValveTypeEnum, 'DOUBLECHECK', INDETERMINATE) -doubleregulating = express_getattr(IfcValveTypeEnum, 'DOUBLEREGULATING', INDETERMINATE) -drawoffcock = express_getattr(IfcValveTypeEnum, 'DRAWOFFCOCK', INDETERMINATE) -faucet = express_getattr(IfcValveTypeEnum, 'FAUCET', INDETERMINATE) -flushing = express_getattr(IfcValveTypeEnum, 'FLUSHING', INDETERMINATE) -gascock = express_getattr(IfcValveTypeEnum, 'GASCOCK', INDETERMINATE) -gastap = express_getattr(IfcValveTypeEnum, 'GASTAP', INDETERMINATE) -isolating = express_getattr(IfcValveTypeEnum, 'ISOLATING', INDETERMINATE) -mixing = express_getattr(IfcValveTypeEnum, 'MIXING', INDETERMINATE) -pressurereducing = express_getattr(IfcValveTypeEnum, 'PRESSUREREDUCING', INDETERMINATE) -pressurerelief = express_getattr(IfcValveTypeEnum, 'PRESSURERELIEF', INDETERMINATE) -regulating = express_getattr(IfcValveTypeEnum, 'REGULATING', INDETERMINATE) -safetycutoff = express_getattr(IfcValveTypeEnum, 'SAFETYCUTOFF', INDETERMINATE) -steamtrap = express_getattr(IfcValveTypeEnum, 'STEAMTRAP', INDETERMINATE) -stopcock = express_getattr(IfcValveTypeEnum, 'STOPCOCK', INDETERMINATE) -userdefined = express_getattr(IfcValveTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcValveTypeEnum, 'NOTDEFINED', INDETERMINATE) +airrelease = IfcValveTypeEnum.AIRRELEASE +antivacuum = IfcValveTypeEnum.ANTIVACUUM +changeover = IfcValveTypeEnum.CHANGEOVER +check = IfcValveTypeEnum.CHECK +commissioning = IfcValveTypeEnum.COMMISSIONING +diverting = IfcValveTypeEnum.DIVERTING +doublecheck = IfcValveTypeEnum.DOUBLECHECK +doubleregulating = IfcValveTypeEnum.DOUBLEREGULATING +drawoffcock = IfcValveTypeEnum.DRAWOFFCOCK +faucet = IfcValveTypeEnum.FAUCET +flushing = IfcValveTypeEnum.FLUSHING +gascock = IfcValveTypeEnum.GASCOCK +gastap = IfcValveTypeEnum.GASTAP +isolating = IfcValveTypeEnum.ISOLATING +mixing = IfcValveTypeEnum.MIXING +pressurereducing = IfcValveTypeEnum.PRESSUREREDUCING +pressurerelief = IfcValveTypeEnum.PRESSURERELIEF +regulating = IfcValveTypeEnum.REGULATING +safetycutoff = IfcValveTypeEnum.SAFETYCUTOFF +steamtrap = IfcValveTypeEnum.STEAMTRAP +stopcock = IfcValveTypeEnum.STOPCOCK +userdefined = IfcValveTypeEnum.USERDEFINED +notdefined = IfcValveTypeEnum.NOTDEFINED IfcVehicleTypeEnum = enum_namespace() -cargo = express_getattr(IfcVehicleTypeEnum, 'CARGO', INDETERMINATE) -rollingstock = express_getattr(IfcVehicleTypeEnum, 'ROLLINGSTOCK', INDETERMINATE) -vehicle = express_getattr(IfcVehicleTypeEnum, 'VEHICLE', INDETERMINATE) -vehicleair = express_getattr(IfcVehicleTypeEnum, 'VEHICLEAIR', INDETERMINATE) -vehiclemarine = express_getattr(IfcVehicleTypeEnum, 'VEHICLEMARINE', INDETERMINATE) -vehicletracked = express_getattr(IfcVehicleTypeEnum, 'VEHICLETRACKED', INDETERMINATE) -vehiclewheeled = express_getattr(IfcVehicleTypeEnum, 'VEHICLEWHEELED', INDETERMINATE) -userdefined = express_getattr(IfcVehicleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVehicleTypeEnum, 'NOTDEFINED', INDETERMINATE) +cargo = IfcVehicleTypeEnum.CARGO +rollingstock = IfcVehicleTypeEnum.ROLLINGSTOCK +vehicle = IfcVehicleTypeEnum.VEHICLE +vehicleair = IfcVehicleTypeEnum.VEHICLEAIR +vehiclemarine = IfcVehicleTypeEnum.VEHICLEMARINE +vehicletracked = IfcVehicleTypeEnum.VEHICLETRACKED +vehiclewheeled = IfcVehicleTypeEnum.VEHICLEWHEELED +userdefined = IfcVehicleTypeEnum.USERDEFINED +notdefined = IfcVehicleTypeEnum.NOTDEFINED IfcVibrationDamperTypeEnum = enum_namespace() -axial_yield = express_getattr(IfcVibrationDamperTypeEnum, 'AXIAL_YIELD', INDETERMINATE) -bending_yield = express_getattr(IfcVibrationDamperTypeEnum, 'BENDING_YIELD', INDETERMINATE) -friction = express_getattr(IfcVibrationDamperTypeEnum, 'FRICTION', INDETERMINATE) -rubber = express_getattr(IfcVibrationDamperTypeEnum, 'RUBBER', INDETERMINATE) -shear_yield = express_getattr(IfcVibrationDamperTypeEnum, 'SHEAR_YIELD', INDETERMINATE) -viscous = express_getattr(IfcVibrationDamperTypeEnum, 'VISCOUS', INDETERMINATE) -userdefined = express_getattr(IfcVibrationDamperTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationDamperTypeEnum, 'NOTDEFINED', INDETERMINATE) +axial_yield = IfcVibrationDamperTypeEnum.AXIAL_YIELD +bending_yield = IfcVibrationDamperTypeEnum.BENDING_YIELD +friction = IfcVibrationDamperTypeEnum.FRICTION +rubber = IfcVibrationDamperTypeEnum.RUBBER +shear_yield = IfcVibrationDamperTypeEnum.SHEAR_YIELD +viscous = IfcVibrationDamperTypeEnum.VISCOUS +userdefined = IfcVibrationDamperTypeEnum.USERDEFINED +notdefined = IfcVibrationDamperTypeEnum.NOTDEFINED IfcVibrationIsolatorTypeEnum = enum_namespace() -base = express_getattr(IfcVibrationIsolatorTypeEnum, 'BASE', INDETERMINATE) -compression = express_getattr(IfcVibrationIsolatorTypeEnum, 'COMPRESSION', INDETERMINATE) -spring = express_getattr(IfcVibrationIsolatorTypeEnum, 'SPRING', INDETERMINATE) -userdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVibrationIsolatorTypeEnum, 'NOTDEFINED', INDETERMINATE) +base = IfcVibrationIsolatorTypeEnum.BASE +compression = IfcVibrationIsolatorTypeEnum.COMPRESSION +spring = IfcVibrationIsolatorTypeEnum.SPRING +userdefined = IfcVibrationIsolatorTypeEnum.USERDEFINED +notdefined = IfcVibrationIsolatorTypeEnum.NOTDEFINED IfcVirtualElementTypeEnum = enum_namespace() -boundary = express_getattr(IfcVirtualElementTypeEnum, 'BOUNDARY', INDETERMINATE) -clearance = express_getattr(IfcVirtualElementTypeEnum, 'CLEARANCE', INDETERMINATE) -provisionforvoid = express_getattr(IfcVirtualElementTypeEnum, 'PROVISIONFORVOID', INDETERMINATE) -userdefined = express_getattr(IfcVirtualElementTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVirtualElementTypeEnum, 'NOTDEFINED', INDETERMINATE) +boundary = IfcVirtualElementTypeEnum.BOUNDARY +clearance = IfcVirtualElementTypeEnum.CLEARANCE +provisionforvoid = IfcVirtualElementTypeEnum.PROVISIONFORVOID +userdefined = IfcVirtualElementTypeEnum.USERDEFINED +notdefined = IfcVirtualElementTypeEnum.NOTDEFINED IfcVoidingFeatureTypeEnum = enum_namespace() -chamfer = express_getattr(IfcVoidingFeatureTypeEnum, 'CHAMFER', INDETERMINATE) -cutout = express_getattr(IfcVoidingFeatureTypeEnum, 'CUTOUT', INDETERMINATE) -edge = express_getattr(IfcVoidingFeatureTypeEnum, 'EDGE', INDETERMINATE) -hole = express_getattr(IfcVoidingFeatureTypeEnum, 'HOLE', INDETERMINATE) -miter = express_getattr(IfcVoidingFeatureTypeEnum, 'MITER', INDETERMINATE) -notch = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTCH', INDETERMINATE) -userdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcVoidingFeatureTypeEnum, 'NOTDEFINED', INDETERMINATE) +chamfer = IfcVoidingFeatureTypeEnum.CHAMFER +cutout = IfcVoidingFeatureTypeEnum.CUTOUT +edge = IfcVoidingFeatureTypeEnum.EDGE +hole = IfcVoidingFeatureTypeEnum.HOLE +miter = IfcVoidingFeatureTypeEnum.MITER +notch = IfcVoidingFeatureTypeEnum.NOTCH +userdefined = IfcVoidingFeatureTypeEnum.USERDEFINED +notdefined = IfcVoidingFeatureTypeEnum.NOTDEFINED IfcWallTypeEnum = enum_namespace() -elementedwall = express_getattr(IfcWallTypeEnum, 'ELEMENTEDWALL', INDETERMINATE) -movable = express_getattr(IfcWallTypeEnum, 'MOVABLE', INDETERMINATE) -parapet = express_getattr(IfcWallTypeEnum, 'PARAPET', INDETERMINATE) -partitioning = express_getattr(IfcWallTypeEnum, 'PARTITIONING', INDETERMINATE) -plumbingwall = express_getattr(IfcWallTypeEnum, 'PLUMBINGWALL', INDETERMINATE) -polygonal = express_getattr(IfcWallTypeEnum, 'POLYGONAL', INDETERMINATE) -retainingwall = express_getattr(IfcWallTypeEnum, 'RETAININGWALL', INDETERMINATE) -shear = express_getattr(IfcWallTypeEnum, 'SHEAR', INDETERMINATE) -solidwall = express_getattr(IfcWallTypeEnum, 'SOLIDWALL', INDETERMINATE) -standard = express_getattr(IfcWallTypeEnum, 'STANDARD', INDETERMINATE) -wavewall = express_getattr(IfcWallTypeEnum, 'WAVEWALL', INDETERMINATE) -userdefined = express_getattr(IfcWallTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWallTypeEnum, 'NOTDEFINED', INDETERMINATE) +elementedwall = IfcWallTypeEnum.ELEMENTEDWALL +movable = IfcWallTypeEnum.MOVABLE +parapet = IfcWallTypeEnum.PARAPET +partitioning = IfcWallTypeEnum.PARTITIONING +plumbingwall = IfcWallTypeEnum.PLUMBINGWALL +polygonal = IfcWallTypeEnum.POLYGONAL +retainingwall = IfcWallTypeEnum.RETAININGWALL +shear = IfcWallTypeEnum.SHEAR +solidwall = IfcWallTypeEnum.SOLIDWALL +standard = IfcWallTypeEnum.STANDARD +wavewall = IfcWallTypeEnum.WAVEWALL +userdefined = IfcWallTypeEnum.USERDEFINED +notdefined = IfcWallTypeEnum.NOTDEFINED IfcWasteTerminalTypeEnum = enum_namespace() -floortrap = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORTRAP', INDETERMINATE) -floorwaste = express_getattr(IfcWasteTerminalTypeEnum, 'FLOORWASTE', INDETERMINATE) -gullysump = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYSUMP', INDETERMINATE) -gullytrap = express_getattr(IfcWasteTerminalTypeEnum, 'GULLYTRAP', INDETERMINATE) -roofdrain = express_getattr(IfcWasteTerminalTypeEnum, 'ROOFDRAIN', INDETERMINATE) -wastedisposalunit = express_getattr(IfcWasteTerminalTypeEnum, 'WASTEDISPOSALUNIT', INDETERMINATE) -wastetrap = express_getattr(IfcWasteTerminalTypeEnum, 'WASTETRAP', INDETERMINATE) -userdefined = express_getattr(IfcWasteTerminalTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWasteTerminalTypeEnum, 'NOTDEFINED', INDETERMINATE) +floortrap = IfcWasteTerminalTypeEnum.FLOORTRAP +floorwaste = IfcWasteTerminalTypeEnum.FLOORWASTE +gullysump = IfcWasteTerminalTypeEnum.GULLYSUMP +gullytrap = IfcWasteTerminalTypeEnum.GULLYTRAP +roofdrain = IfcWasteTerminalTypeEnum.ROOFDRAIN +wastedisposalunit = IfcWasteTerminalTypeEnum.WASTEDISPOSALUNIT +wastetrap = IfcWasteTerminalTypeEnum.WASTETRAP +userdefined = IfcWasteTerminalTypeEnum.USERDEFINED +notdefined = IfcWasteTerminalTypeEnum.NOTDEFINED IfcWindowPanelOperationEnum = enum_namespace() -bottomhung = express_getattr(IfcWindowPanelOperationEnum, 'BOTTOMHUNG', INDETERMINATE) -fixedcasement = express_getattr(IfcWindowPanelOperationEnum, 'FIXEDCASEMENT', INDETERMINATE) -otheroperation = express_getattr(IfcWindowPanelOperationEnum, 'OTHEROPERATION', INDETERMINATE) -pivothorizontal = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTHORIZONTAL', INDETERMINATE) -pivotvertical = express_getattr(IfcWindowPanelOperationEnum, 'PIVOTVERTICAL', INDETERMINATE) -removablecasement = express_getattr(IfcWindowPanelOperationEnum, 'REMOVABLECASEMENT', INDETERMINATE) -sidehunglefthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGLEFTHAND', INDETERMINATE) -sidehungrighthand = express_getattr(IfcWindowPanelOperationEnum, 'SIDEHUNGRIGHTHAND', INDETERMINATE) -slidinghorizontal = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGHORIZONTAL', INDETERMINATE) -slidingvertical = express_getattr(IfcWindowPanelOperationEnum, 'SLIDINGVERTICAL', INDETERMINATE) -tiltandturnlefthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNLEFTHAND', INDETERMINATE) -tiltandturnrighthand = express_getattr(IfcWindowPanelOperationEnum, 'TILTANDTURNRIGHTHAND', INDETERMINATE) -tophung = express_getattr(IfcWindowPanelOperationEnum, 'TOPHUNG', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelOperationEnum, 'NOTDEFINED', INDETERMINATE) +bottomhung = IfcWindowPanelOperationEnum.BOTTOMHUNG +fixedcasement = IfcWindowPanelOperationEnum.FIXEDCASEMENT +otheroperation = IfcWindowPanelOperationEnum.OTHEROPERATION +pivothorizontal = IfcWindowPanelOperationEnum.PIVOTHORIZONTAL +pivotvertical = IfcWindowPanelOperationEnum.PIVOTVERTICAL +removablecasement = IfcWindowPanelOperationEnum.REMOVABLECASEMENT +sidehunglefthand = IfcWindowPanelOperationEnum.SIDEHUNGLEFTHAND +sidehungrighthand = IfcWindowPanelOperationEnum.SIDEHUNGRIGHTHAND +slidinghorizontal = IfcWindowPanelOperationEnum.SLIDINGHORIZONTAL +slidingvertical = IfcWindowPanelOperationEnum.SLIDINGVERTICAL +tiltandturnlefthand = IfcWindowPanelOperationEnum.TILTANDTURNLEFTHAND +tiltandturnrighthand = IfcWindowPanelOperationEnum.TILTANDTURNRIGHTHAND +tophung = IfcWindowPanelOperationEnum.TOPHUNG +notdefined = IfcWindowPanelOperationEnum.NOTDEFINED IfcWindowPanelPositionEnum = enum_namespace() -bottom = express_getattr(IfcWindowPanelPositionEnum, 'BOTTOM', INDETERMINATE) -left = express_getattr(IfcWindowPanelPositionEnum, 'LEFT', INDETERMINATE) -middle = express_getattr(IfcWindowPanelPositionEnum, 'MIDDLE', INDETERMINATE) -right = express_getattr(IfcWindowPanelPositionEnum, 'RIGHT', INDETERMINATE) -top = express_getattr(IfcWindowPanelPositionEnum, 'TOP', INDETERMINATE) -notdefined = express_getattr(IfcWindowPanelPositionEnum, 'NOTDEFINED', INDETERMINATE) +bottom = IfcWindowPanelPositionEnum.BOTTOM +left = IfcWindowPanelPositionEnum.LEFT +middle = IfcWindowPanelPositionEnum.MIDDLE +right = IfcWindowPanelPositionEnum.RIGHT +top = IfcWindowPanelPositionEnum.TOP +notdefined = IfcWindowPanelPositionEnum.NOTDEFINED IfcWindowTypeEnum = enum_namespace() -lightdome = express_getattr(IfcWindowTypeEnum, 'LIGHTDOME', INDETERMINATE) -skylight = express_getattr(IfcWindowTypeEnum, 'SKYLIGHT', INDETERMINATE) -window = express_getattr(IfcWindowTypeEnum, 'WINDOW', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypeEnum, 'NOTDEFINED', INDETERMINATE) +lightdome = IfcWindowTypeEnum.LIGHTDOME +skylight = IfcWindowTypeEnum.SKYLIGHT +window = IfcWindowTypeEnum.WINDOW +userdefined = IfcWindowTypeEnum.USERDEFINED +notdefined = IfcWindowTypeEnum.NOTDEFINED IfcWindowTypePartitioningEnum = enum_namespace() -double_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_HORIZONTAL', INDETERMINATE) -double_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'DOUBLE_PANEL_VERTICAL', INDETERMINATE) -single_panel = express_getattr(IfcWindowTypePartitioningEnum, 'SINGLE_PANEL', INDETERMINATE) -triple_panel_bottom = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_BOTTOM', INDETERMINATE) -triple_panel_horizontal = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_HORIZONTAL', INDETERMINATE) -triple_panel_left = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_LEFT', INDETERMINATE) -triple_panel_right = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_RIGHT', INDETERMINATE) -triple_panel_top = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_TOP', INDETERMINATE) -triple_panel_vertical = express_getattr(IfcWindowTypePartitioningEnum, 'TRIPLE_PANEL_VERTICAL', INDETERMINATE) -userdefined = express_getattr(IfcWindowTypePartitioningEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWindowTypePartitioningEnum, 'NOTDEFINED', INDETERMINATE) +double_panel_horizontal = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_HORIZONTAL +double_panel_vertical = IfcWindowTypePartitioningEnum.DOUBLE_PANEL_VERTICAL +single_panel = IfcWindowTypePartitioningEnum.SINGLE_PANEL +triple_panel_bottom = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_BOTTOM +triple_panel_horizontal = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_HORIZONTAL +triple_panel_left = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_LEFT +triple_panel_right = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_RIGHT +triple_panel_top = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_TOP +triple_panel_vertical = IfcWindowTypePartitioningEnum.TRIPLE_PANEL_VERTICAL +userdefined = IfcWindowTypePartitioningEnum.USERDEFINED +notdefined = IfcWindowTypePartitioningEnum.NOTDEFINED IfcWorkCalendarTypeEnum = enum_namespace() -firstshift = express_getattr(IfcWorkCalendarTypeEnum, 'FIRSTSHIFT', INDETERMINATE) -secondshift = express_getattr(IfcWorkCalendarTypeEnum, 'SECONDSHIFT', INDETERMINATE) -thirdshift = express_getattr(IfcWorkCalendarTypeEnum, 'THIRDSHIFT', INDETERMINATE) -userdefined = express_getattr(IfcWorkCalendarTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkCalendarTypeEnum, 'NOTDEFINED', INDETERMINATE) +firstshift = IfcWorkCalendarTypeEnum.FIRSTSHIFT +secondshift = IfcWorkCalendarTypeEnum.SECONDSHIFT +thirdshift = IfcWorkCalendarTypeEnum.THIRDSHIFT +userdefined = IfcWorkCalendarTypeEnum.USERDEFINED +notdefined = IfcWorkCalendarTypeEnum.NOTDEFINED IfcWorkPlanTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkPlanTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkPlanTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkPlanTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkPlanTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkPlanTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkPlanTypeEnum.ACTUAL +baseline = IfcWorkPlanTypeEnum.BASELINE +planned = IfcWorkPlanTypeEnum.PLANNED +userdefined = IfcWorkPlanTypeEnum.USERDEFINED +notdefined = IfcWorkPlanTypeEnum.NOTDEFINED IfcWorkScheduleTypeEnum = enum_namespace() -actual = express_getattr(IfcWorkScheduleTypeEnum, 'ACTUAL', INDETERMINATE) -baseline = express_getattr(IfcWorkScheduleTypeEnum, 'BASELINE', INDETERMINATE) -planned = express_getattr(IfcWorkScheduleTypeEnum, 'PLANNED', INDETERMINATE) -userdefined = express_getattr(IfcWorkScheduleTypeEnum, 'USERDEFINED', INDETERMINATE) -notdefined = express_getattr(IfcWorkScheduleTypeEnum, 'NOTDEFINED', INDETERMINATE) +actual = IfcWorkScheduleTypeEnum.ACTUAL +baseline = IfcWorkScheduleTypeEnum.BASELINE +planned = IfcWorkScheduleTypeEnum.PLANNED +userdefined = IfcWorkScheduleTypeEnum.USERDEFINED +notdefined = IfcWorkScheduleTypeEnum.NOTDEFINED def IfcActionRequest(*args, **kwargs): return ifcopenshell.create_entity('IfcActionRequest', 'IFC4X3_TC1', *args, **kwargs) From 3983bfa46748f5042c5f232050bc41dd91e0b5c9 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 23 Jan 2026 14:35:54 +0100 Subject: [PATCH 560/657] Don't crash on passing indeterminate to instance expecting aggregates #7529 --- src/ifcwrap/utils/type_conversion.i | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ifcwrap/utils/type_conversion.i b/src/ifcwrap/utils/type_conversion.i index 292a2e0c11..3eacf55fac 100644 --- a/src/ifcwrap/utils/type_conversion.i +++ b/src/ifcwrap/utils/type_conversion.i @@ -31,6 +31,7 @@ bool check_aggregate_of_type(PyObject* aggregate, void* type_obj) { if (!PySequence_Check(aggregate)) return false; + if (PySequence_Size(aggregate) == -1) return false; for(Py_ssize_t i = 0; i < PySequence_Size(aggregate); ++i) { PyObject* element = PySequence_GetItem(aggregate, i); // This is equivalent to the PyFloat_CheckExact macro. This means @@ -46,6 +47,7 @@ bool check_aggregate_of_aggregate_of_type(PyObject* aggregate, void* type_obj) { if (!PySequence_Check(aggregate)) return false; + if (PySequence_Size(aggregate) == -1) return false; for(Py_ssize_t i = 0; i < PySequence_Size(aggregate); ++i) { PyObject* element = PySequence_GetItem(aggregate, i); bool b = check_aggregate_of_type(element, type_obj); From a86c333a99a667cd657c96a116fa3b5bee055ed6 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Fri, 12 Dec 2025 22:44:40 +0100 Subject: [PATCH 561/657] make: Try to build and run others examples --- .github/workflows/ci.yml | 11 ++ cmake/CMakeLists.txt | 1 + src/examples/CMakeLists.txt | 102 ++++++++++++++++++ src/examples/arbitrary_open_profile_def.cpp | 31 +++--- src/examples/composite_profile_def.cpp | 13 +-- src/examples/csg_primitive.cpp | 19 ++-- src/examples/ellipse_pies.cpp | 42 ++++---- src/examples/faces.cpp | 23 ++-- src/examples/ifc_curve_rebar.cpp | 22 ++-- src/examples/profiles.cpp | 81 +++++++------- src/examples/triangulated_faceset.cpp | 20 ++-- src/ifcgeom/Serialization/CMakeLists.txt | 2 +- .../Serialization/schema/CMakeLists.txt | 2 +- 13 files changed, 246 insertions(+), 123 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2392ecb2e..0929efbfc4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -215,11 +215,22 @@ jobs: -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache cmake --build . + # To display executed command + set -x + ./arbitrary_open_profile_def + ./composite_profile_def + ./csg_primitive + ./ellipse_pies + ./faces + ./ifc_curve_rebar + ./profiles ./IfcParseExamples "../IfcParseExamples_test.ifc" ./IfcOpenHouse ./IfcAdvancedHouse ./IfcAlignment ./IfcSimplifiedAlignment + ./triangulated_faceset + set +x - name: Test ifcopenshell-python run: | diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9e88026ac7..0fb45e42eb 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -218,6 +218,7 @@ if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) add_definitions(-DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) + # set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) list(APPEND GEOMETRY_KERNELS opencascade) endif() diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 3a5c0187b5..4eda006ecc 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -35,7 +35,107 @@ else() include_directories("${CMAKE_SOURCE_DIR}/../src") endif() +if(SCHEMA_VERSIONS MATCHES "4") + # arbitrary_open_profile_def + add_executable(arbitrary_open_profile_def arbitrary_open_profile_def.cpp) + + if(STANDALONE_PROJECT) + target_link_libraries(arbitrary_open_profile_def IfcOpenShell::IfcParse) + else() + target_include_directories(arbitrary_open_profile_def PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(arbitrary_open_profile_def IfcParse) + set_target_properties(arbitrary_open_profile_def PROPERTIES FOLDER Examples) + endif() + install(TARGETS arbitrary_open_profile_def) + + # triangulated_faceset + add_executable(triangulated_faceset triangulated_faceset.cpp) + + if(STANDALONE_PROJECT) + target_link_libraries(triangulated_faceset IfcOpenShell::IfcParse) + else() + target_include_directories(triangulated_faceset PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(triangulated_faceset IfcParse) + set_target_properties(triangulated_faceset PROPERTIES FOLDER Examples) + endif() + install(TARGETS triangulated_faceset) + +endif() + if(SCHEMA_VERSIONS MATCHES "2x3") + # composite_profile_def.cpp + add_executable(composite_profile_def composite_profile_def.cpp) + + if(STANDALONE_PROJECT) + target_link_libraries(composite_profile_def IfcOpenShell::IfcParse) + else() + target_include_directories(composite_profile_def PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(composite_profile_def IfcParse) + set_target_properties(composite_profile_def PROPERTIES FOLDER Examples) + endif() + install(TARGETS composite_profile_def) + + # csg_primitive + add_executable(csg_primitive csg_primitive.cpp) + + if(STANDALONE_PROJECT) + target_link_libraries(csg_primitive IfcOpenShell::IfcParse) + else() + target_include_directories(csg_primitive PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(csg_primitive IfcParse) + set_target_properties(csg_primitive PROPERTIES FOLDER Examples) + endif() + install(TARGETS csg_primitive) + + # ellipse_pies + add_executable(ellipse_pies ellipse_pies.cpp) + + if(STANDALONE_PROJECT) + target_link_libraries(ellipse_pies IfcOpenShell::IfcParse) + else() + target_include_directories(ellipse_pies PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(ellipse_pies IfcParse) + set_target_properties(ellipse_pies PROPERTIES FOLDER Examples) + endif() + install(TARGETS ellipse_pies) + + # faces + add_executable(faces faces.cpp) + + if(STANDALONE_PROJECT) + target_link_libraries(faces IfcOpenShell::IfcParse) + else() + target_include_directories(faces PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(faces IfcParse) + set_target_properties(faces PROPERTIES FOLDER Examples) + endif() + install(TARGETS faces) + + # ifc_curve_rebar + add_executable(ifc_curve_rebar ifc_curve_rebar.cpp) + + if(STANDALONE_PROJECT) + target_link_libraries(ifc_curve_rebar IfcOpenShell::IfcParse) + else() + target_include_directories(ifc_curve_rebar PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(ifc_curve_rebar IfcParse) + set_target_properties(ifc_curve_rebar PROPERTIES FOLDER Examples) + endif() + install(TARGETS ifc_curve_rebar) + + # profiles + add_executable(profiles profiles.cpp) + + if(STANDALONE_PROJECT) + target_link_libraries(profiles IfcOpenShell::IfcParse) + else() + target_include_directories(profiles PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(profiles IfcParse) + set_target_properties(profiles PROPERTIES FOLDER Examples) + endif() + install(TARGETS profiles) + + # IfcParseExamples add_executable(IfcParseExamples IfcParseExamples.cpp) if(STANDALONE_PROJECT) @@ -48,6 +148,7 @@ if(SCHEMA_VERSIONS MATCHES "2x3") install(TARGETS IfcParseExamples) if(WITH_OPENCASCADE) + # IfcOpenHouse and IfcAdvancedHouse add_executable(IfcOpenHouse IfcOpenHouse.cpp) add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) add_library(IfcHouseInterface INTERFACE) @@ -66,6 +167,7 @@ if(SCHEMA_VERSIONS MATCHES "2x3") endif() if(SCHEMA_VERSIONS MATCHES "4x3_add2") + # IfcAlignment and IfcSimplifiedAlignment add_executable(IfcAlignment IfcAlignment.cpp) add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp) add_library(IfcAlignmentInterface INTERFACE) diff --git a/src/examples/arbitrary_open_profile_def.cpp b/src/examples/arbitrary_open_profile_def.cpp index 45495736d5..5393af53ae 100644 --- a/src/examples/arbitrary_open_profile_def.cpp +++ b/src/examples/arbitrary_open_profile_def.cpp @@ -28,16 +28,16 @@ #include #include -#include "../ifcparse/Ifc2x3.h" -#include "../ifcparse/IfcUtil.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#define IfcSchema Ifc4 +#include "ifcparse/Ifc4.h" +#include "ifcparse/IfcHierarchyHelper.h" typedef std::string S; typedef IfcParse::IfcGlobalId guid; boost::none_t const null = boost::none; static int i = 0; -void create_product_from_item(IfcHierarchyHelper& file, IfcSchema::IfcRepresentationItem* item, const std::string& s) { +void create_product_from_item(IfcHierarchyHelper& file, IfcSchema::IfcRepresentationItem* item, const std::string& s) { IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy( guid(), 0, S("product"), null, null, 0, 0, null, null); file.addBuildingProduct(product); @@ -50,7 +50,7 @@ void create_product_from_item(IfcHierarchyHelper& file, IfcSchema::IfcRepresenta items->push(item); if (s == "GeometricSet") { - IfcSchema::IfcGeometricSet* set = new IfcSchema::IfcGeometricSet(items->generalize()); + IfcSchema::IfcGeometricSet* set = new IfcSchema::IfcGeometricSet(items->as()); file.addEntity(set); items = IfcSchema::IfcRepresentationItem::list::ptr(new IfcSchema::IfcRepresentationItem::list()); items->push(set); @@ -67,7 +67,7 @@ void create_product_from_item(IfcHierarchyHelper& file, IfcSchema::IfcRepresenta product->setRepresentation(shape); } -void create_surfaces_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileDef* profile) { +void create_surfaces_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileDef* profile) { IfcSchema::IfcSurfaceOfLinearExtrusion* extrusion = new IfcSchema::IfcSurfaceOfLinearExtrusion(profile, file.addPlacement3d(), file.addTriplet(0, 0, 1), 100.); file.addEntity(extrusion); @@ -80,7 +80,7 @@ void create_surfaces_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfil create_product_from_item(file, revolution, "GeometricSet"); } -void create_solids_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileDef* profile) { +void create_solids_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileDef* profile) { IfcSchema::IfcExtrudedAreaSolid* extrusion = new IfcSchema::IfcExtrudedAreaSolid(profile, file.addPlacement3d(), file.addTriplet(0, 0, 1), 100.); file.addEntity(extrusion); @@ -96,7 +96,7 @@ void create_solids_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileD create_product_from_item(file, revolution2, "SweptSolid"); } -void create_products_from_curve(IfcHierarchyHelper& file, IfcSchema::IfcBoundedCurve* curve) { +void create_products_from_curve(IfcHierarchyHelper& file, IfcSchema::IfcBoundedCurve* curve) { IfcSchema::IfcArbitraryOpenProfileDef* open = new IfcSchema::IfcArbitraryOpenProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE, null, curve); IfcSchema::IfcCenterLineProfileDef* center_line = new IfcSchema::IfcCenterLineProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, curve, 10.); file.addEntity(open); @@ -108,8 +108,8 @@ void create_products_from_curve(IfcHierarchyHelper& file, IfcSchema::IfcBoundedC int main(int argc, char** argv) { const char filename[] = "IfcArbitraryOpenProfileDef.ifc"; - IfcHierarchyHelper file; - file.header().file_name().name(filename); + IfcHierarchyHelper file; + file.header().file_name()->setname(filename); double coords1[] = {-50.0, 0.0}; double coords2[] = { 50.0, 0.0}; @@ -124,17 +124,18 @@ int main(int argc, char** argv) { IfcSchema::IfcEllipse* ellipse = new IfcSchema::IfcEllipse(file.addPlacement2d(), 50., 25.); file.addEntity(ellipse); - IfcEntityList::ptr trim1(new IfcEntityList); - IfcEntityList::ptr trim2(new IfcEntityList); + aggregate_of_instance::ptr trim1(new aggregate_of_instance); + aggregate_of_instance::ptr trim2(new aggregate_of_instance); trim1->push(new IfcSchema::IfcParameterValue( 0.)); trim2->push(new IfcSchema::IfcParameterValue(180.)); - IfcSchema::IfcTrimmedCurve* trim = new IfcSchema::IfcTrimmedCurve(ellipse, trim1, trim2, true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + IfcSchema::IfcTrimmedCurve* trim = new IfcSchema::IfcTrimmedCurve(ellipse, trim1->as(), trim2->as(), true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); file.addEntity(trim); create_products_from_curve(file, trim); - file.getSingle()->setName("IfcArbitraryOpenProfileDef"); + using namespace std::string_literals; + file.getSingle()->setName("IfcArbitraryOpenProfileDef"s); std::ofstream f(filename); f << file; -} +} \ No newline at end of file diff --git a/src/examples/composite_profile_def.cpp b/src/examples/composite_profile_def.cpp index 5ff41a3b13..3a7281be43 100644 --- a/src/examples/composite_profile_def.cpp +++ b/src/examples/composite_profile_def.cpp @@ -27,9 +27,9 @@ #include #include -#include "../ifcparse/Ifc2x3.h" -#include "../ifcparse/IfcUtil.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#define IfcSchema Ifc2x3 +#include "ifcparse/Ifc2x3.h" +#include "ifcparse/IfcHierarchyHelper.h" typedef std::string S; typedef IfcParse::IfcGlobalId guid; @@ -37,8 +37,8 @@ boost::none_t const null = boost::none; int main(int argc, char** argv) { const char filename[] = "IfcCompositeProfileDef.ifc"; - IfcHierarchyHelper file; - file.header().file_name().name(filename); + IfcHierarchyHelper file; + file.header().file_name()->setname(filename); double coords1[] = {100.0, 0.0}; double coords2[] = {200.0, 0.0}; @@ -112,7 +112,8 @@ int main(int argc, char** argv) { product->setRepresentation(shape); - file.getSingle()->setName("IfcCompositeProfileDef"); + using namespace std::string_literals; + file.getSingle()->setName("IfcCompositeProfileDef"s); std::ofstream f(filename); f << file; diff --git a/src/examples/csg_primitive.cpp b/src/examples/csg_primitive.cpp index 190236ed6b..b157281402 100644 --- a/src/examples/csg_primitive.cpp +++ b/src/examples/csg_primitive.cpp @@ -27,9 +27,9 @@ #include #include -#include "../ifcparse/Ifc2x3.h" -#include "../ifcparse/IfcUtil.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#define IfcSchema Ifc2x3 +#include "ifcparse/Ifc2x3.h" +#include "ifcparse/IfcHierarchyHelper.h" typedef std::string S; typedef IfcParse::IfcGlobalId guid; @@ -101,7 +101,7 @@ public: return operate(OP_INTERSECT, p); } - IfcSchema::IfcRepresentationItem* serialize(IfcHierarchyHelper& file) const { + IfcSchema::IfcRepresentationItem* serialize(IfcHierarchyHelper& file) const { IfcSchema::IfcRepresentationItem* my; if (op == OP_TERMINAL) { IfcSchema::IfcAxis2Placement3D* place = file.addPlacement3d(x,y,z,zx,zy,zz,xx,xy,xz); @@ -117,7 +117,7 @@ public: my = new IfcSchema::IfcRightCircularCone(place, b, a); } } else { - IfcSchema::IfcBooleanOperator::IfcBooleanOperator o; + IfcSchema::IfcBooleanOperator o = IfcSchema::IfcBooleanOperator::IfcBooleanOperator_UNION; if (op == OP_ADD) { o = IfcSchema::IfcBooleanOperator::IfcBooleanOperator_UNION; } else if (op == OP_SUBTRACT) { @@ -125,7 +125,7 @@ public: } else if (op == OP_INTERSECT) { o = IfcSchema::IfcBooleanOperator::IfcBooleanOperator_INTERSECTION; } - my = new IfcSchema::IfcBooleanResult(o, left->serialize(file), right->serialize(file)); + my = new IfcSchema::IfcBooleanResult(o, left->serialize(file)->as(), right->serialize(file)->as()); } file.addEntity(my); return my; @@ -134,8 +134,8 @@ public: int main(int argc, char** argv) { const char filename[] = "IfcCsgPrimitive.ifc"; - IfcHierarchyHelper file; - file.header().file_name().name(filename); + IfcHierarchyHelper file; + file.header().file_name()->setname(filename); IfcSchema::IfcRepresentationItem* csg1 = Node::Box(8000.,6000.,3000.).subtract( Node::Box(7600.,5600.,2800.).move(200.,200.,200.) @@ -186,7 +186,8 @@ int main(int argc, char** argv) { product->setRepresentation(shape); - file.getSingle()->setName("IfcCompositeProfileDef"); + using namespace std::string_literals; + file.getSingle()->setName("IfcCompositeProfileDef"s); std::ofstream f(filename); f << file; diff --git a/src/examples/ellipse_pies.cpp b/src/examples/ellipse_pies.cpp index 9994ca820d..8128c4377c 100644 --- a/src/examples/ellipse_pies.cpp +++ b/src/examples/ellipse_pies.cpp @@ -27,9 +27,9 @@ #include #include -#include "../ifcparse/Ifc2x3.h" -#include "../ifcparse/IfcUtil.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#define IfcSchema Ifc2x3 +#include "ifcparse/Ifc2x3.h" +#include "ifcparse/IfcHierarchyHelper.h" typedef std::string S; typedef IfcParse::IfcGlobalId guid; @@ -44,7 +44,7 @@ typedef struct { static int i = 0; -void create_testcase_for(IfcHierarchyHelper& file, const EllipsePie& pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference pref) { +void create_testcase_for(IfcHierarchyHelper& file, const EllipsePie& pie, IfcSchema::IfcTrimmingPreference pref) { const double deg = 1. / 180. * 3.141592653; double flt1[] = {0. , 0. }; double flt2[] = {pie.r1 * cos(pie.t1*deg), pie.r2 * sin(pie.t1*deg)}; @@ -67,16 +67,16 @@ void create_testcase_for(IfcHierarchyHelper& file, const EllipsePie& pie, Ifc2x3 Ifc2x3::IfcEllipse* ellipse = new Ifc2x3::IfcEllipse(file.addPlacement2d(), pie.r1, pie.r2); file.addEntity(ellipse); - IfcEntityList::ptr trim1(new IfcEntityList); - IfcEntityList::ptr trim2(new IfcEntityList); - if (pref == Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER) { + aggregate_of_instance::ptr trim1(new aggregate_of_instance); + aggregate_of_instance::ptr trim2(new aggregate_of_instance); + if (pref == IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER) { trim1->push(new Ifc2x3::IfcParameterValue(pie.t1)); trim2->push(new Ifc2x3::IfcParameterValue(pie.t2)); } else { trim1->push(p2); trim2->push(p3); } - Ifc2x3::IfcTrimmedCurve* trim = new Ifc2x3::IfcTrimmedCurve(ellipse, trim1, trim2, true, pref); + Ifc2x3::IfcTrimmedCurve* trim = new Ifc2x3::IfcTrimmedCurve(ellipse, trim1->as(), trim2->as(), true, pref); file.addEntity(trim); Ifc2x3::IfcCompositeCurveSegment::list::ptr segments(new Ifc2x3::IfcCompositeCurveSegment::list()); @@ -124,25 +124,25 @@ void create_testcase_for(IfcHierarchyHelper& file, const EllipsePie& pie, Ifc2x3 int main(int argc, char** argv) { const std::string filename = "ellipse_pies.ifc"; - IfcHierarchyHelper file; + IfcHierarchyHelper file; { EllipsePie pie = {80., 50., 0., 150.}; - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} { EllipsePie pie = {80, 50., 30., 300.}; - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} { EllipsePie pie = {80, 50., 300., 30.}; - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} { EllipsePie pie = {50., 80., 0., 150.}; - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} { EllipsePie pie = {50, 80., 30., 300.}; - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} { EllipsePie pie = {50, 80., 300., 30.}; - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); - create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} std::ofstream f(filename.c_str()); f << file; } diff --git a/src/examples/faces.cpp b/src/examples/faces.cpp index 985b23dd8e..f7e3858c58 100644 --- a/src/examples/faces.cpp +++ b/src/examples/faces.cpp @@ -22,18 +22,19 @@ * Example that generates various forms of IfcFace * * * ********************************************************************************/ +#include -#include "../ifcparse/Ifc2x3.h" -#include "../ifcparse/IfcUtil.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#define IfcSchema Ifc2x3 +#include "ifcparse/Ifc2x3.h" +#include "ifcparse/IfcHierarchyHelper.h" typedef std::string S; typedef IfcParse::IfcGlobalId guid; -boost::none_t const null = (static_cast(0)); +boost::none_t const null = boost::none; static int x = 0; -void create_testcase(IfcHierarchyHelper& file, IfcSchema::IfcFace* face, const std::string& name) { +void create_testcase(IfcHierarchyHelper& file, IfcSchema::IfcFace* face, const std::string& name) { IfcSchema::IfcFace::list::ptr faces(new IfcSchema::IfcFace::list); faces->push(face); IfcSchema::IfcOpenShell* shell = new IfcSchema::IfcOpenShell(faces); @@ -57,14 +58,14 @@ void create_testcase(IfcHierarchyHelper& file, IfcSchema::IfcFace* face, const s file.getRepresentationContext("Model"), S("Body"), S("SurfaceModel"), items); reps->push(rep); - IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(0, 0, reps); + IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(boost::none, boost::none, reps); file.addEntity(shape); product->setRepresentation(shape); } int main(int argc, char** argv) { - IfcHierarchyHelper file; + IfcHierarchyHelper file; { IfcSchema::IfcCartesianPoint::list::ptr points (new IfcSchema::IfcCartesianPoint::list); points->push(file.addTriplet(-400, -400, 0)); @@ -192,7 +193,7 @@ int main(int argc, char** argv) { IfcSchema::IfcCartesianPoint::list::ptr trim2(new IfcSchema::IfcCartesianPoint::list); trim1->push(point1); trim2->push(point2); - IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1->generalize(), trim2->generalize(), true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN); + IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1->generalize()->as(), trim2->generalize()->as(), true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN); IfcSchema::IfcArbitraryOpenProfileDef* profile = new IfcSchema::IfcArbitraryOpenProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE, boost::none, trimmed_curve); IfcSchema::IfcAxis1Placement* place = new IfcSchema::IfcAxis1Placement(file.addTriplet(0., 0., 0.), file.addTriplet(1., 0., 0.)); IfcSchema::IfcSurfaceOfRevolution* surface = new IfcSchema::IfcSurfaceOfRevolution(profile, file.addPlacement3d(), place); @@ -200,8 +201,8 @@ int main(int argc, char** argv) { IfcSchema::IfcFace* face = new IfcSchema::IfcFaceSurface(bounds, surface, true); create_testcase(file, face, "face surface"); } - const std::string filename = "faces.ifc"; - file.header().file_name().name(filename); - std::ofstream f(filename.c_str()); + const char filename[] = "faces.ifc"; + file.header().file_name()->setname(filename); + std::ofstream f(filename); f << file; } \ No newline at end of file diff --git a/src/examples/ifc_curve_rebar.cpp b/src/examples/ifc_curve_rebar.cpp index 2ba269e015..4e674d5e95 100644 --- a/src/examples/ifc_curve_rebar.cpp +++ b/src/examples/ifc_curve_rebar.cpp @@ -27,16 +27,15 @@ #include #include -#include "ifcparse\Ifc2x3.h" -#include "ifcparse\IfcUtil.h" -#include "ifcparse\IfcHierarchyHelper.h" -#include "ifcgeom\IfcGeom.h" +#define IfcSchema Ifc2x3 +#include "ifcparse/Ifc2x3.h" +#include "ifcparse/IfcHierarchyHelper.h" typedef std::string S; typedef IfcParse::IfcGlobalId guid; boost::none_t const null = boost::none; -void create_curve_rebar(IfcHierarchyHelper& file) +void create_curve_rebar(IfcHierarchyHelper& file) { int dia = 24; int R = 3 * dia; @@ -83,15 +82,16 @@ void create_curve_rebar(IfcHierarchyHelper& file) IfcSchema::IfcCircle* circle = new IfcSchema::IfcCircle(axis1, R); file.addEntity(circle); - IfcEntityList::ptr trim1(new IfcEntityList); - IfcEntityList::ptr trim2(new IfcEntityList); - + aggregate_of_instance::ptr trim1(new aggregate_of_instance); + aggregate_of_instance::ptr trim2(new aggregate_of_instance); + trim1->push(new IfcSchema::IfcParameterValue(180)); trim1->push(p2); trim2->push(new IfcSchema::IfcParameterValue(270)); trim2->push(p4); - IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1, trim2, false, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + + IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1->as(), trim2->as(), false, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); file.addEntity(trimmed_curve); IfcSchema::IfcCompositeCurveSegment* segment2 = new IfcSchema::IfcCompositeCurveSegment(IfcSchema::IfcTransitionCode::IfcTransitionCode_CONTSAMEGRADIENT, false, trimmed_curve); @@ -133,8 +133,8 @@ void create_curve_rebar(IfcHierarchyHelper& file) int main() { - IfcHierarchyHelper file; - file.header().file_name().name("ifc_curve_rebar.ifc"); + IfcHierarchyHelper file; + file.header().file_name()->setname("ifc_curve_rebar.ifc"); create_curve_rebar(file); std::ofstream f("ifc_curve_rebar.ifc"); f << file; diff --git a/src/examples/profiles.cpp b/src/examples/profiles.cpp index d171745dc7..78cc67f13f 100644 --- a/src/examples/profiles.cpp +++ b/src/examples/profiles.cpp @@ -27,21 +27,21 @@ #include #include -#include "../ifcparse/Ifc2x3.h" -#include "../ifcparse/IfcUtil.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#define IfcSchema Ifc2x3 +#include "ifcparse/Ifc2x3.h" +#include "ifcparse/IfcHierarchyHelper.h" typedef std::string S; -typedef IfcWrite::IfcGuidHelper guid; -boost::none_t const null = (static_cast(0)); +typedef IfcParse::IfcGlobalId guid; +boost::none_t const null = boost::none; void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) { IfcSchema::IfcProfileDef* profile = *profiles->begin(); - const std::string profile_type = IfcSchema::Type::ToString(profile->type()); + const std::string& profile_type = profile->declaration().name(); const std::string filename = profile_type + ".ifc"; - IfcHierarchyHelper file; - file.filename(filename); + IfcHierarchyHelper file; + file.header().file_name()->setname(filename); int i = 0; for (IfcSchema::IfcProfileDef::list::it it = profiles->begin(); it != profiles->end(); ++it, ++i) { @@ -54,7 +54,7 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) { product->setObjectPlacement(file.addLocalPlacement(0, 100. * i)); - if (profile->is(IfcSchema::Type::IfcParameterizedProfileDef)) { + if (profile->declaration().is(IfcSchema::IfcParameterizedProfileDef::Class())) { ((IfcSchema::IfcParameterizedProfileDef*) profile)->setPosition(file.addPlacement2d()); } @@ -72,7 +72,7 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) { file.getSingle(), S("Body"), S("SweptSolid"), items); reps->push(rep); - IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(0, 0, reps); + IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(null, null, reps); file.addEntity(rep); file.addEntity(shape); @@ -84,122 +84,123 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) { } int main(int argc, char** argv) { + IfcSchema::get_schema(); // Ensure schema is initialized { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcUShapeProfileDef( + profiles->push(new IfcSchema::IfcUShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null)); - profiles->push(new Ifc2x3::IfcUShapeProfileDef( + profiles->push(new IfcSchema::IfcUShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0, null, null)); - profiles->push(new Ifc2x3::IfcUShapeProfileDef( + profiles->push(new IfcSchema::IfcUShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, null, null, 4.0, null)); - profiles->push(new Ifc2x3::IfcUShapeProfileDef( + profiles->push(new IfcSchema::IfcUShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, 1.0, 3.0, 6.0, null)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcTShapeProfileDef( + profiles->push(new IfcSchema::IfcTShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null, null, null)); - profiles->push(new Ifc2x3::IfcTShapeProfileDef( + profiles->push(new IfcSchema::IfcTShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0, 2.0, null, null, null)); - profiles->push(new Ifc2x3::IfcTShapeProfileDef( + profiles->push(new IfcSchema::IfcTShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, 2.0, 2.0, null)); - profiles->push(new Ifc2x3::IfcTShapeProfileDef( + profiles->push(new IfcSchema::IfcTShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, 3.0, 2.0, 1.0, 2.0, 2.0, null)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcZShapeProfileDef( + profiles->push(new IfcSchema::IfcZShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, null, null)); - profiles->push(new Ifc2x3::IfcZShapeProfileDef( + profiles->push(new IfcSchema::IfcZShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcEllipseProfileDef( + profiles->push(new IfcSchema::IfcEllipseProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 25.0, 15.0)); - profiles->push(new Ifc2x3::IfcEllipseProfileDef( + profiles->push(new IfcSchema::IfcEllipseProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 15.0, 25.0)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcIShapeProfileDef( + profiles->push(new IfcSchema::IfcIShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 25.0, 50.0, 5.0, 5.0, null)); - profiles->push(new Ifc2x3::IfcIShapeProfileDef( + profiles->push(new IfcSchema::IfcIShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 25.0, 50.0, 5.0, 5.0, 2.0)); - profiles->push(new Ifc2x3::IfcAsymmetricIShapeProfileDef( + profiles->push(new IfcSchema::IfcAsymmetricIShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 25.0, 50.0, 5.0, 5.0, 2.0, 20.0, 10.0, 5.0, null)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcLShapeProfileDef( + profiles->push(new IfcSchema::IfcLShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, null, null, null, null, null)); - profiles->push(new Ifc2x3::IfcLShapeProfileDef( + profiles->push(new IfcSchema::IfcLShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 2.0, 2.0, null, null, null)); - profiles->push(new Ifc2x3::IfcLShapeProfileDef( + profiles->push(new IfcSchema::IfcLShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, null, null, 2.0, null, null)); - profiles->push(new Ifc2x3::IfcLShapeProfileDef( + profiles->push(new IfcSchema::IfcLShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 1.0, 2.0, 2.0, null, null)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcCShapeProfileDef( + profiles->push(new IfcSchema::IfcCShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 10.0, null, null)); - profiles->push(new Ifc2x3::IfcCShapeProfileDef( + profiles->push(new IfcSchema::IfcCShapeProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 10.0, 2.0, null)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcCircleProfileDef( + profiles->push(new IfcSchema::IfcCircleProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 25.0)); - profiles->push(new Ifc2x3::IfcCircleHollowProfileDef( + profiles->push(new IfcSchema::IfcCircleHollowProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 25.0, 5.0)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcRectangleProfileDef( + profiles->push(new IfcSchema::IfcRectangleProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0)); - profiles->push(new Ifc2x3::IfcRoundedRectangleProfileDef( + profiles->push(new IfcSchema::IfcRoundedRectangleProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0)); - profiles->push(new Ifc2x3::IfcRectangleHollowProfileDef( + profiles->push(new IfcSchema::IfcRectangleHollowProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, null, null)); - profiles->push(new Ifc2x3::IfcRectangleHollowProfileDef( + profiles->push(new IfcSchema::IfcRectangleHollowProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 25.0, 5.0, 2.0, 4.0)); create_testcase_for(profiles); } { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); - profiles->push(new Ifc2x3::IfcTrapeziumProfileDef( + profiles->push(new IfcSchema::IfcTrapeziumProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 30.0, 25.0, 0.0)); - profiles->push(new Ifc2x3::IfcTrapeziumProfileDef( + profiles->push(new IfcSchema::IfcTrapeziumProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 60.0, 25.0, -20.0)); - profiles->push(new Ifc2x3::IfcTrapeziumProfileDef( + profiles->push(new IfcSchema::IfcTrapeziumProfileDef( IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, 0, 50.0, 10.0, 25.0, 30.0)); create_testcase_for(profiles); } diff --git a/src/examples/triangulated_faceset.cpp b/src/examples/triangulated_faceset.cpp index acf56d60c1..f54ae4f3d0 100644 --- a/src/examples/triangulated_faceset.cpp +++ b/src/examples/triangulated_faceset.cpp @@ -23,15 +23,19 @@ * * ********************************************************************************/ -#include "../ifcparse/Ifc4.h" -#include "../ifcparse/IfcUtil.h" -#include "../ifcparse/IfcHierarchyHelper.h" +#include +#include +#include + +#define IfcSchema Ifc4 +#include "ifcparse/Ifc4.h" +#include "ifcparse/IfcHierarchyHelper.h" #include "suzanne_geometry.h" typedef std::string S; typedef IfcParse::IfcGlobalId guid; -boost::none_t const null = (static_cast(0)); +boost::none_t const null = boost::none; template std::vector< std::vector > create_vector_from_array(const T* arr, unsigned size) { @@ -50,7 +54,7 @@ std::vector< std::vector > create_vector_from_array(const T* arr, unsigned si } int main(int argc, char** argv) { - IfcHierarchyHelper file; + IfcHierarchyHelper file; IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy( guid(), 0, S("Blender's Suzanne"), null, null, 0, 0, null, null); @@ -73,13 +77,13 @@ int main(int argc, char** argv) { file.getRepresentationContext("Model"), S("Body"), S("SurfaceModel"), items); reps->push(rep); - IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(0, 0, reps); + IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(boost::none, boost::none, reps); file.addEntity(shape); product->setRepresentation(shape); const std::string filename = "tesselated_faceset.ifc"; - file.header().file_name().name(filename); - std::ofstream f(filename.c_str()); + file.header().file_name()->setname(filename); + std::ofstream f(filename); f << file; } diff --git a/src/ifcgeom/Serialization/CMakeLists.txt b/src/ifcgeom/Serialization/CMakeLists.txt index 4463cabcc9..0c49136101 100644 --- a/src/ifcgeom/Serialization/CMakeLists.txt +++ b/src/ifcgeom/Serialization/CMakeLists.txt @@ -1,6 +1,6 @@ add_subdirectory(schema) -add_library(geometry_serializer STATIC Serialization.cpp) +add_library(geometry_serializer Serialization.cpp) file(GLOB IFCGEOM_SERIALIZATION_H_FILE *.h) set_target_properties( diff --git a/src/ifcgeom/Serialization/schema/CMakeLists.txt b/src/ifcgeom/Serialization/schema/CMakeLists.txt index b6daf97cd9..583c177634 100644 --- a/src/ifcgeom/Serialization/schema/CMakeLists.txt +++ b/src/ifcgeom/Serialization/schema/CMakeLists.txt @@ -1,5 +1,5 @@ foreach(schema ${SCHEMA_VERSIONS}) - add_library(geometry_serializer_ifc${schema} STATIC Serialization.cpp) + add_library(geometry_serializer_ifc${schema} OBJECT Serialization.cpp) target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES}) set_target_properties( geometry_serializer_ifc${schema} From 0577dbe86585f4efcbdbfb4b33654b54efc4063c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 22:46:21 +0000 Subject: [PATCH 562/657] Bump black from 25.12 to 26.1.0 Bumps [black](https://github.com/psf/black) from 25.12 to 26.1.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/25.12.0...26.1.0) --- updated-dependencies: - dependency-name: black dependency-version: 26.1.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0c7914f541..fec403b497 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,7 +2,7 @@ name = "IfcOpenShell" version = "0.0.0" dependencies = [ - "black==25.12", + "black==26.1.0", "ruff==0.14.13", "poethepoet", "gersemi==0.25.1", From 7636ff3fdbccebd57a5438fdfecc3a2763b7396d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Jan 2026 02:46:15 +0000 Subject: [PATCH 563/657] Bump ruff from 0.14.13 to 0.14.14 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.13 to 0.14.14. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.14.13...0.14.14) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.14.14 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fec403b497..b932db42a1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "IfcOpenShell" version = "0.0.0" dependencies = [ "black==26.1.0", - "ruff==0.14.13", + "ruff==0.14.14", "poethepoet", "gersemi==0.25.1", ] From cf52607528042bd9b36a49227846dd3c6c37d84b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 24 Jan 2026 14:19:57 +1100 Subject: [PATCH 564/657] Fix #7591. Save pset as template now considers all psets in the file, not just the active one. --- src/bonsai/bonsai/bim/module/pset/operator.py | 2 +- src/bonsai/bonsai/tool/pset_template.py | 30 +++++++----- src/bonsai/test/tool/test_pset_template.py | 48 +++++++++++++++++++ 3 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 src/bonsai/test/tool/test_pset_template.py diff --git a/src/bonsai/bonsai/bim/module/pset/operator.py b/src/bonsai/bonsai/bim/module/pset/operator.py index cbd7a7fe77..4e063b4ada 100644 --- a/src/bonsai/bonsai/bim/module/pset/operator.py +++ b/src/bonsai/bonsai/bim/module/pset/operator.py @@ -569,7 +569,7 @@ class SavePsetAsTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOpera template_file = IfcStore.pset_template_file assert template_file - tool.PsetTemplate.add_pset_as_template(pset, template_file) + tool.PsetTemplate.add_pset_as_template(pset.Name, template_file) template_file.write(IfcStore.pset_template_path) bonsai.bim.handler.refresh_ui_data() diff --git a/src/bonsai/bonsai/tool/pset_template.py b/src/bonsai/bonsai/tool/pset_template.py index 3da6dad2e5..66a65e820c 100644 --- a/src/bonsai/bonsai/tool/pset_template.py +++ b/src/bonsai/bonsai/tool/pset_template.py @@ -61,19 +61,23 @@ class PsetTemplate(bonsai.core.tool.PsetTemplate): tool.Ifc.Operator._execute(self, context) @classmethod - def add_pset_as_template( - cls, pset: ifcopenshell.entity_instance, template_file: ifcopenshell.file - ) -> ifcopenshell.entity_instance: - # TODO: add tests. - pset_template = ifcopenshell.api.pset_template.add_pset_template(template_file, pset.Name) - for property in pset.HasProperties: - ifcopenshell.api.pset_template.add_prop_template( - template_file, - pset_template, - name=property.Name, - description=property.Description, - primary_measure_type=property.NominalValue.is_a(), - ) + def add_pset_as_template(cls, pset_name: str, template_file: ifcopenshell.file) -> ifcopenshell.entity_instance: + added_prop_names = set() + pset_template = ifcopenshell.api.pset_template.add_pset_template(template_file, pset_name) + for pset in tool.Ifc.get().by_type("IfcPropertySet"): + if pset.Name != pset_name: + continue + for prop in pset.HasProperties: + if prop.Name in added_prop_names: + continue + added_prop_names.add(prop.Name) + ifcopenshell.api.pset_template.add_prop_template( + template_file, + pset_template, + name=prop.Name, + description=prop.Description, + primary_measure_type=prop.NominalValue.is_a(), + ) return pset_template @classmethod diff --git a/src/bonsai/test/tool/test_pset_template.py b/src/bonsai/test/tool/test_pset_template.py new file mode 100644 index 0000000000..a104f8baff --- /dev/null +++ b/src/bonsai/test/tool/test_pset_template.py @@ -0,0 +1,48 @@ +# Bonsai - OpenBIM Blender Add-on +# Copyright (C) 2021 Dion Moult +# +# This file is part of Bonsai. +# +# Bonsai is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Bonsai 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Bonsai. If not, see . + +import bpy +import ifcopenshell +import ifcopenshell.api +import ifcopenshell.api.pset +import bonsai.core.tool +import bonsai.tool as tool +from bonsai.tool.pset_template import PsetTemplate as subject +from test.bim.bootstrap import NewFile + + +class TestImplementsTool(NewFile): + def test_run(self): + assert isinstance(subject(), bonsai.core.tool.PsetTemplate) + + +class TestAddPsetAsTemplate(NewFile): + def test_run(self): + ifc = ifcopenshell.file() + tool.Ifc.set(ifc) + element1 = ifc.createIfcWall() + element2 = ifc.createIfcWall() + pset = ifcopenshell.api.pset.add_pset(ifc, product=element1, name="Foo") + prop = ifcopenshell.api.pset.edit_pset(ifc, pset=pset, properties={"Foo": "a"}) + pset = ifcopenshell.api.pset.add_pset(ifc, product=element2, name="Foo") + prop = ifcopenshell.api.pset.edit_pset(ifc, pset=pset, properties={"Bar": "b"}) + library = ifcopenshell.file() + assert (pset_template := subject.add_pset_as_template("Foo", library)) + assert pset_template.is_a("IfcPropertySetTemplate") + assert len(templates := pset_template.HasPropertyTemplates) == 2 + assert set(t.Name for t in templates) == {"Foo", "Bar"} From 8f3715c0f14dd2a5b49020c6e7ed1319074fc608 Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Fri, 23 Jan 2026 20:41:40 +0100 Subject: [PATCH 565/657] review: Take into account remarks --- .github/workflows/ci.yml | 36 +++-- cmake/CMakeLists.txt | 1 - src/examples/CMakeLists.txt | 162 +++----------------- src/examples/IfcAlignment.cpp | 2 +- src/examples/IfcSimplifiedAlignment.cpp | 2 +- src/examples/arbitrary_open_profile_def.cpp | 4 +- src/examples/composite_profile_def.cpp | 4 +- src/examples/csg_primitive.cpp | 4 +- src/examples/ifc_curve_rebar.cpp | 6 +- src/examples/triangulated_faceset.cpp | 2 +- 10 files changed, 59 insertions(+), 164 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0929efbfc4..6a2fe8ce5d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -209,28 +209,36 @@ jobs: - name: Build standalone examples to test cmake package run: | + set -x cd src/examples mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache cmake --build . - # To display executed command - set -x - ./arbitrary_open_profile_def - ./composite_profile_def - ./csg_primitive - ./ellipse_pies - ./faces - ./ifc_curve_rebar + ./arbitrary_open_profile_def && test -f arbitrary_open_profile_def.ifc + ./composite_profile_def && test -f composite_profile_def.ifc + ./csg_primitive && test -f csg_primitive.ifc + ./ellipse_pies && test -f ellipse_pies.ifc + ./faces && test -f faces.ifc + ./ifc_curve_rebar && test -f ifc_curve_rebar.ifc ./profiles + test -f IfcUShapeProfileDef.ifc + test -f IfcTShapeProfileDef.ifc + test -f IfcZShapeProfileDef.ifc + test -f IfcEllipseProfileDef.ifc + test -f IfcIShapeProfileDef.ifc + test -f IfcLShapeProfileDef.ifc + test -f IfcCShapeProfileDef.ifc + test -f IfcCircleProfileDef.ifc + test -f IfcRectangleProfileDef.ifc + test -f IfcTrapeziumProfileDef.ifc ./IfcParseExamples "../IfcParseExamples_test.ifc" - ./IfcOpenHouse - ./IfcAdvancedHouse - ./IfcAlignment - ./IfcSimplifiedAlignment - ./triangulated_faceset - set +x + ./IfcOpenHouse && test -f IfcOpenHouse.ifc + ./IfcAdvancedHouse && test -f IfcAdvancedHouse.ifc + ./IfcAlignment && test -f IfcAlignment.ifc + ./IfcSimplifiedAlignment && test -f IfcSimplifiedAlignment.ifc + ./triangulated_faceset && test -f triangulated_faceset.ifc - name: Test ifcopenshell-python run: | diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0fb45e42eb..9e88026ac7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -218,7 +218,6 @@ if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) add_definitions(-DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) - # set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) list(APPEND GEOMETRY_KERNELS opencascade) endif() diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 4eda006ecc..79a2399821 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -35,153 +35,41 @@ else() include_directories("${CMAKE_SOURCE_DIR}/../src") endif() -if(SCHEMA_VERSIONS MATCHES "4") - # arbitrary_open_profile_def - add_executable(arbitrary_open_profile_def arbitrary_open_profile_def.cpp) +macro(build_example exe_name) + set (additional_targets ${ARGN}) + add_executable(${exe_name} ${exe_name}.cpp) if(STANDALONE_PROJECT) - target_link_libraries(arbitrary_open_profile_def IfcOpenShell::IfcParse) + target_link_libraries(${exe_name} IfcOpenShell::IfcParse $<$:IfcOpenShell::${additional_targets}>) else() - target_include_directories(arbitrary_open_profile_def PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(arbitrary_open_profile_def IfcParse) - set_target_properties(arbitrary_open_profile_def PROPERTIES FOLDER Examples) + target_include_directories(${exe_name} PRIVATE "${CMAKE_SOURCE_DIR}/../src") + target_link_libraries(${exe_name} IfcParse ${additional_targets}) + set_target_properties(${exe_name} PROPERTIES FOLDER Examples) endif() - install(TARGETS arbitrary_open_profile_def) - - # triangulated_faceset - add_executable(triangulated_faceset triangulated_faceset.cpp) - - if(STANDALONE_PROJECT) - target_link_libraries(triangulated_faceset IfcOpenShell::IfcParse) - else() - target_include_directories(triangulated_faceset PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(triangulated_faceset IfcParse) - set_target_properties(triangulated_faceset PROPERTIES FOLDER Examples) - endif() - install(TARGETS triangulated_faceset) + install(TARGETS ${exe_name}) +endmacro() +if("4" IN_LIST SCHEMA_VERSIONS) + build_example(arbitrary_open_profile_def) + build_example(triangulated_faceset) endif() -if(SCHEMA_VERSIONS MATCHES "2x3") - # composite_profile_def.cpp - add_executable(composite_profile_def composite_profile_def.cpp) - - if(STANDALONE_PROJECT) - target_link_libraries(composite_profile_def IfcOpenShell::IfcParse) - else() - target_include_directories(composite_profile_def PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(composite_profile_def IfcParse) - set_target_properties(composite_profile_def PROPERTIES FOLDER Examples) - endif() - install(TARGETS composite_profile_def) - - # csg_primitive - add_executable(csg_primitive csg_primitive.cpp) - - if(STANDALONE_PROJECT) - target_link_libraries(csg_primitive IfcOpenShell::IfcParse) - else() - target_include_directories(csg_primitive PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(csg_primitive IfcParse) - set_target_properties(csg_primitive PROPERTIES FOLDER Examples) - endif() - install(TARGETS csg_primitive) - - # ellipse_pies - add_executable(ellipse_pies ellipse_pies.cpp) - - if(STANDALONE_PROJECT) - target_link_libraries(ellipse_pies IfcOpenShell::IfcParse) - else() - target_include_directories(ellipse_pies PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(ellipse_pies IfcParse) - set_target_properties(ellipse_pies PROPERTIES FOLDER Examples) - endif() - install(TARGETS ellipse_pies) - - # faces - add_executable(faces faces.cpp) - - if(STANDALONE_PROJECT) - target_link_libraries(faces IfcOpenShell::IfcParse) - else() - target_include_directories(faces PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(faces IfcParse) - set_target_properties(faces PROPERTIES FOLDER Examples) - endif() - install(TARGETS faces) - - # ifc_curve_rebar - add_executable(ifc_curve_rebar ifc_curve_rebar.cpp) - - if(STANDALONE_PROJECT) - target_link_libraries(ifc_curve_rebar IfcOpenShell::IfcParse) - else() - target_include_directories(ifc_curve_rebar PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(ifc_curve_rebar IfcParse) - set_target_properties(ifc_curve_rebar PROPERTIES FOLDER Examples) - endif() - install(TARGETS ifc_curve_rebar) - - # profiles - add_executable(profiles profiles.cpp) - - if(STANDALONE_PROJECT) - target_link_libraries(profiles IfcOpenShell::IfcParse) - else() - target_include_directories(profiles PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(profiles IfcParse) - set_target_properties(profiles PROPERTIES FOLDER Examples) - endif() - install(TARGETS profiles) - - # IfcParseExamples - add_executable(IfcParseExamples IfcParseExamples.cpp) - - if(STANDALONE_PROJECT) - target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse) - else() - target_include_directories(IfcParseExamples PRIVATE "${CMAKE_SOURCE_DIR}/../src") - target_link_libraries(IfcParseExamples IfcParse) - set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples) - endif() - install(TARGETS IfcParseExamples) +if("2x3" IN_LIST SCHEMA_VERSIONS) + build_example(composite_profile_def) + build_example(csg_primitive) + build_example(ellipse_pies) + build_example(faces) + build_example(ifc_curve_rebar) + build_example(profiles) + build_example(IfcParseExamples) if(WITH_OPENCASCADE) - # IfcOpenHouse and IfcAdvancedHouse - add_executable(IfcOpenHouse IfcOpenHouse.cpp) - add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) - add_library(IfcHouseInterface INTERFACE) - - if(STANDALONE_PROJECT) - target_link_libraries(IfcHouseInterface INTERFACE IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer) - else() - target_link_libraries(IfcHouseInterface INTERFACE IfcParse geometry_serializer) - set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples) - set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples) - endif() - target_link_libraries(IfcOpenHouse PRIVATE IfcHouseInterface) - target_link_libraries(IfcAdvancedHouse PRIVATE IfcHouseInterface) - install(TARGETS IfcOpenHouse IfcAdvancedHouse) + build_example(IfcOpenHouse geometry_serializer) + build_example(IfcAdvancedHouse geometry_serializer) endif() endif() -if(SCHEMA_VERSIONS MATCHES "4x3_add2") - # IfcAlignment and IfcSimplifiedAlignment - add_executable(IfcAlignment IfcAlignment.cpp) - add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp) - add_library(IfcAlignmentInterface INTERFACE) - - if(STANDALONE_PROJECT) - target_link_libraries(IfcAlignmentInterface INTERFACE IfcOpenShell::IfcParse) - else() - target_link_libraries(IfcAlignmentInterface INTERFACE IfcParse) - set_target_properties(IfcAlignment PROPERTIES FOLDER Examples) - set_target_properties(IfcSimplifiedAlignment PROPERTIES FOLDER Examples) - endif() - - target_link_libraries(IfcAlignment PRIVATE IfcAlignmentInterface) - target_link_libraries(IfcSimplifiedAlignment PRIVATE IfcAlignmentInterface) - - install(TARGETS IfcAlignment IfcSimplifiedAlignment) +if("4x3_add2" IN_LIST SCHEMA_VERSIONS) + build_example(IfcAlignment) + build_example(IfcSimplifiedAlignment) endif() diff --git a/src/examples/IfcAlignment.cpp b/src/examples/IfcAlignment.cpp index d4e3ed0348..491aef1e79 100644 --- a/src/examples/IfcAlignment.cpp +++ b/src/examples/IfcAlignment.cpp @@ -489,6 +489,6 @@ int main() { } // That's it - save the model to a file - std::ofstream ofs("FHWA_Bridge_Geometry_Alignment_Example.ifc"); + std::ofstream ofs("IfcAlignment.ifc"); ofs << file; } diff --git a/src/examples/IfcSimplifiedAlignment.cpp b/src/examples/IfcSimplifiedAlignment.cpp index bde0e59b61..1c88de4c29 100644 --- a/src/examples/IfcSimplifiedAlignment.cpp +++ b/src/examples/IfcSimplifiedAlignment.cpp @@ -159,6 +159,6 @@ int main() { } // That's it - save the model to a file - std::ofstream ofs("FHWA_Bridge_Geometry_Alignment_Example_Simplified.ifc"); + std::ofstream ofs("IfcSimplifiedAlignment.ifc"); ofs << file; } diff --git a/src/examples/arbitrary_open_profile_def.cpp b/src/examples/arbitrary_open_profile_def.cpp index 5393af53ae..1346c56a5d 100644 --- a/src/examples/arbitrary_open_profile_def.cpp +++ b/src/examples/arbitrary_open_profile_def.cpp @@ -107,7 +107,7 @@ void create_products_from_curve(IfcHierarchyHelper& file, IfcSchema:: } int main(int argc, char** argv) { - const char filename[] = "IfcArbitraryOpenProfileDef.ifc"; + const char filename[] = "arbitrary_open_profile_def.ifc"; IfcHierarchyHelper file; file.header().file_name()->setname(filename); @@ -134,7 +134,7 @@ int main(int argc, char** argv) { create_products_from_curve(file, trim); using namespace std::string_literals; - file.getSingle()->setName("IfcArbitraryOpenProfileDef"s); + file.getSingle()->setName("arbitrary_open_profile_def"s); std::ofstream f(filename); f << file; diff --git a/src/examples/composite_profile_def.cpp b/src/examples/composite_profile_def.cpp index 3a7281be43..2b5f082f55 100644 --- a/src/examples/composite_profile_def.cpp +++ b/src/examples/composite_profile_def.cpp @@ -36,7 +36,7 @@ typedef IfcParse::IfcGlobalId guid; boost::none_t const null = boost::none; int main(int argc, char** argv) { - const char filename[] = "IfcCompositeProfileDef.ifc"; + const char filename[] = "composite_profile_def.ifc"; IfcHierarchyHelper file; file.header().file_name()->setname(filename); @@ -113,7 +113,7 @@ int main(int argc, char** argv) { product->setRepresentation(shape); using namespace std::string_literals; - file.getSingle()->setName("IfcCompositeProfileDef"s); + file.getSingle()->setName("composite_profile_def"s); std::ofstream f(filename); f << file; diff --git a/src/examples/csg_primitive.cpp b/src/examples/csg_primitive.cpp index b157281402..4d805a3375 100644 --- a/src/examples/csg_primitive.cpp +++ b/src/examples/csg_primitive.cpp @@ -133,7 +133,7 @@ public: }; int main(int argc, char** argv) { - const char filename[] = "IfcCsgPrimitive.ifc"; + const char filename[] = "csg_primitive.ifc"; IfcHierarchyHelper file; file.header().file_name()->setname(filename); @@ -187,7 +187,7 @@ int main(int argc, char** argv) { product->setRepresentation(shape); using namespace std::string_literals; - file.getSingle()->setName("IfcCompositeProfileDef"s); + file.getSingle()->setName("csg_primitive"s); std::ofstream f(filename); f << file; diff --git a/src/examples/ifc_curve_rebar.cpp b/src/examples/ifc_curve_rebar.cpp index 4e674d5e95..81a705dc5e 100644 --- a/src/examples/ifc_curve_rebar.cpp +++ b/src/examples/ifc_curve_rebar.cpp @@ -82,8 +82,8 @@ void create_curve_rebar(IfcHierarchyHelper& file) IfcSchema::IfcCircle* circle = new IfcSchema::IfcCircle(axis1, R); file.addEntity(circle); - aggregate_of_instance::ptr trim1(new aggregate_of_instance); - aggregate_of_instance::ptr trim2(new aggregate_of_instance); + IfcSchema::IfcTrimmingSelect::list::ptr trim1(new IfcSchema::IfcTrimmingSelect::list); + IfcSchema::IfcTrimmingSelect::list::ptr trim2(new IfcSchema::IfcTrimmingSelect::list); trim1->push(new IfcSchema::IfcParameterValue(180)); trim1->push(p2); @@ -91,7 +91,7 @@ void create_curve_rebar(IfcHierarchyHelper& file) trim2->push(new IfcSchema::IfcParameterValue(270)); trim2->push(p4); - IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1->as(), trim2->as(), false, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); + IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1, trim2, false, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); file.addEntity(trimmed_curve); IfcSchema::IfcCompositeCurveSegment* segment2 = new IfcSchema::IfcCompositeCurveSegment(IfcSchema::IfcTransitionCode::IfcTransitionCode_CONTSAMEGRADIENT, false, trimmed_curve); diff --git a/src/examples/triangulated_faceset.cpp b/src/examples/triangulated_faceset.cpp index f54ae4f3d0..18eb1c3b73 100644 --- a/src/examples/triangulated_faceset.cpp +++ b/src/examples/triangulated_faceset.cpp @@ -82,7 +82,7 @@ int main(int argc, char** argv) { product->setRepresentation(shape); - const std::string filename = "tesselated_faceset.ifc"; + const std::string filename = "triangulated_faceset.ifc"; file.header().file_name()->setname(filename); std::ofstream f(filename); f << file; From 0d8c4c779568378e1e8a680452f7c821d6bc1eb0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 24 Jan 2026 23:03:18 +1100 Subject: [PATCH 566/657] Fix #7587. See #7550. Bug where you couldn't load or edit arrayed voids. Reuse tool.Geometry.duplicate_ifc_objects because that's where all duplication logic should stay instead of half reimplementing it every time which introduces subtle bugs. --- src/bonsai/bonsai/tool/blender.py | 3 ++- src/bonsai/bonsai/tool/geometry.py | 8 ++++++++ src/bonsai/bonsai/tool/model.py | 26 ++++++++++++-------------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 24cd5071fa..56e78d5c4f 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -1223,7 +1223,8 @@ class Blender(bonsai.core.tool.Blender): @classmethod def constrain_children_to_parent(cls, parent_element: ifcopenshell.entity_instance) -> None: - parent_obj = tool.Ifc.get_object(parent_element) + if not (parent_obj := tool.Ifc.get_object(parent_element)): + return # Filtered out, arrayed void, etc assert isinstance(parent_obj, bpy.types.Object) children = cls.get_all_children_objects(parent_element) for child in children: diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index e2955d3d28..e10b2de832 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -2106,6 +2106,14 @@ class Geometry(bonsai.core.tool.Geometry): active_object: Optional[bpy.types.Object] = None, linked: bool = False, ) -> tuple[dict[ifcopenshell.entity_instance, list[ifcopenshell.entity_instance]], Union[bpy.types.Object, None]]: + """Duplicate IFC objects + + Duplication is surprisingly complicated because you might only select + part of a group of related items. + + TODO: write some tests and figure out how to make this function + actually understandable. + """ # Handle arrays objects_to_duplicate = set(objects_to_duplicate) arrays_to_duplicate, array_children = cls.process_arrays_for_duplication(objects_to_duplicate) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 28506bd8db..b8af52705c 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1063,8 +1063,7 @@ class Model(bonsai.core.tool.Model): removed_children = set(array["children"]) for removed_child in removed_children: element = tool.Ifc.get().by_guid(removed_child) - obj = tool.Ifc.get_object(element) - if obj: + if obj := tool.Ifc.get_object(element): tool.Geometry.delete_ifc_object(obj) array["children"].clear() @@ -1087,19 +1086,18 @@ class Model(bonsai.core.tool.Model): offset = base_offset * i for obj in obj_stack: - # get currently proccesed array element and it's object - if child_i >= total_existing_children: - child_obj = tool.Spatial.duplicate_object_and_data(obj) - child_element = tool.Spatial.run_root_copy_class(obj=child_obj) - else: + try: global_id = array["children"][child_i] - try: - child_element = tool.Ifc.get().by_guid(global_id) - child_obj = tool.Ifc.get_object(child_element) - assert child_obj - except: - child_obj = tool.Spatial.duplicate_object_and_data(obj) - child_element = tool.Spatial.run_root_copy_class(obj=child_obj) + child_element = tool.Ifc.get().by_guid(global_id) + child_obj = tool.Ifc.get_object(child_element) + assert child_obj + except: + old_to_new, _ = tool.Geometry.duplicate_ifc_objects([obj]) + # TODO Is this correct to assume one child? I really + # don't understand the linked aggregates and array + # behaviour. + child_element = list(old_to_new.values())[0][0] + child_obj = tool.Ifc.get_object(child_element) # add child pset child_pset = tool.Pset.get_element_pset(child_element, "BBIM_Array") From 884661a454f117da9f95791d30311e2c0b3a088c Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 25 Jan 2026 10:43:27 +1100 Subject: [PATCH 567/657] See #7537. Quick fix for regression in editing slabs. Needs further investigation. --- src/bonsai/bonsai/bim/module/model/slab.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index b6046df18d..46ea91dc08 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -744,6 +744,8 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): usage_type = tool.Model.get_usage_type(element) + # TODO: review #7537 properly, this is a quick fix but something doesn't seem right. + original_rotation_x = 0 if extrusion.Position: position = Matrix(ifcopenshell.util.placement.get_axis2placement(extrusion.Position).tolist()) position.translation *= self.unit_scale From 12f8863014d5e1c73d15587d2523f73fafda18ed Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 25 Jan 2026 14:12:16 +1100 Subject: [PATCH 568/657] Revert "Fix #7519: Hide depth attribute in Item Mode for elements with material layer sets" This reverts commit 99b162f712bdb7d387d38624c574643bcf30c6fc. --- src/bonsai/bonsai/bim/module/model/workspace.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 578fbefa2a..30acee46e3 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -399,16 +399,6 @@ class EditItemUI: assert obj mesh_props = tool.Geometry.get_mesh_props(obj.data) - - # Get the parent element from representation_obj to check for layer set usage - has_layer_set_usage = False - props = tool.Geometry.get_geometry_props() - if props.representation_obj: - parent_element = tool.Ifc.get_entity(props.representation_obj) - if parent_element: - material_usage = tool.Model.get_usage_type(parent_element) - has_layer_set_usage = material_usage == "LAYER3" - if AuthoringData.data["is_representation_item_swept_solid"]: # TODO: support EndSweptArea for IfcRevolvedAreaSolidTapered, # will need to add second attribute for this. @@ -422,12 +412,8 @@ class EditItemUI: op.profile_id = int(mesh_props.item_profile) for item_attribute in mesh_props.item_attributes: - # Skip depth attribute for LAYER3 objects with layer set usage - if has_layer_set_usage and item_attribute.name.lower() == "depth": - continue row = cls.layout.row() draw_attribute(item_attribute, cls.layout) - if len(mesh_props.item_attributes) or AuthoringData.data["is_representation_item_swept_solid"]: row = cls.layout.row() row.operator("bim.update_item_attributes", icon="FILE_REFRESH", text="") From 0e4f2fada1435bfafefd54dfd6b8af1e69252274 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 25 Jan 2026 14:16:35 +1100 Subject: [PATCH 569/657] Fix #7519. Do not import parametrically locked item attributes. The previous fix by @theoryshaw had the correct conclusion but had some issues: 1. Don't implement anything that fetches IFC data in the UI draw calls. This historically has lead to race conditions and crashes. The data classes are much preferred. 2. Rather than load the inapplicable attribute then selectively omit it in the UI, it's preferred to just never load it in the first place. --- src/bonsai/bonsai/tool/geometry.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index e10b2de832..51ff6bfcf3 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -1797,6 +1797,10 @@ class Geometry(bonsai.core.tool.Geometry): def import_item_attributes(cls, obj: bpy.types.Object) -> None: props = tool.Geometry.get_mesh_props(obj.data) props.item_attributes.clear() + element = tool.Ifc.get_entity(tool.Geometry.get_geometry_props().representation_obj) + if tool.Model.get_usage_type(element) == "LAYER3": + return # All LAYER3 attributes are parametrically determined from the IfcMaterialLayerSet + item = tool.Ifc.get().by_id(props.ifc_definition_id) allowed_attributes = [ a.name() From b4caf3b2ddb534f65e00bb1e8c034c45e93400be Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 25 Jan 2026 15:27:23 +1100 Subject: [PATCH 570/657] Fix #7153. Fix regression in purging types in IFC2X3 from 56861b9 --- src/bonsai/bonsai/tool/type.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/tool/type.py b/src/bonsai/bonsai/tool/type.py index 6c98e8bb59..43d86d5076 100644 --- a/src/bonsai/bonsai/tool/type.py +++ b/src/bonsai/bonsai/tool/type.py @@ -74,11 +74,13 @@ class Type(bonsai.core.tool.Type): def get_model_types(cls) -> list[ifcopenshell.entity_instance]: ifc_file = tool.Ifc.get() types = ifc_file.by_type("IfcElementType") - types += ifc_file.by_type("IfcSpatialElementType") - types += ifc_file.by_type("IfcTypeProduct", include_subtypes=False) - if not tool.Ifc.get_schema().startswith("IFC4X3"): + if tool.Ifc.get_schema() == "IFC2X3": types += ifc_file.by_type("IfcWindowStyle") types += ifc_file.by_type("IfcDoorStyle") + types += ifc_file.by_type("IfcSpatialStructureElementType") + else: + types += ifc_file.by_type("IfcSpatialElementType") + types += ifc_file.by_type("IfcTypeProduct", include_subtypes=False) return types @classmethod From a6394d8628dc73b69e0bd412470366835c95790b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 25 Jan 2026 20:58:29 +1100 Subject: [PATCH 571/657] Revert "Closes #3764: When switching an instance to a different beam type, preserve the CardinalPoint." This reverts commit 4874f7770b9c0ffa30022855cc611fe6f3c7d9fd. --- src/bonsai/bonsai/core/type.py | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/bonsai/bonsai/core/type.py b/src/bonsai/bonsai/core/type.py index 2918e841f7..226f00c461 100644 --- a/src/bonsai/bonsai/core/type.py +++ b/src/bonsai/bonsai/core/type.py @@ -19,7 +19,6 @@ from __future__ import annotations import bonsai.core.geometry from typing import TYPE_CHECKING, Optional -import ifcopenshell.util.element if TYPE_CHECKING: import bpy @@ -33,34 +32,14 @@ def assign_type( element: ifcopenshell.entity_instance, type: ifcopenshell.entity_instance, ) -> None: - - # Get the instance's current CardinalPoint before type assignment - instance_cardinal_point = None - instance_material = ifcopenshell.util.element.get_material(element) - if instance_material and instance_material.is_a("IfcMaterialProfileSetUsage"): - instance_cardinal_point = instance_material.CardinalPoint - ifc.run("type.assign_type", related_objects=[element], relating_type=type) obj = ifc.get_object(element) - if type_tool.has_material_usage(element): - # Restore the instance's CardinalPoint to the new material usage - if instance_cardinal_point is not None: - new_instance_material = ifcopenshell.util.element.get_material(element) - if new_instance_material and new_instance_material.is_a("IfcMaterialProfileSetUsage"): - if new_instance_material.CardinalPoint != instance_cardinal_point: - new_instance_material.CardinalPoint = instance_cardinal_point - - # Force representation regeneration - from bonsai.bim.module.model.profile import DumbProfileRecalculator - - DumbProfileRecalculator().recalculate([obj]) - # for now, representation regeneration handled by API listeners + pass # for now, representation regeneration handled by API listeners else: type_data = type_tool.get_object_data(ifc.get_object(type)) if type_data: type_tool.change_object_data(obj, type_data, is_global=False) - type_tool.disable_editing(obj) From d62a6186b50d5ab71296a51eb14b27cfe08d287f Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 26 Jan 2026 00:01:43 +1100 Subject: [PATCH 572/657] Demo project preset shouldn't have mass or time by default --- src/bonsai/bonsai/bim/module/project/operator.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index b0f74cfb40..f8aebd2a34 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -119,8 +119,6 @@ class NewProject(bpy.types.Operator): bpy.context.scene.unit_settings.length_unit = "MILLIMETERS" bim_props.area_unit = "SQUARE_METRE" bim_props.volume_unit = "CUBIC_METRE" - bim_props.mass_unit = "KILOGRAM" - bim_props.time_unit = "SECOND" pprops.template_file = "IFC4 Demo Template.ifc" if self.preset != "wizard": From 2f5bcccd2c417d7f5224e6bb6dff11f62b23d068 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 16:08:33 +0500 Subject: [PATCH 573/657] bim.assign_class - don't flip normals for objects with negative scale in Blender 5.1+ The issue was fixed upstream - https://projects.blender.org/blender/blender/issues/102266 --- src/bonsai/bonsai/bim/module/root/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/root/operator.py b/src/bonsai/bonsai/bim/module/root/operator.py index a5bf766ae2..5a0782203e 100644 --- a/src/bonsai/bonsai/bim/module/root/operator.py +++ b/src/bonsai/bonsai/bim/module/root/operator.py @@ -307,7 +307,7 @@ class AssignClass(bpy.types.Operator, tool.Ifc.Operator): with context.temp_override(selected_editable_objects=[obj]): bpy.ops.object.transform_apply(location=False, rotation=False, scale=True, properties=False) # object.transform_apply is losing normals. - if is_negative: + if is_negative and bpy.app.version >= (5, 1, 0): for polygon in obj.data.polygons: polygon.flip() From b96a21350c5bdd8708b06777ed7bd610b38d08de Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 22 Jan 2026 16:54:32 +0500 Subject: [PATCH 574/657] ifcsverchok - document value types in doc-strings --- src/ifcsverchok/helper.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/ifcsverchok/helper.py b/src/ifcsverchok/helper.py index 8f9bda0c97..7407bd94cd 100644 --- a/src/ifcsverchok/helper.py +++ b/src/ifcsverchok/helper.py @@ -75,7 +75,18 @@ def get_socket_value( *, value_type: Literal["SINGLE_VALUE", "CONTAINER", "FLATTEN"] = "SINGLE_VALUE", ) -> Any: - value = sockets[name].sv_get() + """ + :param value_type: + + - ``SINGLE_VALUE`` - e.g. ``[[x]]`` -> ``x``. + + - ``CONTAINER`` - e.g. ``[ [ [x, y, z], [x,y, z] ] ]`` -> ``[ [x1, y1, z1], [x2, y2, z2] ]``. + + - ``FLATTEN`` - e.g. `` [ [ [x1], [x2] ] ] `` -> `` [x1, x2] ``. + """ + socket = sockets[name] + assert isinstance(socket, sverchok.core.sockets.SvSocketCommon) + value = socket.sv_get() if value_type == "FLATTEN": return flatten_data(value) value = value[0] @@ -91,10 +102,19 @@ def set_socket_value( *, value_type: Literal["SINGLE_VALUE", "FINAL_VALUE"] = "SINGLE_VALUE", ) -> None: + """ + :param value_type: + + - ``SINGLE_VALUE`` - e.g. ``x`` -> ``[[x]]``. + + - ``FINAL_VALUE`` - keep value as is. + """ + socket = sockets[name] + assert isinstance(socket, sverchok.core.sockets.SvSocketCommon) if value_type == "SINGLE_VALUE": - sockets[name].sv_set([[value]]) + socket.sv_set([[value]]) return - sockets[name].sv_set(value) + socket.sv_set(value) def create_socket( From 523bcf34436912fa14f12c6bc890a7d109ff0348 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 22 Jan 2026 17:21:29 +0500 Subject: [PATCH 575/657] ifcsverchok - node to convert sverchok geometry to ifc Example - https://files.catbox.moe/wecgw9.mp4 --- src/ifcsverchok/__init__.py | 1 + .../nodes/ifc/shape_builder/mesh.py | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/ifcsverchok/nodes/ifc/shape_builder/mesh.py diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index 4594d8a367..8fc011b26a 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -120,6 +120,7 @@ def nodes_index() -> list[tuple[str, list[tuple[str, str]]]]: ("ifc.shape_builder.representation", "SvIfcSbRepresentation"), ("ifc.shape_builder.test", "SvIfcSbTest"), ("ifc.shape_builder.shape_output", "SvSbShapeOutput"), + ("ifc.shape_builder.mesh", "SvSbMesh"), ], ), ] diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/mesh.py b/src/ifcsverchok/nodes/ifc/shape_builder/mesh.py new file mode 100644 index 0000000000..ec2609613e --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/shape_builder/mesh.py @@ -0,0 +1,52 @@ +# IfcSverchok - IFC Sverchok extension +# Copyright (C) 2022 Martina Jakubowska +# +# This file is part of IfcSverchok. +# +# IfcSverchok is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcSverchok 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with IfcSverchok. If not, see . + +import bpy +import sverchok.core.sockets +from ifcsverchok.nodes.ifc.shape_builder.representation import ShapeBuilder +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper as helper + + +class SvSbMesh(bpy.types.Node, SverchCustomTreeNode, helper.SvIfcCore): + bl_idname = "SvSbMesh" + bl_label = "IFC Mesh" + + def sv_init(self, context): + helper.create_socket(self.inputs, "Vers", socket_type=sverchok.core.sockets.SvVerticesSocket) + helper.create_socket(self.inputs, "Pols") + helper.create_socket(self.outputs, "Representation Item", data_type="list[list[ifcopenshell.entity_instance]]") + + def process(self): + ifc_file = helper.get_file() + + vertices: list[[list[float]]] = helper.get_socket_value(self.inputs, "Vers", value_type="CONTAINER") + polygons: list[[list[int]]] = helper.get_socket_value(self.inputs, "Pols", value_type="CONTAINER") + + builder = ShapeBuilder(ifc_file) + mesh = builder.mesh(vertices, polygons) + helper.set_socket_value(self.outputs, "Representation Item", mesh) + + +def register(): + bpy.utils.register_class(SvSbMesh) + + +def unregister(): + bpy.utils.unregister_class(SvSbMesh) From d4d10b2eb52c86e87102ab487396dd54dddfe669 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 22 Jan 2026 19:30:23 +0500 Subject: [PATCH 576/657] ifcsverchok - polyline node Demo - https://files.catbox.moe/azv66e.mp4 --- src/ifcsverchok/__init__.py | 1 + .../nodes/ifc/shape_builder/polyline.py | 53 +++++++++++++++++++ .../nodes/ifc/shape_builder/shape_output.py | 1 + 3 files changed, 55 insertions(+) create mode 100644 src/ifcsverchok/nodes/ifc/shape_builder/polyline.py diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index 8fc011b26a..2355ab6783 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -121,6 +121,7 @@ def nodes_index() -> list[tuple[str, list[tuple[str, str]]]]: ("ifc.shape_builder.test", "SvIfcSbTest"), ("ifc.shape_builder.shape_output", "SvSbShapeOutput"), ("ifc.shape_builder.mesh", "SvSbMesh"), + ("ifc.shape_builder.polyline", "SvSbPolyline"), ], ), ] diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/polyline.py b/src/ifcsverchok/nodes/ifc/shape_builder/polyline.py new file mode 100644 index 0000000000..59e6c94804 --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/shape_builder/polyline.py @@ -0,0 +1,53 @@ +# IfcSverchok - IFC Sverchok extension +# Copyright (C) 2022 Martina Jakubowska +# +# This file is part of IfcSverchok. +# +# IfcSverchok is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcSverchok 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with IfcSverchok. If not, see . + +import bpy +import sverchok.core.sockets +from ifcsverchok.nodes.ifc.shape_builder.representation import ShapeBuilder +from sverchok.node_tree import SverchCustomTreeNode + +import ifcsverchok.helper as helper + + +class SvSbPolyline(bpy.types.Node, SverchCustomTreeNode, helper.SvIfcCore): + bl_idname = "SvSbPolyline" + bl_label = "IFC Polyline" + bl_description = "Create closed polyline from vertices." + + def sv_init(self, context): + helper.create_socket(self.inputs, "Vers", socket_type=sverchok.core.sockets.SvVerticesSocket) + helper.create_socket(self.inputs, "Closed", data_type="list[list[bool]]") + helper.create_socket(self.outputs, "Representation Item", data_type="list[list[ifcopenshell.entity_instance]]") + + def process(self): + ifc_file = helper.get_file() + + vertices: list[[list[float]]] = helper.get_socket_value(self.inputs, "Vers", value_type="CONTAINER") + closed = helper.get_socket_value(self.inputs, "Closed") + + builder = ShapeBuilder(ifc_file) + Polyline = builder.polyline(vertices, closed=closed) + helper.set_socket_value(self.outputs, "Representation Item", Polyline) + + +def register(): + bpy.utils.register_class(SvSbPolyline) + + +def unregister(): + bpy.utils.unregister_class(SvSbPolyline) diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py b/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py index c3555c25e4..2968c5e4ed 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py @@ -52,6 +52,7 @@ class SvSbShapeOutput(bpy.types.Node, SverchCustomTreeNode, helper.SvIfcCore): def create(self, entity: ifcopenshell.entity_instance) -> None: assert bpy.context.scene settings = ifcopenshell.geom.settings() + settings.set("dimensionality", ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS) shape = ifcopenshell.geom.create_shape(settings, entity) assert isinstance(shape, W.Triangulation) self.verts = ifcopenshell.util.shape.get_vertices(shape).tolist() From 4edcad13b8d85bc1dba177142dfb23cc7febfcfb Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 12:16:33 +0500 Subject: [PATCH 577/657] fix ruff --- src/bonsai/bonsai/tool/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index b8af52705c..8ecd7c577b 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1096,7 +1096,7 @@ class Model(bonsai.core.tool.Model): # TODO Is this correct to assume one child? I really # don't understand the linked aggregates and array # behaviour. - child_element = list(old_to_new.values())[0][0] + child_element = next(iter(old_to_new.values()))[0] child_obj = tool.Ifc.get_object(child_element) # add child pset From 72f8218fcd87429d920b08cb73b11cf959ba4b26 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 12:45:17 +0500 Subject: [PATCH 578/657] ruff - check for more unused imports --- src/bcf/bcf/v2/model/extensions.py | 2 +- src/bcf/bcf/v2/topic.py | 3 +-- src/bcf/bcf/v2/visinfo.py | 2 +- src/bcf/bcf/v3/bcfapi.py | 1 - src/bcf/bcf/v3/document.py | 2 +- src/bcf/bcf/v3/visinfo.py | 2 +- src/bcf/pyproject.toml | 6 ++++++ src/bcf/tests/v3/test_example_files.py | 2 -- src/bsdd/bsdd.py | 1 - src/bsdd/pyproject.toml | 6 ++++++ src/ifc4d/__main__.py | 2 -- src/ifc4d/ifc4d/common.py | 2 -- src/ifc4d/ifc4d/csv2ifc.py | 2 -- src/ifc4d/ifc4d/csv4d2ifc.py | 1 - src/ifc4d/ifc4d/ifc2p6.py | 1 - src/ifc4d/ifc4d/msp2ifc.py | 3 +-- src/ifc4d/ifc4d/p62ifc.py | 4 ---- src/ifc4d/ifc4d/p6xer2ifc.py | 4 ---- src/ifc4d/ifc4d/pp2ifc.py | 1 - src/ifc4d/pyproject.toml | 6 ++++++ src/ifc5d/ifc5d/csv2ifc.py | 1 - src/ifc5d/ifc5d/ifc5Dspreadsheet.py | 6 +++--- src/ifc5d/ifc5d/qto.py | 2 -- src/ifc5d/pyproject.toml | 6 ++++++ src/ifc5d/test/test_csv2ifc.py | 1 - src/ifccsv/ifccsv.py | 5 +---- src/ifccsv/pyproject.toml | 6 ++++++ src/ifcpatch/bootstrap.py | 7 ------- src/ifcpatch/ifcpatch/__init__.py | 1 - src/ifcpatch/ifcpatch/recipes/AGS2IFC.py | 2 -- .../recipes/AddGeometricRepresentationToAlignment.py | 1 - .../recipes/AddLinearPlacementFallbackPosition.py | 1 - .../recipes/AddZeroLengthSegmentToAlignment.py | 1 - src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py | 4 ---- .../ifcpatch/recipes/ConvertNestToAggregate.py | 1 - .../ifcpatch/recipes/ConvertPropertiesToQuantities.py | 2 -- .../ifcpatch/recipes/DowngradeIndexedPolyCurve.py | 1 - src/ifcpatch/ifcpatch/recipes/ExtractElements.py | 1 - .../ifcpatch/recipes/ExtractPropertiesToSQLite.py | 5 ----- .../ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py | 2 -- .../ifcpatch/recipes/FixArchiCADToRevitSpaces.py | 2 -- src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py | 10 ---------- .../recipes/FixRevitClassificationCodeTypes.py | 1 - src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py | 1 - src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py | 2 -- src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py | 1 - src/ifcpatch/ifcpatch/recipes/Migrate.py | 1 - .../ifcpatch/recipes/OffsetObjectPlacements.py | 1 - src/ifcpatch/ifcpatch/recipes/Optimise.py | 1 - .../ifcpatch/recipes/PatchStationReferentPosition.py | 1 - .../ifcpatch/recipes/ResetAbsoluteCoordinates.py | 2 +- .../ifcpatch/recipes/ResetSpatialElementLocations.py | 2 -- src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py | 1 - src/ifcpatch/ifcpatch/recipes/TessellateElements.py | 1 - src/ifcpatch/ifcpatch/recipes/UnsharePsets.py | 1 - src/ifcpatch/pyproject.toml | 8 ++++++++ src/ifcpatch/test/test_ConvertLengthUnit.py | 1 - src/ifcpatch/test/test_ExtractElements.py | 1 - src/ifcpatch/test/test_Ifc2Sql.py | 9 --------- src/ifcpatch/test/test_MergeDuplicateTypes.py | 4 ---- src/ifcpatch/test/test_Migrate.py | 1 - src/ifcpatch/test/test_RegenerateGlobalIds.py | 5 ----- src/ifcpatch/test/test_ResetSpatialElementLocations.py | 1 - src/ifcpatch/test/test_SetFalseOrigin.py | 1 - src/ifcpatch/test/test_TesselateElements.py | 4 ---- src/ifcpatch/test/test_UnsharePsets.py | 1 - src/ifctester/ifctester/__init__.py | 2 +- src/ifctester/ifctester/ids.py | 6 ------ src/ifctester/pyproject.toml | 6 ++++++ src/ifctester/test/ids_doc_generator.py | 1 - src/ifctester/test/test_facet.py | 1 - src/ifctester/test/test_ids.py | 1 - src/ifctester/webapp/public/worker/api.py | 3 --- test/run.py | 1 - 74 files changed, 56 insertions(+), 138 deletions(-) diff --git a/src/bcf/bcf/v2/model/extensions.py b/src/bcf/bcf/v2/model/extensions.py index e50277570e..695027bc6c 100644 --- a/src/bcf/bcf/v2/model/extensions.py +++ b/src/bcf/bcf/v2/model/extensions.py @@ -14,7 +14,7 @@ # Currently extensions support for v2 is only read-only. -from dataclasses import dataclass, field, fields +from dataclasses import dataclass, field from typing import Optional diff --git a/src/bcf/bcf/v2/topic.py b/src/bcf/bcf/v2/topic.py index 30506d734d..2f69a0c18a 100644 --- a/src/bcf/bcf/v2/topic.py +++ b/src/bcf/bcf/v2/topic.py @@ -3,11 +3,10 @@ from __future__ import annotations import datetime -import tempfile import uuid import zipfile from pathlib import Path -from typing import Any, NoReturn, Optional, Union +from typing import Any, NoReturn, Optional import numpy as np from ifcopenshell import entity_instance diff --git a/src/bcf/bcf/v2/visinfo.py b/src/bcf/bcf/v2/visinfo.py index 1d081ae782..7081bf2052 100644 --- a/src/bcf/bcf/v2/visinfo.py +++ b/src/bcf/bcf/v2/visinfo.py @@ -1,7 +1,7 @@ import uuid import zipfile from collections.abc import Iterable -from typing import Any, Literal, Optional, Union +from typing import Literal, Optional, Union import ifcopenshell.util.placement import ifcopenshell.util.unit diff --git a/src/bcf/bcf/v3/bcfapi.py b/src/bcf/bcf/v3/bcfapi.py index 5c66cee067..127d9e3732 100644 --- a/src/bcf/bcf/v3/bcfapi.py +++ b/src/bcf/bcf/v3/bcfapi.py @@ -24,7 +24,6 @@ import time import urllib.parse import uuid import webbrowser -from re import A from typing import Any, Optional import requests diff --git a/src/bcf/bcf/v3/document.py b/src/bcf/bcf/v3/document.py index afc6be50b9..d906b96d26 100644 --- a/src/bcf/bcf/v3/document.py +++ b/src/bcf/bcf/v3/document.py @@ -1,7 +1,7 @@ """BCF XML V3 Documents handler.""" import zipfile -from typing import Any, Optional +from typing import Optional import bcf.v3.model as mdl from bcf.inmemory_zipfile import ZipFileInterface diff --git a/src/bcf/bcf/v3/visinfo.py b/src/bcf/bcf/v3/visinfo.py index 050641ed23..b3b99d7890 100644 --- a/src/bcf/bcf/v3/visinfo.py +++ b/src/bcf/bcf/v3/visinfo.py @@ -1,7 +1,7 @@ import uuid import zipfile from collections.abc import Iterable -from typing import Any, Literal, Optional, Union +from typing import Literal, Optional, Union import ifcopenshell.util.placement import ifcopenshell.util.unit diff --git a/src/bcf/pyproject.toml b/src/bcf/pyproject.toml index 7047595ce1..b4e990f39c 100644 --- a/src/bcf/pyproject.toml +++ b/src/bcf/pyproject.toml @@ -140,3 +140,9 @@ max-attributes = 10 [tool.pylint.format] expected-line-ending-format = "LF" max-line-length = 120 + +[tool.ruff] +extend = "../../pyproject.toml" +lint.select = [ + "F401", # unused imports +] diff --git a/src/bcf/tests/v3/test_example_files.py b/src/bcf/tests/v3/test_example_files.py index 6774c49982..c25a3f3f7e 100644 --- a/src/bcf/tests/v3/test_example_files.py +++ b/src/bcf/tests/v3/test_example_files.py @@ -1,11 +1,9 @@ -import json import os import zipfile from pathlib import Path import bcf.v3.model as mdl from bcf.v3.bcfxml import BcfXml -from bcf.v3.topic import TopicHandler from xsdata.models.datatype import XmlDateTime diff --git a/src/bsdd/bsdd.py b/src/bsdd/bsdd.py index ff633095bf..fbc14cc393 100644 --- a/src/bsdd/bsdd.py +++ b/src/bsdd/bsdd.py @@ -984,7 +984,6 @@ class Client: def apply_ifc_classification_properties( ifc_file: ifcopenshell.file, element: ifcopenshell.entity_instance, classificationProperties: dict[str, Any] ) -> None: - import ifcopenshell.api import ifcopenshell.api.pset import ifcopenshell.util.element diff --git a/src/bsdd/pyproject.toml b/src/bsdd/pyproject.toml index d64d667a20..17fa72f37a 100644 --- a/src/bsdd/pyproject.toml +++ b/src/bsdd/pyproject.toml @@ -43,3 +43,9 @@ Issues = "https://github.com/IfcOpenShell/IfcOpenShell/issues" [tool.setuptools] py-modules = ["bsdd","bsdd_json","type_hints"] + +[tool.ruff] +extend = "../../pyproject.toml" +lint.select = [ + "F401", # unused imports +] diff --git a/src/ifc4d/__main__.py b/src/ifc4d/__main__.py index 8313ba7464..b876db860c 100644 --- a/src/ifc4d/__main__.py +++ b/src/ifc4d/__main__.py @@ -1,6 +1,4 @@ import argparse -import os -import sys import ifcopenshell from ifc4d.msp2ifc import MSP2Ifc diff --git a/src/ifc4d/ifc4d/common.py b/src/ifc4d/ifc4d/common.py index f4fd42e1d1..296b8f36cb 100644 --- a/src/ifc4d/ifc4d/common.py +++ b/src/ifc4d/ifc4d/common.py @@ -4,11 +4,9 @@ from datetime import date, datetime, timedelta from typing import Any, TypedDict, Union import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.control import ifcopenshell.api.resource import ifcopenshell.api.sequence -import ifcopenshell.util.date from typing_extensions import NotRequired diff --git a/src/ifc4d/ifc4d/csv2ifc.py b/src/ifc4d/ifc4d/csv2ifc.py index 6efbf4fad6..a908acdb53 100644 --- a/src/ifc4d/ifc4d/csv2ifc.py +++ b/src/ifc4d/ifc4d/csv2ifc.py @@ -24,7 +24,6 @@ import datetime from typing import Any, Literal, NamedTuple, Optional, Union, cast, get_args import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.cost import ifcopenshell.api.pset import ifcopenshell.api.resource @@ -33,7 +32,6 @@ import ifcopenshell.api.unit import ifcopenshell.util.date import ifcopenshell.util.element import ifcopenshell.util.resource -import ifcopenshell.util.unit import isodate SUPPORTED_COLUMN = Literal[ diff --git a/src/ifc4d/ifc4d/csv4d2ifc.py b/src/ifc4d/ifc4d/csv4d2ifc.py index 2e519cc0ea..4247a06bbc 100644 --- a/src/ifc4d/ifc4d/csv4d2ifc.py +++ b/src/ifc4d/ifc4d/csv4d2ifc.py @@ -22,7 +22,6 @@ import locale import re import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.api.sequence import ifcopenshell.util.date diff --git a/src/ifc4d/ifc4d/ifc2p6.py b/src/ifc4d/ifc4d/ifc2p6.py index 5093f306be..9294e91cbf 100644 --- a/src/ifc4d/ifc4d/ifc2p6.py +++ b/src/ifc4d/ifc4d/ifc2p6.py @@ -24,7 +24,6 @@ import ifcopenshell import ifcopenshell.util.date import ifcopenshell.util.sequence -from .common import ScheduleIfcGenerator class Ifc2P6: diff --git a/src/ifc4d/ifc4d/msp2ifc.py b/src/ifc4d/ifc4d/msp2ifc.py index 3ba14a6985..91ae683c84 100644 --- a/src/ifc4d/ifc4d/msp2ifc.py +++ b/src/ifc4d/ifc4d/msp2ifc.py @@ -18,10 +18,9 @@ import datetime import xml.etree.ElementTree as ET -from datetime import date, timedelta +from datetime import timedelta import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.control import ifcopenshell.api.pset import ifcopenshell.api.root diff --git a/src/ifc4d/ifc4d/p62ifc.py b/src/ifc4d/ifc4d/p62ifc.py index 833bf39dd3..ed2781d5cc 100644 --- a/src/ifc4d/ifc4d/p62ifc.py +++ b/src/ifc4d/ifc4d/p62ifc.py @@ -17,12 +17,8 @@ # along with Ifc4D. If not, see . import datetime -import math import xml.etree.ElementTree as ET -import ifcopenshell -import ifcopenshell.api -import ifcopenshell.util.date from .common import ScheduleIfcGenerator diff --git a/src/ifc4d/ifc4d/p6xer2ifc.py b/src/ifc4d/ifc4d/p6xer2ifc.py index ef218ade2d..935634767d 100644 --- a/src/ifc4d/ifc4d/p6xer2ifc.py +++ b/src/ifc4d/ifc4d/p6xer2ifc.py @@ -16,11 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with Ifc4D. If not, see . -from datetime import date, datetime, timedelta -import ifcopenshell -import ifcopenshell.api -import ifcopenshell.util.date from xerparser.reader import Reader from .common import ScheduleIfcGenerator diff --git a/src/ifc4d/ifc4d/pp2ifc.py b/src/ifc4d/ifc4d/pp2ifc.py index 338a887e91..ce76b60226 100644 --- a/src/ifc4d/ifc4d/pp2ifc.py +++ b/src/ifc4d/ifc4d/pp2ifc.py @@ -12,7 +12,6 @@ from collections import defaultdict from datetime import timedelta from typing import Any -import ifcopenshell.util.date from .common import Activity, Calendar, ScheduleIfcGenerator, WBSEntry from .wpattern import AstaCalendarWorkPattern diff --git a/src/ifc4d/pyproject.toml b/src/ifc4d/pyproject.toml index 6bb2cc9f22..bbc101905a 100644 --- a/src/ifc4d/pyproject.toml +++ b/src/ifc4d/pyproject.toml @@ -28,3 +28,9 @@ Issues = "https://github.com/IfcOpenShell/IfcOpenShell/issues" [tool.setuptools.packages.find] include = ["ifc4d"] exclude = ["test*"] + +[tool.ruff] +extend = "../../pyproject.toml" +lint.select = [ + "F401", # unused imports +] diff --git a/src/ifc5d/ifc5d/csv2ifc.py b/src/ifc5d/ifc5d/csv2ifc.py index b1edd82d88..c33d6e847e 100644 --- a/src/ifc5d/ifc5d/csv2ifc.py +++ b/src/ifc5d/ifc5d/csv2ifc.py @@ -24,7 +24,6 @@ from pathlib import Path from typing import Optional, TypedDict, Union import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.control import ifcopenshell.api.cost import ifcopenshell.api.root diff --git a/src/ifc5d/ifc5d/ifc5Dspreadsheet.py b/src/ifc5d/ifc5d/ifc5Dspreadsheet.py index 324340fb1c..5aab765c26 100644 --- a/src/ifc5d/ifc5d/ifc5Dspreadsheet.py +++ b/src/ifc5d/ifc5d/ifc5Dspreadsheet.py @@ -25,7 +25,7 @@ import logging import os import time from collections import Counter -from typing import Any, Optional, TypedDict, Union +from typing import Optional, TypedDict, Union import ifcopenshell import ifcopenshell.util.cost @@ -420,7 +420,7 @@ class Ifc5DCsvWriter(Ifc5Dwriter): class Ifc5DOdsWriter(Ifc5Dwriter): def write(self) -> None: - from odf.number import CurrencyStyle, CurrencySymbol, Number, NumberStyle, Text + from odf.number import CurrencyStyle, CurrencySymbol, Number from odf.opendocument import OpenDocumentSpreadsheet from odf.style import Style, TableCellProperties @@ -450,7 +450,7 @@ class Ifc5DOdsWriter(Ifc5Dwriter): self.doc.save(os.path.join(self.output, file_name), True) def write_table(self, cost_schedule): - from odf.number import CurrencyStyle, CurrencySymbol, Number, NumberStyle, Text + from odf.number import CurrencySymbol, Number from odf.table import Table, TableCell, TableRow from odf.text import P diff --git a/src/ifc5d/ifc5d/qto.py b/src/ifc5d/ifc5d/qto.py index f7fba8d9e5..955c6fd7af 100644 --- a/src/ifc5d/ifc5d/qto.py +++ b/src/ifc5d/ifc5d/qto.py @@ -27,7 +27,6 @@ from collections.abc import Iterable from typing import Any, Literal, NamedTuple, Union, get_args import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.pset import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W @@ -35,7 +34,6 @@ import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.selector import ifcopenshell.util.shape -import ifcopenshell.util.type import ifcopenshell.util.unit diff --git a/src/ifc5d/pyproject.toml b/src/ifc5d/pyproject.toml index 4d89b8a108..8d51a63819 100644 --- a/src/ifc5d/pyproject.toml +++ b/src/ifc5d/pyproject.toml @@ -35,3 +35,9 @@ exclude = ["test*"] [tool.setuptools.package-data] "*" = ["*.*"] + +[tool.ruff] +extend = "../../pyproject.toml" +lint.select = [ + "F401", # unused imports +] diff --git a/src/ifc5d/test/test_csv2ifc.py b/src/ifc5d/test/test_csv2ifc.py index 7dc1bbd718..fc31e9d86e 100644 --- a/src/ifc5d/test/test_csv2ifc.py +++ b/src/ifc5d/test/test_csv2ifc.py @@ -26,7 +26,6 @@ import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.cost -import ifcopenshell.util.element import pytest diff --git a/src/ifccsv/ifccsv.py b/src/ifccsv/ifccsv.py index 341fa186e7..f6d3157f81 100755 --- a/src/ifccsv/ifccsv.py +++ b/src/ifccsv/ifccsv.py @@ -29,14 +29,11 @@ from statistics import mean from typing import Literal, Optional, Union import ifcopenshell -import ifcopenshell.util.element -import ifcopenshell.util.schema import ifcopenshell.util.selector try: from odf.namespaces import OFFICENS - from odf.opendocument import OpenDocumentSpreadsheet, load - from odf.style import Style, TableCellProperties + from odf.opendocument import load from odf.table import Table, TableCell, TableRow from odf.text import P except: diff --git a/src/ifccsv/pyproject.toml b/src/ifccsv/pyproject.toml index 4485d411e5..c012decd23 100644 --- a/src/ifccsv/pyproject.toml +++ b/src/ifccsv/pyproject.toml @@ -26,3 +26,9 @@ Issues = "https://github.com/IfcOpenShell/IfcOpenShell/issues" [tool.setuptools] py-modules = ["ifccsv"] + +[tool.ruff] +extend = "../../pyproject.toml" +lint.select = [ + "F401", # unused imports +] diff --git a/src/ifcpatch/bootstrap.py b/src/ifcpatch/bootstrap.py index 368d7b5cff..b4fd470b49 100644 --- a/src/ifcpatch/bootstrap.py +++ b/src/ifcpatch/bootstrap.py @@ -16,11 +16,4 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import ifcopenshell.util.element -import ifcopenshell.util.schema -import ifcopenshell.util.selector -import ifcpatch.__main__ -import ifcpatch.recipes -import toposort -import ifcpatch diff --git a/src/ifcpatch/ifcpatch/__init__.py b/src/ifcpatch/ifcpatch/__init__.py index 7ea668d55e..c279bfea1c 100644 --- a/src/ifcpatch/ifcpatch/__init__.py +++ b/src/ifcpatch/ifcpatch/__init__.py @@ -18,7 +18,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import collections import importlib import importlib.util import inspect diff --git a/src/ifcpatch/ifcpatch/recipes/AGS2IFC.py b/src/ifcpatch/ifcpatch/recipes/AGS2IFC.py index 8067d2e718..d24aec34e4 100644 --- a/src/ifcpatch/ifcpatch/recipes/AGS2IFC.py +++ b/src/ifcpatch/ifcpatch/recipes/AGS2IFC.py @@ -19,9 +19,7 @@ import csv import os -from itertools import cycle -import ifcopenshell import ifcopenshell.api.aggregate import ifcopenshell.api.context import ifcopenshell.api.document diff --git a/src/ifcpatch/ifcpatch/recipes/AddGeometricRepresentationToAlignment.py b/src/ifcpatch/ifcpatch/recipes/AddGeometricRepresentationToAlignment.py index 65f48f899d..8045490181 100644 --- a/src/ifcpatch/ifcpatch/recipes/AddGeometricRepresentationToAlignment.py +++ b/src/ifcpatch/ifcpatch/recipes/AddGeometricRepresentationToAlignment.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import typing from logging import Logger from typing import Union diff --git a/src/ifcpatch/ifcpatch/recipes/AddLinearPlacementFallbackPosition.py b/src/ifcpatch/ifcpatch/recipes/AddLinearPlacementFallbackPosition.py index 9ec3f52a6a..c659c38c64 100644 --- a/src/ifcpatch/ifcpatch/recipes/AddLinearPlacementFallbackPosition.py +++ b/src/ifcpatch/ifcpatch/recipes/AddLinearPlacementFallbackPosition.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import typing from logging import Logger from typing import Union diff --git a/src/ifcpatch/ifcpatch/recipes/AddZeroLengthSegmentToAlignment.py b/src/ifcpatch/ifcpatch/recipes/AddZeroLengthSegmentToAlignment.py index e1f6664cd0..d92f794959 100644 --- a/src/ifcpatch/ifcpatch/recipes/AddZeroLengthSegmentToAlignment.py +++ b/src/ifcpatch/ifcpatch/recipes/AddZeroLengthSegmentToAlignment.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import typing from logging import Logger from typing import Union diff --git a/src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py b/src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py index 6b3554b192..3b5774bfcb 100644 --- a/src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py +++ b/src/ifcpatch/ifcpatch/recipes/ConvertLengthUnit.py @@ -21,10 +21,6 @@ from logging import Logger from typing import Union import ifcopenshell -import ifcopenshell.api -import ifcopenshell.api.owner.settings -import ifcopenshell.util.element -import ifcopenshell.util.pset import ifcopenshell.util.unit import ifcpatch diff --git a/src/ifcpatch/ifcpatch/recipes/ConvertNestToAggregate.py b/src/ifcpatch/ifcpatch/recipes/ConvertNestToAggregate.py index 8471ed28f3..0d10de9bae 100644 --- a/src/ifcpatch/ifcpatch/recipes/ConvertNestToAggregate.py +++ b/src/ifcpatch/ifcpatch/recipes/ConvertNestToAggregate.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import ifcopenshell import ifcopenshell.guid diff --git a/src/ifcpatch/ifcpatch/recipes/ConvertPropertiesToQuantities.py b/src/ifcpatch/ifcpatch/recipes/ConvertPropertiesToQuantities.py index a9df2c93c4..3b3b54cac4 100644 --- a/src/ifcpatch/ifcpatch/recipes/ConvertPropertiesToQuantities.py +++ b/src/ifcpatch/ifcpatch/recipes/ConvertPropertiesToQuantities.py @@ -20,9 +20,7 @@ from logging import Logger from typing import Union import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.pset -import ifcopenshell.util.element import ifcopenshell.util.pset diff --git a/src/ifcpatch/ifcpatch/recipes/DowngradeIndexedPolyCurve.py b/src/ifcpatch/ifcpatch/recipes/DowngradeIndexedPolyCurve.py index ea169f2967..4ae36f26b8 100644 --- a/src/ifcpatch/ifcpatch/recipes/DowngradeIndexedPolyCurve.py +++ b/src/ifcpatch/ifcpatch/recipes/DowngradeIndexedPolyCurve.py @@ -16,7 +16,6 @@ # 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 diff --git a/src/ifcpatch/ifcpatch/recipes/ExtractElements.py b/src/ifcpatch/ifcpatch/recipes/ExtractElements.py index 31f1fb4140..6f88f820be 100644 --- a/src/ifcpatch/ifcpatch/recipes/ExtractElements.py +++ b/src/ifcpatch/ifcpatch/recipes/ExtractElements.py @@ -20,7 +20,6 @@ from logging import Logger from typing import Union import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.project import ifcopenshell.guid import ifcopenshell.util.selector diff --git a/src/ifcpatch/ifcpatch/recipes/ExtractPropertiesToSQLite.py b/src/ifcpatch/ifcpatch/recipes/ExtractPropertiesToSQLite.py index 5df98c4ab4..634a8fb796 100644 --- a/src/ifcpatch/ifcpatch/recipes/ExtractPropertiesToSQLite.py +++ b/src/ifcpatch/ifcpatch/recipes/ExtractPropertiesToSQLite.py @@ -17,13 +17,8 @@ # along with IfcPatch. If not, see . -import json -import os -import re import tempfile -import time -import ifcopenshell import ifcopenshell.util.element try: diff --git a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py index cf602bab0a..c2523c7e8f 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py +++ b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitDoorSwings.py @@ -18,8 +18,6 @@ import logging -import math -import os from typing import Union import ifcopenshell diff --git a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py index c6ea871c7b..2245f8c0df 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py +++ b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py @@ -18,7 +18,6 @@ import logging -import ifcopenshell class Patcher: @@ -70,7 +69,6 @@ class Patcher: def patch(self) -> None: import bonsai.tool as tool import bpy - import ifcopenshell import ifcopenshell.util.element from mathutils import Matrix, Vector diff --git a/src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py b/src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py index d6dc49be18..642afb6e8c 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py +++ b/src/ifcpatch/ifcpatch/recipes/FixRevit2025TINs.py @@ -21,9 +21,7 @@ import logging from typing import Optional import ifcopenshell -import ifcopenshell.util.schema import ifcopenshell.util.shape_builder -import ifcopenshell.util.unit class Patcher: @@ -167,8 +165,6 @@ class Patcher: import bpy import ifcopenshell.api.geometry import ifcopenshell.api.root - import ifcopenshell.api.spatial - import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation @@ -234,11 +230,8 @@ class Patcher: import bmesh import bonsai.tool as tool - import bpy import ifcopenshell.api.geometry import ifcopenshell.api.root - import ifcopenshell.api.spatial - import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation @@ -284,11 +277,8 @@ class Patcher: import bmesh import bonsai.tool as tool - import bpy import ifcopenshell.api.geometry import ifcopenshell.api.root - import ifcopenshell.api.spatial - import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation from mathutils import Matrix diff --git a/src/ifcpatch/ifcpatch/recipes/FixRevitClassificationCodeTypes.py b/src/ifcpatch/ifcpatch/recipes/FixRevitClassificationCodeTypes.py index 1ec5b331de..1ec871160a 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixRevitClassificationCodeTypes.py +++ b/src/ifcpatch/ifcpatch/recipes/FixRevitClassificationCodeTypes.py @@ -16,7 +16,6 @@ # 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 diff --git a/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py b/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py index 872b1a0091..4d2eb030d5 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py +++ b/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py @@ -19,7 +19,6 @@ import logging -import ifcopenshell class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py b/src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py index 74744f3487..f7e294898a 100644 --- a/src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py +++ b/src/ifcpatch/ifcpatch/recipes/Ifc2Sql.py @@ -21,9 +21,7 @@ import itertools import json import logging import multiprocessing -import os import re -import tempfile import time import typing from pathlib import Path diff --git a/src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py b/src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py index 2c8385066b..38b01135b3 100644 --- a/src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py +++ b/src/ifcpatch/ifcpatch/recipes/MergeDuplicateTypes.py @@ -20,7 +20,6 @@ from logging import Logger from typing import Any import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.type import ifcopenshell.util.element diff --git a/src/ifcpatch/ifcpatch/recipes/Migrate.py b/src/ifcpatch/ifcpatch/recipes/Migrate.py index 6b5c18ff11..627342f096 100644 --- a/src/ifcpatch/ifcpatch/recipes/Migrate.py +++ b/src/ifcpatch/ifcpatch/recipes/Migrate.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . -import typing from logging import Logger from typing import Union diff --git a/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py b/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py index a575fc4eac..7b8f122482 100644 --- a/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py +++ b/src/ifcpatch/ifcpatch/recipes/OffsetObjectPlacements.py @@ -19,7 +19,6 @@ import math import typing -import ifcopenshell import ifcopenshell.util.placement import numpy as np from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcpatch/ifcpatch/recipes/Optimise.py b/src/ifcpatch/ifcpatch/recipes/Optimise.py index 79699ae2e6..b0043a7299 100644 --- a/src/ifcpatch/ifcpatch/recipes/Optimise.py +++ b/src/ifcpatch/ifcpatch/recipes/Optimise.py @@ -17,7 +17,6 @@ # along with IfcPatch. If not, see . import ifcopenshell -import ifcopenshell.util.element class Patcher: diff --git a/src/ifcpatch/ifcpatch/recipes/PatchStationReferentPosition.py b/src/ifcpatch/ifcpatch/recipes/PatchStationReferentPosition.py index cd3a4fb523..9af1afc950 100644 --- a/src/ifcpatch/ifcpatch/recipes/PatchStationReferentPosition.py +++ b/src/ifcpatch/ifcpatch/recipes/PatchStationReferentPosition.py @@ -1,4 +1,3 @@ -import typing from logging import Logger from typing import Union diff --git a/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py b/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py index 641ba928b1..1414464fcd 100644 --- a/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py +++ b/src/ifcpatch/ifcpatch/recipes/ResetAbsoluteCoordinates.py @@ -17,7 +17,7 @@ # along with IfcPatch. If not, see . import logging -from typing import Literal, Optional, Union +from typing import Literal, Union import ifcopenshell import numpy as np diff --git a/src/ifcpatch/ifcpatch/recipes/ResetSpatialElementLocations.py b/src/ifcpatch/ifcpatch/recipes/ResetSpatialElementLocations.py index 0f7c3933b4..9bd751e763 100644 --- a/src/ifcpatch/ifcpatch/recipes/ResetSpatialElementLocations.py +++ b/src/ifcpatch/ifcpatch/recipes/ResetSpatialElementLocations.py @@ -19,9 +19,7 @@ import logging import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.geometry -import ifcopenshell.util import ifcopenshell.util.element import ifcopenshell.util.placement import numpy as np diff --git a/src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py b/src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py index 72218e5ecf..bd8706f9e1 100644 --- a/src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py +++ b/src/ifcpatch/ifcpatch/recipes/SetFalseOrigin.py @@ -18,7 +18,6 @@ import typing -import ifcopenshell import ifcopenshell.api.georeference import ifcopenshell.util.geolocation diff --git a/src/ifcpatch/ifcpatch/recipes/TessellateElements.py b/src/ifcpatch/ifcpatch/recipes/TessellateElements.py index 14ee80aec2..75dc5578d8 100644 --- a/src/ifcpatch/ifcpatch/recipes/TessellateElements.py +++ b/src/ifcpatch/ifcpatch/recipes/TessellateElements.py @@ -21,7 +21,6 @@ from logging import Logger from typing import Union import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.geom import ifcopenshell.util.representation diff --git a/src/ifcpatch/ifcpatch/recipes/UnsharePsets.py b/src/ifcpatch/ifcpatch/recipes/UnsharePsets.py index e7a1ad9eb1..67dc3da646 100644 --- a/src/ifcpatch/ifcpatch/recipes/UnsharePsets.py +++ b/src/ifcpatch/ifcpatch/recipes/UnsharePsets.py @@ -20,7 +20,6 @@ from logging import Logger import ifcopenshell import ifcopenshell.api.pset -import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.selector diff --git a/src/ifcpatch/pyproject.toml b/src/ifcpatch/pyproject.toml index 72ec9ca3f0..22cf2ec3c5 100644 --- a/src/ifcpatch/pyproject.toml +++ b/src/ifcpatch/pyproject.toml @@ -31,3 +31,11 @@ Issues = "https://github.com/IfcOpenShell/IfcOpenShell/issues" [tool.setuptools.packages.find] include = ["ifcpatch*"] exclude = ["test*"] + +[tool.ruff] +extend = "../../pyproject.toml" + +[tool.ruff.lint] +select = [ + "F401", # unused imports +] diff --git a/src/ifcpatch/test/test_ConvertLengthUnit.py b/src/ifcpatch/test/test_ConvertLengthUnit.py index a4f586512f..6fdf2668ec 100644 --- a/src/ifcpatch/test/test_ConvertLengthUnit.py +++ b/src/ifcpatch/test/test_ConvertLengthUnit.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.unit diff --git a/src/ifcpatch/test/test_ExtractElements.py b/src/ifcpatch/test/test_ExtractElements.py index fe2e9350dd..8d7d4021c6 100644 --- a/src/ifcpatch/test/test_ExtractElements.py +++ b/src/ifcpatch/test/test_ExtractElements.py @@ -19,7 +19,6 @@ import os import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.api.spatial diff --git a/src/ifcpatch/test/test_Ifc2Sql.py b/src/ifcpatch/test/test_Ifc2Sql.py index 79257a69c3..49e38c08fe 100644 --- a/src/ifcpatch/test/test_Ifc2Sql.py +++ b/src/ifcpatch/test/test_Ifc2Sql.py @@ -20,15 +20,6 @@ import tempfile from pathlib import Path import ifcopenshell -import ifcopenshell.api.context -import ifcopenshell.api.geometry -import ifcopenshell.api.georeference -import ifcopenshell.geom -import ifcopenshell.util.geolocation -import ifcopenshell.util.placement -import ifcopenshell.util.representation -import ifcopenshell.util.shape -import ifcopenshell.util.shape_builder import ifcpatch diff --git a/src/ifcpatch/test/test_MergeDuplicateTypes.py b/src/ifcpatch/test/test_MergeDuplicateTypes.py index 439f7a0c06..565a62517b 100644 --- a/src/ifcpatch/test/test_MergeDuplicateTypes.py +++ b/src/ifcpatch/test/test_MergeDuplicateTypes.py @@ -16,17 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import os -import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.api.material import ifcopenshell.api.root import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation -import pytest import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_Migrate.py b/src/ifcpatch/test/test_Migrate.py index 319e01d91b..85e60ff09f 100644 --- a/src/ifcpatch/test/test_Migrate.py +++ b/src/ifcpatch/test/test_Migrate.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_RegenerateGlobalIds.py b/src/ifcpatch/test/test_RegenerateGlobalIds.py index e51e4c7a9c..4858b6a7b0 100644 --- a/src/ifcpatch/test/test_RegenerateGlobalIds.py +++ b/src/ifcpatch/test/test_RegenerateGlobalIds.py @@ -16,13 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import os -import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.root -import ifcopenshell.util.element -import pytest import ifcpatch import test.bootstrap diff --git a/src/ifcpatch/test/test_ResetSpatialElementLocations.py b/src/ifcpatch/test/test_ResetSpatialElementLocations.py index 5d446c9128..d0dc385015 100644 --- a/src/ifcpatch/test/test_ResetSpatialElementLocations.py +++ b/src/ifcpatch/test/test_ResetSpatialElementLocations.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.geometry import ifcopenshell.api.root diff --git a/src/ifcpatch/test/test_SetFalseOrigin.py b/src/ifcpatch/test/test_SetFalseOrigin.py index 1357ec39b0..e15e8684fb 100644 --- a/src/ifcpatch/test/test_SetFalseOrigin.py +++ b/src/ifcpatch/test/test_SetFalseOrigin.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.context import ifcopenshell.api.geometry diff --git a/src/ifcpatch/test/test_TesselateElements.py b/src/ifcpatch/test/test_TesselateElements.py index 7acdc899a7..9e15c35f72 100644 --- a/src/ifcpatch/test/test_TesselateElements.py +++ b/src/ifcpatch/test/test_TesselateElements.py @@ -16,14 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.geometry -import ifcopenshell.api.profile import ifcopenshell.api.root import ifcopenshell.api.unit -import ifcopenshell.geom -import ifcopenshell.util.element import ifcopenshell.util.representation from ifcopenshell.util.shape_builder import ShapeBuilder diff --git a/src/ifcpatch/test/test_UnsharePsets.py b/src/ifcpatch/test/test_UnsharePsets.py index fc40bdb74d..ae09ed879b 100644 --- a/src/ifcpatch/test/test_UnsharePsets.py +++ b/src/ifcpatch/test/test_UnsharePsets.py @@ -18,7 +18,6 @@ import ifcopenshell import ifcopenshell.api.pset -import ifcopenshell.geom import ifcopenshell.util.element import ifcpatch diff --git a/src/ifctester/ifctester/__init__.py b/src/ifctester/ifctester/__init__.py index edb1db90e4..46b38aa82e 100644 --- a/src/ifctester/ifctester/__init__.py +++ b/src/ifctester/ifctester/__init__.py @@ -16,6 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcTester. If not, see . -from .ids import open +from .ids import open as open __version__ = version = "0.0.0" diff --git a/src/ifctester/ifctester/ids.py b/src/ifctester/ifctester/ids.py index d7403e2594..d6ae3bd44a 100644 --- a/src/ifctester/ifctester/ids.py +++ b/src/ifctester/ifctester/ids.py @@ -28,16 +28,10 @@ from xmlschema import XMLSchema, etree_tostring from xmlschema.validators.exceptions import XMLSchemaValidationError from .facet import ( - Attribute, Cardinality, - Classification, Entity, Facet, FacetFailure, - Material, - PartOf, - Property, - Restriction, get_pset, get_psets, ) diff --git a/src/ifctester/pyproject.toml b/src/ifctester/pyproject.toml index c174854190..1be89ed68b 100644 --- a/src/ifctester/pyproject.toml +++ b/src/ifctester/pyproject.toml @@ -32,3 +32,9 @@ exclude = ["test*"] [tool.setuptools.package-data] "*" = ["*.*"] + +[tool.ruff] +extend = "../../pyproject.toml" +lint.select = [ + "F401", # unused imports +] diff --git a/src/ifctester/test/ids_doc_generator.py b/src/ifctester/test/ids_doc_generator.py index a8323fbeed..3788afebbc 100644 --- a/src/ifctester/test/ids_doc_generator.py +++ b/src/ifctester/test/ids_doc_generator.py @@ -24,7 +24,6 @@ from pathlib import Path from xml.dom.minidom import parseString import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.context import ifcopenshell.api.geometry diff --git a/src/ifctester/test/test_facet.py b/src/ifctester/test/test_facet.py index 2e0a16ec85..a8ace9622a 100644 --- a/src/ifctester/test/test_facet.py +++ b/src/ifctester/test/test_facet.py @@ -20,7 +20,6 @@ import uuid import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.classification import ifcopenshell.api.group diff --git a/src/ifctester/test/test_ids.py b/src/ifctester/test/test_ids.py index 0a851a355c..9410d73948 100644 --- a/src/ifctester/test/test_ids.py +++ b/src/ifctester/test/test_ids.py @@ -20,7 +20,6 @@ import os from typing import Optional import ifcopenshell -import ifcopenshell.api import ifcopenshell.api.material import pytest import xmlschema diff --git a/src/ifctester/webapp/public/worker/api.py b/src/ifctester/webapp/public/worker/api.py index dafc61c646..4489d358d5 100644 --- a/src/ifctester/webapp/public/worker/api.py +++ b/src/ifctester/webapp/public/worker/api.py @@ -1,10 +1,7 @@ -import xml.etree.ElementTree as ET import ifcopenshell -import ifcopenshell.util import ifcopenshell.util.attribute import ifcopenshell.util.pset -import ifcopenshell.util.schema from ifctester.ids import Ids, IdsXmlValidationError, get_schema from xmlschema.validators.exceptions import XMLSchemaValidationError diff --git a/test/run.py b/test/run.py index 320b8decc4..ad1880166f 100644 --- a/test/run.py +++ b/test/run.py @@ -28,7 +28,6 @@ import inspect import os -import shutil import subprocess import sys from urllib.request import urlretrieve From 6d4eb06d89b845d2c698f411d8e4ad0c03f96568 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 12:15:22 +0500 Subject: [PATCH 579/657] black . --- nix/build-all.py | 2 +- src/bonsai/bonsai/tool/system.py | 12 ++++++------ src/bonsai/test/core/test_system.py | 4 ++-- src/bonsai/test/tool/test_system.py | 1 + src/ifc4d/ifc4d/ifc2p6.py | 1 - src/ifcpatch/bootstrap.py | 2 -- .../ifcpatch/recipes/FixArchiCADToRevitSpaces.py | 1 - src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py | 1 - src/ifctester/webapp/public/worker/api.py | 1 - 9 files changed, 10 insertions(+), 15 deletions(-) diff --git a/nix/build-all.py b/nix/build-all.py index b60ab1adbd..2a4318dc35 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1178,7 +1178,7 @@ if "cgal" in targets: gmp_args.extend(("--disable-assembly", "--enable-cxx")) mpfr_args.extend(("--host", "none")) elif "x86" in arch: - gmp_args.append("--enable-fat") # See issues #7458 #7556 + gmp_args.append("--enable-fat") # See issues #7458 #7556 OLD_CC = None if MAC_CROSS_COMPILE_INTEL: diff --git a/src/bonsai/bonsai/tool/system.py b/src/bonsai/bonsai/tool/system.py index 3566dbd863..9df19e5619 100644 --- a/src/bonsai/bonsai/tool/system.py +++ b/src/bonsai/bonsai/tool/system.py @@ -112,20 +112,20 @@ class System(bonsai.core.tool.System): def create_port_at_cursor(cls, element: ifcopenshell.entity_instance) -> ifcopenshell.entity_instance: ifc_file = tool.Ifc.get() element_obj = tool.Ifc.get_object(element) - + port = ifcopenshell.api.system.add_port(ifc_file, element=element) port.FlowDirection = "NOTDEFINED" port.PredefinedType = "USERDEFINED" - + systems = ifcopenshell.util.system.get_element_systems(element) system = systems[0] if systems else None port.SystemType = getattr(system, "PredefinedType", None) or "USERDEFINED" - + matrix = element_obj.matrix_world.copy() matrix.translation = bpy.context.scene.cursor.matrix.translation - + ifcopenshell.api.geometry.edit_object_placement(ifc_file, product=port, matrix=matrix, is_si=True) - + return port @classmethod @@ -218,7 +218,7 @@ class System(bonsai.core.tool.System): for collection in obj.users_collection: target_collection = collection break - + if target_collection: for port_obj in ifc_importer.added_data.values(): if isinstance(port_obj, bpy.types.Object): diff --git a/src/bonsai/test/core/test_system.py b/src/bonsai/test/core/test_system.py index 4612e14d69..1d19189c3b 100644 --- a/src/bonsai/test/core/test_system.py +++ b/src/bonsai/test/core/test_system.py @@ -153,8 +153,8 @@ class TestAddPort: def test_run(self, ifc, system): system.get_ports("element").should_be_called().will_return(["port"]) system.load_ports("element", ["port"]).should_be_called() - #system.create_empty_at_cursor_with_element_orientation("element").should_be_called().will_return("obj") - #system.run_root_assign_class(obj="obj", ifc_class="IfcDistributionPort", should_add_representation=False).should_be_called().will_return("port") + # system.create_empty_at_cursor_with_element_orientation("element").should_be_called().will_return("obj") + # system.run_root_assign_class(obj="obj", ifc_class="IfcDistributionPort", should_add_representation=False).should_be_called().will_return("port") system.create_port_at_cursor("element").should_be_called().will_return("port") system.load_ports("element", ["port"]).should_be_called() subject.add_port(ifc, system, element="element") diff --git a/src/bonsai/test/tool/test_system.py b/src/bonsai/test/tool/test_system.py index ba20305140..1a18811c37 100644 --- a/src/bonsai/test/tool/test_system.py +++ b/src/bonsai/test/tool/test_system.py @@ -103,6 +103,7 @@ class TestCreateEmptyAtCursorWithElementOrientation(NewFile): obj = subject.create_empty_at_cursor_with_element_orientation(element) assert obj.matrix_world == bpy.context.scene.cursor.matrix + class TestCreatePortAtCursor(NewFile): def test_run(self): assert bpy.context.scene diff --git a/src/ifc4d/ifc4d/ifc2p6.py b/src/ifc4d/ifc4d/ifc2p6.py index 9294e91cbf..a4634ca372 100644 --- a/src/ifc4d/ifc4d/ifc2p6.py +++ b/src/ifc4d/ifc4d/ifc2p6.py @@ -25,7 +25,6 @@ import ifcopenshell.util.date import ifcopenshell.util.sequence - class Ifc2P6: def __init__(self): self.xml = None diff --git a/src/ifcpatch/bootstrap.py b/src/ifcpatch/bootstrap.py index b4fd470b49..f703e25969 100644 --- a/src/ifcpatch/bootstrap.py +++ b/src/ifcpatch/bootstrap.py @@ -15,5 +15,3 @@ # # You should have received a copy of the GNU Lesser General Public License # along with IfcPatch. If not, see . - - diff --git a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py index 2245f8c0df..38a7a2950e 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py +++ b/src/ifcpatch/ifcpatch/recipes/FixArchiCADToRevitSpaces.py @@ -19,7 +19,6 @@ import logging - class Patcher: def __init__(self, file: None, logger: logging.Logger, filepath: str): """Allow ArchiCAD IFC spaces to open as Revit rooms diff --git a/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py b/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py index 4d2eb030d5..6c083456e9 100644 --- a/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py +++ b/src/ifcpatch/ifcpatch/recipes/FixRevitTINs.py @@ -20,7 +20,6 @@ import logging - class Patcher: def __init__(self, file: None, logger: logging.Logger, filepath: str, is_solid: bool = True): """Fix missing or spot-coordinate bugged TINs loading in Revit diff --git a/src/ifctester/webapp/public/worker/api.py b/src/ifctester/webapp/public/worker/api.py index 4489d358d5..ebf4bbe01a 100644 --- a/src/ifctester/webapp/public/worker/api.py +++ b/src/ifctester/webapp/public/worker/api.py @@ -1,4 +1,3 @@ - import ifcopenshell import ifcopenshell.util.attribute import ifcopenshell.util.pset From 44f0a4a39b74c2b9fde18c16436db71abd4ef196 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 13:15:11 +0500 Subject: [PATCH 580/657] pyproject.toml - simplify cmake formatter command Since the latest gersemi version, it now respects gitignore. --- pyproject.toml | 2 +- win/patches/.gersemirc | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 win/patches/.gersemirc diff --git a/pyproject.toml b/pyproject.toml index b932db42a1..13f3b15ba6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,4 +82,4 @@ black = "black ." format.sequence = ["black", "ruff-main", "ruff-old"] -cmake-format = "gersemi cmake src --in-place" +cmake-format = "gersemi . --in-place" diff --git a/win/patches/.gersemirc b/win/patches/.gersemirc new file mode 100644 index 0000000000..f64d72913d --- /dev/null +++ b/win/patches/.gersemirc @@ -0,0 +1 @@ +disable_formatting: true From dbb4e91d55e02c7c12f7f6c5183c12181386990b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 13:00:09 +0500 Subject: [PATCH 581/657] apply cmake file formatting --- cmake/IfcOpenShellConfig.cmake.in | 14 ++++++---- cmake/cmake_uninstall.cmake.in | 10 ++++--- docs/cpp-api/CMakeLists.txt | 43 +++++++++++++----------------- src/ifcgeom/CMakeLists.txt | 8 +----- src/ifcgeom/kernels/CMakeLists.txt | 5 +--- 5 files changed, 37 insertions(+), 43 deletions(-) diff --git a/cmake/IfcOpenShellConfig.cmake.in b/cmake/IfcOpenShellConfig.cmake.in index 95df6180f9..e5e5d350b8 100644 --- a/cmake/IfcOpenShellConfig.cmake.in +++ b/cmake/IfcOpenShellConfig.cmake.in @@ -13,7 +13,14 @@ include(CMakeFindDependencyMacro) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME OFF) set(Boost_USE_MULTITHREADED ON) -set(Boost_COMPONENTS system program_options regex thread date_time iostreams) +set(Boost_COMPONENTS + system + program_options + regex + thread + date_time + iostreams +) find_dependency(Boost CONFIG COMPONENTS ${Boost_COMPONENTS}) find_dependency(Eigen3 CONFIG) @@ -39,7 +46,6 @@ if(IFCOPENSHELL_IFCXML) find_dependency(LibXml2 CONFIG) endif() - if(IFCOPENSHELL_WITH_CGAL) find_dependency(CGAL CONFIG) endif() @@ -48,9 +54,7 @@ if(IFCOPENSHELL_WITH_OPENCASCADE) find_dependency(OpenCASCADE CONFIG) if(OpenCASCADE_VERSION VERSION_LESS "7.7.0") # cmake configs < 7.7.0 were not adding include directories to targets automatically. - set_target_properties(TKernel PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}" - ) + set_target_properties(TKernel PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}") endif() endif() diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in index 04da07edd6..012b1c0859 100644 --- a/cmake/cmake_uninstall.cmake.in +++ b/cmake/cmake_uninstall.cmake.in @@ -29,9 +29,13 @@ foreach(file ${files}) if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") exec_program( - "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" - OUTPUT_VARIABLE rm_out - RETURN_VALUE rm_retval + "@CMAKE_COMMAND@" + ARGS + "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE + rm_out + RETURN_VALUE + rm_retval ) if(NOT "${rm_retval}" STREQUAL 0) diff --git a/docs/cpp-api/CMakeLists.txt b/docs/cpp-api/CMakeLists.txt index 0b729355e5..80593dd220 100644 --- a/docs/cpp-api/CMakeLists.txt +++ b/docs/cpp-api/CMakeLists.txt @@ -1,14 +1,10 @@ #Look for an executable called sphinx-build -find_program(SPHINX_EXECUTABLE - NAMES sphinx-build - DOC "Path to sphinx-build executable") +find_program(SPHINX_EXECUTABLE NAMES sphinx-build DOC "Path to sphinx-build executable") include(FindPackageHandleStandardArgs) #Handle standard arguments to find_package like REQUIRED and QUIET -find_package_handle_standard_args(Sphinx - "Failed to find sphinx-build executable" - SPHINX_EXECUTABLE) +find_package_handle_standard_args(Sphinx "Failed to find sphinx-build executable" SPHINX_EXECUTABLE) find_package(Doxygen REQUIRED) #find_package(Sphinx REQUIRED) @@ -16,25 +12,24 @@ find_package(Doxygen REQUIRED) set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}) set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/docs/sphinx) -MESSAGE(STATUS "SPHINX BUILD ${CMAKE_CURRENT_BINARY_DIR}") +message(STATUS "SPHINX BUILD ${CMAKE_CURRENT_BINARY_DIR}") file(MAKE_DIRECTORY ./output/doxygen) -if (DOXYGEN_FOUND) +if(DOXYGEN_FOUND) + add_custom_target( + Sphinx + ALL + COMMAND ${SPHINX_EXECUTABLE} -v -T -b html ${SPHINX_SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/output + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output + COMMENT "Generating documentation with Sphinx" + ) -add_custom_target(Sphinx ALL - COMMAND - ${SPHINX_EXECUTABLE} -v -T -b html - ${SPHINX_SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/output - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output - COMMENT "Generating documentation with Sphinx") - -# add_custom_target(ifcopenshell_python_docs ALL - # COMMAND make html - # WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs - # OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs - # COMMENT "Generating documentation with Sphinx") - -else (DOXYGEN_FOUND) - message("Doxygen need to be installed to generate the doxygen documentation") -endif (DOXYGEN_FOUND) + # add_custom_target(ifcopenshell_python_docs ALL + # COMMAND make html + # WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs + # OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs + # COMMENT "Generating documentation with Sphinx") +else(DOXYGEN_FOUND) + message("Doxygen need to be installed to generate the doxygen documentation") +endif(DOXYGEN_FOUND) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 4bacbf2f72..31bb2e7bce 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -29,13 +29,7 @@ endif() find_package(Eigen3 REQUIRED) -target_link_libraries( - IfcGeom - ${mapping_libraries} - ${CMAKE_THREAD_LIBS_INIT} - "Eigen3::Eigen" - ${CGAL_LIBRARIES} -) +target_link_libraries(IfcGeom ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen" ${CGAL_LIBRARIES}) if(WITH_OPENCASCADE) target_link_libraries(IfcGeom TKernel) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 73882d2c71..6775a8f378 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -43,7 +43,4 @@ endforeach() set(kernel_libraries ${kernel_libraries} PARENT_SCOPE) -install( - FILES ifc_geomlibrary_api.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/kernels/" -) +install(FILES ifc_geomlibrary_api.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/kernels/") From c4c1e2ebf9f4757dd1eb705dfbc4ff24bd09549c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 15:52:03 +0500 Subject: [PATCH 582/657] cmake_uninstall - simplify by using common variable --- cmake/cmake_uninstall.cmake.in | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in index 012b1c0859..d6e6464f87 100644 --- a/cmake/cmake_uninstall.cmake.in +++ b/cmake/cmake_uninstall.cmake.in @@ -25,13 +25,14 @@ file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") foreach(file ${files}) - message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + set(filepath "$ENV{DESTDIR}${file}") + message(STATUS "Uninstalling ${filepath}") - if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + if(IS_SYMLINK "${filepath}" OR EXISTS "${filepath}") exec_program( "@CMAKE_COMMAND@" ARGS - "-E remove \"$ENV{DESTDIR}${file}\"" + "-E remove \"${filepath}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE @@ -39,9 +40,9 @@ foreach(file ${files}) ) if(NOT "${rm_retval}" STREQUAL 0) - message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + message(FATAL_ERROR "Problem when removing ${filepath}") endif() - else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") - message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + else(IS_SYMLINK "${filepath}" OR EXISTS "${filepath}") + message(STATUS "File ${filepath} does not exist.") endif() endforeach() From c6766cefb7b7457a2b40f867685050b0fadeaf28 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 16:01:24 +0500 Subject: [PATCH 583/657] cmake_uninstall - speed up the process and fix cmake warnings --- cmake/cmake_uninstall.cmake.in | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in index d6e6464f87..cb15e0c494 100644 --- a/cmake/cmake_uninstall.cmake.in +++ b/cmake/cmake_uninstall.cmake.in @@ -29,19 +29,7 @@ foreach(file ${files}) message(STATUS "Uninstalling ${filepath}") if(IS_SYMLINK "${filepath}" OR EXISTS "${filepath}") - exec_program( - "@CMAKE_COMMAND@" - ARGS - "-E remove \"${filepath}\"" - OUTPUT_VARIABLE - rm_out - RETURN_VALUE - rm_retval - ) - - if(NOT "${rm_retval}" STREQUAL 0) - message(FATAL_ERROR "Problem when removing ${filepath}") - endif() + file(REMOVE "${filepath}") else(IS_SYMLINK "${filepath}" OR EXISTS "${filepath}") message(STATUS "File ${filepath} does not exist.") endif() From bc675ef9b25dffceb9c72df1bc9bf0d79046db72 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 16:02:30 +0500 Subject: [PATCH 584/657] cmake_uninstall - fix always skipped if-block condition --- cmake/cmake_uninstall.cmake.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in index cb15e0c494..aa91cd810d 100644 --- a/cmake/cmake_uninstall.cmake.in +++ b/cmake/cmake_uninstall.cmake.in @@ -30,7 +30,7 @@ foreach(file ${files}) if(IS_SYMLINK "${filepath}" OR EXISTS "${filepath}") file(REMOVE "${filepath}") - else(IS_SYMLINK "${filepath}" OR EXISTS "${filepath}") + else(NOT EXISTS "${filepath}") message(STATUS "File ${filepath} does not exist.") endif() endforeach() From 1319391a6b5034e89da9ed6dab481f5e132c6294 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 16:04:56 +0500 Subject: [PATCH 585/657] ci-bonsai-daily - enable Python 3.13 build Since it's coming in Blender 5.1 which is soon to go Beta (at 4 Feb). --- .github/workflows/ci-bonsai-daily.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-bonsai-daily.yml b/.github/workflows/ci-bonsai-daily.yml index eea09da5a7..8beddfe668 100644 --- a/.github/workflows/ci-bonsai-daily.yml +++ b/.github/workflows/ci-bonsai-daily.yml @@ -35,7 +35,7 @@ jobs: strategy: fail-fast: false matrix: - pyver: [py311, py312] + pyver: [py311, py312, py313] config: - { name: "Windows Build", From 953c5fddc6f1cf385081021dd4f0d51a4fe9567a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 17:11:12 +0500 Subject: [PATCH 586/657] bonsai - sort imports --- src/bcf/bcf/agnostic/topic.py | 3 +- src/bcf/tests/conftest.py | 1 + src/bcf/tests/v2/test_bcf_xml.py | 3 +- src/bcf/tests/v2/test_example_files.py | 3 +- src/bcf/tests/v2/test_ifcclash_api.py | 1 + src/bcf/tests/v3/test_bcf_xml.py | 3 +- src/bcf/tests/v3/test_example_files.py | 3 +- src/bcf/tests/v3/test_ifcclash_api.py | 1 + src/bonsai/bonsai/__init__.py | 13 ++-- src/bonsai/bonsai/bim/__init__.py | 12 +-- src/bonsai/bonsai/bim/data/webui/sioserver.py | 12 +-- src/bonsai/bonsai/bim/export_ifc.py | 23 +++--- src/bonsai/bonsai/bim/handler.py | 27 ++++--- src/bonsai/bonsai/bim/helper.py | 19 +++-- src/bonsai/bonsai/bim/ifc.py | 22 +++--- src/bonsai/bonsai/bim/import_ifc.py | 29 +++---- .../bonsai/bim/module/aggregate/__init__.py | 3 +- .../bonsai/bim/module/aggregate/data.py | 8 +- .../bonsai/bim/module/aggregate/decorator.py | 3 +- .../bonsai/bim/module/aggregate/operator.py | 6 +- .../bonsai/bim/module/aggregate/prop.py | 27 ++++--- src/bonsai/bonsai/bim/module/aggregate/ui.py | 5 +- .../bonsai/bim/module/alignment/operator.py | 24 +++--- .../bonsai/bim/module/attribute/__init__.py | 3 +- .../bonsai/bim/module/attribute/data.py | 1 + .../bonsai/bim/module/attribute/operator.py | 11 ++- .../bonsai/bim/module/attribute/prop.py | 20 ++--- src/bonsai/bonsai/bim/module/attribute/ui.py | 9 ++- .../bonsai/bim/module/augin/__init__.py | 3 +- .../bonsai/bim/module/augin/operator.py | 10 ++- src/bonsai/bonsai/bim/module/augin/ui.py | 1 + src/bonsai/bonsai/bim/module/bcf/__init__.py | 3 +- src/bonsai/bonsai/bim/module/bcf/bcfstore.py | 6 +- src/bonsai/bonsai/bim/module/bcf/operator.py | 40 +++++----- src/bonsai/bonsai/bim/module/bcf/prop.py | 34 +++++---- src/bonsai/bonsai/bim/module/bcf/ui.py | 14 ++-- .../bonsai/bim/module/boundary/__init__.py | 3 +- src/bonsai/bonsai/bim/module/boundary/data.py | 1 + .../bonsai/bim/module/boundary/decorator.py | 7 +- .../bonsai/bim/module/boundary/operator.py | 34 +++++---- src/bonsai/bonsai/bim/module/boundary/prop.py | 18 +++-- src/bonsai/bonsai/bim/module/boundary/ui.py | 1 + .../bonsai/bim/module/brick/__init__.py | 3 +- src/bonsai/bonsai/bim/module/brick/data.py | 3 +- .../bonsai/bim/module/brick/operator.py | 8 +- src/bonsai/bonsai/bim/module/brick/prop.py | 20 ++--- src/bonsai/bonsai/bim/module/brick/ui.py | 3 +- src/bonsai/bonsai/bim/module/bsdd/__init__.py | 3 +- src/bonsai/bonsai/bim/module/bsdd/data.py | 3 +- src/bonsai/bonsai/bim/module/bsdd/operator.py | 6 +- src/bonsai/bonsai/bim/module/bsdd/prop.py | 26 ++++--- src/bonsai/bonsai/bim/module/bsdd/ui.py | 18 +++-- src/bonsai/bonsai/bim/module/cad/__init__.py | 1 + src/bonsai/bonsai/bim/module/cad/operator.py | 17 +++-- src/bonsai/bonsai/bim/module/cad/prop.py | 8 +- src/bonsai/bonsai/bim/module/cad/workspace.py | 8 +- .../bonsai/bim/module/clash/__init__.py | 3 +- src/bonsai/bonsai/bim/module/clash/data.py | 4 +- .../bonsai/bim/module/clash/decorator.py | 9 ++- .../bonsai/bim/module/clash/operator.py | 22 +++--- src/bonsai/bonsai/bim/module/clash/prop.py | 22 +++--- src/bonsai/bonsai/bim/module/clash/ui.py | 20 +++-- .../bim/module/classification/__init__.py | 3 +- .../bonsai/bim/module/classification/data.py | 6 +- .../bim/module/classification/operator.py | 7 +- .../bonsai/bim/module/classification/prop.py | 25 +++--- .../bonsai/bim/module/classification/ui.py | 33 ++++---- .../bonsai/bim/module/constraint/__init__.py | 3 +- .../bonsai/bim/module/constraint/data.py | 3 +- .../bonsai/bim/module/constraint/operator.py | 4 +- .../bonsai/bim/module/constraint/prop.py | 24 +++--- src/bonsai/bonsai/bim/module/constraint/ui.py | 17 +++-- .../bonsai/bim/module/context/__init__.py | 3 +- src/bonsai/bonsai/bim/module/context/data.py | 8 +- .../bonsai/bim/module/context/operator.py | 3 +- src/bonsai/bonsai/bim/module/context/prop.py | 20 ++--- src/bonsai/bonsai/bim/module/context/ui.py | 1 + src/bonsai/bonsai/bim/module/cost/__init__.py | 3 +- src/bonsai/bonsai/bim/module/cost/data.py | 6 +- src/bonsai/bonsai/bim/module/cost/operator.py | 14 ++-- src/bonsai/bonsai/bim/module/cost/prop.py | 28 ++++--- src/bonsai/bonsai/bim/module/cost/ui.py | 7 +- .../bonsai/bim/module/covering/__init__.py | 1 + src/bonsai/bonsai/bim/module/covering/prop.py | 3 +- .../bonsai/bim/module/covering/workspace.py | 6 +- .../bonsai/bim/module/covetool/__init__.py | 3 +- .../bonsai/bim/module/covetool/operator.py | 6 +- src/bonsai/bonsai/bim/module/covetool/prop.py | 3 +- src/bonsai/bonsai/bim/module/covetool/ui.py | 9 ++- src/bonsai/bonsai/bim/module/csv/__init__.py | 3 +- src/bonsai/bonsai/bim/module/csv/operator.py | 17 +++-- src/bonsai/bonsai/bim/module/csv/prop.py | 18 +++-- src/bonsai/bonsai/bim/module/csv/ui.py | 3 +- .../bonsai/bim/module/debug/__init__.py | 3 +- .../bonsai/bim/module/debug/operator.py | 30 ++++---- src/bonsai/bonsai/bim/module/debug/prop.py | 18 +++-- src/bonsai/bonsai/bim/module/debug/ui.py | 3 +- src/bonsai/bonsai/bim/module/demo/__init__.py | 3 +- src/bonsai/bonsai/bim/module/demo/operator.py | 3 +- src/bonsai/bonsai/bim/module/demo/prop.py | 12 +-- src/bonsai/bonsai/bim/module/demo/ui.py | 1 + src/bonsai/bonsai/bim/module/diff/__init__.py | 3 +- src/bonsai/bonsai/bim/module/diff/data.py | 4 +- src/bonsai/bonsai/bim/module/diff/operator.py | 6 +- src/bonsai/bonsai/bim/module/diff/prop.py | 20 ++--- src/bonsai/bonsai/bim/module/diff/ui.py | 3 +- .../bonsai/bim/module/document/__init__.py | 3 +- src/bonsai/bonsai/bim/module/document/data.py | 4 +- .../bonsai/bim/module/document/operator.py | 8 +- src/bonsai/bonsai/bim/module/document/prop.py | 23 +++--- src/bonsai/bonsai/bim/module/document/ui.py | 3 +- .../bonsai/bim/module/drawing/__init__.py | 4 +- .../bonsai/bim/module/drawing/annotation.py | 15 ++-- src/bonsai/bonsai/bim/module/drawing/data.py | 16 ++-- .../bonsai/bim/module/drawing/decoration.py | 34 +++++---- .../bonsai/bim/module/drawing/gizmos.py | 24 +++--- .../bonsai/bim/module/drawing/handler.py | 3 +- .../bonsai/bim/module/drawing/helper.py | 16 ++-- .../bonsai/bim/module/drawing/operator.py | 75 ++++++++++-------- src/bonsai/bonsai/bim/module/drawing/prop.py | 50 ++++++------ .../bonsai/bim/module/drawing/scheduler.py | 19 ++--- .../bonsai/bim/module/drawing/shaders.py | 3 +- .../bonsai/bim/module/drawing/sheeter.py | 18 +++-- .../bonsai/bim/module/drawing/svgwriter.py | 35 ++++----- src/bonsai/bonsai/bim/module/drawing/ui.py | 13 ++-- .../bonsai/bim/module/drawing/workspace.py | 12 +-- src/bonsai/bonsai/bim/module/fm/__init__.py | 3 +- src/bonsai/bonsai/bim/module/fm/data.py | 5 +- src/bonsai/bonsai/bim/module/fm/operator.py | 10 ++- src/bonsai/bonsai/bim/module/fm/prop.py | 26 ++++--- src/bonsai/bonsai/bim/module/fm/ui.py | 3 +- .../bonsai/bim/module/geometry/__init__.py | 10 ++- src/bonsai/bonsai/bim/module/geometry/data.py | 6 +- .../bonsai/bim/module/geometry/decorator.py | 14 ++-- .../bonsai/bim/module/geometry/helper.py | 20 ++--- .../bonsai/bim/module/geometry/operator.py | 46 ++++++----- src/bonsai/bonsai/bim/module/geometry/prop.py | 24 +++--- src/bonsai/bonsai/bim/module/geometry/ui.py | 9 ++- .../bim/module/georeference/__init__.py | 3 +- .../bonsai/bim/module/georeference/data.py | 7 +- .../bim/module/georeference/decorator.py | 14 ++-- .../bim/module/georeference/operator.py | 6 +- .../bonsai/bim/module/georeference/prop.py | 20 ++--- .../bonsai/bim/module/georeference/ui.py | 5 +- src/bonsai/bonsai/bim/module/gis/__init__.py | 5 +- src/bonsai/bonsai/bim/module/gis/prop.py | 3 +- .../bonsai/bim/module/group/__init__.py | 3 +- src/bonsai/bonsai/bim/module/group/data.py | 1 + .../bonsai/bim/module/group/operator.py | 4 +- src/bonsai/bonsai/bim/module/group/prop.py | 22 +++--- src/bonsai/bonsai/bim/module/group/ui.py | 7 +- .../bonsai/bim/module/ifcgit/__init__.py | 2 +- src/bonsai/bonsai/bim/module/ifcgit/data.py | 3 +- .../bonsai/bim/module/ifcgit/operator.py | 4 +- src/bonsai/bonsai/bim/module/ifcgit/prop.py | 12 +-- src/bonsai/bonsai/bim/module/ifcgit/ui.py | 10 ++- .../bonsai/bim/module/layer/__init__.py | 3 +- src/bonsai/bonsai/bim/module/layer/data.py | 4 +- .../bonsai/bim/module/layer/operator.py | 4 +- src/bonsai/bonsai/bim/module/layer/prop.py | 20 ++--- src/bonsai/bonsai/bim/module/layer/ui.py | 7 +- .../bonsai/bim/module/library/__init__.py | 3 +- src/bonsai/bonsai/bim/module/library/data.py | 1 + .../bonsai/bim/module/library/operator.py | 3 +- src/bonsai/bonsai/bim/module/library/prop.py | 22 +++--- src/bonsai/bonsai/bim/module/library/ui.py | 7 +- .../bonsai/bim/module/light/__init__.py | 12 +-- src/bonsai/bonsai/bim/module/light/data.py | 3 +- .../bonsai/bim/module/light/decorator.py | 14 ++-- src/bonsai/bonsai/bim/module/light/list.py | 9 ++- .../bonsai/bim/module/light/operator.py | 32 ++++---- src/bonsai/bonsai/bim/module/light/prop.py | 24 +++--- src/bonsai/bonsai/bim/module/light/ui.py | 6 +- .../bonsai/bim/module/material/__init__.py | 3 +- src/bonsai/bonsai/bim/module/material/data.py | 8 +- .../bonsai/bim/module/material/operator.py | 12 +-- src/bonsai/bonsai/bim/module/material/prop.py | 30 ++++---- src/bonsai/bonsai/bim/module/material/ui.py | 14 ++-- src/bonsai/bonsai/bim/module/misc/__init__.py | 3 +- src/bonsai/bonsai/bim/module/misc/operator.py | 12 +-- src/bonsai/bonsai/bim/module/misc/prop.py | 15 ++-- .../bonsai/bim/module/model/__init__.py | 34 ++++----- src/bonsai/bonsai/bim/module/model/array.py | 6 +- .../bonsai/bim/module/model/covering.py | 3 +- src/bonsai/bonsai/bim/module/model/data.py | 12 +-- .../bonsai/bim/module/model/decorator.py | 21 ++--- src/bonsai/bonsai/bim/module/model/door.py | 20 ++--- src/bonsai/bonsai/bim/module/model/grid.py | 12 +-- src/bonsai/bonsai/bim/module/model/handler.py | 3 +- src/bonsai/bonsai/bim/module/model/mep.py | 24 +++--- src/bonsai/bonsai/bim/module/model/opening.py | 37 ++++----- .../bonsai/bim/module/model/polyline.py | 17 +++-- src/bonsai/bonsai/bim/module/model/product.py | 31 ++++---- src/bonsai/bonsai/bim/module/model/profile.py | 27 ++++--- src/bonsai/bonsai/bim/module/model/prop.py | 24 +++--- src/bonsai/bonsai/bim/module/model/railing.py | 13 ++-- src/bonsai/bonsai/bim/module/model/roof.py | 20 ++--- src/bonsai/bonsai/bim/module/model/slab.py | 20 +++-- src/bonsai/bonsai/bim/module/model/space.py | 3 +- src/bonsai/bonsai/bim/module/model/stair.py | 15 +++- .../bim/module/model/sverchok_modifier.py | 14 ++-- src/bonsai/bonsai/bim/module/model/ui.py | 19 +++-- src/bonsai/bonsai/bim/module/model/wall.py | 22 +++--- src/bonsai/bonsai/bim/module/model/window.py | 28 +++---- .../bonsai/bim/module/model/workspace.py | 16 ++-- src/bonsai/bonsai/bim/module/nest/__init__.py | 3 +- src/bonsai/bonsai/bim/module/nest/data.py | 3 +- .../bonsai/bim/module/nest/decorator.py | 3 +- src/bonsai/bonsai/bim/module/nest/operator.py | 3 +- src/bonsai/bonsai/bim/module/nest/prop.py | 22 +++--- src/bonsai/bonsai/bim/module/nest/ui.py | 3 +- .../bonsai/bim/module/owner/__init__.py | 3 +- src/bonsai/bonsai/bim/module/owner/data.py | 6 +- .../bonsai/bim/module/owner/operator.py | 8 +- src/bonsai/bonsai/bim/module/owner/prop.py | 22 +++--- src/bonsai/bonsai/bim/module/owner/ui.py | 12 +-- .../bonsai/bim/module/patch/__init__.py | 3 +- .../bonsai/bim/module/patch/operator.py | 16 ++-- src/bonsai/bonsai/bim/module/patch/prop.py | 29 +++---- src/bonsai/bonsai/bim/module/patch/ui.py | 10 ++- .../bonsai/bim/module/profile/__init__.py | 3 +- src/bonsai/bonsai/bim/module/profile/data.py | 4 +- .../bonsai/bim/module/profile/operator.py | 9 ++- src/bonsai/bonsai/bim/module/profile/prop.py | 24 +++--- src/bonsai/bonsai/bim/module/profile/ui.py | 7 +- .../bonsai/bim/module/project/__init__.py | 3 +- src/bonsai/bonsai/bim/module/project/data.py | 14 ++-- .../bonsai/bim/module/project/decorator.py | 14 ++-- src/bonsai/bonsai/bim/module/project/gizmo.py | 3 +- .../bonsai/bim/module/project/operator.py | 76 +++++++++++-------- src/bonsai/bonsai/bim/module/project/prop.py | 20 ++--- src/bonsai/bonsai/bim/module/project/ui.py | 26 ++++--- .../bonsai/bim/module/project/workspace.py | 4 +- src/bonsai/bonsai/bim/module/pset/__init__.py | 3 +- src/bonsai/bonsai/bim/module/pset/data.py | 4 +- src/bonsai/bonsai/bim/module/pset/operator.py | 22 +++--- src/bonsai/bonsai/bim/module/pset/prop.py | 36 ++++----- src/bonsai/bonsai/bim/module/pset/ui.py | 25 +++--- .../bim/module/pset_template/__init__.py | 3 +- .../bonsai/bim/module/pset_template/data.py | 6 +- .../bim/module/pset_template/operator.py | 4 +- .../bonsai/bim/module/pset_template/prop.py | 26 ++++--- .../bonsai/bim/module/pset_template/ui.py | 3 +- src/bonsai/bonsai/bim/module/qto/__init__.py | 3 +- .../bonsai/bim/module/qto/calculator.py | 13 ++-- src/bonsai/bonsai/bim/module/qto/data.py | 1 + src/bonsai/bonsai/bim/module/qto/helper.py | 8 +- src/bonsai/bonsai/bim/module/qto/operator.py | 7 +- src/bonsai/bonsai/bim/module/qto/prop.py | 31 ++++---- src/bonsai/bonsai/bim/module/qto/ui.py | 1 + .../bonsai/bim/module/resource/__init__.py | 3 +- src/bonsai/bonsai/bim/module/resource/data.py | 6 +- .../bonsai/bim/module/resource/operator.py | 5 +- src/bonsai/bonsai/bim/module/resource/prop.py | 28 +++---- src/bonsai/bonsai/bim/module/resource/ui.py | 11 ++- src/bonsai/bonsai/bim/module/root/__init__.py | 3 +- src/bonsai/bonsai/bim/module/root/data.py | 10 ++- src/bonsai/bonsai/bim/module/root/operator.py | 22 +++--- src/bonsai/bonsai/bim/module/root/prop.py | 20 ++--- src/bonsai/bonsai/bim/module/root/ui.py | 7 +- .../bonsai/bim/module/search/__init__.py | 3 +- src/bonsai/bonsai/bim/module/search/data.py | 6 +- .../bonsai/bim/module/search/operator.py | 28 +++---- src/bonsai/bonsai/bim/module/search/prop.py | 29 ++++--- src/bonsai/bonsai/bim/module/search/ui.py | 23 ++++-- .../bonsai/bim/module/sequence/__init__.py | 3 +- src/bonsai/bonsai/bim/module/sequence/data.py | 8 +- .../bonsai/bim/module/sequence/helper.py | 9 ++- .../bonsai/bim/module/sequence/operator.py | 14 ++-- src/bonsai/bonsai/bim/module/sequence/prop.py | 35 +++++---- src/bonsai/bonsai/bim/module/sequence/ui.py | 22 ++++-- .../bonsai/bim/module/spatial/__init__.py | 3 +- src/bonsai/bonsai/bim/module/spatial/data.py | 8 +- .../bonsai/bim/module/spatial/decorator.py | 9 ++- .../bonsai/bim/module/spatial/operator.py | 8 +- src/bonsai/bonsai/bim/module/spatial/prop.py | 36 ++++----- src/bonsai/bonsai/bim/module/spatial/ui.py | 13 +++- .../bonsai/bim/module/spatial/workspace.py | 8 +- .../bonsai/bim/module/structural/__init__.py | 3 +- .../bonsai/bim/module/structural/data.py | 3 +- .../bonsai/bim/module/structural/decorator.py | 14 ++-- .../module/structural/load_decoration_data.py | 14 ++-- .../bonsai/bim/module/structural/operator.py | 10 ++- .../bonsai/bim/module/structural/prop.py | 32 ++++---- .../bonsai/bim/module/structural/shader.py | 3 +- src/bonsai/bonsai/bim/module/structural/ui.py | 21 ++--- .../bonsai/bim/module/structural/workspace.py | 8 +- .../bonsai/bim/module/style/__init__.py | 3 +- src/bonsai/bonsai/bim/module/style/data.py | 6 +- .../bonsai/bim/module/style/operator.py | 14 ++-- src/bonsai/bonsai/bim/module/style/prop.py | 24 +++--- src/bonsai/bonsai/bim/module/style/ui.py | 9 ++- .../bonsai/bim/module/system/__init__.py | 3 +- src/bonsai/bonsai/bim/module/system/data.py | 4 +- .../bonsai/bim/module/system/decorator.py | 15 ++-- .../bonsai/bim/module/system/operator.py | 8 +- src/bonsai/bonsai/bim/module/system/prop.py | 26 ++++--- src/bonsai/bonsai/bim/module/system/ui.py | 28 +++++-- .../bonsai/bim/module/tester/__init__.py | 3 +- src/bonsai/bonsai/bim/module/tester/data.py | 3 +- .../bonsai/bim/module/tester/operator.py | 36 ++++----- src/bonsai/bonsai/bim/module/tester/prop.py | 17 +++-- src/bonsai/bonsai/bim/module/tester/ui.py | 4 +- src/bonsai/bonsai/bim/module/type/__init__.py | 3 +- src/bonsai/bonsai/bim/module/type/data.py | 3 +- src/bonsai/bonsai/bim/module/type/operator.py | 20 ++--- src/bonsai/bonsai/bim/module/type/prop.py | 22 +++--- src/bonsai/bonsai/bim/module/type/ui.py | 7 +- src/bonsai/bonsai/bim/module/unit/__init__.py | 3 +- src/bonsai/bonsai/bim/module/unit/data.py | 5 +- src/bonsai/bonsai/bim/module/unit/operator.py | 6 +- src/bonsai/bonsai/bim/module/unit/prop.py | 20 ++--- src/bonsai/bonsai/bim/module/unit/ui.py | 9 ++- src/bonsai/bonsai/bim/module/void/__init__.py | 3 +- src/bonsai/bonsai/bim/module/void/data.py | 6 +- src/bonsai/bonsai/bim/module/void/operator.py | 5 +- src/bonsai/bonsai/bim/module/void/prop.py | 12 ++- src/bonsai/bonsai/bim/module/void/ui.py | 7 +- src/bonsai/bonsai/bim/module/web/__init__.py | 3 +- src/bonsai/bonsai/bim/module/web/data.py | 6 +- src/bonsai/bonsai/bim/module/web/operator.py | 2 + src/bonsai/bonsai/bim/module/web/prop.py | 13 ++-- src/bonsai/bonsai/bim/module/web/ui.py | 1 + src/bonsai/bonsai/bim/operator.py | 43 ++++++----- src/bonsai/bonsai/bim/prop.py | 42 +++++----- src/bonsai/bonsai/bim/schema.py | 6 +- src/bonsai/bonsai/bim/ui.py | 36 ++++----- src/bonsai/bonsai/core/aggregate.py | 2 + src/bonsai/bonsai/core/attribute.py | 2 + src/bonsai/bonsai/core/brick.py | 2 + src/bonsai/bonsai/core/bsdd.py | 6 +- src/bonsai/bonsai/core/context.py | 2 + src/bonsai/bonsai/core/cost.py | 4 +- src/bonsai/bonsai/core/covering.py | 2 + src/bonsai/bonsai/core/debug.py | 2 + src/bonsai/bonsai/core/document.py | 2 + src/bonsai/bonsai/core/drawing.py | 4 +- src/bonsai/bonsai/core/geometry.py | 4 +- src/bonsai/bonsai/core/georeference.py | 2 + src/bonsai/bonsai/core/ifcgit.py | 6 +- src/bonsai/bonsai/core/library.py | 2 + src/bonsai/bonsai/core/material.py | 2 + src/bonsai/bonsai/core/misc.py | 2 + src/bonsai/bonsai/core/model.py | 9 ++- src/bonsai/bonsai/core/nest.py | 2 + src/bonsai/bonsai/core/owner.py | 6 +- src/bonsai/bonsai/core/patch.py | 2 + src/bonsai/bonsai/core/profile.py | 2 + src/bonsai/bonsai/core/project.py | 2 + src/bonsai/bonsai/core/pset.py | 4 +- src/bonsai/bonsai/core/qto.py | 2 + src/bonsai/bonsai/core/resource.py | 4 +- src/bonsai/bonsai/core/root.py | 3 + src/bonsai/bonsai/core/search.py | 2 + src/bonsai/bonsai/core/sequence.py | 2 + src/bonsai/bonsai/core/spatial.py | 2 + src/bonsai/bonsai/core/structural.py | 2 + src/bonsai/bonsai/core/style.py | 4 +- src/bonsai/bonsai/core/system.py | 2 + src/bonsai/bonsai/core/type.py | 5 +- src/bonsai/bonsai/core/unit.py | 2 + src/bonsai/bonsai/core/web.py | 2 + src/bonsai/bonsai/tool/__init__.py | 3 +- src/bonsai/bonsai/tool/aggregate.py | 14 +++- src/bonsai/bonsai/tool/attribute.py | 28 ++++--- src/bonsai/bonsai/tool/bcf.py | 22 +++--- src/bonsai/bonsai/tool/blender.py | 74 ++++++++++-------- src/bonsai/bonsai/tool/boundary.py | 14 +++- src/bonsai/bonsai/tool/brick.py | 23 +++--- src/bonsai/bonsai/tool/bsdd.py | 15 ++-- src/bonsai/bonsai/tool/cad.py | 16 ++-- src/bonsai/bonsai/tool/clash.py | 17 +++-- src/bonsai/bonsai/tool/classification.py | 10 ++- src/bonsai/bonsai/tool/collector.py | 6 +- src/bonsai/bonsai/tool/context.py | 13 ++-- src/bonsai/bonsai/tool/cost.py | 26 ++++--- src/bonsai/bonsai/tool/covering.py | 5 +- src/bonsai/bonsai/tool/debug.py | 15 ++-- src/bonsai/bonsai/tool/demo.py | 4 +- src/bonsai/bonsai/tool/document.py | 9 ++- src/bonsai/bonsai/tool/drawing.py | 68 +++++++++-------- src/bonsai/bonsai/tool/feature.py | 15 ++-- src/bonsai/bonsai/tool/geometry.py | 56 ++++++++------ src/bonsai/bonsai/tool/georeference.py | 13 ++-- src/bonsai/bonsai/tool/group.py | 10 ++- src/bonsai/bonsai/tool/ifc.py | 13 ++-- src/bonsai/bonsai/tool/ifcgit.py | 13 ++-- src/bonsai/bonsai/tool/layer.py | 5 +- src/bonsai/bonsai/tool/library.py | 7 +- src/bonsai/bonsai/tool/loader.py | 21 ++--- src/bonsai/bonsai/tool/material.py | 22 ++++-- src/bonsai/bonsai/tool/misc.py | 10 ++- src/bonsai/bonsai/tool/model.py | 63 +++++++++------ src/bonsai/bonsai/tool/nest.py | 7 +- src/bonsai/bonsai/tool/owner.py | 9 ++- src/bonsai/bonsai/tool/patch.py | 5 +- src/bonsai/bonsai/tool/polyline.py | 16 ++-- src/bonsai/bonsai/tool/profile.py | 9 ++- src/bonsai/bonsai/tool/project.py | 19 +++-- src/bonsai/bonsai/tool/pset.py | 16 ++-- src/bonsai/bonsai/tool/pset_template.py | 9 ++- src/bonsai/bonsai/tool/qto.py | 13 ++-- src/bonsai/bonsai/tool/raycast.py | 10 ++- src/bonsai/bonsai/tool/resource.py | 26 ++++--- src/bonsai/bonsai/tool/root.py | 11 ++- src/bonsai/bonsai/tool/search.py | 17 +++-- src/bonsai/bonsai/tool/sequence.py | 45 ++++++----- src/bonsai/bonsai/tool/snap.py | 15 ++-- src/bonsai/bonsai/tool/spatial.py | 37 ++++----- src/bonsai/bonsai/tool/structural.py | 17 ++++- src/bonsai/bonsai/tool/style.py | 19 +++-- src/bonsai/bonsai/tool/surveyor.py | 5 +- src/bonsai/bonsai/tool/system.py | 15 ++-- src/bonsai/bonsai/tool/type.py | 7 +- src/bonsai/bonsai/tool/unit.py | 9 ++- src/bonsai/bonsai/tool/web.py | 53 +++++++------ src/bonsai/pyproject.toml | 5 -- src/bonsai/runpytest.py | 1 + src/bonsai/scripts/bonsai_translations.py | 12 +-- .../uniclass_classification.py | 1 + src/bonsai/scripts/classifications/vbis.py | 5 +- .../classifications/xml_classification.py | 3 +- .../scripts/dev_environment_vscode_config.py | 6 +- src/bonsai/scripts/dxf2ifc.py | 2 +- src/bonsai/scripts/extract.py | 8 +- src/bonsai/scripts/gbxml.py | 7 +- src/bonsai/scripts/generate_au_library.py | 1 + src/bonsai/scripts/generate_demo_library.py | 4 +- .../scripts/generate_entourage_library.py | 5 +- .../scripts/generate_furniture_library.py | 13 ++-- .../scripts/generate_landscape_library.py | 19 ++--- src/bonsai/scripts/generate_png_icons.py | 2 +- src/bonsai/scripts/generate_site_library.py | 1 + .../generate_steel_profiles_library.py | 7 +- src/bonsai/scripts/generate_util_type_json.py | 1 + .../scripts/geonodes_modifier_prototype.py | 9 ++- src/bonsai/scripts/getIfcElements.py | 2 +- src/bonsai/scripts/get_all_qtos.py | 7 +- src/bonsai/scripts/get_description.py | 5 +- src/bonsai/scripts/get_volume_by_material.py | 5 +- src/bonsai/scripts/headless_import.py | 1 + src/bonsai/scripts/obj2ifc-meshlab.py | 8 +- src/bonsai/scripts/obj2ifc.py | 8 +- src/bonsai/scripts/replace_drawing_path.py | 10 +-- src/bonsai/scripts/reregister_bonsai.py | 1 + src/bonsai/scripts/setup_pytest.py | 4 +- .../scripts/standalone_blender_import.py | 3 +- src/bonsai/scripts/standalone_drawer.py | 9 ++- .../scripts/standalone_section_shader.py | 14 ++-- src/bonsai/scripts/waldo.py | 15 ++-- src/bonsai/test/bim/bootstrap.py | 12 +-- .../module/drawing/test_segment_clipping.py | 2 +- src/bonsai/test/bim/stub.py | 2 +- src/bonsai/test/bim/test_feature.py | 37 ++++----- src/bonsai/test/core/bootstrap.py | 6 +- src/bonsai/test/core/test_aggregate.py | 2 +- src/bonsai/test/core/test_attribute.py | 2 +- src/bonsai/test/core/test_brick.py | 2 +- src/bonsai/test/core/test_context.py | 2 +- src/bonsai/test/core/test_document.py | 2 +- src/bonsai/test/core/test_drawing.py | 2 +- src/bonsai/test/core/test_geometry.py | 2 +- src/bonsai/test/core/test_georeference.py | 2 +- src/bonsai/test/core/test_material.py | 2 +- src/bonsai/test/core/test_misc.py | 2 +- src/bonsai/test/core/test_nest.py | 2 +- src/bonsai/test/core/test_owner.py | 2 +- src/bonsai/test/core/test_project.py | 2 +- src/bonsai/test/core/test_root.py | 2 +- src/bonsai/test/core/test_spatial.py | 2 +- src/bonsai/test/core/test_style.py | 2 +- src/bonsai/test/core/test_system.py | 2 +- src/bonsai/test/core/test_type.py | 2 +- src/bonsai/test/tool/test_aggregate.py | 3 +- src/bonsai/test/tool/test_blender.py | 8 +- src/bonsai/test/tool/test_brick.py | 10 ++- src/bonsai/test/tool/test_cad.py | 5 +- src/bonsai/test/tool/test_classification.py | 4 +- src/bonsai/test/tool/test_collector.py | 1 + src/bonsai/test/tool/test_context.py | 3 +- src/bonsai/test/tool/test_debug.py | 8 +- src/bonsai/test/tool/test_document.py | 6 +- src/bonsai/test/tool/test_drawing.py | 17 +++-- src/bonsai/test/tool/test_geometry.py | 12 +-- src/bonsai/test/tool/test_georeference.py | 8 +- src/bonsai/test/tool/test_ifc.py | 12 +-- src/bonsai/test/tool/test_library.py | 3 +- src/bonsai/test/tool/test_loader.py | 18 +++-- src/bonsai/test/tool/test_material.py | 3 +- src/bonsai/test/tool/test_misc.py | 8 +- src/bonsai/test/tool/test_model.py | 12 +-- src/bonsai/test/tool/test_nest.py | 3 +- src/bonsai/test/tool/test_owner.py | 8 +- src/bonsai/test/tool/test_patch.py | 4 +- src/bonsai/test/tool/test_polyline.py | 3 +- src/bonsai/test/tool/test_project.py | 12 +-- src/bonsai/test/tool/test_pset.py | 1 + src/bonsai/test/tool/test_pset_template.py | 1 + src/bonsai/test/tool/test_qto.py | 9 ++- src/bonsai/test/tool/test_root.py | 3 +- src/bonsai/test/tool/test_sequence.py | 4 +- src/bonsai/test/tool/test_spatial.py | 5 +- src/bonsai/test/tool/test_style.py | 6 +- src/bonsai/test/tool/test_surveyor.py | 4 +- src/bonsai/test/tool/test_system.py | 10 ++- src/bonsai/test/tool/test_type.py | 3 +- src/bonsai/test/tool/test_unit.py | 3 +- src/ifc4d/__main__.py | 1 + src/ifc4d/ifc4d/p62ifc.py | 1 - src/ifc4d/ifc4d/pp2ifc.py | 1 - src/ifc5d/test/test_csv2ifc.py | 5 +- .../alignment/test_create_as_offset_curve.py | 1 - .../alignment/test_create_layout_segment.py | 1 - src/ifcopenshell-python/test/test_stream.py | 1 - .../test/util/test_file.py | 1 - .../nodes/ifc/shape_builder/extrude.py | 5 +- .../nodes/ifc/shape_builder/mesh.py | 3 +- .../nodes/ifc/shape_builder/polyline.py | 3 +- .../nodes/ifc/shape_builder/rectangle.py | 5 +- .../nodes/ifc/shape_builder/representation.py | 5 +- .../nodes/ifc/shape_builder/shape_output.py | 3 +- .../nodes/ifc/shape_builder/test.py | 3 +- src/ifctester/test/test_facet.py | 1 + src/ifctester/webapp/public/worker/api.py | 3 +- 524 files changed, 3338 insertions(+), 2344 deletions(-) diff --git a/src/bcf/bcf/agnostic/topic.py b/src/bcf/bcf/agnostic/topic.py index 1e77f40e97..a25f4af482 100644 --- a/src/bcf/bcf/agnostic/topic.py +++ b/src/bcf/bcf/agnostic/topic.py @@ -2,6 +2,8 @@ import tempfile from pathlib import Path from typing import Optional, Union +from typing_extensions import assert_never + import bcf.agnostic.model as mdl import bcf.v2.bcfxml import bcf.v2.model @@ -9,7 +11,6 @@ import bcf.v2.topic import bcf.v3.bcfxml import bcf.v3.model import bcf.v3.topic -from typing_extensions import assert_never TopicHandler = Union[bcf.v2.topic.TopicHandler, bcf.v3.topic.TopicHandler] diff --git a/src/bcf/tests/conftest.py b/src/bcf/tests/conftest.py index f19792122a..ea1b2aee8b 100644 --- a/src/bcf/tests/conftest.py +++ b/src/bcf/tests/conftest.py @@ -1,4 +1,5 @@ import pytest + from bcf.xml_parser import XmlParserSerializer diff --git a/src/bcf/tests/v2/test_bcf_xml.py b/src/bcf/tests/v2/test_bcf_xml.py index 1b5128e96f..fed1428e73 100644 --- a/src/bcf/tests/v2/test_bcf_xml.py +++ b/src/bcf/tests/v2/test_bcf_xml.py @@ -4,8 +4,9 @@ import uuid from pathlib import Path from tempfile import TemporaryDirectory -import bcf.v2.model as mdl import pytest + +import bcf.v2.model as mdl from bcf.v2.bcfxml import BcfXml from bcf.v2.topic import TopicHandler from bcf.v2.visinfo import ( diff --git a/src/bcf/tests/v2/test_example_files.py b/src/bcf/tests/v2/test_example_files.py index 6d964bd0e9..3821569c28 100644 --- a/src/bcf/tests/v2/test_example_files.py +++ b/src/bcf/tests/v2/test_example_files.py @@ -3,10 +3,11 @@ import os import zipfile from pathlib import Path +from xsdata.models.datatype import XmlDateTime + import bcf.v2.model as mdl from bcf.v2.bcfxml import BcfXml from bcf.v2.topic import TopicHandler -from xsdata.models.datatype import XmlDateTime def test_maximum_information() -> None: diff --git a/src/bcf/tests/v2/test_ifcclash_api.py b/src/bcf/tests/v2/test_ifcclash_api.py index 34c3a493e4..14945e8392 100644 --- a/src/bcf/tests/v2/test_ifcclash_api.py +++ b/src/bcf/tests/v2/test_ifcclash_api.py @@ -1,5 +1,6 @@ import numpy as np import pytest + from bcf.v2.bcfxml import BcfXml diff --git a/src/bcf/tests/v3/test_bcf_xml.py b/src/bcf/tests/v3/test_bcf_xml.py index ae658ca55f..50664b98c7 100644 --- a/src/bcf/tests/v3/test_bcf_xml.py +++ b/src/bcf/tests/v3/test_bcf_xml.py @@ -4,8 +4,9 @@ import uuid from pathlib import Path from tempfile import TemporaryDirectory -import bcf.v3.model as mdl import pytest + +import bcf.v3.model as mdl from bcf.v3.bcfxml import BcfXml from bcf.v3.topic import TopicHandler from bcf.v3.visinfo import ( diff --git a/src/bcf/tests/v3/test_example_files.py b/src/bcf/tests/v3/test_example_files.py index c25a3f3f7e..3f141afda6 100644 --- a/src/bcf/tests/v3/test_example_files.py +++ b/src/bcf/tests/v3/test_example_files.py @@ -2,9 +2,10 @@ import os import zipfile from pathlib import Path +from xsdata.models.datatype import XmlDateTime + import bcf.v3.model as mdl from bcf.v3.bcfxml import BcfXml -from xsdata.models.datatype import XmlDateTime def test_doc_ref_internal() -> None: diff --git a/src/bcf/tests/v3/test_ifcclash_api.py b/src/bcf/tests/v3/test_ifcclash_api.py index faea9b6a1a..d470f1ffb8 100644 --- a/src/bcf/tests/v3/test_ifcclash_api.py +++ b/src/bcf/tests/v3/test_ifcclash_api.py @@ -1,5 +1,6 @@ import numpy as np import pytest + from bcf.v3.bcfxml import BcfXml diff --git a/src/bonsai/bonsai/__init__.py b/src/bonsai/bonsai/__init__.py index ab5d46607b..b4083b0eef 100644 --- a/src/bonsai/bonsai/__init__.py +++ b/src/bonsai/bonsai/__init__.py @@ -32,17 +32,16 @@ if IN_BLENDER: # and then as a bonsai-package. IN_PACKAGE = __package__ == "bonsai" -import re import platform -import traceback -import webbrowser -import uuid +import re import shutil +import traceback +import uuid +import webbrowser from collections import deque -from pathlib import Path -from typing import Union, Any from collections.abc import Generator - +from pathlib import Path +from typing import Any, Union last_commit_hash = "8888888" last_commit_date = "9999999" diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index a7dc729881..4302739aab 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import importlib import os +from collections.abc import Callable +from typing import Union + import bpy import bpy.utils.previews -import importlib -from bpy_extras.io_utils import ImportHelper, ExportHelper -from . import handler, ui, prop, operator -from typing import Union -from collections.abc import Callable +from bpy_extras.io_utils import ExportHelper, ImportHelper + +from . import handler, operator, prop, ui try: from bonsai.translations import translations_dict diff --git a/src/bonsai/bonsai/bim/data/webui/sioserver.py b/src/bonsai/bonsai/bim/data/webui/sioserver.py index 4701268232..91c3c4e8eb 100644 --- a/src/bonsai/bonsai/bim/data/webui/sioserver.py +++ b/src/bonsai/bonsai/bim/data/webui/sioserver.py @@ -1,6 +1,5 @@ -import sys import os - +import sys bonsai_lib_path = os.environ.get("BONSAI_LIB_PATH") bonsai_version = os.environ.get("BONSAI_VERSION") @@ -9,13 +8,14 @@ if bonsai_lib_path: sys.path.insert(0, bonsai_lib_path) import argparse -from aiohttp import web -import socketio -import pystache -import json import base64 +import json import xml.etree.ElementTree as ET +import pystache +import socketio +from aiohttp import web + sio_port = 8080 # default port sio = socketio.AsyncServer(cors_allowed_origins="*", async_mode="aiohttp", max_http_buffer_size=10000000) diff --git a/src/bonsai/bonsai/bim/export_ifc.py b/src/bonsai/bonsai/bim/export_ifc.py index 6134786124..7295c72e34 100644 --- a/src/bonsai/bonsai/bim/export_ifc.py +++ b/src/bonsai/bonsai/bim/export_ifc.py @@ -17,27 +17,30 @@ # along with Bonsai. If not, see . from __future__ import annotations -import os -import bpy -import json + import datetime -import zipfile +import json +import os import tempfile +import zipfile +from logging import Logger +from math import radians +from typing import Union + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.unit -import bonsai.tool as tool -import bonsai.core.geometry +from mathutils import Vector + import bonsai.core.aggregate +import bonsai.core.geometry import bonsai.core.spatial import bonsai.core.style +import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from mathutils import Vector -from typing import Union -from logging import Logger -from math import radians class IfcExporter: diff --git a/src/bonsai/bonsai/bim/handler.py b/src/bonsai/bonsai/bim/handler.py index c7cb10cdde..231b44c671 100644 --- a/src/bonsai/bonsai/bim/handler.py +++ b/src/bonsai/bonsai/bim/handler.py @@ -17,26 +17,31 @@ # along with Bonsai. If not, see . import os +import weakref +from collections.abc import Callable +from math import cos +from typing import Union + import bpy +import ifcopenshell.api.owner.settings import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.unit -import ifcopenshell.api.owner.settings +from bpy.app.handlers import persistent +from mathutils import Vector + import bonsai.bim import bonsai.tool as tool -import weakref -from bpy.app.handlers import persistent from bonsai.bim.ifc import IfcStore -from bonsai.bim.module.model.data import AuthoringData from bonsai.bim.module.aggregate.decorator import AggregateDecorator from bonsai.bim.module.georeference.decorator import GeoreferenceDecorator -from bonsai.bim.module.model.decorator import WallAxisDecorator, SlabDirectionDecorator, BoundingBoxDecorator +from bonsai.bim.module.model.data import AuthoringData +from bonsai.bim.module.model.decorator import ( + BoundingBoxDecorator, + SlabDirectionDecorator, + WallAxisDecorator, +) from bonsai.bim.module.nest.decorator import NestDecorator -from mathutils import Vector -from math import cos -from typing import Union -from collections.abc import Callable - cwd = os.path.dirname(os.path.realpath(__file__)) global_subscription_owner = object() @@ -202,8 +207,8 @@ def refresh_ui_data(): Note that calling non-ifc-operators by itself doesn't refresh the UI data and it need to be refreshed manually if needed. """ - from bonsai.bim import modules import bonsai.bim.ui + from bonsai.bim import modules bonsai.bim.ui.refresh() diff --git a/src/bonsai/bonsai/bim/helper.py b/src/bonsai/bonsai/bim/helper.py index e81c483216..9267134988 100644 --- a/src/bonsai/bonsai/bim/helper.py +++ b/src/bonsai/bonsai/bim/helper.py @@ -17,24 +17,31 @@ # along with Bonsai. If not, see . from __future__ import annotations + import importlib -import bpy import json +from collections.abc import Callable, Iterable, Sequence +from types import EllipsisType +from typing import TYPE_CHECKING, Any, Optional, Union + +import bpy import ifcopenshell import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.attribute import ifcopenshell.util.element import ifcopenshell.util.unit -from ifcopenshell.util.doc import get_attribute_doc, get_predefined_type_doc, get_property_doc +from ifcopenshell.util.doc import ( + get_attribute_doc, + get_predefined_type_doc, + get_property_doc, +) + import bonsai.tool as tool -from types import EllipsisType -from typing import Optional, Any, Union, TYPE_CHECKING -from collections.abc import Callable, Iterable, Sequence if TYPE_CHECKING: import bonsai.bim.prop - from bonsai.bim.prop import Attribute from bonsai.bim.module.search.prop import BIMFilterGroup + from bonsai.bim.prop import Attribute # ImportCallback return values: # - None - property should be imported by default workflow diff --git a/src/bonsai/bonsai/bim/ifc.py b/src/bonsai/bonsai/bim/ifc.py index 881de8adf9..f7d23e1dbe 100644 --- a/src/bonsai/bonsai/bim/ifc.py +++ b/src/bonsai/bonsai/bim/ifc.py @@ -17,26 +17,28 @@ # along with Bonsai. If not, see . from __future__ import annotations -import os -import bpy -import uuid -import shutil + import hashlib -import zipfile +import os +import shutil import tempfile import traceback +import uuid +import zipfile +from collections.abc import Callable +from pathlib import Path +from typing import Literal, NotRequired, Optional, TypedDict, Union + +import bpy import ifcopenshell import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper +from ifcopenshell.file import UndoSystemError + import bonsai import bonsai.bim.handler import bonsai.tool as tool -from ifcopenshell.file import UndoSystemError -from pathlib import Path from bonsai.tool.brick import BrickStore -from typing import Union, Optional, TypedDict, NotRequired, Literal -from collections.abc import Callable - IFC_CONNECTED_TYPE = Union[bpy.types.Material, bpy.types.Object] diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index d8ecfd6894..6e04800dd4 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -17,33 +17,36 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import time + import json -import ifcpatch import logging -import traceback -import mathutils -import numpy as np -import numpy.typing as npt import multiprocessing +import time +import traceback +from collections.abc import Iterable +from typing import Any, Literal, Optional, Union + +import bpy import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W -import ifcopenshell.util.unit import ifcopenshell.util.element import ifcopenshell.util.geolocation import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape -import bonsai.tool as tool -from bonsai.bim.ifc import IfcStore, IFC_CONNECTED_TYPE -from bonsai.tool.loader import OBJECT_DATA_TYPE -from typing import Union, Optional, Any, Literal -from collections.abc import Iterable +import ifcopenshell.util.unit +import ifcpatch +import mathutils +import numpy as np +import numpy.typing as npt from ifcopenshell.util.shape import MatrixType +import bonsai.tool as tool +from bonsai.bim.ifc import IFC_CONNECTED_TYPE, IfcStore +from bonsai.tool.loader import OBJECT_DATA_TYPE + class MaterialCreator: mesh: bpy.types.Mesh diff --git a/src/bonsai/bonsai/bim/module/aggregate/__init__.py b/src/bonsai/bonsai/bim/module/aggregate/__init__.py index daafdf201c..9f081ecaec 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/__init__.py +++ b/src/bonsai/bonsai/bim/module/aggregate/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.BIM_OT_add_aggregate, diff --git a/src/bonsai/bonsai/bim/module/aggregate/data.py b/src/bonsai/bonsai/bim/module/aggregate/data.py index ad58f6defb..22c7505bf3 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/data.py +++ b/src/bonsai/bonsai/bim/module/aggregate/data.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bonsai.tool as tool -import ifcopenshell.util.element from typing import Union +import bpy +import ifcopenshell.util.element + +import bonsai.tool as tool + def refresh(): AggregateData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/aggregate/decorator.py b/src/bonsai/bonsai/bim/module/aggregate/decorator.py index 877e7f41e0..080f965bf8 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/decorator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/decorator.py @@ -21,11 +21,12 @@ import bpy import gpu import ifcopenshell import ifcopenshell.util.element -import bonsai.tool as tool from bpy.types import SpaceView3D from bpy_extras import view3d_utils from gpu_extras.batch import batch_for_shader from mathutils import Vector + +import bonsai.tool as tool from bonsai.bim.module.geometry.decorator import ItemDecorator diff --git a/src/bonsai/bonsai/bim/module/aggregate/operator.py b/src/bonsai/bonsai/bim/module/aggregate/operator.py index 32d06dd94e..be6272c3ab 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/operator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/operator.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell import ifcopenshell.api @@ -23,10 +25,10 @@ import ifcopenshell.api.group import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.util.element -import bonsai.tool as tool + import bonsai.core.aggregate as core import bonsai.core.spatial -from typing import TYPE_CHECKING +import bonsai.tool as tool class BIM_OT_aggregate_assign_object(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/aggregate/prop.py b/src/bonsai/bonsai/bim/module/aggregate/prop.py index 03a3d0f533..241663882f 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/prop.py +++ b/src/bonsai/bonsai/bim/module/aggregate/prop.py @@ -16,24 +16,29 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy import ifcopenshell.util.element -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.spatial.data import SpatialData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from bonsai.bim.module.aggregate.decorator import AggregateDecorator, AggregateModeDecorator -from typing import TYPE_CHECKING, Union +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.aggregate.decorator import ( + AggregateDecorator, + AggregateModeDecorator, +) +from bonsai.bim.module.spatial.data import SpatialData +from bonsai.bim.prop import Attribute, StrProperty def can_aggregate(relating_obj: bpy.types.Object, related_obj: bpy.types.Object) -> bool: diff --git a/src/bonsai/bonsai/bim/module/aggregate/ui.py b/src/bonsai/bonsai/bim/module/aggregate/ui.py index e9c596f9ac..d693843401 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/ui.py +++ b/src/bonsai/bonsai/bim/module/aggregate/ui.py @@ -17,10 +17,11 @@ # along with Bonsai. If not, see . from bpy.types import Panel + +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore from bonsai.bim.module.aggregate.data import AggregateData from bonsai.bim.module.group.data import GroupsData, ObjectGroupsData -from bonsai.bim.ifc import IfcStore -import bonsai.tool as tool class BIM_PT_aggregate(Panel): diff --git a/src/bonsai/bonsai/bim/module/alignment/operator.py b/src/bonsai/bonsai/bim/module/alignment/operator.py index 58c139b639..0705dcb1b9 100644 --- a/src/bonsai/bonsai/bim/module/alignment/operator.py +++ b/src/bonsai/bonsai/bim/module/alignment/operator.py @@ -18,25 +18,25 @@ # pyright: reportUnnecessaryTypeIgnoreComment=error +import calendar +import json import os - -import ifcopenshell.api.alignment +import time +from datetime import datetime import bpy -import json -import time -import calendar -import isodate -import bonsai.core.sequence as core -import bonsai.tool as tool -import bonsai.bim.module.sequence.helper as helper +import ifcopenshell.api.alignment import ifcopenshell.api.spatial import ifcopenshell.geom -import ifcopenshell.util.sequence import ifcopenshell.util.selector -from datetime import datetime -from dateutil import parser, relativedelta +import ifcopenshell.util.sequence +import isodate from bpy_extras.io_utils import ImportHelper +from dateutil import parser, relativedelta + +import bonsai.bim.module.sequence.helper as helper +import bonsai.core.sequence as core +import bonsai.tool as tool class ImportAlignmentCSV(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): diff --git a/src/bonsai/bonsai/bim/module/attribute/__init__.py b/src/bonsai/bonsai/bim/module/attribute/__init__.py index 7348a2cffb..1e1402d6f5 100644 --- a/src/bonsai/bonsai/bim/module/attribute/__init__.py +++ b/src/bonsai/bonsai/bim/module/attribute/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.EnableEditingAttributes, diff --git a/src/bonsai/bonsai/bim/module/attribute/data.py b/src/bonsai/bonsai/bim/module/attribute/data.py index 8c5000a128..32f6f895ce 100644 --- a/src/bonsai/bonsai/bim/module/attribute/data.py +++ b/src/bonsai/bonsai/bim/module/attribute/data.py @@ -18,6 +18,7 @@ import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/attribute/operator.py b/src/bonsai/bonsai/bim/module/attribute/operator.py index fb39efe91e..13901c0f81 100644 --- a/src/bonsai/bonsai/bim/module/attribute/operator.py +++ b/src/bonsai/bonsai/bim/module/attribute/operator.py @@ -16,22 +16,25 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json +from typing import TYPE_CHECKING, Any, Literal, Union + +import bpy import ifcopenshell import ifcopenshell.api.attribute import ifcopenshell.guid import ifcopenshell.util.element + import bonsai.bim.helper -import bonsai.tool as tool import bonsai.core.attribute as core import bonsai.core.spatial -from typing import TYPE_CHECKING, Any, Union, Literal +import bonsai.tool as tool if TYPE_CHECKING: - from bonsai.bim.prop import Attribute import bpy.stub_internal.rna_enums as rna_enums + from bonsai.bim.prop import Attribute + def get_objs_for_operation( operator_properties: "AttributesOperator", context: bpy.types.Context diff --git a/src/bonsai/bonsai/bim/module/attribute/prop.py b/src/bonsai/bonsai/bim/module/attribute/prop.py index 97246cf7ce..98ffb00c5c 100644 --- a/src/bonsai/bonsai/bim/module/attribute/prop.py +++ b/src/bonsai/bonsai/bim/module/attribute/prop.py @@ -16,21 +16,23 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Union +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.prop import Attribute, StrProperty class BIMAttributeProperties(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/attribute/ui.py b/src/bonsai/bonsai/bim/module/attribute/ui.py index 0665c84dd5..84813e8d1e 100644 --- a/src/bonsai/bonsai/bim/module/attribute/ui.py +++ b/src/bonsai/bonsai/bim/module/attribute/ui.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bonsai.bim.helper + +from typing import TYPE_CHECKING + import bpy.types from bpy.types import Panel -from bonsai.bim.module.attribute.data import AttributesData + +import bonsai.bim.helper import bonsai.tool as tool -from typing import TYPE_CHECKING +from bonsai.bim.module.attribute.data import AttributesData if TYPE_CHECKING: from bonsai.bim.module.attribute.prop import BIMExplorerProperties, ExplorerEntity diff --git a/src/bonsai/bonsai/bim/module/augin/__init__.py b/src/bonsai/bonsai/bim/module/augin/__init__.py index 8b8009c4e6..bff5e9449d 100644 --- a/src/bonsai/bonsai/bim/module/augin/__init__.py +++ b/src/bonsai/bonsai/bim/module/augin/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( prop.AuginProperties, diff --git a/src/bonsai/bonsai/bim/module/augin/operator.py b/src/bonsai/bonsai/bim/module/augin/operator.py index b578beb554..10d802569a 100644 --- a/src/bonsai/bonsai/bim/module/augin/operator.py +++ b/src/bonsai/bonsai/bim/module/augin/operator.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import datetime import os -import bpy -import string import random import shutil -import requests +import string import tempfile -import datetime + +import bpy +import requests + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/augin/ui.py b/src/bonsai/bonsai/bim/module/augin/ui.py index 65ca3ac7f9..dfd6e49730 100644 --- a/src/bonsai/bonsai/bim/module/augin/ui.py +++ b/src/bonsai/bonsai/bim/module/augin/ui.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy.types + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/bcf/__init__.py b/src/bonsai/bonsai/bim/module/bcf/__init__.py index e7153974f4..000f343727 100644 --- a/src/bonsai/bonsai/bim/module/bcf/__init__.py +++ b/src/bonsai/bonsai/bim/module/bcf/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ActivateBcfViewpoint, diff --git a/src/bonsai/bonsai/bim/module/bcf/bcfstore.py b/src/bonsai/bonsai/bim/module/bcf/bcfstore.py index 13be3faf1d..a1fec8aa6e 100644 --- a/src/bonsai/bonsai/bim/module/bcf/bcfstore.py +++ b/src/bonsai/bonsai/bim/module/bcf/bcfstore.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . import os -import bpy +from typing import Union + import bcf import bcf.bcfxml import bcf.v2.bcfxml +import bpy + import bonsai.tool as tool -from typing import Union class BcfStore: diff --git a/src/bonsai/bonsai/bim/module/bcf/operator.py b/src/bonsai/bonsai/bim/module/bcf/operator.py index 1c6137e93b..b0a6f1f699 100644 --- a/src/bonsai/bonsai/bim/module/bcf/operator.py +++ b/src/bonsai/bonsai/bim/module/bcf/operator.py @@ -17,6 +17,20 @@ # along with Bonsai. If not, see . import os +import tempfile +import uuid +import webbrowser +from math import atan, cos, degrees, radians, sin, tan +from pathlib import Path + +import bcf +import bcf.agnostic.topic +import bcf.agnostic.visinfo +import bcf.bcfxml +import bcf.v2.bcfxml +import bcf.v2.model +import bcf.v2.topic +import bcf.v2.visinfo import bcf.v3 import bcf.v3.bcfxml import bcf.v3.document @@ -24,30 +38,18 @@ import bcf.v3.model import bcf.v3.topic import bcf.v3.visinfo import bpy -import bcf -import bcf.bcfxml -import bcf.v2.bcfxml -import bcf.v2.model -import bcf.v2.topic -import bcf.v2.visinfo -import bcf.agnostic.topic -import bcf.agnostic.visinfo -import uuid -import numpy as np -import tempfile -import webbrowser import ifcopenshell import ifcopenshell.util.geolocation import ifcopenshell.util.unit -import bonsai.tool as tool -import bonsai.bim.module.bcf.prop as bcf_prop -import bonsai.bim.module.bcf.bcfstore as bcfstore -from bpy_extras.io_utils import ImportHelper, ExportHelper -from pathlib import Path -from math import radians, degrees, atan, tan, cos, sin -from mathutils import Vector, Matrix, Euler, geometry +import numpy as np +from bpy_extras.io_utils import ExportHelper, ImportHelper +from mathutils import Euler, Matrix, Vector, geometry from xsdata.models.datatype import XmlDateTime +import bonsai.bim.module.bcf.bcfstore as bcfstore +import bonsai.bim.module.bcf.prop as bcf_prop +import bonsai.tool as tool + class NewBcfProject(bpy.types.Operator): bl_idname = "bim.new_bcf_project" diff --git a/src/bonsai/bonsai/bim/module/bcf/prop.py b/src/bonsai/bonsai/bim/module/bcf/prop.py index 6a01115821..b720a2ff74 100644 --- a/src/bonsai/bonsai/bim/module/bcf/prop.py +++ b/src/bonsai/bonsai/bim/module/bcf/prop.py @@ -16,24 +16,26 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bonsai.tool as tool -from . import bcfstore -from bonsai.bim.prop import StrProperty -from bpy.types import PropertyGroup -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) -from bcf.agnostic.extensions import get_extensions_attributes from typing import TYPE_CHECKING, Union +import bpy +from bcf.agnostic.extensions import get_extensions_attributes +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + PointerProperty, + StringProperty, +) +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.prop import StrProperty + +from . import bcfstore bcfviewpoints_enum = None diff --git a/src/bonsai/bonsai/bim/module/bcf/ui.py b/src/bonsai/bonsai/bim/module/bcf/ui.py index d0d25ecd10..e3478f63cf 100644 --- a/src/bonsai/bonsai/bim/module/bcf/ui.py +++ b/src/bonsai/bonsai/bim/module/bcf/ui.py @@ -17,15 +17,19 @@ # along with Bonsai. If not, see . from __future__ import annotations + import os -import bpy -import bonsai.tool as tool -from . import bcfstore -from bpy.types import Panel from typing import TYPE_CHECKING +import bpy +from bpy.types import Panel + +import bonsai.tool as tool + +from . import bcfstore + if TYPE_CHECKING: - from bonsai.bim.module.bcf.prop import BcfTopic, BCFProperties + from bonsai.bim.module.bcf.prop import BCFProperties, BcfTopic class BIM_PT_bcf(Panel): diff --git a/src/bonsai/bonsai/bim/module/boundary/__init__.py b/src/bonsai/bonsai/bim/module/boundary/__init__.py index cf2f78a7da..fe11440adc 100644 --- a/src/bonsai/bonsai/bim/module/boundary/__init__.py +++ b/src/bonsai/bonsai/bim/module/boundary/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, operator, prop + +from . import operator, prop, ui classes = ( operator.AddBoundary, diff --git a/src/bonsai/bonsai/bim/module/boundary/data.py b/src/bonsai/bonsai/bim/module/boundary/data.py index e7f82caf4c..58ccadc713 100644 --- a/src/bonsai/bonsai/bim/module/boundary/data.py +++ b/src/bonsai/bonsai/bim/module/boundary/data.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/boundary/decorator.py b/src/bonsai/bonsai/bim/module/boundary/decorator.py index c7875c94bf..1f5859824e 100644 --- a/src/bonsai/bonsai/bim/module/boundary/decorator.py +++ b/src/bonsai/bonsai/bim/module/boundary/decorator.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import gpu import bmesh -import bonsai.tool as tool +import gpu from bpy.types import SpaceView3D -from mathutils import Vector from gpu_extras.batch import batch_for_shader +from mathutils import Vector + +import bonsai.tool as tool class BoundaryDecorator: diff --git a/src/bonsai/bonsai/bim/module/boundary/operator.py b/src/bonsai/bonsai/bim/module/boundary/operator.py index 89b4bf6e72..4b26a0a4d9 100644 --- a/src/bonsai/bonsai/bim/module/boundary/operator.py +++ b/src/bonsai/bonsai/bim/module/boundary/operator.py @@ -16,34 +16,36 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bmesh import logging -import shapely -import shapely.ops -import mathutils -import numpy as np import multiprocessing +from math import acos, degrees, inf, pi, radians +from typing import Optional, Union + +import bmesh +import bpy import ifcopenshell.api import ifcopenshell.api.boundary import ifcopenshell.api.root import ifcopenshell.geom -import ifcopenshell.util.unit -import ifcopenshell.util.shape import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation -import bonsai.tool as tool -import bonsai.bim.import_ifc as import_ifc -from math import pi, inf, degrees, acos, radians -from mathutils import Vector, Matrix -from bonsai.bim.ifc import IfcStore -from bonsai.bim.module.model.decorator import ProfileDecorator -from bonsai.bim.module.boundary.decorator import BoundaryDecorator +import ifcopenshell.util.shape +import ifcopenshell.util.unit +import mathutils +import numpy as np +import shapely +import shapely.ops from ifcopenshell.util.shape_builder import ShapeBuilder +from mathutils import Matrix, Vector + +import bonsai.bim.import_ifc as import_ifc import bonsai.core import bonsai.core.geometry -from typing import Union, Optional +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore +from bonsai.bim.module.boundary.decorator import BoundaryDecorator +from bonsai.bim.module.model.decorator import ProfileDecorator def disable_editing_boundary_geometry(context): diff --git a/src/bonsai/bonsai/bim/module/boundary/prop.py b/src/bonsai/bonsai/bim/module/boundary/prop.py index dc76de0e00..cd7e0b9de3 100644 --- a/src/bonsai/bonsai/bim/module/boundary/prop.py +++ b/src/bonsai/bonsai/bim/module/boundary/prop.py @@ -16,21 +16,23 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy -from bpy.types import PropertyGroup -from bonsai.bim.prop import ObjProperty from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup + import bonsai.tool as tool -from typing import TYPE_CHECKING, Union +from bonsai.bim.prop import ObjProperty def space_filter(self: "BIMObjectBoundaryProperties", object: bpy.types.Object) -> bool: diff --git a/src/bonsai/bonsai/bim/module/boundary/ui.py b/src/bonsai/bonsai/bim/module/boundary/ui.py index ba7592b34c..54694d752c 100644 --- a/src/bonsai/bonsai/bim/module/boundary/ui.py +++ b/src/bonsai/bonsai/bim/module/boundary/ui.py @@ -18,6 +18,7 @@ import bpy from bpy.types import Panel, UIList + import bonsai.tool as tool from bonsai.bim.module.boundary.data import SpaceBoundariesData diff --git a/src/bonsai/bonsai/bim/module/brick/__init__.py b/src/bonsai/bonsai/bim/module/brick/__init__.py index 6f5077f767..64d1bd3156 100644 --- a/src/bonsai/bonsai/bim/module/brick/__init__.py +++ b/src/bonsai/bonsai/bim/module/brick/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddBrick, diff --git a/src/bonsai/bonsai/bim/module/brick/data.py b/src/bonsai/bonsai/bim/module/brick/data.py index b7ac6f61e1..bae294d713 100644 --- a/src/bonsai/bonsai/bim/module/brick/data.py +++ b/src/bonsai/bonsai/bim/module/brick/data.py @@ -17,11 +17,12 @@ # along with Bonsai. If not, see . import bpy + import bonsai.tool as tool from bonsai.tool.brick import BrickStore try: - from rdflib import URIRef, BNode + from rdflib import BNode, URIRef except: # See #1860 print("Warning: brickschema not available.") diff --git a/src/bonsai/bonsai/bim/module/brick/operator.py b/src/bonsai/bonsai/bim/module/brick/operator.py index 94a9f9fe54..cb0a5f675f 100644 --- a/src/bonsai/bonsai/bim/module/brick/operator.py +++ b/src/bonsai/bonsai/bim/module/brick/operator.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . import os + import bpy import ifcopenshell.api -import bonsai.tool as tool -import bonsai.core.brick as core +from bpy_extras.io_utils import ExportHelper, ImportHelper + import bonsai.bim.handler -from bpy_extras.io_utils import ImportHelper, ExportHelper +import bonsai.core.brick as core +import bonsai.tool as tool from bonsai.bim.ifc import IfcStore from bonsai.tool.brick import BrickStore diff --git a/src/bonsai/bonsai/bim/module/brick/prop.py b/src/bonsai/bonsai/bim/module/brick/prop.py index 4b738a0c77..9fe6d78407 100644 --- a/src/bonsai/bonsai/bim/module/brick/prop.py +++ b/src/bonsai/bonsai/bim/module/brick/prop.py @@ -16,24 +16,26 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy -from bonsai.bim.module.brick.data import BrickschemaData, BrickschemaReferencesData -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup + import bonsai.core.brick as core import bonsai.tool.brick as tool +from bonsai.bim.module.brick.data import BrickschemaData, BrickschemaReferencesData +from bonsai.bim.prop import Attribute, StrProperty from bonsai.tool.brick import BrickStore -from typing import TYPE_CHECKING def update_active_brick_index(self, context): diff --git a/src/bonsai/bonsai/bim/module/brick/ui.py b/src/bonsai/bonsai/bim/module/brick/ui.py index a845b12e8e..aa910c272f 100644 --- a/src/bonsai/bonsai/bim/module/brick/ui.py +++ b/src/bonsai/bonsai/bim/module/brick/ui.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bonsai.tool as tool from bpy.types import Panel, UIList + +import bonsai.tool as tool from bonsai.bim.helper import prop_with_search from bonsai.bim.module.brick.data import BrickschemaData, BrickschemaReferencesData from bonsai.tool.brick import BrickStore diff --git a/src/bonsai/bonsai/bim/module/bsdd/__init__.py b/src/bonsai/bonsai/bim/module/bsdd/__init__.py index 607e2754c2..25d6f501f0 100644 --- a/src/bonsai/bonsai/bim/module/bsdd/__init__.py +++ b/src/bonsai/bonsai/bim/module/bsdd/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddBSDDProperties, diff --git a/src/bonsai/bonsai/bim/module/bsdd/data.py b/src/bonsai/bonsai/bim/module/bsdd/data.py index 7905ca75c1..6e916d3355 100644 --- a/src/bonsai/bonsai/bim/module/bsdd/data.py +++ b/src/bonsai/bonsai/bim/module/bsdd/data.py @@ -18,8 +18,9 @@ import bpy import ifcopenshell -import ifcopenshell.util.date import ifcopenshell.util.classification +import ifcopenshell.util.date + import bonsai.tool as tool from bonsai.bim.ifc import IfcStore diff --git a/src/bonsai/bonsai/bim/module/bsdd/operator.py b/src/bonsai/bonsai/bim/module/bsdd/operator.py index 3a6d46d1fa..d3f5533c1a 100644 --- a/src/bonsai/bonsai/bim/module/bsdd/operator.py +++ b/src/bonsai/bonsai/bim/module/bsdd/operator.py @@ -16,13 +16,15 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . import textwrap +from typing import Any + import bpy import bsdd -import bonsai.tool as tool import ifcopenshell.api.pset import ifcopenshell.util.element + +import bonsai.tool as tool from bonsai.core import bsdd as core -from typing import Any class LoadBSDDDictionaries(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/bsdd/prop.py b/src/bonsai/bonsai/bim/module/bsdd/prop.py index 3b427ba626..347cdab1b2 100644 --- a/src/bonsai/bonsai/bim/module/bsdd/prop.py +++ b/src/bonsai/bonsai/bim/module/bsdd/prop.py @@ -16,23 +16,25 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, Union + import bpy -import bonsai.tool as tool +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + PointerProperty, + StringProperty, +) from bpy.types import PropertyGroup + +import bonsai.tool as tool from bonsai.bim.module.bsdd.data import BSDDData from bonsai.bim.module.classification.data import ClassificationsData from bonsai.bim.prop import Attribute, StrProperty -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) -from typing import Union, TYPE_CHECKING, Literal def get_active_dictionary(self: "BIMBSDDProperties", context: object) -> tool.Blender.BLENDER_ENUM_ITEMS: diff --git a/src/bonsai/bonsai/bim/module/bsdd/ui.py b/src/bonsai/bonsai/bim/module/bsdd/ui.py index 39b2f9140e..c6966c01d8 100644 --- a/src/bonsai/bonsai/bim/module/bsdd/ui.py +++ b/src/bonsai/bonsai/bim/module/bsdd/ui.py @@ -17,14 +17,22 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import bonsai.tool as tool -from bonsai.bim.module.bsdd.data import BSDDData -from bpy.types import Panel, UIList + from typing import TYPE_CHECKING +import bpy +from bpy.types import Panel, UIList + +import bonsai.tool as tool +from bonsai.bim.module.bsdd.data import BSDDData + if TYPE_CHECKING: - from bonsai.bim.module.bsdd.prop import BIMBSDDProperties, BSDDDictionary, BSDDClassification, BSDDProperty + from bonsai.bim.module.bsdd.prop import ( + BIMBSDDProperties, + BSDDClassification, + BSDDDictionary, + BSDDProperty, + ) class BIM_PT_bsdd(Panel): diff --git a/src/bonsai/bonsai/bim/module/cad/__init__.py b/src/bonsai/bonsai/bim/module/cad/__init__.py index 601c4da1c3..6ddca2dd96 100644 --- a/src/bonsai/bonsai/bim/module/cad/__init__.py +++ b/src/bonsai/bonsai/bim/module/cad/__init__.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy + from . import operator, prop, workspace classes = ( diff --git a/src/bonsai/bonsai/bim/module/cad/operator.py b/src/bonsai/bonsai/bim/module/cad/operator.py index 06f026a577..857d757ca1 100644 --- a/src/bonsai/bonsai/bim/module/cad/operator.py +++ b/src/bonsai/bonsai/bim/module/cad/operator.py @@ -16,17 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import math -import bmesh -import mathutils -import bpy_extras -import bonsai.tool as tool -from mathutils import Vector, Matrix -from math import pi, radians, sin, cos, sqrt -import ifcopenshell.util.unit +from math import cos, pi, radians, sin, sqrt from typing import Union +import bmesh +import bpy +import bpy_extras +import ifcopenshell.util.unit +import mathutils +from mathutils import Matrix, Vector + +import bonsai.tool as tool messages = { "SHARED_VERTEX": "Shared Vertex, no intersection possible", diff --git a/src/bonsai/bonsai/bim/module/cad/prop.py b/src/bonsai/bonsai/bim/module/cad/prop.py index 7247408f00..db737b51dc 100644 --- a/src/bonsai/bonsai/bim/module/cad/prop.py +++ b/src/bonsai/bonsai/bim/module/cad/prop.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -from bonsai.bim.module.model.data import AuthoringData -from bpy.types import PropertyGroup from math import pi from typing import TYPE_CHECKING +import bpy +from bpy.types import PropertyGroup + +from bonsai.bim.module.model.data import AuthoringData + class BIMCadProperties(PropertyGroup): resolution: bpy.props.IntProperty(name="Arc Resolution", min=1, default=1) diff --git a/src/bonsai/bonsai/bim/module/cad/workspace.py b/src/bonsai/bonsai/bim/module/cad/workspace.py index 017f493682..b384463ac2 100644 --- a/src/bonsai/bonsai/bim/module/cad/workspace.py +++ b/src/bonsai/bonsai/bim/module/cad/workspace.py @@ -17,13 +17,15 @@ # along with Bonsai. If not, see . import os +from functools import partial + import bpy -import bonsai.tool as tool -import bonsai.bim.module.type.prop as type_prop import ifcopenshell.util.unit from bpy.types import WorkSpaceTool + +import bonsai.bim.module.type.prop as type_prop +import bonsai.tool as tool from bonsai.bim.module.model.data import AuthoringData, RailingData, RoofData -from functools import partial def load_custom_icons(): diff --git a/src/bonsai/bonsai/bim/module/clash/__init__.py b/src/bonsai/bonsai/bim/module/clash/__init__.py index a3ada1bc72..6bfabacfab 100644 --- a/src/bonsai/bonsai/bim/module/clash/__init__.py +++ b/src/bonsai/bonsai/bim/module/clash/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddClashSet, diff --git a/src/bonsai/bonsai/bim/module/clash/data.py b/src/bonsai/bonsai/bim/module/clash/data.py index b994a1b750..4ecbb229a4 100644 --- a/src/bonsai/bonsai/bim/module/clash/data.py +++ b/src/bonsai/bonsai/bim/module/clash/data.py @@ -16,9 +16,11 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json + +import bpy import ifcopenshell.util.element + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/clash/decorator.py b/src/bonsai/bonsai/bim/module/clash/decorator.py index 91ecc1fc16..d1d0daf095 100644 --- a/src/bonsai/bonsai/bim/module/clash/decorator.py +++ b/src/bonsai/bonsai/bim/module/clash/decorator.py @@ -17,13 +17,14 @@ # along with Bonsai. If not, see . import blf -import gpu import bmesh -import bonsai.tool as tool +import gpu from bpy.types import SpaceView3D -from mathutils import Vector -from gpu_extras.batch import batch_for_shader from bpy_extras.view3d_utils import location_3d_to_region_2d +from gpu_extras.batch import batch_for_shader +from mathutils import Vector + +import bonsai.tool as tool class ClashDecorator: diff --git a/src/bonsai/bonsai/bim/module/clash/operator.py b/src/bonsai/bonsai/bim/module/clash/operator.py index 3463b8fc10..688568270f 100644 --- a/src/bonsai/bonsai/bim/module/clash/operator.py +++ b/src/bonsai/bonsai/bim/module/clash/operator.py @@ -16,22 +16,24 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy import json -import tempfile -import bmesh import logging -import numpy as np -import ifcopenshell -import bonsai.tool as tool -from pathlib import Path -from bpy_extras.io_utils import ExportHelper, ImportHelper +import os +import tempfile from math import radians +from pathlib import Path +from typing import TYPE_CHECKING + +import bmesh +import bpy +import ifcopenshell +import numpy as np +from bpy_extras.io_utils import ExportHelper, ImportHelper from mathutils import Matrix, Vector + +import bonsai.tool as tool from bonsai.bim.ifc import IfcStore from bonsai.bim.module.clash.decorator import ClashDecorator -from typing import TYPE_CHECKING class ExportClashSets(bpy.types.Operator, ExportHelper): diff --git a/src/bonsai/bonsai/bim/module/clash/prop.py b/src/bonsai/bonsai/bim/module/clash/prop.py index a7c6101b73..5f42a400e7 100644 --- a/src/bonsai/bonsai/bim/module/clash/prop.py +++ b/src/bonsai/bonsai/bim/module/clash/prop.py @@ -16,23 +16,25 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, Union + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute, BIMFilterGroup -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from ifcopenshell.geom.main import ClashType, CLASH_TYPE_ITEMS +from bpy.types import PropertyGroup +from ifcopenshell.geom.main import CLASH_TYPE_ITEMS, ClashType from mathutils import Vector -from typing import TYPE_CHECKING, Literal, Union + +import bonsai.tool as tool +from bonsai.bim.prop import Attribute, BIMFilterGroup, StrProperty class ClashSource(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/clash/ui.py b/src/bonsai/bonsai/bim/module/clash/ui.py index 5e3711efe0..a6ef267d84 100644 --- a/src/bonsai/bonsai/bim/module/clash/ui.py +++ b/src/bonsai/bonsai/bim/module/clash/ui.py @@ -17,15 +17,23 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import bonsai.tool as tool -import bonsai.bim.helper -from bpy.types import Panel -from bonsai.bim.module.clash.data import ClashData + from typing import TYPE_CHECKING, assert_never +import bpy +from bpy.types import Panel + +import bonsai.bim.helper +import bonsai.tool as tool +from bonsai.bim.module.clash.data import ClashData + if TYPE_CHECKING: - from bonsai.bim.module.clash.prop import BIMClashProperties, ClashSet, SmartClashGroup, Clash + from bonsai.bim.module.clash.prop import ( + BIMClashProperties, + Clash, + ClashSet, + SmartClashGroup, + ) class BIM_PT_ifcclash(Panel): diff --git a/src/bonsai/bonsai/bim/module/classification/__init__.py b/src/bonsai/bonsai/bim/module/classification/__init__.py index 6d33b50ee6..155bbdd6ee 100644 --- a/src/bonsai/bonsai/bim/module/classification/__init__.py +++ b/src/bonsai/bonsai/bim/module/classification/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddClassification, diff --git a/src/bonsai/bonsai/bim/module/classification/data.py b/src/bonsai/bonsai/bim/module/classification/data.py index a1fa3a6d58..9685e8faa9 100644 --- a/src/bonsai/bonsai/bim/module/classification/data.py +++ b/src/bonsai/bonsai/bim/module/classification/data.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any, Literal, Union + import bpy import ifcopenshell -import ifcopenshell.util.date import ifcopenshell.util.classification +import ifcopenshell.util.date + import bonsai.tool as tool -from typing import Any, Literal, Union from bonsai.bim.ifc import IfcStore diff --git a/src/bonsai/bonsai/bim/module/classification/operator.py b/src/bonsai/bonsai/bim/module/classification/operator.py index a6fd0c6df5..7bf699cc31 100644 --- a/src/bonsai/bonsai/bim/module/classification/operator.py +++ b/src/bonsai/bonsai/bim/module/classification/operator.py @@ -19,13 +19,14 @@ import bpy import ifcopenshell import ifcopenshell.api -import ifcopenshell.api.pset import ifcopenshell.api.classification +import ifcopenshell.api.pset import ifcopenshell.util.classification import ifcopenshell.util.element -import bonsai.tool as tool -import bonsai.bim.helper from bpy_extras.io_utils import ImportHelper + +import bonsai.bim.helper +import bonsai.tool as tool from bonsai.bim.ifc import IfcStore diff --git a/src/bonsai/bonsai/bim/module/classification/prop.py b/src/bonsai/bonsai/bim/module/classification/prop.py index 4e2de0119d..454f861f07 100644 --- a/src/bonsai/bonsai/bim/module/classification/prop.py +++ b/src/bonsai/bonsai/bim/module/classification/prop.py @@ -16,22 +16,27 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import Attribute -from bonsai.bim.module.classification.data import ClassificationsData, ObjectClassificationsData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.classification.data import ( + ClassificationsData, + ObjectClassificationsData, +) +from bonsai.bim.prop import Attribute def get_available_classifications( diff --git a/src/bonsai/bonsai/bim/module/classification/ui.py b/src/bonsai/bonsai/bim/module/classification/ui.py index 077f97553f..77310be49a 100644 --- a/src/bonsai/bonsai/bim/module/classification/ui.py +++ b/src/bonsai/bonsai/bim/module/classification/ui.py @@ -17,24 +17,29 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import bonsai.bim.helper -import bonsai.tool as tool -import bonsai.bim.module.classification.prop as classification_prop -import ifcopenshell.util.classification -from bpy.types import Panel, UIList -from bonsai.bim.module.classification.data import ( - ClassificationsData, - ObjectClassificationsData, - MaterialClassificationsData, - CostClassificationsData, - ZoneClassificationsData, -) from typing import TYPE_CHECKING, Any, Union +import bpy +import ifcopenshell.util.classification +from bpy.types import Panel, UIList + +import bonsai.bim.helper +import bonsai.bim.module.classification.prop as classification_prop +import bonsai.tool as tool +from bonsai.bim.module.classification.data import ( + ClassificationsData, + CostClassificationsData, + MaterialClassificationsData, + ObjectClassificationsData, + ZoneClassificationsData, +) + if TYPE_CHECKING: - from bonsai.bim.module.classification.prop import BIMClassificationProperties, ClassificationReference + from bonsai.bim.module.classification.prop import ( + BIMClassificationProperties, + ClassificationReference, + ) class BIM_PT_classifications(Panel): diff --git a/src/bonsai/bonsai/bim/module/constraint/__init__.py b/src/bonsai/bonsai/bim/module/constraint/__init__.py index 54b5183023..858c1da130 100644 --- a/src/bonsai/bonsai/bim/module/constraint/__init__.py +++ b/src/bonsai/bonsai/bim/module/constraint/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.LoadObjectives, diff --git a/src/bonsai/bonsai/bim/module/constraint/data.py b/src/bonsai/bonsai/bim/module/constraint/data.py index 8a92de2c71..d44a7d2a55 100644 --- a/src/bonsai/bonsai/bim/module/constraint/data.py +++ b/src/bonsai/bonsai/bim/module/constraint/data.py @@ -17,9 +17,10 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool from ifcopenshell.util.doc import get_entity_doc +import bonsai.tool as tool + def refresh(): ConstraintsData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/constraint/operator.py b/src/bonsai/bonsai/bim/module/constraint/operator.py index 4297642c3b..976f4ff6a3 100644 --- a/src/bonsai/bonsai/bim/module/constraint/operator.py +++ b/src/bonsai/bonsai/bim/module/constraint/operator.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell.api import ifcopenshell.api.constraint + import bonsai.bim.helper import bonsai.tool as tool -from typing import TYPE_CHECKING def get_active_object(context: bpy.types.Context, obj_name: str) -> bpy.types.Object: diff --git a/src/bonsai/bonsai/bim/module/constraint/prop.py b/src/bonsai/bonsai/bim/module/constraint/prop.py index ec66f78211..c76d48e8a6 100644 --- a/src/bonsai/bonsai/bim/module/constraint/prop.py +++ b/src/bonsai/bonsai/bim/module/constraint/prop.py @@ -16,23 +16,25 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal + import bpy -from ifcopenshell.util.doc import get_entity_doc -import bonsai.tool as tool -from bonsai.bim.prop import Attribute -from bonsai.bim.module.constraint.data import ConstraintsData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal +from bpy.types import PropertyGroup +from ifcopenshell.util.doc import get_entity_doc + +import bonsai.tool as tool +from bonsai.bim.module.constraint.data import ConstraintsData +from bonsai.bim.prop import Attribute def get_available_constraint_types(self, context): diff --git a/src/bonsai/bonsai/bim/module/constraint/ui.py b/src/bonsai/bonsai/bim/module/constraint/ui.py index 61b335d782..5ab3d7c93c 100644 --- a/src/bonsai/bonsai/bim/module/constraint/ui.py +++ b/src/bonsai/bonsai/bim/module/constraint/ui.py @@ -17,14 +17,21 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bonsai.tool as tool -from bpy.types import Panel, UIList -from bonsai.bim.helper import draw_attributes -from bonsai.bim.module.constraint.data import ConstraintsData, ObjectConstraintsData + from typing import TYPE_CHECKING +from bpy.types import Panel, UIList + +import bonsai.tool as tool +from bonsai.bim.helper import draw_attributes +from bonsai.bim.module.constraint.data import ConstraintsData, ObjectConstraintsData + if TYPE_CHECKING: - from bonsai.bim.module.constraint.prop import BIMConstraintProperties, BIMObjectConstraintProperties, Constraint + from bonsai.bim.module.constraint.prop import ( + BIMConstraintProperties, + BIMObjectConstraintProperties, + Constraint, + ) class BIM_PT_constraints(Panel): diff --git a/src/bonsai/bonsai/bim/module/context/__init__.py b/src/bonsai/bonsai/bim/module/context/__init__.py index 65665ae290..da24e53f55 100644 --- a/src/bonsai/bonsai/bim/module/context/__init__.py +++ b/src/bonsai/bonsai/bim/module/context/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddContext, diff --git a/src/bonsai/bonsai/bim/module/context/data.py b/src/bonsai/bonsai/bim/module/context/data.py index c0b2143801..ade8061a4b 100644 --- a/src/bonsai/bonsai/bim/module/context/data.py +++ b/src/bonsai/bonsai/bim/module/context/data.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bonsai.tool as tool -import ifcopenshell from typing import Any +import bpy +import ifcopenshell + +import bonsai.tool as tool + def refresh(): ContextData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/context/operator.py b/src/bonsai/bonsai/bim/module/context/operator.py index fbf1f17963..88483dfc0c 100644 --- a/src/bonsai/bonsai/bim/module/context/operator.py +++ b/src/bonsai/bonsai/bim/module/context/operator.py @@ -17,8 +17,9 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool + import bonsai.core.context as core +import bonsai.tool as tool class AddContext(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/context/prop.py b/src/bonsai/bonsai/bim/module/context/prop.py index 3a6f3c226f..ff73c53a5a 100644 --- a/src/bonsai/bonsai/bim/module/context/prop.py +++ b/src/bonsai/bonsai/bim/module/context/prop.py @@ -16,21 +16,23 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.context.data import ContextData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING +from bpy.types import PropertyGroup + +from bonsai.bim.module.context.data import ContextData +from bonsai.bim.prop import Attribute, StrProperty class BIMContextProperties(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/context/ui.py b/src/bonsai/bonsai/bim/module/context/ui.py index e8d0d337b4..3090da38fc 100644 --- a/src/bonsai/bonsai/bim/module/context/ui.py +++ b/src/bonsai/bonsai/bim/module/context/ui.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy + import bonsai.bim.helper import bonsai.tool as tool from bonsai.bim.module.context.data import ContextData diff --git a/src/bonsai/bonsai/bim/module/cost/__init__.py b/src/bonsai/bonsai/bim/module/cost/__init__.py index 6f42a71bf9..9378a68ee1 100644 --- a/src/bonsai/bonsai/bim/module/cost/__init__.py +++ b/src/bonsai/bonsai/bim/module/cost/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddCostColumn, diff --git a/src/bonsai/bonsai/bim/module/cost/data.py b/src/bonsai/bonsai/bim/module/cost/data.py index 4b5198bb03..aab9ea9231 100644 --- a/src/bonsai/bonsai/bim/module/cost/data.py +++ b/src/bonsai/bonsai/bim/module/cost/data.py @@ -16,15 +16,17 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any, Union + import bpy import ifcopenshell import ifcopenshell.util.cost import ifcopenshell.util.date import ifcopenshell.util.element import ifcopenshell.util.unit -import bonsai.tool as tool from ifcopenshell.util.doc import get_entity_doc, get_predefined_type_doc -from typing import Any, Union + +import bonsai.tool as tool def refresh(): diff --git a/src/bonsai/bonsai/bim/module/cost/operator.py b/src/bonsai/bonsai/bim/module/cost/operator.py index 644871488c..48b672a2c2 100644 --- a/src/bonsai/bonsai/bim/module/cost/operator.py +++ b/src/bonsai/bonsai/bim/module/cost/operator.py @@ -18,16 +18,16 @@ # pyright: reportUnnecessaryTypeIgnoreComment=error -import bpy import textwrap -import ifcopenshell.api.nest -import bonsai.tool as tool -from bpy_extras.io_utils import ImportHelper, ExportHelper -import bonsai.tool as tool -import bonsai.core.cost as core from pathlib import Path +from typing import TYPE_CHECKING, Literal, get_args -from typing import get_args, TYPE_CHECKING, Literal +import bpy +import ifcopenshell.api.nest +from bpy_extras.io_utils import ExportHelper, ImportHelper + +import bonsai.core.cost as core +import bonsai.tool as tool class AddCostSchedule(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/cost/prop.py b/src/bonsai/bonsai/bim/module/cost/prop.py index 3ce30e665e..121ca617e7 100644 --- a/src/bonsai/bonsai/bim/module/cost/prop.py +++ b/src/bonsai/bonsai/bim/module/cost/prop.py @@ -16,25 +16,31 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, Union + import bpy import ifcopenshell.api import ifcopenshell.api.cost -import bonsai.tool as tool -from bonsai.bim.module.classification.data import CostClassificationsData -from bonsai.bim.module.cost.data import CostSchedulesData, CostItemRatesData, CostItemQuantitiesData -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal, Union +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.classification.data import CostClassificationsData +from bonsai.bim.module.cost.data import ( + CostItemQuantitiesData, + CostItemRatesData, + CostSchedulesData, +) +from bonsai.bim.prop import Attribute, StrProperty def get_schedule_of_rates(self: "BIMCostProperties", context: bpy.types.Context) -> tool.Blender.BLENDER_ENUM_ITEMS: diff --git a/src/bonsai/bonsai/bim/module/cost/ui.py b/src/bonsai/bonsai/bim/module/cost/ui.py index e8eb58a855..73a578171f 100644 --- a/src/bonsai/bonsai/bim/module/cost/ui.py +++ b/src/bonsai/bonsai/bim/module/cost/ui.py @@ -17,13 +17,16 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any + import bpy +from bpy.types import Panel, UIList + import bonsai.bim.helper import bonsai.bim.module.cost.prop as CostProp import bonsai.tool as tool -from bpy.types import Panel, UIList from bonsai.bim.module.cost.data import CostSchedulesData -from typing import Any, TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.cost.prop import BIMCostProperties, CostItemQuantity diff --git a/src/bonsai/bonsai/bim/module/covering/__init__.py b/src/bonsai/bonsai/bim/module/covering/__init__.py index 5e00a6dfbe..3cec5084c4 100644 --- a/src/bonsai/bonsai/bim/module/covering/__init__.py +++ b/src/bonsai/bonsai/bim/module/covering/__init__.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy + from . import prop, workspace classes = ( diff --git a/src/bonsai/bonsai/bim/module/covering/prop.py b/src/bonsai/bonsai/bim/module/covering/prop.py index 3dc65903aa..3655d50c9f 100644 --- a/src/bonsai/bonsai/bim/module/covering/prop.py +++ b/src/bonsai/bonsai/bim/module/covering/prop.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy from bpy.types import PropertyGroup -from typing import TYPE_CHECKING class BIMCoveringProperties(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/covering/workspace.py b/src/bonsai/bonsai/bim/module/covering/workspace.py index 3e44b0476d..68b2704166 100644 --- a/src/bonsai/bonsai/bim/module/covering/workspace.py +++ b/src/bonsai/bonsai/bim/module/covering/workspace.py @@ -18,13 +18,15 @@ import os +from functools import partial + import bpy import ifcopenshell +from bpy.types import WorkSpaceTool + import bonsai.tool as tool from bonsai.bim.helper import prop_with_search from bonsai.bim.module.model.data import AuthoringData -from bpy.types import WorkSpaceTool -from functools import partial class CoveringTool(WorkSpaceTool): diff --git a/src/bonsai/bonsai/bim/module/covetool/__init__.py b/src/bonsai/bonsai/bim/module/covetool/__init__.py index 6697f24301..beb75bb7af 100644 --- a/src/bonsai/bonsai/bim/module/covetool/__init__.py +++ b/src/bonsai/bonsai/bim/module/covetool/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( prop.CoveToolProject, diff --git a/src/bonsai/bonsai/bim/module/covetool/operator.py b/src/bonsai/bonsai/bim/module/covetool/operator.py index cccb164611..fa298ada9c 100644 --- a/src/bonsai/bonsai/bim/module/covetool/operator.py +++ b/src/bonsai/bonsai/bim/module/covetool/operator.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json +from math import atan2, degrees + +import bpy import ifcopenshell import ifcopenshell.util.element + import bonsai.tool as tool -from math import degrees, atan2 from .api import Api diff --git a/src/bonsai/bonsai/bim/module/covetool/prop.py b/src/bonsai/bonsai/bim/module/covetool/prop.py index 06444de29f..42e59466d9 100644 --- a/src/bonsai/bonsai/bim/module/covetool/prop.py +++ b/src/bonsai/bonsai/bim/module/covetool/prop.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy from typing import TYPE_CHECKING +import bpy + class CoveToolProject(bpy.types.PropertyGroup): run_set: bpy.props.StringProperty(name="Run Set") diff --git a/src/bonsai/bonsai/bim/module/covetool/ui.py b/src/bonsai/bonsai/bim/module/covetool/ui.py index e26ac1338a..1a7015b139 100644 --- a/src/bonsai/bonsai/bim/module/covetool/ui.py +++ b/src/bonsai/bonsai/bim/module/covetool/ui.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy.types -import bonsai.tool as tool + from typing import TYPE_CHECKING +import bpy.types + +import bonsai.tool as tool + if TYPE_CHECKING: - from bonsai.bim.module.covetool.prop import CoveToolProperties, CoveToolProject + from bonsai.bim.module.covetool.prop import CoveToolProject, CoveToolProperties class BIM_PT_covetool(bpy.types.Panel): diff --git a/src/bonsai/bonsai/bim/module/csv/__init__.py b/src/bonsai/bonsai/bim/module/csv/__init__.py index 7a6b99906e..f544445b20 100644 --- a/src/bonsai/bonsai/bim/module/csv/__init__.py +++ b/src/bonsai/bonsai/bim/module/csv/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddCsvAttribute, diff --git a/src/bonsai/bonsai/bim/module/csv/operator.py b/src/bonsai/bonsai/bim/module/csv/operator.py index 34e20f6d9c..d42e8d3852 100644 --- a/src/bonsai/bonsai/bim/module/csv/operator.py +++ b/src/bonsai/bonsai/bim/module/csv/operator.py @@ -17,20 +17,23 @@ # along with Bonsai. If not, see . from __future__ import annotations -import os -import bpy + import json -import ifccsv import logging +import os import tempfile +from collections import Counter +from typing import TYPE_CHECKING + +import bpy +import ifccsv import ifcopenshell import ifcopenshell.util.selector -import bonsai.tool as tool -import bonsai.bim.module.drawing.scheduler as scheduler from bpy_extras.io_utils import ExportHelper, ImportHelper + +import bonsai.bim.module.drawing.scheduler as scheduler +import bonsai.tool as tool from bonsai.bim.handler import refresh_ui_data -from typing import TYPE_CHECKING -from collections import Counter if TYPE_CHECKING: import pandas as pd diff --git a/src/bonsai/bonsai/bim/module/csv/prop.py b/src/bonsai/bonsai/bim/module/csv/prop.py index 371776bef2..a698f89b76 100644 --- a/src/bonsai/bonsai/bim/module/csv/prop.py +++ b/src/bonsai/bonsai/bim/module/csv/prop.py @@ -16,20 +16,22 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal + import bpy -from bonsai.bim.prop import StrProperty, BIMFilterGroup -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal +from bpy.types import PropertyGroup + +from bonsai.bim.prop import BIMFilterGroup, StrProperty class CsvAttribute(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/csv/ui.py b/src/bonsai/bonsai/bim/module/csv/ui.py index a407efc7d1..c40be1b037 100644 --- a/src/bonsai/bonsai/bim/module/csv/ui.py +++ b/src/bonsai/bonsai/bim/module/csv/ui.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from bpy.types import Panel + import bonsai.bim.helper import bonsai.tool as tool -from bpy.types import Panel from bonsai.bim.module.search.data import SearchData diff --git a/src/bonsai/bonsai/bim/module/debug/__init__.py b/src/bonsai/bonsai/bim/module/debug/__init__.py index c01cf03275..bd3ecac4f6 100644 --- a/src/bonsai/bonsai/bim/module/debug/__init__.py +++ b/src/bonsai/bonsai/bim/module/debug/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ChangeLogLevel, diff --git a/src/bonsai/bonsai/bim/module/debug/operator.py b/src/bonsai/bonsai/bim/module/debug/operator.py index 0820d5e3d6..6e30a3cc0f 100644 --- a/src/bonsai/bonsai/bim/module/debug/operator.py +++ b/src/bonsai/bonsai/bim/module/debug/operator.py @@ -16,14 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import sys -import bpy -import time -import random import logging -import subprocess +import os import platform +import random +import subprocess +import sys +import time +from collections import defaultdict +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Union, assert_never, get_args + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset @@ -32,18 +36,16 @@ import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.unit -import bonsai.tool as tool +from bpy_extras.io_utils import ExportHelper, ImportHelper + +import bonsai.bim.handler +import bonsai.bim.import_ifc as import_ifc import bonsai.core.debug as core import bonsai.core.profile import bonsai.core.type -import bonsai.bim.handler -import bonsai.bim.import_ifc as import_ifc -from collections import defaultdict -from bpy_extras.io_utils import ImportHelper, ExportHelper -from pathlib import Path -from bonsai import get_debug_info, format_debug_info +import bonsai.tool as tool +from bonsai import format_debug_info, get_debug_info from bonsai.bim.ifc import IfcStore -from typing import get_args, Union, Any, TYPE_CHECKING, Literal, get_args, assert_never if TYPE_CHECKING: from bonsai.bim.prop import Attribute diff --git a/src/bonsai/bonsai/bim/module/debug/prop.py b/src/bonsai/bonsai/bim/module/debug/prop.py index 5a28b22f79..e52ec5ff7d 100644 --- a/src/bonsai/bonsai/bim/module/debug/prop.py +++ b/src/bonsai/bonsai/bim/module/debug/prop.py @@ -16,20 +16,22 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, get_args + import bpy -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal, get_args +from bpy.types import PropertyGroup + +from bonsai.bim.prop import Attribute, StrProperty DisplayType = Literal["BOUNDS", "WIRE", "SOLID", "TEXTURED"] diff --git a/src/bonsai/bonsai/bim/module/debug/ui.py b/src/bonsai/bonsai/bim/module/debug/ui.py index 58af7b9f72..5ffa99cf35 100644 --- a/src/bonsai/bonsai/bim/module/debug/ui.py +++ b/src/bonsai/bonsai/bim/module/debug/ui.py @@ -17,9 +17,10 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool from bpy.types import Panel +import bonsai.tool as tool + class BIM_PT_debug(Panel): bl_label = "Debug" diff --git a/src/bonsai/bonsai/bim/module/demo/__init__.py b/src/bonsai/bonsai/bim/module/demo/__init__.py index 705e0be046..7dc5f18ff7 100644 --- a/src/bonsai/bonsai/bim/module/demo/__init__.py +++ b/src/bonsai/bonsai/bim/module/demo/__init__.py @@ -28,7 +28,8 @@ # system when the add-on loads. This is where it happens. import bpy -from . import ui, prop, operator + +from . import operator, prop, ui # You'll need to provide a list of every one of your classes here. If you forget # to specify your class, it won't load and you won't be able to use that diff --git a/src/bonsai/bonsai/bim/module/demo/operator.py b/src/bonsai/bonsai/bim/module/demo/operator.py index 001c8de692..fb1927c9bd 100644 --- a/src/bonsai/bonsai/bim/module/demo/operator.py +++ b/src/bonsai/bonsai/bim/module/demo/operator.py @@ -28,8 +28,9 @@ # "Operators", since they correlate to a single user operation. import bpy -import bonsai.tool as tool + import bonsai.core.demo as core +import bonsai.tool as tool # Each button correlates to a class like the one below. In this case, we're diff --git a/src/bonsai/bonsai/bim/module/demo/prop.py b/src/bonsai/bonsai/bim/module/demo/prop.py index 83df8ccfda..f206fe3156 100644 --- a/src/bonsai/bonsai/bim/module/demo/prop.py +++ b/src/bonsai/bonsai/bim/module/demo/prop.py @@ -33,20 +33,20 @@ from typing import TYPE_CHECKING import bpy -from bpy.types import PropertyGroup # Properties have many different data types. We won't use all of them in this # demo module, but this is a list for your reference. from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup # All properties must belong in a property group. Usually, you'd have a group diff --git a/src/bonsai/bonsai/bim/module/demo/ui.py b/src/bonsai/bonsai/bim/module/demo/ui.py index 6005814cfa..cade6dbf03 100644 --- a/src/bonsai/bonsai/bim/module/demo/ui.py +++ b/src/bonsai/bonsai/bim/module/demo/ui.py @@ -27,6 +27,7 @@ # panels, buttons, labels, and input fields are laid out. import bpy + import bonsai.tool as tool from bonsai.bim.module.demo.data import DemoData diff --git a/src/bonsai/bonsai/bim/module/diff/__init__.py b/src/bonsai/bonsai/bim/module/diff/__init__.py index 2cfb1b3c7b..fdeaf49596 100644 --- a/src/bonsai/bonsai/bim/module/diff/__init__.py +++ b/src/bonsai/bonsai/bim/module/diff/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ExecuteIfcDiff, diff --git a/src/bonsai/bonsai/bim/module/diff/data.py b/src/bonsai/bonsai/bim/module/diff/data.py index ac3e545f43..9fce7f38ba 100644 --- a/src/bonsai/bonsai/bim/module/diff/data.py +++ b/src/bonsai/bonsai/bim/module/diff/data.py @@ -16,8 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json + +import bpy + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/diff/operator.py b/src/bonsai/bonsai/bim/module/diff/operator.py index 954e43ac1e..330deed410 100644 --- a/src/bonsai/bonsai/bim/module/diff/operator.py +++ b/src/bonsai/bonsai/bim/module/diff/operator.py @@ -16,15 +16,17 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json import logging + +import bpy import ifcdiff import ifcopenshell +from bpy_extras.io_utils import ExportHelper, ImportHelper + import bonsai.bim.handler import bonsai.bim.import_ifc import bonsai.tool as tool -from bpy_extras.io_utils import ImportHelper, ExportHelper from bonsai.bim.ifc import IfcStore diff --git a/src/bonsai/bonsai/bim/module/diff/prop.py b/src/bonsai/bonsai/bim/module/diff/prop.py index 61da124a7c..c8f9d48c84 100644 --- a/src/bonsai/bonsai/bim/module/diff/prop.py +++ b/src/bonsai/bonsai/bim/module/diff/prop.py @@ -16,21 +16,23 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, get_args + import bpy -from bonsai.bim.prop import StrProperty, BIMFilterGroup -from bonsai.bim.module.diff.data import DiffData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal, get_args +from bpy.types import PropertyGroup + +from bonsai.bim.module.diff.data import DiffData +from bonsai.bim.prop import BIMFilterGroup, StrProperty def update_diff_json_file(self: "DiffProperties", context: bpy.types.Context) -> None: diff --git a/src/bonsai/bonsai/bim/module/diff/ui.py b/src/bonsai/bonsai/bim/module/diff/ui.py index 91e0a6b48e..383345e8b5 100644 --- a/src/bonsai/bonsai/bim/module/diff/ui.py +++ b/src/bonsai/bonsai/bim/module/diff/ui.py @@ -17,9 +17,10 @@ # along with Bonsai. If not, see . from bpy.types import Panel -from bonsai.bim.module.diff.data import DiffData + import bonsai.bim.helper import bonsai.tool as tool +from bonsai.bim.module.diff.data import DiffData class BIM_PT_diff(Panel): diff --git a/src/bonsai/bonsai/bim/module/document/__init__.py b/src/bonsai/bonsai/bim/module/document/__init__.py index 3881148a18..ac3bdfb1a3 100644 --- a/src/bonsai/bonsai/bim/module/document/__init__.py +++ b/src/bonsai/bonsai/bim/module/document/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddDocumentReference, diff --git a/src/bonsai/bonsai/bim/module/document/data.py b/src/bonsai/bonsai/bim/module/document/data.py index b68c118e56..97b4a1f206 100644 --- a/src/bonsai/bonsai/bim/module/document/data.py +++ b/src/bonsai/bonsai/bim/module/document/data.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . import os + import bpy import ifcopenshell import ifcopenshell.util.schema -import bonsai.tool as tool from natsort import natsorted +import bonsai.tool as tool + def refresh(): DocumentData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/document/operator.py b/src/bonsai/bonsai/bim/module/document/operator.py index 447d3b1693..a4e5cfc4ac 100644 --- a/src/bonsai/bonsai/bim/module/document/operator.py +++ b/src/bonsai/bonsai/bim/module/document/operator.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json + +import bpy + import bonsai.bim.handler -import bonsai.tool as tool import bonsai.core.document as core +import bonsai.tool as tool from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData @@ -264,8 +266,8 @@ class OpenIFCDocument(bpy.types.Operator): uri: bpy.props.StringProperty(name="URI") def execute(self, context): - import subprocess import os + import subprocess if not self.uri or not self.uri.lower().startswith("file://"): self.report({"ERROR"}, "Only local file:// URIs are supported") diff --git a/src/bonsai/bonsai/bim/module/document/prop.py b/src/bonsai/bonsai/bim/module/document/prop.py index 93369b546d..b1eb41cc2e 100644 --- a/src/bonsai/bonsai/bim/module/document/prop.py +++ b/src/bonsai/bonsai/bim/module/document/prop.py @@ -1,20 +1,21 @@ +from typing import TYPE_CHECKING, Union + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.document.data import refresh -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from bonsai.bim.module.document.data import DocumentData -from typing import TYPE_CHECKING, Union +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.document.data import DocumentData, refresh +from bonsai.bim.prop import Attribute, StrProperty def update_document_name(self: "Document", context: bpy.types.Context) -> None: diff --git a/src/bonsai/bonsai/bim/module/document/ui.py b/src/bonsai/bonsai/bim/module/document/ui.py index 7688399732..eda5d34a1d 100644 --- a/src/bonsai/bonsai/bim/module/document/ui.py +++ b/src/bonsai/bonsai/bim/module/document/ui.py @@ -17,8 +17,9 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool from bpy.types import Panel, UIList + +import bonsai.tool as tool from bonsai.bim.helper import draw_attributes from bonsai.bim.module.document.data import DocumentData, ObjectDocumentData diff --git a/src/bonsai/bonsai/bim/module/drawing/__init__.py b/src/bonsai/bonsai/bim/module/drawing/__init__.py index 93316a0d01..67a9ed0853 100644 --- a/src/bonsai/bonsai/bim/module/drawing/__init__.py +++ b/src/bonsai/bonsai/bim/module/drawing/__init__.py @@ -17,9 +17,11 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator, handler, gizmos, workspace + import bonsai.tool as tool +from . import gizmos, handler, operator, prop, ui, workspace + classes = ( operator.ActivateDrawing, operator.ActivateDrawingFromSheet, diff --git a/src/bonsai/bonsai/bim/module/drawing/annotation.py b/src/bonsai/bonsai/bim/module/drawing/annotation.py index 9589b9ac00..18d914872a 100644 --- a/src/bonsai/bonsai/bim/module/drawing/annotation.py +++ b/src/bonsai/bonsai/bim/module/drawing/annotation.py @@ -17,16 +17,19 @@ # along with Bonsai. If not, see . from __future__ import annotations -import os -import bpy + import math -import bmesh -import bonsai.tool as tool -import ifcopenshell.util.element +import os from pathlib import Path -from mathutils import Vector, Matrix from typing import Optional +import bmesh +import bpy +import ifcopenshell.util.element +from mathutils import Matrix, Vector + +import bonsai.tool as tool + class Annotator: @staticmethod diff --git a/src/bonsai/bonsai/bim/module/drawing/data.py b/src/bonsai/bonsai/bim/module/drawing/data.py index 4941e7f51c..ed457a7bbf 100644 --- a/src/bonsai/bonsai/bim/module/drawing/data.py +++ b/src/bonsai/bonsai/bim/module/drawing/data.py @@ -16,18 +16,20 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy import json -import ifcopenshell.util.element -import ifcopenshell.util.representation -import ifcopenshell.util.unit -import ifcopenshell.util.selector -import bonsai.tool as tool +import os from pathlib import Path from typing import Any, Union + +import bpy +import ifcopenshell.util.element +import ifcopenshell.util.representation +import ifcopenshell.util.selector +import ifcopenshell.util.unit from natsort import natsorted +import bonsai.tool as tool + def refresh(): ProductAssignmentsData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index fc3b9ecbf6..0a6bc967bf 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -16,33 +16,35 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import gpu -import bpy -import blf -import os import math +import os +from collections.abc import Generator, Iterator +from functools import cache +from math import acos, atan, cos, degrees, pi, radians, sin +from pathlib import Path +from timeit import default_timer as timer +from typing import Optional, Union + +import blf import bmesh -import shapely -import numpy as np +import bpy +import gpu import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.unit -import bonsai.tool as tool -import bonsai.bim.module.drawing.helper as helper -from pathlib import Path -from math import pi, sin, cos, acos, atan, degrees, radians +import numpy as np +import shapely from bpy.types import SpaceView3D -from mathutils import Vector, Matrix from bpy_extras.view3d_utils import location_3d_to_region_2d from gpu_extras.batch import batch_for_shader +from mathutils import Matrix, Vector + +import bonsai.bim.module.drawing.helper as helper +import bonsai.tool as tool from bonsai.bim.module.drawing.data import DecoratorData, DrawingsData -from bonsai.bim.module.drawing.shaders import add_verts_sequence, add_offsets from bonsai.bim.module.drawing.helper import format_distance -from timeit import default_timer as timer -from functools import cache -from typing import Optional, Union -from collections.abc import Generator, Iterator +from bonsai.bim.module.drawing.shaders import add_offsets, add_verts_sequence UNSPECIAL_ELEMENT_COLOR = (0.2, 0.2, 0.2, 1) # GREY diff --git a/src/bonsai/bonsai/bim/module/drawing/gizmos.py b/src/bonsai/bonsai/bim/module/drawing/gizmos.py index 3b25a0b12a..6624d2010c 100644 --- a/src/bonsai/bonsai/bim/module/drawing/gizmos.py +++ b/src/bonsai/bonsai/bim/module/drawing/gizmos.py @@ -132,28 +132,32 @@ __all__ = [ # noqa: RUF022 (unsorted `__all__`) "ExtrusionWidget", ] -from typing import Any, Literal, Protocol, runtime_checkable, get_args +import math from collections.abc import Callable, Iterator +from dataclasses import dataclass from enum import Enum +from typing import Any, Literal, Protocol, get_args, runtime_checkable import blf import bpy import gpu -import math import numpy as np from bpy import types -from dataclasses import dataclass -from mathutils import Vector, Matrix -from mathutils.kdtree import KDTree -from mathutils.geometry import intersect_line_line -from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d, location_3d_to_region_2d from bpy_extras import view3d_utils +from bpy_extras.view3d_utils import ( + location_3d_to_region_2d, + region_2d_to_origin_3d, + region_2d_to_vector_3d, +) from gpu_extras.batch import batch_for_shader -import bonsai.tool as tool -from bonsai.tool.unit import parse_distance_string -from bonsai.bim.module.drawing.shaders import ExtrusionGuidesShader from ifcopenshell.util.unit import si_conversions +from mathutils import Matrix, Vector +from mathutils.geometry import intersect_line_line +from mathutils.kdtree import KDTree +import bonsai.tool as tool +from bonsai.bim.module.drawing.shaders import ExtrusionGuidesShader +from bonsai.tool.unit import parse_distance_string SNAP_POINT_SIZE = 10.0 SNAP_POINT_COLOR = (1.0, 0.5, 0.0, 1.0) diff --git a/src/bonsai/bonsai/bim/module/drawing/handler.py b/src/bonsai/bonsai/bim/module/drawing/handler.py index 75bf62d506..026d274fb3 100644 --- a/src/bonsai/bonsai/bim/module/drawing/handler.py +++ b/src/bonsai/bonsai/bim/module/drawing/handler.py @@ -17,9 +17,10 @@ # along with Bonsai. If not, see . import bpy +from bpy.app.handlers import persistent + import bonsai.bim.module.drawing.decoration as decoration import bonsai.tool as tool -from bpy.app.handlers import persistent @persistent diff --git a/src/bonsai/bonsai/bim/module/drawing/helper.py b/src/bonsai/bonsai/bim/module/drawing/helper.py index 4d99d6c91b..ee8ecf805d 100644 --- a/src/bonsai/bonsai/bim/module/drawing/helper.py +++ b/src/bonsai/bonsai/bim/module/drawing/helper.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import math -import ifcopenshell.util.element -import mathutils.geometry -import ifcopenshell -import ifcopenshell.util.unit -import bonsai.tool as tool -from mathutils import Vector from typing import Union +import bpy +import ifcopenshell +import ifcopenshell.util.element +import ifcopenshell.util.unit +import mathutils.geometry +from mathutils import Vector + +import bonsai.tool as tool + # Code taken and updated from https://blenderartists.org/t/detecting-intersection-of-bounding-boxes/457520/2 diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 936225099b..365ff90ee3 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -16,58 +16,73 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy -import json -import re -import time -import bmesh -import shutil import hashlib -import shapely -import shapely.ops -import subprocess -import numpy as np +import json import multiprocessing +import os +import re +import shutil +import subprocess +import time +from math import radians +from pathlib import Path +from timeit import default_timer as timer +from typing import ( + TYPE_CHECKING, + Any, + Literal, + NamedTuple, + Optional, + TypedDict, + Union, + get_args, +) + +import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.document import ifcopenshell.api.pset import ifcopenshell.api.style -import ifcopenshell.ifcopenshell_wrapper import ifcopenshell.geom +import ifcopenshell.ifcopenshell_wrapper import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.selector import ifcopenshell.util.unit -import bonsai.bim.helper +import numpy as np +import shapely +import shapely.ops +from bpy_extras.image_utils import load_image +from bpy_extras.io_utils import ImportHelper +from lxml import etree +from mathutils import Color, Matrix, Vector + +import bonsai.bim.export_ifc import bonsai.bim.handler -import bonsai.tool as tool -import bonsai.core.geometry -import bonsai.core.drawing as core -import bonsai.bim.module.drawing.svgwriter as svgwriter +import bonsai.bim.helper import bonsai.bim.module.drawing.annotation as annotation import bonsai.bim.module.drawing.sheeter as sheeter -import bonsai.bim.export_ifc -from bpy_extras.io_utils import ImportHelper -from bonsai.bim.module.drawing.decoration import CutDecorator +import bonsai.bim.module.drawing.svgwriter as svgwriter +import bonsai.core.drawing as core +import bonsai.core.geometry +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore from bonsai.bim.module.drawing.data import DecoratorData, ElementValuesData +from bonsai.bim.module.drawing.decoration import CutDecorator +from bonsai.bim.module.drawing.prop import ( + RASTER_STYLE_PROPERTIES_EXCLUDE, + RasterStyleProperty, +) from bonsai.bim.module.drawing.ui import get_current_product_for_element_values from bonsai.bim.prop import StrProperty -from typing import NamedTuple, Union, Optional, Literal, TYPE_CHECKING, Any, TypedDict, get_args -from lxml import etree -from math import radians -from mathutils import Vector, Color, Matrix -from timeit import default_timer as timer -from bonsai.bim.module.drawing.prop import RasterStyleProperty, RASTER_STYLE_PROPERTIES_EXCLUDE -from bonsai.bim.ifc import IfcStore -from pathlib import Path -from bpy_extras.image_utils import load_image if TYPE_CHECKING: + from bpy.stub_internal import rna_enums + from bonsai.bim.module.drawing.prop import RenderType from bonsai.bim.module.project.prop import Link - from bpy.stub_internal import rna_enums cwd = os.path.dirname(os.path.realpath(__file__)) diff --git a/src/bonsai/bonsai/bim/module/drawing/prop.py b/src/bonsai/bonsai/bim/module/drawing/prop.py index 018c0a634a..3b7040bc02 100644 --- a/src/bonsai/bonsai/bim/module/drawing/prop.py +++ b/src/bonsai/bonsai/bim/module/drawing/prop.py @@ -16,39 +16,45 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy -import json import enum +import json +import os +from collections.abc import Callable +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Union, get_args + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset import ifcopenshell.util.element -import bonsai.tool as tool -import bonsai.core.drawing as core -import bonsai.bim.module.drawing.annotation as annotation -import bonsai.bim.module.drawing.decoration as decoration -from mathutils import Matrix -from bonsai.bim.prop import BIMFilterGroup -from bonsai.bim.module.drawing.data import DrawingsData, DecoratorData, SheetsData, AnnotationData, ElementValuesData -from bonsai.bim.module.drawing.data import refresh as refresh_drawing_data -from pathlib import Path -from bonsai.bim.prop import Attribute, StrProperty -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + BoolVectorProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, - BoolVectorProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal, Any, get_args, Union -from collections.abc import Callable +from bpy.types import PropertyGroup +from mathutils import Matrix +import bonsai.bim.module.drawing.annotation as annotation +import bonsai.bim.module.drawing.decoration as decoration +import bonsai.core.drawing as core +import bonsai.tool as tool +from bonsai.bim.module.drawing.data import ( + AnnotationData, + DecoratorData, + DrawingsData, + ElementValuesData, + SheetsData, +) +from bonsai.bim.module.drawing.data import refresh as refresh_drawing_data +from bonsai.bim.prop import Attribute, BIMFilterGroup, StrProperty diagram_scales_enum = [] diff --git a/src/bonsai/bonsai/bim/module/drawing/scheduler.py b/src/bonsai/bonsai/bim/module/drawing/scheduler.py index da80a46126..3b120e8d99 100644 --- a/src/bonsai/bonsai/bim/module/drawing/scheduler.py +++ b/src/bonsai/bonsai/bim/module/drawing/scheduler.py @@ -18,22 +18,23 @@ import os import re -import bpy import string -import svgwrite +from pathlib import Path +from textwrap import wrap + +import bpy import openpyxl import openpyxl.cell # Unnecessary, bug in typeshed. import openpyxl.utils # Unnecessary, bug in typeshed. -import bonsai.tool as tool - -from bonsai.bim.module.drawing.svgwriter import SvgWriter +import svgwrite from odf.opendocument import load as load_ods -from odf.table import Table, TableRow, TableColumn, TableCell -from odf.text import P from odf.style import Style -from textwrap import wrap -from pathlib import Path +from odf.table import Table, TableCell, TableColumn, TableRow +from odf.text import P + +import bonsai.tool as tool from bonsai.bim.ifc import IfcStore +from bonsai.bim.module.drawing.svgwriter import SvgWriter DEBUG = False diff --git a/src/bonsai/bonsai/bim/module/drawing/shaders.py b/src/bonsai/bonsai/bim/module/drawing/shaders.py index 020fc53147..2efd6ea285 100644 --- a/src/bonsai/bonsai/bim/module/drawing/shaders.py +++ b/src/bonsai/bonsai/bim/module/drawing/shaders.py @@ -16,11 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -from gpu_extras.batch import batch_for_shader import gpu +from gpu_extras.batch import batch_for_shader from mathutils import Vector - # NOTES: # Since Metal doesn't support geometry shaders we stick to builtin shaders # and generate all geometry data in python before passing it to the shader. diff --git a/src/bonsai/bonsai/bim/module/drawing/sheeter.py b/src/bonsai/bonsai/bim/module/drawing/sheeter.py index a3ec74159a..7d8ebb67f4 100644 --- a/src/bonsai/bonsai/bim/module/drawing/sheeter.py +++ b/src/bonsai/bonsai/bim/module/drawing/sheeter.py @@ -16,20 +16,22 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy -import uuid -import shutil import ntpath -import pystache +import os +import re +import shutil import urllib.parse +import uuid import xml.etree.ElementTree as ET -import bonsai.tool as tool -import ifcopenshell.util.geolocation from pathlib import Path from xml.dom import minidom + +import bpy +import ifcopenshell.util.geolocation +import pystache from mathutils import Vector -import re + +import bonsai.tool as tool VIEW_TITLE_OFFSET_Y = 5 DRAWING_PADDING = 10 diff --git a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py index d1a3897a20..dac8e54a61 100644 --- a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py +++ b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py @@ -16,33 +16,34 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import math import os import re -import bpy -import math -import bmesh import shutil -from bpy.types import SplineBezierPoints, SplinePoints -import mathutils import xml.etree.ElementTree as ET -import svgwrite -import svgwrite.container -import svgwrite.text +from collections.abc import Callable, Sequence +from math import acos, atan, ceil, degrees, pi +from pathlib import Path +from typing import Optional, Self, Union + +import bmesh +import bpy import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.selector import ifcopenshell.util.unit -import bonsai.tool as tool -import bonsai.bim.module.drawing.helper as helper -from bonsai.bim.module.drawing.data import DrawingsData -from bonsai.bim.module.drawing.data import DecoratorData -from math import pi, ceil, atan, degrees, acos -from mathutils import geometry, Vector -from typing import Optional, Self, Union -from collections.abc import Callable, Sequence -from pathlib import Path +import mathutils +import svgwrite +import svgwrite.container +import svgwrite.text +from bpy.types import SplineBezierPoints, SplinePoints from markdown_it import MarkdownIt +from mathutils import Vector, geometry + +import bonsai.bim.module.drawing.helper as helper +import bonsai.tool as tool +from bonsai.bim.module.drawing.data import DecoratorData, DrawingsData class External(svgwrite.container.Group): diff --git a/src/bonsai/bonsai/bim/module/drawing/ui.py b/src/bonsai/bonsai/bim/module/drawing/ui.py index d230add8f5..45ae50beb4 100644 --- a/src/bonsai/bonsai/bim/module/drawing/ui.py +++ b/src/bonsai/bonsai/bim/module/drawing/ui.py @@ -17,20 +17,23 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Optional, Union + import bpy +from bpy.types import Panel + import bonsai.bim.helper import bonsai.tool as tool -from bpy.types import Panel from bonsai.bim.module.drawing.data import ( - ProductAssignmentsData, - SheetsData, + DecoratorData, DocumentsData, DrawingsData, ElementFiltersData, - DecoratorData, ElementValuesData, + ProductAssignmentsData, + SheetsData, ) -from typing import TYPE_CHECKING, Union, Optional if TYPE_CHECKING: from bonsai.bim.module.drawing.prop import DocProperties, Drawing, Sheet diff --git a/src/bonsai/bonsai/bim/module/drawing/workspace.py b/src/bonsai/bonsai/bim/module/drawing/workspace.py index ae593d0873..5796c20303 100644 --- a/src/bonsai/bonsai/bim/module/drawing/workspace.py +++ b/src/bonsai/bonsai/bim/module/drawing/workspace.py @@ -18,18 +18,20 @@ import os +from functools import partial + import bpy import ifcopenshell.api.group import ifcopenshell.util.element +import ifcopenshell.util.representation +from bpy.types import WorkSpaceTool + +import bonsai.core.drawing as core import bonsai.core.geometry import bonsai.core.type -import bonsai.core.drawing as core import bonsai.tool as tool -import ifcopenshell.util.representation -from bonsai.bim.module.drawing.data import DecoratorData, AnnotationData from bonsai.bim.helper import prop_with_search -from bpy.types import WorkSpaceTool -from functools import partial +from bonsai.bim.module.drawing.data import AnnotationData, DecoratorData class LaunchAnnotationTypeManager(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/fm/__init__.py b/src/bonsai/bonsai/bim/module/fm/__init__.py index dc26a6379c..5b54adb71b 100644 --- a/src/bonsai/bonsai/bim/module/fm/__init__.py +++ b/src/bonsai/bonsai/bim/module/fm/__init__.py @@ -19,7 +19,8 @@ # pyright: reportAttributeAccessIssue=false import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ExecuteIfcFM, diff --git a/src/bonsai/bonsai/bim/module/fm/data.py b/src/bonsai/bonsai/bim/module/fm/data.py index fa4a9c4c6a..80a686e364 100644 --- a/src/bonsai/bonsai/bim/module/fm/data.py +++ b/src/bonsai/bonsai/bim/module/fm/data.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import ifcfm import importlib +import os + +import ifcfm def refresh(): diff --git a/src/bonsai/bonsai/bim/module/fm/operator.py b/src/bonsai/bonsai/bim/module/fm/operator.py index cda36598db..629251282a 100644 --- a/src/bonsai/bonsai/bim/module/fm/operator.py +++ b/src/bonsai/bonsai/bim/module/fm/operator.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy import json -import ifcfm import logging +import os import tempfile + +import bpy +import ifcfm import ifcopenshell -import bonsai.tool as tool from bpy_extras.io_utils import ExportHelper, ImportHelper +import bonsai.tool as tool + class ExecuteIfcFM(bpy.types.Operator, ExportHelper): bl_idname = "bim.execute_ifcfm" diff --git a/src/bonsai/bonsai/bim/module/fm/prop.py b/src/bonsai/bonsai/bim/module/fm/prop.py index 25db89224f..2eb1ae4739 100644 --- a/src/bonsai/bonsai/bim/module/fm/prop.py +++ b/src/bonsai/bonsai/bim/module/fm/prop.py @@ -16,22 +16,24 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal + import bpy +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + PointerProperty, + StringProperty, +) +from bpy.types import PropertyGroup + import bonsai.tool as tool from bonsai.bim.module.fm.data import FMData from bonsai.bim.prop import MultipleFileSelect, StrProperty -from bpy.types import PropertyGroup -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) -from typing import TYPE_CHECKING, Literal def get_engine(self: "BIMFMProperties", context: object) -> tool.Blender.BLENDER_ENUM_ITEMS: diff --git a/src/bonsai/bonsai/bim/module/fm/ui.py b/src/bonsai/bonsai/bim/module/fm/ui.py index fa889c61fd..69e51ea6dc 100644 --- a/src/bonsai/bonsai/bim/module/fm/ui.py +++ b/src/bonsai/bonsai/bim/module/fm/ui.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bonsai.tool as tool from bpy.types import Panel + +import bonsai.tool as tool from bonsai.bim.module.fm.data import FMData diff --git a/src/bonsai/bonsai/bim/module/geometry/__init__.py b/src/bonsai/bonsai/bim/module/geometry/__init__.py index de9a75fbc7..bc64947436 100644 --- a/src/bonsai/bonsai/bim/module/geometry/__init__.py +++ b/src/bonsai/bonsai/bim/module/geometry/__init__.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -from . import ui, prop, operator -from bpy.app.handlers import persistent -import ifcopenshell.util.element import math +import bpy +import ifcopenshell.util.element +from bpy.app.handlers import persistent + +from . import operator, prop, ui + classes = ( operator.AddCurvelikeItem, operator.AddHalfSpaceSolidItem, diff --git a/src/bonsai/bonsai/bim/module/geometry/data.py b/src/bonsai/bonsai/bim/module/geometry/data.py index 2e7d6c4205..05344ab87e 100644 --- a/src/bonsai/bonsai/bim/module/geometry/data.py +++ b/src/bonsai/bonsai/bim/module/geometry/data.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any, Union + import bpy import ifcopenshell.util.element import ifcopenshell.util.geolocation import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.unit -import bonsai.tool as tool -from typing import Any, Union from mathutils import Vector +import bonsai.tool as tool + def refresh(): ViewportData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/geometry/decorator.py b/src/bonsai/bonsai/bim/module/geometry/decorator.py index 02cb4bd255..c5a82c1d59 100644 --- a/src/bonsai/bonsai/bim/module/geometry/decorator.py +++ b/src/bonsai/bonsai/bim/module/geometry/decorator.py @@ -16,18 +16,20 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy +from collections.abc import Sequence + import blf -import gpu import bmesh +import bpy +import gpu import ifcopenshell -import bonsai.tool as tool import numpy as np from bpy.types import SpaceView3D -from mathutils import Vector, Matrix -from gpu_extras.batch import batch_for_shader from bpy_extras.view3d_utils import location_3d_to_region_2d -from collections.abc import Sequence +from gpu_extras.batch import batch_for_shader +from mathutils import Matrix, Vector + +import bonsai.tool as tool class ItemDecorator: diff --git a/src/bonsai/bonsai/bim/module/geometry/helper.py b/src/bonsai/bonsai/bim/module/geometry/helper.py index 7f70df4b96..511669d60d 100644 --- a/src/bonsai/bonsai/bim/module/geometry/helper.py +++ b/src/bonsai/bonsai/bim/module/geometry/helper.py @@ -16,19 +16,21 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy +from math import pi, pow +from typing import Any, Optional, TypeVar, Union + import bmesh -import shapely +import bpy +import ifcopenshell +import ifcopenshell.util.shape +import ifcopenshell.util.unit import mathutils import numpy as np -import ifcopenshell -import ifcopenshell.util.unit -import ifcopenshell.util.shape -import bonsai.tool as tool -from math import pi, pow -from mathutils import Vector, Matrix, geometry -from typing import Union, Any, TypeVar, Optional +import shapely from ifcopenshell.util.shape_builder import ShapeBuilder +from mathutils import Matrix, Vector, geometry + +import bonsai.tool as tool T = TypeVar("T") diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index a35a4de7bc..a03c6ae19c 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -17,17 +17,30 @@ # along with Bonsai. If not, see . import re -import bpy +from collections.abc import Sequence +from time import time +from typing import ( + TYPE_CHECKING, + Any, + Literal, + NamedTuple, + Union, + assert_never, + get_args, +) + import bmesh -import numpy as np -import numpy.typing as npt +import bpy import ifcopenshell +import ifcopenshell.api +import ifcopenshell.api.boundary import ifcopenshell.api.drawing -import ifcopenshell.api.group -import ifcopenshell.api.pset import ifcopenshell.api.geometry +import ifcopenshell.api.grid +import ifcopenshell.api.group import ifcopenshell.api.layer import ifcopenshell.api.material +import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.style import ifcopenshell.util.element @@ -35,26 +48,23 @@ import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape_builder import ifcopenshell.util.unit -import ifcopenshell.api -import ifcopenshell.api.boundary -import ifcopenshell.api.grid +import numpy as np +import numpy.typing as npt +from ifcopenshell.util.shape_builder import ShapeBuilder +from mathutils import Matrix, Quaternion, Vector + +import bonsai.bim.handler +import bonsai.core.aggregate +import bonsai.core.drawing import bonsai.core.geometry import bonsai.core.geometry as core -import bonsai.core.aggregate import bonsai.core.nest +import bonsai.core.root import bonsai.core.spatial import bonsai.core.style -import bonsai.core.root -import bonsai.core.drawing import bonsai.tool as tool -import bonsai.bim.handler -from bonsai.bim.module.model.data import AuthoringData -from mathutils import Vector, Matrix, Quaternion -from time import time from bonsai.bim.ifc import IfcStore -from ifcopenshell.util.shape_builder import ShapeBuilder -from collections.abc import Sequence -from typing import Any, Union, Literal, get_args, TYPE_CHECKING, assert_never, NamedTuple +from bonsai.bim.module.model.data import AuthoringData from bonsai.bim.module.model.decorator import ProfileDecorator if TYPE_CHECKING: diff --git a/src/bonsai/bonsai/bim/module/geometry/prop.py b/src/bonsai/bonsai/bim/module/geometry/prop.py index 1f8e00c11b..5336eef1c0 100644 --- a/src/bonsai/bonsai/bim/module/geometry/prop.py +++ b/src/bonsai/bonsai/bim/module/geometry/prop.py @@ -16,23 +16,25 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import ifcopenshell +from typing import TYPE_CHECKING, Literal, Optional, Union + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute, ObjProperty -from bonsai.bim.module.geometry.data import RepresentationsData, ViewportData -from bpy.types import PropertyGroup +import ifcopenshell from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import Optional, TYPE_CHECKING, Union, Literal +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.geometry.data import RepresentationsData, ViewportData +from bonsai.bim.prop import Attribute, ObjProperty, StrProperty def get_contexts(self: "BIMObjectGeometryProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/geometry/ui.py b/src/bonsai/bonsai/bim/module/geometry/ui.py index c4ae6e5491..2af216c7a1 100644 --- a/src/bonsai/bonsai/bim/module/geometry/ui.py +++ b/src/bonsai/bonsai/bim/module/geometry/ui.py @@ -17,16 +17,17 @@ # along with Bonsai. If not, see . import bpy +from bpy.types import Menu, Panel, UIList + import bonsai.bim import bonsai.tool as tool -from bpy.types import Panel, Menu, UIList from bonsai.bim.helper import prop_with_search from bonsai.bim.module.geometry.data import ( - RepresentationsData, - RepresentationItemsData, ConnectionsData, - PlacementData, DerivedCoordinatesData, + PlacementData, + RepresentationItemsData, + RepresentationsData, ) from bonsai.bim.module.layer.data import LayersData diff --git a/src/bonsai/bonsai/bim/module/georeference/__init__.py b/src/bonsai/bonsai/bim/module/georeference/__init__.py index 407cd8fead..39ee8f4143 100644 --- a/src/bonsai/bonsai/bim/module/georeference/__init__.py +++ b/src/bonsai/bonsai/bim/module/georeference/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddGeoreferencing, diff --git a/src/bonsai/bonsai/bim/module/georeference/data.py b/src/bonsai/bonsai/bim/module/georeference/data.py index 059368abc7..cf86314f9a 100644 --- a/src/bonsai/bonsai/bim/module/georeference/data.py +++ b/src/bonsai/bonsai/bim/module/georeference/data.py @@ -18,14 +18,15 @@ import bpy -import numpy as np -import bonsai.tool as tool import ifcopenshell.util.element import ifcopenshell.util.geolocation import ifcopenshell.util.schema import ifcopenshell.util.unit -from mathutils import Matrix, Vector +import numpy as np from ifcopenshell.util.doc import get_entity_doc +from mathutils import Matrix, Vector + +import bonsai.tool as tool def refresh(): diff --git a/src/bonsai/bonsai/bim/module/georeference/decorator.py b/src/bonsai/bonsai/bim/module/georeference/decorator.py index 01818e9805..6cece45cc8 100644 --- a/src/bonsai/bonsai/bim/module/georeference/decorator.py +++ b/src/bonsai/bonsai/bim/module/georeference/decorator.py @@ -16,18 +16,20 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy +from math import radians + import blf -import gpu import bmesh +import bpy +import gpu import ifcopenshell import ifcopenshell.util.geolocation -import bonsai.tool as tool -from math import radians from bpy.types import SpaceView3D -from mathutils import Vector, Matrix -from gpu_extras.batch import batch_for_shader from bpy_extras.view3d_utils import location_3d_to_region_2d +from gpu_extras.batch import batch_for_shader +from mathutils import Matrix, Vector + +import bonsai.tool as tool from bonsai.bim.module.georeference.data import GeoreferenceData diff --git a/src/bonsai/bonsai/bim/module/georeference/operator.py b/src/bonsai/bonsai/bim/module/georeference/operator.py index 7d8f98dd6c..6c82e6684c 100644 --- a/src/bonsai/bonsai/bim/module/georeference/operator.py +++ b/src/bonsai/bonsai/bim/module/georeference/operator.py @@ -17,10 +17,10 @@ # along with Bonsai. If not, see . import bpy - -import bonsai.tool as tool -import bonsai.core.georeference as core from bpy_extras.io_utils import ImportHelper + +import bonsai.core.georeference as core +import bonsai.tool as tool from bonsai.bim.module.georeference.decorator import GeoreferenceDecorator diff --git a/src/bonsai/bonsai/bim/module/georeference/prop.py b/src/bonsai/bonsai/bim/module/georeference/prop.py index 1b6088556b..5a1a37f06f 100644 --- a/src/bonsai/bonsai/bim/module/georeference/prop.py +++ b/src/bonsai/bonsai/bim/module/georeference/prop.py @@ -16,24 +16,26 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell.util.geolocation -import bonsai.tool as tool -from bonsai.bim.prop import Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup + +import bonsai.tool as tool from bonsai.bim.module.georeference.data import GeoreferenceData from bonsai.bim.module.georeference.decorator import GeoreferenceDecorator -from typing import TYPE_CHECKING +from bonsai.bim.prop import Attribute def get_coordinate_operation_class( diff --git a/src/bonsai/bonsai/bim/module/georeference/ui.py b/src/bonsai/bonsai/bim/module/georeference/ui.py index 3dfec3a9f5..93e16b0fbe 100644 --- a/src/bonsai/bonsai/bim/module/georeference/ui.py +++ b/src/bonsai/bonsai/bim/module/georeference/ui.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bonsai.tool as tool from bpy.types import Panel -from bonsai.bim.helper import draw_attributes, draw_attribute + +import bonsai.tool as tool +from bonsai.bim.helper import draw_attribute, draw_attributes from bonsai.bim.module.georeference.data import GeoreferenceData diff --git a/src/bonsai/bonsai/bim/module/gis/__init__.py b/src/bonsai/bonsai/bim/module/gis/__init__.py index 4f0707c693..2e0eeecad3 100644 --- a/src/bonsai/bonsai/bim/module/gis/__init__.py +++ b/src/bonsai/bonsai/bim/module/gis/__init__.py @@ -17,9 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import prop -from . import operator -from . import ui + +from . import operator, prop, ui classes = ( prop.BIMCityJsonProperties, diff --git a/src/bonsai/bonsai/bim/module/gis/prop.py b/src/bonsai/bonsai/bim/module/gis/prop.py index bbf12aeb07..1e6ae61614 100644 --- a/src/bonsai/bonsai/bim/module/gis/prop.py +++ b/src/bonsai/bonsai/bim/module/gis/prop.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from bpy.props import BoolProperty, CollectionProperty, EnumProperty, StringProperty from bpy.types import PropertyGroup -from bpy.props import StringProperty, BoolProperty, EnumProperty, CollectionProperty + from bonsai.bim.prop import StrProperty diff --git a/src/bonsai/bonsai/bim/module/group/__init__.py b/src/bonsai/bonsai/bim/module/group/__init__.py index 86e8536672..6fd4ed5408 100644 --- a/src/bonsai/bonsai/bim/module/group/__init__.py +++ b/src/bonsai/bonsai/bim/module/group/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddGroup, diff --git a/src/bonsai/bonsai/bim/module/group/data.py b/src/bonsai/bonsai/bim/module/group/data.py index 60b97e77f0..c7be2ff393 100644 --- a/src/bonsai/bonsai/bim/module/group/data.py +++ b/src/bonsai/bonsai/bim/module/group/data.py @@ -20,6 +20,7 @@ import bpy import ifcopenshell import ifcopenshell.util.cost import ifcopenshell.util.element + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/group/operator.py b/src/bonsai/bonsai/bim/module/group/operator.py index 40c3e418a1..66872ed90a 100644 --- a/src/bonsai/bonsai/bim/module/group/operator.py +++ b/src/bonsai/bonsai/bim/module/group/operator.py @@ -16,13 +16,15 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, get_args + import bpy import ifcopenshell.api import ifcopenshell.api.group import ifcopenshell.util.element + import bonsai.bim.helper import bonsai.tool as tool -from typing import TYPE_CHECKING, Literal, get_args class LoadGroups(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/group/prop.py b/src/bonsai/bonsai/bim/module/group/prop.py index e96f6f8a2a..48bff62e35 100644 --- a/src/bonsai/bonsai/bim/module/group/prop.py +++ b/src/bonsai/bonsai/bim/module/group/prop.py @@ -16,22 +16,24 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.pset.data import refresh as refresh_pset -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Union +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.pset.data import refresh as refresh_pset +from bonsai.bim.prop import Attribute, StrProperty def update_active_group_index(self, context): diff --git a/src/bonsai/bonsai/bim/module/group/ui.py b/src/bonsai/bonsai/bim/module/group/ui.py index ac437e9c42..a9620c8ffc 100644 --- a/src/bonsai/bonsai/bim/module/group/ui.py +++ b/src/bonsai/bonsai/bim/module/group/ui.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING + import bpy -import bonsai.tool as tool from bpy.types import Panel, UIList + +import bonsai.tool as tool from bonsai.bim.helper import draw_attributes from bonsai.bim.module.group.data import GroupsData, ObjectGroupsData -from typing import TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.group.prop import BIMGroupProperties, Group diff --git a/src/bonsai/bonsai/bim/module/ifcgit/__init__.py b/src/bonsai/bonsai/bim/module/ifcgit/__init__.py index ae946e4e9d..df47b7774c 100644 --- a/src/bonsai/bonsai/bim/module/ifcgit/__init__.py +++ b/src/bonsai/bonsai/bim/module/ifcgit/__init__.py @@ -16,8 +16,8 @@ # Massimo Fabbro import bpy -from . import ui, prop, operator +from . import operator, prop, ui classes = ( operator.AddFileToRepo, diff --git a/src/bonsai/bonsai/bim/module/ifcgit/data.py b/src/bonsai/bonsai/bim/module/ifcgit/data.py index 18ffe0e55c..9cb9f2655d 100644 --- a/src/bonsai/bonsai/bim/module/ifcgit/data.py +++ b/src/bonsai/bonsai/bim/module/ifcgit/data.py @@ -1,7 +1,8 @@ -import bpy import os import shutil +import bpy + # import tool import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/ifcgit/operator.py b/src/bonsai/bonsai/bim/module/ifcgit/operator.py index 8457c69fc7..829a0a62a2 100644 --- a/src/bonsai/bonsai/bim/module/ifcgit/operator.py +++ b/src/bonsai/bonsai/bim/module/ifcgit/operator.py @@ -1,10 +1,12 @@ import os import re +from typing import TYPE_CHECKING + import bpy + import bonsai.core.ifcgit as core import bonsai.tool as tool from bonsai.bim.module.ifcgit.data import IfcGitData, refresh -from typing import TYPE_CHECKING class CreateRepo(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/ifcgit/prop.py b/src/bonsai/bonsai/bim/module/ifcgit/prop.py index 128cfcd44b..cba3ca632c 100644 --- a/src/bonsai/bonsai/bim/module/ifcgit/prop.py +++ b/src/bonsai/bonsai/bim/module/ifcgit/prop.py @@ -1,15 +1,17 @@ +from typing import TYPE_CHECKING, Literal + import bpy -import bonsai.tool as tool -from bpy.types import PropertyGroup from bpy.props import ( - StringProperty, BoolProperty, CollectionProperty, - IntProperty, EnumProperty, + IntProperty, + StringProperty, ) +from bpy.types import PropertyGroup + +import bonsai.tool as tool from bonsai.bim.module.ifcgit.data import IfcGitData -from typing import TYPE_CHECKING, Literal def git_branches(self: "IfcGitProperties", context: bpy.types.Context) -> tool.Blender.BLENDER_ENUM_ITEMS: diff --git a/src/bonsai/bonsai/bim/module/ifcgit/ui.py b/src/bonsai/bonsai/bim/module/ifcgit/ui.py index 631f33c7e1..d8b7357e7b 100644 --- a/src/bonsai/bonsai/bim/module/ifcgit/ui.py +++ b/src/bonsai/bonsai/bim/module/ifcgit/ui.py @@ -1,15 +1,17 @@ from __future__ import annotations -import bpy -import time + import os import platform -import bonsai.tool as tool +import time from typing import TYPE_CHECKING +import bpy + +import bonsai.tool as tool from bonsai.bim.module.ifcgit.data import IfcGitData if TYPE_CHECKING: - from bonsai.bim.module.ifcgit.prop import IfcGitProperties, IfcGitListItem + from bonsai.bim.module.ifcgit.prop import IfcGitListItem, IfcGitProperties class IFCGIT_PT_panel(bpy.types.Panel): diff --git a/src/bonsai/bonsai/bim/module/layer/__init__.py b/src/bonsai/bonsai/bim/module/layer/__init__.py index 9ee1c57fb4..06d5175833 100644 --- a/src/bonsai/bonsai/bim/module/layer/__init__.py +++ b/src/bonsai/bonsai/bim/module/layer/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddPresentationLayer, diff --git a/src/bonsai/bonsai/bim/module/layer/data.py b/src/bonsai/bonsai/bim/module/layer/data.py index f55b4c2900..4550d3257e 100644 --- a/src/bonsai/bonsai/bim/module/layer/data.py +++ b/src/bonsai/bonsai/bim/module/layer/data.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any + import bpy import ifcopenshell + import bonsai.tool as tool -from typing import Any def refresh(): diff --git a/src/bonsai/bonsai/bim/module/layer/operator.py b/src/bonsai/bonsai/bim/module/layer/operator.py index d1b5a0580b..8475bebd54 100644 --- a/src/bonsai/bonsai/bim/module/layer/operator.py +++ b/src/bonsai/bonsai/bim/module/layer/operator.py @@ -16,13 +16,15 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell.api import ifcopenshell.api.layer import ifcopenshell.util.element + import bonsai.bim.helper import bonsai.tool as tool -from typing import TYPE_CHECKING def get_active_mesh(context: bpy.types.Context, mesh_name: str) -> bpy.types.Mesh: diff --git a/src/bonsai/bonsai/bim/module/layer/prop.py b/src/bonsai/bonsai/bim/module/layer/prop.py index 079ba262de..26a6c3680d 100644 --- a/src/bonsai/bonsai/bim/module/layer/prop.py +++ b/src/bonsai/bonsai/bim/module/layer/prop.py @@ -16,21 +16,23 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.prop import Attribute, StrProperty def update_layer_property(self: "Layer", context: bpy.types.Context, *, property: str) -> None: diff --git a/src/bonsai/bonsai/bim/module/layer/ui.py b/src/bonsai/bonsai/bim/module/layer/ui.py index d7fcdec215..b4de131ad6 100644 --- a/src/bonsai/bonsai/bim/module/layer/ui.py +++ b/src/bonsai/bonsai/bim/module/layer/ui.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING + import bpy +from bpy.types import Mesh, Panel, UIList + import bonsai.tool as tool -from bpy.types import Panel, UIList, Mesh from bonsai.bim.helper import draw_attributes from bonsai.bim.module.layer.data import LayersData -from typing import TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.layer.prop import BIMLayerProperties, Layer diff --git a/src/bonsai/bonsai/bim/module/library/__init__.py b/src/bonsai/bonsai/bim/module/library/__init__.py index 5017772cfe..a3ef2c3060 100644 --- a/src/bonsai/bonsai/bim/module/library/__init__.py +++ b/src/bonsai/bonsai/bim/module/library/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddLibrary, diff --git a/src/bonsai/bonsai/bim/module/library/data.py b/src/bonsai/bonsai/bim/module/library/data.py index 87ad7c23ae..0d26369035 100644 --- a/src/bonsai/bonsai/bim/module/library/data.py +++ b/src/bonsai/bonsai/bim/module/library/data.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/library/operator.py b/src/bonsai/bonsai/bim/module/library/operator.py index 6f4e971465..6c7abe8be5 100644 --- a/src/bonsai/bonsai/bim/module/library/operator.py +++ b/src/bonsai/bonsai/bim/module/library/operator.py @@ -18,8 +18,9 @@ import bpy import ifcopenshell.api -import bonsai.tool as tool + import bonsai.core.library as core +import bonsai.tool as tool class AddLibrary(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/library/prop.py b/src/bonsai/bonsai/bim/module/library/prop.py index 24defdf9ea..69647c195f 100644 --- a/src/bonsai/bonsai/bim/module/library/prop.py +++ b/src/bonsai/bonsai/bim/module/library/prop.py @@ -16,22 +16,24 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.library.data import LibrariesData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.library.data import LibrariesData +from bonsai.bim.prop import Attribute, StrProperty def update_active_reference_index(self, context): diff --git a/src/bonsai/bonsai/bim/module/library/ui.py b/src/bonsai/bonsai/bim/module/library/ui.py index bfc64e3020..f76e6a3251 100644 --- a/src/bonsai/bonsai/bim/module/library/ui.py +++ b/src/bonsai/bonsai/bim/module/library/ui.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING + import bpy +from bpy.types import Panel, UIList + import bonsai.bim.helper import bonsai.tool as tool -from bpy.types import Panel, UIList from bonsai.bim.module.library.data import LibrariesData, LibraryReferencesData -from typing import TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.library.prop import BIMLibraryProperties, LibraryReference diff --git a/src/bonsai/bonsai/bim/module/light/__init__.py b/src/bonsai/bonsai/bim/module/light/__init__.py index 2785bba125..1bfe11be7a 100644 --- a/src/bonsai/bonsai/bim/module/light/__init__.py +++ b/src/bonsai/bonsai/bim/module/light/__init__.py @@ -16,17 +16,17 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -from . import ui, prop, operator, list - -import stat -from pathlib import Path - import importlib import importlib.util +import stat import traceback +from pathlib import Path + +import bpy import pyradiance +from . import list, operator, prop, ui + def get_pyradiance_path(): return importlib.util.find_spec("pyradiance").submodule_search_locations[0] diff --git a/src/bonsai/bonsai/bim/module/light/data.py b/src/bonsai/bonsai/bim/module/light/data.py index abe9d9e87d..d708b6170f 100644 --- a/src/bonsai/bonsai/bim/module/light/data.py +++ b/src/bonsai/bonsai/bim/module/light/data.py @@ -17,10 +17,11 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool import ifcopenshell.util.geolocation from mathutils import Vector +import bonsai.tool as tool + def refresh(): SolarData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/light/decorator.py b/src/bonsai/bonsai/bim/module/light/decorator.py index 77cd20ddbd..9cfb9ae186 100644 --- a/src/bonsai/bonsai/bim/module/light/decorator.py +++ b/src/bonsai/bonsai/bim/module/light/decorator.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy +from math import degrees, radians + import blf -import gpu import bmesh -import bonsai.tool as tool +import bpy +import gpu from bpy.types import SpaceView3D -from math import radians, degrees -from mathutils import Vector, Matrix -from gpu_extras.batch import batch_for_shader from bpy_extras.view3d_utils import location_3d_to_region_2d +from gpu_extras.batch import batch_for_shader +from mathutils import Matrix, Vector + +import bonsai.tool as tool from bonsai.bim.module.light.data import SolarData diff --git a/src/bonsai/bonsai/bim/module/light/list.py b/src/bonsai/bonsai/bim/module/light/list.py index 6eaa1f4c79..ff6b7ae4bd 100644 --- a/src/bonsai/bonsai/bim/module/light/list.py +++ b/src/bonsai/bonsai/bim/module/light/list.py @@ -17,13 +17,18 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + import json import os from typing import TYPE_CHECKING +import bpy + if TYPE_CHECKING: - from bonsai.bim.module.light.prop import RadianceExporterProperties, RadianceMaterial + from bonsai.bim.module.light.prop import ( + RadianceExporterProperties, + RadianceMaterial, + ) with open(os.path.join(os.path.dirname(__file__), "spectraldb.json"), "r") as f: spectraldb = json.load(f) diff --git a/src/bonsai/bonsai/bim/module/light/operator.py b/src/bonsai/bonsai/bim/module/light/operator.py index 4a8d993e0e..41bae9179c 100644 --- a/src/bonsai/bonsai/bim/module/light/operator.py +++ b/src/bonsai/bonsai/bim/module/light/operator.py @@ -16,28 +16,28 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os - -import pyradiance as pr -from datetime import datetime -import bpy -import bonsai.tool as tool -from pathlib import Path -from typing import Union, TYPE_CHECKING import json import math -import time -import ifcopenshell -import ifcopenshell.util.geolocation -import webbrowser -import ifcopenshell.geom import multiprocessing -import requests +import os +import time +import webbrowser +from datetime import datetime from math import radians +from pathlib import Path +from typing import TYPE_CHECKING, Union + +import bpy +import ifcopenshell +import ifcopenshell.geom +import ifcopenshell.util.geolocation +import pyradiance as pr +import requests +from bpy_extras.io_utils import ExportHelper, ImportHelper from mathutils import Vector + +import bonsai.tool as tool from bonsai.bim.module.light.data import SolarData -from bpy_extras.io_utils import ExportHelper -from bpy_extras.io_utils import ImportHelper ifc_materials = [] diff --git a/src/bonsai/bonsai/bim/module/light/prop.py b/src/bonsai/bonsai/bim/module/light/prop.py index e538ca1bf2..d3498f18b8 100644 --- a/src/bonsai/bonsai/bim/module/light/prop.py +++ b/src/bonsai/bonsai/bim/module/light/prop.py @@ -16,27 +16,29 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import datetime +import json +import os +from math import pi, radians +from typing import TYPE_CHECKING, Literal, Union + import bpy import pytz import tzfpy -import json -import datetime -import bonsai.tool as tool -from typing import TYPE_CHECKING, Literal, Union -from math import radians, pi -from mathutils import Euler, Vector, Matrix, Quaternion from bpy.props import ( - IntProperty, - StringProperty, + BoolProperty, + CollectionProperty, EnumProperty, FloatProperty, FloatVectorProperty, - BoolProperty, - CollectionProperty, + IntProperty, PointerProperty, + StringProperty, ) -import os from bpy.types import PropertyGroup +from mathutils import Euler, Matrix, Quaternion, Vector + +import bonsai.tool as tool from bonsai.bim.module.light.data import SolarData from bonsai.bim.module.light.decorator import SolarDecorator diff --git a/src/bonsai/bonsai/bim/module/light/ui.py b/src/bonsai/bonsai/bim/module/light/ui.py index 0f0ffc09cb..cd4bdbb362 100644 --- a/src/bonsai/bonsai/bim/module/light/ui.py +++ b/src/bonsai/bonsai/bim/module/light/ui.py @@ -17,9 +17,11 @@ # along with Bonsai. If not, see . import calendar -import bpy -import bonsai.tool as tool from typing import TYPE_CHECKING + +import bpy + +import bonsai.tool as tool from bonsai.bim.module.light.data import SolarData diff --git a/src/bonsai/bonsai/bim/module/material/__init__.py b/src/bonsai/bonsai/bim/module/material/__init__.py index c7f7756bc9..5f14b170ee 100644 --- a/src/bonsai/bonsai/bim/module/material/__init__.py +++ b/src/bonsai/bonsai/bim/module/material/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddConstituent, diff --git a/src/bonsai/bonsai/bim/module/material/data.py b/src/bonsai/bonsai/bim/module/material/data.py index b56ff93e33..36c93add4f 100644 --- a/src/bonsai/bonsai/bim/module/material/data.py +++ b/src/bonsai/bonsai/bim/module/material/data.py @@ -17,15 +17,17 @@ # along with Bonsai. If not, see . import os +from typing import Any, Union + import bpy import ifcopenshell -import ifcopenshell.util.element import ifcopenshell.util.doc +import ifcopenshell.util.element import ifcopenshell.util.schema +from natsort import natsorted + import bonsai.tool as tool from bonsai.bim.module.drawing.helper import format_distance -from typing import Any, Union -from natsort import natsorted def refresh(): diff --git a/src/bonsai/bonsai/bim/module/material/operator.py b/src/bonsai/bonsai/bim/module/material/operator.py index f46f2c7b6a..81ef17e6e4 100644 --- a/src/bonsai/bonsai/bim/module/material/operator.py +++ b/src/bonsai/bonsai/bim/module/material/operator.py @@ -16,20 +16,22 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json +from typing import TYPE_CHECKING, Any, Literal, Union + +import bpy import ifcopenshell.api import ifcopenshell.api.material import ifcopenshell.api.profile import ifcopenshell.api.style import ifcopenshell.util.element import ifcopenshell.util.representation + import bonsai.bim.helper -import bonsai.tool as tool -import bonsai.core.material as core import bonsai.bim.module.model.profile as model_profile -from typing import Any, Union, TYPE_CHECKING, Literal -from bonsai.bim.module.model import wall, slab +import bonsai.core.material as core +import bonsai.tool as tool +from bonsai.bim.module.model import slab, wall if TYPE_CHECKING: from bonsai.bim.prop import Attribute diff --git a/src/bonsai/bonsai/bim/module/material/prop.py b/src/bonsai/bonsai/bim/module/material/prop.py index 2fbd8d2847..27567ab27e 100644 --- a/src/bonsai/bonsai/bim/module/material/prop.py +++ b/src/bonsai/bonsai/bim/module/material/prop.py @@ -16,26 +16,28 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import ifcopenshell +from typing import TYPE_CHECKING + import bpy +import ifcopenshell +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + PointerProperty, + StringProperty, +) +from bpy.types import PropertyGroup from ifcopenshell.util.doc import get_entity_doc + import bonsai.tool as tool from bonsai.bim.module.classification.data import MaterialClassificationsData from bonsai.bim.module.material.data import MaterialsData, ObjectMaterialData from bonsai.bim.module.profile.data import ProfileData -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) -from typing import TYPE_CHECKING +from bonsai.bim.prop import Attribute, StrProperty def get_profile_classes(self, context): diff --git a/src/bonsai/bonsai/bim/module/material/ui.py b/src/bonsai/bonsai/bim/module/material/ui.py index db05276d9b..2ac1908327 100644 --- a/src/bonsai/bonsai/bim/module/material/ui.py +++ b/src/bonsai/bonsai/bim/module/material/ui.py @@ -17,19 +17,21 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bonsai.bim.helper -import bonsai.tool as tool + +from typing import TYPE_CHECKING, Any + import bpy import ifcopenshell.util.element import ifcopenshell.util.unit from bpy.types import Panel, UIList -from bonsai.bim.helper import draw_attributes -from bonsai.bim.helper import prop_with_search + +import bonsai.bim.helper +import bonsai.tool as tool +from bonsai.bim.helper import draw_attributes, prop_with_search from bonsai.bim.module.material.data import MaterialsData, ObjectMaterialData -from typing import TYPE_CHECKING, Any if TYPE_CHECKING: - from bonsai.bim.module.material.prop import Material, BIMMaterialProperties + from bonsai.bim.module.material.prop import BIMMaterialProperties, Material class BIM_PT_materials(Panel): diff --git a/src/bonsai/bonsai/bim/module/misc/__init__.py b/src/bonsai/bonsai/bim/module/misc/__init__.py index 31926217fc..a71e467b7f 100644 --- a/src/bonsai/bonsai/bim/module/misc/__init__.py +++ b/src/bonsai/bonsai/bim/module/misc/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.DrawSystemArrows, diff --git a/src/bonsai/bonsai/bim/module/misc/operator.py b/src/bonsai/bonsai/bim/module/misc/operator.py index ee3c592f3e..33703331f8 100644 --- a/src/bonsai/bonsai/bim/module/misc/operator.py +++ b/src/bonsai/bonsai/bim/module/misc/operator.py @@ -16,18 +16,20 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, assert_never, get_args + import bpy -import numpy as np import ifcopenshell import ifcopenshell.util.geolocation import ifcopenshell.util.placement import ifcopenshell.util.unit -import bonsai.tool as tool -import bonsai.core.misc as core +import numpy as np +from mathutils import Euler, Matrix, Vector + import bonsai.core.geometry as core_geometry +import bonsai.core.misc as core import bonsai.core.root -from mathutils import Vector, Matrix, Euler -from typing import TYPE_CHECKING, Literal, get_args, assert_never +import bonsai.tool as tool class SetOverrideColour(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/misc/prop.py b/src/bonsai/bonsai/bim/module/misc/prop.py index 3201cbd94d..889e1f5099 100644 --- a/src/bonsai/bonsai/bim/module/misc/prop.py +++ b/src/bonsai/bonsai/bim/module/misc/prop.py @@ -17,18 +17,19 @@ # along with Bonsai. If not, see . import bpy -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup + +from bonsai.bim.prop import Attribute, StrProperty class BIMMiscProperties(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index c758aa7f54..57b4b561d0 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -16,33 +16,33 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import NamedTuple + import bpy + from . import ( - handler, - prop, - ui, - grid, array, + covering, + door, + external, + grid, + handler, + mep, + opening, product, - wall, + profile, + prop, + railing, roof, slab, space, - covering, stair, - window, - opening, - mep, - workspace, - profile, sverchok_modifier, - door, - railing, - roof, - mep, - external, + ui, + wall, + window, + workspace, ) -from typing import NamedTuple classes = ( array.AddArray, diff --git a/src/bonsai/bonsai/bim/module/model/array.py b/src/bonsai/bonsai/bim/module/model/array.py index ec1bce2096..3fb9360256 100644 --- a/src/bonsai/bonsai/bim/module/model/array.py +++ b/src/bonsai/bonsai/bim/module/model/array.py @@ -16,15 +16,17 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset import ifcopenshell.util.element import ifcopenshell.util.unit +from mathutils import Matrix, Vector + import bonsai.tool as tool -from mathutils import Vector, Matrix class AddArray(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/model/covering.py b/src/bonsai/bonsai/bim/module/model/covering.py index 72eba944d1..468554b9be 100644 --- a/src/bonsai/bonsai/bim/module/model/covering.py +++ b/src/bonsai/bonsai/bim/module/model/covering.py @@ -20,8 +20,9 @@ import bpy import ifcopenshell import ifcopenshell.util.element -import bonsai.tool as tool + import bonsai.core.covering as core +import bonsai.tool as tool class AddInstanceFlooringCoveringFromCursor(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/model/data.py b/src/bonsai/bonsai/bim/module/model/data.py index 649b92b325..0b97e05e77 100644 --- a/src/bonsai/bonsai/bim/module/model/data.py +++ b/src/bonsai/bonsai/bim/module/model/data.py @@ -16,17 +16,19 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import math import json +import math +from math import degrees +from typing import Any, Optional, Union + +import bpy import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.schema from ifcopenshell.util.doc import get_entity_doc, get_predefined_type_doc -import bonsai.tool as tool -from math import degrees from natsort import natsorted -from typing import Union, Optional, Any + +import bonsai.tool as tool def refresh(): diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index 00e733b397..328804d4c6 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -17,26 +17,27 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + +import math +from itertools import chain +from math import cos, radians, sin, tan +from typing import Any, Literal, Union + import blf +import bmesh import bpy import gpu -import bmesh import ifcopenshell -import bonsai.tool as tool -import math import mathutils -from math import sin, cos, tan, radians from bpy.types import SpaceView3D from bpy_extras import view3d_utils -from mathutils import Vector, Matrix, Quaternion +from bpy_extras.view3d_utils import location_3d_to_region_2d from gpu_extras.batch import batch_for_shader from gpu_extras.presets import draw_circle_2d -from typing import Union +from mathutils import Matrix, Quaternion, Vector + +import bonsai.tool as tool from bonsai.bim.module.drawing.helper import format_distance -from itertools import chain -from typing import Union, Any, Literal -from bpy_extras.view3d_utils import location_3d_to_region_2d def transparent_color(color, alpha=0.1): diff --git a/src/bonsai/bonsai/bim/module/model/door.py b/src/bonsai/bonsai/bim/module/model/door.py index 26d1a1a7fb..dbdf5e8dcf 100644 --- a/src/bonsai/bonsai/bim/module/model/door.py +++ b/src/bonsai/bonsai/bim/module/model/door.py @@ -17,8 +17,13 @@ # along with Bonsai. If not, see . -import bpy +import collections +import collections.abc +import json +from typing import TYPE_CHECKING, get_args + import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry @@ -28,19 +33,14 @@ import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.schema import ifcopenshell.util.unit -import bonsai.tool as tool +from mathutils import Matrix, Vector + import bonsai.core.geometry as core import bonsai.core.root -from bonsai.bim.module.model.window import create_bm_window, create_bm_box +import bonsai.tool as tool from bonsai.bim.module.drawing import gizmos as gizmo from bonsai.bim.module.drawing.gizmos import DimensionGizmoConfig - -from mathutils import Vector, Matrix - -import json -import collections -import collections.abc -from typing import get_args, TYPE_CHECKING +from bonsai.bim.module.model.window import create_bm_box, create_bm_window if TYPE_CHECKING: from bonsai.bim.module.model.prop import BIMDoorProperties diff --git a/src/bonsai/bonsai/bim/module/model/grid.py b/src/bonsai/bonsai/bim/module/model/grid.py index 4bac1b3f94..df4f140ebc 100644 --- a/src/bonsai/bonsai/bim/module/model/grid.py +++ b/src/bonsai/bonsai/bim/module/model/grid.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell.api import ifcopenshell.api.grid -import bonsai.tool as tool +from bpy.props import FloatProperty, IntProperty +from bpy.types import Operator +from mathutils import Vector + import bonsai.core.geometry import bonsai.core.root -from bpy.types import Operator -from bpy.props import FloatProperty, IntProperty -from mathutils import Vector -from typing import TYPE_CHECKING +import bonsai.tool as tool def add_object(self: "BIM_OT_add_object", context: bpy.types.Context) -> None: diff --git a/src/bonsai/bonsai/bim/module/model/handler.py b/src/bonsai/bonsai/bim/module/model/handler.py index 76ebbf57ee..26a4863837 100644 --- a/src/bonsai/bonsai/bim/module/model/handler.py +++ b/src/bonsai/bonsai/bim/module/model/handler.py @@ -19,9 +19,10 @@ import bpy import ifcopenshell import ifcopenshell.api -from bonsai.bim.module.model import product, wall, slab, profile, opening, task from bpy.app.handlers import persistent +from bonsai.bim.module.model import opening, product, profile, slab, task, wall + @persistent def load_post(*args): diff --git a/src/bonsai/bonsai/bim/module/model/mep.py b/src/bonsai/bonsai/bim/module/model/mep.py index ab96e60b0d..cdb2538d28 100644 --- a/src/bonsai/bonsai/bim/module/model/mep.py +++ b/src/bonsai/bonsai/bim/module/model/mep.py @@ -16,13 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import math import collections import collections.abc -import bmesh -import re import json +import math +import re +from copy import copy +from math import asin, cos, degrees, pi, radians, sin, tan + +import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry @@ -35,14 +38,13 @@ import ifcopenshell.util.representation import ifcopenshell.util.system import ifcopenshell.util.unit import numpy as np -import bonsai.core.type -import bonsai.core.root -import bonsai.core.geometry -import bonsai.tool as tool -from math import pi, degrees, radians, sin, cos, asin, tan -from copy import copy -from mathutils import Vector, Matrix from ifcopenshell.util.shape_builder import ShapeBuilder +from mathutils import Matrix, Vector + +import bonsai.core.geometry +import bonsai.core.root +import bonsai.core.type +import bonsai.tool as tool from bonsai.bim.module.model.profile import DumbProfileJoiner from bonsai.tool.cad import VTX_PRECISION diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index 256251b06c..b0806ec33d 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -16,38 +16,39 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import json +import logging +from collections import defaultdict +from collections.abc import Sequence +from math import pi, radians +from typing import Any, Optional, Union, cast + +import bmesh import bpy import gpu -import json -import bmesh -import shapely -import logging -import numpy as np import ifcopenshell import ifcopenshell.api -import ifcopenshell.api.geometry import ifcopenshell.api.feature +import ifcopenshell.api.geometry import ifcopenshell.api.root import ifcopenshell.geom -import ifcopenshell.util.shape import ifcopenshell.util.element -import ifcopenshell.util.shape_builder import ifcopenshell.util.placement import ifcopenshell.util.representation +import ifcopenshell.util.shape +import ifcopenshell.util.shape_builder import ifcopenshell.util.unit -import bonsai.tool as tool -import bonsai.core.geometry -import bonsai.bim.import_ifc as import_ifc -from collections import defaultdict -from math import pi, radians -from mathutils import Vector, Matrix, Euler -from bpy.types import Operator -from bpy.types import SpaceView3D +import numpy as np +import shapely from bpy.props import FloatProperty +from bpy.types import Operator, SpaceView3D from bpy_extras.object_utils import AddObjectHelper, object_data_add from gpu_extras.batch import batch_for_shader -from typing import Union, Optional, Any, cast -from collections.abc import Sequence +from mathutils import Euler, Matrix, Vector + +import bonsai.bim.import_ifc as import_ifc +import bonsai.core.geometry +import bonsai.tool as tool from bonsai.bim.module.drawing.decoration import DecoratorData diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index d2514321f3..de169796f6 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -17,28 +17,31 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + import copy import math +from typing import Any, Literal, Optional, Union + import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.geom -import ifcopenshell.util.unit import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.type +import ifcopenshell.util.unit import mathutils.geometry -import bonsai.core.type -import bonsai.core.root +from lark import Lark, Transformer +from mathutils import Vector + import bonsai.core.geometry import bonsai.core.model as core +import bonsai.core.root +import bonsai.core.type import bonsai.tool as tool -from mathutils import Vector from bonsai.bim.module.model.decorator import PolylineDecorator -from typing import Optional, Union, Literal, Any -from lark import Lark, Transformer class PolylineOperator: diff --git a/src/bonsai/bonsai/bim/module/model/product.py b/src/bonsai/bonsai/bim/module/model/product.py index 191a9406fe..822342ab75 100644 --- a/src/bonsai/bonsai/bim/module/model/product.py +++ b/src/bonsai/bonsai/bim/module/model/product.py @@ -18,38 +18,41 @@ # # pyright: reportUnnecessaryTypeIgnoreComment=error -import bpy +import json +from typing import TYPE_CHECKING, Any, Literal, Optional, Union, assert_never, get_args + import bmesh -import mathutils -import numpy as np +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.api.system -import ifcopenshell.util.system import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape_builder +import ifcopenshell.util.system import ifcopenshell.util.type import ifcopenshell.util.unit -import bonsai.tool as tool +import mathutils +import numpy as np +from bpy_extras.object_utils import AddObjectHelper +from mathutils import Matrix, Vector + import bonsai.core.aggregate -import bonsai.core.type -import bonsai.core.root import bonsai.core.geometry import bonsai.core.model as core +import bonsai.core.root import bonsai.core.spatial -from . import wall, slab, profile, mep -from bonsai.bim.ifc import IfcStore +import bonsai.core.type +import bonsai.tool as tool from bonsai.bim.helper import get_enum_items +from bonsai.bim.ifc import IfcStore from bonsai.bim.module.model.data import AuthoringData -from bonsai.bim.module.model.polyline import PolylineOperator from bonsai.bim.module.model.decorator import PolylineDecorator, ProductDecorator -from mathutils import Vector, Matrix -from bpy_extras.object_utils import AddObjectHelper -import json -from typing import Any, Union, Optional, Literal, get_args, assert_never, TYPE_CHECKING +from bonsai.bim.module.model.polyline import PolylineOperator + +from . import mep, profile, slab, wall class AddEmptyType(bpy.types.Operator, AddObjectHelper): diff --git a/src/bonsai/bonsai/bim/module/model/profile.py b/src/bonsai/bonsai/bim/module/model/profile.py index 80c7ccc20e..124a70707f 100644 --- a/src/bonsai/bonsai/bim/module/model/profile.py +++ b/src/bonsai/bonsai/bim/module/model/profile.py @@ -16,32 +16,37 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import copy +from math import atan2, degrees, pi +from typing import Any, Literal, Optional, Union + import bmesh -import mathutils.geometry +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.api.pset import ifcopenshell.api.type -import ifcopenshell.util.type -import ifcopenshell.util.unit import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation -import bonsai.tool as tool -import bonsai.core.type +import ifcopenshell.util.type +import ifcopenshell.util.unit +import mathutils.geometry +from mathutils import Matrix, Vector + import bonsai.core.geometry import bonsai.core.material import bonsai.core.root +import bonsai.core.type +import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from math import pi, degrees, atan2 -from mathutils import Vector, Matrix -from bonsai.bim.module.model.decorator import ProfileDecorator, PolylineDecorator, ProductDecorator +from bonsai.bim.module.model.decorator import ( + PolylineDecorator, + ProductDecorator, + ProfileDecorator, +) from bonsai.bim.module.model.polyline import PolylineOperator -from typing import Union, Any, Optional, Literal - ProfileFrom2PointsReturn = Union[dict[str, Any], None] diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 4c3466d325..9f2664190d 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -16,22 +16,28 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import math +from collections.abc import Callable +from math import pi, radians +from typing import TYPE_CHECKING, Any, Literal, Optional, Union, get_args + import bpy import ifcopenshell import ifcopenshell.util.element +from bpy.types import NodeTree, PropertyGroup +from mathutils import Vector + import bonsai.tool as tool -import math -from bonsai.bim.prop import ObjProperty +from bonsai.bim.module.drawing.decoration import CutDecorator from bonsai.bim.module.model.data import AuthoringData -from bpy.types import PropertyGroup, NodeTree -from math import pi, radians -from bonsai.bim.module.model.decorator import WallAxisDecorator, SlabDirectionDecorator, BoundingBoxDecorator +from bonsai.bim.module.model.decorator import ( + BoundingBoxDecorator, + SlabDirectionDecorator, + WallAxisDecorator, +) from bonsai.bim.module.model.door import update_door_modifier_bmesh from bonsai.bim.module.model.window import update_window_modifier_bmesh -from bonsai.bim.module.drawing.decoration import CutDecorator -from typing import TYPE_CHECKING, Literal, get_args, Union, Any, Optional -from collections.abc import Callable -from mathutils import Vector +from bonsai.bim.prop import ObjProperty if TYPE_CHECKING: import sverchok.node_tree diff --git a/src/bonsai/bonsai/bim/module/model/railing.py b/src/bonsai/bonsai/bim/module/model/railing.py index 4f6fc348f0..624b1b64a7 100644 --- a/src/bonsai/bonsai/bim/module/model/railing.py +++ b/src/bonsai/bonsai/bim/module/model/railing.py @@ -17,24 +17,25 @@ # along with Bonsai. If not, see . -import bpy +import json +from typing import Any + import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry import ifcopenshell.api.pset import ifcopenshell.util.representation import ifcopenshell.util.unit -import bonsai.core.root +from mathutils import Vector + import bonsai.core.geometry +import bonsai.core.root import bonsai.tool as tool from bonsai.bim.module.model.data import RailingData, refresh from bonsai.bim.module.model.decorator import ProfileDecorator -from mathutils import Vector -import json -from typing import Any - # reference: # https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRailing.htm # https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRailingType.htm diff --git a/src/bonsai/bonsai/bim/module/model/roof.py b/src/bonsai/bonsai/bim/module/model/roof.py index daf41b86dd..4038faa993 100644 --- a/src/bonsai/bonsai/bim/module/model/roof.py +++ b/src/bonsai/bonsai/bim/module/model/roof.py @@ -16,27 +16,27 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bmesh +import json +from math import cos, pi, radians, tan +from typing import Any, Literal, Union +import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset import ifcopenshell.util.representation import ifcopenshell.util.unit +import mathutils.geometry +import shapely +from bpypolyskel import bpypolyskel +from mathutils import Matrix, Quaternion, Vector + import bonsai.core.root import bonsai.tool as tool from bonsai.bim.module.model.data import RoofData, refresh from bonsai.bim.module.model.decorator import ProfileDecorator -import json -from math import cos, tan, pi, radians -from mathutils import Vector, Matrix, Quaternion -import mathutils.geometry -from bpypolyskel import bpypolyskel -import shapely -from typing import Literal, Union, Any - # reference: # https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoof.htm # https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoofType.htm diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index 46ea91dc08..1d673aca8e 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -16,9 +16,12 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json +from math import acos, cos, degrees, pi, sin +from typing import Optional + import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry @@ -28,18 +31,21 @@ import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation -import ifcopenshell.util.unit import ifcopenshell.util.type -import bonsai.core.type +import ifcopenshell.util.unit +from mathutils import Matrix, Vector + import bonsai.core.geometry import bonsai.core.root +import bonsai.core.type import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from math import cos, sin, pi, acos, degrees -from mathutils import Vector, Matrix -from bonsai.bim.module.model.decorator import ProfileDecorator, PolylineDecorator, ProductDecorator +from bonsai.bim.module.model.decorator import ( + PolylineDecorator, + ProductDecorator, + ProfileDecorator, +) from bonsai.bim.module.model.polyline import PolylineOperator -from typing import Optional class DumbSlabGenerator: diff --git a/src/bonsai/bonsai/bim/module/model/space.py b/src/bonsai/bonsai/bim/module/model/space.py index aeebea071b..baa7401358 100644 --- a/src/bonsai/bonsai/bim/module/model/space.py +++ b/src/bonsai/bonsai/bim/module/model/space.py @@ -18,8 +18,9 @@ import bpy -import bonsai.tool as tool + import bonsai.core.spatial as core +import bonsai.tool as tool class GenerateSpace(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/model/stair.py b/src/bonsai/bonsai/bim/module/model/stair.py index 91ddeccbc3..5b52308542 100644 --- a/src/bonsai/bonsai/bim/module/model/stair.py +++ b/src/bonsai/bonsai/bim/module/model/stair.py @@ -16,25 +16,32 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json + import bmesh +import bpy import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.unit +from mathutils import Matrix, Vector + import bonsai.core.root import bonsai.tool as tool from bonsai.bim.module.drawing import gizmos as gizmo from bonsai.bim.module.drawing.gizmos import DimensionGizmoConfig -from bonsai.tool.numeric_input import IntegerInputState, run_integer_input_modal, update_header -from mathutils import Vector, Matrix +from bonsai.tool.numeric_input import ( + IntegerInputState, + run_integer_input_modal, + update_header, +) V_ = tool.Blender.V_ +from typing import TYPE_CHECKING, get_args + from bmesh.types import BMVert from bpy.props import IntProperty -from typing import get_args, TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.model.prop import BIMStairProperties diff --git a/src/bonsai/bonsai/bim/module/model/sverchok_modifier.py b/src/bonsai/bonsai/bim/module/model/sverchok_modifier.py index d30852f1eb..0a318b1fb1 100644 --- a/src/bonsai/bonsai/bim/module/model/sverchok_modifier.py +++ b/src/bonsai/bonsai/bim/module/model/sverchok_modifier.py @@ -16,18 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bmesh +import json +import os.path +import zipfile +import bmesh +import bpy import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.element -import bonsai.tool as tool +from bpy_extras.io_utils import ExportHelper, ImportHelper -import json -import zipfile -import os.path -from bpy_extras.io_utils import ImportHelper, ExportHelper +import bonsai.tool as tool def update_sverchok_modifier(context): diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index 0d9aea58cd..2c931f4f45 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -17,24 +17,27 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from collections.abc import Iterable +from typing import TYPE_CHECKING, Any + import bpy +from bpy.types import Menu, Panel + import bonsai.bim -from bonsai.bim import module import bonsai.tool as tool -from bpy.types import Panel, Menu +from bonsai.bim import module from bonsai.bim.helper import prop_with_search from bonsai.bim.module.model.data import ( - AuthoringData, ArrayData, - StairData, - SverchokData, - WindowData, + AuthoringData, DoorData, RailingData, RoofData, + StairData, + SverchokData, + WindowData, ) -from collections.abc import Iterable -from typing import Any, TYPE_CHECKING if TYPE_CHECKING or bpy.app.version >= (5, 0, 0): import _bl_ui_utils.layout as bl_ui_utils_layout diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index d343bc75ae..9c94a27af0 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -18,37 +18,39 @@ # # pyright: reportUnnecessaryTypeIgnoreComment=error -import bpy import copy import math -import numpy as np +from math import acos, atan2, cos, degrees, pi, sin +from typing import TYPE_CHECKING, Any, Literal, Optional, Union, assert_never, get_args + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.feature +import ifcopenshell.api.geometry import ifcopenshell.api.material import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.type -import ifcopenshell.api.geometry -import ifcopenshell.util.unit import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape_builder import ifcopenshell.util.type +import ifcopenshell.util.unit import mathutils.geometry -import bonsai.core.type -import bonsai.core.root +import numpy as np +from mathutils import Matrix, Vector + import bonsai.core.geometry import bonsai.core.model as core +import bonsai.core.root +import bonsai.core.type import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from math import pi, sin, cos, degrees, atan2, acos -from mathutils import Vector, Matrix -from bonsai.bim.module.model.opening import FilledOpeningGenerator from bonsai.bim.module.model.decorator import PolylineDecorator, ProductDecorator +from bonsai.bim.module.model.opening import FilledOpeningGenerator from bonsai.bim.module.model.polyline import PolylineOperator -from typing import Optional, assert_never, TYPE_CHECKING, get_args, Literal, Union, Any class UnjoinWalls(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/model/window.py b/src/bonsai/bonsai/bim/module/model/window.py index 206f65de08..ad473a110e 100644 --- a/src/bonsai/bonsai/bim/module/model/window.py +++ b/src/bonsai/bonsai/bim/module/model/window.py @@ -17,29 +17,31 @@ # along with Bonsai. If not, see . -import bpy -import json -import bmesh import collections import collections.abc +import json +from typing import TYPE_CHECKING, get_args + +import bmesh +import bpy import ifcopenshell -import ifcopenshell.api.geometry -import ifcopenshell.api.pset -import bonsai.tool as tool -import bonsai.core.root -import bonsai.core.geometry -from bonsai.bim.module.drawing import gizmos as gizmo -from bonsai.bim.module.drawing.gizmos import DimensionGizmoConfig -from ifcopenshell.api.geometry.add_window_representation import DEFAULT_PANEL_SCHEMAS import ifcopenshell.api +import ifcopenshell.api.geometry import ifcopenshell.api.material +import ifcopenshell.api.pset import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.shape_builder import ifcopenshell.util.unit from bmesh.types import BMVert -from mathutils import Vector, Matrix -from typing import get_args, TYPE_CHECKING +from ifcopenshell.api.geometry.add_window_representation import DEFAULT_PANEL_SCHEMAS +from mathutils import Matrix, Vector + +import bonsai.core.geometry +import bonsai.core.root +import bonsai.tool as tool +from bonsai.bim.module.drawing import gizmos as gizmo +from bonsai.bim.module.drawing.gizmos import DimensionGizmoConfig if TYPE_CHECKING: from bonsai.bim.module.model.prop import BIMWindowProperties diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 30acee46e3..7b7a91906d 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -18,19 +18,21 @@ import os import sys +from functools import partial +from typing import Any, Optional, Union + import bpy import bpy.utils.previews +from bpy.types import Menu, WorkSpaceTool + import bonsai.bim -import bonsai.tool as tool import bonsai.core.model as core -from bonsai.bim.module.model.wall import DumbWallJoiner, DumbWallAligner -from bonsai.bim.helper import prop_with_search, draw_attribute -from bpy.types import WorkSpaceTool, Menu +import bonsai.tool as tool +from bonsai.bim.helper import draw_attribute, prop_with_search from bonsai.bim.module.model.data import AuthoringData, ItemData -from bonsai.bim.module.system.data import PortData from bonsai.bim.module.model.prop import get_ifc_class -from typing import Optional, Union, Any -from functools import partial +from bonsai.bim.module.model.wall import DumbWallAligner, DumbWallJoiner +from bonsai.bim.module.system.data import PortData def load_custom_icons(): diff --git a/src/bonsai/bonsai/bim/module/nest/__init__.py b/src/bonsai/bonsai/bim/module/nest/__init__.py index 883fd00186..a4bf3de181 100644 --- a/src/bonsai/bonsai/bim/module/nest/__init__.py +++ b/src/bonsai/bonsai/bim/module/nest/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.BIM_OT_nest_assign_object, diff --git a/src/bonsai/bonsai/bim/module/nest/data.py b/src/bonsai/bonsai/bim/module/nest/data.py index 77ec0d020f..abe94997fe 100644 --- a/src/bonsai/bonsai/bim/module/nest/data.py +++ b/src/bonsai/bonsai/bim/module/nest/data.py @@ -17,9 +17,10 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool import ifcopenshell.util.element +import bonsai.tool as tool + def refresh(): NestData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/nest/decorator.py b/src/bonsai/bonsai/bim/module/nest/decorator.py index 5a16ef8e44..e9630ebc26 100644 --- a/src/bonsai/bonsai/bim/module/nest/decorator.py +++ b/src/bonsai/bonsai/bim/module/nest/decorator.py @@ -21,11 +21,12 @@ import bpy import gpu import ifcopenshell import ifcopenshell.util.element -import bonsai.tool as tool from bpy.types import SpaceView3D from bpy_extras import view3d_utils from gpu_extras.batch import batch_for_shader from mathutils import Vector + +import bonsai.tool as tool from bonsai.bim.module.geometry.decorator import ItemDecorator diff --git a/src/bonsai/bonsai/bim/module/nest/operator.py b/src/bonsai/bonsai/bim/module/nest/operator.py index 68b6839e79..9d7eb2df67 100644 --- a/src/bonsai/bonsai/bim/module/nest/operator.py +++ b/src/bonsai/bonsai/bim/module/nest/operator.py @@ -19,8 +19,9 @@ import bpy import ifcopenshell import ifcopenshell.util.element -import bonsai.tool as tool + import bonsai.core.nest as core +import bonsai.tool as tool class BIM_OT_nest_assign_object(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/nest/prop.py b/src/bonsai/bonsai/bim/module/nest/prop.py index 6cb787b3d4..c36388398c 100644 --- a/src/bonsai/bonsai/bim/module/nest/prop.py +++ b/src/bonsai/bonsai/bim/module/nest/prop.py @@ -16,23 +16,25 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.spatial.data import SpatialData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup + +import bonsai.tool as tool from bonsai.bim.module.nest.decorator import NestDecorator, NestModeDecorator -from typing import TYPE_CHECKING, Union +from bonsai.bim.module.spatial.data import SpatialData +from bonsai.bim.prop import Attribute, StrProperty def update_relating_object(self: "BIMObjectNestProperties", context: bpy.types.Context) -> None: diff --git a/src/bonsai/bonsai/bim/module/nest/ui.py b/src/bonsai/bonsai/bim/module/nest/ui.py index 2ea33de49a..6d61c5d66b 100644 --- a/src/bonsai/bonsai/bim/module/nest/ui.py +++ b/src/bonsai/bonsai/bim/module/nest/ui.py @@ -16,8 +16,9 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bonsai.tool as tool from bpy.types import Panel + +import bonsai.tool as tool from bonsai.bim.module.nest.data import NestData diff --git a/src/bonsai/bonsai/bim/module/owner/__init__.py b/src/bonsai/bonsai/bim/module/owner/__init__.py index 52c1c7cc19..6d24f2f5dc 100644 --- a/src/bonsai/bonsai/bim/module/owner/__init__.py +++ b/src/bonsai/bonsai/bim/module/owner/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddActor, diff --git a/src/bonsai/bonsai/bim/module/owner/data.py b/src/bonsai/bonsai/bim/module/owner/data.py index 9eb5b9e4c8..88a56d4b1f 100644 --- a/src/bonsai/bonsai/bim/module/owner/data.py +++ b/src/bonsai/bonsai/bim/module/owner/data.py @@ -16,13 +16,15 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any, Union + import bpy import ifcopenshell -import bonsai.tool as tool -from typing import Any, Union from ifcopenshell.util.doc import get_entity_doc from natsort import natsorted +import bonsai.tool as tool + def refresh(): PeopleData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/owner/operator.py b/src/bonsai/bonsai/bim/module/owner/operator.py index 4d3434f00a..2470fd8227 100644 --- a/src/bonsai/bonsai/bim/module/owner/operator.py +++ b/src/bonsai/bonsai/bim/module/owner/operator.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, get_args + import bpy -import bonsai.tool as tool -import bonsai.core.owner as core import ifcopenshell.api.owner from ifcopenshell.api.owner.add_address import ADDRESS_TYPE -from typing import TYPE_CHECKING, get_args + +import bonsai.core.owner as core +import bonsai.tool as tool if TYPE_CHECKING: import bpy.stub_internal.rna_enums as rna_enums diff --git a/src/bonsai/bonsai/bim/module/owner/prop.py b/src/bonsai/bonsai/bim/module/owner/prop.py index ecd8b8f723..dfe2b95ecd 100644 --- a/src/bonsai/bonsai/bim/module/owner/prop.py +++ b/src/bonsai/bonsai/bim/module/owner/prop.py @@ -16,22 +16,24 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.owner.data import OwnerData, ActorData, ObjectActorData from typing import TYPE_CHECKING, Literal -from bpy.types import PropertyGroup + +import bpy from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.owner.data import ActorData, ObjectActorData, OwnerData +from bonsai.bim.prop import Attribute, StrProperty def get_user_person(self: "BIMOwnerProperties", context: bpy.types.Context) -> tool.Blender.BLENDER_ENUM_ITEMS: diff --git a/src/bonsai/bonsai/bim/module/owner/ui.py b/src/bonsai/bonsai/bim/module/owner/ui.py index f348804d77..f1e7ae9ea3 100644 --- a/src/bonsai/bonsai/bim/module/owner/ui.py +++ b/src/bonsai/bonsai/bim/module/owner/ui.py @@ -16,17 +16,19 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any + import bpy + import bonsai.bim.helper import bonsai.tool as tool -from typing import Any from bonsai.bim.module.owner.data import ( - PeopleData, + ActorData, + ApplicationsData, + ObjectActorData, OrganisationsData, OwnerData, - ActorData, - ObjectActorData, - ApplicationsData, + PeopleData, ) diff --git a/src/bonsai/bonsai/bim/module/patch/__init__.py b/src/bonsai/bonsai/bim/module/patch/__init__.py index 0a35e4b0d8..fd5de30d38 100644 --- a/src/bonsai/bonsai/bim/module/patch/__init__.py +++ b/src/bonsai/bonsai/bim/module/patch/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ExecuteIfcPatch, diff --git a/src/bonsai/bonsai/bim/module/patch/operator.py b/src/bonsai/bonsai/bim/module/patch/operator.py index 5ff7e998ce..57413214d6 100644 --- a/src/bonsai/bonsai/bim/module/patch/operator.py +++ b/src/bonsai/bonsai/bim/module/patch/operator.py @@ -16,17 +16,19 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy import json +import os +from pathlib import Path +from typing import TYPE_CHECKING, cast + +import bpy import ifcopenshell import ifcpatch -import bonsai.tool as tool -import bonsai.core.patch as core +from bpy_extras.io_utils import ExportHelper, ImportHelper + import bonsai.bim.handler -from bpy_extras.io_utils import ImportHelper, ExportHelper -from pathlib import Path -from typing import cast, TYPE_CHECKING +import bonsai.core.patch as core +import bonsai.tool as tool if TYPE_CHECKING: from bonsai.bim.prop import AttributeDataType diff --git a/src/bonsai/bonsai/bim/module/patch/prop.py b/src/bonsai/bonsai/bim/module/patch/prop.py index 3d372e5036..9382b4e786 100644 --- a/src/bonsai/bonsai/bim/module/patch/prop.py +++ b/src/bonsai/bonsai/bim/module/patch/prop.py @@ -16,25 +16,26 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import importlib import importlib.util from pathlib import Path -import ifcpatch -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) from typing import TYPE_CHECKING, Literal, Union +import bpy +import ifcpatch +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + PointerProperty, + StringProperty, +) +from bpy.types import PropertyGroup + +from bonsai.bim.prop import Attribute, StrProperty ifcpatchrecipes_enum: list[tuple[str, str, str]] = [] diff --git a/src/bonsai/bonsai/bim/module/patch/ui.py b/src/bonsai/bonsai/bim/module/patch/ui.py index 8c165d692f..c3101b4705 100644 --- a/src/bonsai/bonsai/bim/module/patch/ui.py +++ b/src/bonsai/bonsai/bim/module/patch/ui.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import bonsai.tool as tool -from bonsai.bim.helper import prop_with_search -from bonsai.bim.helper import draw_attributes + from typing import TYPE_CHECKING +import bpy + +import bonsai.tool as tool +from bonsai.bim.helper import draw_attributes, prop_with_search + if TYPE_CHECKING: from bonsai.bim.prop import Attribute diff --git a/src/bonsai/bonsai/bim/module/profile/__init__.py b/src/bonsai/bonsai/bim/module/profile/__init__.py index 00a6728d32..d53deebb9c 100644 --- a/src/bonsai/bonsai/bim/module/profile/__init__.py +++ b/src/bonsai/bonsai/bim/module/profile/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator, data + +from . import data, operator, prop, ui classes = ( operator.AddProfileDef, diff --git a/src/bonsai/bonsai/bim/module/profile/data.py b/src/bonsai/bonsai/bim/module/profile/data.py index eb21a72f25..34ea4d1b7b 100644 --- a/src/bonsai/bonsai/bim/module/profile/data.py +++ b/src/bonsai/bonsai/bim/module/profile/data.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any + import bpy import bpy.utils import bpy.utils.previews import ifcopenshell.util.doc + import bonsai.tool as tool -from typing import Any def refresh(): diff --git a/src/bonsai/bonsai/bim/module/profile/operator.py b/src/bonsai/bonsai/bim/module/profile/operator.py index 99f47923e4..871d8f3b86 100644 --- a/src/bonsai/bonsai/bim/module/profile/operator.py +++ b/src/bonsai/bonsai/bim/module/profile/operator.py @@ -20,14 +20,15 @@ import bpy import ifcopenshell.api import ifcopenshell.api.profile import ifcopenshell.util.element + import bonsai.bim.helper -import bonsai.tool as tool import bonsai.bim.module.model.profile as model_profile import bonsai.core.profile as core -from bonsai.bim.module.model.decorator import ProfileDecorator -from bonsai.bim.module.profile.prop import generate_thumbnail_for_active_profile -from bonsai.bim.module.profile.data import refresh +import bonsai.tool as tool from bonsai.bim.module.geometry.helper import Helper +from bonsai.bim.module.model.decorator import ProfileDecorator +from bonsai.bim.module.profile.data import refresh +from bonsai.bim.module.profile.prop import generate_thumbnail_for_active_profile class LoadProfiles(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/profile/prop.py b/src/bonsai/bonsai/bim/module/profile/prop.py index f69f6a6cd9..61e2546193 100644 --- a/src/bonsai/bonsai/bim/module/profile/prop.py +++ b/src/bonsai/bonsai/bim/module/profile/prop.py @@ -16,25 +16,27 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy import ifcopenshell -import ifcopenshell.util.schema import ifcopenshell.util.attribute -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.profile.data import ProfileData -from bpy.types import PropertyGroup +import ifcopenshell.util.schema from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Union +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.profile.data import ProfileData +from bonsai.bim.prop import Attribute, StrProperty def get_profile_classes(self: "BIMProfileProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/profile/ui.py b/src/bonsai/bonsai/bim/module/profile/ui.py index 33b8ca7d58..3128fe82ea 100644 --- a/src/bonsai/bonsai/bim/module/profile/ui.py +++ b/src/bonsai/bonsai/bim/module/profile/ui.py @@ -17,13 +17,16 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING + import bpy +from bpy.types import Panel, UIList + import bonsai.bim.helper import bonsai.tool as tool -from bpy.types import Panel, UIList from bonsai.bim.module.profile.data import ProfileData from bonsai.bim.module.profile.prop import generate_thumbnail_for_active_profile -from typing import TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.profile.prop import BIMProfileProperties, Profile diff --git a/src/bonsai/bonsai/bim/module/project/__init__.py b/src/bonsai/bonsai/bim/module/project/__init__.py index 26961b8c64..53ebaff14e 100644 --- a/src/bonsai/bonsai/bim/module/project/__init__.py +++ b/src/bonsai/bonsai/bim/module/project/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator, workspace, gizmo, decorator + +from . import decorator, gizmo, operator, prop, ui, workspace classes = ( operator.AddProjectLibrary, diff --git a/src/bonsai/bonsai/bim/module/project/data.py b/src/bonsai/bonsai/bim/module/project/data.py index 1f51737205..e2e960b382 100644 --- a/src/bonsai/bonsai/bim/module/project/data.py +++ b/src/bonsai/bonsai/bim/module/project/data.py @@ -17,13 +17,15 @@ # along with Bonsai. If not, see . import os -import bpy -import bonsai.tool as tool -import ifcopenshell.util.file -from bonsai.bim.ifc import IfcStore -from pathlib import Path from collections import defaultdict -from typing import Union, Any +from pathlib import Path +from typing import Any, Union + +import bpy +import ifcopenshell.util.file + +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore def refresh(): diff --git a/src/bonsai/bonsai/bim/module/project/decorator.py b/src/bonsai/bonsai/bim/module/project/decorator.py index fbb3e9ae97..14035ca91c 100644 --- a/src/bonsai/bonsai/bim/module/project/decorator.py +++ b/src/bonsai/bonsai/bim/module/project/decorator.py @@ -16,17 +16,19 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import gpu +from typing import Union + import blf -import bpy import bmesh -import bonsai.tool as tool +import bpy +import gpu +from bpy.app.handlers import persistent from bpy.types import SpaceView3D from bpy_extras import view3d_utils -from mathutils import Vector from gpu_extras.batch import batch_for_shader -from bpy.app.handlers import persistent -from typing import Union +from mathutils import Vector + +import bonsai.tool as tool from bonsai.bim.module.model.decorator import PolylineDecorator diff --git a/src/bonsai/bonsai/bim/module/project/gizmo.py b/src/bonsai/bonsai/bim/module/project/gizmo.py index bb372b9cb7..d91668eaa8 100644 --- a/src/bonsai/bonsai/bim/module/project/gizmo.py +++ b/src/bonsai/bonsai/bim/module/project/gizmo.py @@ -18,10 +18,11 @@ import bpy -import bonsai.tool as tool from bpy.types import GizmoGroup from mathutils import Matrix +import bonsai.tool as tool + class ClippingPlane(GizmoGroup): bl_idname = "OBJECT_GGT_bim_clipping_plane" diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index f8aebd2a34..8fad709de3 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -16,58 +16,63 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy -import time +import datetime import json import logging -import tempfile -import traceback +import os import subprocess -import datetime -import ifcopenshell.api.attribute -import numpy as np +import tempfile +import time +import traceback +from collections import defaultdict +from math import radians +from pathlib import Path +from typing import TYPE_CHECKING, Literal, Union, get_args + +import bpy import ifcopenshell import ifcopenshell.api +import ifcopenshell.api.attribute import ifcopenshell.api.nest import ifcopenshell.api.project import ifcopenshell.api.root import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W +import ifcopenshell.util.element import ifcopenshell.util.file -import ifcopenshell.util.selector import ifcopenshell.util.geolocation import ifcopenshell.util.representation -import ifcopenshell.util.element -import ifcopenshell.util.representation +import ifcopenshell.util.selector import ifcopenshell.util.shape import ifcopenshell.util.shape_builder import ifcopenshell.util.unit +import numpy as np +from bpy.app.handlers import persistent +from bpy_extras.io_utils import ExportHelper, ImportHelper +from ifcopenshell.geom import ShapeElementType +from mathutils import Matrix, Vector + import bonsai.bim.handler import bonsai.bim.helper import bonsai.bim.schema -import bonsai.tool as tool import bonsai.core.project as core -from bpy_extras.io_utils import ExportHelper, ImportHelper +import bonsai.tool as tool +from bonsai.bim import export_ifc, import_ifc from bonsai.bim.ifc import IfcStore -from bonsai.bim.ui import IFCFileSelector -from bonsai.bim import import_ifc -from bonsai.bim import export_ifc -from math import radians -from pathlib import Path -from collections import defaultdict -from mathutils import Vector, Matrix -from bpy.app.handlers import persistent -from ifcopenshell.geom import ShapeElementType -from bonsai.bim.module.project.data import LinksData, ProjectLibraryData -from bonsai.bim.module.project.decorator import ProjectDecorator, ClippingPlaneDecorator, MeasureDecorator -from bonsai.bim.module.project.prop import BreadcrumbType -from bonsai.bim.module.model.decorator import PolylineDecorator, FaceAreaDecorator +from bonsai.bim.module.model.decorator import FaceAreaDecorator, PolylineDecorator from bonsai.bim.module.model.polyline import PolylineOperator -from typing import Union, TYPE_CHECKING, get_args, Literal +from bonsai.bim.module.project.data import LinksData, ProjectLibraryData +from bonsai.bim.module.project.decorator import ( + ClippingPlaneDecorator, + MeasureDecorator, + ProjectDecorator, +) +from bonsai.bim.module.project.prop import BreadcrumbType +from bonsai.bim.ui import IFCFileSelector if TYPE_CHECKING: import bpy.stub_internal.rna_enums as rna_enums + from bonsai.bim.module.project.prop import Link @@ -1848,9 +1853,10 @@ class LoadLinkedProject(bpy.types.Operator, ImportHelper): return ImportHelper.invoke(self, context, event) def execute(self, context): - import ifcpatch import multiprocessing + import ifcpatch + start = time.time() pprops = tool.Project.get_project_props() @@ -2160,7 +2166,11 @@ class QueryLinkedElement(bpy.types.Operator): def execute(self, context): import sqlite3 - from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d + + from bpy_extras.view3d_utils import ( + region_2d_to_origin_3d, + region_2d_to_vector_3d, + ) LinksData.linked_data = {} props = tool.Project.get_project_props() @@ -2505,9 +2515,10 @@ class RefreshClippingPlanes(bpy.types.Operator): break def refresh_clipping_planes(self, context): - import bmesh from itertools import cycle + import bmesh + area = next(a for a in bpy.context.screen.areas if a.type == "VIEW_3D") region = next(r for r in area.regions if r.type == "WINDOW") data = region.data @@ -2567,7 +2578,10 @@ class CreateClippingPlane(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): - from bpy_extras.view3d_utils import region_2d_to_vector_3d, region_2d_to_origin_3d + from bpy_extras.view3d_utils import ( + region_2d_to_origin_3d, + region_2d_to_vector_3d, + ) # Clean up deleted planes props = tool.Project.get_project_props() diff --git a/src/bonsai/bonsai/bim/module/project/prop.py b/src/bonsai/bonsai/bim/module/project/prop.py index 6894392437..ea5c9c843a 100644 --- a/src/bonsai/bonsai/bim/module/project/prop.py +++ b/src/bonsai/bonsai/bim/module/project/prop.py @@ -17,26 +17,28 @@ # along with Bonsai. If not, see . import os +from collections.abc import Generator +from typing import TYPE_CHECKING, Literal, Union, assert_never, get_args + import bpy import ifcopenshell.util.element import ifcopenshell.util.placement -import bonsai.tool as tool -import bonsai.bim.helper -from bonsai.bim.module.project.data import ProjectData, ProjectLibraryData -from bonsai.bim.ifc import IfcStore -from bonsai.bim.prop import StrProperty, ObjProperty, Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, BoolProperty, CollectionProperty, EnumProperty, FloatProperty, IntProperty, + PointerProperty, StringProperty, ) -from typing import TYPE_CHECKING, Literal, Union, get_args, assert_never -from collections.abc import Generator +from bpy.types import PropertyGroup + +import bonsai.bim.helper +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore +from bonsai.bim.module.project.data import ProjectData, ProjectLibraryData +from bonsai.bim.prop import Attribute, ObjProperty, StrProperty def get_export_schema(self: "BIMProjectProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/project/ui.py b/src/bonsai/bonsai/bim/module/project/ui.py index ac70720dbe..79ed2c7d7a 100644 --- a/src/bonsai/bonsai/bim/module/project/ui.py +++ b/src/bonsai/bonsai/bim/module/project/ui.py @@ -17,19 +17,27 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + import os -import ifcopenshell -import bonsai.bim -import bonsai.tool as tool -from bonsai.bim.helper import prop_with_search, draw_attributes -from bpy.types import Panel, Menu, UIList -from bonsai.bim.ifc import IfcStore -from bonsai.bim.module.project.data import ProjectData, LinksData from typing import TYPE_CHECKING +import bpy +import ifcopenshell +from bpy.types import Menu, Panel, UIList + +import bonsai.bim +import bonsai.tool as tool +from bonsai.bim.helper import draw_attributes, prop_with_search +from bonsai.bim.ifc import IfcStore +from bonsai.bim.module.project.data import LinksData, ProjectData + if TYPE_CHECKING: - from bonsai.bim.module.project.prop import LibraryElement, BIMProjectProperties, FilterCategory, Link + from bonsai.bim.module.project.prop import ( + BIMProjectProperties, + FilterCategory, + LibraryElement, + Link, + ) def file_import_menu(self, context): diff --git a/src/bonsai/bonsai/bim/module/project/workspace.py b/src/bonsai/bonsai/bim/module/project/workspace.py index 59b86e431d..a72981c625 100644 --- a/src/bonsai/bonsai/bim/module/project/workspace.py +++ b/src/bonsai/bonsai/bim/module/project/workspace.py @@ -17,9 +17,11 @@ # along with Bonsai. If not, see . import os + import bpy -import bonsai.tool as tool from bpy.types import WorkSpaceTool + +import bonsai.tool as tool from bonsai.bim.module.project.data import LinksData diff --git a/src/bonsai/bonsai/bim/module/pset/__init__.py b/src/bonsai/bonsai/bim/module/pset/__init__.py index 7e0d72061b..5284e88f36 100644 --- a/src/bonsai/bonsai/bim/module/pset/__init__.py +++ b/src/bonsai/bonsai/bim/module/pset/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddProposedProp, diff --git a/src/bonsai/bonsai/bim/module/pset/data.py b/src/bonsai/bonsai/bim/module/pset/data.py index 12b38efc98..969f54f387 100644 --- a/src/bonsai/bonsai/bim/module/pset/data.py +++ b/src/bonsai/bonsai/bim/module/pset/data.py @@ -23,9 +23,9 @@ import ifcopenshell import ifcopenshell.util.attribute import ifcopenshell.util.doc import ifcopenshell.util.element -import bonsai.tool as tool -import bonsai.bim.schema +import bonsai.bim.schema +import bonsai.tool as tool # TODO: Should this cache belong here? Dunno. Maybe. is_expanded: dict[int, bool] = {} diff --git a/src/bonsai/bonsai/bim/module/pset/operator.py b/src/bonsai/bonsai/bim/module/pset/operator.py index 4e063b4ada..3257760531 100644 --- a/src/bonsai/bonsai/bim/module/pset/operator.py +++ b/src/bonsai/bonsai/bim/module/pset/operator.py @@ -16,21 +16,23 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json -import ifcopenshell.api -import ifcopenshell.api.pset -import ifcopenshell.util.element -import bonsai.bim.schema -import bonsai.tool as tool -import bonsai.core.pset as core -import bonsai.bim.module.pset.data -from bonsai.bim.ifc import IfcStore from collections import defaultdict from typing import TYPE_CHECKING +import bpy +import ifcopenshell.api +import ifcopenshell.api.pset +import ifcopenshell.util.element + +import bonsai.bim.module.pset.data +import bonsai.bim.schema +import bonsai.core.pset as core +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore + if TYPE_CHECKING: - from bonsai.bim.module.pset.prop import RenamePropertyEntry, AddEditPropertyEntry + from bonsai.bim.module.pset.prop import AddEditPropertyEntry, RenamePropertyEntry class TogglePsetExpansion(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/pset/prop.py b/src/bonsai/bonsai/bim/module/pset/prop.py index d89ba62be1..4b16e15010 100644 --- a/src/bonsai/bonsai/bim/module/pset/prop.py +++ b/src/bonsai/bonsai/bim/module/pset/prop.py @@ -16,33 +16,35 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, Union, get_args + import bpy -import bonsai.bim.schema import ifcopenshell import ifcopenshell.util.attribute import ifcopenshell.util.doc import ifcopenshell.util.element -import bonsai.tool as tool -from bonsai.bim.prop import Attribute, StrProperty -from bonsai.bim.module.pset.data import ( - AddEditCustomPropertiesData, - ObjectPsetsData, - MaterialPsetsData, - PsetsGeneralData, -) -from bonsai.bim.module.material.data import ObjectMaterialData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import Union, Literal, TYPE_CHECKING, get_args, Literal +from bpy.types import PropertyGroup + +import bonsai.bim.schema +import bonsai.tool as tool +from bonsai.bim.module.material.data import ObjectMaterialData +from bonsai.bim.module.pset.data import ( + AddEditCustomPropertiesData, + MaterialPsetsData, + ObjectPsetsData, + PsetsGeneralData, +) +from bonsai.bim.prop import Attribute, StrProperty psetnames = {} qtonames = {} diff --git a/src/bonsai/bonsai/bim/module/pset/ui.py b/src/bonsai/bonsai/bim/module/pset/ui.py index abd3a8b90f..03d6f8bb36 100644 --- a/src/bonsai/bonsai/bim/module/pset/ui.py +++ b/src/bonsai/bonsai/bim/module/pset/ui.py @@ -17,26 +17,29 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Literal, Optional, assert_never + import bpy -import bonsai.tool as tool from bpy.types import Panel -from bonsai.bim.helper import prop_with_search, get_display_value, draw_attribute + +import bonsai.tool as tool +from bonsai.bim.helper import draw_attribute, get_display_value, prop_with_search +from bonsai.bim.module.material.data import ObjectMaterialData from bonsai.bim.module.pset.data import ( - ObjectPsetsData, - ObjectQtosData, + GroupPsetData, + GroupQtosData, MaterialPsetsData, MaterialSetItemPsetsData, - TaskQtosData, - ResourceQtosData, - ResourcePsetsData, - GroupQtosData, - GroupPsetData, + ObjectPsetsData, + ObjectQtosData, ProfilePsetsData, + ResourcePsetsData, + ResourceQtosData, + TaskQtosData, WorkSchedulePsetsData, ZonePsetsData, ) -from bonsai.bim.module.material.data import ObjectMaterialData -from typing import Any, Optional, TYPE_CHECKING, assert_never, Literal if TYPE_CHECKING: from bonsai.bim.module.pset.prop import IfcProperty, PsetProperties diff --git a/src/bonsai/bonsai/bim/module/pset_template/__init__.py b/src/bonsai/bonsai/bim/module/pset_template/__init__.py index 204824cb11..dc67e900fb 100644 --- a/src/bonsai/bonsai/bim/module/pset_template/__init__.py +++ b/src/bonsai/bonsai/bim/module/pset_template/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddPropEnum, diff --git a/src/bonsai/bonsai/bim/module/pset_template/data.py b/src/bonsai/bonsai/bim/module/pset_template/data.py index 84d65f25f1..1725b974f1 100644 --- a/src/bonsai/bonsai/bim/module/pset_template/data.py +++ b/src/bonsai/bonsai/bim/module/pset_template/data.py @@ -17,14 +17,16 @@ # along with Bonsai. If not, see . import os -import bpy import pathlib +from typing import Any + +import bpy import ifcopenshell import ifcopenshell.util.attribute import ifcopenshell.util.doc + import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from typing import Any def refresh(): diff --git a/src/bonsai/bonsai/bim/module/pset_template/operator.py b/src/bonsai/bonsai/bim/module/pset_template/operator.py index 0711376439..e956917df3 100644 --- a/src/bonsai/bonsai/bim/module/pset_template/operator.py +++ b/src/bonsai/bonsai/bim/module/pset_template/operator.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . import os + import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset_template -import bonsai.bim.schema + import bonsai.bim.handler +import bonsai.bim.schema import bonsai.tool as tool from bonsai.bim.ifc import IfcStore diff --git a/src/bonsai/bonsai/bim/module/pset_template/prop.py b/src/bonsai/bonsai/bim/module/pset_template/prop.py index fdd6188a76..9ec31b364f 100644 --- a/src/bonsai/bonsai/bim/module/pset_template/prop.py +++ b/src/bonsai/bonsai/bim/module/pset_template/prop.py @@ -17,26 +17,28 @@ # along with Bonsai. If not, see . import os +from typing import TYPE_CHECKING + import bpy import ifcopenshell import ifcopenshell.util.attribute -from ifcopenshell.util.doc import get_attribute_doc -import bonsai.tool as tool -from bonsai.bim.module.pset_template.data import PsetTemplatesData -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.ifc import IfcStore -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING +from bpy.types import PropertyGroup +from ifcopenshell.util.doc import get_attribute_doc + +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore +from bonsai.bim.module.pset_template.data import PsetTemplatesData +from bonsai.bim.prop import Attribute, StrProperty def updatePsetTemplateFiles(self, context): diff --git a/src/bonsai/bonsai/bim/module/pset_template/ui.py b/src/bonsai/bonsai/bim/module/pset_template/ui.py index af46fdc0e7..6576e8f56c 100644 --- a/src/bonsai/bonsai/bim/module/pset_template/ui.py +++ b/src/bonsai/bonsai/bim/module/pset_template/ui.py @@ -17,8 +17,9 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool from bpy.types import Panel + +import bonsai.tool as tool from bonsai.bim.helper import prop_with_search from bonsai.bim.module.pset_template.data import PsetTemplatesData diff --git a/src/bonsai/bonsai/bim/module/qto/__init__.py b/src/bonsai/bonsai/bim/module/qto/__init__.py index f372462f73..f4d5becb73 100644 --- a/src/bonsai/bonsai/bim/module/qto/__init__.py +++ b/src/bonsai/bonsai/bim/module/qto/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.CalculateCircleRadius, diff --git a/src/bonsai/bonsai/bim/module/qto/calculator.py b/src/bonsai/bonsai/bim/module/qto/calculator.py index 091d7e1f9f..c0e5aa474f 100644 --- a/src/bonsai/bonsai/bim/module/qto/calculator.py +++ b/src/bonsai/bonsai/bim/module/qto/calculator.py @@ -16,21 +16,22 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import math +from typing import Literal, Optional, Union, assert_never + import bmesh -import mathutils -import bonsai.tool as tool +import bpy +import ifc5d.qto import ifcopenshell import ifcopenshell.geom import ifcopenshell.util.element -import ifc5d.qto -from mathutils import Vector, Matrix +import mathutils +from mathutils import Matrix, Vector from mathutils.bvhtree import BVHTree from shapely.geometry import Polygon from shapely.ops import unary_union -from typing import Literal, Union, Optional, assert_never +import bonsai.tool as tool AxisType = Literal["x", "y", "z"] VectorTuple = tuple[float, float, float] diff --git a/src/bonsai/bonsai/bim/module/qto/data.py b/src/bonsai/bonsai/bim/module/qto/data.py index ef780d749f..162a4bf7c6 100644 --- a/src/bonsai/bonsai/bim/module/qto/data.py +++ b/src/bonsai/bonsai/bim/module/qto/data.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/qto/helper.py b/src/bonsai/bonsai/bim/module/qto/helper.py index 50253cbb63..d4f94c491f 100644 --- a/src/bonsai/bonsai/bim/module/qto/helper.py +++ b/src/bonsai/bonsai/bim/module/qto/helper.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bmesh -import bonsai.tool as tool from collections.abc import Callable +import bmesh +import bpy + +import bonsai.tool as tool + def calculate_height(obj: bpy.types.Object) -> float: return obj.dimensions[2] diff --git a/src/bonsai/bonsai/bim/module/qto/operator.py b/src/bonsai/bonsai/bim/module/qto/operator.py index 47b0f5059a..572c65e258 100644 --- a/src/bonsai/bonsai/bim/module/qto/operator.py +++ b/src/bonsai/bonsai/bim/module/qto/operator.py @@ -19,11 +19,12 @@ import bpy import ifcopenshell import ifcopenshell.api -import bonsai.tool as tool -import bonsai.core.qto as core -from bonsai.bim.module.qto import helper from ifcopenshell.util.profiler import Profiler +import bonsai.core.qto as core +import bonsai.tool as tool +from bonsai.bim.module.qto import helper + class CalculateCircleRadius(bpy.types.Operator): bl_idname = "bim.calculate_circle_radius" diff --git a/src/bonsai/bonsai/bim/module/qto/prop.py b/src/bonsai/bonsai/bim/module/qto/prop.py index 57e04d4cc1..9952285d30 100644 --- a/src/bonsai/bonsai/bim/module/qto/prop.py +++ b/src/bonsai/bonsai/bim/module/qto/prop.py @@ -16,23 +16,24 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bonsai.tool as tool -import ifc5d.qto -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) from typing import TYPE_CHECKING, Union +import bpy +import ifc5d.qto +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + PointerProperty, + StringProperty, +) +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.prop import Attribute, StrProperty CALCULATOR_FUNCTION_ENUM_ITEMS: list[Union[tuple[str, str, str], None]] = [] diff --git a/src/bonsai/bonsai/bim/module/qto/ui.py b/src/bonsai/bonsai/bim/module/qto/ui.py index 9029a63066..032df25b20 100644 --- a/src/bonsai/bonsai/bim/module/qto/ui.py +++ b/src/bonsai/bonsai/bim/module/qto/ui.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . import bpy + import bonsai.tool as tool from bonsai.bim.module.qto.data import QtoData diff --git a/src/bonsai/bonsai/bim/module/resource/__init__.py b/src/bonsai/bonsai/bim/module/resource/__init__.py index ae08660afd..89f21f4e29 100644 --- a/src/bonsai/bonsai/bim/module/resource/__init__.py +++ b/src/bonsai/bonsai/bim/module/resource/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddResource, diff --git a/src/bonsai/bonsai/bim/module/resource/data.py b/src/bonsai/bonsai/bim/module/resource/data.py index 601b61eb7b..cc862cf1dd 100644 --- a/src/bonsai/bonsai/bim/module/resource/data.py +++ b/src/bonsai/bonsai/bim/module/resource/data.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any + import bpy -import bonsai.tool as tool import ifcopenshell import ifcopenshell.util.constraint import ifcopenshell.util.cost import ifcopenshell.util.date import ifcopenshell.util.resource -from typing import Any + +import bonsai.tool as tool def refresh(): diff --git a/src/bonsai/bonsai/bim/module/resource/operator.py b/src/bonsai/bonsai/bim/module/resource/operator.py index 4d9a28c061..a82cc22918 100644 --- a/src/bonsai/bonsai/bim/module/resource/operator.py +++ b/src/bonsai/bonsai/bim/module/resource/operator.py @@ -18,10 +18,11 @@ import bpy import ifcopenshell.api.pset -from bpy_extras.io_utils import ImportHelper, ExportHelper -from bonsai.bim.module.resource.ui import draw_productivity_ui +from bpy_extras.io_utils import ExportHelper, ImportHelper + import bonsai.core.resource as core import bonsai.tool as tool +from bonsai.bim.module.resource.ui import draw_productivity_ui class LoadResources(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/resource/prop.py b/src/bonsai/bonsai/bim/module/resource/prop.py index 350417aa69..4c6828e56c 100644 --- a/src/bonsai/bonsai/bim/module/resource/prop.py +++ b/src/bonsai/bonsai/bim/module/resource/prop.py @@ -16,27 +16,29 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, get_args + import bpy import ifcopenshell.api import ifcopenshell.api.resource import ifcopenshell.util.resource -import bonsai.tool as tool +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + PointerProperty, + StringProperty, +) +from bpy.types import PropertyGroup + import bonsai.bim.module.pset.data import bonsai.bim.module.resource.data import bonsai.bim.module.sequence.data +import bonsai.tool as tool from bonsai.bim.prop import Attribute, ISODuration -from bpy.types import PropertyGroup -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) -from typing import TYPE_CHECKING, Literal, get_args quantitytypes_enum: dict[str, tool.Blender.BLENDER_ENUM_ITEMS] = {} diff --git a/src/bonsai/bonsai/bim/module/resource/ui.py b/src/bonsai/bonsai/bim/module/resource/ui.py index b061600978..679eed8782 100644 --- a/src/bonsai/bonsai/bim/module/resource/ui.py +++ b/src/bonsai/bonsai/bim/module/resource/ui.py @@ -17,16 +17,19 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any + import bpy -import bonsai.tool as tool -import bonsai.bim.helper from bpy.types import Panel, UIList + +import bonsai.bim.helper +import bonsai.tool as tool from bonsai.bim.module.resource.data import ResourceData -from typing import Any, TYPE_CHECKING if TYPE_CHECKING: + from bonsai.bim.module.resource.prop import BIMResourceTreeProperties, Resource from bonsai.bim.prop import ISODuration - from bonsai.bim.module.resource.prop import Resource, BIMResourceTreeProperties class BIM_PT_resources(Panel): diff --git a/src/bonsai/bonsai/bim/module/root/__init__.py b/src/bonsai/bonsai/bim/module/root/__init__.py index 3e6f280eb2..7192dcdff4 100644 --- a/src/bonsai/bonsai/bim/module/root/__init__.py +++ b/src/bonsai/bonsai/bim/module/root/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddElement, diff --git a/src/bonsai/bonsai/bim/module/root/data.py b/src/bonsai/bonsai/bim/module/root/data.py index 7690210c9b..66412e7d48 100644 --- a/src/bonsai/bonsai/bim/module/root/data.py +++ b/src/bonsai/bonsai/bim/module/root/data.py @@ -17,13 +17,19 @@ # along with Bonsai. If not, see . from collections import defaultdict +from typing import Union + import bpy import ifcopenshell.util.attribute import ifcopenshell.util.element import ifcopenshell.util.schema -from ifcopenshell.util.doc import get_entity_doc, get_predefined_type_doc, get_class_suggestions +from ifcopenshell.util.doc import ( + get_class_suggestions, + get_entity_doc, + get_predefined_type_doc, +) + import bonsai.tool as tool -from typing import Union def refresh(): diff --git a/src/bonsai/bonsai/bim/module/root/operator.py b/src/bonsai/bonsai/bim/module/root/operator.py index 5a0782203e..a2ac73f200 100644 --- a/src/bonsai/bonsai/bim/module/root/operator.py +++ b/src/bonsai/bonsai/bim/module/root/operator.py @@ -16,8 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy +from typing import TYPE_CHECKING + import bmesh +import bpy import idprop import ifcopenshell import ifcopenshell.api @@ -25,20 +27,20 @@ import ifcopenshell.api.geometry import ifcopenshell.api.material import ifcopenshell.api.pset import ifcopenshell.api.root -import ifcopenshell.util.schema import ifcopenshell.util.element +import ifcopenshell.util.schema import ifcopenshell.util.shape_builder import ifcopenshell.util.type import ifcopenshell.util.unit -import bonsai.bim.handler -import bonsai.core.root as core -import bonsai.core.geometry -import bonsai.tool as tool -import bonsai.bim.module.root.prop as root_prop -from bonsai.bim.ifc import IfcStore -from bonsai.bim.helper import get_enum_items, prop_with_search from mathutils import Vector -from typing import TYPE_CHECKING + +import bonsai.bim.handler +import bonsai.bim.module.root.prop as root_prop +import bonsai.core.geometry +import bonsai.core.root as core +import bonsai.tool as tool +from bonsai.bim.helper import get_enum_items, prop_with_search +from bonsai.bim.ifc import IfcStore class EnableReassignClass(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/root/prop.py b/src/bonsai/bonsai/bim/module/root/prop.py index 9bd00c4c68..854eb6d0f0 100644 --- a/src/bonsai/bonsai/bim/module/root/prop.py +++ b/src/bonsai/bonsai/bim/module/root/prop.py @@ -16,25 +16,27 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.schema import ifcopenshell.util.type -import bonsai.tool as tool -from bonsai.bim.module.root.data import IfcClassData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Union +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.root.data import IfcClassData def get_ifc_predefined_types(self: "BIMRootProperties", context: bpy.types.Context) -> list[tuple[str, str]]: diff --git a/src/bonsai/bonsai/bim/module/root/ui.py b/src/bonsai/bonsai/bim/module/root/ui.py index facf619ad8..72eadb4e39 100644 --- a/src/bonsai/bonsai/bim/module/root/ui.py +++ b/src/bonsai/bonsai/bim/module/root/ui.py @@ -17,12 +17,13 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool -import bonsai.bim.module.root.prop as root_prop from bpy.types import Panel + +import bonsai.bim.module.root.prop as root_prop +import bonsai.tool as tool from bonsai.bim.helper import prop_with_search -from bonsai.bim.module.root.data import IfcClassData from bonsai.bim.module.model.data import AuthoringData +from bonsai.bim.module.root.data import IfcClassData class BIM_PT_class(Panel): diff --git a/src/bonsai/bonsai/bim/module/search/__init__.py b/src/bonsai/bonsai/bim/module/search/__init__.py index 88cb2f6ed4..5033fd3eb4 100644 --- a/src/bonsai/bonsai/bim/module/search/__init__.py +++ b/src/bonsai/bonsai/bim/module/search/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ActivateContainerFilter, diff --git a/src/bonsai/bonsai/bim/module/search/data.py b/src/bonsai/bonsai/bim/module/search/data.py index 4bde0aa359..8c2fad00b0 100644 --- a/src/bonsai/bonsai/bim/module/search/data.py +++ b/src/bonsai/bonsai/bim/module/search/data.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json + +import bpy import ifcopenshell.util.element -import bonsai.tool as tool from natsort import natsorted +import bonsai.tool as tool + def refresh(): SearchData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index a8c79c11bb..47e87a3caa 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -16,32 +16,34 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import json import bisect +import json import traceback +from typing import TYPE_CHECKING, Literal, assert_never, get_args + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.group import ifcopenshell.util.element import ifcopenshell.util.selector -import bonsai.tool as tool -import bonsai.core.search as core -from bonsai.bim.ifc import IfcStore -from natsort import natsorted -from bpy.types import PropertyGroup, Operator from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import Operator, PropertyGroup +from natsort import natsorted + +import bonsai.core.search as core +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore from bonsai.bim.prop import StrProperty -from typing import TYPE_CHECKING, Literal, get_args, assert_never def draw_text_editor_header(self, context): diff --git a/src/bonsai/bonsai/bim/module/search/prop.py b/src/bonsai/bonsai/bim/module/search/prop.py index 3cb8a12252..e3403b5abe 100644 --- a/src/bonsai/bonsai/bim/module/search/prop.py +++ b/src/bonsai/bonsai/bim/module/search/prop.py @@ -16,24 +16,31 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, get_args + import bpy -import bonsai.tool as tool import ifcopenshell.util.schema -from bonsai.bim.prop import ObjProperty, BIMFilterGroup -from bonsai.bim.module.search.data import SearchData, ColourByPropertyData, SelectSimilarData -from bpy.types import PropertyGroup -from . import ui, prop, operator from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal, get_args +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.search.data import ( + ColourByPropertyData, + SearchData, + SelectSimilarData, +) +from bonsai.bim.prop import BIMFilterGroup, ObjProperty + +from . import operator, prop, ui def get_element_key(self: "BIMSearchProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/search/ui.py b/src/bonsai/bonsai/bim/module/search/ui.py index 3481e3709b..3b01fdcbbe 100644 --- a/src/bonsai/bonsai/bim/module/search/ui.py +++ b/src/bonsai/bonsai/bim/module/search/ui.py @@ -17,15 +17,26 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import bonsai.tool as tool -import bonsai.bim.helper -from bpy.types import Panel -from bonsai.bim.module.search.data import SearchData, ColourByPropertyData, SelectSimilarData + from typing import TYPE_CHECKING +import bpy +from bpy.types import Panel + +import bonsai.bim.helper +import bonsai.tool as tool +from bonsai.bim.module.search.data import ( + ColourByPropertyData, + SearchData, + SelectSimilarData, +) + if TYPE_CHECKING: - from bonsai.bim.module.search.prop import BIMSearchProperties, BIMColour, BIMFilterItem + from bonsai.bim.module.search.prop import ( + BIMColour, + BIMFilterItem, + BIMSearchProperties, + ) class BIM_PT_search(Panel): diff --git a/src/bonsai/bonsai/bim/module/sequence/__init__.py b/src/bonsai/bonsai/bim/module/sequence/__init__.py index 3262b64527..e15d4e80ee 100644 --- a/src/bonsai/bonsai/bim/module/sequence/__init__.py +++ b/src/bonsai/bonsai/bim/module/sequence/__init__.py @@ -19,7 +19,8 @@ # pyright: reportAttributeAccessIssue=false import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddAnimationCamera, diff --git a/src/bonsai/bonsai/bim/module/sequence/data.py b/src/bonsai/bonsai/bim/module/sequence/data.py index 94df71eacd..7ea6050ca3 100644 --- a/src/bonsai/bonsai/bim/module/sequence/data.py +++ b/src/bonsai/bonsai/bim/module/sequence/data.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import json +from typing import Any + import bpy -import bonsai.tool as tool import ifcopenshell import ifcopenshell.util.attribute import ifcopenshell.util.date from ifcopenshell.util.doc import get_predefined_type_doc -import json -from typing import Any + +import bonsai.tool as tool def refresh(): diff --git a/src/bonsai/bonsai/bim/module/sequence/helper.py b/src/bonsai/bonsai/bim/module/sequence/helper.py index 43dcd1d59b..50d2367144 100644 --- a/src/bonsai/bonsai/bim/module/sequence/helper.py +++ b/src/bonsai/bonsai/bim/module/sequence/helper.py @@ -18,12 +18,13 @@ from __future__ import annotations -import isodate +from datetime import datetime, timedelta +from typing import Any, Union + import bpy -from dateutil import parser import ifcopenshell.util.date -from datetime import timedelta, datetime -from typing import Union, Any +import isodate +from dateutil import parser from bonsai.bim.prop import ISODuration diff --git a/src/bonsai/bonsai/bim/module/sequence/operator.py b/src/bonsai/bonsai/bim/module/sequence/operator.py index c07b9a0496..2b4c317cd8 100644 --- a/src/bonsai/bonsai/bim/module/sequence/operator.py +++ b/src/bonsai/bonsai/bim/module/sequence/operator.py @@ -18,23 +18,23 @@ # pyright: reportUnnecessaryTypeIgnoreComment=error +import calendar +import time import types - from collections import Counter +from datetime import datetime from functools import cache +from typing import TYPE_CHECKING, Union, assert_never, get_args import bpy -import time -import calendar import ifcopenshell.api.pset import ifcopenshell.util.element +from bpy_extras.io_utils import ExportHelper, ImportHelper +from dateutil import parser, relativedelta + import bonsai.bim.schema import bonsai.core.sequence as core import bonsai.tool as tool -from datetime import datetime -from dateutil import parser, relativedelta -from bpy_extras.io_utils import ImportHelper, ExportHelper -from typing import Union, get_args, TYPE_CHECKING, assert_never if TYPE_CHECKING: from bpy.stub_internal.rna_enums import OperatorReturnItems diff --git a/src/bonsai/bonsai/bim/module/sequence/prop.py b/src/bonsai/bonsai/bim/module/sequence/prop.py index 1c35910e6c..6a5937ac45 100644 --- a/src/bonsai/bonsai/bim/module/sequence/prop.py +++ b/src/bonsai/bonsai/bim/module/sequence/prop.py @@ -16,32 +16,35 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, Union, get_args + import bpy -import isodate import ifcopenshell.api import ifcopenshell.api.sequence import ifcopenshell.util.attribute import ifcopenshell.util.date -import bonsai.tool as tool -import bonsai.core.sequence as core -from bonsai.bim.module.sequence.data import SequenceData, AnimationColorSchemeData, refresh as refresh_sequence_data -import bonsai.bim.module.resource.data -import bonsai.bim.module.pset.data -from mathutils import Color -from bonsai.bim.prop import Attribute, ISODuration -from dateutil import parser -from bpy.types import PropertyGroup +import isodate from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Literal, Union, get_args +from bpy.types import PropertyGroup +from dateutil import parser +from mathutils import Color + +import bonsai.bim.module.pset.data +import bonsai.bim.module.resource.data +import bonsai.core.sequence as core +import bonsai.tool as tool +from bonsai.bim.module.sequence.data import AnimationColorSchemeData, SequenceData +from bonsai.bim.module.sequence.data import refresh as refresh_sequence_data +from bonsai.bim.prop import Attribute, ISODuration def getTaskColumns(self, context): diff --git a/src/bonsai/bonsai/bim/module/sequence/ui.py b/src/bonsai/bonsai/bim/module/sequence/ui.py index 9178268c3a..0ecd772276 100644 --- a/src/bonsai/bonsai/bim/module/sequence/ui.py +++ b/src/bonsai/bonsai/bim/module/sequence/ui.py @@ -16,26 +16,32 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Any, Optional + import bpy import ifcopenshell import isodate -import bonsai.tool as tool -import bonsai.bim.helper from bpy.types import Panel, UIList + +import bonsai.bim.helper +import bonsai.tool as tool from bonsai.bim.helper import draw_attributes from bonsai.bim.module.sequence.data import ( + AnimationColorSchemeData, + SequenceData, + StatusData, + TaskICOMData, WorkPlansData, WorkScheduleData, - SequenceData, - TaskICOMData, - AnimationColorSchemeData, - StatusData, ) -from typing import Any, Optional, TYPE_CHECKING if TYPE_CHECKING: + from bonsai.bim.module.sequence.prop import ( + BIMTaskTreeProperties, + BIMWorkScheduleProperties, + Task, + ) from bonsai.bim.prop import Attribute - from bonsai.bim.module.sequence.prop import BIMWorkScheduleProperties, BIMTaskTreeProperties, Task class BIM_PT_status(Panel): diff --git a/src/bonsai/bonsai/bim/module/spatial/__init__.py b/src/bonsai/bonsai/bim/module/spatial/__init__.py index 6c62218532..57cc84a8f1 100644 --- a/src/bonsai/bonsai/bim/module/spatial/__init__.py +++ b/src/bonsai/bonsai/bim/module/spatial/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator, workspace + +from . import operator, prop, ui, workspace classes = ( operator.AssignContainer, diff --git a/src/bonsai/bonsai/bim/module/spatial/data.py b/src/bonsai/bonsai/bim/module/spatial/data.py index baed31f49d..5885a9a76e 100644 --- a/src/bonsai/bonsai/bim/module/spatial/data.py +++ b/src/bonsai/bonsai/bim/module/spatial/data.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bonsai.tool as tool -import ifcopenshell.util.element from typing import Any +import bpy +import ifcopenshell.util.element + +import bonsai.tool as tool + def refresh(): SpatialData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/spatial/decorator.py b/src/bonsai/bonsai/bim/module/spatial/decorator.py index 824fafec1f..8d66d4e8a6 100644 --- a/src/bonsai/bonsai/bim/module/spatial/decorator.py +++ b/src/bonsai/bonsai/bim/module/spatial/decorator.py @@ -17,13 +17,14 @@ # along with Bonsai. If not, see . import blf -import gpu import bmesh -import bonsai.tool as tool +import gpu from bpy.types import SpaceView3D -from mathutils import Vector -from gpu_extras.batch import batch_for_shader from bpy_extras.view3d_utils import location_3d_to_region_2d +from gpu_extras.batch import batch_for_shader +from mathutils import Vector + +import bonsai.tool as tool class GridDecorator: diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index 075c3a9a38..8e88f64cee 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell.util.element -import bonsai.tool as tool -import bonsai.core.spatial as core + import bonsai.bim.handler -from typing import TYPE_CHECKING +import bonsai.core.spatial as core +import bonsai.tool as tool class ReferenceStructure(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/spatial/prop.py b/src/bonsai/bonsai/bim/module/spatial/prop.py index 3d54581551..2f12e164fc 100644 --- a/src/bonsai/bonsai/bim/module/spatial/prop.py +++ b/src/bonsai/bonsai/bim/module/spatial/prop.py @@ -16,28 +16,30 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, Union + import bpy -from bonsai.bim.prop import ObjProperty -from bonsai.bim.module.spatial.data import SpatialDecompositionData -from bpy.types import PropertyGroup -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) -import bonsai.tool as tool -import bonsai.bim.handler -import bonsai.core.geometry import ifcopenshell import ifcopenshell.api.attribute import ifcopenshell.util.unit +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + PointerProperty, + StringProperty, +) +from bpy.types import PropertyGroup + +import bonsai.bim.handler +import bonsai.core.geometry +import bonsai.tool as tool +from bonsai.bim.module.spatial.data import SpatialDecompositionData +from bonsai.bim.prop import ObjProperty from bonsai.tool.unit import parse_distance_string -from typing import TYPE_CHECKING, Union, Literal def get_subelement_class( diff --git a/src/bonsai/bonsai/bim/module/spatial/ui.py b/src/bonsai/bonsai/bim/module/spatial/ui.py index acc604f992..69d9068f85 100644 --- a/src/bonsai/bonsai/bim/module/spatial/ui.py +++ b/src/bonsai/bonsai/bim/module/spatial/ui.py @@ -17,14 +17,21 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, cast + import bpy from bpy.types import Panel, UIList -from bonsai.bim.module.spatial.data import SpatialData, SpatialDecompositionData + import bonsai.tool as tool -from typing import TYPE_CHECKING, cast, Any +from bonsai.bim.module.spatial.data import SpatialData, SpatialDecompositionData if TYPE_CHECKING: - from bonsai.bim.module.spatial.prop import BIMSpatialDecompositionProperties, BIMContainer, Element + from bonsai.bim.module.spatial.prop import ( + BIMContainer, + BIMSpatialDecompositionProperties, + Element, + ) class BIM_PT_spatial(Panel): diff --git a/src/bonsai/bonsai/bim/module/spatial/workspace.py b/src/bonsai/bonsai/bim/module/spatial/workspace.py index aa57b03631..6f34099861 100644 --- a/src/bonsai/bonsai/bim/module/spatial/workspace.py +++ b/src/bonsai/bonsai/bim/module/spatial/workspace.py @@ -18,12 +18,14 @@ import os +from functools import partial + import bpy +from bpy.types import WorkSpaceTool + +import bonsai.core.spatial import bonsai.tool as tool from bonsai.bim.module.model.data import AuthoringData -from bpy.types import WorkSpaceTool -import bonsai.core.spatial -from functools import partial class SpatialTool(WorkSpaceTool): diff --git a/src/bonsai/bonsai/bim/module/structural/__init__.py b/src/bonsai/bonsai/bim/module/structural/__init__.py index db72ad497c..3fa0cb9497 100644 --- a/src/bonsai/bonsai/bim/module/structural/__init__.py +++ b/src/bonsai/bonsai/bim/module/structural/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator, workspace + +from . import operator, prop, ui, workspace classes = ( operator.ShowLoads, diff --git a/src/bonsai/bonsai/bim/module/structural/data.py b/src/bonsai/bonsai/bim/module/structural/data.py index f3215ddff3..1cdfcc2297 100644 --- a/src/bonsai/bonsai/bim/module/structural/data.py +++ b/src/bonsai/bonsai/bim/module/structural/data.py @@ -17,9 +17,10 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool import ifcopenshell.util.doc +import bonsai.tool as tool + def refresh(): StructuralBoundaryConditionsData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/structural/decorator.py b/src/bonsai/bonsai/bim/module/structural/decorator.py index 2bcc90c647..32925be61c 100644 --- a/src/bonsai/bonsai/bim/module/structural/decorator.py +++ b/src/bonsai/bonsai/bim/module/structural/decorator.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -from mathutils import Vector -import numpy as np +from collections.abc import Iterable +from typing import Union + +import blf import bpy import gpu -import blf -import bonsai.tool as tool +import numpy as np from bpy.types import SpaceView3D from gpu_extras.batch import batch_for_shader -from typing import Union -from collections.abc import Iterable +from mathutils import Vector + +import bonsai.tool as tool from bonsai.bim.module.structural.load_decoration_data import ShaderInfo diff --git a/src/bonsai/bonsai/bim/module/structural/load_decoration_data.py b/src/bonsai/bonsai/bim/module/structural/load_decoration_data.py index 7df67e82d4..132c305ad1 100644 --- a/src/bonsai/bonsai/bim/module/structural/load_decoration_data.py +++ b/src/bonsai/bonsai/bim/module/structural/load_decoration_data.py @@ -16,20 +16,22 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bmesh -import numpy as np +from collections.abc import Iterable from math import sin -from mathutils import Vector +from typing import Literal, TypedDict + +import bmesh +import bpy import ifcopenshell import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.unit import ifcopenshell.util.unit as ifcunit +import numpy as np +from mathutils import Vector + import bonsai.tool as tool from bonsai.bim.module.structural.shader import DecorationShader -from typing import Literal, TypedDict -from collections.abc import Iterable class MemberInfo(TypedDict): diff --git a/src/bonsai/bonsai/bim/module/structural/operator.py b/src/bonsai/bonsai/bim/module/structural/operator.py index 9840f87c1e..edb3ab18ae 100644 --- a/src/bonsai/bonsai/bim/module/structural/operator.py +++ b/src/bonsai/bonsai/bim/module/structural/operator.py @@ -16,20 +16,22 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import json +from math import degrees +from typing import TYPE_CHECKING, Any, Literal + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.group import ifcopenshell.api.structural +from mathutils import Matrix, Vector + import bonsai.bim.helper import bonsai.core.structural as core import bonsai.tool as tool -from math import degrees -from mathutils import Vector, Matrix from bonsai.bim.module.structural.decorator import LoadsDecorator -from typing import Literal, Any, TYPE_CHECKING class ShowLoads(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/structural/prop.py b/src/bonsai/bonsai/bim/module/structural/prop.py index c0db44fac6..24d6ead470 100644 --- a/src/bonsai/bonsai/bim/module/structural/prop.py +++ b/src/bonsai/bonsai/bim/module/structural/prop.py @@ -17,27 +17,29 @@ # along with Bonsai. If not, see . from math import radians +from typing import TYPE_CHECKING, Union + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.structural.data import ( - StructuralLoadCasesData, - StructuralLoadsData, - BoundaryConditionsData, - LoadGroupDecorationData, -) -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Union +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.structural.data import ( + BoundaryConditionsData, + LoadGroupDecorationData, + StructuralLoadCasesData, + StructuralLoadsData, +) +from bonsai.bim.prop import Attribute, StrProperty def get_load_groups_to_show(self: "BIMStructuralProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/structural/shader.py b/src/bonsai/bonsai/bim/module/structural/shader.py index 389ed34839..d6f92028d6 100644 --- a/src/bonsai/bonsai/bim/module/structural/shader.py +++ b/src/bonsai/bonsai/bim/module/structural/shader.py @@ -16,9 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import gpu from typing import Literal +import gpu + class DecorationShader: "shader for the load decorations" diff --git a/src/bonsai/bonsai/bim/module/structural/ui.py b/src/bonsai/bonsai/bim/module/structural/ui.py index 44b56633a1..6d93bd3ffd 100644 --- a/src/bonsai/bonsai/bim/module/structural/ui.py +++ b/src/bonsai/bonsai/bim/module/structural/ui.py @@ -17,31 +17,34 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Union + import bpy -import bonsai.tool as tool -import bonsai.bim.helper from bpy.types import Panel, UIList + +import bonsai.bim.helper +import bonsai.tool as tool from bonsai.bim.helper import draw_attributes, prop_with_search from bonsai.bim.module.structural.data import ( - StructuralBoundaryConditionsData, + BoundaryConditionsData, ConnectedStructuralMembersData, - StructuralMemberData, StructuralAnalysisModelsData, + StructuralBoundaryConditionsData, + StructuralConnectionData, StructuralLoadCasesData, StructuralLoadsData, - StructuralConnectionData, - BoundaryConditionsData, + StructuralMemberData, ) -from typing import TYPE_CHECKING, Any, Union if TYPE_CHECKING: from bonsai.bim.module.structural.prop import ( - BIMStructuralProperties, BIMObjectStructuralProperties, + BIMStructuralProperties, BoundaryCondition, - StructuralLoad, StructuralActivity, StructuralAnalysisModel, + StructuralLoad, ) diff --git a/src/bonsai/bonsai/bim/module/structural/workspace.py b/src/bonsai/bonsai/bim/module/structural/workspace.py index fbacac3e1a..407f017834 100644 --- a/src/bonsai/bonsai/bim/module/structural/workspace.py +++ b/src/bonsai/bonsai/bim/module/structural/workspace.py @@ -18,11 +18,13 @@ import os -import bpy -import bonsai.tool as tool -from bpy.types import WorkSpaceTool from functools import partial +import bpy +from bpy.types import WorkSpaceTool + +import bonsai.tool as tool + class StructuralTool(WorkSpaceTool): bl_space_type = "VIEW_3D" diff --git a/src/bonsai/bonsai/bim/module/style/__init__.py b/src/bonsai/bonsai/bim/module/style/__init__.py index ba44a727b1..6f13fd6f2d 100644 --- a/src/bonsai/bonsai/bim/module/style/__init__.py +++ b/src/bonsai/bonsai/bim/module/style/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ActivateExternalStyle, diff --git a/src/bonsai/bonsai/bim/module/style/data.py b/src/bonsai/bonsai/bim/module/style/data.py index 83e453d7a5..dabf6f3ba7 100644 --- a/src/bonsai/bonsai/bim/module/style/data.py +++ b/src/bonsai/bonsai/bim/module/style/data.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Union + import bpy import ifcopenshell import ifcopenshell.util.schema -import bonsai.tool as tool from ifcopenshell.util.doc import get_entity_doc -from typing import Union + +import bonsai.tool as tool def refresh(): diff --git a/src/bonsai/bonsai/bim/module/style/operator.py b/src/bonsai/bonsai/bim/module/style/operator.py index 4a036652f2..a26cce67f1 100644 --- a/src/bonsai/bonsai/bim/module/style/operator.py +++ b/src/bonsai/bonsai/bim/module/style/operator.py @@ -17,19 +17,21 @@ # along with Bonsai. If not, see . import os +from pathlib import Path +from typing import Any, Union + import bpy -import bonsai.bim.helper -import bonsai.tool as tool -import bonsai.core.style as core import ifcopenshell.api import ifcopenshell.api.style import ifcopenshell.util.representation import ifcopenshell.util.unit -from bonsai.bim.module.style.prop import ColourRgb from bpy_extras.io_utils import ImportHelper -from pathlib import Path from mathutils import Vector -from typing import Any, Union + +import bonsai.bim.helper +import bonsai.core.style as core +import bonsai.tool as tool +from bonsai.bim.module.style.prop import ColourRgb # TODO: is this still relevant or can it be deleted? diff --git a/src/bonsai/bonsai/bim/module/style/prop.py b/src/bonsai/bonsai/bim/module/style/prop.py index 42866486c2..b1660dfd4c 100644 --- a/src/bonsai/bonsai/bim/module/style/prop.py +++ b/src/bonsai/bonsai/bim/module/style/prop.py @@ -16,25 +16,25 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import gettext +from typing import TYPE_CHECKING, Literal, Union, get_args + import bpy -import bonsai.tool as tool -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.style.data import StylesData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup -import gettext -from typing import Literal, Union, TYPE_CHECKING, get_args - +import bonsai.tool as tool +from bonsai.bim.module.style.data import StylesData +from bonsai.bim.prop import Attribute, StrProperty _ = gettext.gettext diff --git a/src/bonsai/bonsai/bim/module/style/ui.py b/src/bonsai/bonsai/bim/module/style/ui.py index 37c46b6d63..54ca4f5aa4 100644 --- a/src/bonsai/bonsai/bim/module/style/ui.py +++ b/src/bonsai/bonsai/bim/module/style/ui.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING + import bpy +from bpy.types import Panel, UIList + import bonsai.bim.helper import bonsai.tool as tool -from bpy.types import Panel, UIList -from bonsai.bim.module.style.data import StylesData, BlenderMaterialStyleData -from typing import TYPE_CHECKING +from bonsai.bim.module.style.data import BlenderMaterialStyleData, StylesData if TYPE_CHECKING: from bonsai.bim.module.style.prop import BIMStylesProperties, Style diff --git a/src/bonsai/bonsai/bim/module/system/__init__.py b/src/bonsai/bonsai/bim/module/system/__init__.py index f44270cbe8..d08046ee8f 100644 --- a/src/bonsai/bonsai/bim/module/system/__init__.py +++ b/src/bonsai/bonsai/bim/module/system/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator, decorator + +from . import decorator, operator, prop, ui classes = ( operator.AddPort, diff --git a/src/bonsai/bonsai/bim/module/system/data.py b/src/bonsai/bonsai/bim/module/system/data.py index 5db3d60114..c5d8897cc8 100644 --- a/src/bonsai/bonsai/bim/module/system/data.py +++ b/src/bonsai/bonsai/bim/module/system/data.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Any, Union + import bpy import ifcopenshell import ifcopenshell.util.schema import ifcopenshell.util.system import ifcopenshell.util.unit from ifcopenshell.util.doc import get_entity_doc + import bonsai.tool as tool -from typing import Any, Union def refresh(): diff --git a/src/bonsai/bonsai/bim/module/system/decorator.py b/src/bonsai/bonsai/bim/module/system/decorator.py index c77b2f6879..f2448ba6e6 100644 --- a/src/bonsai/bonsai/bim/module/system/decorator.py +++ b/src/bonsai/bonsai/bim/module/system/decorator.py @@ -16,18 +16,19 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from math import cos, radians, sin + +import bmesh import bpy import gpu -import bmesh -import bonsai.tool as tool -from math import sin, cos, radians -from bpy.types import SpaceView3D -from mathutils import Vector, Matrix -from gpu_extras.batch import batch_for_shader import ifcopenshell -from bonsai.bim.module.system.data import SystemDecorationData from bpy.app.handlers import persistent +from bpy.types import SpaceView3D +from gpu_extras.batch import batch_for_shader +from mathutils import Matrix, Vector +import bonsai.tool as tool +from bonsai.bim.module.system.data import SystemDecorationData ERROR_ELEMENTS_COLOR = (1, 0.2, 0.322, 1) # RED UNSPECIAL_ELEMENT_COLOR = (0.2, 0.2, 0.2, 1) # GREY diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 066e466bd0..8dd6724de3 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -16,15 +16,17 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell.api import ifcopenshell.api.system import ifcopenshell.util.system -import bonsai.tool as tool -import bonsai.core.system as core + import bonsai.bim.helper +import bonsai.core.system as core +import bonsai.tool as tool from bonsai.bim.module.system.data import PortData, SystemData -from typing import TYPE_CHECKING class LoadSystems(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/system/prop.py b/src/bonsai/bonsai/bim/module/system/prop.py index 8954ab67f2..a40f50a90e 100644 --- a/src/bonsai/bonsai/bim/module/system/prop.py +++ b/src/bonsai/bonsai/bim/module/system/prop.py @@ -16,24 +16,26 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy -import bonsai.bim.handler -import bonsai.tool as tool -from bonsai.bim.module.system.data import SystemData -import bonsai.bim.module.system.decorator as decorator -from bonsai.bim.prop import StrProperty, Attribute -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING, Union +from bpy.types import PropertyGroup + +import bonsai.bim.handler +import bonsai.bim.module.system.decorator as decorator +import bonsai.tool as tool +from bonsai.bim.module.system.data import SystemData +from bonsai.bim.prop import Attribute, StrProperty def get_system_class(self: "BIMSystemProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index e41295f40e..d621adc02b 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -17,16 +17,30 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import bonsai.bim.helper -import bonsai.tool as tool -from bonsai.bim.helper import prop_with_search, draw_attributes -from bpy.types import Panel, UIList -from bonsai.bim.module.system.data import SystemData, ZonesData, ActiveObjectZonesData, ObjectSystemData, PortData + from typing import TYPE_CHECKING +import bpy +from bpy.types import Panel, UIList + +import bonsai.bim.helper +import bonsai.tool as tool +from bonsai.bim.helper import draw_attributes, prop_with_search +from bonsai.bim.module.system.data import ( + ActiveObjectZonesData, + ObjectSystemData, + PortData, + SystemData, + ZonesData, +) + if TYPE_CHECKING: - from bonsai.bim.module.system.prop import BIMSystemProperties, System, BIMZoneProperties, Zone + from bonsai.bim.module.system.prop import ( + BIMSystemProperties, + BIMZoneProperties, + System, + Zone, + ) FLOW_DIRECTION_TO_ICON = { diff --git a/src/bonsai/bonsai/bim/module/tester/__init__.py b/src/bonsai/bonsai/bim/module/tester/__init__.py index f31ac5e69a..db63d97b55 100644 --- a/src/bonsai/bonsai/bim/module/tester/__init__.py +++ b/src/bonsai/bonsai/bim/module/tester/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ExecuteIfcTester, diff --git a/src/bonsai/bonsai/bim/module/tester/data.py b/src/bonsai/bonsai/bim/module/tester/data.py index d845c210f9..1d1a1c4901 100644 --- a/src/bonsai/bonsai/bim/module/tester/data.py +++ b/src/bonsai/bonsai/bim/module/tester/data.py @@ -17,9 +17,10 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool import ifctester.reporter +import bonsai.tool as tool + def refresh(): TesterData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/tester/operator.py b/src/bonsai/bonsai/bim/module/tester/operator.py index 822ffd571c..6cb7999184 100644 --- a/src/bonsai/bonsai/bim/module/tester/operator.py +++ b/src/bonsai/bonsai/bim/module/tester/operator.py @@ -16,28 +16,30 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy -import time -import tempfile -import webbrowser -import traceback -import subprocess -import socket -import sys -import threading import asyncio -import socketio -from aiohttp import web +import os +import socket +import subprocess +import sys +import tempfile +import threading +import time +import traceback +import webbrowser +from pathlib import Path +from typing import Union + +import bpy +import ifcopenshell import ifctester import ifctester.ids import ifctester.reporter -import ifcopenshell -import bonsai.tool as tool -import bonsai.bim.handler +import socketio +from aiohttp import web from bpy_extras.io_utils import ExportHelper -from pathlib import Path -from typing import Union + +import bonsai.bim.handler +import bonsai.tool as tool webapp_process = None websocket_server_thread = None diff --git a/src/bonsai/bonsai/bim/module/tester/prop.py b/src/bonsai/bonsai/bim/module/tester/prop.py index fb20a0d4cd..4beb07c533 100644 --- a/src/bonsai/bonsai/bim/module/tester/prop.py +++ b/src/bonsai/bonsai/bim/module/tester/prop.py @@ -19,19 +19,20 @@ from typing import TYPE_CHECKING import bpy -from bonsai.bim.module.tester.data import TesterData -from bonsai.bim.prop import StrProperty, MultipleFileSelect -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup + +from bonsai.bim.module.tester.data import TesterData +from bonsai.bim.prop import MultipleFileSelect, StrProperty def update_active_specification_index(self: "IfcTesterProperties", context: bpy.types.Context) -> None: diff --git a/src/bonsai/bonsai/bim/module/tester/ui.py b/src/bonsai/bonsai/bim/module/tester/ui.py index 66648f4e43..e20bfde1c1 100644 --- a/src/bonsai/bonsai/bim/module/tester/ui.py +++ b/src/bonsai/bonsai/bim/module/tester/ui.py @@ -20,12 +20,12 @@ from __future__ import annotations from typing import TYPE_CHECKING -from bonsai.bim.ui import draw_multiline_text - import bpy from bpy.types import Panel, UIList + import bonsai.tool as tool from bonsai.bim.module.tester.data import TesterData +from bonsai.bim.ui import draw_multiline_text if TYPE_CHECKING: from bonsai.bim.module.tester.prop import ( diff --git a/src/bonsai/bonsai/bim/module/type/__init__.py b/src/bonsai/bonsai/bim/module/type/__init__.py index b77bcbfb8e..0aa61167d6 100644 --- a/src/bonsai/bonsai/bim/module/type/__init__.py +++ b/src/bonsai/bonsai/bim/module/type/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AssignType, diff --git a/src/bonsai/bonsai/bim/module/type/data.py b/src/bonsai/bonsai/bim/module/type/data.py index 3d0f506986..25beb2d36d 100644 --- a/src/bonsai/bonsai/bim/module/type/data.py +++ b/src/bonsai/bonsai/bim/module/type/data.py @@ -17,9 +17,10 @@ # along with Bonsai. If not, see . import bpy -import ifcopenshell.util.type import ifcopenshell.util.element +import ifcopenshell.util.type from ifcopenshell.util.doc import get_entity_doc + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index ce70f59231..66c87177f9 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -16,22 +16,24 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy +from typing import TYPE_CHECKING + import bmesh -import ifcopenshell.util.element -import ifcopenshell.util.schema -import ifcopenshell.util.representation -import ifcopenshell.util.type -import ifcopenshell.util.unit +import bpy import ifcopenshell.api import ifcopenshell.api.attribute import ifcopenshell.api.type +import ifcopenshell.util.element +import ifcopenshell.util.representation +import ifcopenshell.util.schema +import ifcopenshell.util.type +import ifcopenshell.util.unit + import bonsai.bim.helper -import bonsai.tool as tool import bonsai.core.geometry -import bonsai.core.type as core import bonsai.core.root -from typing import TYPE_CHECKING +import bonsai.core.type as core +import bonsai.tool as tool class AssignType(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/bonsai/bonsai/bim/module/type/prop.py b/src/bonsai/bonsai/bim/module/type/prop.py index 2786636404..13141a7947 100644 --- a/src/bonsai/bonsai/bim/module/type/prop.py +++ b/src/bonsai/bonsai/bim/module/type/prop.py @@ -16,24 +16,26 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Union + import bpy import ifcopenshell.util.element import ifcopenshell.util.type -from bonsai.bim.module.type.data import TypeData -from bonsai.bim.prop import Attribute -import bonsai.tool as tool -from typing import TYPE_CHECKING, Union -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup + +import bonsai.tool as tool +from bonsai.bim.module.type.data import TypeData +from bonsai.bim.prop import Attribute def get_relating_type_class(self: "BIMTypeProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/type/ui.py b/src/bonsai/bonsai/bim/module/type/ui.py index d596997d5a..fbd1edd446 100644 --- a/src/bonsai/bonsai/bim/module/type/ui.py +++ b/src/bonsai/bonsai/bim/module/type/ui.py @@ -17,10 +17,11 @@ # along with Bonsai. If not, see . import bpy -import bonsai.tool as tool -import bonsai.bim.module.type.prop as type_prop from bpy.types import Panel -from bonsai.bim.helper import prop_with_search, get_display_value + +import bonsai.bim.module.type.prop as type_prop +import bonsai.tool as tool +from bonsai.bim.helper import get_display_value, prop_with_search from bonsai.bim.module.type.data import TypeData diff --git a/src/bonsai/bonsai/bim/module/unit/__init__.py b/src/bonsai/bonsai/bim/module/unit/__init__.py index 29f209dcd3..a6e65f605e 100644 --- a/src/bonsai/bonsai/bim/module/unit/__init__.py +++ b/src/bonsai/bonsai/bim/module/unit/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddContextDependentUnit, diff --git a/src/bonsai/bonsai/bim/module/unit/data.py b/src/bonsai/bonsai/bim/module/unit/data.py index 22977988bf..fc51ef3710 100644 --- a/src/bonsai/bonsai/bim/module/unit/data.py +++ b/src/bonsai/bonsai/bim/module/unit/data.py @@ -17,10 +17,11 @@ # along with Bonsai. If not, see . import ifcopenshell -import ifcopenshell.util.unit -import ifcopenshell.util.schema import ifcopenshell.util.attribute +import ifcopenshell.util.schema +import ifcopenshell.util.unit from ifcopenshell.util.doc import get_entity_doc + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/unit/operator.py b/src/bonsai/bonsai/bim/module/unit/operator.py index f7c129aba1..da2c7edc1d 100644 --- a/src/bonsai/bonsai/bim/module/unit/operator.py +++ b/src/bonsai/bonsai/bim/module/unit/operator.py @@ -16,12 +16,14 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell.api import ifcopenshell.util.unit -import bonsai.tool as tool + import bonsai.core.unit as core -from typing import TYPE_CHECKING +import bonsai.tool as tool if TYPE_CHECKING: from bpy.stub_internal import rna_enums diff --git a/src/bonsai/bonsai/bim/module/unit/prop.py b/src/bonsai/bonsai/bim/module/unit/prop.py index a335532294..02fe7ac803 100644 --- a/src/bonsai/bonsai/bim/module/unit/prop.py +++ b/src/bonsai/bonsai/bim/module/unit/prop.py @@ -16,21 +16,23 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy -from bonsai.bim.prop import StrProperty, Attribute -from bonsai.bim.module.unit.data import UnitsData -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import TYPE_CHECKING +from bpy.types import PropertyGroup + +from bonsai.bim.module.unit.data import UnitsData +from bonsai.bim.prop import Attribute, StrProperty def get_unit_classes(self: "BIMUnitProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/unit/ui.py b/src/bonsai/bonsai/bim/module/unit/ui.py index 9407ef01ac..703c43c3d5 100644 --- a/src/bonsai/bonsai/bim/module/unit/ui.py +++ b/src/bonsai/bonsai/bim/module/unit/ui.py @@ -17,13 +17,16 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bonsai.bim.helper -import bonsai.tool as tool + +from typing import TYPE_CHECKING + import bpy from bpy.types import Panel, UIList + +import bonsai.bim.helper +import bonsai.tool as tool from bonsai.bim.helper import prop_with_search from bonsai.bim.module.unit.data import UnitsData -from typing import TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.unit.prop import BIMUnitProperties, Unit diff --git a/src/bonsai/bonsai/bim/module/void/__init__.py b/src/bonsai/bonsai/bim/module/void/__init__.py index f89d514ad0..1fef345a89 100644 --- a/src/bonsai/bonsai/bim/module/void/__init__.py +++ b/src/bonsai/bonsai/bim/module/void/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.AddFilling, diff --git a/src/bonsai/bonsai/bim/module/void/data.py b/src/bonsai/bonsai/bim/module/void/data.py index a1999e8d21..6d1fcc12a2 100644 --- a/src/bonsai/bonsai/bim/module/void/data.py +++ b/src/bonsai/bonsai/bim/module/void/data.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from collections.abc import Generator +from typing import Any, Union + import bpy import ifcopenshell + import bonsai.tool as tool -from typing import Any, Union -from collections.abc import Generator def refresh(): diff --git a/src/bonsai/bonsai/bim/module/void/operator.py b/src/bonsai/bonsai/bim/module/void/operator.py index 0d2136d1d7..8c584e0b14 100644 --- a/src/bonsai/bonsai/bim/module/void/operator.py +++ b/src/bonsai/bonsai/bim/module/void/operator.py @@ -21,10 +21,11 @@ import ifcopenshell.api import ifcopenshell.api.feature import ifcopenshell.util.element import ifcopenshell.util.representation -import bonsai.tool as tool + +import bonsai.bim.handler import bonsai.core.geometry import bonsai.core.root -import bonsai.bim.handler +import bonsai.tool as tool from bonsai.bim.module.model.opening import FilledOpeningGenerator diff --git a/src/bonsai/bonsai/bim/module/void/prop.py b/src/bonsai/bonsai/bim/module/void/prop.py index 0170dbd606..1c6bf088d9 100644 --- a/src/bonsai/bonsai/bim/module/void/prop.py +++ b/src/bonsai/bonsai/bim/module/void/prop.py @@ -16,10 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING, Literal, Union, get_args + import bpy +from bpy.props import ( + BoolProperty, + CollectionProperty, + EnumProperty, + IntProperty, + PointerProperty, + StringProperty, +) from bpy.types import PropertyGroup -from bpy.props import PointerProperty, StringProperty, IntProperty, BoolProperty, CollectionProperty, EnumProperty -from typing import Union, TYPE_CHECKING, Literal, get_args OperatorType = Literal["DIFFERENCE", "INTERSECTION", "UNION"] diff --git a/src/bonsai/bonsai/bim/module/void/ui.py b/src/bonsai/bonsai/bim/module/void/ui.py index 8c80adca07..37415eb978 100644 --- a/src/bonsai/bonsai/bim/module/void/ui.py +++ b/src/bonsai/bonsai/bim/module/void/ui.py @@ -17,11 +17,14 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any + import bpy -import bonsai.tool as tool from bpy.types import Panel, UIList + +import bonsai.tool as tool from bonsai.bim.module.void.data import BooleansData, VoidsData -from typing import Any, TYPE_CHECKING if TYPE_CHECKING: import bpy.stub_internal.rna_enums as rna_enums diff --git a/src/bonsai/bonsai/bim/module/web/__init__.py b/src/bonsai/bonsai/bim/module/web/__init__.py index de3f7015a4..d2d28e0f62 100644 --- a/src/bonsai/bonsai/bim/module/web/__init__.py +++ b/src/bonsai/bonsai/bim/module/web/__init__.py @@ -17,7 +17,8 @@ # along with Bonsai. If not, see . import bpy -from . import ui, prop, operator + +from . import operator, prop, ui classes = ( operator.ConnectToWebsocketServer, diff --git a/src/bonsai/bonsai/bim/module/web/data.py b/src/bonsai/bonsai/bim/module/web/data.py index db939cadfa..e74b7fa0b6 100644 --- a/src/bonsai/bonsai/bim/module/web/data.py +++ b/src/bonsai/bonsai/bim/module/web/data.py @@ -16,10 +16,12 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bonsai.tool as tool import os +import bpy + +import bonsai.tool as tool + def refresh(): WebData.is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/web/operator.py b/src/bonsai/bonsai/bim/module/web/operator.py index 1c8bb21e9b..8efd15494e 100644 --- a/src/bonsai/bonsai/bim/module/web/operator.py +++ b/src/bonsai/bonsai/bim/module/web/operator.py @@ -17,7 +17,9 @@ # along with Bonsai. If not, see . import os + import bpy + import bonsai.core.web as core import bonsai.tool as tool diff --git a/src/bonsai/bonsai/bim/module/web/prop.py b/src/bonsai/bonsai/bim/module/web/prop.py index 66ffdd4995..1538454270 100644 --- a/src/bonsai/bonsai/bim/module/web/prop.py +++ b/src/bonsai/bonsai/bim/module/web/prop.py @@ -17,18 +17,19 @@ # along with Bonsai. If not, see . from typing import TYPE_CHECKING + import bpy -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) +from bpy.types import PropertyGroup class WebProperties(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/web/ui.py b/src/bonsai/bonsai/bim/module/web/ui.py index 0a6fca55ae..88bd0e6e6f 100644 --- a/src/bonsai/bonsai/bim/module/web/ui.py +++ b/src/bonsai/bonsai/bim/module/web/ui.py @@ -17,6 +17,7 @@ # along with Bonsai. If not, see . from bpy.types import Panel + import bonsai.tool as tool from bonsai.bim.module.web.data import WebData diff --git a/src/bonsai/bonsai/bim/operator.py b/src/bonsai/bonsai/bim/operator.py index 3621344542..456d5ed5a0 100644 --- a/src/bonsai/bonsai/bim/operator.py +++ b/src/bonsai/bonsai/bim/operator.py @@ -16,40 +16,43 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os import contextlib -import bpy -import bmesh -import time import logging -import textwrap -import shutil +import os import platform +import shutil import subprocess import tempfile +import textwrap +import time import webbrowser -import ifcopenshell -import bonsai.bim -import bonsai.tool as tool -import bonsai.bim.handler +from collections import namedtuple +from collections.abc import Iterable from enum import Enum -from bpy_extras.io_utils import ImportHelper -from bonsai.bim import import_ifc -from bonsai.bim.prop import StrProperty -from bonsai.bim.ui import IFCFileSelector -from bonsai.bim.helper import get_enum_items -from mathutils import Vector, Euler from math import radians from pathlib import Path -from collections import namedtuple -from typing import Union, TYPE_CHECKING, Literal, get_args -from collections.abc import Iterable +from typing import TYPE_CHECKING, Literal, Union, get_args + +import bmesh +import bpy +import ifcopenshell +from bpy_extras.io_utils import ImportHelper +from mathutils import Euler, Vector from natsort import natsorted +import bonsai.bim +import bonsai.bim.handler +import bonsai.tool as tool +from bonsai.bim import import_ifc +from bonsai.bim.helper import get_enum_items +from bonsai.bim.prop import StrProperty +from bonsai.bim.ui import IFCFileSelector + if TYPE_CHECKING: - from bonsai.bim.prop import MultipleFileSelect, Attribute from bpy.stub_internal import rna_enums + from bonsai.bim.prop import Attribute, MultipleFileSelect + class SetTab(bpy.types.Operator): bl_idname = "bim.set_tab" diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 2adbfab5d6..8e6b8ed7c8 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -16,35 +16,37 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy import json +import os +from typing import TYPE_CHECKING, Any, Literal, Union, assert_never, get_args + +import bpy import ifcopenshell import ifcopenshell.util.pset import ifcopenshell.util.unit -from ifcopenshell.util.doc import ( - get_entity_doc, - get_attribute_doc, - get_property_set_doc, - get_property_doc, - get_predefined_type_doc, -) -import bonsai.bim -import bonsai.bim.schema -import bonsai.bim.handler -import bonsai.tool as tool -from bpy.types import PropertyGroup from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, + CollectionProperty, + EnumProperty, FloatProperty, FloatVectorProperty, - CollectionProperty, + IntProperty, + PointerProperty, + StringProperty, ) -from typing import Any, Union, Literal, get_args, TYPE_CHECKING, assert_never +from bpy.types import PropertyGroup +from ifcopenshell.util.doc import ( + get_attribute_doc, + get_entity_doc, + get_predefined_type_doc, + get_property_doc, + get_property_set_doc, +) + +import bonsai.bim +import bonsai.bim.handler +import bonsai.bim.schema +import bonsai.tool as tool cwd = os.path.dirname(os.path.realpath(__file__)) diff --git a/src/bonsai/bonsai/bim/schema.py b/src/bonsai/bonsai/bim/schema.py index 7890f90006..4ef96e72a7 100644 --- a/src/bonsai/bonsai/bim/schema.py +++ b/src/bonsai/bonsai/bim/schema.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + +import bpy import ifcopenshell import ifcopenshell.util.pset + import bonsai.tool as tool -import bpy -from typing import TYPE_CHECKING if TYPE_CHECKING or bpy.app.version >= (5, 0, 0): import _bpy_restrict_state as bpy_restrict_state diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index 81eb4c45d0..f90d2165fb 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -17,49 +17,51 @@ # along with Bonsai. If not, see . import os -import bpy import platform -import platformdirs -import bonsai.bim.helper +import textwrap from pathlib import Path +from typing import TYPE_CHECKING, Literal, Optional + +import bpy +import platformdirs +from bpy.props import BoolProperty, IntProperty, StringProperty from bpy.types import Panel -from bpy.props import StringProperty, IntProperty, BoolProperty from ifcopenshell.util.doc import ( + get_attribute_doc, get_entity_doc, get_property_set_doc, get_type_doc, - get_attribute_doc, ) -from . import ifc -from bonsai import get_debug_info -import bonsai.bim -import bonsai.tool as tool from ifcopenshell.util.file import IfcHeaderExtractor -from bonsai.bim.prop import Attribute +from natsort import natsorted + +import bonsai.bim +import bonsai.bim.helper +import bonsai.tool as tool +from bonsai import get_debug_info from bonsai.bim.module.bsdd.prop import BIMBSDDProperties, BSDDProperty -from bonsai.bim.module.pset.prop import IfcProperty from bonsai.bim.module.model.prop import ( BIMDoorProperties, - BIMWindowProperties, BIMRailingProperties, BIMRoofProperties, BIMStairProperties, + BIMWindowProperties, ) from bonsai.bim.module.model.ui import ( draw_door_properties, - draw_window_properties, draw_railing_properties, draw_roof_properties, draw_stair_properties, + draw_window_properties, ) -from typing import Optional, TYPE_CHECKING, Literal -from natsort import natsorted -import textwrap +from bonsai.bim.module.pset.prop import IfcProperty +from bonsai.bim.prop import Attribute +from . import ifc if TYPE_CHECKING: - from bonsai.bim.prop import ObjProperty from bonsai.bim.module.project.prop import BIMProjectProperties + from bonsai.bim.prop import ObjProperty class IFCFileSelector: diff --git a/src/bonsai/bonsai/core/aggregate.py b/src/bonsai/bonsai/core/aggregate.py index a1f2723338..0b6719a180 100644 --- a/src/bonsai/bonsai/core/aggregate.py +++ b/src/bonsai/bonsai/core/aggregate.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/attribute.py b/src/bonsai/bonsai/core/attribute.py index fd41beda7a..2bc2340cd8 100644 --- a/src/bonsai/bonsai/core/attribute.py +++ b/src/bonsai/bonsai/core/attribute.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/brick.py b/src/bonsai/bonsai/core/brick.py index b285377d86..a21c6d0656 100644 --- a/src/bonsai/bonsai/core/brick.py +++ b/src/bonsai/bonsai/core/brick.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/bsdd.py b/src/bonsai/bonsai/core/bsdd.py index 3bb4513d40..1cbf610ea7 100644 --- a/src/bonsai/bonsai/core/bsdd.py +++ b/src/bonsai/bonsai/core/bsdd.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Any + +from typing import TYPE_CHECKING, Any, Optional if TYPE_CHECKING: import bpy - import ifcopenshell import bsdd + import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/context.py b/src/bonsai/bonsai/core/context.py index 626720fb33..49815881aa 100644 --- a/src/bonsai/bonsai/core/context.py +++ b/src/bonsai/bonsai/core/context.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/cost.py b/src/bonsai/bonsai/core/cost.py index fe55d3c31c..6cd2d916c3 100644 --- a/src/bonsai/bonsai/core/cost.py +++ b/src/bonsai/bonsai/core/cost.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Union, Literal + +from typing import TYPE_CHECKING, Literal, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell import ifcopenshell.util.cost + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/covering.py b/src/bonsai/bonsai/core/covering.py index ffc140dac6..c308c861fc 100644 --- a/src/bonsai/bonsai/core/covering.py +++ b/src/bonsai/bonsai/core/covering.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/debug.py b/src/bonsai/bonsai/core/debug.py index 2446a6e148..b79bd4f0e7 100644 --- a/src/bonsai/bonsai/core/debug.py +++ b/src/bonsai/bonsai/core/debug.py @@ -18,11 +18,13 @@ from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/document.py b/src/bonsai/bonsai/core/document.py index ac49fee10d..e38fc5d1e1 100644 --- a/src/bonsai/bonsai/core/document.py +++ b/src/bonsai/bonsai/core/document.py @@ -17,10 +17,12 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index 6ce74fe394..b56b51751f 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -17,13 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations + from pathlib import Path -from typing import TYPE_CHECKING, Optional, Union, Literal +from typing import TYPE_CHECKING, Literal, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell import ifcopenshell.util.representation + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/geometry.py b/src/bonsai/bonsai/core/geometry.py index 99512f75b8..83ba921d30 100644 --- a/src/bonsai/bonsai/core/geometry.py +++ b/src/bonsai/bonsai/core/geometry.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Union + from collections.abc import Sequence +from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/georeference.py b/src/bonsai/bonsai/core/georeference.py index 419f4218ba..e74b5f577d 100644 --- a/src/bonsai/bonsai/core/georeference.py +++ b/src/bonsai/bonsai/core/georeference.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/ifcgit.py b/src/bonsai/bonsai/core/ifcgit.py index f3a2ead14a..703013e266 100644 --- a/src/bonsai/bonsai/core/ifcgit.py +++ b/src/bonsai/bonsai/core/ifcgit.py @@ -17,14 +17,16 @@ # along with Bonsai. If not, see . from __future__ import annotations + import platform from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy - import ifcopenshell - import bonsai.tool as tool import git + import ifcopenshell + + import bonsai.tool as tool def create_repo(ifcgit: type[tool.IfcGit], ifc: type[tool.Ifc]) -> None: diff --git a/src/bonsai/bonsai/core/library.py b/src/bonsai/bonsai/core/library.py index 53f5f8ce8c..e6c58bf0f7 100644 --- a/src/bonsai/bonsai/core/library.py +++ b/src/bonsai/bonsai/core/library.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/material.py b/src/bonsai/bonsai/core/material.py index 25a1df3e89..65c5955603 100644 --- a/src/bonsai/bonsai/core/material.py +++ b/src/bonsai/bonsai/core/material.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/misc.py b/src/bonsai/bonsai/core/misc.py index a69ffb2180..297b81eac8 100644 --- a/src/bonsai/bonsai/core/misc.py +++ b/src/bonsai/bonsai/core/misc.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/model.py b/src/bonsai/bonsai/core/model.py index c82de50e0e..6edce4d100 100644 --- a/src/bonsai/bonsai/core/model.py +++ b/src/bonsai/bonsai/core/model.py @@ -17,15 +17,16 @@ # along with Bonsai. If not, see . from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Literal + +from typing import TYPE_CHECKING, Literal, Optional if TYPE_CHECKING: import bpy import ifcopenshell - import bonsai.tool as tool - from mathutils import Vector - from bonsai.bim.module.model.wall import DumbWallJoiner, DumbWallAligner + + import bonsai.tool as tool + from bonsai.bim.module.model.wall import DumbWallAligner, DumbWallJoiner AlignType = Literal["CENTER", "EXTERIOR", "INTERIOR"] OffsetType = Literal["CENTER", "EXTERIOR", "INTERIOR"] diff --git a/src/bonsai/bonsai/core/nest.py b/src/bonsai/bonsai/core/nest.py index 645efa0eb6..4ab491666b 100644 --- a/src/bonsai/bonsai/core/nest.py +++ b/src/bonsai/bonsai/core/nest.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/owner.py b/src/bonsai/bonsai/core/owner.py index f2dd366138..90383e7885 100644 --- a/src/bonsai/bonsai/core/owner.py +++ b/src/bonsai/bonsai/core/owner.py @@ -17,14 +17,16 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell - import bonsai.tool as tool - from ifcopenshell.api.owner.add_address import ADDRESS_TYPE from ifcopenshell.api.owner.add_actor import ACTOR_TYPE + from ifcopenshell.api.owner.add_address import ADDRESS_TYPE + + import bonsai.tool as tool def add_person(ifc: type[tool.Ifc]) -> ifcopenshell.entity_instance: diff --git a/src/bonsai/bonsai/core/patch.py b/src/bonsai/bonsai/core/patch.py index a715f11f74..4acee34494 100644 --- a/src/bonsai/bonsai/core/patch.py +++ b/src/bonsai/bonsai/core/patch.py @@ -18,11 +18,13 @@ from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/profile.py b/src/bonsai/bonsai/core/profile.py index 46e179229c..e102360062 100644 --- a/src/bonsai/bonsai/core/profile.py +++ b/src/bonsai/bonsai/core/profile.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/project.py b/src/bonsai/bonsai/core/project.py index f699c8bfe9..18dbd3fab2 100644 --- a/src/bonsai/bonsai/core/project.py +++ b/src/bonsai/bonsai/core/project.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/pset.py b/src/bonsai/bonsai/core/pset.py index 6a92f3d400..6af9f1e1ee 100644 --- a/src/bonsai/bonsai/core/pset.py +++ b/src/bonsai/bonsai/core/pset.py @@ -18,11 +18,13 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Union, Any + +from typing import TYPE_CHECKING, Any, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/qto.py b/src/bonsai/bonsai/core/qto.py index d56130962b..40a866ac33 100644 --- a/src/bonsai/bonsai/core/qto.py +++ b/src/bonsai/bonsai/core/qto.py @@ -17,10 +17,12 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING if TYPE_CHECKING: import bpy + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/resource.py b/src/bonsai/bonsai/core/resource.py index a3423c98db..cab03b7ebc 100644 --- a/src/bonsai/bonsai/core/resource.py +++ b/src/bonsai/bonsai/core/resource.py @@ -19,12 +19,14 @@ # ############################################################################ # from __future__ import annotations -from typing import TYPE_CHECKING, Optional + from collections.abc import Iterable +from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/root.py b/src/bonsai/bonsai/core/root.py index b8f960247c..3a283a6a65 100644 --- a/src/bonsai/bonsai/core/root.py +++ b/src/bonsai/bonsai/core/root.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional + import ifcopenshell.util.element if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/search.py b/src/bonsai/bonsai/core/search.py index 5e9d279df9..cc16fb56f6 100644 --- a/src/bonsai/bonsai/core/search.py +++ b/src/bonsai/bonsai/core/search.py @@ -17,10 +17,12 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING if TYPE_CHECKING: import bpy + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/sequence.py b/src/bonsai/bonsai/core/sequence.py index 610c7095b6..d62b4325ad 100644 --- a/src/bonsai/bonsai/core/sequence.py +++ b/src/bonsai/bonsai/core/sequence.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/spatial.py b/src/bonsai/bonsai/core/spatial.py index 16e11e0fa9..4207d033d4 100644 --- a/src/bonsai/bonsai/core/spatial.py +++ b/src/bonsai/bonsai/core/spatial.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union, assert_never if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/structural.py b/src/bonsai/bonsai/core/structural.py index 4c31883fe5..c3f787905a 100644 --- a/src/bonsai/bonsai/core/structural.py +++ b/src/bonsai/bonsai/core/structural.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/style.py b/src/bonsai/bonsai/core/style.py index 85bb4200aa..20fd98509c 100644 --- a/src/bonsai/bonsai/core/style.py +++ b/src/bonsai/bonsai/core/style.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Any + +from typing import TYPE_CHECKING, Any, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/system.py b/src/bonsai/bonsai/core/system.py index 01f1b7166e..418c472645 100644 --- a/src/bonsai/bonsai/core/system.py +++ b/src/bonsai/bonsai/core/system.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/type.py b/src/bonsai/bonsai/core/type.py index 226f00c461..2467f124d3 100644 --- a/src/bonsai/bonsai/core/type.py +++ b/src/bonsai/bonsai/core/type.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bonsai.core.geometry + from typing import TYPE_CHECKING, Optional +import bonsai.core.geometry + if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/unit.py b/src/bonsai/bonsai/core/unit.py index a8325f9d89..863821e6f5 100644 --- a/src/bonsai/bonsai/core/unit.py +++ b/src/bonsai/bonsai/core/unit.py @@ -18,11 +18,13 @@ from __future__ import annotations + from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/core/web.py b/src/bonsai/bonsai/core/web.py index 187d479b6b..b0d9222460 100644 --- a/src/bonsai/bonsai/core/web.py +++ b/src/bonsai/bonsai/core/web.py @@ -17,11 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: import bpy import ifcopenshell + import bonsai.tool as tool diff --git a/src/bonsai/bonsai/tool/__init__.py b/src/bonsai/bonsai/tool/__init__.py index 8dae934981..68fbf0e381 100644 --- a/src/bonsai/bonsai/tool/__init__.py +++ b/src/bonsai/bonsai/tool/__init__.py @@ -39,8 +39,7 @@ from bonsai.tool.geometry import Geometry from bonsai.tool.georeference import Georeference from bonsai.tool.group import Group from bonsai.tool.ifc import Ifc -from bonsai.tool.ifcgit import IfcGit -from bonsai.tool.ifcgit import IfcGitRepo +from bonsai.tool.ifcgit import IfcGit, IfcGitRepo from bonsai.tool.layer import Layer from bonsai.tool.library import Library from bonsai.tool.loader import Loader diff --git a/src/bonsai/bonsai/tool/aggregate.py b/src/bonsai/bonsai/tool/aggregate.py index db037c2b02..43b155a5aa 100644 --- a/src/bonsai/bonsai/tool/aggregate.py +++ b/src/bonsai/bonsai/tool/aggregate.py @@ -17,15 +17,21 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Literal, Union + import bpy -import bonsai.core.tool -import bonsai.tool as tool import ifcopenshell.util.element import ifcopenshell.util.representation -from typing import Union, TYPE_CHECKING, Literal + +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: - from bonsai.bim.module.aggregate.prop import BIMAggregateProperties, BIMObjectAggregateProperties + from bonsai.bim.module.aggregate.prop import ( + BIMAggregateProperties, + BIMObjectAggregateProperties, + ) class Aggregate(bonsai.core.tool.Aggregate): diff --git a/src/bonsai/bonsai/tool/attribute.py b/src/bonsai/bonsai/tool/attribute.py index 0515edc04c..426283ac9e 100644 --- a/src/bonsai/bonsai/tool/attribute.py +++ b/src/bonsai/bonsai/tool/attribute.py @@ -17,23 +17,29 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import bonsai.core.tool -import bonsai.bim.helper as helper -import bonsai.tool as tool -import ifcopenshell + from typing import ( - Any, - Optional, - Union, - Literal, - TypeVar, TYPE_CHECKING, + Any, + Literal, + Optional, + TypeVar, + Union, assert_never, ) +import bpy +import ifcopenshell + +import bonsai.bim.helper as helper +import bonsai.core.tool +import bonsai.tool as tool + if TYPE_CHECKING: - from bonsai.bim.module.attribute.prop import BIMAttributeProperties, BIMExplorerProperties + from bonsai.bim.module.attribute.prop import ( + BIMAttributeProperties, + BIMExplorerProperties, + ) T = TypeVar("T") diff --git a/src/bonsai/bonsai/tool/bcf.py b/src/bonsai/bonsai/tool/bcf.py index b67a5a98db..c98cfeb4e0 100644 --- a/src/bonsai/bonsai/tool/bcf.py +++ b/src/bonsai/bonsai/tool/bcf.py @@ -17,23 +17,23 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bcf.v2.visinfo -import bonsai.core.tool -import bonsai.tool as tool -import bpy -import bcf.v2.model -import bcf.v2.model.visinfo -import bcf.v2.topic -import bcf.v3.model -import bcf.v3.model.visinfo -import bcf.v3.topic +from typing import TYPE_CHECKING, Any, Optional, TypeGuard, TypeVar, Union import bcf.agnostic.model import bcf.agnostic.topic import bcf.agnostic.visinfo +import bcf.v2.model +import bcf.v2.model.visinfo +import bcf.v2.topic +import bcf.v2.visinfo +import bcf.v3.model +import bcf.v3.model.visinfo +import bcf.v3.topic +import bpy -from typing import Any, Union, TypeVar, TypeGuard, Optional, TYPE_CHECKING +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: from bonsai.bim.module.bcf.prop import BCFProperties diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 56e78d5c4f..d4491e104a 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -17,53 +17,63 @@ # along with Bonsai. If not, see . from __future__ import annotations -import sys -import bpy -import bmesh + +import contextlib +import importlib import json import os import platform import subprocess -import contextlib +import sys import tempfile import traceback +import types +from collections.abc import Callable, Generator, Iterable, Sequence, Sized +from datetime import datetime +from functools import cache, lru_cache +from pathlib import Path +from typing import ( + TYPE_CHECKING, + Any, + Literal, + Optional, + TypeVar, + Union, + assert_never, +) + +import bmesh +import bpy +import ifcopenshell.api +import ifcopenshell.util.element import numpy as np import numpy.typing as npt from ifcopenshell import entity_instance -import ifcopenshell.api -import ifcopenshell.util.element +from mathutils import Vector + +import bonsai.bim import bonsai.core.tool import bonsai.tool as tool -import bonsai.bim -import types -import importlib -from datetime import datetime -from mathutils import Vector -from pathlib import Path -from functools import lru_cache, cache from bonsai.bim.ifc import IFC_CONNECTED_TYPE -from typing import ( - Any, - Optional, - Union, - Literal, - TypeVar, - TYPE_CHECKING, - assert_never, -) -from collections.abc import Iterable, Callable, Generator, Sequence, Sized if TYPE_CHECKING: - from sun_position.properties import SunPosProperties import bpy.stub_internal.rna_enums as rna_enums - from bonsai.bim.prop import BIMProperties, BIMObjectProperties, BIMSnapProperties + from sun_position.properties import SunPosProperties + from bonsai.bim.module.attribute.prop import BIMAttributeProperties - from bonsai.bim.module.constraint.prop import BIMConstraintProperties, BIMObjectConstraintProperties + from bonsai.bim.module.constraint.prop import ( + BIMConstraintProperties, + BIMObjectConstraintProperties, + ) from bonsai.bim.module.covetool.prop import CoveToolProperties from bonsai.bim.module.csv.prop import CsvProperties from bonsai.bim.module.diff.prop import DiffProperties from bonsai.bim.module.fm.prop import BIMFMProperties - from bonsai.bim.module.light.prop import BIMSolarProperties, RadianceExporterProperties + from bonsai.bim.module.light.prop import ( + BIMSolarProperties, + RadianceExporterProperties, + ) + from bonsai.bim.prop import BIMObjectProperties, BIMProperties, BIMSnapProperties T = TypeVar("T") @@ -1349,11 +1359,11 @@ class Blender(bonsai.core.tool.Blender): @classmethod def register_toolbar(cls): - import bonsai.bim.module.model.workspace as ws_model + import bonsai.bim.module.covering.workspace as ws_covering import bonsai.bim.module.drawing.workspace as ws_drawing + import bonsai.bim.module.model.workspace as ws_model import bonsai.bim.module.spatial.workspace as ws_spatial import bonsai.bim.module.structural.workspace as ws_structural - import bonsai.bim.module.covering.workspace as ws_covering if bpy.app.background: return @@ -1381,11 +1391,11 @@ class Blender(bonsai.core.tool.Blender): @classmethod def unregister_toolbar(cls): - import bonsai.bim.module.model.workspace as ws_model + import bonsai.bim.module.covering.workspace as ws_covering import bonsai.bim.module.drawing.workspace as ws_drawing + import bonsai.bim.module.model.workspace as ws_model import bonsai.bim.module.spatial.workspace as ws_spatial import bonsai.bim.module.structural.workspace as ws_structural - import bonsai.bim.module.covering.workspace as ws_covering if bpy.app.background: return @@ -1763,8 +1773,8 @@ class Blender(bonsai.core.tool.Blender): @classmethod @lru_cache def get_list_of_tools(cls) -> tuple[str, ...]: - from bonsai.bim.module.model.workspace import BimTool from bonsai.bim.module.drawing.workspace import AnnotationTool + from bonsai.bim.module.model.workspace import BimTool return tuple(cls.bl_idname for cls in (BimTool.__subclasses__() + [BimTool, AnnotationTool])) diff --git a/src/bonsai/bonsai/tool/boundary.py b/src/bonsai/bonsai/tool/boundary.py index d09ebcbee1..16662919aa 100644 --- a/src/bonsai/bonsai/tool/boundary.py +++ b/src/bonsai/bonsai/tool/boundary.py @@ -17,16 +17,22 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from collections.abc import Sequence +from typing import TYPE_CHECKING, Any + import bpy import mathutils +from mathutils import Matrix, Vector + import bonsai.core.tool import bonsai.tool as tool -from mathutils import Matrix, Vector -from typing import Any, TYPE_CHECKING -from collections.abc import Sequence if TYPE_CHECKING: - from bonsai.bim.module.boundary.prop import BIMBoundaryProperties, BIMObjectBoundaryProperties + from bonsai.bim.module.boundary.prop import ( + BIMBoundaryProperties, + BIMObjectBoundaryProperties, + ) class Boundary(bonsai.core.tool.Boundary): diff --git a/src/bonsai/bonsai/tool/brick.py b/src/bonsai/bonsai/tool/brick.py index 9da53f4413..42b80cc288 100644 --- a/src/bonsai/bonsai/tool/brick.py +++ b/src/bonsai/bonsai/tool/brick.py @@ -17,28 +17,32 @@ # along with Bonsai. If not, see . from __future__ import annotations -import os -import bpy + import datetime +import os +from collections.abc import Generator +from contextlib import contextmanager +from pathlib import Path +from typing import TYPE_CHECKING, Any, Union + +import bpy import ifcopenshell import ifcopenshell.guid import ifcopenshell.util.brick import ifcopenshell.util.element import ifcopenshell.util.system + import bonsai.core.brick import bonsai.core.tool import bonsai.tool as tool -from pathlib import Path -from contextlib import contextmanager -from typing import Any, Union, TYPE_CHECKING -from collections.abc import Generator try: + import urllib.parse + import brickschema import brickschema.persistent from brickschema.namespaces import REF, A - import urllib.parse - from rdflib import Literal, URIRef, Namespace, BNode + from rdflib import BNode, Literal, Namespace, URIRef from rdflib.namespace import RDF except: # See #1860 @@ -46,7 +50,8 @@ except: if TYPE_CHECKING: import brickschema - from rdflib import Literal, URIRef, Namespace, BNode + from rdflib import BNode, Literal, Namespace, URIRef + from bonsai.bim.module.brick.prop import BIMBrickProperties # silence known rdflib_sqlalchemy TypeError warning diff --git a/src/bonsai/bonsai/tool/bsdd.py b/src/bonsai/bonsai/tool/bsdd.py index 337cf626c9..dc42708867 100644 --- a/src/bonsai/bonsai/tool/bsdd.py +++ b/src/bonsai/bonsai/tool/bsdd.py @@ -17,16 +17,19 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bonsai.core.tool -import bonsai.tool as tool -import bpy + import json +from typing import TYPE_CHECKING, Any, TypedDict, Union + +import bpy import bsdd import ifcopenshell.api.library -import ifcopenshell.util.type -import ifcopenshell.util.element import ifcopenshell.util.classification -from typing import Any, Union, TYPE_CHECKING, TypedDict +import ifcopenshell.util.element +import ifcopenshell.util.type + +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: from bonsai.bim.module.bsdd.prop import BIMBSDDProperties, BSDDDictionary diff --git a/src/bonsai/bonsai/tool/cad.py b/src/bonsai/bonsai/tool/cad.py index 8c65f4babb..4e3d8e1499 100644 --- a/src/bonsai/bonsai/tool/cad.py +++ b/src/bonsai/bonsai/tool/cad.py @@ -29,16 +29,18 @@ # - You can now derive the center from an arc without generating geometry from __future__ import annotations -import sys -import bpy -import math -import bmesh -import numpy as np -import mathutils.geometry -from mathutils import Vector, Matrix, geometry + import itertools +import math +import sys from typing import TYPE_CHECKING, Union +import bmesh +import bpy +import mathutils.geometry +import numpy as np +from mathutils import Matrix, Vector, geometry + if TYPE_CHECKING: from bonsai.bim.module.cad.prop import BIMCadProperties diff --git a/src/bonsai/bonsai/tool/clash.py b/src/bonsai/bonsai/tool/clash.py index 17582540e4..7c9961646c 100644 --- a/src/bonsai/bonsai/tool/clash.py +++ b/src/bonsai/bonsai/tool/clash.py @@ -17,17 +17,20 @@ # along with Bonsai. If not, see . from __future__ import annotations -import os -import bpy + import json -import ifcopenshell -import bonsai.core.tool -import bonsai.tool as tool +import os from contextlib import contextmanager -from mathutils import Vector +from typing import TYPE_CHECKING, Literal, Union, get_args + +import bpy +import ifcopenshell from ifcclash import ifcclash from ifcclash.ifcclash import ClashSource -from typing import TYPE_CHECKING, Union, Literal, get_args +from mathutils import Vector + +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: from bonsai.bim.module.clash.prop import BIMClashProperties diff --git a/src/bonsai/bonsai/tool/classification.py b/src/bonsai/bonsai/tool/classification.py index 3535e0a12f..7b2ebb073e 100644 --- a/src/bonsai/bonsai/tool/classification.py +++ b/src/bonsai/bonsai/tool/classification.py @@ -17,15 +17,21 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Union, assert_never + import bpy import ifcopenshell.api import ifcopenshell.util.classification + import bonsai.core.tool import bonsai.tool as tool -from typing import Union, assert_never, TYPE_CHECKING if TYPE_CHECKING: - from bonsai.bim.module.classification.prop import BIMClassificationReferenceProperties, BIMClassificationProperties + from bonsai.bim.module.classification.prop import ( + BIMClassificationProperties, + BIMClassificationReferenceProperties, + ) class Classification(bonsai.core.tool.Classification): diff --git a/src/bonsai/bonsai/tool/collector.py b/src/bonsai/bonsai/tool/collector.py index c357287a6b..01c13d6cec 100644 --- a/src/bonsai/bonsai/tool/collector.py +++ b/src/bonsai/bonsai/tool/collector.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import Union + import bpy +import ifcopenshell.util.element + import bonsai.core.tool import bonsai.tool as tool -import ifcopenshell.util.element -from typing import Union class Collector(bonsai.core.tool.Collector): diff --git a/src/bonsai/bonsai/tool/context.py b/src/bonsai/bonsai/tool/context.py index c1582cd37f..50223a6320 100644 --- a/src/bonsai/bonsai/tool/context.py +++ b/src/bonsai/bonsai/tool/context.py @@ -17,16 +17,19 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Union + import bpy -import bonsai.bim.helper -import bonsai.tool as tool -import bonsai.core.tool import ifcopenshell -from typing import Any, Union, TYPE_CHECKING + +import bonsai.bim.helper +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: - from bonsai.bim.prop import Attribute from bonsai.bim.module.context.prop import BIMContextProperties + from bonsai.bim.prop import Attribute class Context(bonsai.core.tool.Context): diff --git a/src/bonsai/bonsai/tool/cost.py b/src/bonsai/bonsai/tool/cost.py index d1ee2a841c..771b15f43e 100644 --- a/src/bonsai/bonsai/tool/cost.py +++ b/src/bonsai/bonsai/tool/cost.py @@ -17,26 +17,29 @@ # along with Bonsai. If not, see . from __future__ import annotations + +import json +from collections.abc import Generator +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Optional, Union, assert_never + import bpy -import bonsai.core.tool -import bonsai.tool as tool import ifcopenshell.api import ifcopenshell.api.cost import ifcopenshell.api.document import ifcopenshell.api.nest -import ifcopenshell.util.element -import ifcopenshell.util.date import ifcopenshell.util.cost +import ifcopenshell.util.date +import ifcopenshell.util.element import ifcopenshell.util.unit + import bonsai.bim.helper -import json -from pathlib import Path -from typing import Optional, Any, Union, Literal, TYPE_CHECKING, assert_never -from collections.abc import Generator +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: - from bonsai.bim.prop import Attribute from bonsai.bim.module.cost.prop import BIMCostProperties, CostItemQuantity + from bonsai.bim.prop import Attribute class Cost(bonsai.core.tool.Cost): @@ -581,9 +584,10 @@ class Cost(bonsai.core.tool.Cost): ) -> ifcopenshell.entity_instance: if not file_path: return - from ifc5d.csv2ifc import Csv2Ifc import time + from ifc5d.csv2ifc import Csv2Ifc + start = time.time() resolved_path = tool.Ifc.resolve_uri(file_path) @@ -804,8 +808,8 @@ class Cost(bonsai.core.tool.Cost): format: Literal["CSV", "ODS", "XLSX"], cost_schedule: Optional[ifcopenshell.entity_instance] = None, ) -> Union[str, None]: - import subprocess import os + import subprocess import sys if dirpath: diff --git a/src/bonsai/bonsai/tool/covering.py b/src/bonsai/bonsai/tool/covering.py index c83a6f3e09..018a39eb46 100644 --- a/src/bonsai/bonsai/tool/covering.py +++ b/src/bonsai/bonsai/tool/covering.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING + import bpy import ifcopenshell import ifcopenshell.util.element + import bonsai.core.tool import bonsai.tool as tool -from typing import TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.covering.prop import BIMCoveringProperties diff --git a/src/bonsai/bonsai/tool/debug.py b/src/bonsai/bonsai/tool/debug.py index 8bd17fa1c1..ccd30ddd74 100644 --- a/src/bonsai/bonsai/tool/debug.py +++ b/src/bonsai/bonsai/tool/debug.py @@ -17,25 +17,28 @@ # along with Bonsai. If not, see . from __future__ import annotations + +import json import os import re -import json +from collections import defaultdict +from collections.abc import Iterable +from typing import TYPE_CHECKING, Literal, Union, assert_never + import bmesh import bpy -import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.api.material import ifcopenshell.api.owner import ifcopenshell.express +import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.element import ifcopenshell.util.schema +from mathutils import Vector + import bonsai.core.style import bonsai.core.tool import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from mathutils import Vector -from collections import defaultdict -from typing import Literal, TYPE_CHECKING, assert_never, Union -from collections.abc import Iterable if TYPE_CHECKING: from bonsai.bim.module.debug.prop import BIMDebugProperties diff --git a/src/bonsai/bonsai/tool/demo.py b/src/bonsai/bonsai/tool/demo.py index 745fcf914c..98375b3e3b 100644 --- a/src/bonsai/bonsai/tool/demo.py +++ b/src/bonsai/bonsai/tool/demo.py @@ -31,11 +31,13 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import bpy import ifcopenshell + import bonsai.core.tool import bonsai.tool as tool -from typing import TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.demo.prop import BIMDemoProperties diff --git a/src/bonsai/bonsai/tool/document.py b/src/bonsai/bonsai/tool/document.py index bf8e4d17b8..5d0aaf1a8e 100644 --- a/src/bonsai/bonsai/tool/document.py +++ b/src/bonsai/bonsai/tool/document.py @@ -17,14 +17,17 @@ # along with Bonsai. If not, see . from __future__ import annotations + +import json +from typing import TYPE_CHECKING, Any, Union + import bpy import ifcopenshell.util.system +from natsort import natsorted + import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool -import json -from natsort import natsorted -from typing import Any, Union, TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.document.prop import BIMDocumentProperties diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 3f1c6de28d..f268151faa 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -17,60 +17,63 @@ # along with Bonsai. If not, see . from __future__ import annotations -import os -import re + import collections import collections.abc -import bpy -import math import json -import lark -import bmesh -import shutil import logging -import shapely +import math +import os import platform -import mathutils +import re +import shutil import subprocess -import numpy as np -import bonsai.core.tool -import bonsai.core.geometry -import bonsai.core.type -import bonsai.tool as tool +from collections.abc import Iterable, Sequence +from fractions import Fraction +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, NamedTuple, Optional, Union + +import bmesh +import bpy import ifcopenshell.api -import ifcopenshell.api.geometry import ifcopenshell.api.context -import ifcopenshell.api.drawing import ifcopenshell.api.document +import ifcopenshell.api.drawing +import ifcopenshell.api.geometry import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.geom -import ifcopenshell.util.placement -import ifcopenshell.util.unit -import ifcopenshell.util.representation import ifcopenshell.util.element +import ifcopenshell.util.placement +import ifcopenshell.util.representation import ifcopenshell.util.selector import ifcopenshell.util.shape +import ifcopenshell.util.unit +import lark +import mathutils +import numpy as np +import shapely +from ifcopenshell.util.shape_builder import ShapeBuilder +from lxml import etree +from mathutils import Matrix, Vector +from shapely.ops import unary_union + import bonsai.bim.helper import bonsai.bim.import_ifc +import bonsai.core.geometry import bonsai.core.root -from shapely.ops import unary_union -from lxml import etree -from mathutils import Vector, Matrix -from fractions import Fraction -from typing import Optional, Union, Any, Literal, TYPE_CHECKING, NamedTuple -from collections.abc import Iterable, Sequence -from pathlib import Path -from ifcopenshell.util.shape_builder import ShapeBuilder +import bonsai.core.tool +import bonsai.core.type +import bonsai.tool as tool if TYPE_CHECKING: from bonsai.bim.module.drawing.prop import ( + BIMAnnotationProperties, + BIMAssignedProductProperties, + BIMCameraProperties, + BIMTextProperties, DocProperties, Sheet, - BIMAnnotationProperties, - BIMTextProperties, - BIMCameraProperties, - BIMAssignedProductProperties, ) from bonsai.bim.module.drawing.prop import Drawing as DrawingProperties @@ -2793,9 +2796,10 @@ class Drawing(bonsai.core.tool.Drawing): @classmethod def convert_svg_to_dxf(cls, svg_filepath: Path, dxf_filepath: Path) -> None: - import ezdxf import xml.etree.ElementTree as ET + import ezdxf + SVG = "{http://www.w3.org/2000/svg}" IFC = "{http://www.ifcopenshell.org/ns}" diff --git a/src/bonsai/bonsai/tool/feature.py b/src/bonsai/bonsai/tool/feature.py index adc6cd9528..d58a8df55c 100644 --- a/src/bonsai/bonsai/tool/feature.py +++ b/src/bonsai/bonsai/tool/feature.py @@ -17,16 +17,19 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from collections.abc import Iterable +from typing import TYPE_CHECKING + import bpy -import bonsai.core.tool -import bonsai.tool as tool -import bonsai.bim.helper -import bonsai.core.geometry import ifcopenshell import ifcopenshell.api.feature import ifcopenshell.util.representation -from typing import TYPE_CHECKING -from collections.abc import Iterable + +import bonsai.bim.helper +import bonsai.core.geometry +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: from bonsai.bim.module.void.prop import BIMBooleanProperties diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index 51ff6bfcf3..5a6429adfe 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -17,14 +17,27 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import bmesh -import struct + import hashlib import logging -import numpy as np -import numpy.typing as npt import multiprocessing +import struct +from collections import defaultdict +from collections.abc import Generator, Iterable, Iterator +from math import pi, radians +from typing import ( + TYPE_CHECKING, + Any, + Literal, + Optional, + TypeGuard, + Union, + cast, + get_args, +) + +import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.boundary @@ -45,37 +58,30 @@ import ifcopenshell.util.shape import ifcopenshell.util.shape_builder import ifcopenshell.util.system import ifcopenshell.util.unit -import bonsai.core.tool +import numpy as np +import numpy.typing as npt +from mathutils import Matrix, Vector +from mathutils.bvhtree import BVHTree +from typing_extensions import TypeIs + +import bonsai.bim.helper +import bonsai.bim.import_ifc import bonsai.core.drawing import bonsai.core.geometry import bonsai.core.root import bonsai.core.spatial import bonsai.core.style import bonsai.core.system +import bonsai.core.tool import bonsai.tool as tool -import bonsai.bim.helper -import bonsai.bim.import_ifc -from collections import defaultdict -from math import radians, pi -from mathutils import Vector, Matrix -from mathutils.bvhtree import BVHTree from bonsai.bim.ifc import IfcStore -from typing import ( - Union, - Optional, - Literal, - TYPE_CHECKING, - get_args, - cast, - TypeGuard, - Any, -) -from collections.abc import Iterable, Iterator, Generator -from typing_extensions import TypeIs if TYPE_CHECKING: + from bonsai.bim.module.geometry.prop import ( + BIMGeometryProperties, + BIMObjectGeometryProperties, + ) from bonsai.bim.prop import Attribute, BIMMeshProperties - from bonsai.bim.module.geometry.prop import BIMObjectGeometryProperties, BIMGeometryProperties class Geometry(bonsai.core.tool.Geometry): diff --git a/src/bonsai/bonsai/tool/georeference.py b/src/bonsai/bonsai/tool/georeference.py index 7b56adbab2..eefdd12cd9 100644 --- a/src/bonsai/bonsai/tool/georeference.py +++ b/src/bonsai/bonsai/tool/georeference.py @@ -17,22 +17,25 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + import json -import numpy as np +from typing import TYPE_CHECKING, Any, Literal, Union + +import bpy import ifcopenshell import ifcopenshell.api.georeference import ifcopenshell.util.geolocation import ifcopenshell.util.placement import ifcopenshell.util.unit +import numpy as np + +import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool -import bonsai.bim.helper -from typing import Any, Union, Literal, TYPE_CHECKING if TYPE_CHECKING: - from bonsai.bim.prop import Attribute from bonsai.bim.module.georeference.prop import BIMGeoreferenceProperties + from bonsai.bim.prop import Attribute class Georeference(bonsai.core.tool.Georeference): diff --git a/src/bonsai/bonsai/tool/group.py b/src/bonsai/bonsai/tool/group.py index d800904bf8..f0f3664f6f 100644 --- a/src/bonsai/bonsai/tool/group.py +++ b/src/bonsai/bonsai/tool/group.py @@ -17,17 +17,21 @@ # along with Bonsai. If not, see . from __future__ import annotations + import json +from typing import TYPE_CHECKING, Literal, Union, assert_never + import bpy import ifcopenshell +from natsort import natsorted + import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool -from typing import TYPE_CHECKING, Literal, assert_never, Union -from natsort import natsorted if TYPE_CHECKING: - from bonsai.bim.module.group.prop import BIMGroupProperties, Group as GroupProp + from bonsai.bim.module.group.prop import BIMGroupProperties + from bonsai.bim.module.group.prop import Group as GroupProp from bonsai.bim.module.system.prop import BIMSystemProperties, System diff --git a/src/bonsai/bonsai/tool/ifc.py b/src/bonsai/bonsai/tool/ifc.py index 9f1c84e6d1..81c5202c19 100644 --- a/src/bonsai/bonsai/tool/ifc.py +++ b/src/bonsai/bonsai/tool/ifc.py @@ -17,20 +17,23 @@ # along with Bonsai. If not, see . from __future__ import annotations + import os +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Optional, Union, final + import bpy -import numpy as np import ifcopenshell.api import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper import ifcopenshell.util.element import ifcopenshell.util.schema -import bonsai.core.tool +import numpy as np + import bonsai.bim.handler import bonsai.bim.schema +import bonsai.core.tool import bonsai.tool as tool -from pathlib import Path -from bonsai.bim.ifc import IfcStore, IFC_CONNECTED_TYPE -from typing import Optional, Union, Any, final, Literal, TYPE_CHECKING +from bonsai.bim.ifc import IFC_CONNECTED_TYPE, IfcStore if TYPE_CHECKING: from bpy.stub_internal import rna_enums diff --git a/src/bonsai/bonsai/tool/ifcgit.py b/src/bonsai/bonsai/tool/ifcgit.py index 7dfb2431d0..6854b38432 100644 --- a/src/bonsai/bonsai/tool/ifcgit.py +++ b/src/bonsai/bonsai/tool/ifcgit.py @@ -17,17 +17,20 @@ # along with Bonsai. If not, see . from __future__ import annotations + +import logging import os import re import subprocess -import bpy -import logging import tempfile +from pathlib import Path +from typing import TYPE_CHECKING, Any, Literal, Union + +import bpy + +import bonsai.tool as tool from bonsai.bim import import_ifc from bonsai.bim.ifc import IfcStore -import bonsai.tool as tool -from pathlib import Path -from typing import TYPE_CHECKING, Union, Literal, Any # allows git import even if git executable isn't found os.environ["GIT_PYTHON_REFRESH"] = "quiet" diff --git a/src/bonsai/bonsai/tool/layer.py b/src/bonsai/bonsai/tool/layer.py index 7b5775d20d..396cc13605 100644 --- a/src/bonsai/bonsai/tool/layer.py +++ b/src/bonsai/bonsai/tool/layer.py @@ -17,10 +17,13 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING + import bpy + import bonsai.core.tool import bonsai.tool as tool -from typing import TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.layer.prop import BIMLayerProperties diff --git a/src/bonsai/bonsai/tool/library.py b/src/bonsai/bonsai/tool/library.py index e16a159b00..861278e91c 100644 --- a/src/bonsai/bonsai/tool/library.py +++ b/src/bonsai/bonsai/tool/library.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations -import ifcopenshell + +from typing import TYPE_CHECKING, Any, Literal, Union + import bpy +import ifcopenshell + import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool -from typing import Literal, Any, Union, TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.library.prop import BIMLibraryProperties diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index d5ceea1db5..8fdce1da4c 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -17,11 +17,16 @@ # along with Bonsai. If not, see . from __future__ import annotations + +import logging import os import re -import bpy +from math import atan, radians +from pathlib import Path +from typing import Any, Optional, Union, cast + import bmesh -import logging +import bpy import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.element @@ -30,17 +35,14 @@ import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape import ifcopenshell.util.unit -import bonsai.core.tool -import bonsai.tool as tool -import bonsai.bim.import_ifc import numpy as np import numpy.typing as npt from ifcopenshell.util.shape_builder import np_to_4d -from math import atan, radians -from mathutils import Vector, Matrix -from pathlib import Path -from typing import Union, Any, Optional, cast +from mathutils import Matrix, Vector +import bonsai.bim.import_ifc +import bonsai.core.tool +import bonsai.tool as tool # Progressively we'll refactor loading elements into Blender objects into this # class. This will break down the monolithic import_ifc module and allow us to @@ -313,6 +315,7 @@ class Loader(bonsai.core.tool.Loader): # https://blender.stackexchange.com/questions/173206/how-to-efficiently-convert-a-pil-image-to-bpy-types-image # https://blender.stackexchange.com/questions/62072/does-blender-have-a-method-to-a-get-png-formatted-bytearray-for-an-image-via-pyt import io + from PIL import Image value = texture["RasterCode"] diff --git a/src/bonsai/bonsai/tool/material.py b/src/bonsai/bonsai/tool/material.py index 5e8b531c5c..6f862100e2 100644 --- a/src/bonsai/bonsai/tool/material.py +++ b/src/bonsai/bonsai/tool/material.py @@ -17,22 +17,28 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from collections import defaultdict +from typing import TYPE_CHECKING, Any, Optional, Union + import bpy import ifcopenshell import ifcopenshell.api.material -import bonsai.core.tool -import bonsai.core.material -import bonsai.tool as tool -import bonsai.bim.helper -import ifcopenshell.util.unit import ifcopenshell.util.element -from collections import defaultdict -from typing import Union, Any, TYPE_CHECKING, Optional +import ifcopenshell.util.unit + +import bonsai.bim.helper +import bonsai.core.material +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: # Avoid circular imports. + from bonsai.bim.module.material.prop import ( + BIMMaterialProperties, + BIMObjectMaterialProperties, + ) from bonsai.bim.module.material.prop import Material as MaterialItem - from bonsai.bim.module.material.prop import BIMMaterialProperties, BIMObjectMaterialProperties class Material(bonsai.core.tool.Material): diff --git a/src/bonsai/bonsai/tool/misc.py b/src/bonsai/bonsai/tool/misc.py index e2a8028181..890e8aac9b 100644 --- a/src/bonsai/bonsai/tool/misc.py +++ b/src/bonsai/bonsai/tool/misc.py @@ -16,17 +16,19 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy +from typing import Union + import bmesh +import bpy import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.unit -import bonsai.core.tool +from mathutils import Matrix, Vector + import bonsai.core.root +import bonsai.core.tool import bonsai.tool as tool -from mathutils import Vector, Matrix -from typing import Union class Misc(bonsai.core.tool.Misc): diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 8ecd7c577b..bc6357cb0d 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -17,13 +17,26 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy -import json -import bmesh -import shapely + import collections import collections.abc -import numpy as np +import json +from collections.abc import Iterable, Sequence +from copy import deepcopy +from math import atan, cos, degrees, pi, radians +from typing import ( + TYPE_CHECKING, + Any, + Literal, + Optional, + TypedDict, + TypeVar, + Union, + assert_never, +) + +import bmesh +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.geometry @@ -37,38 +50,37 @@ import ifcopenshell.util.representation import ifcopenshell.util.shape import ifcopenshell.util.shape_builder import ifcopenshell.util.unit +import mathutils +import numpy as np +import shapely +from ifcopenshell.util.shape_builder import ShapeBuilder, np_to_3d +from mathutils import Matrix, Vector + import bonsai.core.geometry import bonsai.core.tool import bonsai.tool as tool -import mathutils -from math import atan, cos, degrees, pi, radians -from mathutils import Matrix, Vector -from copy import deepcopy from bonsai.bim import import_ifc -from ifcopenshell.util.shape_builder import ShapeBuilder, np_to_3d -from typing import Optional, Union, TypeVar, Any, Literal, TYPE_CHECKING, TypedDict, assert_never -from collections.abc import Iterable, Sequence - T = TypeVar("T") V_ = tool.Blender.V_ if TYPE_CHECKING: - import sverchok.node_tree import ifcsverchok.nodes.ifc.shape_builder.shape_output - from bonsai.bim.module.model.prop import ( - BIMModelProperties, - BIMDoorProperties, - BIMArrayProperties, - BIMRoofProperties, - BIMWindowProperties, - BIMStairProperties, - BIMRailingProperties, - BIMExternalParametricGeometryProperties, - BIMPolylineProperties, - ) + import sverchok.node_tree from sverchok.core.node_group import SvGroupTreeNode + from bonsai.bim.module.model.prop import ( + BIMArrayProperties, + BIMDoorProperties, + BIMExternalParametricGeometryProperties, + BIMModelProperties, + BIMPolylineProperties, + BIMRailingProperties, + BIMRoofProperties, + BIMStairProperties, + BIMWindowProperties, + ) + class Model(bonsai.core.tool.Model): @classmethod @@ -1181,6 +1193,7 @@ class Model(bonsai.core.tool.Model): return from PIL import Image, ImageDraw + from bonsai.bim.module.model.data import AuthoringData obj = tool.Ifc.get_object(element) diff --git a/src/bonsai/bonsai/tool/nest.py b/src/bonsai/bonsai/tool/nest.py index 094299c499..a386e402ec 100644 --- a/src/bonsai/bonsai/tool/nest.py +++ b/src/bonsai/bonsai/tool/nest.py @@ -17,11 +17,14 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Union + import bpy +import ifcopenshell.util.element + import bonsai.core.tool import bonsai.tool as tool -import ifcopenshell.util.element -from typing import TYPE_CHECKING, Union if TYPE_CHECKING: from bonsai.bim.module.nest.prop import BIMNestProperties, BIMObjectNestProperties diff --git a/src/bonsai/bonsai/tool/owner.py b/src/bonsai/bonsai/tool/owner.py index 615fd64db8..9ed0bda219 100644 --- a/src/bonsai/bonsai/tool/owner.py +++ b/src/bonsai/bonsai/tool/owner.py @@ -17,12 +17,15 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Literal, Union, assert_never + import bpy +import ifcopenshell + +import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool -import bonsai.bim.helper -import ifcopenshell -from typing import Union, Any, TYPE_CHECKING, Literal, assert_never if TYPE_CHECKING: from bonsai.bim.module.owner.prop import BIMOwnerProperties diff --git a/src/bonsai/bonsai/tool/patch.py b/src/bonsai/bonsai/tool/patch.py index eb2b514173..6ae06b5e10 100644 --- a/src/bonsai/bonsai/tool/patch.py +++ b/src/bonsai/bonsai/tool/patch.py @@ -17,11 +17,14 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any + import bpy import ifcopenshell import ifcpatch + import bonsai.core.tool -from typing import Any, TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.patch.prop import BIMPatchProperties diff --git a/src/bonsai/bonsai/tool/polyline.py b/src/bonsai/bonsai/tool/polyline.py index e8bacd1b4c..b288260d7d 100644 --- a/src/bonsai/bonsai/tool/polyline.py +++ b/src/bonsai/bonsai/tool/polyline.py @@ -16,19 +16,21 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bmesh import math +from dataclasses import dataclass, field +from math import cos, degrees, radians, sin, tan +from typing import Literal, Optional, Union + +import bmesh +import bpy import ifcopenshell import ifcopenshell.util.unit +from lark import Lark, Transformer +from mathutils import Matrix, Vector + import bonsai.core.tool import bonsai.tool as tool from bonsai.bim.module.drawing.helper import format_distance -from dataclasses import dataclass, field -from lark import Lark, Transformer -from math import degrees, radians, sin, cos, tan -from mathutils import Vector, Matrix -from typing import Optional, Union, Literal class Polyline(bonsai.core.tool.Polyline): diff --git a/src/bonsai/bonsai/tool/profile.py b/src/bonsai/bonsai/tool/profile.py index cfb36a06ab..99d2164a32 100644 --- a/src/bonsai/bonsai/tool/profile.py +++ b/src/bonsai/bonsai/tool/profile.py @@ -17,22 +17,25 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Union + import bpy import ifcopenshell import ifcopenshell.api.profile import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.element -import ifcopenshell.util.unit import ifcopenshell.util.placement import ifcopenshell.util.representation import ifcopenshell.util.shape +import ifcopenshell.util.unit import numpy as np +import PIL.ImageDraw + import bonsai.core.tool import bonsai.tool as tool -import PIL.ImageDraw from bonsai.bim.module.model.decorator import ProfileDecorator -from typing import Union, TYPE_CHECKING if TYPE_CHECKING: import bonsai.bim.module.profile.prop diff --git a/src/bonsai/bonsai/tool/project.py b/src/bonsai/bonsai/tool/project.py index 11c4bef3c9..d4df4c80de 100644 --- a/src/bonsai/bonsai/tool/project.py +++ b/src/bonsai/bonsai/tool/project.py @@ -17,27 +17,30 @@ # along with Bonsai. If not, see . from __future__ import annotations + import os import shutil +from collections import defaultdict +from pathlib import Path +from typing import TYPE_CHECKING, NamedTuple, Optional, Union + import bpy import ifcopenshell import ifcopenshell.api.document import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.unit +from ifcopenshell.api.project.append_asset import APPENDABLE_ASSET_TYPES + +import bonsai.bim.schema import bonsai.core.aggregate import bonsai.core.context -import bonsai.core.tool -import bonsai.core.root -import bonsai.core.unit import bonsai.core.owner -import bonsai.bim.schema +import bonsai.core.root +import bonsai.core.tool +import bonsai.core.unit import bonsai.tool as tool -from collections import defaultdict from bonsai.bim.ifc import IfcStore -from ifcopenshell.api.project.append_asset import APPENDABLE_ASSET_TYPES -from pathlib import Path -from typing import NamedTuple, Optional, Union, TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.project.prop import BIMProjectProperties, MeasureToolSettings diff --git a/src/bonsai/bonsai/tool/pset.py b/src/bonsai/bonsai/tool/pset.py index b6901238ba..8eabcd155d 100644 --- a/src/bonsai/bonsai/tool/pset.py +++ b/src/bonsai/bonsai/tool/pset.py @@ -17,27 +17,29 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Literal, Union, assert_never + import bpy import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.attribute import ifcopenshell.util.element + import bonsai.bim.helper +import bonsai.bim.schema import bonsai.core.tool import bonsai.tool as tool -import bonsai.bim.schema -from typing import Union, Literal, Any, TYPE_CHECKING, assert_never - if TYPE_CHECKING: - from bonsai.bim.prop import Attribute from bonsai.bim.module.pset.prop import ( - PsetProperties, - GlobalPsetProperties, AddEditPropertyEntry, - RenamePropertyEntry, DeletePsetEntry, + GlobalPsetProperties, + PsetProperties, + RenamePropertyEntry, ) + from bonsai.bim.prop import Attribute class Pset(bonsai.core.tool.Pset): diff --git a/src/bonsai/bonsai/tool/pset_template.py b/src/bonsai/bonsai/tool/pset_template.py index 66a65e820c..e4c1c3dbe1 100644 --- a/src/bonsai/bonsai/tool/pset_template.py +++ b/src/bonsai/bonsai/tool/pset_template.py @@ -17,16 +17,19 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from pathlib import Path +from typing import TYPE_CHECKING, Literal, final + import bpy import ifcopenshell import ifcopenshell.api.pset_template import ifcopenshell.util.attribute import ifcopenshell.util.element + +import bonsai.bim import bonsai.core.tool import bonsai.tool as tool -import bonsai.bim -from pathlib import Path -from typing import Literal, final, TYPE_CHECKING from bonsai.bim.ifc import IfcStore if TYPE_CHECKING: diff --git a/src/bonsai/bonsai/tool/qto.py b/src/bonsai/bonsai/tool/qto.py index 0efa759335..4fd271b283 100644 --- a/src/bonsai/bonsai/tool/qto.py +++ b/src/bonsai/bonsai/tool/qto.py @@ -17,15 +17,18 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Literal, Optional, Union + import bpy -import bonsai.core.tool -import bonsai.bim.schema -import bonsai.tool as tool import ifcopenshell -import ifcopenshell.util.unit import ifcopenshell.util.element +import ifcopenshell.util.unit from mathutils import Vector -from typing import Optional, Union, Literal, TYPE_CHECKING, Any + +import bonsai.bim.schema +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: from bonsai.bim.module.qto.prop import BIMQtoProperties diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index 90bec96644..ee06066dd7 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import copy +from typing import Union + import bmesh import bpy -import copy +import mathutils import numpy as np from bpy_extras import view3d_utils +from mathutils import Vector + import bonsai.core.tool import bonsai.tool as tool -import mathutils -from mathutils import Vector -from typing import Union class Raycast(bonsai.core.tool.Raycast): diff --git a/src/bonsai/bonsai/tool/resource.py b/src/bonsai/bonsai/tool/resource.py index 425dce1a76..c64b7b503b 100644 --- a/src/bonsai/bonsai/tool/resource.py +++ b/src/bonsai/bonsai/tool/resource.py @@ -19,25 +19,31 @@ # ############################################################################ # from __future__ import annotations -import bpy -import bonsai.core.tool -import bonsai.tool as tool -import bonsai.bim.helper + import json import time -import isodate from datetime import datetime +from typing import TYPE_CHECKING, Any, Literal, Union + +import bpy import ifcopenshell.api.pset import ifcopenshell.api.resource -import ifcopenshell.util.date as ifcdateutils -import ifcopenshell.util.cost -import ifcopenshell.util.resource import ifcopenshell.util.constraint -from typing import Any, Union, TYPE_CHECKING, Literal +import ifcopenshell.util.cost +import ifcopenshell.util.date as ifcdateutils +import ifcopenshell.util.resource +import isodate + +import bonsai.bim.helper +import bonsai.core.tool +import bonsai.tool as tool if TYPE_CHECKING: + from bonsai.bim.module.resource.prop import ( + BIMResourceProductivity, + BIMResourceProperties, + ) from bonsai.bim.prop import Attribute - from bonsai.bim.module.resource.prop import BIMResourceProperties, BIMResourceProductivity class Resource(bonsai.core.tool.Resource): diff --git a/src/bonsai/bonsai/tool/root.py b/src/bonsai/bonsai/tool/root.py index 42bd558bd1..be7e350adc 100644 --- a/src/bonsai/bonsai/tool/root.py +++ b/src/bonsai/bonsai/tool/root.py @@ -17,6 +17,9 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Literal, Optional, Union + import bpy import ifcopenshell import ifcopenshell.api @@ -24,16 +27,16 @@ import ifcopenshell.api.feature import ifcopenshell.api.geometry import ifcopenshell.api.root import ifcopenshell.api.style -import ifcopenshell.util.representation import ifcopenshell.util.element import ifcopenshell.util.placement -import bonsai.core.tool +import ifcopenshell.util.representation + import bonsai.core.aggregate import bonsai.core.geometry +import bonsai.core.tool import bonsai.tool as tool -from typing import Union, Optional, Any, Literal, TYPE_CHECKING -from bonsai.bim.module.spatial.decorator import GridDecorator from bonsai.bim.module.geometry.decorator import ItemDecorator +from bonsai.bim.module.spatial.decorator import GridDecorator if TYPE_CHECKING: from bonsai.bim.module.root.prop import BIMRootProperties diff --git a/src/bonsai/bonsai/tool/search.py b/src/bonsai/bonsai/tool/search.py index 439e3469b3..ffd3a1aef3 100644 --- a/src/bonsai/bonsai/tool/search.py +++ b/src/bonsai/bonsai/tool/search.py @@ -17,20 +17,23 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + import json -import lark -import bonsai.tool as tool -import bonsai.core.tool +from itertools import cycle +from typing import TYPE_CHECKING, Literal, Union + +import bpy import ifcopenshell.guid import ifcopenshell.util.selector -from itertools import cycle +import lark + +import bonsai.core.tool +import bonsai.tool as tool from bonsai.bim.prop import BIMFacet -from typing import Union, Literal, TYPE_CHECKING if TYPE_CHECKING: - from bonsai.bim.prop import BIMFilterGroup from bonsai.bim.module.search.prop import BIMSearchProperties + from bonsai.bim.prop import BIMFilterGroup class Search(bonsai.core.tool.Search): diff --git a/src/bonsai/bonsai/tool/sequence.py b/src/bonsai/bonsai/tool/sequence.py index a2a2cb9668..8c5339d438 100644 --- a/src/bonsai/bonsai/tool/sequence.py +++ b/src/bonsai/bonsai/tool/sequence.py @@ -17,35 +17,37 @@ # along with Bonsai. If not, see . from __future__ import annotations + +import base64 +import json import os import re -import bpy -import json -import base64 -import ifcopenshell.api.sequence -import ifcopenshell.util.element -import pystache -import mathutils import webbrowser -import isodate -import ifcopenshell -import ifcopenshell.api.group -import ifcopenshell.ifcopenshell_wrapper as W -import ifcopenshell.util.date -import ifcopenshell.util.selector -import ifcopenshell.util.sequence -import bonsai.core.tool -import bonsai.tool as tool -import bonsai.bim.helper -from dateutil import parser +from collections.abc import Iterable from datetime import datetime from datetime import time as datetime_time -from typing import Optional, Any, Union, Literal, TYPE_CHECKING -from collections.abc import Iterable +from typing import TYPE_CHECKING, Any, Literal, Optional, Union + +import bpy +import ifcopenshell +import ifcopenshell.api.group +import ifcopenshell.api.sequence +import ifcopenshell.ifcopenshell_wrapper as W +import ifcopenshell.util.date +import ifcopenshell.util.element +import ifcopenshell.util.selector +import ifcopenshell.util.sequence +import isodate +import mathutils +import pystache +from dateutil import parser from mathutils import Color +import bonsai.bim.helper +import bonsai.core.tool +import bonsai.tool as tool + if TYPE_CHECKING: - from bonsai.bim.prop import Attribute from bonsai.bim.module.sequence.prop import ( BIMAnimationProperties, BIMStatusProperties, @@ -54,6 +56,7 @@ if TYPE_CHECKING: BIMWorkPlanProperties, BIMWorkScheduleProperties, ) + from bonsai.bim.prop import Attribute class Sequence(bonsai.core.tool.Sequence): diff --git a/src/bonsai/bonsai/tool/snap.py b/src/bonsai/bonsai/tool/snap.py index 0e6fe06f9e..5c538dfc43 100644 --- a/src/bonsai/bonsai/tool/snap.py +++ b/src/bonsai/bonsai/tool/snap.py @@ -17,20 +17,23 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + +import math +from typing import TYPE_CHECKING, Any, Union + import bmesh +import bpy import ifcopenshell import ifcopenshell.util.unit +import mathutils +from lark import Lark, Transformer +from mathutils import Matrix, Vector + import bonsai.core.tool import bonsai.tool as tool from bonsai.bim.module.drawing.data import DecoratorData from bonsai.bim.module.drawing.decoration import CutDecorator from bonsai.bim.module.model.decorator import PolylineDecorator -import math -import mathutils -from mathutils import Matrix, Vector -from lark import Lark, Transformer -from typing import Union, Any, TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.prop import BIMSnapGroups, BIMSnapProperties diff --git a/src/bonsai/bonsai/tool/spatial.py b/src/bonsai/bonsai/tool/spatial.py index a177a237e8..922c6cc9ad 100644 --- a/src/bonsai/bonsai/tool/spatial.py +++ b/src/bonsai/bonsai/tool/spatial.py @@ -17,43 +17,46 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + +import json +from collections import defaultdict +from collections.abc import Generator, Iterable +from math import pi +from typing import TYPE_CHECKING, Any, Literal, Optional, Union + import bmesh -import shapely -import shapely.ops +import bpy import ifcopenshell import ifcopenshell.api.attribute import ifcopenshell.api.type import ifcopenshell.geom +import ifcopenshell.util.classification import ifcopenshell.util.element import ifcopenshell.util.placement import ifcopenshell.util.representation -import ifcopenshell.util.classification import ifcopenshell.util.shape_builder import ifcopenshell.util.type import ifcopenshell.util.unit -import bonsai.core.type -import bonsai.core.tool +import numpy as np +import shapely +import shapely.ops +from mathutils import Matrix, Vector +from natsort import natsorted +from shapely import Polygon + +import bonsai.core.geometry import bonsai.core.root import bonsai.core.spatial -import bonsai.core.geometry +import bonsai.core.tool +import bonsai.core.type import bonsai.core.unit import bonsai.tool as tool -import json -import numpy as np -from math import pi -from mathutils import Vector, Matrix -from shapely import Polygon -from typing import Optional, Union, Literal, Any, TYPE_CHECKING -from collections.abc import Generator, Iterable -from collections import defaultdict -from natsort import natsorted if TYPE_CHECKING: from bonsai.bim.module.spatial.prop import ( BIMGridProperties, - BIMSpatialDecompositionProperties, BIMObjectSpatialProperties, + BIMSpatialDecompositionProperties, ) diff --git a/src/bonsai/bonsai/tool/structural.py b/src/bonsai/bonsai/tool/structural.py index 3f218e52e9..b011f5df88 100644 --- a/src/bonsai/bonsai/tool/structural.py +++ b/src/bonsai/bonsai/tool/structural.py @@ -17,21 +17,30 @@ # along with Bonsai. If not, see . from __future__ import annotations + +import json +from typing import TYPE_CHECKING, Any, Union + import bpy import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.structural import ifcopenshell.util.attribute import ifcopenshell.util.representation -import json + import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool -from typing import Union, Any, TYPE_CHECKING if TYPE_CHECKING: - from bonsai.bim.module.structural.prop import BIMStructuralProperties, BIMObjectStructuralProperties - from ifcopenshell.api.structural.edit_structural_boundary_condition import AttributeDict + from ifcopenshell.api.structural.edit_structural_boundary_condition import ( + AttributeDict, + ) + + from bonsai.bim.module.structural.prop import ( + BIMObjectStructuralProperties, + BIMStructuralProperties, + ) class Structural(bonsai.core.tool.Structural): diff --git a/src/bonsai/bonsai/tool/style.py b/src/bonsai/bonsai/tool/style.py index e6861b53dc..78cb19680e 100644 --- a/src/bonsai/bonsai/tool/style.py +++ b/src/bonsai/bonsai/tool/style.py @@ -17,23 +17,30 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from collections.abc import Sequence +from typing import TYPE_CHECKING, Any, Literal, Optional, Union + import bpy -import numpy as np import ifcopenshell import ifcopenshell.api.style import ifcopenshell.util.element import ifcopenshell.util.representation +import numpy as np +from mathutils import Color + +import bonsai.bim.helper import bonsai.core.style import bonsai.core.tool import bonsai.tool as tool -import bonsai.bim.helper -from mathutils import Color -from typing import Union, Any, Optional, Literal, TYPE_CHECKING -from collections.abc import Sequence if TYPE_CHECKING: + from bonsai.bim.module.style.prop import ( + BIMStyleProperties, + BIMStylesProperties, + ColourRgb, + ) from bonsai.bim.prop import Attribute - from bonsai.bim.module.style.prop import BIMStylesProperties, BIMStyleProperties, ColourRgb # fmt: off TEXTURE_MAPS_BY_METHODS = { diff --git a/src/bonsai/bonsai/tool/surveyor.py b/src/bonsai/bonsai/tool/surveyor.py index 7c203586f2..f59d9cd7da 100644 --- a/src/bonsai/bonsai/tool/surveyor.py +++ b/src/bonsai/bonsai/tool/surveyor.py @@ -20,12 +20,13 @@ import bpy import ifcopenshell.api import ifcopenshell.util.geolocation import ifcopenshell.util.unit -import bonsai.core.tool -import bonsai.tool as tool import numpy as np import numpy.typing as npt from mathutils import Matrix +import bonsai.core.tool +import bonsai.tool as tool + class Surveyor(bonsai.core.tool.Surveyor): @classmethod diff --git a/src/bonsai/bonsai/tool/system.py b/src/bonsai/bonsai/tool/system.py index 9df19e5619..8b949a36c9 100644 --- a/src/bonsai/bonsai/tool/system.py +++ b/src/bonsai/bonsai/tool/system.py @@ -17,26 +17,29 @@ # along with Bonsai. If not, see . from __future__ import annotations + +import re +from enum import Enum +from typing import TYPE_CHECKING, Any, Optional, Union + import bpy import ifcopenshell.api.geometry import ifcopenshell.api.system import ifcopenshell.util.element import ifcopenshell.util.system +from mathutils import Matrix, Vector +from natsort import natsorted + import bonsai.bim.helper import bonsai.core.geometry import bonsai.core.root import bonsai.core.tool import bonsai.tool as tool from bonsai.bim import import_ifc -import re -from mathutils import Matrix, Vector from bonsai.bim.module.system.data import ObjectSystemData, SystemDecorationData -from enum import Enum -from typing import TYPE_CHECKING, Optional, Any, Union -from natsort import natsorted if TYPE_CHECKING: - from bonsai.bim.module.system.prop import BIMSystemProperties, BIMZoneProperties, BIMZoneProperties + from bonsai.bim.module.system.prop import BIMSystemProperties, BIMZoneProperties class System(bonsai.core.tool.System): diff --git a/src/bonsai/bonsai/tool/type.py b/src/bonsai/bonsai/tool/type.py index 43d86d5076..95474e57b7 100644 --- a/src/bonsai/bonsai/tool/type.py +++ b/src/bonsai/bonsai/tool/type.py @@ -17,14 +17,17 @@ # along with Bonsai. If not, see . from __future__ import annotations + +from typing import TYPE_CHECKING, Union + import bpy import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.representation -import bonsai.core.tool + import bonsai.core.geometry +import bonsai.core.tool import bonsai.tool as tool -from typing import Union, TYPE_CHECKING if TYPE_CHECKING: from bonsai.bim.module.type.prop import BIMTypeProperties diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index b98e4fc272..823c50bdc3 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -17,15 +17,18 @@ # along with Bonsai. If not, see . from __future__ import annotations -import bpy + import json import math +from typing import TYPE_CHECKING, Any, Literal, Union, assert_never + +import bpy import ifcopenshell +from lark import Lark, Transformer + import bonsai.bim.helper import bonsai.core.tool import bonsai.tool as tool -from lark import Lark, Transformer -from typing import Union, Literal, Any, TYPE_CHECKING, assert_never if TYPE_CHECKING: from bonsai.bim.module.unit.prop import BIMUnitProperties diff --git a/src/bonsai/bonsai/tool/web.py b/src/bonsai/bonsai/tool/web.py index 2e1628378f..35811b3819 100644 --- a/src/bonsai/bonsai/tool/web.py +++ b/src/bonsai/bonsai/tool/web.py @@ -17,37 +17,40 @@ # along with Bonsai. If not, see . from __future__ import annotations -from ifcopenshell.util.classification import get_classification_data, get_references -from ifcopenshell.util.selector import filter_elements -import ifcopenshell.util.cost + +import asyncio +import errno +import json +import os +import queue +import socket +import subprocess +import sys +import threading +import time +import webbrowser +from pathlib import Path +from time import sleep +from typing import TYPE_CHECKING, Any, Optional, Union + import bpy -from bonsai.bim.module.web.data import WebData -from ifcopenshell.util.element import get_psets, get_type, has_property -import bonsai.core.tool -import bonsai.tool as tool -import ifcopenshell.api.sequence import ifcopenshell.api.classification import ifcopenshell.api.cost -from typing import Any, Optional, TYPE_CHECKING, Union -from mathutils import Color -import time -import socket -import sys -import os -import errno -import subprocess -import webbrowser -import asyncio +import ifcopenshell.api.sequence +import ifcopenshell.util.cost import socketio -import threading -import queue -import json -from time import sleep -from pathlib import Path -import bonsai.core.sequence -import bonsai.core.cost from ifc5d.ifc2json import ifc5D2json +from ifcopenshell.util.classification import get_classification_data, get_references +from ifcopenshell.util.element import get_psets, get_type, has_property +from ifcopenshell.util.selector import filter_elements +from mathutils import Color + +import bonsai.core.cost +import bonsai.core.sequence +import bonsai.core.tool +import bonsai.tool as tool from bonsai.bim.ifc import IfcStore +from bonsai.bim.module.web.data import WebData if TYPE_CHECKING: from bonsai.bim.module.web.prop import WebProperties diff --git a/src/bonsai/pyproject.toml b/src/bonsai/pyproject.toml index 6dab8f3454..3ec2cb8748 100644 --- a/src/bonsai/pyproject.toml +++ b/src/bonsai/pyproject.toml @@ -38,8 +38,3 @@ exclude = ["test*"] [tool.ruff] extend = "../../pyproject.toml" - -[tool.ruff.lint] -ignore = [ - "I", # import sorting - ignore it temporarily, still need to do some tests -] diff --git a/src/bonsai/runpytest.py b/src/bonsai/runpytest.py index f9a55fdc27..9a00ea69b0 100755 --- a/src/bonsai/runpytest.py +++ b/src/bonsai/runpytest.py @@ -23,6 +23,7 @@ Usage: `blender -b -P runpytest.py -- ARGS` """ import sys + import pytest argv = [__file__] diff --git a/src/bonsai/scripts/bonsai_translations.py b/src/bonsai/scripts/bonsai_translations.py index de7f613210..7a0fe86ea9 100644 --- a/src/bonsai/scripts/bonsai_translations.py +++ b/src/bonsai/scripts/bonsai_translations.py @@ -4,20 +4,20 @@ try: # Ensure it's not fake-bpy-module. if not hasattr(bpy, "context"): raise ModuleNotFoundError - import bl_i18n_utils import addon_utils + import bl_i18n_utils BPY_IS_LOADED = True except ModuleNotFoundError: BPY_IS_LOADED = False -import shutil -import tempfile import importlib import os import re -from pathlib import Path +import shutil +import tempfile from dataclasses import dataclass, field +from pathlib import Path from typing import Optional bl_info = { @@ -274,7 +274,9 @@ if BPY_IS_LOADED: f"Couldn't find locale path in the source directory, creating dummy directory: {source_locale_path}.", ) - from ui_translate.settings import settings as ui_translate_settings # pyright: ignore[reportMissingImports] + from ui_translate.settings import ( + settings as ui_translate_settings, # pyright: ignore[reportMissingImports] + ) from ui_translate.update_ui import ( # pyright: ignore[reportMissingImports] UI_OT_i18n_updatetranslation_init_settings, ) diff --git a/src/bonsai/scripts/classifications/uniclass_classification.py b/src/bonsai/scripts/classifications/uniclass_classification.py index ce55fae9e7..299db8a469 100644 --- a/src/bonsai/scripts/classifications/uniclass_classification.py +++ b/src/bonsai/scripts/classifications/uniclass_classification.py @@ -1,4 +1,5 @@ import os + import ifcopenshell import pandas as pd diff --git a/src/bonsai/scripts/classifications/vbis.py b/src/bonsai/scripts/classifications/vbis.py index fe77308f82..7c4f43b967 100644 --- a/src/bonsai/scripts/classifications/vbis.py +++ b/src/bonsai/scripts/classifications/vbis.py @@ -1,12 +1,13 @@ import csv -import os import json +import os # import pystache import subprocess -import ifcopenshell from pathlib import Path +import ifcopenshell + class Generator: def __init__(self): diff --git a/src/bonsai/scripts/classifications/xml_classification.py b/src/bonsai/scripts/classifications/xml_classification.py index d75383a051..0a80fb68e7 100644 --- a/src/bonsai/scripts/classifications/xml_classification.py +++ b/src/bonsai/scripts/classifications/xml_classification.py @@ -1,9 +1,10 @@ """This script converts Graphisoft XML into an IFC file""" +import os import xml.etree.ElementTree as ET + import ifcopenshell import ifcopenshell.guid -import os class IFC4Extractor: diff --git a/src/bonsai/scripts/dev_environment_vscode_config.py b/src/bonsai/scripts/dev_environment_vscode_config.py index b574ba9bf4..088810e05c 100644 --- a/src/bonsai/scripts/dev_environment_vscode_config.py +++ b/src/bonsai/scripts/dev_environment_vscode_config.py @@ -1,6 +1,10 @@ -import bonsai, json, bpy +import json from pathlib import Path +import bpy + +import bonsai + repo_path = Path(bonsai.__file__).resolve().parent install_path = Path(bonsai.__file__).absolute().parent assert repo_path != install_path, "Run `dev_environment.py` to setup the development environment symlinks first." diff --git a/src/bonsai/scripts/dxf2ifc.py b/src/bonsai/scripts/dxf2ifc.py index 3fa34e379a..caef1df864 100644 --- a/src/bonsai/scripts/dxf2ifc.py +++ b/src/bonsai/scripts/dxf2ifc.py @@ -16,9 +16,9 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import ezdxf import ifcopenshell import ifcopenshell.guid -import ezdxf class Dxf2Ifc: diff --git a/src/bonsai/scripts/extract.py b/src/bonsai/scripts/extract.py index dffaaf6d40..2b4166be81 100644 --- a/src/bonsai/scripts/extract.py +++ b/src/bonsai/scripts/extract.py @@ -16,9 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import xml.sax, json, copy, pathlib -from bs4 import BeautifulSoup # pyright: ignore[reportMissingModuleSource] +import copy +import json +import pathlib import sys +import xml.sax + +from bs4 import BeautifulSoup # pyright: ignore[reportMissingModuleSource] sys.setrecursionlimit(100) diff --git a/src/bonsai/scripts/gbxml.py b/src/bonsai/scripts/gbxml.py index 8d23fe6018..7280c69c2a 100644 --- a/src/bonsai/scripts/gbxml.py +++ b/src/bonsai/scripts/gbxml.py @@ -16,15 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import uuid import math import sys +import uuid + +import bpy +import bspy # pyright: ignore[reportMissingImports] # sys.path.append('C:\Program Files\Python37\Lib\site-packages') import lxml import lxml.etree -import bspy # pyright: ignore[reportMissingImports] from bspy import Gbxml # pyright: ignore[reportMissingImports] diff --git a/src/bonsai/scripts/generate_au_library.py b/src/bonsai/scripts/generate_au_library.py index 044f2fb090..43f05b45da 100644 --- a/src/bonsai/scripts/generate_au_library.py +++ b/src/bonsai/scripts/generate_au_library.py @@ -30,6 +30,7 @@ import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.style import ifcopenshell.api.unit + import bonsai.tool as tool diff --git a/src/bonsai/scripts/generate_demo_library.py b/src/bonsai/scripts/generate_demo_library.py index 7a9e741dab..a77fc09ab7 100644 --- a/src/bonsai/scripts/generate_demo_library.py +++ b/src/bonsai/scripts/generate_demo_library.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from pathlib import Path + import bpy import ifcopenshell import ifcopenshell.api @@ -31,8 +33,8 @@ import ifcopenshell.api.style import ifcopenshell.api.unit import ifcopenshell.util.schema import ifcopenshell.util.shape_builder + import bonsai.tool as tool -from pathlib import Path def sync_guids(target_file: ifcopenshell.file, source_file: ifcopenshell.file) -> None: diff --git a/src/bonsai/scripts/generate_entourage_library.py b/src/bonsai/scripts/generate_entourage_library.py index 78ed71ac6a..7435186396 100644 --- a/src/bonsai/scripts/generate_entourage_library.py +++ b/src/bonsai/scripts/generate_entourage_library.py @@ -17,6 +17,8 @@ # along with Bonsai. If not, see . import os +from pathlib import Path + import bpy import ifcopenshell import ifcopenshell.api @@ -26,9 +28,8 @@ import ifcopenshell.api.project import ifcopenshell.api.root import ifcopenshell.api.style import ifcopenshell.api.unit -import bonsai.tool as tool -from pathlib import Path +import bonsai.tool as tool # When run from Blender BLEND_DIR = os.path.dirname(bpy.data.filepath) diff --git a/src/bonsai/scripts/generate_furniture_library.py b/src/bonsai/scripts/generate_furniture_library.py index 7212191be9..1c1572c854 100644 --- a/src/bonsai/scripts/generate_furniture_library.py +++ b/src/bonsai/scripts/generate_furniture_library.py @@ -16,7 +16,11 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import numpy as np +from itertools import chain +from math import cos, pi, tan +from pathlib import Path +from typing import Optional, Union + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.context @@ -27,11 +31,8 @@ import ifcopenshell.api.root import ifcopenshell.api.style import ifcopenshell.api.unit import ifcopenshell.util.element -from math import cos, tan, pi -from pathlib import Path -from itertools import chain -from ifcopenshell.util.shape_builder import ShapeBuilder, V, np_to_3d, np_normalized -from typing import Optional, Union +import numpy as np +from ifcopenshell.util.shape_builder import ShapeBuilder, V, np_normalized, np_to_3d GeneratorOutput = Union[list[ifcopenshell.entity_instance], list[list[ifcopenshell.entity_instance]]] diff --git a/src/bonsai/scripts/generate_landscape_library.py b/src/bonsai/scripts/generate_landscape_library.py index 01e694e9d0..34d2366fd5 100644 --- a/src/bonsai/scripts/generate_landscape_library.py +++ b/src/bonsai/scripts/generate_landscape_library.py @@ -16,10 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import bpy import csv +import os import random +from collections import namedtuple +from itertools import chain +from math import cos, pi, sin, tan +from pathlib import Path +from random import uniform + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.context @@ -29,15 +35,10 @@ import ifcopenshell.api.root import ifcopenshell.api.style import ifcopenshell.api.unit import ifcopenshell.util.unit -import bonsai.tool as tool -from math import cos, sin, tan, pi -from pathlib import Path -from itertools import chain from ifcopenshell.util.shape_builder import ShapeBuilder -from collections import namedtuple -from mathutils import Vector, Matrix -from random import uniform +from mathutils import Matrix, Vector +import bonsai.tool as tool # When run from Blender BLEND_DIR = os.path.dirname(bpy.data.filepath) diff --git a/src/bonsai/scripts/generate_png_icons.py b/src/bonsai/scripts/generate_png_icons.py index d24b69fe90..a523163a20 100644 --- a/src/bonsai/scripts/generate_png_icons.py +++ b/src/bonsai/scripts/generate_png_icons.py @@ -5,9 +5,9 @@ # to run on mac: python3 generate_png_icons.py import os +import re import subprocess import xml.etree.ElementTree as ET -import re SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) SVG_FILE = os.path.join(SCRIPT_DIR, "bonsai_icons.svg") diff --git a/src/bonsai/scripts/generate_site_library.py b/src/bonsai/scripts/generate_site_library.py index e42ad4e4f2..0b0511e9da 100644 --- a/src/bonsai/scripts/generate_site_library.py +++ b/src/bonsai/scripts/generate_site_library.py @@ -25,6 +25,7 @@ import ifcopenshell.api.project import ifcopenshell.api.root import ifcopenshell.api.style import ifcopenshell.api.unit + import bonsai.tool as tool diff --git a/src/bonsai/scripts/generate_steel_profiles_library.py b/src/bonsai/scripts/generate_steel_profiles_library.py index 086c918689..c54818df4b 100644 --- a/src/bonsai/scripts/generate_steel_profiles_library.py +++ b/src/bonsai/scripts/generate_steel_profiles_library.py @@ -19,15 +19,16 @@ # fmt: off # pylint: skip-file +from math import cos, pi +from pathlib import Path + +import boltspy as bolts # pyright: ignore[reportMissingImports] import ifcopenshell import ifcopenshell.api import ifcopenshell.api.material import ifcopenshell.api.project import ifcopenshell.api.root import ifcopenshell.api.unit -import boltspy as bolts # pyright: ignore[reportMissingImports] -from math import cos, pi -from pathlib import Path from ifcopenshell.util.shape_builder import ShapeBuilder, V, ifc_safe_vector_type diff --git a/src/bonsai/scripts/generate_util_type_json.py b/src/bonsai/scripts/generate_util_type_json.py index c162800f54..7c44a9dfe9 100644 --- a/src/bonsai/scripts/generate_util_type_json.py +++ b/src/bonsai/scripts/generate_util_type_json.py @@ -18,6 +18,7 @@ # See bug #1300. Dodgy quick results that we should rebuild later. import json + import ifcopenshell import ifcopenshell.util.schema diff --git a/src/bonsai/scripts/geonodes_modifier_prototype.py b/src/bonsai/scripts/geonodes_modifier_prototype.py index 1b3dbfd8ab..16370c1ca2 100644 --- a/src/bonsai/scripts/geonodes_modifier_prototype.py +++ b/src/bonsai/scripts/geonodes_modifier_prototype.py @@ -17,14 +17,15 @@ # along with Bonsai. If not, see . +import json + +import bmesh +import bpy import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.element -import bonsai.tool as tool -import bpy -import bmesh -import json +import bonsai.tool as tool # Below is the code for # prototype for geonodes modifier (similar to ifc sverchok modifier) diff --git a/src/bonsai/scripts/getIfcElements.py b/src/bonsai/scripts/getIfcElements.py index 335260f7e9..57e03d50c4 100644 --- a/src/bonsai/scripts/getIfcElements.py +++ b/src/bonsai/scripts/getIfcElements.py @@ -18,9 +18,9 @@ """This script converts the computer iterpretable listing ifcXML XSD into a JSON file""" -import xml.etree.ElementTree as ET import collections import json +import xml.etree.ElementTree as ET class IFC4Extractor: diff --git a/src/bonsai/scripts/get_all_qtos.py b/src/bonsai/scripts/get_all_qtos.py index 7f23dca55a..d364115559 100644 --- a/src/bonsai/scripts/get_all_qtos.py +++ b/src/bonsai/scripts/get_all_qtos.py @@ -1,13 +1,14 @@ """Update ifc5d json files with qtos from the provided pset templates path.""" import json -import ifcopenshell.util.pset -import ifcopenshell.util.type -import ifc5d from collections import defaultdict from pathlib import Path from typing import Union +import ifc5d +import ifcopenshell.util.pset +import ifcopenshell.util.type + def order_dict(dictionary): # https://stackoverflow.com/questions/22721579/sorting-a-nested-ordereddict-by-key-recursively diff --git a/src/bonsai/scripts/get_description.py b/src/bonsai/scripts/get_description.py index 2d581185aa..a05d5dc287 100644 --- a/src/bonsai/scripts/get_description.py +++ b/src/bonsai/scripts/get_description.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import os -import re import html import json +import os +import re from pathlib import Path + import ifcopenshell diff --git a/src/bonsai/scripts/get_volume_by_material.py b/src/bonsai/scripts/get_volume_by_material.py index 2f81862990..312878e53d 100644 --- a/src/bonsai/scripts/get_volume_by_material.py +++ b/src/bonsai/scripts/get_volume_by_material.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bmesh import pprint +import bmesh +import bpy + material_volumes = {} for obj in bpy.context.selected_objects: diff --git a/src/bonsai/scripts/headless_import.py b/src/bonsai/scripts/headless_import.py index 111b07d78b..7554eacc04 100644 --- a/src/bonsai/scripts/headless_import.py +++ b/src/bonsai/scripts/headless_import.py @@ -1,6 +1,7 @@ # This can be run using `blender -b -P headless_import.py` import bpy + import bonsai.tool as tool # When federating, you may wish to manually specify the origin to ensure models diff --git a/src/bonsai/scripts/obj2ifc-meshlab.py b/src/bonsai/scripts/obj2ifc-meshlab.py index 1d2739ca21..c8292bb0f7 100644 --- a/src/bonsai/scripts/obj2ifc-meshlab.py +++ b/src/bonsai/scripts/obj2ifc-meshlab.py @@ -19,21 +19,21 @@ # This can be packaged with `pyinstaller --onefile --hidden-import numpy --collect-all ifcopenshell --clean obj2ifc.py` import argparse -import pymeshlab # pyright: ignore[reportMissingImports] +from pathlib import Path + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.context import ifcopenshell.api.geometry +import ifcopenshell.api.owner.settings import ifcopenshell.api.project import ifcopenshell.api.root import ifcopenshell.api.spatial import ifcopenshell.api.unit -import ifcopenshell.api.owner.settings import ifcopenshell.guid -from pathlib import Path - import numpy as np +import pymeshlab # pyright: ignore[reportMissingImports] class Obj2Ifc: diff --git a/src/bonsai/scripts/obj2ifc.py b/src/bonsai/scripts/obj2ifc.py index dc91cedfd5..70f3bf7b41 100644 --- a/src/bonsai/scripts/obj2ifc.py +++ b/src/bonsai/scripts/obj2ifc.py @@ -19,21 +19,21 @@ # This can be packaged with `pyinstaller --onefile --hidden-import numpy --collect-all ifcopenshell --clean obj2ifc.py` import argparse -import pywavefront # pyright: ignore[reportMissingImports] +from pathlib import Path + import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.context import ifcopenshell.api.geometry +import ifcopenshell.api.owner.settings import ifcopenshell.api.project import ifcopenshell.api.root import ifcopenshell.api.spatial import ifcopenshell.api.unit -import ifcopenshell.api.owner.settings import ifcopenshell.guid -from pathlib import Path - import numpy as np +import pywavefront # pyright: ignore[reportMissingImports] class Obj2Ifc: diff --git a/src/bonsai/scripts/replace_drawing_path.py b/src/bonsai/scripts/replace_drawing_path.py index eeca3911e0..500726082f 100644 --- a/src/bonsai/scripts/replace_drawing_path.py +++ b/src/bonsai/scripts/replace_drawing_path.py @@ -27,15 +27,15 @@ It works on the active ifc file (if exists). """ -import bonsai.tool as tool +import os +import sys +from sys import platform + import ifcopenshell import ifcopenshell.api.pset import ifcopenshell.util.element -import sys - -import os -from sys import platform +import bonsai.tool as tool file = tool.Ifc.get() if not file: diff --git a/src/bonsai/scripts/reregister_bonsai.py b/src/bonsai/scripts/reregister_bonsai.py index 437c9f5b34..ba9ab2ba2a 100644 --- a/src/bonsai/scripts/reregister_bonsai.py +++ b/src/bonsai/scripts/reregister_bonsai.py @@ -25,6 +25,7 @@ to ensure disable and enable occur in the same Blender session. import bpy + import bonsai.tool as tool bonsai_name = tool.Blender.get_blender_addon_package_name() diff --git a/src/bonsai/scripts/setup_pytest.py b/src/bonsai/scripts/setup_pytest.py index 90af113eca..28dc7565f1 100644 --- a/src/bonsai/scripts/setup_pytest.py +++ b/src/bonsai/scripts/setup_pytest.py @@ -16,8 +16,8 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import sys import subprocess +import sys from pathlib import Path print("Here are the detected system paths:") @@ -45,10 +45,10 @@ for dep in dependencies: subprocess.check_call(command + [dep]) try: + import pygments import pytest import pytest_bdd import pytest_blender - import pygments print("Test dependency installation was successful!") except Exception as e: diff --git a/src/bonsai/scripts/standalone_blender_import.py b/src/bonsai/scripts/standalone_blender_import.py index 27dc84e07f..a2b9908afb 100644 --- a/src/bonsai/scripts/standalone_blender_import.py +++ b/src/bonsai/scripts/standalone_blender_import.py @@ -1,6 +1,7 @@ +import multiprocessing + import ifcopenshell import ifcopenshell.geom -import multiprocessing class BlenderImporter: diff --git a/src/bonsai/scripts/standalone_drawer.py b/src/bonsai/scripts/standalone_drawer.py index 1b669adb3f..3eed11b9c9 100644 --- a/src/bonsai/scripts/standalone_drawer.py +++ b/src/bonsai/scripts/standalone_drawer.py @@ -1,10 +1,11 @@ -import sys -import ifcopenshell -import ifcopenshell.util.element -import ifcopenshell.geom import multiprocessing +import sys from typing import NamedTuple + +import ifcopenshell +import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W +import ifcopenshell.util.element # W.turn_on_detailed_logging() diff --git a/src/bonsai/scripts/standalone_section_shader.py b/src/bonsai/scripts/standalone_section_shader.py index 970e58105b..20afd92fea 100644 --- a/src/bonsai/scripts/standalone_section_shader.py +++ b/src/bonsai/scripts/standalone_section_shader.py @@ -12,20 +12,16 @@ bl_info = { } -import bpy -from bpy.types import Operator, PropertyGroup, Panel -from mathutils import Vector, Matrix, Euler from math import radians + +import bpy from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, BoolProperty, - IntProperty, - FloatProperty, FloatVectorProperty, - CollectionProperty, + PointerProperty, ) +from bpy.types import Operator, Panel, PropertyGroup +from mathutils import Euler, Vector class SectionCutawayManager: diff --git a/src/bonsai/scripts/waldo.py b/src/bonsai/scripts/waldo.py index 5ed734356c..00243c5782 100644 --- a/src/bonsai/scripts/waldo.py +++ b/src/bonsai/scripts/waldo.py @@ -1,4 +1,8 @@ -import numpy as np +# https://stackoverflow.com/a/9184560/9627415 +# Possible optimisation to linalg.norm? +from itertools import cycle +from math import radians + import ifcopenshell import ifcopenshell.api.aggregate import ifcopenshell.api.context @@ -12,14 +16,7 @@ import ifcopenshell.api.type import ifcopenshell.api.unit import ifcopenshell.util.placement import ifcopenshell.util.shape_builder - -# https://stackoverflow.com/a/9184560/9627415 -# Possible optimisation to linalg.norm? - -# from ifcopenshell.util.shape_builder import VectorType, SequenceOfVectors -from itertools import cycle -from collections import namedtuple -from math import sin, cos, radians +import numpy as np f = ifcopenshell.api.project.create_file() diff --git a/src/bonsai/test/bim/bootstrap.py b/src/bonsai/test/bim/bootstrap.py index 6d997bdd7f..c799c74c00 100644 --- a/src/bonsai/test/bim/bootstrap.py +++ b/src/bonsai/test/bim/bootstrap.py @@ -19,17 +19,19 @@ import os import re -import bpy -import pytest import webbrowser -import bonsai.bim.handler -import bonsai.tool as tool + +import bpy import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.representation -from bonsai.bim.ifc import IfcStore +import pytest from mathutils import Vector +import bonsai.bim.handler +import bonsai.tool as tool +from bonsai.bim.ifc import IfcStore + # Monkey-patch webbrowser opening since we want to test headlessly webbrowser.open = lambda x: True diff --git a/src/bonsai/test/bim/module/drawing/test_segment_clipping.py b/src/bonsai/test/bim/module/drawing/test_segment_clipping.py index 2a30f6a957..2846a3f2b7 100644 --- a/src/bonsai/test/bim/module/drawing/test_segment_clipping.py +++ b/src/bonsai/test/bim/module/drawing/test_segment_clipping.py @@ -18,8 +18,8 @@ import pytest from mathutils import Vector -from bonsai.bim.module.drawing.helper import clip_segment +from bonsai.bim.module.drawing.helper import clip_segment BOUNDS = (10, 30, 10, 30, None, None) diff --git a/src/bonsai/test/bim/stub.py b/src/bonsai/test/bim/stub.py index a5c498f81e..969cf98cbe 100644 --- a/src/bonsai/test/bim/stub.py +++ b/src/bonsai/test/bim/stub.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . -from typing import Union, Any, Optional +from typing import Any, Optional, Union class bSDDClientStub: diff --git a/src/bonsai/test/bim/test_feature.py b/src/bonsai/test/bim/test_feature.py index 036e0bf464..9df6bbf627 100644 --- a/src/bonsai/test/bim/test_feature.py +++ b/src/bonsai/test/bim/test_feature.py @@ -17,31 +17,34 @@ # along with Bonsai. If not, see . from __future__ import annotations + import os -import types -import bpy -import pytest -import shutil import pprint +import shutil import traceback +import types import webbrowser -import numpy as np -import test.bim.stub +from collections.abc import Generator +from inspect import signature +from math import radians +from pathlib import Path +from typing import Any, Union + +import bpy import ifcopenshell import ifcopenshell.util.element import ifcopenshell.util.representation -import bonsai.tool as tool -import bonsai.bim.handler -from collections.abc import Generator -from bonsai.bim.ifc import IfcStore -from bonsai.tool.brick import BrickStore -from bonsai.bim.module.model.data import AuthoringData -from pytest_bdd import scenarios, given, when, then, parsers -from inspect import signature +import numpy as np +import pytest from mathutils import Vector -from math import radians -from pathlib import Path -from typing import Union, Any +from pytest_bdd import given, parsers, scenarios, then, when + +import bonsai.bim.handler +import bonsai.tool as tool +import test.bim.stub +from bonsai.bim.ifc import IfcStore +from bonsai.bim.module.model.data import AuthoringData +from bonsai.tool.brick import BrickStore scenarios("feature") diff --git a/src/bonsai/test/core/bootstrap.py b/src/bonsai/test/core/bootstrap.py index 837ce67b94..3cf7589420 100644 --- a/src/bonsai/test/core/bootstrap.py +++ b/src/bonsai/test/core/bootstrap.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import sys import json +import sys +from typing import Any, Literal, Optional, Self, TypedDict + import pytest + import bonsai.core.tool -from typing import Any, Optional, TypedDict, Literal, Self @pytest.fixture diff --git a/src/bonsai/test/core/test_aggregate.py b/src/bonsai/test/core/test_aggregate.py index 157b1c3999..4e7babe13a 100644 --- a/src/bonsai/test/core/test_aggregate.py +++ b/src/bonsai/test/core/test_aggregate.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.aggregate as subject -from test.core.bootstrap import ifc, aggregate, collector +from test.core.bootstrap import aggregate, collector, ifc class TestEnableEditingAggregate: diff --git a/src/bonsai/test/core/test_attribute.py b/src/bonsai/test/core/test_attribute.py index aba74e1a4e..d62b832cd9 100644 --- a/src/bonsai/test/core/test_attribute.py +++ b/src/bonsai/test/core/test_attribute.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.attribute as subject -from test.core.bootstrap import ifc, blender, root, spatial +from test.core.bootstrap import blender, ifc, root, spatial class TestCopyAttributeToSelection: diff --git a/src/bonsai/test/core/test_brick.py b/src/bonsai/test/core/test_brick.py index 10a4a7cfd1..c40df06973 100644 --- a/src/bonsai/test/core/test_brick.py +++ b/src/bonsai/test/core/test_brick.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.brick as subject -from test.core.bootstrap import ifc, brick +from test.core.bootstrap import brick, ifc class TestLoadBrickProject: diff --git a/src/bonsai/test/core/test_context.py b/src/bonsai/test/core/test_context.py index 7388754765..2fd9e05834 100644 --- a/src/bonsai/test/core/test_context.py +++ b/src/bonsai/test/core/test_context.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.context as subject -from test.core.bootstrap import ifc, context +from test.core.bootstrap import context, ifc class TestAddContext: diff --git a/src/bonsai/test/core/test_document.py b/src/bonsai/test/core/test_document.py index 5baf3e709f..bd9f743a3d 100644 --- a/src/bonsai/test/core/test_document.py +++ b/src/bonsai/test/core/test_document.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.document as subject -from test.core.bootstrap import ifc, document +from test.core.bootstrap import document, ifc class TestLoadProjectDocuments: diff --git a/src/bonsai/test/core/test_drawing.py b/src/bonsai/test/core/test_drawing.py index 957bd79f79..a83f026ad3 100644 --- a/src/bonsai/test/core/test_drawing.py +++ b/src/bonsai/test/core/test_drawing.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.drawing as subject -from test.core.bootstrap import ifc, drawing, collector, geometry, blender, Prophecy +from test.core.bootstrap import Prophecy, blender, collector, drawing, geometry, ifc class TestEnableEditingText: diff --git a/src/bonsai/test/core/test_geometry.py b/src/bonsai/test/core/test_geometry.py index c9e3392808..21ccb09220 100644 --- a/src/bonsai/test/core/test_geometry.py +++ b/src/bonsai/test/core/test_geometry.py @@ -18,7 +18,7 @@ import bonsai.core.geometry as subject import test.core.test_style -from test.core.bootstrap import ifc, surveyor, geometry, style +from test.core.bootstrap import geometry, ifc, style, surveyor class TestEditObjectPlacement: diff --git a/src/bonsai/test/core/test_georeference.py b/src/bonsai/test/core/test_georeference.py index 6048ae5828..b9b330d816 100644 --- a/src/bonsai/test/core/test_georeference.py +++ b/src/bonsai/test/core/test_georeference.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.georeference as subject -from test.core.bootstrap import ifc, georeference +from test.core.bootstrap import georeference, ifc class TestAddGeoreferencing: diff --git a/src/bonsai/test/core/test_material.py b/src/bonsai/test/core/test_material.py index a8baee0c6c..a2cbf8c433 100644 --- a/src/bonsai/test/core/test_material.py +++ b/src/bonsai/test/core/test_material.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.material as subject -from test.core.bootstrap import ifc, material, style, spatial +from test.core.bootstrap import ifc, material, spatial, style class TestAddMaterial: diff --git a/src/bonsai/test/core/test_misc.py b/src/bonsai/test/core/test_misc.py index 950799a098..716607c0d8 100644 --- a/src/bonsai/test/core/test_misc.py +++ b/src/bonsai/test/core/test_misc.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.misc as subject -from test.core.bootstrap import misc, ifc +from test.core.bootstrap import ifc, misc class TestResizeToStorey: diff --git a/src/bonsai/test/core/test_nest.py b/src/bonsai/test/core/test_nest.py index d2eefc9109..36cbfafc60 100644 --- a/src/bonsai/test/core/test_nest.py +++ b/src/bonsai/test/core/test_nest.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.nest as subject -from test.core.bootstrap import ifc, nest, collector +from test.core.bootstrap import collector, ifc, nest class TestEnableEditingNeset: diff --git a/src/bonsai/test/core/test_owner.py b/src/bonsai/test/core/test_owner.py index b648030407..12d5bf3fa1 100644 --- a/src/bonsai/test/core/test_owner.py +++ b/src/bonsai/test/core/test_owner.py @@ -18,7 +18,7 @@ import bonsai.core.owner as subject -from test.core.bootstrap import ifc, owner, Prophecy +from test.core.bootstrap import Prophecy, ifc, owner class TestAddPerson: diff --git a/src/bonsai/test/core/test_project.py b/src/bonsai/test/core/test_project.py index 7ecdc3c36c..462e1cabcd 100644 --- a/src/bonsai/test/core/test_project.py +++ b/src/bonsai/test/core/test_project.py @@ -18,7 +18,7 @@ import bonsai.core.project as subject -from test.core.bootstrap import ifc, project, spatial, georeference +from test.core.bootstrap import georeference, ifc, project, spatial class TestCreateProject: diff --git a/src/bonsai/test/core/test_root.py b/src/bonsai/test/core/test_root.py index 7d922627ac..121236803d 100644 --- a/src/bonsai/test/core/test_root.py +++ b/src/bonsai/test/core/test_root.py @@ -18,7 +18,7 @@ import bonsai.core.root as subject import test.core.test_geometry -from test.core.bootstrap import ifc, collector, geometry, root +from test.core.bootstrap import collector, geometry, ifc, root class TestCopyClass: diff --git a/src/bonsai/test/core/test_spatial.py b/src/bonsai/test/core/test_spatial.py index a2b824fc91..0ae9695ea2 100644 --- a/src/bonsai/test/core/test_spatial.py +++ b/src/bonsai/test/core/test_spatial.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.spatial as subject -from test.core.bootstrap import ifc, collector, spatial +from test.core.bootstrap import collector, ifc, spatial class TestReferenceStructure: diff --git a/src/bonsai/test/core/test_style.py b/src/bonsai/test/core/test_style.py index ca8fc6b962..a2278cf008 100644 --- a/src/bonsai/test/core/test_style.py +++ b/src/bonsai/test/core/test_style.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.style as subject -from test.core.bootstrap import ifc, material, style, spatial +from test.core.bootstrap import ifc, material, spatial, style class TestAddStyle: diff --git a/src/bonsai/test/core/test_system.py b/src/bonsai/test/core/test_system.py index 1d19189c3b..0f7dd34b62 100644 --- a/src/bonsai/test/core/test_system.py +++ b/src/bonsai/test/core/test_system.py @@ -18,7 +18,7 @@ import bonsai.core.system as subject -from test.core.bootstrap import ifc, system, spatial, group +from test.core.bootstrap import group, ifc, spatial, system class TestLoadSystems: diff --git a/src/bonsai/test/core/test_type.py b/src/bonsai/test/core/test_type.py index 68130c1fa8..ffdb571148 100644 --- a/src/bonsai/test/core/test_type.py +++ b/src/bonsai/test/core/test_type.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.type as subject -from test.core.bootstrap import ifc, type, geometry +from test.core.bootstrap import geometry, ifc, type class TestAssignType: diff --git a/src/bonsai/test/tool/test_aggregate.py b/src/bonsai/test/tool/test_aggregate.py index 20c31cacdc..bab71b2c4a 100644 --- a/src/bonsai/test/tool/test_aggregate.py +++ b/src/bonsai/test/tool/test_aggregate.py @@ -24,10 +24,11 @@ import ifcopenshell.api.root import ifcopenshell.api.spatial import ifcopenshell.api.unit import ifcopenshell.util.shape_builder + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.aggregate import Aggregate as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_blender.py b/src/bonsai/test/tool/test_blender.py index 2db244abe1..43d04c7c19 100644 --- a/src/bonsai/test/tool/test_blender.py +++ b/src/bonsai/test/tool/test_blender.py @@ -16,14 +16,16 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from typing import TYPE_CHECKING + import bpy import ifcopenshell +import pytest + import bonsai.core.tool import bonsai.tool as tool -import pytest -from test.bim.bootstrap import NewFile -from typing import TYPE_CHECKING from bonsai.tool.blender import Blender as subject +from test.bim.bootstrap import NewFile if TYPE_CHECKING: import bpy.stub_internal.rna_enums as rna_enums diff --git a/src/bonsai/test/tool/test_brick.py b/src/bonsai/test/tool/test_brick.py index 7470dd5954..c3d1f429e3 100644 --- a/src/bonsai/test/tool/test_brick.py +++ b/src/bonsai/test/tool/test_brick.py @@ -17,22 +17,24 @@ # along with Bonsai. If not, see . import os + import bpy import brickschema import brickschema.persistent -from brickschema.namespaces import REF, A import ifcopenshell import ifcopenshell.api import ifcopenshell.api.aggregate import ifcopenshell.api.root import ifcopenshell.guid +from brickschema.namespaces import REF, A +from rdflib import Literal, Namespace, URIRef +from rdflib.namespace import RDF + import bonsai.core.tool import bonsai.tool as tool -from rdflib.namespace import RDF -from rdflib import Literal, URIRef, Namespace -from test.bim.bootstrap import NewFile from bonsai.tool.brick import Brick as subject from bonsai.tool.brick import BrickStore +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_cad.py b/src/bonsai/test/tool/test_cad.py index c02aaed8c6..2e84c71718 100644 --- a/src/bonsai/test/tool/test_cad.py +++ b/src/bonsai/test/tool/test_cad.py @@ -16,10 +16,11 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -from test.bim.bootstrap import NewFile -from bonsai.tool.cad import Cad as subject from mathutils import Vector +from bonsai.tool.cad import Cad as subject +from test.bim.bootstrap import NewFile + V = lambda *x: Vector([float(i) for i in x]) diff --git a/src/bonsai/test/tool/test_classification.py b/src/bonsai/test/tool/test_classification.py index b584050e8d..7bfe2a44d7 100644 --- a/src/bonsai/test/tool/test_classification.py +++ b/src/bonsai/test/tool/test_classification.py @@ -17,14 +17,16 @@ # along with Bonsai. If not, see . import os + import bpy import ifcopenshell import ifcopenshell.util.classification import ifcopenshell.util.element + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.classification import Classification as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_collector.py b/src/bonsai/test/tool/test_collector.py index ba59aeef92..1ddd7e6381 100644 --- a/src/bonsai/test/tool/test_collector.py +++ b/src/bonsai/test/tool/test_collector.py @@ -24,6 +24,7 @@ import ifcopenshell.api.feature import ifcopenshell.api.group import ifcopenshell.api.spatial import ifcopenshell.util.element + import bonsai.core.tool import bonsai.tool as tool from bonsai.tool.collector import Collector as subject diff --git a/src/bonsai/test/tool/test_context.py b/src/bonsai/test/tool/test_context.py index f4035ecd97..c131028e98 100644 --- a/src/bonsai/test/tool/test_context.py +++ b/src/bonsai/test/tool/test_context.py @@ -18,9 +18,10 @@ import bpy import ifcopenshell -import test.bim.bootstrap + import bonsai.core.tool import bonsai.tool as tool +import test.bim.bootstrap from bonsai.tool.context import Context as subject diff --git a/src/bonsai/test/tool/test_debug.py b/src/bonsai/test/tool/test_debug.py index 24e875071b..7b434c4ee6 100644 --- a/src/bonsai/test/tool/test_debug.py +++ b/src/bonsai/test/tool/test_debug.py @@ -17,16 +17,18 @@ # along with Bonsai. If not, see . import os +from pathlib import Path + import bpy import ifcopenshell import ifcopenshell.api.style import ifcopenshell.util.schema + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile -from bonsai.tool.debug import Debug as subject from bonsai.bim.ifc import IfcStore -from pathlib import Path +from bonsai.tool.debug import Debug as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_document.py b/src/bonsai/test/tool/test_document.py index 64ec2791b0..5afb25cd65 100644 --- a/src/bonsai/test/tool/test_document.py +++ b/src/bonsai/test/tool/test_document.py @@ -16,15 +16,17 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import json + import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.document + import bonsai.core.tool import bonsai.tool as tool -import json -from test.bim.bootstrap import NewFile from bonsai.tool.document import Document as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_drawing.py b/src/bonsai/test/tool/test_drawing.py index 960e283084..f7beb94358 100644 --- a/src/bonsai/test/tool/test_drawing.py +++ b/src/bonsai/test/tool/test_drawing.py @@ -17,10 +17,10 @@ # along with Bonsai. If not, see . import os +import xml.etree.ElementTree as ET from pathlib import Path -import numpy as np + import bpy -import mathutils import ifcopenshell import ifcopenshell.api.drawing import ifcopenshell.api.group @@ -28,14 +28,15 @@ import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.guid import ifcopenshell.util.element -import bonsai.core.tool -import bonsai.tool as tool -from test.bim.bootstrap import NewFile -from bonsai.tool.drawing import Drawing as subject -from bonsai.bim.module.drawing.data import DecoratorData +import mathutils +import numpy as np from mathutils import Vector -import xml.etree.ElementTree as ET +import bonsai.core.tool +import bonsai.tool as tool +from bonsai.bim.module.drawing.data import DecoratorData +from bonsai.tool.drawing import Drawing as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_geometry.py b/src/bonsai/test/tool/test_geometry.py index a2107da12f..34300f2405 100644 --- a/src/bonsai/test/tool/test_geometry.py +++ b/src/bonsai/test/tool/test_geometry.py @@ -16,19 +16,21 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import math -import numpy as np +from typing import Union + +import bpy import ifcopenshell import ifcopenshell.api.geometry import ifcopenshell.api.root import ifcopenshell.api.type +import numpy as np +from mathutils import Vector + import bonsai.core.tool import bonsai.tool as tool -from mathutils import Vector -from test.bim.bootstrap import NewFile from bonsai.tool.geometry import Geometry as subject -from typing import Union +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_georeference.py b/src/bonsai/test/tool/test_georeference.py index a6292abde4..2d29f8429b 100644 --- a/src/bonsai/test/tool/test_georeference.py +++ b/src/bonsai/test/tool/test_georeference.py @@ -16,19 +16,21 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import math + +import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.context import ifcopenshell.api.georeference import ifcopenshell.api.root import ifcopenshell.api.unit +from mathutils import Vector + import bonsai.core.tool import bonsai.tool as tool -from mathutils import Vector -from test.bim.bootstrap import NewFile from bonsai.tool.georeference import Georeference as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_ifc.py b/src/bonsai/test/tool/test_ifc.py index 3cbd7bdc22..9542332d52 100644 --- a/src/bonsai/test/tool/test_ifc.py +++ b/src/bonsai/test/tool/test_ifc.py @@ -16,15 +16,17 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import os +import tempfile +from pathlib import Path + import bpy import ifcopenshell -import test.bim.bootstrap +import pytest + import bonsai.core.tool import bonsai.tool as tool -import pytest -import tempfile -import os -from pathlib import Path +import test.bim.bootstrap from bonsai.tool.ifc import Ifc as subject diff --git a/src/bonsai/test/tool/test_library.py b/src/bonsai/test/tool/test_library.py index 64d73f918b..b0bbbf3990 100644 --- a/src/bonsai/test/tool/test_library.py +++ b/src/bonsai/test/tool/test_library.py @@ -18,10 +18,11 @@ import bpy import ifcopenshell + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.library import Library as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_loader.py b/src/bonsai/test/tool/test_loader.py index b128988aba..8817d3d92b 100644 --- a/src/bonsai/test/tool/test_loader.py +++ b/src/bonsai/test/tool/test_loader.py @@ -16,21 +16,23 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy -import bmesh import json +from pathlib import Path + +import bmesh +import bpy import ifcopenshell import ifcopenshell.api.library import ifcopenshell.api.style import ifcopenshell.util.schema -import bonsai.core.tool -import bonsai.tool as tool -from test.bim.bootstrap import NewFile -from bonsai.tool.loader import Loader as subject import numpy as np from ifcopenshell.util.shape_builder import ShapeBuilder from mathutils import Vector -from pathlib import Path + +import bonsai.core.tool +import bonsai.tool as tool +from bonsai.tool.loader import Loader as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): @@ -188,8 +190,8 @@ class TestCreatingStyles(NewFile): def get_png_raster_code(): import base64 - import zlib import struct + import zlib # https://blender.stackexchange.com/questions/62072/does-blender-have-a-method-to-a-get-png-formatted-bytearray-for-an-image-via-pyt width = 2 diff --git a/src/bonsai/test/tool/test_material.py b/src/bonsai/test/tool/test_material.py index ef423afb4c..870417a254 100644 --- a/src/bonsai/test/tool/test_material.py +++ b/src/bonsai/test/tool/test_material.py @@ -23,10 +23,11 @@ import ifcopenshell.api.material import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.style + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.material import Material as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_misc.py b/src/bonsai/test/tool/test_misc.py index 883755888a..c3d3cec2fe 100644 --- a/src/bonsai/test/tool/test_misc.py +++ b/src/bonsai/test/tool/test_misc.py @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import bpy import math -import numpy + +import bpy import ifcopenshell import ifcopenshell.api.aggregate import ifcopenshell.api.spatial import ifcopenshell.api.unit -import test.bim.bootstrap +import numpy + import bonsai.core.tool import bonsai.tool as tool +import test.bim.bootstrap from bonsai.tool.misc import Misc as subject diff --git a/src/bonsai/test/tool/test_model.py b/src/bonsai/test/tool/test_model.py index d69b2a532e..756268cbee 100644 --- a/src/bonsai/test/tool/test_model.py +++ b/src/bonsai/test/tool/test_model.py @@ -16,6 +16,9 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import json +from typing import Any + import bpy import ifcopenshell import ifcopenshell.api.geometry @@ -26,14 +29,13 @@ import ifcopenshell.api.type import ifcopenshell.util.element import ifcopenshell.util.representation import ifcopenshell.util.shape_builder +import numpy as np +from ifcopenshell.util.shape_builder import ShapeBuilder, V + import bonsai.core.tool import bonsai.tool as tool -import numpy as np -import json -from typing import Any -from test.bim.bootstrap import NewFile from bonsai.tool.model import Model as subject -from ifcopenshell.util.shape_builder import V, ShapeBuilder +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_nest.py b/src/bonsai/test/tool/test_nest.py index 257bbcee88..14acfa18bc 100644 --- a/src/bonsai/test/tool/test_nest.py +++ b/src/bonsai/test/tool/test_nest.py @@ -20,10 +20,11 @@ import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.spatial + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.nest import Nest as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_owner.py b/src/bonsai/test/tool/test_owner.py index 84ca456e96..bc4ed2d533 100644 --- a/src/bonsai/test/tool/test_owner.py +++ b/src/bonsai/test/tool/test_owner.py @@ -16,15 +16,17 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from functools import cache +from typing import Any + import bpy import ifcopenshell import ifcopenshell.api.owner + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.owner import Owner as subject -from typing import Any -from functools import cache +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_patch.py b/src/bonsai/test/tool/test_patch.py index 8fce8974a9..955908f284 100644 --- a/src/bonsai/test/tool/test_patch.py +++ b/src/bonsai/test/tool/test_patch.py @@ -17,12 +17,14 @@ # along with Bonsai. If not, see . import os + import bpy import ifcopenshell + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.patch import Patch as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_polyline.py b/src/bonsai/test/tool/test_polyline.py index 9dd1e8f41c..b55c6b52a6 100644 --- a/src/bonsai/test/tool/test_polyline.py +++ b/src/bonsai/test/tool/test_polyline.py @@ -21,10 +21,11 @@ import ifcopenshell import ifcopenshell.api.project import ifcopenshell.api.root import ifcopenshell.api.unit + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.polyline import Polyline as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_project.py b/src/bonsai/test/tool/test_project.py index 5751660d83..06c3f8ec25 100644 --- a/src/bonsai/test/tool/test_project.py +++ b/src/bonsai/test/tool/test_project.py @@ -17,20 +17,22 @@ # along with Bonsai. If not, see . import contextlib +import tempfile +from pathlib import Path + import bpy import ifcopenshell import ifcopenshell.api.context import ifcopenshell.api.document import ifcopenshell.api.root import ifcopenshell.api.unit -import bonsai.core.tool -import bonsai.tool as tool -import tempfile import ifcpatch from ifcpatch.recipes import Ifc2Sql -from test.bim.bootstrap import NewFile + +import bonsai.core.tool +import bonsai.tool as tool from bonsai.tool.project import Project as subject -from pathlib import Path +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_pset.py b/src/bonsai/test/tool/test_pset.py index 9aa8e70289..9b01105748 100644 --- a/src/bonsai/test/tool/test_pset.py +++ b/src/bonsai/test/tool/test_pset.py @@ -20,6 +20,7 @@ import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset + import bonsai.core.tool import bonsai.tool as tool from bonsai.tool.pset import Pset as subject diff --git a/src/bonsai/test/tool/test_pset_template.py b/src/bonsai/test/tool/test_pset_template.py index a104f8baff..d2aa408caa 100644 --- a/src/bonsai/test/tool/test_pset_template.py +++ b/src/bonsai/test/tool/test_pset_template.py @@ -20,6 +20,7 @@ import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset + import bonsai.core.tool import bonsai.tool as tool from bonsai.tool.pset_template import PsetTemplate as subject diff --git a/src/bonsai/test/tool/test_qto.py b/src/bonsai/test/tool/test_qto.py index 2b06cbb3c9..9ec7dc4efd 100644 --- a/src/bonsai/test/tool/test_qto.py +++ b/src/bonsai/test/tool/test_qto.py @@ -25,11 +25,12 @@ import ifcopenshell.api.pset import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.pset -import test.bim.bootstrap -import bonsai.core.tool -import bonsai.core.root -import bonsai.tool as tool + import bonsai.bim.import_ifc as import_ifc +import bonsai.core.root +import bonsai.core.tool +import bonsai.tool as tool +import test.bim.bootstrap from bonsai.tool.qto import Qto as subject diff --git a/src/bonsai/test/tool/test_root.py b/src/bonsai/test/tool/test_root.py index b27b556a03..39b853d63c 100644 --- a/src/bonsai/test/tool/test_root.py +++ b/src/bonsai/test/tool/test_root.py @@ -22,10 +22,11 @@ import ifcopenshell.api import ifcopenshell.api.feature import ifcopenshell.api.type import ifcopenshell.util.element + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.root import Root as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_sequence.py b/src/bonsai/test/tool/test_sequence.py index 7dab2671b9..af915f0273 100644 --- a/src/bonsai/test/tool/test_sequence.py +++ b/src/bonsai/test/tool/test_sequence.py @@ -17,15 +17,17 @@ # along with Bonsai. If not, see . import os + import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.pset import ifcopenshell.api.root + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.sequence import Sequence as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_spatial.py b/src/bonsai/test/tool/test_spatial.py index fd9316912a..299e615f2f 100644 --- a/src/bonsai/test/tool/test_spatial.py +++ b/src/bonsai/test/tool/test_spatial.py @@ -16,17 +16,18 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . -import numpy as np import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.api.spatial +import numpy as np +from mathutils import Matrix + import bonsai.core.tool import bonsai.tool as tool from bonsai.tool.spatial import Spatial as subject from test.bim.bootstrap import NewFile -from mathutils import Matrix class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_style.py b/src/bonsai/test/tool/test_style.py index 23c70461ee..743ac317ec 100644 --- a/src/bonsai/test/tool/test_style.py +++ b/src/bonsai/test/tool/test_style.py @@ -17,17 +17,19 @@ # along with Bonsai. If not, see . import os + import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.util.representation import pytest +from ifcopenshell.util.shape_builder import ShapeBuilder + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.style import Style as subject -from ifcopenshell.util.shape_builder import ShapeBuilder +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_surveyor.py b/src/bonsai/test/tool/test_surveyor.py index 0228cd9271..782b171a6d 100644 --- a/src/bonsai/test/tool/test_surveyor.py +++ b/src/bonsai/test/tool/test_surveyor.py @@ -17,16 +17,16 @@ # along with Bonsai. If not, see . import bpy -import numpy as np import ifcopenshell import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.geolocation +import numpy as np -import test.bim.bootstrap import bonsai.core.tool import bonsai.tool as tool +import test.bim.bootstrap from bonsai.tool import Surveyor as subject diff --git a/src/bonsai/test/tool/test_system.py b/src/bonsai/test/tool/test_system.py index 1a18811c37..3067ccfa09 100644 --- a/src/bonsai/test/tool/test_system.py +++ b/src/bonsai/test/tool/test_system.py @@ -16,19 +16,21 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +from math import pi + import bpy import ifcopenshell import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.api.system import ifcopenshell.util.unit +import numpy as np +from mathutils import Euler, Matrix, Vector + import bonsai.core.tool import bonsai.tool as tool -import numpy as np -from test.bim.bootstrap import NewFile from bonsai.tool.system import System as subject -from mathutils import Euler, Vector, Matrix -from math import pi +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_type.py b/src/bonsai/test/tool/test_type.py index 5bbf3c4c42..0d91b1f4f0 100644 --- a/src/bonsai/test/tool/test_type.py +++ b/src/bonsai/test/tool/test_type.py @@ -20,10 +20,11 @@ import bpy import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.type + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.type import Type as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/bonsai/test/tool/test_unit.py b/src/bonsai/test/tool/test_unit.py index 190a8fa302..6e0e756b67 100644 --- a/src/bonsai/test/tool/test_unit.py +++ b/src/bonsai/test/tool/test_unit.py @@ -21,10 +21,11 @@ import ifcopenshell import ifcopenshell.api.project import ifcopenshell.api.root import ifcopenshell.api.unit + import bonsai.core.tool import bonsai.tool as tool -from test.bim.bootstrap import NewFile from bonsai.tool.unit import Unit as subject +from test.bim.bootstrap import NewFile class TestImplementsTool(NewFile): diff --git a/src/ifc4d/__main__.py b/src/ifc4d/__main__.py index b876db860c..86c36394e6 100644 --- a/src/ifc4d/__main__.py +++ b/src/ifc4d/__main__.py @@ -1,6 +1,7 @@ import argparse import ifcopenshell + from ifc4d.msp2ifc import MSP2Ifc from ifc4d.p6xer2ifc import P6XER2Ifc from ifc4d.p62ifc import P62Ifc diff --git a/src/ifc4d/ifc4d/p62ifc.py b/src/ifc4d/ifc4d/p62ifc.py index ed2781d5cc..7d4881161a 100644 --- a/src/ifc4d/ifc4d/p62ifc.py +++ b/src/ifc4d/ifc4d/p62ifc.py @@ -19,7 +19,6 @@ import datetime import xml.etree.ElementTree as ET - from .common import ScheduleIfcGenerator diff --git a/src/ifc4d/ifc4d/pp2ifc.py b/src/ifc4d/ifc4d/pp2ifc.py index ce76b60226..b2be0c753b 100644 --- a/src/ifc4d/ifc4d/pp2ifc.py +++ b/src/ifc4d/ifc4d/pp2ifc.py @@ -12,7 +12,6 @@ from collections import defaultdict from datetime import timedelta from typing import Any - from .common import Activity, Calendar, ScheduleIfcGenerator, WBSEntry from .wpattern import AstaCalendarWorkPattern diff --git a/src/ifc5d/test/test_csv2ifc.py b/src/ifc5d/test/test_csv2ifc.py index fc31e9d86e..c14a795da3 100644 --- a/src/ifc5d/test/test_csv2ifc.py +++ b/src/ifc5d/test/test_csv2ifc.py @@ -20,14 +20,15 @@ import csv import tempfile from pathlib import Path -import ifc5d.csv2ifc -import ifc5d.ifc5Dspreadsheet import ifcopenshell import ifcopenshell.api.root import ifcopenshell.api.unit import ifcopenshell.util.cost import pytest +import ifc5d.csv2ifc +import ifc5d.ifc5Dspreadsheet + class TestCsv2Ifc: @staticmethod diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py b/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py index 0b431163bc..ac763e6af1 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_as_offset_curve.py @@ -18,7 +18,6 @@ import math - import ifcopenshell.api.alignment import ifcopenshell.api.unit import ifcopenshell.util diff --git a/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py b/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py index ad654ac97d..e1b0978e1a 100644 --- a/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py +++ b/src/ifcopenshell-python/test/api/alignment/test_create_layout_segment.py @@ -18,7 +18,6 @@ import math - import ifcopenshell.api.alignment import ifcopenshell.api.context import ifcopenshell.api.unit diff --git a/src/ifcopenshell-python/test/test_stream.py b/src/ifcopenshell-python/test/test_stream.py index 20fe67e5ec..754fcc4527 100644 --- a/src/ifcopenshell-python/test/test_stream.py +++ b/src/ifcopenshell-python/test/test_stream.py @@ -18,7 +18,6 @@ from pathlib import Path - import ifcopenshell TEST_FILE = Path(__file__).parent / "files" / "basic.ifc" diff --git a/src/ifcopenshell-python/test/util/test_file.py b/src/ifcopenshell-python/test/util/test_file.py index a1ee333b6b..18fc8ef07c 100644 --- a/src/ifcopenshell-python/test/util/test_file.py +++ b/src/ifcopenshell-python/test/util/test_file.py @@ -20,7 +20,6 @@ import tempfile import zipfile from pathlib import Path - import ifcopenshell.util.file as subject import test.bootstrap diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py b/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py index 44fd47cebc..1725f37aa2 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/extrude.py @@ -20,14 +20,13 @@ from typing import TYPE_CHECKING, Literal import bpy import ifcopenshell +import ifcsverchok.helper +import ifcsverchok.helper as helper from ifcopenshell.util.shape_builder import ShapeBuilder from sverchok.core.sockets import SvVerticesSocket from sverchok.data_structure import updateNode from sverchok.node_tree import SverchCustomTreeNode -import ifcsverchok.helper -import ifcsverchok.helper as helper - class SvIfcSbExtrude(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): bl_idname = "SvIfcSbExtrude" diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/mesh.py b/src/ifcsverchok/nodes/ifc/shape_builder/mesh.py index ec2609613e..8b740bef08 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/mesh.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/mesh.py @@ -17,12 +17,11 @@ # along with IfcSverchok. If not, see . import bpy +import ifcsverchok.helper as helper import sverchok.core.sockets from ifcsverchok.nodes.ifc.shape_builder.representation import ShapeBuilder from sverchok.node_tree import SverchCustomTreeNode -import ifcsverchok.helper as helper - class SvSbMesh(bpy.types.Node, SverchCustomTreeNode, helper.SvIfcCore): bl_idname = "SvSbMesh" diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/polyline.py b/src/ifcsverchok/nodes/ifc/shape_builder/polyline.py index 59e6c94804..2f27a3834f 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/polyline.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/polyline.py @@ -17,12 +17,11 @@ # along with IfcSverchok. If not, see . import bpy +import ifcsverchok.helper as helper import sverchok.core.sockets from ifcsverchok.nodes.ifc.shape_builder.representation import ShapeBuilder from sverchok.node_tree import SverchCustomTreeNode -import ifcsverchok.helper as helper - class SvSbPolyline(bpy.types.Node, SverchCustomTreeNode, helper.SvIfcCore): bl_idname = "SvSbPolyline" diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/rectangle.py b/src/ifcsverchok/nodes/ifc/shape_builder/rectangle.py index 8b9b60c81d..35e73db71f 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/rectangle.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/rectangle.py @@ -17,11 +17,10 @@ # along with IfcSverchok. If not, see . import bpy -from ifcopenshell.util.shape_builder import ShapeBuilder -from sverchok.node_tree import SverchCustomTreeNode - import ifcsverchok.helper import ifcsverchok.helper as helper +from ifcopenshell.util.shape_builder import ShapeBuilder +from sverchok.node_tree import SverchCustomTreeNode class SvIfcSbRectangle(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/representation.py b/src/ifcsverchok/nodes/ifc/shape_builder/representation.py index c1e8a9eb54..7fefe038dc 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/representation.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/representation.py @@ -19,11 +19,10 @@ import bpy import ifcopenshell import ifcopenshell.util.representation -from ifcopenshell.util.shape_builder import ShapeBuilder -from sverchok.node_tree import SverchCustomTreeNode - import ifcsverchok.helper import ifcsverchok.helper as helper +from ifcopenshell.util.shape_builder import ShapeBuilder +from sverchok.node_tree import SverchCustomTreeNode class SvIfcSbRepresentation(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py b/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py index 2968c5e4ed..d8585ba7a2 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/shape_output.py @@ -21,11 +21,10 @@ import ifcopenshell import ifcopenshell.geom import ifcopenshell.ifcopenshell_wrapper as W import ifcopenshell.util.shape +import ifcsverchok.helper as helper import sverchok.core.sockets from sverchok.node_tree import SverchCustomTreeNode -import ifcsverchok.helper as helper - class SvSbShapeOutput(bpy.types.Node, SverchCustomTreeNode, helper.SvIfcCore): """ diff --git a/src/ifcsverchok/nodes/ifc/shape_builder/test.py b/src/ifcsverchok/nodes/ifc/shape_builder/test.py index e2fc702721..4b8cd2ba04 100644 --- a/src/ifcsverchok/nodes/ifc/shape_builder/test.py +++ b/src/ifcsverchok/nodes/ifc/shape_builder/test.py @@ -17,10 +17,9 @@ # along with IfcSverchok. If not, see . import bpy -from sverchok.node_tree import SverchCustomTreeNode - import ifcsverchok.helper import ifcsverchok.helper as helper +from sverchok.node_tree import SverchCustomTreeNode class SvIfcSbTest(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): diff --git a/src/ifctester/test/test_facet.py b/src/ifctester/test/test_facet.py index a8ace9622a..3c5d91a6e4 100644 --- a/src/ifctester/test/test_facet.py +++ b/src/ifctester/test/test_facet.py @@ -33,6 +33,7 @@ import ifcopenshell.api.type import ifcopenshell.api.unit import ifcopenshell.guid import ifcopenshell.util.pset + import ifctester.facet import ifctester.ids from ifctester.facet import ( diff --git a/src/ifctester/webapp/public/worker/api.py b/src/ifctester/webapp/public/worker/api.py index ebf4bbe01a..c7d3a90662 100644 --- a/src/ifctester/webapp/public/worker/api.py +++ b/src/ifctester/webapp/public/worker/api.py @@ -1,9 +1,10 @@ import ifcopenshell import ifcopenshell.util.attribute import ifcopenshell.util.pset -from ifctester.ids import Ids, IdsXmlValidationError, get_schema from xmlschema.validators.exceptions import XMLSchemaValidationError +from ifctester.ids import Ids, IdsXmlValidationError, get_schema + # https://github.com/buildingSMART/IDS/blob/9914d568c7ac037acd97e58a0d16e9f93c3e3416/Schema/ids.xsd#L232 ifc_schemas = ["IFC2X3", "IFC4", "IFC4X3_ADD2"] From 44a52863a2bbf2bed8c9e7a026ad5db273b78483 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 26 Jan 2026 23:30:39 +1100 Subject: [PATCH 587/657] Fix #3764. WARNING: Preserve material usage attributes when switching types and refactor type regeneration API listeners This is a dangerous commit because the effect of refactoring of the listeners is hard to know. --- .../bonsai/bim/module/drawing/workspace.py | 2 +- src/bonsai/bonsai/bim/module/model/handler.py | 13 -------- src/bonsai/bonsai/bim/module/model/product.py | 4 +-- src/bonsai/bonsai/bim/module/model/profile.py | 16 ---------- src/bonsai/bonsai/bim/module/model/slab.py | 32 ------------------- src/bonsai/bonsai/bim/module/model/wall.py | 31 ------------------ src/bonsai/bonsai/bim/module/type/operator.py | 4 +-- src/bonsai/bonsai/core/type.py | 12 +++++-- src/bonsai/bonsai/tool/drawing.py | 2 +- src/bonsai/bonsai/tool/model.py | 15 +++++++++ src/bonsai/bonsai/tool/spatial.py | 3 +- src/bonsai/bonsai/tool/type.py | 17 ++++++++++ src/bonsai/test/core/test_type.py | 8 ++--- 13 files changed, 54 insertions(+), 105 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/workspace.py b/src/bonsai/bonsai/bim/module/drawing/workspace.py index 5796c20303..bc7463073e 100644 --- a/src/bonsai/bonsai/bim/module/drawing/workspace.py +++ b/src/bonsai/bonsai/bim/module/drawing/workspace.py @@ -168,7 +168,7 @@ def create_annotation_occurrence(context): ) assert element - bonsai.core.type.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) + bonsai.core.type.assign_type(tool.Ifc, tool.Model, tool.Type, element=element, type=relating_type) ifcopenshell.api.group.assign_group(ifc_file, group=tool.Drawing.get_drawing_group(drawing), products=[element]) tool.Collector.assign(obj) diff --git a/src/bonsai/bonsai/bim/module/model/handler.py b/src/bonsai/bonsai/bim/module/model/handler.py index 26a4863837..47075cdcfa 100644 --- a/src/bonsai/bonsai/bim/module/model/handler.py +++ b/src/bonsai/bonsai/bim/module/model/handler.py @@ -37,24 +37,11 @@ def load_post(*args): "sequence.edit_task_time", "Bonsai.Task.CalculateQuantities", task.calculate_quantities ) - ifcopenshell.api.add_post_listener( - "type.assign_type", "Bonsai.DumbWall.RegenerateFromType", wall.DumbWallPlaner().regenerate_from_type - ) - - ifcopenshell.api.add_post_listener( - "type.assign_type", "Bonsai.DumbSlab.RegenerateFromType", slab.DumbSlabPlaner().regenerate_from_type - ) - ifcopenshell.api.add_post_listener( "material.edit_profile", "Bonsai.DumbProfile.RegenerateFromProfile", profile.DumbProfileRegenerator().regenerate_from_profile, ) - ifcopenshell.api.add_post_listener( - "type.assign_type", - "Bonsai.DumbProfile.RegenerateFromType", - profile.DumbProfileRegenerator().regenerate_from_type, - ) ifcopenshell.api.add_post_listener( "type.assign_type", diff --git a/src/bonsai/bonsai/bim/module/model/product.py b/src/bonsai/bonsai/bim/module/model/product.py index 822342ab75..8ca5712116 100644 --- a/src/bonsai/bonsai/bim/module/model/product.py +++ b/src/bonsai/bonsai/bim/module/model/product.py @@ -380,7 +380,7 @@ class AddOccurrence(bpy.types.Operator, tool.Ifc.Operator): ifc_class=instance_class, should_add_representation=False, ) - bonsai.core.type.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) + bonsai.core.type.assign_type(tool.Ifc, tool.Model, tool.Type, element=element, type=relating_type) rprops = tool.Root.get_root_props() ifc_context = None @@ -433,7 +433,7 @@ class AddOccurrence(bpy.types.Operator, tool.Ifc.Operator): ) element = tool.Ifc.get_entity(obj) - bonsai.core.type.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) + bonsai.core.type.assign_type(tool.Ifc, tool.Model, tool.Type, element=element, type=relating_type) if existing_context: representation = ifcopenshell.util.representation.get_representation(element, existing_context) diff --git a/src/bonsai/bonsai/bim/module/model/profile.py b/src/bonsai/bonsai/bim/module/model/profile.py index 124a70707f..9271f2acc1 100644 --- a/src/bonsai/bonsai/bim/module/model/profile.py +++ b/src/bonsai/bonsai/bim/module/model/profile.py @@ -267,22 +267,6 @@ class DumbProfileRegenerator: results.extend(inverse.RelatedObjects) return results - def regenerate_from_type(self, usecase_path, ifc_file, settings): - relating_type = settings["relating_type"] - - new_material = ifcopenshell.util.element.get_material(relating_type) - if not new_material or not new_material.is_a("IfcMaterialProfileSet"): - return - - for related_object in settings["related_objects"]: - self._regenerate_from_type(related_object) - - def _regenerate_from_type(self, related_object: ifcopenshell.entity_instance) -> None: - obj = tool.Ifc.get_object(related_object) - if not obj or not tool.Geometry.get_active_representation(obj): - return - DumbProfileRecalculator().recalculate([obj]) - class ExtendProfile(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.extend_profile" diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index 1d673aca8e..509d24a60c 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -243,38 +243,6 @@ class DumbSlabPlaner: for element in rel.RelatedObjects: self.change_thickness(element, total_thickness, preserve_offset=True) - def regenerate_from_type(self, usecase_path, ifc_file, settings): - relating_type = settings["relating_type"] - - new_material = ifcopenshell.util.element.get_material(relating_type) - if not new_material or not new_material.is_a("IfcMaterialLayerSet"): - return - - parametric = ifcopenshell.util.element.get_psets(settings["relating_type"]).get("EPset_Parametric") - layer_set_direction = None - if parametric: - layer_set_direction = parametric.get("LayerSetDirection", layer_set_direction) - new_thickness = sum([l.LayerThickness for l in new_material.MaterialLayers]) - - self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file) - for related_object in settings["related_objects"]: - self._regenerate_from_type(related_object, layer_set_direction, new_thickness) - - def _regenerate_from_type( - self, related_object: ifcopenshell.entity_instance, layer_set_direction: Optional[str], new_thickness: float - ) -> None: - obj = tool.Ifc.get_object(related_object) - if not obj or not tool.Geometry.get_active_representation(obj): - return - - material = ifcopenshell.util.element.get_material(related_object) - if not material or not material.is_a("IfcMaterialLayerSetUsage"): - return - if layer_set_direction: - material.LayerSetDirection = layer_set_direction - if material.LayerSetDirection == "AXIS3": - self.change_thickness(related_object, new_thickness) - def regenerate_from_occurence(self, element, material_set_usage): self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) layer_set = material_set_usage.ForLayerSet diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index 9c94a27af0..5276e64692 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -1132,37 +1132,6 @@ class DumbWallPlaner: walls.extend([tool.Ifc.get_object(e) for e in rel.RelatedObjects]) tool.Model.recalculate_walls([w for w in set(walls) if w]) - def regenerate_from_type(self, usecase_path, ifc_file, settings): - relating_type = settings["relating_type"] - - new_material = ifcopenshell.util.element.get_material(relating_type) - if not new_material or not new_material.is_a("IfcMaterialLayerSet"): - return - - parametric = ifcopenshell.util.element.get_psets(relating_type).get("EPset_Parametric") - layer_set_direction = None - if parametric: - layer_set_direction = parametric.get("LayerSetDirection", layer_set_direction) - - self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file) - for related_object in settings["related_objects"]: - self._regenerate_from_type(related_object, layer_set_direction) - - def _regenerate_from_type( - self, related_object: ifcopenshell.entity_instance, layer_set_direction: Optional[str] - ) -> None: - obj = tool.Ifc.get_object(related_object) - if not obj or not tool.Geometry.get_active_representation(obj): - return - - material = ifcopenshell.util.element.get_material(related_object) - if not material or not material.is_a("IfcMaterialLayerSetUsage"): - return - if layer_set_direction: - material.LayerSetDirection = layer_set_direction - if material.LayerSetDirection == "AXIS2": - tool.Model.recalculate_walls([obj]) - class DumbWallJoiner: def __init__(self): diff --git a/src/bonsai/bonsai/bim/module/type/operator.py b/src/bonsai/bonsai/bim/module/type/operator.py index 66c87177f9..8d24989f12 100644 --- a/src/bonsai/bonsai/bim/module/type/operator.py +++ b/src/bonsai/bonsai/bim/module/type/operator.py @@ -74,7 +74,7 @@ class AssignType(bpy.types.Operator, tool.Ifc.Operator): element = tool.Ifc.get_entity(obj) if not element or not element.is_a("IfcObject"): continue - core.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) + core.assign_type(tool.Ifc, tool.Model, tool.Type, element=element, type=relating_type) # Switch to the drawing's target view if available if active_target_view and element.Representation: @@ -384,7 +384,7 @@ class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): for selected_obj in selected_objects: selected_element = tool.Ifc.get_entity(selected_obj) if selected_element and selected_element.is_a("IfcObject"): - core.assign_type(tool.Ifc, tool.Type, element=selected_element, type=new) + core.assign_type(tool.Ifc, tool.Model, tool.Type, element=selected_element, type=new) if prefs.occurrence_name_style == "TYPE": selected_obj.name = tool.Model.generate_occurrence_name(new, selected_element.is_a()) diff --git a/src/bonsai/bonsai/core/type.py b/src/bonsai/bonsai/core/type.py index 2467f124d3..a203b9ff76 100644 --- a/src/bonsai/bonsai/core/type.py +++ b/src/bonsai/bonsai/core/type.py @@ -31,14 +31,22 @@ if TYPE_CHECKING: def assign_type( ifc: type[tool.Ifc], + model: type[tool.Model], type_tool: type[tool.Type], element: ifcopenshell.entity_instance, type: ifcopenshell.entity_instance, ) -> None: + usage_attributes = type_tool.record_material_usage_attributes(element) ifc.run("type.assign_type", related_objects=[element], relating_type=type) obj = ifc.get_object(element) - if type_tool.has_material_usage(element): - pass # for now, representation regeneration handled by API listeners + if (usage := model.get_usage_type(type)) and usage_attributes: + type_tool.restore_material_usage_attributes(element, usage_attributes) + if (usage := model.get_usage_type(type)) == "PROFILE": + model.regenerate_profile(obj) + elif usage == "LAYER2": + model.recalculate_walls([obj]) + elif usage == "LAYER3": + model.regenerate_slab(obj) else: type_data = type_tool.get_object_data(ifc.get_object(type)) if type_data: diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index f268151faa..51d06c1c18 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -1279,7 +1279,7 @@ class Drawing(bonsai.core.tool.Drawing): @classmethod def run_type_assign_type(cls, element: ifcopenshell.entity_instance, relating_type: ifcopenshell.entity_instance): - return bonsai.core.type.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) + return bonsai.core.type.assign_type(tool.Ifc, tool.Model, tool.Type, element=element, type=relating_type) @classmethod def reload_representation(cls, obj: bpy.types.Object, representation: ifcopenshell.entity_instance): diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index bc6357cb0d..08a0a0fd85 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -2743,6 +2743,21 @@ class Model(bonsai.core.tool.Model): cls.recreate_wall(element, wall) + @classmethod + def regenerate_slab(cls, obj: bpy.types.Object) -> None: + from bonsai.bim.module.model.slab import DumbSlabPlaner + + element = tool.Ifc.get_entity(obj) + material_set = ifcopenshell.util.element.get_material(element, should_skip_usage=True) + new_thickness = sum([l.LayerThickness for l in material_set.MaterialLayers]) + DumbSlabPlaner().change_thickness(element, new_thickness) + + @classmethod + def regenerate_profile(cls, obj: bpy.types.Object) -> None: + from bonsai.bim.module.model.profile import DumbProfileRecalculator + + DumbProfileRecalculator().recalculate([obj]) + @classmethod def run_ifcsverchok_graph_on_bonsai_file(cls, node_tree: sverchok.node_tree.SverchCustomTree) -> None: from ifcsverchok.ifcstore import SvIfcStore diff --git a/src/bonsai/bonsai/tool/spatial.py b/src/bonsai/bonsai/tool/spatial.py index 922c6cc9ad..70a92f4cff 100644 --- a/src/bonsai/bonsai/tool/spatial.py +++ b/src/bonsai/bonsai/tool/spatial.py @@ -1177,6 +1177,7 @@ class Spatial(bonsai.core.tool.Spatial): @classmethod def assign_type_to_obj(cls, obj: bpy.types.Object) -> None: + # TODO this code looks in the wrong spot and suspicious props = tool.Model.get_model_props() ifc_file = tool.Ifc.get() relating_type_id = props.relating_type_id @@ -1196,7 +1197,7 @@ class Spatial(bonsai.core.tool.Spatial): element: ifcopenshell.entity_instance, relating_type: ifcopenshell.entity_instance, ) -> None: - bonsai.core.type.assign_type(ifc, type, element=element, type=relating_type) + bonsai.core.type.assign_type(ifc, tool.Model, type, element=element, type=relating_type) @classmethod def regen_obj_representation(cls, obj: bpy.types.Object, body: ifcopenshell.entity_instance) -> None: diff --git a/src/bonsai/bonsai/tool/type.py b/src/bonsai/bonsai/tool/type.py index 95474e57b7..84a349f288 100644 --- a/src/bonsai/bonsai/tool/type.py +++ b/src/bonsai/bonsai/tool/type.py @@ -143,3 +143,20 @@ class Type(bonsai.core.tool.Type): obj=obj, representation=representation, ) + + @classmethod + def record_material_usage_attributes(cls, element: ifcopenshell.entity_instance) -> dict | None: + if (material := ifcopenshell.util.element.get_material(element)) and "Usage" in material.is_a(): + return material.get_info() + + @classmethod + def restore_material_usage_attributes(cls, element: ifcopenshell.entity_instance, usage_attributes: dict) -> None: + if (material := ifcopenshell.util.element.get_material(element)) and material.is_a() == usage_attributes[ + "type" + ]: + if usage_attributes["type"] == "IfcMaterialLayerSetUsage": + for attr in ("LayerSetDirection", "DirectionSense", "OffsetFromReferenceLine", "ReferenceExtent"): + setattr(material, attr, usage_attributes.get(attr)) + elif usage_attributes["type"] == "IfcMaterialProfileSetUsage": + for attr in ("CardinalPoint", "ReferenceExtent"): + setattr(material, attr, usage_attributes.get(attr)) diff --git a/src/bonsai/test/core/test_type.py b/src/bonsai/test/core/test_type.py index ffdb571148..0987ab3d9e 100644 --- a/src/bonsai/test/core/test_type.py +++ b/src/bonsai/test/core/test_type.py @@ -17,11 +17,11 @@ # along with Bonsai. If not, see . import bonsai.core.type as subject -from test.core.bootstrap import geometry, ifc, type +from test.core.bootstrap import ifc, model, type, geometry class TestAssignType: - def test_assigning_and_switching_to_an_existing_type_data(self, ifc, type): + def test_assigning_and_switching_to_an_existing_type_data(self, ifc, model, type): ifc.run("type.assign_type", related_objects=["element"], relating_type="type").should_be_called() type.has_material_usage("element").should_be_called().will_return(False) ifc.get_object("type").should_be_called().will_return("type_obj") @@ -29,7 +29,7 @@ class TestAssignType: type.change_object_data("obj", "type_obj_data", is_global=False).should_be_called() ifc.get_object("element").should_be_called().will_return("obj") type.disable_editing("obj").should_be_called() - subject.assign_type(ifc, type, element="element", type="type") + subject.assign_type(ifc, model, type, element="element", type="type") def test_assigning_and_not_changing_data_if_the_type_has_no_data(self, ifc, type): ifc.run("type.assign_type", related_objects=["element"], relating_type="type").should_be_called() @@ -38,7 +38,7 @@ class TestAssignType: type.get_object_data("type_obj").should_be_called().will_return(None) ifc.get_object("element").should_be_called().will_return("obj") type.disable_editing("obj").should_be_called() - subject.assign_type(ifc, type, element="element", type="type") + subject.assign_type(ifc, model, type, element="element", type="type") class TestPurgeUnusedTypes: From fed98451d47957f930106d39c778b7da922b3e38 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 27 Jan 2026 01:32:06 +0100 Subject: [PATCH 588/657] connect the ports when creating several conected IfcFlowSegment with polyline --- src/bonsai/bonsai/bim/module/model/profile.py | 6 ++++++ .../bonsai/bim/module/system/operator.py | 20 ++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/profile.py b/src/bonsai/bonsai/bim/module/model/profile.py index 9271f2acc1..0a11fa191b 100644 --- a/src/bonsai/bonsai/bim/module/model/profile.py +++ b/src/bonsai/bonsai/bim/module/model/profile.py @@ -1131,8 +1131,14 @@ class DrawPolylineProfile(bpy.types.Operator, PolylineOperator, tool.Ifc.Operato MEPGenerator().setup_ports(profile1["obj"]) else: + connect_IfcFlowSegments = tool.Ifc.get_entity(profiles[0]["obj"]).is_a("IfcFlowSegment") for profile1, profile2 in zip(profiles[:-1], profiles[1:]): DumbProfileJoiner().join_V(profile2["obj"], profile1["obj"]) + if connect_IfcFlowSegments: + bpy.ops.bim.mep_connect_elements( + obj1_name=profile1["obj"].name, + obj2_name=profile2["obj"].name + ) def modal(self, context, event): return IfcStore.execute_ifc_operator(self, context, event, method="MODAL") diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 8dd6724de3..5fecd05ffb 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -317,17 +317,19 @@ class MEPConnectElements(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Connect MEP Elements" bl_description = "Connects two selected elements by their closest located ports and adjusts them" bl_options = {"REGISTER", "UNDO"} - - @classmethod - def poll(cls, context): - if not len(context.selected_objects) == 2: - cls.poll_message_set("Need to select 2 objects.") - return False - return True + obj1_name: bpy.props.StringProperty(name="Object 1") + obj2_name: bpy.props.StringProperty(name="Object 2") def _execute(self, context): - obj1 = context.active_object - obj2 = next(o for o in context.selected_objects if o != obj1) + if self.obj1_name and self.obj2_name: + obj1 = bpy.data.objects.get(self.obj1_name) + obj2 = bpy.data.objects.get(self.obj2_name) + else: + if not context.selected_objects or len(context.selected_objects) != 2: + self.report({"ERROR"}, "Need to select 2 objects.") + return {"CANCELLED"} + obj1 = context.active_object + obj2 = next(o for o in context.selected_objects if o != obj1) tool.Model.sync_object_ifc_position(obj1) tool.Model.sync_object_ifc_position(obj2) From de6f6cc8b2ad0be8fe1f9decec4693e7145b8c21 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 26 Jan 2026 19:53:41 -0600 Subject: [PATCH 589/657] Skip incompatible objects instead of failing IFC join operation When joining objects with mismatched representation types, deselect and skip incompatible objects rather than canceling the entire operation. This allows users to join compatible objects even when the selection includes incompatible ones. --- src/bonsai/bonsai/bim/module/geometry/operator.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index a03c6ae19c..97c5bb88ed 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2063,6 +2063,7 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): return position items = list(representation.Items) + skipped_objects = [] for obj in context.selected_editable_objects: if obj == self.target: continue @@ -2082,12 +2083,8 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): assert obj_rep if obj_rep.RepresentationType != representation_type: obj.select_set(False) - self.report( - {"ERROR"}, - f"IFC join failed - object '{obj.name}' has a different representation type " - f"({obj_rep.RepresentationType})\nthan target '{self.target.name}' ({representation_type}).", - ) - return + skipped_objects.append((obj.name, obj_rep.RepresentationType)) + continue placement = np.array(obj.matrix_world) placement[M_TRANSLATION] /= si_conversion @@ -2167,6 +2164,9 @@ class OverrideJoin(bpy.types.Operator, tool.Ifc.Operator): items.append(copied_item) ifcopenshell.api.root.remove_product(ifc_file, product=element) + if skipped_objects: + skipped_info = ", ".join(f"'{name}' ({rep_type})" for name, rep_type in skipped_objects) + self.report({"INFO"}, f"Skipped incompatible objects: {skipped_info}") representation.Items = items bpy.ops.object.join() core.switch_representation( From e41df68124b72e83616736cdac30cd90c0a48170 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 27 Jan 2026 15:57:19 +1100 Subject: [PATCH 590/657] Reintroduce public API for IfcTester after ruff purge 72f8218fcd87429d920b08cb73b11cf959ba4b26 --- src/ifctester/ifctester/__init__.py | 3 ++- src/ifctester/ifctester/ids.py | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ifctester/ifctester/__init__.py b/src/ifctester/ifctester/__init__.py index 46b38aa82e..f7d708105d 100644 --- a/src/ifctester/ifctester/__init__.py +++ b/src/ifctester/ifctester/__init__.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcTester. If not, see . -from .ids import open as open +from .ids import open __version__ = version = "0.0.0" +__all__ = ["open"] diff --git a/src/ifctester/ifctester/ids.py b/src/ifctester/ifctester/ids.py index d6ae3bd44a..8d00ce9fac 100644 --- a/src/ifctester/ifctester/ids.py +++ b/src/ifctester/ifctester/ids.py @@ -28,14 +28,21 @@ from xmlschema import XMLSchema, etree_tostring from xmlschema.validators.exceptions import XMLSchemaValidationError from .facet import ( + Attribute, Cardinality, + Classification, Entity, Facet, FacetFailure, + Material, + PartOf, + Property, + Restriction, get_pset, get_psets, ) +__all__ = ["Attribute", "Classification", "Entity", "Material", "PartOf", "Property", "Restriction"] cwd = os.path.dirname(os.path.realpath(__file__)) schema = None From 6ad99495712a382f682b75d9a6cb9e447a7d3ca7 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 27 Jan 2026 19:12:43 +1100 Subject: [PATCH 591/657] Update tests based on new simpler unit settings code --- src/bonsai/bonsai/bim/prop.py | 4 +- src/bonsai/bonsai/tool/unit.py | 15 +++-- src/bonsai/test/tool/test_unit.py | 96 ++++++++++++------------------- 3 files changed, 51 insertions(+), 64 deletions(-) diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 8e6b8ed7c8..4e93c1c690 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -627,8 +627,8 @@ class BIMProperties(PropertyGroup): items=[ ("NONE", "None", ""), ("GRAM", "Gram", "Grams"), - ("KILO/KILOGRAM", "Kilogram", "Kilograms"), - ("MEGA/TONNE", "Tonne", "Metric Tons"), + ("KILO/GRAM", "Kilogram", "Kilograms"), + ("MEGA/GRAM", "Tonne", "Metric Tons"), ("pound", "Pound", "Pounds"), ("ounce", "Ounce", "Ounces"), ], diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index 823c50bdc3..d7b35e3178 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -336,11 +336,18 @@ class Unit(bonsai.core.tool.Unit): def get_scene_unit_name(cls, unit_type: UNIT_TYPE) -> str | None: if unit_type == "LENGTHUNIT": name = bpy.context.scene.unit_settings.length_unit - name = {"MILES": "mile", "FEET": "foot", "INCHES": "inch", "THOU": "thou", "ADAPTIVE": "METERS"}.get( - name, name + if name == "ADAPTIVE": + if bpy.context.scene.unit_settings.system == "IMPERIAL": + name = "foot" + else: + name = "METRE" + name = ( + {"MILES": "mile", "FEET": "foot", "INCHES": "inch", "THOU": "thou", "ADAPTIVE": "METERS"} + .get(name, name) + .replace("METERS", "METRE") ) - if len(name) > len("METERS") and name.endswith("METERS"): - return f"{name[:-6]}/METRE" + if len(name) > len("METRE") and name.endswith("METRE"): + return f"{name[:-5]}/METRE" return name bim_props = tool.Blender.get_bim_props() if (name := getattr(bim_props, f"{unit_type[:-4].lower()}_unit")) != "NONE": diff --git a/src/bonsai/test/tool/test_unit.py b/src/bonsai/test/tool/test_unit.py index 6e0e756b67..dcd96c4dea 100644 --- a/src/bonsai/test/tool/test_unit.py +++ b/src/bonsai/test/tool/test_unit.py @@ -131,25 +131,43 @@ class TestGetSceneUnitName(NewFile): assert subject.get_scene_unit_name("AREAUNIT") == "square foot" assert subject.get_scene_unit_name("VOLUMEUNIT") == "cubic inch" + def test_getting_an_si_name(self): + props = tool.Blender.get_bim_props() + bpy.context.scene.unit_settings.system = "METRIC" + bpy.context.scene.unit_settings.length_unit = "METERS" + props.area_unit = "SQUARE_METRE" + props.volume_unit = "CUBIC_METRE" + assert subject.get_scene_unit_name("LENGTHUNIT") == "METRE" + assert subject.get_scene_unit_name("AREAUNIT") == "SQUARE_METRE" + assert subject.get_scene_unit_name("VOLUMEUNIT") == "CUBIC_METRE" + bpy.context.scene.unit_settings.length_unit = "MILLIMETERS" + assert subject.get_scene_unit_name("LENGTHUNIT") == "MILLI/METRE" + bpy.context.scene.unit_settings.length_unit = "ADAPTIVE" + assert subject.get_scene_unit_name("LENGTHUNIT") == "METRE" + def test_getting_a_name_with_no_unit_system(self): assert bpy.context.scene bpy.context.scene.unit_settings.system = "NONE" - assert subject.get_scene_unit_name("LENGTHUNIT") == "foot" + assert subject.get_scene_unit_name("LENGTHUNIT") == "METRE" + bpy.context.scene.unit_settings.length_unit = "ADAPTIVE" + assert subject.get_scene_unit_name("LENGTHUNIT") == "METRE" + assert subject.get_scene_unit_name("AREAUNIT") == "SQUARE_METRE" + assert subject.get_scene_unit_name("VOLUMEUNIT") == "CUBIC_METRE" def test_getting_mass_unit_names(self): """Test getting mass unit names for different systems""" assert bpy.context.scene props = tool.Blender.get_bim_props() props.mass_unit = "GRAM" - assert subject.get_scene_unit_name("MASSUNIT") == "gram" - props.mass_unit = "KILOGRAM" - assert subject.get_scene_unit_name("MASSUNIT") == "kilogram" - props.mass_unit = "POUND" + assert subject.get_scene_unit_name("MASSUNIT") == "GRAM" + props.mass_unit = "KILO/GRAM" + assert subject.get_scene_unit_name("MASSUNIT") == "KILO/GRAM" + props.mass_unit = "MEGA/GRAM" + assert subject.get_scene_unit_name("MASSUNIT") == "MEGA/GRAM" + props.mass_unit = "pound" assert subject.get_scene_unit_name("MASSUNIT") == "pound" - props.mass_unit = "OUNCE" + props.mass_unit = "ounce" assert subject.get_scene_unit_name("MASSUNIT") == "ounce" - props.mass_unit = "TONNE" - assert subject.get_scene_unit_name("MASSUNIT") == "tonne" def test_getting_time_unit_names(self): """Test getting time unit names for different systems""" @@ -157,64 +175,26 @@ class TestGetSceneUnitName(NewFile): props = tool.Blender.get_bim_props() props.time_unit = "SECOND" - assert subject.get_scene_unit_name("TIMEUNIT") == "second" - props.time_unit = "MINUTE" + assert subject.get_scene_unit_name("TIMEUNIT") == "SECOND" + props.time_unit = "minute" assert subject.get_scene_unit_name("TIMEUNIT") == "minute" - props.time_unit = "HOUR" - assert subject.get_scene_unit_name("TIMEUNIT") == "hour" - props.time_unit = "DAY" - assert subject.get_scene_unit_name("TIMEUNIT") == "day" + props.time_unit = "NONE" + assert not subject.get_scene_unit_name("TIMEUNIT") class TestGetSceneUnitSIPrefix: def test_run(self): assert bpy.context.scene - bpy.context.scene.unit_settings.system = "METRIC" - bpy.context.scene.unit_settings.length_unit = "METERS" - assert subject.get_scene_unit_si_prefix("LENGTHUNIT") is None - bpy.context.scene.unit_settings.length_unit = "MICROMETERS" - assert subject.get_scene_unit_si_prefix("LENGTHUNIT") == "MICRO" - bpy.context.scene.unit_settings.length_unit = "MILLIMETERS" - assert subject.get_scene_unit_si_prefix("LENGTHUNIT") == "MILLI" - bpy.context.scene.unit_settings.length_unit = "CENTIMETERS" - assert subject.get_scene_unit_si_prefix("LENGTHUNIT") == "CENTI" - bpy.context.scene.unit_settings.length_unit = "KILOMETERS" - assert subject.get_scene_unit_si_prefix("LENGTHUNIT") == "KILO" - bpy.context.scene.unit_settings.length_unit = "ADAPTIVE" - assert subject.get_scene_unit_si_prefix("LENGTHUNIT") is None - props = tool.Blender.get_bim_props() - props.area_unit = "SQUARE_METRE" - assert subject.get_scene_unit_si_prefix("AREAUNIT") is None - props.area_unit = "MILLI/SQUARE_METRE" - assert subject.get_scene_unit_si_prefix("AREAUNIT") == "MILLI" - props.volume_unit = "CUBIC_METRE" - assert subject.get_scene_unit_si_prefix("VOLUMEUNIT") is None - props.volume_unit = "MILLI/CUBIC_METRE" - assert subject.get_scene_unit_si_prefix("VOLUMEUNIT") == "MILLI" + assert subject.get_scene_unit_si_prefix("METRE") is None + assert subject.get_scene_unit_si_prefix("MICRO/METRE") == "MICRO" + assert subject.get_scene_unit_si_prefix("SQUARE_METRE") is None + assert subject.get_scene_unit_si_prefix("MILLI/SQUARE_METRE") == "MILLI" + assert subject.get_scene_unit_si_prefix("foot") is None def test_mass_and_time_unit_prefixes(self): - assert bpy.context.scene - props = tool.Blender.get_bim_props() - - props.mass_unit = "KILOGRAM" - assert subject.get_scene_unit_si_prefix("MASSUNIT") == "KILO" - props.mass_unit = "GRAM" - assert subject.get_scene_unit_si_prefix("MASSUNIT") is None - props.mass_unit = "POUND" - assert subject.get_scene_unit_si_prefix("MASSUNIT") == "CONVERSION" - props.mass_unit = "OUNCE" - assert subject.get_scene_unit_si_prefix("MASSUNIT") == "CONVERSION" - props.mass_unit = "TONNE" - assert subject.get_scene_unit_si_prefix("MASSUNIT") == "MEGA" - - props.time_unit = "SECOND" - assert subject.get_scene_unit_si_prefix("TIMEUNIT") is None - props.time_unit = "MINUTE" - assert subject.get_scene_unit_si_prefix("TIMEUNIT") == "CONVERSION" - props.time_unit = "HOUR" - assert subject.get_scene_unit_si_prefix("TIMEUNIT") == "CONVERSION" - props.time_unit = "DAY" - assert subject.get_scene_unit_si_prefix("TIMEUNIT") == "CONVERSION" + assert subject.get_scene_unit_si_prefix("KILO/GRAM") == "KILO" + assert subject.get_scene_unit_si_prefix("MEGA/GRAM") == "MEGA" + assert subject.get_scene_unit_si_prefix("GRAM") is None class TestImportUnitAttributes(NewFile): From 2a60f46516bda2ff34439b118392926d7c195db6 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 27 Jan 2026 19:13:43 +1100 Subject: [PATCH 592/657] Refactor parse_distance_string into tool classmethod and add tests including e9eca5e behaviour --- .../bonsai/bim/module/drawing/gizmos.py | 3 +- src/bonsai/bonsai/bim/module/spatial/prop.py | 3 +- src/bonsai/bonsai/core/tool.py | 1 - src/bonsai/bonsai/tool/unit.py | 478 +++++++++--------- src/bonsai/test/tool/test_unit.py | 11 + 5 files changed, 252 insertions(+), 244 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/gizmos.py b/src/bonsai/bonsai/bim/module/drawing/gizmos.py index 6624d2010c..a83bd0a46a 100644 --- a/src/bonsai/bonsai/bim/module/drawing/gizmos.py +++ b/src/bonsai/bonsai/bim/module/drawing/gizmos.py @@ -157,7 +157,6 @@ from mathutils.kdtree import KDTree import bonsai.tool as tool from bonsai.bim.module.drawing.shaders import ExtrusionGuidesShader -from bonsai.tool.unit import parse_distance_string SNAP_POINT_SIZE = 10.0 SNAP_POINT_COLOR = (1.0, 0.5, 0.0, 1.0) @@ -1028,7 +1027,7 @@ class NumericInputState: return input_str = self.get_input_string() - is_valid, value = parse_distance_string(input_str) + is_valid, value = tool.Unit.parse_distance_string(input_str) if is_valid: self.parsed_value = value diff --git a/src/bonsai/bonsai/bim/module/spatial/prop.py b/src/bonsai/bonsai/bim/module/spatial/prop.py index 2f12e164fc..18ddc6080d 100644 --- a/src/bonsai/bonsai/bim/module/spatial/prop.py +++ b/src/bonsai/bonsai/bim/module/spatial/prop.py @@ -39,7 +39,6 @@ import bonsai.core.geometry import bonsai.tool as tool from bonsai.bim.module.spatial.data import SpatialDecompositionData from bonsai.bim.prop import ObjProperty -from bonsai.tool.unit import parse_distance_string def get_subelement_class( @@ -52,7 +51,7 @@ def get_subelement_class( def update_elevation(self: "BIMContainer", context: bpy.types.Context) -> None: # Try to parse the input string with unit support first - is_valid, parsed_elevation = parse_distance_string(self.elevation, use_project_unit=True) + is_valid, parsed_elevation = tool.Unit.parse_distance_string(self.elevation, use_project_unit=True) if is_valid: elevation = parsed_elevation diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index c07ac9f483..9d78297c4e 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -1132,7 +1132,6 @@ class Unit: def set_active_unit(cls, unit): pass def get_project_currency_unit(cls): pass def get_currency_name(cls): pass - def add_mass_and_time_units(cls): pass @interface class Voider: diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index d7b35e3178..66b56612fe 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -34,245 +34,6 @@ if TYPE_CHECKING: from bonsai.bim.module.unit.prop import BIMUnitProperties -def parse_distance_string(input_string: str, use_project_unit: bool = True) -> tuple[bool, float]: - """ - Parse a distance string with optional unit suffixes and convert to meters. - - This function parses distance inputs with units (e.g., "5m", "10ft", "3.5cm") - and converts them to meters (SI units) for use in IFC models. - - Supports: - - Metric units: mm, cm, dm, m - - Imperial units: ft/feet ('), in/inches (") - - Arithmetic expressions: +, -, *, / - - Fractions for imperial units (e.g., 1/2") - - Formula mode: values starting with "=" - - :param input_string: The string to parse (e.g., "5m", "10ft", "10'6\"", "3.5cm", "12in") - :param use_project_unit: If True, uses project unit scale; if False, uses Blender unit scale - :return: Tuple (is_valid, value_in_meters) where is_valid indicates successful parsing - and value_in_meters is the converted value in meters - - Examples: - >>> parse_distance_string("5m") - (True, 5.0) - >>> parse_distance_string("30cm") - (True, 0.3) - >>> parse_distance_string("10ft") - (True, 3.048) - >>> parse_distance_string("12in") - (True, 0.3048) - >>> parse_distance_string("5'6\"") - (True, 1.6764) - >>> parse_distance_string("invalid") - (False, 0.0) - """ - - grammar_imperial = r""" - start: (FORMULA dim expr) | dim - dim: imperial - - FORMULA: "=" - - imperial: feet_inches | feet_only | inches_only | plain_number - feet_only: NUMBER (FEET_SYM | FEET_TEXT) - inches_only: inch_value (INCH_SYM | INCH_TEXT) - feet_inches: NUMBER (FEET_SYM | FEET_TEXT) DASH? inch_value (INCH_SYM | INCH_TEXT)? - plain_number: NUMBER - - inch_value: NUMBER fraction | fraction | NUMBER - - fraction: NUMBER "/" NUMBER - - expr: (ADD | SUB) dim | (MUL | DIV) NUMBER - - NUMBER: /-?(?:\d+\.?\d*|\.\d+)/ - FEET_SYM: "'" - FEET_TEXT: "ft" - INCH_SYM: "\"" - INCH_TEXT: "in" - DASH: "-" - ADD: "+" - SUB: "-" - MUL: "*" - DIV: "/" - - %ignore " " - """ - - grammar_metric = r""" - start: FORMULA? dim expr? - dim: metric - - FORMULA: "=" - - metric: NUMBER (MM | CM | DM | M | DEG)? - - expr: (ADD | SUB | MUL | DIV) dim - - NUMBER: /-?(?:\d+\.?\d*|\.\d+)/ - MM: "mm" - CM: "cm" - DM: "dm" - M: "m" - DEG: "°" - ADD: "+" - SUB: "-" - MUL: "*" - DIV: "/" - - %ignore " " - """ - - class InputTransform(Transformer): - def NUMBER(self, n): - return float(n) - - def fraction(self, numbers): - return numbers[0] / numbers[1] - - def inch_value(self, args): - # Can be: NUMBER fraction, fraction, or NUMBER - if len(args) == 2: - # NUMBER fraction (e.g., "9 1/64") - return args[0] + args[1] - else: - # Just fraction or just NUMBER - return args[0] - - def plain_number(self, args): - # A plain number in imperial context is assumed to be feet - feet = args[0] - # Convert feet to meters (1 foot = 0.3048 meters) - return feet * 0.3048 - - def feet_only(self, args): - # args[0] is the number of feet, args[1] is the unit token (we can ignore it) - feet = args[0] - # Convert feet to meters (1 foot = 0.3048 meters) - return feet * 0.3048 - - def inches_only(self, args): - # args[0] is the inch_value, args[1] is the unit token - inches = args[0] - # Convert inches to meters (1 inch = 0.0254 meters) - return inches * 0.0254 - - def feet_inches(self, args): - # Extract feet and inches values - feet = args[0] - # Find the inch_value (it's a number, not a token) - inches = None - for arg in args[1:]: - if isinstance(arg, (int, float)): - inches = arg - break - if inches is None: - inches = 0 - - # If feet is negative, inches should also be negative (subtractive) - if feet < 0: - inches = -inches - - # Convert to meters - total_meters = (feet * 0.3048) + (inches * 0.0254) - return total_meters - - def imperial(self, args): - # Just return the value from the sub-rule (feet_only, inches_only, or feet_inches) - return args[0] - - def metric(self, args): - # args[0] is the NUMBER, args[1] if present is the unit - value = args[0] - if len(args) > 1: - unit = str(args[1]) - # Convert to meters based on unit - if unit == "mm": - value = value / 1000.0 - elif unit == "cm": - value = value / 100.0 - elif unit == "dm": - value = value / 10.0 - elif unit == "m": - value = value # already in meters - elif unit == "°": - value = value # degrees, pass through - # If no unit specified, assume it's already in the project's unit system - return value - - def dim(self, args): - return args[0] - - def expr(self, args): - op = args[0] - value = float(args[1]) - if op == "+": - return lambda x: x + value - elif op == "-": - return lambda x: x - value - elif op == "*": - return lambda x: x * value - elif op == "/": - return lambda x: x / value - - def FORMULA(self, args): - return args[0] - - def start(self, args): - i = 0 - if args[0] == "=": - i += 1 - else: - if len(args) > 1: - raise ValueError("Invalid input.") - dimension = args[i] - if len(args) > i + 1: - expression = args[i + 1] - return expression(dimension) - else: - return dimension - - try: - # Determine unit scale - if use_project_unit and tool.Ifc.get(): - unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - else: - unit_scale = tool.Blender.get_unit_scale() - - # Try to parse with the project's default grammar first - if bpy.context.scene.unit_settings.system == "IMPERIAL": - primary_parser = Lark(grammar_imperial) - fallback_parser = Lark(grammar_metric) - else: - primary_parser = Lark(grammar_metric) - fallback_parser = Lark(grammar_imperial) - - # Try parsing with primary grammar - parse_tree = None - try: - parse_tree = primary_parser.parse(input_string) - except Exception as e: - # If primary fails, try fallback grammar (allows metric in imperial projects and vice versa) - try: - parse_tree = fallback_parser.parse(input_string) - except Exception as e2: - pass - - if parse_tree is None: - return False, 0.0 - - # Transform the parse tree to get the numeric result - transformer = InputTransform() - result = transformer.transform(parse_tree) - result = round(result, 6) - - return True, result - - except Exception as e: - return False, 0.0 - - class Unit(bonsai.core.tool.Unit): UNIT_TYPE = Literal["LENGTHUNIT", "AREAUNIT", "VOLUMEUNIT", "MASSUNIT", "TIMEUNIT"] @@ -300,6 +61,245 @@ class Unit(bonsai.core.tool.Unit): **kwargs, ) + @classmethod + def parse_distance_string(cls, input_string: str, use_project_unit: bool = True) -> tuple[bool, float]: + """ + Parse a distance string with optional unit suffixes and convert to meters. + + This function parses distance inputs with units (e.g., "5m", "10ft", "3.5cm") + and converts them to meters (SI units) for use in IFC models. + + Supports: + - Metric units: mm, cm, dm, m + - Imperial units: ft/feet ('), in/inches (") + - Arithmetic expressions: +, -, *, / + - Fractions for imperial units (e.g., 1/2") + - Formula mode: values starting with "=" + + :param input_string: The string to parse (e.g., "5m", "10ft", "10'6\"", "3.5cm", "12in") + :param use_project_unit: If True, uses project unit scale; if False, uses Blender unit scale + :return: Tuple (is_valid, value_in_meters) where is_valid indicates successful parsing + and value_in_meters is the converted value in meters + + Examples: + >>> parse_distance_string("5m") + (True, 5.0) + >>> parse_distance_string("30cm") + (True, 0.3) + >>> parse_distance_string("10ft") + (True, 3.048) + >>> parse_distance_string("12in") + (True, 0.3048) + >>> parse_distance_string("5'6\"") + (True, 1.6764) + >>> parse_distance_string("invalid") + (False, 0.0) + """ + + grammar_imperial = r""" + start: (FORMULA dim expr) | dim + dim: imperial + + FORMULA: "=" + + imperial: feet_inches | feet_only | inches_only | plain_number + feet_only: NUMBER (FEET_SYM | FEET_TEXT) + inches_only: inch_value (INCH_SYM | INCH_TEXT) + feet_inches: NUMBER (FEET_SYM | FEET_TEXT) DASH? inch_value (INCH_SYM | INCH_TEXT)? + plain_number: NUMBER + + inch_value: NUMBER fraction | fraction | NUMBER + + fraction: NUMBER "/" NUMBER + + expr: (ADD | SUB) dim | (MUL | DIV) NUMBER + + NUMBER: /-?(?:\d+\.?\d*|\.\d+)/ + FEET_SYM: "'" + FEET_TEXT: "ft" + INCH_SYM: "\"" + INCH_TEXT: "in" + DASH: "-" + ADD: "+" + SUB: "-" + MUL: "*" + DIV: "/" + + %ignore " " + """ + + grammar_metric = r""" + start: FORMULA? dim expr? + dim: metric + + FORMULA: "=" + + metric: NUMBER (MM | CM | DM | M | DEG)? + + expr: (ADD | SUB | MUL | DIV) dim + + NUMBER: /-?(?:\d+\.?\d*|\.\d+)/ + MM: "mm" + CM: "cm" + DM: "dm" + M: "m" + DEG: "°" + ADD: "+" + SUB: "-" + MUL: "*" + DIV: "/" + + %ignore " " + """ + + class InputTransform(Transformer): + def NUMBER(self, n): + return float(n) + + def fraction(self, numbers): + return numbers[0] / numbers[1] + + def inch_value(self, args): + # Can be: NUMBER fraction, fraction, or NUMBER + if len(args) == 2: + # NUMBER fraction (e.g., "9 1/64") + return args[0] + args[1] + else: + # Just fraction or just NUMBER + return args[0] + + def plain_number(self, args): + # A plain number in imperial context is assumed to be feet + feet = args[0] + # Convert feet to meters (1 foot = 0.3048 meters) + return feet * 0.3048 + + def feet_only(self, args): + # args[0] is the number of feet, args[1] is the unit token (we can ignore it) + feet = args[0] + # Convert feet to meters (1 foot = 0.3048 meters) + return feet * 0.3048 + + def inches_only(self, args): + # args[0] is the inch_value, args[1] is the unit token + inches = args[0] + # Convert inches to meters (1 inch = 0.0254 meters) + return inches * 0.0254 + + def feet_inches(self, args): + # Extract feet and inches values + feet = args[0] + # Find the inch_value (it's a number, not a token) + inches = None + for arg in args[1:]: + if isinstance(arg, (int, float)): + inches = arg + break + if inches is None: + inches = 0 + + # If feet is negative, inches should also be negative (subtractive) + if feet < 0: + inches = -inches + + # Convert to meters + total_meters = (feet * 0.3048) + (inches * 0.0254) + return total_meters + + def imperial(self, args): + # Just return the value from the sub-rule (feet_only, inches_only, or feet_inches) + return args[0] + + def metric(self, args): + # args[0] is the NUMBER, args[1] if present is the unit + value = args[0] + if len(args) > 1: + unit = str(args[1]) + # Convert to meters based on unit + if unit == "mm": + value = value / 1000.0 + elif unit == "cm": + value = value / 100.0 + elif unit == "dm": + value = value / 10.0 + elif unit == "m": + value = value # already in meters + elif unit == "°": + value = value # degrees, pass through + # If no unit specified, assume it's already in the project's unit system + return value + + def dim(self, args): + return args[0] + + def expr(self, args): + op = args[0] + value = float(args[1]) + if op == "+": + return lambda x: x + value + elif op == "-": + return lambda x: x - value + elif op == "*": + return lambda x: x * value + elif op == "/": + return lambda x: x / value + + def FORMULA(self, args): + return args[0] + + def start(self, args): + i = 0 + if args[0] == "=": + i += 1 + else: + if len(args) > 1: + raise ValueError("Invalid input.") + dimension = args[i] + if len(args) > i + 1: + expression = args[i + 1] + return expression(dimension) + else: + return dimension + + try: + # Determine unit scale + if use_project_unit and tool.Ifc.get(): + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + else: + unit_scale = tool.Blender.get_unit_scale() + + # Try to parse with the project's default grammar first + if bpy.context.scene.unit_settings.system == "IMPERIAL": + primary_parser = Lark(grammar_imperial) + fallback_parser = Lark(grammar_metric) + else: + primary_parser = Lark(grammar_metric) + fallback_parser = Lark(grammar_imperial) + + # Try parsing with primary grammar + parse_tree = None + try: + parse_tree = primary_parser.parse(input_string) + except Exception as e: + # If primary fails, try fallback grammar (allows metric in imperial projects and vice versa) + try: + parse_tree = fallback_parser.parse(input_string) + except Exception as e2: + pass + + if parse_tree is None: + return False, 0.0 + + # Transform the parse tree to get the numeric result + transformer = InputTransform() + result = transformer.transform(parse_tree) + result = round(result, 6) + + return True, result + + except Exception as e: + return False, 0.0 + @classmethod def get_unit_props(cls) -> BIMUnitProperties: return bpy.context.scene.BIMUnitProperties diff --git a/src/bonsai/test/tool/test_unit.py b/src/bonsai/test/tool/test_unit.py index dcd96c4dea..df3acc1b3e 100644 --- a/src/bonsai/test/tool/test_unit.py +++ b/src/bonsai/test/tool/test_unit.py @@ -33,6 +33,17 @@ class TestImplementsTool(NewFile): assert isinstance(subject(), bonsai.core.tool.Unit) +class TestParseDistanceString(NewFile): + def test_run(self): + assert subject.parse_distance_string("5m") == (True, 5.0) + assert subject.parse_distance_string("30cm") == (True, 0.3) + assert subject.parse_distance_string("10ft") == (True, 3.048) + assert subject.parse_distance_string("12in") == (True, 0.3048) + assert subject.parse_distance_string("5'6\"") == (True, 1.6764) + assert subject.parse_distance_string("-5'6\"") == (True, -1.6764) + assert subject.parse_distance_string("invalid") == (False, 0.0) + + class TestClearActiveUnit(NewFile): def test_run(self): props = tool.Unit.get_unit_props() From bbf8fc2b645b6b46d97589b56aacf0d7c47806a6 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 27 Jan 2026 19:27:34 +1100 Subject: [PATCH 593/657] Revert "feat: auto-assign containers to root aggregates and organize parts in outliner" This reverts commit 9adbd4718103b1a9fef2737a3a798bb66daa1ebc. --- .../bonsai/bim/module/geometry/operator.py | 33 ++------ .../bonsai/bim/module/spatial/operator.py | 81 ++++--------------- 2 files changed, 20 insertions(+), 94 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 97c5bb88ed..15f3052935 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1725,40 +1725,19 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): # Only assign container if element is not already aggregated under another element # Aggregated elements should not be in the spatial structure if not ifcopenshell.util.element.get_aggregate(element): - container = original_data[matching_group_id][index]["Container"] bonsai.core.spatial.assign_container( tool.Ifc, tool.Collector, tool.Spatial, - container=container, + container=original_data[matching_group_id][index]["Container"], element_obj=obj, ) + for part in ifcopenshell.util.element.get_parts(tool.Ifc.get_entity(obj)): + tool.Collector.assign(tool.Ifc.get_object(part)) - # Get the container's collection for moving parts in the outliner - container_obj = tool.Ifc.get_object(container) - container_collection = container_obj.BIMObjectProperties.collection if container_obj else None - - # Move all parts to the container's collection in the outliner - if container_collection: - for part in ifcopenshell.util.element.get_parts(element): - part_obj = tool.Ifc.get_object(part) - if part_obj: - # Remove from all previous collections - for col in part_obj.users_collection[:]: - col.objects.unlink(part_obj) - - # Link to container collection - if part_obj.name not in container_collection.objects: - container_collection.objects.link(part_obj) - - # Recursively handle nested parts - for nested_part in ifcopenshell.util.element.get_parts(part): - nested_part_obj = tool.Ifc.get_object(nested_part) - if nested_part_obj: - for col in nested_part_obj.users_collection[:]: - col.objects.unlink(nested_part_obj) - if nested_part_obj.name not in container_collection.objects: - container_collection.objects.link(nested_part_obj) + assignments = original_data[matching_group_id][index]["Assignment"] + if assignments: + assign_to_annotations(obj, assignments) else: try: obj.name = original_data[matching_group_id][index]["Name"] diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index 8e88f64cee..18fc35c1c9 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -177,84 +177,31 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): else: return - def get_root_aggregate(element): - """Traverse up the aggregate hierarchy to find the top-most aggregate""" - current = element - root = None - while aggregate := ifcopenshell.util.element.get_aggregate(current): - root = aggregate - current = aggregate - return root - - def get_all_parts_recursive(element): - """Recursively get all parts of an aggregate""" - parts = [] - for part in ifcopenshell.util.element.get_parts(element): - parts.append(part) - # Recursively get nested parts - parts.extend(get_all_parts_recursive(part)) - return parts - objs: list[bpy.types.Object] = [] - processed_elements = set() # Track elements we've already handled (by IFC ID) - promoted_parts = 0 # Count how many parts were promoted to their root aggregate - + # In IFC element can be either contained of aggregated, + # tehrefore we skip aggregated elements here to prevent confusion. + # Can't handle it in `poll` since user might just select bunch of elements + # and try to assign a container to them + # and excluding aggregates because of the `poll` failing might get awkward. + skipped_aggregates = 0 for obj in tool.Blender.get_selected_objects(): if not (element := tool.Ifc.get_entity(obj)): continue - - # Check if element is part of an aggregate (at any level) - if root_aggregate := get_root_aggregate(element): - # Skip if we've already processed this root aggregate - if root_aggregate.id() in processed_elements: - continue - - # Get the root aggregate object and add it instead - if root_aggregate_obj := tool.Ifc.get_object(root_aggregate): - objs.append(root_aggregate_obj) - processed_elements.add(root_aggregate.id()) - if root_aggregate != element: # Only count as promoted if different from selected - promoted_parts += 1 - else: - # Element is not part of any aggregate - if element.id() not in processed_elements: - objs.append(obj) - processed_elements.add(element.id()) - - # Get the container's collection - container_obj = tool.Ifc.get_object(container) - container_collection = container_obj.BIMObjectProperties.collection if container_obj else None + if ifcopenshell.util.element.get_aggregate(element): + skipped_aggregates += 1 + continue + objs.append(obj) for element_obj in objs: - element = tool.Ifc.get_entity(element_obj) - - # Only assign container to the ROOT aggregate (this updates IFC relationships) if self.remove_from_other_containers: for col in element_obj.users_collection[:]: col.objects.unlink(element_obj) core.assign_container(tool.Ifc, tool.Collector, tool.Spatial, container=container, element_obj=element_obj) - # For parts, only move them in Blender collections (don't change IFC relationships) - if container_collection: - all_parts = get_all_parts_recursive(element) - for part in all_parts: - if part_obj := tool.Ifc.get_object(part): - # Always remove from ALL previous collections when moving to new container - for col in part_obj.users_collection[:]: - col.objects.unlink(part_obj) - - # Link to new container collection (Blender-only, no IFC change) - if part_obj.name not in container_collection.objects: - container_collection.objects.link(part_obj) - - # Disable editing mode for all selected objects - for obj in tool.Blender.get_selected_objects(): - core.disable_editing_container(tool.Spatial, obj=obj) - - promoted_msg = "" - if promoted_parts: - promoted_msg = f" {promoted_parts} nested parts promoted to their root aggregates." - self.report({"INFO"}, f"{len(objs)} elements assigned.{promoted_msg}") + aggregates_msg = "" + if skipped_aggregates: + aggregates_msg = f" {skipped_aggregates} aggregated elements skipped." + self.report({"INFO"}, f"{len(objs)} elements assigned.{aggregates_msg}") class EnableEditingContainer(bpy.types.Operator): From 8a32d7bea0fca29699688cbed53e2eb8a0318e14 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Tue, 27 Jan 2026 18:05:19 +0100 Subject: [PATCH 594/657] Add EstablishPathDirection operator and update UI to integrate it --- .../bonsai/bim/module/system/__init__.py | 1 + .../bonsai/bim/module/system/operator.py | 50 +++++++++++++++++++ src/bonsai/bonsai/bim/module/system/ui.py | 4 +- 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/system/__init__.py b/src/bonsai/bonsai/bim/module/system/__init__.py index d08046ee8f..36901100f6 100644 --- a/src/bonsai/bonsai/bim/module/system/__init__.py +++ b/src/bonsai/bonsai/bim/module/system/__init__.py @@ -37,6 +37,7 @@ classes = ( operator.EditZone, operator.EnableEditingSystem, operator.EnableEditingZone, + operator.EstablishPathDirection, operator.HidePorts, operator.LoadSystems, operator.LoadZones, diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 5fecd05ffb..18e8d91d88 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -479,6 +479,56 @@ class CycleFlowDirection(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} +class EstablishPathDirection(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.establish_path_direction" + bl_label = "Establish Path Direction" + bl_description = "Propagates flow direction through connected flow segments with two ports" + bl_options = {"REGISTER", "UNDO"} + port_id: bpy.props.IntProperty() + + def _execute(self, context): + connected_port = tool.Ifc.get().by_id(self.port_id) + + + if not connected_port or not connected_port.is_a("IfcDistributionPort"): + self.report({"ERROR"}, "Invalid port specified.") + return {"CANCELLED"} + + direction_map = { + "SOURCE": "SINK", + "SINK": "SOURCE", + "SOURCEANDSINK": "SOURCEANDSINK", + "NOTDEFINED": "NOTDEFINED", + } + next_element = tool.System.get_port_relating_element(connected_port) + ports = tool.System.get_ports(next_element) + segments_processed = 0 + while (len(ports) == 2): + if ports[0].id() == connected_port.id(): + other_port = ports[1] + else: + other_port = ports[0] + + new_direction = direction_map.get(connected_port.FlowDirection, "NOTDEFINED") + other_port.FlowDirection = new_direction + segments_processed += 1 + + connected_port = tool.System.get_connected_port(other_port) + if not connected_port: + break + connected_port.FlowDirection = direction_map.get(other_port.FlowDirection, "NOTDEFINED") + next_element = tool.System.get_port_relating_element(connected_port) + + if not next_element.is_a("IfcFlowSegment"): + print(f"DEBUG: next_element is not IfcFlowSegment, stopping") + break + + ports = tool.System.get_ports(next_element) + + self.report({"INFO"}, f"Established path direction through {segments_processed} flow segment(s).") + return {"FINISHED"} + + class LoadZones(bpy.types.Operator): bl_idname = "bim.load_zones" bl_label = "Load Zones" diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index d621adc02b..a3d73c10f6 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -296,7 +296,7 @@ class BIM_PT_port(Panel): element = tool.Ifc.get_entity(context.active_object) row = layout.row(align=True) - cols = [row.column(align=True) for i in range(9)] + cols = [row.column(align=True) for i in range(10)] cols[3].scale_x = 1.0 cols[6].scale_x = 1.0 cols[8].scale_x = 1.33 @@ -333,12 +333,14 @@ class BIM_PT_port(Panel): else: cols[7].label(text="", icon="BLANK1") cols[8].label(text="") + cols[9].operator("bim.establish_path_direction", text="", icon="CON_FOLLOWPATH").port_id = connected_port.id() else: cols[4].label(text="", icon="BLANK1") cols[5].label(text="", icon="BLANK1") cols[6].label(text="Port is disconnected") cols[7].label(text="", icon="BLANK1") cols[8].label(text="") + cols[9].label(text="", icon="BLANK1") class BIM_PT_flow_controls(Panel): From 24a58cba405ddca878ff30d3a35ac0f285b5e7a1 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 09:14:40 +1100 Subject: [PATCH 595/657] Remove functionality to unlink from non-IFC collections This is a cool idea, but users have all sorts of Blender collection strategies and I think it's a good idea for Bonsai code to just touch Bonsai's stuff and leave everything else. Separate functionality can be built for non-Bonsai workflows and preferrably in a more discoverable way than in individual Bonsai features. --- src/bonsai/bonsai/bim/module/spatial/operator.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index 18fc35c1c9..04617cc025 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -153,16 +153,10 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): "Assign the selected objects to the container selected in Spatial Manager.\n\n" "All elements-parts of an aggregate will be skipped.\n" "To assign a container, they should be unassigned from an aggregate first.\n\n" - "This will also move objects to the container collection in the outliner.\n" - "ALT + Click to ensure objects are only linked in the container collection" + "This will also move objects to the container collection in the outliner." ) bl_options = {"REGISTER", "UNDO"} container: bpy.props.IntProperty(options={"SKIP_SAVE"}) - remove_from_other_containers: bpy.props.BoolProperty(default=False, options={"SKIP_SAVE"}) - - def invoke(self, context, event): - self.remove_from_other_containers = event.alt - return self.execute(context) def _execute(self, context): if self.container: @@ -193,9 +187,6 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): objs.append(obj) for element_obj in objs: - if self.remove_from_other_containers: - for col in element_obj.users_collection[:]: - col.objects.unlink(element_obj) core.assign_container(tool.Ifc, tool.Collector, tool.Spatial, container=container, element_obj=element_obj) aggregates_msg = "" From 35ae1e927da71bd0a116675e719cba53ad05f399 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 17:49:15 +1100 Subject: [PATCH 596/657] Fix missing model prophet in core test bootstrap --- src/bonsai/test/core/bootstrap.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/bonsai/test/core/bootstrap.py b/src/bonsai/test/core/bootstrap.py index 3cf7589420..057ee9ffab 100644 --- a/src/bonsai/test/core/bootstrap.py +++ b/src/bonsai/test/core/bootstrap.py @@ -137,6 +137,13 @@ def misc(): prophet.verify() +@pytest.fixture +def model(): + prophet = Prophecy(bonsai.core.tool.Model) + yield prophet + prophet.verify() + + @pytest.fixture def nest(): prophet = Prophecy(bonsai.core.tool.Nest) From 79fa47fc2fa8a2e4b9d961c6c386e4ea23f2ed6d Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 17:49:31 +1100 Subject: [PATCH 597/657] Allow specifying MODULE in make test-core for convenience --- src/bonsai/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 5b484f9942..68433466bd 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -336,7 +336,11 @@ test: .PHONY: test-core test-core: +ifndef MODULE pytest -p no:pytest-blender test/core +else + pytest -p no:pytest-blender test/core/test_${MODULE}.py +endif .PHONY: test-bim test-bim: From ff35666ad9284a9259c887c687fe3d418e793b86 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 18:00:04 +1100 Subject: [PATCH 598/657] Reimplement feature to reassign inherited containers if you select a child element This reimplements @theoryshaw 's commit 9adbd4 but has a few upgrades: - Considers all parent / child relationships, not just aggregates - Puts business logic in core where it belongs and tool code in tool - Uses existing utils where possible like get_decomposition - Does not use name based collection checking which is fragile - Reuses tool.Collector - Makes container assignment handle the API's capability to do things in bulk instead of one by one in a loop, so it's faster - Tests --- .../bonsai/bim/module/aggregate/operator.py | 2 +- .../bonsai/bim/module/geometry/operator.py | 2 +- src/bonsai/bonsai/bim/module/model/product.py | 4 +-- .../bonsai/bim/module/spatial/operator.py | 25 ++-------------- src/bonsai/bonsai/bim/module/spatial/prop.py | 4 +-- src/bonsai/bonsai/core/spatial.py | 25 ++++++++++------ src/bonsai/bonsai/core/tool.py | 4 ++- src/bonsai/bonsai/tool/spatial.py | 26 +++++++++++++---- src/bonsai/test/core/test_spatial.py | 27 +++++++++-------- src/bonsai/test/tool/test_spatial.py | 29 ++++--------------- 10 files changed, 70 insertions(+), 78 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/aggregate/operator.py b/src/bonsai/bonsai/bim/module/aggregate/operator.py index be6272c3ab..e9f23afece 100644 --- a/src/bonsai/bonsai/bim/module/aggregate/operator.py +++ b/src/bonsai/bonsai/bim/module/aggregate/operator.py @@ -224,7 +224,7 @@ class BIM_OT_add_aggregate(bpy.types.Operator, tool.Ifc.Operator): tool.Collector, tool.Spatial, container=current_container, - element_obj=aggregate, + objs=[aggregate], ) core.assign_object(tool.Ifc, tool.Aggregate, tool.Collector, relating_obj=aggregate, related_obj=obj) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 15f3052935..fbd694d219 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1730,7 +1730,7 @@ class RefreshLinkedAggregate(bpy.types.Operator, tool.Ifc.Operator): tool.Collector, tool.Spatial, container=original_data[matching_group_id][index]["Container"], - element_obj=obj, + objs=[obj], ) for part in ifcopenshell.util.element.get_parts(tool.Ifc.get_entity(obj)): tool.Collector.assign(tool.Ifc.get_object(part)) diff --git a/src/bonsai/bonsai/bim/module/model/product.py b/src/bonsai/bonsai/bim/module/model/product.py index 8ca5712116..012cba4889 100644 --- a/src/bonsai/bonsai/bim/module/model/product.py +++ b/src/bonsai/bonsai/bim/module/model/product.py @@ -470,7 +470,7 @@ class AddOccurrence(bpy.types.Operator, tool.Ifc.Operator): parent = ifcopenshell.util.element.get_container(building_element) if parent: bonsai.core.spatial.assign_container( - tool.Ifc, tool.Collector, tool.Spatial, container=parent, element_obj=obj + tool.Ifc, tool.Collector, tool.Spatial, container=parent, objs=[obj] ) # set occurrences properties for the types defined with modifiers @@ -493,7 +493,7 @@ class AddOccurrence(bpy.types.Operator, tool.Ifc.Operator): else: if self.container_obj: bonsai.core.spatial.assign_container( - tool.Ifc, tool.Collector, tool.Spatial, container=self.container, element_obj=obj + tool.Ifc, tool.Collector, tool.Spatial, container=self.container, objs=[obj] ) if props.rl_mode == "BOTTOM": obj.location.z = self.container_obj.location.z - tool.Blender.get_object_bounding_box(obj)["min_z"] diff --git a/src/bonsai/bonsai/bim/module/spatial/operator.py b/src/bonsai/bonsai/bim/module/spatial/operator.py index 04617cc025..23c0c28335 100644 --- a/src/bonsai/bonsai/bim/module/spatial/operator.py +++ b/src/bonsai/bonsai/bim/module/spatial/operator.py @@ -171,28 +171,9 @@ class AssignContainer(bpy.types.Operator, tool.Ifc.Operator): else: return - objs: list[bpy.types.Object] = [] - # In IFC element can be either contained of aggregated, - # tehrefore we skip aggregated elements here to prevent confusion. - # Can't handle it in `poll` since user might just select bunch of elements - # and try to assign a container to them - # and excluding aggregates because of the `poll` failing might get awkward. - skipped_aggregates = 0 - for obj in tool.Blender.get_selected_objects(): - if not (element := tool.Ifc.get_entity(obj)): - continue - if ifcopenshell.util.element.get_aggregate(element): - skipped_aggregates += 1 - continue - objs.append(obj) - - for element_obj in objs: - core.assign_container(tool.Ifc, tool.Collector, tool.Spatial, container=container, element_obj=element_obj) - - aggregates_msg = "" - if skipped_aggregates: - aggregates_msg = f" {skipped_aggregates} aggregated elements skipped." - self.report({"INFO"}, f"{len(objs)} elements assigned.{aggregates_msg}") + core.assign_container( + tool.Ifc, tool.Collector, tool.Spatial, container=container, objs=tool.Blender.get_selected_objects() + ) class EnableEditingContainer(bpy.types.Operator): diff --git a/src/bonsai/bonsai/bim/module/spatial/prop.py b/src/bonsai/bonsai/bim/module/spatial/prop.py index 18ddc6080d..5c48566d08 100644 --- a/src/bonsai/bonsai/bim/module/spatial/prop.py +++ b/src/bonsai/bonsai/bim/module/spatial/prop.py @@ -175,8 +175,8 @@ def poll_container_obj(self: "BIMObjectSpatialProperties", container_obj: bpy.ty obj = self.id_data if ( (container := tool.Ifc.get_entity(container_obj)) - and (tool.Ifc.get_entity(obj)) - and tool.Spatial.can_contain(container, obj) + and (element := tool.Ifc.get_entity(obj)) + and tool.Spatial.can_contain(container, element) ): return True return False diff --git a/src/bonsai/bonsai/core/spatial.py b/src/bonsai/bonsai/core/spatial.py index 4207d033d4..c464f84766 100644 --- a/src/bonsai/bonsai/core/spatial.py +++ b/src/bonsai/bonsai/core/spatial.py @@ -52,15 +52,22 @@ def assign_container( collector: type[tool.Collector], spatial: type[tool.Spatial], container: ifcopenshell.entity_instance, - element_obj: Optional[bpy.types.Object] = None, + objs: Optional[bpy.types.Object] = None, ) -> Union[ifcopenshell.entity_instance, None]: - if not spatial.can_contain(container, element_obj): - return - assert element_obj # Type checker. - rel = ifc.run("spatial.assign_container", products=[ifc.get_entity(element_obj)], relating_structure=container) - spatial.disable_editing(element_obj) - collector.assign(element_obj) - return rel + root_elements = set() + all_elements = set() + for obj in objs: + if not (element := ifc.get_entity(obj)): + continue + root_element = spatial.get_root_element(element) + root_elements.add(root_element) + spatial.disable_editing(obj) + all_elements.add(root_element) + all_elements.update(spatial.get_decomposition(root_element)) + if products := [e for e in root_elements if spatial.can_contain(container, root_element)]: + ifc.run("spatial.assign_container", products=products, relating_structure=container) + for element in all_elements: + collector.assign(ifc.get_object(element)) def enable_editing_container(spatial: type[tool.Spatial], obj: bpy.types.Object) -> None: @@ -98,7 +105,7 @@ def copy_to_container( copied_obj = spatial.duplicate_object_and_data(obj) spatial.set_relative_object_matrix(copied_obj, to_container_obj, matrix) result_objs.append(spatial.run_root_copy_class(obj=copied_obj)) - spatial.run_spatial_assign_container(container=to_container, element_obj=copied_obj) + spatial.run_spatial_assign_container(container=to_container, objs=[copied_obj]) spatial.disable_editing(obj) return result_objs diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index 9d78297c4e..aad79c097e 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -954,12 +954,14 @@ class Spatial: def get_object_matrix(cls, obj): pass def get_relative_object_matrix(cls, target_obj, relative_to_obj): pass def get_selected_product_types(cls): pass + def get_root_element(cls, element): pass + def get_decomposition(cls, element): pass def get_selected_products(cls): pass def import_spatial_decomposition(cls): pass def import_spatial_element(cls, element, level_index): pass def load_contained_elements(cls): pass def run_root_copy_class(cls, obj): pass - def run_spatial_assign_container(cls, container, element_obj): pass + def run_spatial_assign_container(cls, container, objs): pass def run_spatial_import_spatial_decomposition(cls): pass def select_object(cls, obj): pass def select_products(cls, products, unhide=False): pass diff --git a/src/bonsai/bonsai/tool/spatial.py b/src/bonsai/bonsai/tool/spatial.py index 70a92f4cff..d38d895c22 100644 --- a/src/bonsai/bonsai/tool/spatial.py +++ b/src/bonsai/bonsai/tool/spatial.py @@ -74,9 +74,25 @@ class Spatial(bonsai.core.tool.Spatial): return bpy.context.scene.BIMGridProperties @classmethod - def can_contain(cls, container: ifcopenshell.entity_instance, element_obj: Union[bpy.types.Object, None]) -> bool: - if not (element := tool.Ifc.get_entity(element_obj)): - return False + def get_decomposition(cls, element: ifcopenshell.entity_instance) -> list(ifcopenshell.entity_instance): + return ifcopenshell.util.element.get_decomposition(element) + + @classmethod + def get_root_element(cls, element: ifcopenshell.entity_instance) -> ifcopenshell.entity_instance: + while True: + if parent := ( + ifcopenshell.util.element.get_aggregate(element) + or ifcopenshell.util.element.get_nest(element) + or ifcopenshell.util.element.get_filled_void(element) + or ifcopenshell.util.element.get_voided_element(element) + ): + element = parent + else: + break + return element + + @classmethod + def can_contain(cls, container: ifcopenshell.entity_instance, element: ifcopenshell.entity_instance) -> bool: if tool.Ifc.get_schema() == "IFC2X3": if not container.is_a("IfcSpatialStructureElement"): return False @@ -147,10 +163,10 @@ class Spatial(bonsai.core.tool.Spatial): @classmethod def run_spatial_assign_container( - cls, container: ifcopenshell.entity_instance, element_obj: bpy.types.Object + cls, container: ifcopenshell.entity_instance, objs: list[bpy.types.Object] ) -> Union[ifcopenshell.entity_instance, None]: return bonsai.core.spatial.assign_container( - tool.Ifc, tool.Collector, tool.Spatial, container=container, element_obj=element_obj + tool.Ifc, tool.Collector, tool.Spatial, container=container, objs=objs ) @classmethod diff --git a/src/bonsai/test/core/test_spatial.py b/src/bonsai/test/core/test_spatial.py index 0ae9695ea2..ddc6116fdf 100644 --- a/src/bonsai/test/core/test_spatial.py +++ b/src/bonsai/test/core/test_spatial.py @@ -38,16 +38,19 @@ class TestDereferenceStructure: class TestAssignContainer: def test_run(self, ifc, collector, spatial): - spatial.can_contain("container", "element_obj").should_be_called().will_return(True) - ifc.get_entity("element_obj").should_be_called().will_return("element") - ifc.run( - "spatial.assign_container", products=["element"], relating_structure="container" - ).should_be_called().will_return("rel") - spatial.disable_editing("element_obj").should_be_called() - collector.assign("element_obj").should_be_called() - assert ( - subject.assign_container(ifc, collector, spatial, container="container", element_obj="element_obj") == "rel" - ) + ifc.get_entity("obj").should_be_called().will_return("element") + spatial.get_root_element("element").should_be_called().will_return("aggregate") + spatial.get_decomposition("aggregate").should_be_called().will_return(["element", "element2"]) + spatial.can_contain("container", "aggregate").should_be_called().will_return(True) + ifc.run("spatial.assign_container", products=["aggregate"], relating_structure="container").should_be_called() + spatial.disable_editing("obj").should_be_called() + ifc.get_object("aggregate").should_be_called().will_return("aggregate_obj") + ifc.get_object("element").should_be_called().will_return("obj") + ifc.get_object("element2").should_be_called().will_return("obj2") + collector.assign("aggregate_obj").should_be_called() + collector.assign("obj").should_be_called() + collector.assign("obj2").should_be_called() + subject.assign_container(ifc, collector, spatial, container="container", objs=["obj"]) class TestEnableEditingContainer: @@ -82,7 +85,7 @@ class TestCopyToContainer: spatial.duplicate_object_and_data("obj").should_be_called().will_return("new_obj") spatial.set_relative_object_matrix("new_obj", "to_container_obj", "matrix").should_be_called() spatial.run_root_copy_class(obj="new_obj").should_be_called() - spatial.run_spatial_assign_container(container="to_container", element_obj="new_obj").should_be_called() + spatial.run_spatial_assign_container(container="to_container", objs=["new_obj"]).should_be_called() spatial.disable_editing("obj").should_be_called() @@ -97,7 +100,7 @@ class TestCopyToContainer: spatial.duplicate_object_and_data("obj").should_be_called().will_return("new_obj") spatial.set_relative_object_matrix("new_obj", "to_container_obj", "matrix").should_be_called() spatial.run_root_copy_class(obj="new_obj").should_be_called() - spatial.run_spatial_assign_container(container="to_container", element_obj="new_obj").should_be_called() + spatial.run_spatial_assign_container(container="to_container", objs=["new_obj"]).should_be_called() spatial.disable_editing("obj").should_be_called() diff --git a/src/bonsai/test/tool/test_spatial.py b/src/bonsai/test/tool/test_spatial.py index 299e615f2f..005f370b01 100644 --- a/src/bonsai/test/tool/test_spatial.py +++ b/src/bonsai/test/tool/test_spatial.py @@ -43,9 +43,7 @@ class TestCanContain(NewFile): structure_obj = bpy.data.objects.new("Object", None) tool.Ifc.link(structure, structure_obj) element = ifc.createIfcWall() - element_obj = bpy.data.objects.new("Object", None) - tool.Ifc.link(element, element_obj) - assert subject.can_contain(structure, element_obj) is True + assert subject.can_contain(structure, element) is True def test_a_spatial_structure_element_can_contain_an_element_ifc2x3(self): ifc = ifcopenshell.file(schema="IFC2X3") @@ -54,9 +52,7 @@ class TestCanContain(NewFile): structure_obj = bpy.data.objects.new("Object", None) tool.Ifc.link(structure, structure_obj) element = ifc.createIfcWall() - element_obj = bpy.data.objects.new("Object", None) - tool.Ifc.link(element, element_obj) - assert subject.can_contain(structure, element_obj) is True + assert subject.can_contain(structure, element) is True def test_a_spatial_zone_element_cannot_contain_an_element(self): ifc = ifcopenshell.file() @@ -65,14 +61,7 @@ class TestCanContain(NewFile): structure_obj = bpy.data.objects.new("Object", None) tool.Ifc.link(structure, structure_obj) element = ifc.createIfcWall() - element_obj = bpy.data.objects.new("Object", None) - tool.Ifc.link(element, element_obj) - assert subject.can_contain(structure, element_obj) is False - - def test_unlinked_elements_cannot_contain_anything(self): - structure_obj = bpy.data.objects.new("Object", None) - element_obj = bpy.data.objects.new("Object", None) - assert subject.can_contain(structure_obj, element_obj) is False + assert subject.can_contain(structure, element) is False def test_a_non_spatial_element_cannot_contain_anything(self): ifc = ifcopenshell.file() @@ -81,9 +70,7 @@ class TestCanContain(NewFile): structure_obj = bpy.data.objects.new("Object", None) tool.Ifc.link(structure, structure_obj) element = ifc.createIfcWall() - element_obj = bpy.data.objects.new("Object", None) - tool.Ifc.link(element, element_obj) - assert subject.can_contain(structure, element_obj) is False + assert subject.can_contain(structure, element) is False def test_a_non_element_cannot_be_contained(self): ifc = ifcopenshell.file() @@ -92,9 +79,7 @@ class TestCanContain(NewFile): structure_obj = bpy.data.objects.new("Object", None) tool.Ifc.link(structure, structure_obj) element = ifc.createIfcTask() - element_obj = bpy.data.objects.new("Object", None) - tool.Ifc.link(element, element_obj) - assert subject.can_contain(structure, element_obj) is False + assert subject.can_contain(structure, element) is False def test_other_non_elements_that_have_a_contained_in_structure_attribute_can_be_contained(self): ifc = ifcopenshell.file() @@ -103,9 +88,7 @@ class TestCanContain(NewFile): structure_obj = bpy.data.objects.new("Object", None) tool.Ifc.link(structure, structure_obj) element = ifc.createIfcGrid() - element_obj = bpy.data.objects.new("Object", None) - tool.Ifc.link(element, element_obj) - assert subject.can_contain(structure, element_obj) is True + assert subject.can_contain(structure, element) is True class TestCanReference(NewFile): From 6f78d60c9fd73da9f74729248dba1cd9c98b5d13 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 21:22:19 +1100 Subject: [PATCH 599/657] Minor fix for tests to prevent ambiguous labeling --- src/bonsai/bonsai/bim/module/drawing/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 365ff90ee3..8c29bfbf41 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -5056,7 +5056,7 @@ class ShowCategoryHelp(bpy.types.Operator): class AddElementValueRow(bpy.types.Operator): bl_idname = "bim.add_element_value_row" - bl_label = "Add Element" + bl_label = "Add Element Value Row" bl_description = "Add a new element value row" bl_options = {"REGISTER", "UNDO"} From bcff5c7449b920c04d2ec5d0dc38b2e704b4c8f0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 21:49:13 +1100 Subject: [PATCH 600/657] Remove unused tool --- src/bonsai/bonsai/core/tool.py | 10 +++++----- src/bonsai/bonsai/tool/unit.py | 5 ----- src/bonsai/test/tool/test_unit.py | 12 ------------ 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index aad79c097e..19395fa449 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -951,11 +951,11 @@ class Spatial: def get_active_container(cls): pass def get_container(cls, element): pass def get_decomposed_elements(cls, container, recursive): pass + def get_decomposition(cls, element): pass def get_object_matrix(cls, obj): pass def get_relative_object_matrix(cls, target_obj, relative_to_obj): pass - def get_selected_product_types(cls): pass def get_root_element(cls, element): pass - def get_decomposition(cls, element): pass + def get_selected_product_types(cls): pass def get_selected_products(cls): pass def import_spatial_decomposition(cls): pass def import_spatial_element(cls, element, level_index): pass @@ -1125,15 +1125,15 @@ class Unit: def disable_editing_units(cls): pass def enable_editing_units(cls): pass def export_unit_attributes(cls): pass + def get_currency_name(cls): pass + def get_project_currency_unit(cls): pass def get_scene_unit_name(cls, unit_type): pass def get_scene_unit_si_prefix(cls, name): pass def import_unit_attributes(cls, unit): pass def import_units(cls): pass - def is_scene_unit_metric(cls): pass + def is_si_unit(cls, name): pass def is_unit_class(cls, unit, ifc_class): pass def set_active_unit(cls, unit): pass - def get_project_currency_unit(cls): pass - def get_currency_name(cls): pass @interface class Voider: diff --git a/src/bonsai/bonsai/tool/unit.py b/src/bonsai/bonsai/tool/unit.py index 66b56612fe..1221f28be9 100644 --- a/src/bonsai/bonsai/tool/unit.py +++ b/src/bonsai/bonsai/tool/unit.py @@ -419,11 +419,6 @@ class Unit(bonsai.core.tool.Unit): new.is_assigned = unit in assigned_units new.ifc_class = unit.is_a() - @classmethod - def is_scene_unit_metric(cls) -> bool: - assert bpy.context.scene - return bpy.context.scene.unit_settings.system in ["METRIC", "NONE"] - @classmethod def is_unit_class(cls, unit: ifcopenshell.entity_instance, ifc_class: str) -> bool: return unit.is_a(ifc_class) diff --git a/src/bonsai/test/tool/test_unit.py b/src/bonsai/test/tool/test_unit.py index df3acc1b3e..392650da71 100644 --- a/src/bonsai/test/tool/test_unit.py +++ b/src/bonsai/test/tool/test_unit.py @@ -434,18 +434,6 @@ class TestImportUnits(NewFile): assert second_prop.ifc_class == "IfcSIUnit" -class TestIsSceneUnitMetric(NewFile): - def test_run(self): - assert bpy.context.scene - props = bpy.context.scene.unit_settings - props.system = "METRIC" - assert subject.is_scene_unit_metric() is True - props.system = "IMPERIAL" - assert subject.is_scene_unit_metric() is False - props.system = "NONE" - assert subject.is_scene_unit_metric() is True - - class TestIsUnitClass: def test_run(self): ifc = ifcopenshell.file() From 53e5f847302f32cdbe681a6ccfa9870dd15a116e Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 21:49:25 +1100 Subject: [PATCH 601/657] Fix failing core unit tests --- src/bonsai/test/core/test_unit.py | 168 +++++++++++++----------------- 1 file changed, 70 insertions(+), 98 deletions(-) diff --git a/src/bonsai/test/core/test_unit.py b/src/bonsai/test/core/test_unit.py index a7d73c755f..1c328fe84c 100644 --- a/src/bonsai/test/core/test_unit.py +++ b/src/bonsai/test/core/test_unit.py @@ -22,119 +22,91 @@ from test.core.bootstrap import ifc, unit class TestAssignSceneUnits: def test_creating_and_assigning_metric_units(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(True) - unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("prefix") - unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return("prefix") - unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return("prefix") - unit.add_mass_and_time_units().should_be_called().will_return(True) - unit.get_scene_unit_si_prefix("MASSUNIT").should_be_called().will_return("KILO") - unit.get_scene_unit_si_prefix("TIMEUNIT").should_be_called().will_return(None) - - ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="prefix").should_be_called().will_return( + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("length_name") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("area_name") + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("volume_name") + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("mass_name") + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("time_name") + unit.is_si_unit("length_name").should_be_called().will_return(True) + unit.is_si_unit("area_name").should_be_called().will_return(True) + unit.is_si_unit("volume_name").should_be_called().will_return(True) + unit.is_si_unit("mass_name").should_be_called().will_return(True) + unit.is_si_unit("time_name").should_be_called().will_return(True) + unit.get_scene_unit_si_prefix("length_name").should_be_called().will_return("length_prefix") + unit.get_scene_unit_si_prefix("area_name").should_be_called().will_return("area_prefix") + unit.get_scene_unit_si_prefix("volume_name").should_be_called().will_return("volume_prefix") + unit.get_scene_unit_si_prefix("mass_name").should_be_called().will_return("mass_prefix") + unit.get_scene_unit_si_prefix("time_name").should_be_called().will_return("time_prefix") + ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="length_prefix").should_be_called().will_return( "lengthunit" ) - ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix="prefix").should_be_called().will_return("areaunit") - ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix="prefix").should_be_called().will_return( + ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix="area_prefix").should_be_called().will_return( + "areaunit" + ) + ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix="volume_prefix").should_be_called().will_return( "volumeunit" ) - ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix="KILO").should_be_called().will_return("massunit") - ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None).should_be_called().will_return("timeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - + ifc.run("unit.add_si_unit", unit_type="MASSUNIT", prefix="mass_prefix").should_be_called().will_return( + "massunit" + ) + ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix="time_prefix").should_be_called().will_return( + "timeunit" + ) ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit"] ).should_be_called() subject.assign_scene_units(ifc, unit) - def test_creating_and_assigning_metric_units_without_mass_and_time(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(True) - unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("CENTI") - unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return("CENTI") - unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return("CENTI") - unit.add_mass_and_time_units().should_be_called().will_return(False) - ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="CENTI").should_be_called().will_return("lengthunit") - ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix="CENTI").should_be_called().will_return("areaunit") - ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix="CENTI").should_be_called().will_return("volumeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - ifc.run("unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit"]).should_be_called() + def test_creating_and_assigning_only_specified_units(self, ifc, unit): + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("length_name") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return(None) + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return(None) + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return(None) + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return(None) + unit.is_si_unit("length_name").should_be_called().will_return(True) + unit.get_scene_unit_si_prefix("length_name").should_be_called().will_return("length_prefix") + ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="length_prefix").should_be_called().will_return( + "lengthunit" + ) + ifc.run("unit.assign_unit", units=["lengthunit"]).should_be_called() subject.assign_scene_units(ifc, unit) def test_creating_and_assigning_imperial_units(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(False) - unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("foot") - unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square foot") - unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic foot") - unit.add_mass_and_time_units().should_be_called().will_return(True) - unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("pound") - unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("SECOND") - - ifc.run("unit.add_conversion_based_unit", name="foot").should_be_called().will_return("lengthunit") - ifc.run("unit.add_conversion_based_unit", name="square foot").should_be_called().will_return("areaunit") - ifc.run("unit.add_conversion_based_unit", name="cubic foot").should_be_called().will_return("volumeunit") - ifc.run("unit.add_conversion_based_unit", name="pound").should_be_called().will_return("massunit") - ifc.run("unit.add_si_unit", unit_type="TIMEUNIT", prefix=None).should_be_called().will_return("timeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("length_name") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("area_name") + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("volume_name") + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("mass_name") + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("time_name") + unit.is_si_unit("length_name").should_be_called().will_return(False) + unit.is_si_unit("area_name").should_be_called().will_return(False) + unit.is_si_unit("volume_name").should_be_called().will_return(False) + unit.is_si_unit("mass_name").should_be_called().will_return(False) + unit.is_si_unit("time_name").should_be_called().will_return(False) + ifc.run("unit.add_conversion_based_unit", name="length_name").should_be_called().will_return("lengthunit") + ifc.run("unit.add_conversion_based_unit", name="area_name").should_be_called().will_return("areaunit") + ifc.run("unit.add_conversion_based_unit", name="volume_name").should_be_called().will_return("volumeunit") + ifc.run("unit.add_conversion_based_unit", name="mass_name").should_be_called().will_return("massunit") + ifc.run("unit.add_conversion_based_unit", name="time_name").should_be_called().will_return("timeunit") ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] + "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "massunit", "timeunit"] ).should_be_called() subject.assign_scene_units(ifc, unit) - def test_creating_and_assigning_imperial_units_without_mass_and_time(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(False) - unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("yard") - unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square yard") - unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic yard") - unit.add_mass_and_time_units().should_be_called().will_return(False) - ifc.run("unit.add_conversion_based_unit", name="yard").should_be_called().will_return("lengthunit") - ifc.run("unit.add_conversion_based_unit", name="square yard").should_be_called().will_return("areaunit") - ifc.run("unit.add_conversion_based_unit", name="cubic yard").should_be_called().will_return("volumeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - ifc.run("unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit"]).should_be_called() - subject.assign_scene_units(ifc, unit) - - def test_creating_metric_units_with_conversion_based_mass_and_time(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(True) - unit.get_scene_unit_si_prefix("LENGTHUNIT").should_be_called().will_return("MILLI") - unit.get_scene_unit_si_prefix("AREAUNIT").should_be_called().will_return(None) - unit.get_scene_unit_si_prefix("VOLUMEUNIT").should_be_called().will_return(None) - unit.add_mass_and_time_units().should_be_called().will_return(True) - unit.get_scene_unit_si_prefix("MASSUNIT").should_be_called().will_return("CONVERSION") - unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("tonne") - unit.get_scene_unit_si_prefix("TIMEUNIT").should_be_called().will_return("CONVERSION") - unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("minute") - - ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="MILLI").should_be_called().will_return("lengthunit") - ifc.run("unit.add_si_unit", unit_type="AREAUNIT", prefix=None).should_be_called().will_return("areaunit") - ifc.run("unit.add_si_unit", unit_type="VOLUMEUNIT", prefix=None).should_be_called().will_return("volumeunit") - ifc.run("unit.add_conversion_based_unit", name="tonne").should_be_called().will_return("massunit") - ifc.run("unit.add_conversion_based_unit", name="minute").should_be_called().will_return("timeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - - ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] - ).should_be_called() - subject.assign_scene_units(ifc, unit) - - def test_creating_imperial_units_with_conversion_based_units(self, ifc, unit): - unit.is_scene_unit_metric().should_be_called().will_return(False) - unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("inch") - unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("square inch") - unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return("cubic inch") - unit.add_mass_and_time_units().should_be_called().will_return(True) - unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return("ounce") - unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return("hour") - - ifc.run("unit.add_conversion_based_unit", name="inch").should_be_called().will_return("lengthunit") - ifc.run("unit.add_conversion_based_unit", name="square inch").should_be_called().will_return("areaunit") - ifc.run("unit.add_conversion_based_unit", name="cubic inch").should_be_called().will_return("volumeunit") - ifc.run("unit.add_conversion_based_unit", name="ounce").should_be_called().will_return("massunit") - ifc.run("unit.add_conversion_based_unit", name="hour").should_be_called().will_return("timeunit") - ifc.run("unit.add_conversion_based_unit", name="degree").should_be_called().will_return("planeangleunit") - - ifc.run( - "unit.assign_unit", units=["lengthunit", "areaunit", "volumeunit", "planeangleunit", "massunit", "timeunit"] - ).should_be_called() + def test_creating_both_metric_and_imperial_units(self, ifc, unit): + # I know British doctors measure with stones so... + unit.get_scene_unit_name("LENGTHUNIT").should_be_called().will_return("length_name") + unit.get_scene_unit_name("AREAUNIT").should_be_called().will_return("area_name") + unit.get_scene_unit_name("VOLUMEUNIT").should_be_called().will_return(None) + unit.get_scene_unit_name("MASSUNIT").should_be_called().will_return(None) + unit.get_scene_unit_name("TIMEUNIT").should_be_called().will_return(None) + unit.is_si_unit("length_name").should_be_called().will_return(True) + unit.is_si_unit("area_name").should_be_called().will_return(False) + unit.get_scene_unit_si_prefix("length_name").should_be_called().will_return("length_prefix") + ifc.run("unit.add_si_unit", unit_type="LENGTHUNIT", prefix="length_prefix").should_be_called().will_return( + "lengthunit" + ) + ifc.run("unit.add_conversion_based_unit", name="area_name").should_be_called().will_return("areaunit") + ifc.run("unit.assign_unit", units=["lengthunit", "areaunit"]).should_be_called() subject.assign_scene_units(ifc, unit) From e76c2a70e6c729f7424f2f3be07bcbcc1b15d2d4 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 23:18:57 +1100 Subject: [PATCH 602/657] Add tests for aggregate containment changing --- src/bonsai/test/bim/feature/spatial.feature | 44 +++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/bonsai/test/bim/feature/spatial.feature b/src/bonsai/test/bim/feature/spatial.feature index 2b3020ea23..3ed7a80b94 100644 --- a/src/bonsai/test/bim/feature/spatial.feature +++ b/src/bonsai/test/bim/feature/spatial.feature @@ -74,6 +74,50 @@ Scenario: Assign container When I click "CHECKMARK" Then the object "IfcWall/Cube" is in the collection "IfcSite/My Site" +Scenario: Assign container - assign an aggregate which also affects children + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I look at the "Class" panel + And I set the "Products" property to "IfcElement" + And I set the "Class" property to "IfcWall" + And I click "Assign IFC Class" + And the object "IfcWall/Cube" is selected + When I press "bim.add_aggregate" + Then the object "IfcElementAssembly/Default_Name" exists + And the object "IfcElementAssembly/Default_Name" is contained in object "IfcBuildingStorey/My Storey" + When I look at the "Spatial Decomposition" panel + And I select the "My Site" item in the "BIM_UL_containers_manager" list + And I click "Set Default" + And the object "IfcWall/Cube" is selected + And I look at the "Spatial Container" panel + And I click "GREASEPENCIL" + And I click "CHECKMARK" + Then the object "IfcWall/Cube" is in the collection "IfcSite/My Site" + And the object "IfcElementAssembly/Default_Name" is in the collection "IfcSite/My Site" + +Scenario: Assign container - assign a child which also affects parents + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I look at the "Class" panel + And I set the "Products" property to "IfcElement" + And I set the "Class" property to "IfcWall" + And I click "Assign IFC Class" + And the object "IfcWall/Cube" is selected + When I press "bim.add_aggregate" + Then the object "IfcElementAssembly/Default_Name" exists + And the object "IfcElementAssembly/Default_Name" is contained in object "IfcBuildingStorey/My Storey" + When I look at the "Spatial Decomposition" panel + And I select the "My Site" item in the "BIM_UL_containers_manager" list + And I click "Set Default" + And the object "IfcElementAssembly/Default_Name" is selected + And I look at the "Spatial Container" panel + And I click "GREASEPENCIL" + And I click "CHECKMARK" + Then the object "IfcWall/Cube" is in the collection "IfcSite/My Site" + And the object "IfcElementAssembly/Default_Name" is in the collection "IfcSite/My Site" + Scenario: Copy to container Given an empty IFC project And I add a cube From 6cfb6d74fee3dbcaf4462fed2f6039b9a4afbb20 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 23:25:35 +1100 Subject: [PATCH 603/657] Revert "fix #7559: DirectionSense works again." This reverts commit d79524b087fb7e4099584f4cbebe3e8e8eb46457. --- src/bonsai/bonsai/bim/module/model/slab.py | 88 +++++++++++----- src/bonsai/bonsai/tool/loader.py | 111 ++++----------------- 2 files changed, 81 insertions(+), 118 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index 509d24a60c..caf389165b 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -231,17 +231,16 @@ class DumbSlabPlaner: for inverse in tool.Ifc.get().get_inverse(layer_set): if not inverse.is_a("IfcMaterialLayerSetUsage") or inverse.LayerSetDirection != "AXIS3": continue - if tool.Ifc.get().schema == "IFC2X3": for rel in tool.Ifc.get().get_inverse(inverse): if not rel.is_a("IfcRelAssociatesMaterial"): continue for element in rel.RelatedObjects: - self.change_thickness(element, total_thickness, preserve_offset=True) + self.change_thickness(element, total_thickness) else: for rel in inverse.AssociatedTo: for element in rel.RelatedObjects: - self.change_thickness(element, total_thickness, preserve_offset=True) + self.change_thickness(element, total_thickness) def regenerate_from_occurence(self, element, material_set_usage): self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) @@ -251,12 +250,9 @@ class DumbSlabPlaner: return self.change_thickness(element, total_thickness) - def change_thickness( - self, element: ifcopenshell.entity_instance, thickness: float, preserve_offset: bool = False - ) -> None: + def change_thickness(self, element: ifcopenshell.entity_instance, thickness: float) -> None: if tool.Model.get_usage_type(element) != "LAYER3": return - layer_params = tool.Model.get_material_layer_parameters(element) ifc_file = tool.Ifc.get() body_context = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") @@ -282,40 +278,79 @@ class DumbSlabPlaner: cos_angle = direction_ratios.normalized().dot(Vector((0, 0, 1))) extrusion_angle = acos(min(max(cos_angle, -1), 1)) - # Only apply 1/cos factor when there's actual extrusion slope + # FIX: Only apply 1/cos factor when there's actual extrusion slope if extrusion_angle > 1e-6: perpendicular_depth = thickness * abs(1 / cos(extrusion_angle)) - perpendicular_offset = layer_offset * abs(1 / cos(extrusion_angle)) + perpendicular_offset = layer_offset * abs(1 / cos(extrusion_angle)) / self.unit_scale else: perpendicular_depth = thickness - perpendicular_offset = layer_offset + perpendicular_offset = layer_offset / self.unit_scale + # Check if direction sense needs to be applied + # This should only happen if explicitly requested, not automatically + if layer_params.get("apply_direction_sense", False): + # Store current direction before potential change + old_direction = direction_ratios.copy() + + # Apply direction sense logic + existing_x_angle = extrusion_angle + if (abs(existing_x_angle) < (pi / 2) and direction_ratios.z > 0) or ( + abs(existing_x_angle) > (pi / 2) and direction_ratios.z < 0 + ): + if layer_params["direction_sense"] == "NEGATIVE": + direction_ratios *= -1 + elif (abs(existing_x_angle) > (pi / 2) and direction_ratios.z > 0) or ( + abs(existing_x_angle) < (pi / 2) and direction_ratios.z < 0 + ): + offset_direction = direction_ratios.copy() * -1 + if layer_params["direction_sense"] == "POSITIVE": + direction_ratios *= -1 + + # If direction changed, update extrusion with rotation compensation + if (direction_ratios.normalized() - old_direction.normalized()).length > 1e-6: + update_extrusion_direction(element, tuple(direction_ratios), obj) + # After updating direction, get the updated extrusion + extrusion = tool.Model.get_extrusion(representation) + + # Update depth extrusion.Depth = perpendicular_depth # Update position ifc_position = extrusion.Position - if direction_ratios.length > 0: offset_vector = direction_ratios.normalized() * perpendicular_offset position = offset_vector material = ifcopenshell.util.element.get_material(element) if material and material.is_a("IfcMaterialLayerSetUsage"): - # Only set offset if not preserving it (preserves independent offsets per instance) - if not preserve_offset: - material.OffsetFromReferenceLine = position.z + material.OffsetFromReferenceLine = position.z if ifc_position: ifc_position.Location.Coordinates = position else: tool.Model.add_extrusion_position(extrusion, position) - bonsai.core.geometry.switch_representation( - tool.Ifc, - tool.Geometry, - obj=obj, - representation=representation, - ) + else: + props = tool.Model.get_model_props() + x_angle = 0 if tool.Cad.is_x(props.x_angle, 0, tolerance=0.001) else props.x_angle + new_rep = ifcopenshell.api.geometry.add_slab_representation( + tool.Ifc.get(), + context=body_context, + depth=thickness * self.unit_scale, + x_angle=x_angle, + ) + for inverse in tool.Ifc.get().get_inverse(representation): + ifcopenshell.util.element.replace_attribute(inverse, representation, new_rep) + bonsai.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj=obj, + representation=new_rep, + ) + bonsai.core.geometry.remove_representation( + tool.Ifc, tool.Geometry, obj=obj, representation=representation + ) + return else: props = tool.Model.get_model_props() x_angle = 0 if tool.Cad.is_x(props.x_angle, 0, tolerance=0.001) else props.x_angle @@ -328,12 +363,13 @@ class DumbSlabPlaner: ifcopenshell.api.geometry.assign_representation( tool.Ifc.get(), product=element, representation=representation ) - bonsai.core.geometry.switch_representation( - tool.Ifc, - tool.Geometry, - obj=obj, - representation=representation, - ) + + bonsai.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj=obj, + representation=representation, + ) def update_extrusion_direction( element: ifcopenshell.entity_instance, new_direction_ratios: tuple, obj: bpy.types.Object = None diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index 8fdce1da4c..ebc6722bee 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -1024,7 +1024,7 @@ class Loader(bonsai.core.tool.Loader): elif material.is_a("IfcMaterialLayerSetUsage"): usage = material layer_set = material.ForLayerSet - offset = usage.OffsetFromReferenceLine + offset = usage.OffsetFromReferenceLine * cls.unit_scale sense_factor = 1 if usage.DirectionSense == "POSITIVE" else -1 elif material.is_a("IfcMaterialLayerSet"): usage = None @@ -1037,17 +1037,11 @@ class Loader(bonsai.core.tool.Loader): if len(layer_set.MaterialLayers) == 1: return mesh - # Get mesh bounds - if len(mesh.vertices) > 0: - z_coords = [v.co.z for v in mesh.vertices] - mesh_z_min = min(z_coords) - mesh_z_max = max(z_coords) - bm = bmesh.new() bm.from_mesh(mesh) prev_co = None - advance_direction = None + advance_direction = None # Will store direction to advance planes if not usage: sense_factor = 1 @@ -1055,7 +1049,9 @@ class Loader(bonsai.core.tool.Loader): co = Vector((0.0, 0.0, offset)) advance_direction = no elif usage.LayerSetDirection == "AXIS2": - # Get local extrusion direction + co = Vector((0.0, offset, 0.0)) + + # Get LOCAL extrusion direction local_extrusion = Vector([0.0, 0.0, 1.0]) if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): for item in ifcopenshell.util.representation.resolve_representation(body).Items: @@ -1067,58 +1063,17 @@ class Loader(bonsai.core.tool.Loader): # Thickness direction: perpendicular to extrusion and length thickness_dir = local_extrusion.cross(Vector([1.0, 0.0, 0.0])).normalized() + + # Ensure it points in POSITIVE Y (through wall thickness, not backwards) if thickness_dir.y < 0: thickness_dir = -thickness_dir no = thickness_dir - - # Find start point by projecting vertices onto thickness direction - if len(mesh.vertices) > 0: - projections = [Vector(v.co).dot(no) for v in mesh.vertices] - min_proj = min(projections) - max_proj = max(projections) - - centroid = sum((Vector(v.co) for v in mesh.vertices), Vector()) / len(mesh.vertices) - centroid_proj = centroid.dot(no) - - if sense_factor == 1: - start_proj = min_proj - else: - start_proj = max_proj - - offset_dist = start_proj - centroid_proj - co = centroid + no * offset_dist - - actual_mesh_height = max_proj - min_proj - else: - co = Vector((0.0, 0.0, 0.0)) - advance_direction = thickness_dir elif usage.LayerSetDirection == "AXIS3": - # AXIS3 layers go through slab thickness (local Z) + co = Vector((0.0, 0.0, offset)) + no = cls.get_extrusion_vector(element).normalized() no = Vector([0.0, 0.0, 1.0]) - - # Find start point by projecting vertices onto Z direction - if len(mesh.vertices) > 0: - projections = [Vector(v.co).dot(no) for v in mesh.vertices] - min_proj = min(projections) - max_proj = max(projections) - - centroid = sum((Vector(v.co) for v in mesh.vertices), Vector()) / len(mesh.vertices) - centroid_proj = centroid.dot(no) - - if sense_factor == 1: - start_proj = min_proj - else: - start_proj = max_proj - - offset = start_proj - centroid_proj - co = centroid + no * offset - - actual_mesh_height = max_proj - min_proj - else: - co = Vector((0.0, 0.0, 0.0)) - advance_direction = no elif usage.LayerSetDirection == "AXIS1": co = Vector((0.0, 0.0, offset)) @@ -1126,27 +1081,10 @@ class Loader(bonsai.core.tool.Loader): no = Vector([1.0, 0.0, 0.0]) advance_direction = no - # Apply DirectionSense - if usage and usage.LayerSetDirection == "AXIS2": - if sense_factor == -1: - advance_direction = -advance_direction - test_normal = -no - else: - test_normal = no - elif usage and usage.LayerSetDirection == "AXIS1": - no = no * sense_factor - advance_direction = advance_direction * sense_factor - test_normal = no - elif usage and usage.LayerSetDirection == "AXIS3": - if sense_factor == -1: - advance_direction = -advance_direction - test_normal = -no - else: - test_normal = no - else: - test_normal = no + no *= sense_factor + advance_direction *= sense_factor - # Cache material styles + # Cache this body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") styles = {} has_layer_styles = False @@ -1154,23 +1092,12 @@ class Loader(bonsai.core.tool.Loader): if style := tool.Ifc.get_entity(material): styles[style] = i - layer_list = list(enumerate(layer_set.MaterialLayers)) - - # Calculate scale factor - total_layer_thickness = sum(layer.LayerThickness for _, layer in layer_list) - - if "actual_mesh_height" not in locals(): - actual_mesh_height = mesh_z_max - mesh_z_min if len(mesh.vertices) > 0 else total_layer_thickness - - thickness_scale = actual_mesh_height / total_layer_thickness if total_layer_thickness > 0 else 1.0 - last_i = len(layer_set.MaterialLayers) - 1 - - for idx, (original_i, layer) in enumerate(layer_list): - if idx != last_i: + for i, layer in enumerate(layer_set.MaterialLayers): + if i != last_i: prev_co = co.copy() - advance_vector = advance_direction * layer.LayerThickness * thickness_scale - co += advance_vector + # Use advance_direction (not no) to move planes! + co += advance_direction * layer.LayerThickness * cls.unit_scale bisect_geom = bmesh.ops.bisect_plane( bm, geom=bm.verts[:] + bm.edges[:] + bm.faces[:], dist=0.0001, plane_co=co, plane_no=no @@ -1183,18 +1110,18 @@ class Loader(bonsai.core.tool.Loader): material_index = len(mesh.materials) mesh.materials.append(tool.Ifc.get_object(style)) - if idx == last_i: + if i == last_i: for face in bisect_geom["geom"]: if isinstance(face, bmesh.types.BMFace): center = face.calc_center_median() - if (center - co).dot(test_normal) >= 0: + if (center - co).dot(no) >= 0: face.material_index = material_index has_layer_styles = True else: for face in bisect_geom["geom"]: if isinstance(face, bmesh.types.BMFace): center = face.calc_center_median() - if (center - co).dot(test_normal) < 0 and (center - prev_co).dot(test_normal) >= 0: + if (center - co).dot(no) < 0 and (center - prev_co).dot(no) >= 0: face.material_index = material_index has_layer_styles = True From 34303c2cfe7db3dd7e8c01b57fe611ef4777a0c8 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 23:28:14 +1100 Subject: [PATCH 604/657] Revert "fix to https://github.com/IfcOpenShell/IfcOpenShell/commit/7f87f1fb89fb001320223a4d85e6267f342bf13c: have rotation around the object's origin, not the world origin" This reverts commit 249e68f16395b5b273466930dd21ffefc0ac512a. --- src/bonsai/bonsai/bim/module/model/wall.py | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index 5276e64692..01a2d84b7f 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -578,21 +578,9 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): dot_product = expected_new_world_direction.dot(current_world_direction) angle = acos(min(max(dot_product, -1), 1)) - # Rotate around object's own origin - # Decompose the matrix to get translation, rotation, scale - translation, rotation, scale = obj.matrix_world.decompose() - - # Create rotation matrix and convert to quaternion + # Create and apply rotation matrix rotation_matrix = Matrix.Rotation(angle, 4, rotation_axis) - rotation_quat = rotation_matrix.to_quaternion() - - # Apply rotation to existing rotation (quaternion multiplication) - new_rotation = rotation_quat @ rotation - - # Reconstruct matrix_world with same translation, new rotation, same scale - obj.matrix_world = ( - Matrix.Translation(translation) @ new_rotation.to_matrix().to_4x4() @ Matrix.Scale(1, 4) - ) + obj.matrix_world = rotation_matrix @ obj.matrix_world bpy.context.view_layer.update() bonsai.core.geometry.switch_representation( From 5ce6d927f31c718bb1817e63588a08b3a243f993 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jan 2026 23:39:45 +1100 Subject: [PATCH 605/657] Revert "fix #7537 - Layer thickness correct when slab is rotated and few other features... " This reverts commit 7f87f1fb89fb001320223a4d85e6267f342bf13c. --- src/bonsai/bonsai/bim/module/model/slab.py | 304 ++++-------------- src/bonsai/bonsai/bim/module/model/wall.py | 155 +++------ src/bonsai/bonsai/tool/collector.py | 2 + src/bonsai/bonsai/tool/loader.py | 70 +--- .../api/geometry/add_slab_representation.py | 35 +- .../api/geometry/add_wall_representation.py | 3 +- 6 files changed, 126 insertions(+), 443 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index caf389165b..7630ef258c 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -40,11 +40,9 @@ import bonsai.core.root import bonsai.core.type import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from bonsai.bim.module.model.decorator import ( - PolylineDecorator, - ProductDecorator, - ProfileDecorator, -) +from math import cos, pi +from mathutils import Vector, Matrix +from bonsai.bim.module.model.decorator import ProfileDecorator, PolylineDecorator, ProductDecorator from bonsai.bim.module.model.polyline import PolylineOperator @@ -270,65 +268,50 @@ class DumbSlabPlaner: if representation: extrusion = tool.Model.get_extrusion(representation) if extrusion: + # TODO Right now we don't have a reliable way to calculate the existing x_angle only based solely on the extrusion direction. + # For instances, a 30 degrees angled extrusion with positive direction has the same extrusion direction as a + # -150 degrees angled extrusion with negative direction. The difference lies in the object's rotation. + # This means that things can get messy if the user changes the object x angle somehow. We have to figure out an alternative approach. + existing_x_angle = obj.rotation_euler.x + existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle + existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle + existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 2 * pi, tolerance=0.001) else existing_x_angle direction_ratios = Vector(extrusion.ExtrudedDirection.DirectionRatios) + offset_direction = direction_ratios.copy() + perpendicular_depth = thickness * abs(1 / cos(existing_x_angle)) + perpendicular_offset = layer_offset * abs(1 / cos(existing_x_angle)) / self.unit_scale - # Calculate the actual extrusion angle from vertical - extrusion_angle = 0 - if direction_ratios.length > 0: - cos_angle = direction_ratios.normalized().dot(Vector((0, 0, 1))) - extrusion_angle = acos(min(max(cos_angle, -1), 1)) + # Check angle and z direction to determine whether the extrusion direction is positive or negative + if (abs(existing_x_angle) < (pi / 2) and direction_ratios.z > 0) or ( + abs(existing_x_angle) > (pi / 2) and direction_ratios.z < 0 + ): + # The extrusion direction is positive. If the layer_parameter is set to negative, + # then the we change the extrusion direction. + if layer_params["direction_sense"] == "NEGATIVE": + direction_ratios *= -1 + elif (abs(existing_x_angle) > (pi / 2) and direction_ratios.z > 0) or ( + abs(existing_x_angle) < (pi / 2) and direction_ratios.z < 0 + ): + # The extrusion direction is negative. If the layer_parameter is set to positive, + # then the we change the extrusion direction. And the offset direction should remain positive + # for either direction sense, so we change it. + offset_direction *= -1 + if layer_params["direction_sense"] == "POSITIVE": + direction_ratios *= -1 - # FIX: Only apply 1/cos factor when there's actual extrusion slope - if extrusion_angle > 1e-6: - perpendicular_depth = thickness * abs(1 / cos(extrusion_angle)) - perpendicular_offset = layer_offset * abs(1 / cos(extrusion_angle)) / self.unit_scale - else: - perpendicular_depth = thickness - perpendicular_offset = layer_offset / self.unit_scale - - # Check if direction sense needs to be applied - # This should only happen if explicitly requested, not automatically - if layer_params.get("apply_direction_sense", False): - # Store current direction before potential change - old_direction = direction_ratios.copy() - - # Apply direction sense logic - existing_x_angle = extrusion_angle - if (abs(existing_x_angle) < (pi / 2) and direction_ratios.z > 0) or ( - abs(existing_x_angle) > (pi / 2) and direction_ratios.z < 0 - ): - if layer_params["direction_sense"] == "NEGATIVE": - direction_ratios *= -1 - elif (abs(existing_x_angle) > (pi / 2) and direction_ratios.z > 0) or ( - abs(existing_x_angle) < (pi / 2) and direction_ratios.z < 0 - ): - offset_direction = direction_ratios.copy() * -1 - if layer_params["direction_sense"] == "POSITIVE": - direction_ratios *= -1 - - # If direction changed, update extrusion with rotation compensation - if (direction_ratios.normalized() - old_direction.normalized()).length > 1e-6: - update_extrusion_direction(element, tuple(direction_ratios), obj) - # After updating direction, get the updated extrusion - extrusion = tool.Model.get_extrusion(representation) - - # Update depth + extrusion.ExtrudedDirection.DirectionRatios = tuple(direction_ratios) extrusion.Depth = perpendicular_depth - # Update position ifc_position = extrusion.Position - if direction_ratios.length > 0: - offset_vector = direction_ratios.normalized() * perpendicular_offset - position = offset_vector - - material = ifcopenshell.util.element.get_material(element) - if material and material.is_a("IfcMaterialLayerSetUsage"): + position = offset_direction * perpendicular_offset + material = ifcopenshell.util.element.get_material(element) + if material: + if material.is_a("IfcMaterialLayerSetUsage"): material.OffsetFromReferenceLine = position.z - - if ifc_position: - ifc_position.Location.Coordinates = position - else: - tool.Model.add_extrusion_position(extrusion, position) + if ifc_position: + ifc_position.Location.Coordinates = position + else: + tool.Model.add_extrusion_position(extrusion, position) else: props = tool.Model.get_model_props() @@ -371,112 +354,6 @@ class DumbSlabPlaner: representation=representation, ) - def update_extrusion_direction( - element: ifcopenshell.entity_instance, new_direction_ratios: tuple, obj: bpy.types.Object = None - ) -> None: - """ - Update extrusion direction while preserving overall object orientation. - - Args: - element: The IFC element - new_direction_ratios: New extrusion direction ratios (x,y,z) - obj: Optional Blender object (will be fetched if not provided) - """ - if not obj: - obj = tool.Ifc.get_object(element) - if not obj: - return - - representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") - if not representation: - return - - extrusion = tool.Model.get_extrusion(representation) - if not extrusion: - return - - # Get current extrusion direction - old_direction = Vector(extrusion.ExtrudedDirection.DirectionRatios) - if old_direction.length == 0: - old_direction = Vector((0, 0, 1)) # Default - - new_direction = Vector(new_direction_ratios) - if new_direction.length == 0: - new_direction = Vector((0, 0, 1)) # Default - - # Normalize both directions - old_direction_normalized = old_direction.normalized() - new_direction_normalized = new_direction.normalized() - - # Store current object matrix - old_matrix = obj.matrix_world.copy() - - # Calculate the rotation needed to keep same orientation - # When extrusion direction changes from A to B relative to local coordinates, - # we need to rotate the object by the inverse of that change - - # Calculate rotation from old to new direction - rotation_axis = old_direction_normalized.cross(new_direction_normalized) - if rotation_axis.length > 1e-6: - rotation_axis.normalized() - dot_product = old_direction_normalized.dot(new_direction_normalized) - angle = acos(min(max(dot_product, -1), 1)) - - # Apply INVERSE rotation to object to compensate - rotation_matrix = Matrix.Rotation(-angle, 4, rotation_axis) - - # Update object rotation - obj.matrix_world = old_matrix @ rotation_matrix - bpy.context.view_layer.update() - - # Update extrusion direction (keeping magnitude) - if old_direction.length > 0: - # Preserve the magnitude of the original direction vector - magnitude = old_direction.length - new_direction = new_direction_normalized * magnitude - - extrusion.ExtrudedDirection.DirectionRatios = tuple(new_direction) - - # Update depth based on new extrusion angle - extrusion_angle = 0 - if new_direction.length > 0: - cos_angle = new_direction_normalized.dot(Vector((0, 0, 1))) - extrusion_angle = acos(min(max(cos_angle, -1), 1)) - - # Get current depth (perpendicular depth) - current_perpendicular_depth = extrusion.Depth - - # If we have material layer info, calculate actual thickness - material = ifcopenshell.util.element.get_material(element) - actual_thickness = current_perpendicular_depth - if material and material.is_a("IfcMaterialLayerSetUsage"): - layer_set = material.ForLayerSet - actual_thickness = sum([l.LayerThickness for l in layer_set.MaterialLayers]) - unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - actual_thickness *= unit_scale - - # Convert to perpendicular depth if needed - if extrusion_angle > 1e-6: - new_perpendicular_depth = actual_thickness * abs(1 / cos(extrusion_angle)) - else: - new_perpendicular_depth = actual_thickness - - extrusion.Depth = new_perpendicular_depth - - # Update position offset if needed - if extrusion.Position: - # Recalculate offset based on new direction - material = ifcopenshell.util.element.get_material(element) - if material and material.is_a("IfcMaterialLayerSetUsage"): - offset = material.OffsetFromReferenceLine - if extrusion_angle > 1e-6: - perpendicular_offset = offset * abs(1 / cos(extrusion_angle)) - else: - perpendicular_offset = offset - - offset_vector = new_direction_normalized * perpendicular_offset - extrusion.Position.Location.Coordinates = tuple(offset_vector) - class EnableEditingSketchExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_sketch_extrusion_profile" @@ -752,8 +629,6 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): existing_x_angle = tool.Model.get_existing_x_angle(extrusion) layer_params = tool.Model.get_material_layer_parameters(element) - usage_type = tool.Model.get_usage_type(element) - # TODO: review #7537 properly, this is a quick fix but something doesn't seem right. original_rotation_x = 0 if extrusion.Position: @@ -768,49 +643,22 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): tranlation_matrix = Matrix.Translation(rot_offset) position = position @ tranlation_matrix - # For AXIS3 with dual rotation: Reset rotation to zero so profile is horizontal - if usage_type == "LAYER3": - # Store original rotation for later restoration - original_rotation_x = obj.rotation_euler.x - obj["pre_edit_rotation_x"] = original_rotation_x - - # Reset rotation to zero - profile will be horizontal - current_z_rot = obj.rotation_euler.z - obj.rotation_euler.x = 0.0 - obj.rotation_euler.z = current_z_rot - else: - # Original behavior: Restore Object rotation to zero - local_rot_mat = obj.rotation_euler.to_matrix() - rot_mat = Matrix.Rotation(-existing_x_angle, 4, "X") - new_rot_mat = local_rot_mat.to_4x4() @ rot_mat - new_rot_euler = new_rot_mat.to_euler() - obj.rotation_euler = new_rot_euler + # Restore Object rotation to zero + local_rot_mat = obj.rotation_euler.to_matrix() + rot_mat = Matrix.Rotation(-existing_x_angle, 4, "X") + new_rot_mat = local_rot_mat.to_4x4() @ rot_mat + new_rot_euler = new_rot_mat.to_euler() + obj.rotation_euler = new_rot_euler else: position = Matrix() - # Import profile with correct x_angle - if usage_type == "LAYER3": - # For LAYER3: Use x_angle=0 and scale by cos(rotation) to get horizontal projection - obj_x_rotation = original_rotation_x # Use stored original rotation - scale_factor = abs(cos(obj_x_rotation)) if abs(obj_x_rotation) > 1e-6 else 1.0 - - # Import with x_angle=0 - tool.Model.import_profile(extrusion.SweptArea, obj=obj, position=position, x_angle=0) - - # Scale the Y coordinates by cos(rotation) to get horizontal projection - bpy.ops.object.mode_set(mode="OBJECT") - for vert in obj.data.vertices: - vert.co.y *= scale_factor - else: - # For other types: Use existing_x_angle - tool.Model.import_profile(extrusion.SweptArea, obj=obj, position=position, x_angle=existing_x_angle) + tool.Model.import_profile(extrusion.SweptArea, obj=obj, position=position, x_angle=existing_x_angle) 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: tool.Blender.set_viewport_tool("bim.cad_tool") - return {"FINISHED"} @@ -832,7 +680,6 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): extrusion = tool.Model.get_extrusion(body) existing_x_angle = tool.Model.get_existing_x_angle(extrusion) layer_params = tool.Model.get_material_layer_parameters(element) - usage_type = tool.Model.get_usage_type(element) if extrusion.Position: position = Matrix(ifcopenshell.util.placement.get_axis2placement(extrusion.Position).tolist()) @@ -846,38 +693,17 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): tranlation_matrix = Matrix.Translation(rot_offset) position = position @ tranlation_matrix - # Restore rotation - if usage_type == "LAYER3": - # Restore original rotation from before editing - if "pre_edit_rotation_x" in obj: - current_z_rot = obj.rotation_euler.z - obj.rotation_euler.x = obj["pre_edit_rotation_x"] - obj.rotation_euler.z = current_z_rot - del obj["pre_edit_rotation_x"] - else: - # Original behavior - local_rot_mat = obj.rotation_euler.to_matrix() - rot_mat = Matrix.Rotation(existing_x_angle, 4, "X") - new_rot_mat = local_rot_mat.to_4x4() @ rot_mat - new_rot_euler = new_rot_mat.to_euler() - obj.rotation_euler = new_rot_euler + # Restore Object rotation to x_angle + local_rot_mat = obj.rotation_euler.to_matrix() + rot_mat = Matrix.Rotation(existing_x_angle, 4, "X") + new_rot_mat = local_rot_mat.to_4x4() @ rot_mat + new_rot_euler = new_rot_mat.to_euler() + obj.rotation_euler = new_rot_euler else: position = Matrix() - # Export profile with correct x_angle - if usage_type == "LAYER3": - # Scale Y coordinates back up before exporting - obj_x_rotation = obj.rotation_euler.x - scale_factor = abs(cos(obj_x_rotation)) if abs(obj_x_rotation) > 1e-6 else 1.0 - - # Un-scale the profile before exporting - for vert in obj.data.vertices: - vert.co.y /= scale_factor # Inverse of import scaling - - profile = tool.Model.export_profile(obj, position=position, x_angle=0) - else: - profile = tool.Model.export_profile(obj, position=position, x_angle=existing_x_angle) + profile = tool.Model.export_profile(obj, position=position, x_angle=existing_x_angle) if not profile: @@ -929,28 +755,6 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): tool.Ifc.get(), product=element, representation=new_footprint ) - footprint_context = ifcopenshell.util.representation.get_context( - tool.Ifc.get(), "Plan", "FootPrint", "SKETCH_VIEW" - ) - if not footprint_context: - return - - curves = [profile.OuterCurve] - if profile.is_a("IfcArbitraryProfileDefWithVoids"): - curves.extend(profile.InnerCurves) - new_footprint = ifcopenshell.api.geometry.add_footprint_representation( - tool.Ifc.get(), context=footprint_context, curves=curves - ) - old_footprint = ifcopenshell.util.representation.get_representation(element, "Plan", "FootPrint", "SKETCH_VIEW") - if old_footprint: - for inverse in tool.Ifc.get().get_inverse(old_footprint): - ifcopenshell.util.element.replace_attribute(inverse, old_footprint, new_footprint) - bonsai.core.geometry.remove_representation(tool.Ifc, tool.Geometry, obj=obj, representation=old_footprint) - else: - ifcopenshell.api.geometry.assign_representation( - tool.Ifc.get(), product=element, representation=new_footprint - ) - class ResetVertex(bpy.types.Operator): bl_idname = "bim.reset_vertex" diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index 01a2d84b7f..d98a81f62d 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -48,6 +48,8 @@ import bonsai.core.root import bonsai.core.type import bonsai.tool as tool from bonsai.bim.ifc import IfcStore +from math import pi, sin, cos, degrees, atan2 +from mathutils import Vector, Matrix from bonsai.bim.module.model.decorator import PolylineDecorator, ProductDecorator from bonsai.bim.module.model.opening import FilledOpeningGenerator from bonsai.bim.module.model.polyline import PolylineOperator @@ -403,42 +405,24 @@ class ChangeExtrusionDepth(bpy.types.Operator, tool.Ifc.Operator): representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if not representation: continue - extrusion = tool.Model.get_extrusion(representation) if not extrusion: continue - - # Get extrusion direction x, y, z = extrusion.ExtrudedDirection.DirectionRatios - - # Calculate angle from vertical x_angle = Vector((0, 1)).angle_signed(Vector((y, z))) - - # For sloped walls, compensate so VERTICAL height = target depth - cos_angle = cos(x_angle) - compensation_factor = abs(1 / cos_angle) if abs(cos_angle) > 1e-6 else 1.0 - new_depth_ifc = (self.depth / si_conversion) * compensation_factor - - extrusion.Depth = new_depth_ifc - - # IMPORTANT: Refresh the geometry to reflect the IFC changes - bonsai.core.geometry.switch_representation( - tool.Ifc, - tool.Geometry, - obj=obj, - representation=representation, - ) - + extrusion.Depth = self.depth / si_conversion * (1 / cos(x_angle)) if tool.Model.get_usage_type(element) == "LAYER2": for rel in element.ConnectedFrom: if rel.is_a() == "IfcRelConnectsElements": - related_element = rel.RelatedElement - if related_element.is_a() == "IfcWall": - layer2_objs.append(tool.Ifc.get_object(related_element)) + ifcopenshell.api.geometry.disconnect_element( + ifc_file, + relating_element=rel.RelatingElement, + related_element=element, + ) + layer2_objs.append(obj) if layer2_objs: tool.Model.recalculate_walls(layer2_objs) - return {"FINISHED"} @@ -458,131 +442,81 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): layer2_objs: list[bpy.types.Object] = [] - builder = ifcopenshell.util.shape_builder.ShapeBuilder(tool.Ifc.get()) + x_angle = 0 if tool.Cad.is_x(self.x_angle, 0, tolerance=0.001) else self.x_angle + x_angle = 0 if tool.Cad.is_x(self.x_angle, pi, tolerance=0.001) else self.x_angle unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - x_angle = self.x_angle + selected_objs = tool.Model.get_selected_mesh_ifc_objects() + builder = ifcopenshell.util.shape_builder.ShapeBuilder(tool.Ifc.get()) - for obj in context.selected_objects: + for obj in selected_objs: element = tool.Ifc.get_entity(obj) - if not element: - continue - + assert element representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if not representation: continue extrusion = tool.Model.get_extrusion(representation) if not extrusion: continue - - # Get current object rotation matrix - obj_rotation = obj.matrix_world.to_3x3() - - # Get current extrusion direction in LOCAL coordinates - current_local_direction = Vector(extrusion.ExtrudedDirection.DirectionRatios) - if current_local_direction.length == 0: - current_local_direction = Vector((0, 0, 1)) - current_local_direction_normalized = current_local_direction.normalized() - - # Calculate what the current extrusion direction is in WORLD coordinates - current_world_direction = obj_rotation @ current_local_direction_normalized - existing_x_angle = tool.Model.get_existing_x_angle(extrusion) existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle - - # Calculate the NEW local extrusion direction based on x_angle - new_local_direction = Vector((0.0, sin(x_angle), cos(x_angle))) - - # Check if extrusion direction is actually changing - current_local_norm = current_local_direction_normalized - new_local_norm = new_local_direction.normalized() - - # Compare the LOCAL directions - local_direction_changed = (new_local_norm - current_local_norm).length > 1e-6 - if tool.Model.get_usage_type(element) == "LAYER2": + x, y, z = extrusion.ExtrudedDirection.DirectionRatios depth = extrusion.Depth / abs(1 / cos(existing_x_angle)) perpendicular_depth = depth * abs(1 / cos(x_angle)) - - # Update extrusion direction - if local_direction_changed: - extrusion.ExtrudedDirection.DirectionRatios = tuple(new_local_direction) - - # Always update depth - extrusion.Depth = perpendicular_depth + extrusion.ExtrudedDirection.DirectionRatios = (0.0, sin(x_angle), cos(x_angle)) layer2_objs.append(obj) - + extrusion.Depth = perpendicular_depth else: if tool.Model.get_usage_type(element) == "LAYER3": - # For slabs, handle polyline scaling - existing_obj_x_angle = obj.rotation_euler.x - existing_obj_x_angle = ( - 0 if tool.Cad.is_x(existing_obj_x_angle, 0, tolerance=0.001) else existing_obj_x_angle - ) - existing_obj_x_angle = ( - 0 if tool.Cad.is_x(existing_obj_x_angle, pi, tolerance=0.001) else existing_obj_x_angle - ) + existing_x_angle = obj.rotation_euler.x + existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle + existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle - # Scale the polyline coordinates coord_list = builder.get_polyline_coords(extrusion.SweptArea.OuterCurve) coord_list = [ (p[0], p[1] * abs(cos(existing_x_angle))) for p in coord_list - ] # Reset the transformation + ] # Reset the transformation and returns to the original points with 0 degrees coord_list = [ (p[0], p[1] * abs(1 / cos(x_angle))) for p in coord_list ] # Apply the transformation for the new x_angle builder.set_polyline_coords(extrusion.SweptArea.OuterCurve, coord_list) - # Calculate new extrusion direction with direction sense - base_local_direction = Vector((0.0, sin(x_angle), cos(x_angle))) + # The extrusion direction calculated previously default to the positive direction + # Here we set the extrusion direction to negative if that's the case + direction_ratios = Vector((0.0, sin(x_angle), cos(x_angle))) + # direction_ratios = Vector(extrusion.ExtrudedDirection.DirectionRatios) layer_params = tool.Model.get_material_layer_parameters(element) perpendicular_depth = layer_params["thickness"] * abs(1 / cos(x_angle)) / unit_scale perpendicular_offset = layer_params["offset"] * abs(1 / cos(x_angle)) / unit_scale - offset_direction = base_local_direction.copy() + offset_direction = direction_ratios.copy() - # Apply direction sense - final_local_direction = base_local_direction.copy() - if (abs(x_angle) < (pi / 2) and base_local_direction.z > 0) or ( - abs(x_angle) > (pi / 2) and base_local_direction.z < 0 + # Check angle and z direction to determine whether the extrusion direction is positive or negative + if (abs(x_angle) < (pi / 2) and direction_ratios.z > 0) or ( + abs(x_angle) > (pi / 2) and direction_ratios.z < 0 ): + # The extrusion direction is positive. If the layer_parameter is set to negative, + # then the we change the extrusion direction. if layer_params["direction_sense"] == "NEGATIVE": - final_local_direction *= -1 - elif (x_angle > (pi / 2) and base_local_direction.z > 0) or ( - x_angle < (pi / 2) and base_local_direction.z < 0 + direction_ratios *= -1 + elif ((x_angle) > (pi / 2) and direction_ratios.z > 0) or ( + (x_angle) < (pi / 2) and direction_ratios.z < 0 ): + # The extrusion direction is negative. If the layer_parameter is set to positive, + # then the we change the extrusion direction. + # then the we change the extrusion direction. And the offset direction should remain positive + # for either direction sense, so we change it. offset_direction *= -1 if layer_params["direction_sense"] == "POSITIVE": - final_local_direction *= -1 + direction_ratios *= -1 - # Check if extrusion direction actually changed - final_local_norm = final_local_direction.normalized() - local_direction_changed = (final_local_norm - current_local_norm).length > 1e-6 - - # Update extrusion properties - extrusion.ExtrudedDirection.DirectionRatios = tuple(final_local_direction) + extrusion.ExtrudedDirection.DirectionRatios = tuple(direction_ratios) extrusion.Depth = perpendicular_depth if extrusion.Position or perpendicular_offset != 0: position = offset_direction * perpendicular_offset tool.Model.add_extrusion_position(extrusion, position) - # Adjust object rotation if extrusion direction changed - if local_direction_changed: - # Calculate what the NEW world direction would be with current object rotation - expected_new_world_direction = obj_rotation @ final_local_norm - - # The rotation needed is from expected_new_world_direction to current_world_direction - rotation_axis = expected_new_world_direction.cross(current_world_direction) - if rotation_axis.length > 1e-6: - rotation_axis.normalize() - dot_product = expected_new_world_direction.dot(current_world_direction) - angle = acos(min(max(dot_product, -1), 1)) - - # Create and apply rotation matrix - rotation_matrix = Matrix.Rotation(angle, 4, rotation_axis) - obj.matrix_world = rotation_matrix @ obj.matrix_world - bpy.context.view_layer.update() - bonsai.core.geometry.switch_representation( tool.Ifc, tool.Geometry, @@ -590,6 +524,12 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator): representation=representation, ) + # Object rotation + current_z_rot = obj.rotation_euler.z + rot_mat = mathutils.Matrix.Rotation(x_angle, 4, "X") + obj.rotation_euler = rot_mat.to_euler() + obj.rotation_euler.z = current_z_rot + if layer2_objs: tool.Model.recalculate_walls(layer2_objs) return {"FINISHED"} @@ -1084,7 +1024,6 @@ class DumbWallGenerator: obj=obj, representation=representation, ) - pset = ifcopenshell.api.pset.add_pset(self.file, product=element, name="EPset_Parametric") ifcopenshell.api.pset.edit_pset(self.file, pset=pset, properties={"Engine": "Bonsai.DumbLayer2"}) material = ifcopenshell.util.element.get_material(element) diff --git a/src/bonsai/bonsai/tool/collector.py b/src/bonsai/bonsai/tool/collector.py index 01c13d6cec..74a55d7dc1 100644 --- a/src/bonsai/bonsai/tool/collector.py +++ b/src/bonsai/bonsai/tool/collector.py @@ -46,6 +46,8 @@ class Collector(bonsai.core.tool.Collector): # Note that tool.Geometry.is_locked is only checked within the if # statements for efficiency as it is a slow check. tool.Geometry.lock_scale(obj) + if element.is_a("IfcSlab"): + tool.Geometry.lock_rotation(obj, x=True) if element.is_a("IfcGridAxis"): if tool.Geometry.is_locked(element): diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index ebc6722bee..8b14de9362 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -1033,57 +1033,28 @@ class Loader(bonsai.core.tool.Loader): sense_factor = 1 else: return mesh - if len(layer_set.MaterialLayers) == 1: return mesh - bm = bmesh.new() bm.from_mesh(mesh) - prev_co = None - advance_direction = None # Will store direction to advance planes - if not usage: - sense_factor = 1 + sense_factor = 1 # Assume the extrusion vector points in the direction sense no = cls.get_extrusion_vector(element).normalized() co = Vector((0.0, 0.0, offset)) - advance_direction = no elif usage.LayerSetDirection == "AXIS2": co = Vector((0.0, offset, 0.0)) - - # Get LOCAL extrusion direction - local_extrusion = Vector([0.0, 0.0, 1.0]) - if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): - for item in ifcopenshell.util.representation.resolve_representation(body).Items: - while item.is_a("IfcBooleanResult"): - item = item.FirstOperand - if item.is_a("IfcExtrudedAreaSolid"): - local_extrusion = Vector(item.ExtrudedDirection.DirectionRatios).normalized() - break - - # Thickness direction: perpendicular to extrusion and length - thickness_dir = local_extrusion.cross(Vector([1.0, 0.0, 0.0])).normalized() - - # Ensure it points in POSITIVE Y (through wall thickness, not backwards) - if thickness_dir.y < 0: - thickness_dir = -thickness_dir - - no = thickness_dir - advance_direction = thickness_dir + no = cls.get_extrusion_vector(element).normalized() + no = no.cross(Vector([1.0, 0.0, 0.0])) elif usage.LayerSetDirection == "AXIS3": co = Vector((0.0, 0.0, offset)) no = cls.get_extrusion_vector(element).normalized() no = Vector([0.0, 0.0, 1.0]) - advance_direction = no elif usage.LayerSetDirection == "AXIS1": co = Vector((0.0, 0.0, offset)) no = cls.get_extrusion_vector(element).normalized() no = Vector([1.0, 0.0, 0.0]) - advance_direction = no - no *= sense_factor - advance_direction *= sense_factor - # Cache this body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") styles = {} @@ -1091,25 +1062,20 @@ class Loader(bonsai.core.tool.Loader): for i, material in enumerate(mesh.materials): if style := tool.Ifc.get_entity(material): styles[style] = i - last_i = len(layer_set.MaterialLayers) - 1 for i, layer in enumerate(layer_set.MaterialLayers): if i != last_i: prev_co = co.copy() - # Use advance_direction (not no) to move planes! - co += advance_direction * layer.LayerThickness * cls.unit_scale - + co += no * layer.LayerThickness * cls.unit_scale bisect_geom = bmesh.ops.bisect_plane( bm, geom=bm.verts[:] + bm.edges[:] + bm.faces[:], dist=0.0001, plane_co=co, plane_no=no ) bmesh.ops.duplicate(bm, geom=bisect_geom["geom_cut"]) - if not (style := ifcopenshell.util.representation.get_material_style(layer.Material, body)): continue if (material_index := styles.get(style, None)) is None: material_index = len(mesh.materials) mesh.materials.append(tool.Ifc.get_object(style)) - if i == last_i: for face in bisect_geom["geom"]: if isinstance(face, bmesh.types.BMFace): @@ -1134,35 +1100,13 @@ class Loader(bonsai.core.tool.Loader): return mesh @classmethod - def get_extrusion_vector(cls, element): - """Get the extrusion direction in WORLD coordinates (accounting for object rotation)""" - if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): + def get_extrusion_vector(cls, wall): + if body := ifcopenshell.util.representation.get_representation(wall, "Model", "Body", "MODEL_VIEW"): for item in ifcopenshell.util.representation.resolve_representation(body).Items: while item.is_a("IfcBooleanResult"): item = item.FirstOperand if item.is_a("IfcExtrudedAreaSolid"): - local_direction = Vector(item.ExtrudedDirection.DirectionRatios) - - # Transform to world coordinates using object rotation - obj = tool.Ifc.get_object(element) - if obj: - # Apply object rotation to get actual world direction - world_direction = obj.matrix_world.to_3x3() @ local_direction - return world_direction - - return local_direction - return Vector([0.0, 0.0, 1.0]) - - @classmethod - def get_local_extrusion_vector(cls, element): - """Get the extrusion direction in LOCAL coordinates (from IFC, no object rotation)""" - if body := ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW"): - for item in ifcopenshell.util.representation.resolve_representation(body).Items: - while item.is_a("IfcBooleanResult"): - item = item.FirstOperand - if item.is_a("IfcExtrudedAreaSolid"): - local_direction = Vector(item.ExtrudedDirection.DirectionRatios) - return local_direction + return Vector(item.ExtrudedDirection.DirectionRatios) return Vector([0.0, 0.0, 1.0]) @classmethod diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py index b5029dc934..6e600eca9a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_slab_representation.py @@ -100,15 +100,10 @@ class Usecase: size = self.convert_si_to_unit(1) points = ((0.0, 0.0), (size, 0.0), (size, size), (0.0, size), (0.0, 0.0)) if self.polyline: - # Only scale polyline if we have actual slope - if self.x_angle and abs(self.x_angle) > 1e-6: - points = [ - (self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1] * abs(1 / cos(self.x_angle)))) - for p in self.polyline - ] - else: - points = [(self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1])) for p in self.polyline] - + points = [ + (self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1] * abs(1 / cos(self.x_angle)))) + for p in self.polyline + ] if self.file.schema == "IFC2X3": curve = self.file.createIfcPolyline([self.file.createIfcCartesianPoint(p) for p in points]) else: @@ -119,23 +114,21 @@ class Usecase: else: direction_ratios = (0.0, 0.0, 1.0) + offset_direction = direction_ratios # offset direction doesn't change if direction_sense is negative extrusion_direction = self.file.createIfcDirection(direction_ratios) + if self.direction_sense == "NEGATIVE": + direction_ratios = tuple(-n for n in direction_ratios) + extrusion_direction = self.file.createIfcDirection(direction_ratios) - # Calculate depth based on extrusion angle - extrusion_angle = abs(self.x_angle) if self.x_angle else 0 - if extrusion_angle > 1e-6: - perpendicular_depth = self.convert_si_to_unit(self.depth) * abs(1 / cos(extrusion_angle)) - perpendicular_offset = self.convert_si_to_unit(self.offset) * abs(1 / cos(extrusion_angle)) - else: - perpendicular_depth = self.convert_si_to_unit(self.depth) - perpendicular_offset = self.convert_si_to_unit(self.offset) - + perpendicular_offset = self.convert_si_to_unit(self.offset) * abs(1 / cos(self.x_angle)) + perpendicular_depth = self.convert_si_to_unit(self.depth) * abs(1 / cos(self.x_angle)) position = None + # default position for IFC2X3 where .Position is not optional if self.file.schema == "IFC2X3" or self.offset != 0: position_vector = ( - direction_ratios[0] * perpendicular_offset, - direction_ratios[1] * perpendicular_offset, - direction_ratios[2] * perpendicular_offset, + offset_direction[0] * perpendicular_offset, + offset_direction[1] * perpendicular_offset, + offset_direction[2] * perpendicular_offset, ) position = self.file.createIfcAxis2Placement3D( self.file.createIfcCartesianPoint(position_vector), diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py index 69f9a82fa7..ff62bae474 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_wall_representation.py @@ -85,6 +85,7 @@ class Usecase: def create_item(self) -> ifcopenshell.entity_instance: length = self.convert_si_to_unit(self.settings["length"]) thickness = self.convert_si_to_unit(self.settings["thickness"]) + thickness *= 1 / cos(self.settings["x_angle"]) if self.settings["direction_sense"] == "NEGATIVE": thickness *= -1 points = ( @@ -112,7 +113,7 @@ class Usecase: self.file.createIfcDirection((1.0, 0.0, 0.0)), ), extrusion_direction, - self.convert_si_to_unit(self.settings["height"]), + self.convert_si_to_unit(self.settings["height"]) * abs(1 / cos(self.settings["x_angle"])), ) if self.settings["booleans"]: extrusion = self.apply_booleans(extrusion) From 0e8c98a7bbea6d5680b33a75dfbba36d38b47ca5 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Wed, 28 Jan 2026 18:34:14 -0600 Subject: [PATCH 606/657] Fix: Handle emoji encoding error in dev_environment.py Prevents UnicodeEncodeError on Windows when displaying success message. --- src/bonsai/scripts/dev_environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/scripts/dev_environment.py b/src/bonsai/scripts/dev_environment.py index 4598d0bf49..d16edad96d 100644 --- a/src/bonsai/scripts/dev_environment.py +++ b/src/bonsai/scripts/dev_environment.py @@ -193,7 +193,7 @@ def main() -> None: print(f"Downloading {url} -> {filepath}") urllib.request.urlretrieve(url, filepath) - input("Dev environment is all set. 🎉🎉\nPress Enter to continue..." "") + input("Dev environment is all set!! \nPress Enter to continue...") if __name__ == "__main__": From cc995db98ba7b852312478f25811b32c083f5ebe Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 29 Jan 2026 19:12:02 +1100 Subject: [PATCH 607/657] Minor fix to 46a6356 to use the collector tool This has a few advantages: - The collection logic is centralised - The collection logic is configurable based on the collection mode - The name is not hardcoded --- src/bonsai/bonsai/bim/module/spatial/prop.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/spatial/prop.py b/src/bonsai/bonsai/bim/module/spatial/prop.py index 5c48566d08..3d3d2e74f4 100644 --- a/src/bonsai/bonsai/bim/module/spatial/prop.py +++ b/src/bonsai/bonsai/bim/module/spatial/prop.py @@ -99,8 +99,7 @@ def update_name(self: "BIMContainer", context: bpy.types.Context) -> None: tool.Spatial.edit_container_name(element, self.name) if obj := tool.Ifc.get_object(element): tool.Root.set_object_name(obj, element) - if collection := tool.Blender.get_object_bim_props(obj).collection: - collection.name = f"{element.is_a()}/{element.Name or 'Unnamed'}" + tool.Collector.assign(obj) bonsai.bim.handler.refresh_ui_data() From c1aa1dedba96d11497f4f77958ea7d50d0f2e034 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 29 Jan 2026 19:33:44 +1100 Subject: [PATCH 608/657] Fix #7615. Forgot a line when refactoring type geometry regeneration. Added test. --- src/bonsai/bonsai/bim/module/model/slab.py | 1 + src/bonsai/test/bim/feature/type.feature | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index 7630ef258c..3dcbf2aef0 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -249,6 +249,7 @@ class DumbSlabPlaner: self.change_thickness(element, total_thickness) def change_thickness(self, element: ifcopenshell.entity_instance, thickness: float) -> None: + self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) if tool.Model.get_usage_type(element) != "LAYER3": return layer_params = tool.Model.get_material_layer_parameters(element) diff --git a/src/bonsai/test/bim/feature/type.feature b/src/bonsai/test/bim/feature/type.feature index 1efefef446..9bae601b30 100644 --- a/src/bonsai/test/bim/feature/type.feature +++ b/src/bonsai/test/bim/feature/type.feature @@ -110,7 +110,7 @@ Scenario: Assign type - assign to a type with a material layer set, which automa And the object "IfcWall/Unnamed" has a "100" thick layered material containing the material "Default" And the object "IfcWall/Unnamed" dimensions are ".5,.1,.5" -Scenario: Assign type - assign to a different type with a material layer set +Scenario: Assign type - assign to a different type with a LAYER2 material layer set Given an empty IFC project And I add a cube And the object "Cube" is selected @@ -149,6 +149,23 @@ Scenario: Assign type - assign to a different type with a material layer set Then the object "IfcWall/Cube" has a "200" thick layered material containing the material "Default" And the object "IfcWall/Cube" dimensions are "1,.2,1" +Scenario: Assign type - assign to a different type with a LAYER3 material layer set + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcSlabType" + And the variable "element_type" is "[e for e in {ifc}.by_type('IfcSlabType') if e.Name == 'FLR200'][0].id()" + And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}" + When I press "bim.add_occurrence" + Then the object "IfcSlab/Slab" is an "IfcSlab" + And the object "IfcSlab/Slab" dimensions are "1,1,0.2" + And the object "IfcSlab/Slab" bottom left corner is at "0,0,0" + And the object "IfcSlab/Slab" top right corner is at "1,1,0.2" + When I look at the "Type" panel + And I click "GREASEPENCIL" + And I set the "relating_type" property to "FLR300" + And I click "CHECKMARK" + Then the object "IfcSlab/Slab" dimensions are "1,1,0.3" + Scenario: Assign type - assign to a type with a material profile set Given an empty IFC project And I add a cube From 966751a928aa77163b8829029463f98774d33754 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 29 Jan 2026 13:10:54 +0100 Subject: [PATCH 609/657] Add support for FLOW_SEGMENT_RECTANGULAR_HOLLOW in profile creation in the MEP Segment Tool --- src/bonsai/bonsai/bim/module/root/data.py | 5 +++++ src/bonsai/bonsai/bim/module/root/operator.py | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/root/data.py b/src/bonsai/bonsai/bim/module/root/data.py index 66412e7d48..d2516559b4 100644 --- a/src/bonsai/bonsai/bim/module/root/data.py +++ b/src/bonsai/bonsai/bim/module/root/data.py @@ -191,6 +191,11 @@ class IfcClassData: "Rectangular Distribution Segment", "Works similarly to Profile, has distribution ports", ), + ( + "FLOW_SEGMENT_RECTANGULAR_HOLLOW", + "Rectangular Hollow Distribution Segment", + "Works similarly to Profile, has distribution ports", + ), ( "FLOW_SEGMENT_CIRCULAR", "Circular Distribution Segment", diff --git a/src/bonsai/bonsai/bim/module/root/operator.py b/src/bonsai/bonsai/bim/module/root/operator.py index a2ac73f200..dc1d74f027 100644 --- a/src/bonsai/bonsai/bim/module/root/operator.py +++ b/src/bonsai/bonsai/bim/module/root/operator.py @@ -697,6 +697,24 @@ class AddElement(bpy.types.Operator, tool.Ifc.Operator): XDim=default_x_dim / unit_scale, YDim=default_y_dim / unit_scale, ) + elif representation_template == "FLOW_SEGMENT_RECTANGULAR_HOLLOW": + default_x_dim = 0.4 + default_y_dim = 0.2 + default_thickness = 0.005 + default_inner_fillet_radius = 0.005 + default_outer_fillet_radius = 0.005 + profile_name = f"{props.ifc_class}-{default_x_dim*1000}x{default_y_dim*1000}" + profile = tool.Ifc.get().create_entity( + "IfcRectangleHollowProfileDef", + ProfileName=profile_name, + ProfileType="AREA", + XDim=default_x_dim / unit_scale, + YDim=default_y_dim / unit_scale, + WallThickness=default_thickness / unit_scale, + InnerFilletRadius=default_inner_fillet_radius / unit_scale, + OuterFilletRadius=default_outer_fillet_radius / unit_scale, + ) + elif representation_template == "FLOW_SEGMENT_CIRCULAR": default_diameter = 0.1 profile_name = f"{props.ifc_class}-{default_diameter*1000}" From d06f5a6cb9fb279d9ec758a1b99e82dcc3ee6ea6 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 29 Jan 2026 13:12:47 +0100 Subject: [PATCH 610/657] Add thickness dimension to profile name --- src/bonsai/bonsai/bim/module/root/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/root/operator.py b/src/bonsai/bonsai/bim/module/root/operator.py index dc1d74f027..73f23deb9e 100644 --- a/src/bonsai/bonsai/bim/module/root/operator.py +++ b/src/bonsai/bonsai/bim/module/root/operator.py @@ -703,7 +703,7 @@ class AddElement(bpy.types.Operator, tool.Ifc.Operator): default_thickness = 0.005 default_inner_fillet_radius = 0.005 default_outer_fillet_radius = 0.005 - profile_name = f"{props.ifc_class}-{default_x_dim*1000}x{default_y_dim*1000}" + profile_name = f"{props.ifc_class}-{default_x_dim*1000}x{default_y_dim*1000}x{default_thickness*1000}" profile = tool.Ifc.get().create_entity( "IfcRectangleHollowProfileDef", ProfileName=profile_name, From e47694458f210b092126b748830cbef0cecc7899 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Thu, 29 Jan 2026 23:21:14 +0100 Subject: [PATCH 611/657] Add support for FLOW_SEGMENT_U_SHAPE in the AddElement operator --- src/bonsai/bonsai/bim/module/root/data.py | 5 +++++ src/bonsai/bonsai/bim/module/root/operator.py | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/root/data.py b/src/bonsai/bonsai/bim/module/root/data.py index d2516559b4..c23ea49e33 100644 --- a/src/bonsai/bonsai/bim/module/root/data.py +++ b/src/bonsai/bonsai/bim/module/root/data.py @@ -206,6 +206,11 @@ class IfcClassData: "Circular Hollow Distribution Segment", "Works similarly to Profile, has distribution ports", ), + ( + "FLOW_SEGMENT_U_SHAPE", + "U-Shape Distribution Segment", + "Uses IfcUShapeProfileDef, has distribution ports", + ), ) ) diff --git a/src/bonsai/bonsai/bim/module/root/operator.py b/src/bonsai/bonsai/bim/module/root/operator.py index 73f23deb9e..983429d311 100644 --- a/src/bonsai/bonsai/bim/module/root/operator.py +++ b/src/bonsai/bonsai/bim/module/root/operator.py @@ -735,6 +735,21 @@ class AddElement(bpy.types.Operator, tool.Ifc.Operator): Radius=(default_diameter / 2) / unit_scale, WallThickness=default_thickness, ) + elif representation_template == "FLOW_SEGMENT_U_SHAPE": + default_depth = 0.4 + default_flange_width = 0.2 + default_web_thickness = 0.005 + default_flange_thickness = 0.005 + profile_name = f"{props.ifc_class}-{default_depth*1000}x{default_flange_width*1000}x{default_web_thickness*1000}x{default_flange_thickness*1000}" + profile = tool.Ifc.get().create_entity( + "IfcUShapeProfileDef", + ProfileName=profile_name, + ProfileType="AREA", + Depth=default_depth / unit_scale, + FlangeWidth=default_flange_width / unit_scale, + WebThickness=default_web_thickness / unit_scale, + FlangeThickness=default_flange_thickness / unit_scale, + ) rel = ifcopenshell.api.material.assign_material( tool.Ifc.get(), products=[element], type="IfcMaterialProfileSet" From 83d97d7e9588a6c8a930c5262fa93967f5ee7515 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 30 Jan 2026 17:18:02 +1100 Subject: [PATCH 612/657] Fix #7616. Make regenerate array an operator instead of an array preference Sync children was a bit odd because it's not actually an "array parameter" per se, just a way to regenerate. It's now an operator. There was a deeper issue I encountered where the way arrays work is that they duplicate the parent element. (first encountered in e51d2d ) However, the duplication code has special array handling too. To avoid issues with this cyclical coupling the previous solution was to reimplement object duplication (with all sorts of pitfalls that has). Now, I've tried to decouple it further by clearing all array psets prior to any change, and readding the pset after everything has been regenerated. This can be improved upon but I don't feel confident until there is more comprehensive test coverage for the duplicate operator. --- .../bonsai/bim/module/model/__init__.py | 3 +- src/bonsai/bonsai/bim/module/model/array.py | 59 ++++++++++++------- src/bonsai/bonsai/bim/module/model/prop.py | 5 -- src/bonsai/bonsai/bim/module/model/ui.py | 2 +- src/bonsai/bonsai/tool/model.py | 41 ++++++------- 5 files changed, 59 insertions(+), 51 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/__init__.py b/src/bonsai/bonsai/bim/module/model/__init__.py index 57b4b561d0..9fbd631003 100644 --- a/src/bonsai/bonsai/bim/module/model/__init__.py +++ b/src/bonsai/bonsai/bim/module/model/__init__.py @@ -50,9 +50,10 @@ classes = ( array.EditArray, array.EnableEditingArray, array.ApplyArray, + array.RegenerateArray, array.RemoveArray, - array.SelectArrayParent, array.SelectAllArrayObjects, + array.SelectArrayParent, array.Input3DCursorXArray, array.Input3DCursorYArray, array.Input3DCursorZArray, diff --git a/src/bonsai/bonsai/bim/module/model/array.py b/src/bonsai/bonsai/bim/module/model/array.py index 3fb9360256..b1c13dbe75 100644 --- a/src/bonsai/bonsai/bim/module/model/array.py +++ b/src/bonsai/bonsai/bim/module/model/array.py @@ -61,7 +61,6 @@ class AddArray(bpy.types.Operator, tool.Ifc.Operator): "y": 0.0, "z": 0.0, "use_local_space": True, - "sync_children": False, "method": "OFFSET", } @@ -80,28 +79,27 @@ class AddArray(bpy.types.Operator, tool.Ifc.Operator): pset=pset, properties={"Parent": element.GlobalId, "Data": ifc_file.create_entity("IfcText", json.dumps(data))}, ) - return {"FINISHED"} -class DisableEditingArray(bpy.types.Operator, tool.Ifc.Operator): +class DisableEditingArray(bpy.types.Operator): bl_idname = "bim.disable_editing_array" bl_label = "Disable Editing Array" bl_options = {"REGISTER", "UNDO"} - def _execute(self, context): + def execute(self, context): obj = context.active_object assert obj tool.Model.get_array_props(obj).is_editing = -1 return {"FINISHED"} -class EnableEditingArray(bpy.types.Operator, tool.Ifc.Operator): +class EnableEditingArray(bpy.types.Operator): bl_idname = "bim.enable_editing_array" bl_label = "Enable Editing Array" bl_options = {"REGISTER", "UNDO"} item: bpy.props.IntProperty() - def _execute(self, context): + def execute(self, context): obj = context.active_object assert obj element = tool.Ifc.get_entity(obj) @@ -122,11 +120,9 @@ class EnableEditingArray(bpy.types.Operator, tool.Ifc.Operator): props.y = data["y"] * si_conversion props.z = data["z"] * si_conversion props.use_local_space = data.get("use_local_space", False) - props.sync_children = data.get("sync_children", False) props.method = data.get("method", "OFFSET") props.is_editing = self.item - return {"FINISHED"} @@ -151,31 +147,25 @@ class EditArray(bpy.types.Operator, tool.Ifc.Operator): "y": props.y / si_conversion, "z": props.z / si_conversion, "use_local_space": props.use_local_space, - "sync_children": props.sync_children, "method": props.method, } props.is_editing = -1 try: - parent = tool.Ifc.get_object(tool.Ifc.get().by_guid(pset["Parent"])) + parent_element = tool.Ifc.get().by_guid(pset["Parent"]) + parent = tool.Ifc.get_object(parent_element) except: return {"FINISHED"} + tool.Blender.Modifier.Array.remove_constraints(parent_element) tool.Model.regenerate_array(parent, data) - - pset = tool.Ifc.get().by_id(pset["id"]) - data = tool.Ifc.get().createIfcText(json.dumps(data)) - ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Data": data}) - tool.Blender.Modifier.Array.set_children_lock_state(element, self.item, True) tool.Blender.Modifier.Array.constrain_children_to_parent(element) # clears the relating_array_object so it doesn't show again next time props.relating_array_object = None - return {"FINISHED"} - class ApplyArray(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.apply_array" @@ -192,6 +182,33 @@ class ApplyArray(bpy.types.Operator, tool.Ifc.Operator): return {"FINISHED"} +class RegenerateArray(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.regenerate_array" + bl_label = "Regenerate Array" + bl_options = {"REGISTER", "UNDO"} + + def _execute(self, context): + obj = context.active_object + element = tool.Ifc.get_entity(obj) + pset = ifcopenshell.util.element.get_pset(element, "BBIM_Array") + try: + parent_element = tool.Ifc.get().by_guid(pset["Parent"]) + parent = tool.Ifc.get_object(parent_element) + except: + return {"FINISHED"} + pset = ifcopenshell.util.element.get_pset(parent_element, "BBIM_Array") + arrays = json.loads(pset["Data"]) + pset = tool.Ifc.get().by_id(pset["id"]) + for array in arrays: + for child in set(array["children"]): + if child_obj := tool.Ifc.get_object(tool.Ifc.get().by_guid(child)): + tool.Geometry.delete_ifc_object(child_obj) + array["children"].clear() + print('cleared array', arrays) + tool.Model.regenerate_array(obj, arrays) + tool.Blender.Modifier.Array.constrain_children_to_parent(element) + + class RemoveArray(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.remove_array" bl_label = "Remove Array" @@ -216,7 +233,8 @@ class RemoveArray(bpy.types.Operator, tool.Ifc.Operator): props.is_editing = -1 try: - parent = tool.Ifc.get_object(tool.Ifc.get().by_guid(pset["Parent"])) + parent_element = tool.Ifc.get().by_guid(pset["Parent"]) + parent = tool.Ifc.get_object(parent_element) except: return {"FINISHED"} @@ -226,9 +244,10 @@ class RemoveArray(bpy.types.Operator, tool.Ifc.Operator): if not self.keep_objs: data[self.item]["count"] = 1 + tool.Blender.Modifier.Array.remove_constraints(parent_element) tool.Model.regenerate_array(parent, data, array_layers_to_apply=[self.item] if self.keep_objs else []) - pset = tool.Ifc.get().by_id(pset["id"]) + pset = tool.Pset.get_element_pset(element, "BBIM_Array") if len(data) == 1: ifcopenshell.api.pset.remove_pset(tool.Ifc.get(), product=element, pset=pset) else: @@ -237,8 +256,6 @@ class RemoveArray(bpy.types.Operator, tool.Ifc.Operator): ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Data": data}) tool.Blender.Modifier.Array.constrain_children_to_parent(element) - return {"FINISHED"} - class SelectArrayParent(bpy.types.Operator): bl_idname = "bim.select_array_parent" diff --git a/src/bonsai/bonsai/bim/module/model/prop.py b/src/bonsai/bonsai/bim/module/model/prop.py index 9f2664190d..ec79a49196 100644 --- a/src/bonsai/bonsai/bim/module/model/prop.py +++ b/src/bonsai/bonsai/bim/module/model/prop.py @@ -387,11 +387,6 @@ class BIMArrayProperties(PropertyGroup): name="Method", default="OFFSET", ) - sync_children: bpy.props.BoolProperty( - name="Sync Children", - description="Regenerate all children based on the parent object", - default=False, - ) relating_array_object: bpy.props.PointerProperty( type=bpy.types.Object, name="Copy Array Properties", diff --git a/src/bonsai/bonsai/bim/module/model/ui.py b/src/bonsai/bonsai/bim/module/model/ui.py index 2c931f4f45..d8a297433b 100644 --- a/src/bonsai/bonsai/bim/module/model/ui.py +++ b/src/bonsai/bonsai/bim/module/model/ui.py @@ -229,6 +229,7 @@ class BIM_PT_array(bpy.types.Panel): if ArrayData.data["parameters"]: row = self.layout.row(align=True) row.label(text=ArrayData.data["parameters"]["parent_name"], icon="CON_CHILDOF") + row.operator("bim.regenerate_array", icon="FILE_REFRESH", text="") row.operator("bim.select_array_parent", icon="OBJECT_DATA", text="") row.operator("bim.select_all_array_objects", icon="RESTRICT_SELECT_OFF", text="") @@ -246,7 +247,6 @@ class BIM_PT_array(bpy.types.Panel): row.prop(props, "method") row = box.row(align=True) row.prop(props, "use_local_space") - row.prop(props, "sync_children") col = box.column() row = col.row(align=True) row.prop(props, "x") diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 08a0a0fd85..636ec9bc73 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1051,6 +1051,7 @@ class Model(bonsai.core.tool.Model): tool.Model.regenerate_array(obj, array_data) + array_pset = tool.Pset.get_element_pset(element, "BBIM_Array") json_data = tool.Ifc.get().createIfcText(json.dumps(array_data)) ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=array_pset, properties={"Data": json_data}) @@ -1063,22 +1064,15 @@ class Model(bonsai.core.tool.Model): cls, parent_obj: bpy.types.Object, data: list[dict[str, Any]], array_layers_to_apply: Iterable[int] = tuple() ) -> None: """`array_layers_to_apply` - list of array layer indices to apply""" - tool.Blender.Modifier.Array.remove_constraints(tool.Ifc.get_entity(parent_obj)) + parent_element = tool.Ifc.get_entity(parent_obj) + + if pset := ifcopenshell.util.element.get_pset(parent_element, "BBIM_Array"): + ifcopenshell.api.pset.remove_pset(tool.Ifc.get(), product=parent_element, pset=tool.Ifc.get().by_id(pset["id"])) unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) obj_stack = [parent_obj] for array_i, array in enumerate(data): - # for `sync_children` we remove all previously generated children to regenerate them again - # to assure they are in complete sync (psets, etc) with the array parent - if array["sync_children"]: - removed_children = set(array["children"]) - for removed_child in removed_children: - element = tool.Ifc.get().by_guid(removed_child) - if obj := tool.Ifc.get_object(element): - tool.Geometry.delete_ifc_object(obj) - array["children"].clear() - child_i = 0 existing_children = set(array["children"]) total_existing_children = len(array["children"]) @@ -1104,22 +1098,19 @@ class Model(bonsai.core.tool.Model): child_obj = tool.Ifc.get_object(child_element) assert child_obj except: - old_to_new, _ = tool.Geometry.duplicate_ifc_objects([obj]) - # TODO Is this correct to assume one child? I really - # don't understand the linked aggregates and array - # behaviour. + old_to_new, _ = tool.Geometry.duplicate_ifc_objects([parent_obj]) child_element = next(iter(old_to_new.values()))[0] child_obj = tool.Ifc.get_object(child_element) # add child pset - child_pset = tool.Pset.get_element_pset(child_element, "BBIM_Array") - if child_pset: - ifcopenshell.api.pset.edit_pset( - tool.Ifc.get(), - pset=child_pset, - properties={"Data": None}, - should_purge=False, - ) + if not (child_pset := tool.Pset.get_element_pset(child_element, "BBIM_Array")): + child_pset = ifcopenshell.api.pset.add_pset(tool.Ifc.get(), product=child_element, name="BBIM_Array") + ifcopenshell.api.pset.edit_pset( + tool.Ifc.get(), + pset=child_pset, + properties={"Data": None, "Parent": parent_element.GlobalId}, + should_purge=False, + ) # set child object position new_matrix = obj.matrix_world.copy() @@ -1155,6 +1146,10 @@ class Model(bonsai.core.tool.Model): bpy.context.view_layer.update() + pset = ifcopenshell.api.pset.add_pset(tool.Ifc.get(), product=parent_element, name="BBIM_Array") + json_data = tool.Ifc.get().createIfcText(json.dumps(data)) + ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Data": json_data, "Parent": parent_element.GlobalId}) + @classmethod def replace_object_ifc_representation( cls, From 398cd7571e282a5e25d144ef76008893311dba58 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 30 Jan 2026 17:32:30 +1100 Subject: [PATCH 613/657] Add array feature tests I'm thinking of moving array into its own module. The "model" module is getting a bit full and it'll only grow bigger in the future. --- src/bonsai/pytest.ini | 1 + src/bonsai/test/bim/feature/array.feature | 276 ++++++++++++++++++++++ 2 files changed, 277 insertions(+) create mode 100644 src/bonsai/test/bim/feature/array.feature diff --git a/src/bonsai/pytest.ini b/src/bonsai/pytest.ini index 001313dd30..e628606201 100644 --- a/src/bonsai/pytest.ini +++ b/src/bonsai/pytest.ini @@ -1,6 +1,7 @@ [pytest] markers = aggregate + array attribute boolean boundary diff --git a/src/bonsai/test/bim/feature/array.feature b/src/bonsai/test/bim/feature/array.feature new file mode 100644 index 0000000000..23fa4c0080 --- /dev/null +++ b/src/bonsai/test/bim/feature/array.feature @@ -0,0 +1,276 @@ +@array +Feature: Array + +Scenario: Add array + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + When the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I see "No Array Found" + And I click "ADD" + Then the object "IfcColumn/Column" exists + And I see "Column" + And I see "1 Items" + And I don't see "No Array Found" + And the object "IfcColumn/Column" is at "0,0,0" + +Scenario: Enable editing array + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + When I click "GREASEPENCIL" + Then I see "Count" + And I see "Method" + And I don't see "1 Items" + +Scenario: Disable editing array + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + When I click "CANCEL" + Then I see "1 Items" + And I don't see "Count" + +Scenario: Edit array + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + When I set the "Count" property to "2" + And I click "CHECKMARK" + Then the object "IfcColumn/Column.001" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column" is at "0,0,0" + And the object "IfcColumn/Column.001" is at "0,0,0" + And the object "IfcColumn/Column" dimensions are "0.5,0.6,3" + +Scenario: Edit array - offset method + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + When I set the "Count" property to "3" + And I set the "Method" property to "Offset" + And I set the "X" property to "1" + And I click "CHECKMARK" + Then the object "IfcColumn/Column.001" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column.002" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column" is at "0,0,0" + And the object "IfcColumn/Column.001" is at "1,0,0" + And the object "IfcColumn/Column.002" is at "2,0,0" + And the object "IfcColumn/Column" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.001" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.002" dimensions are "0.5,0.6,3" + +Scenario: Edit array - distribute method + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + When I set the "Count" property to "3" + And I set the "Method" property to "Distribute" + And I set the "X" property to "2" + And I click "CHECKMARK" + Then the object "IfcColumn/Column.001" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column.002" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column" is at "0,0,0" + And the object "IfcColumn/Column.001" is at "1,0,0" + And the object "IfcColumn/Column.002" is at "2,0,0" + And the object "IfcColumn/Column" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.001" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.002" dimensions are "0.5,0.6,3" + +Scenario: Edit array - local space + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is rotated by "0,0,90" deg + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + When I set the "Count" property to "2" + And I set the "Method" property to "Offset" + And I set the "Use Local Space" property to "TRUE" + And I set the "X" property to "1" + And I click "CHECKMARK" + Then the object "IfcColumn/Column" is at "0,0,0" + And the object "IfcColumn/Column.001" is at "0,1,0" + +Scenario: Edit array - world space + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is rotated by "0,0,90" deg + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + When I set the "Count" property to "2" + And I set the "Method" property to "Offset" + And I set the "Use Local Space" property to "FALSE" + And I set the "X" property to "1" + And I click "CHECKMARK" + Then the object "IfcColumn/Column" is at "0,0,0" + And the object "IfcColumn/Column.001" is at "1,0,0" + +Scenario: Edit array - decrease count + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + When I set the "Count" property to "3" + And I click "CHECKMARK" + And I click "GREASEPENCIL" + When I set the "Count" property to "2" + And I click "CHECKMARK" + Then the object "IfcColumn/Column.001" exists + And the object "IfcColumn/Column.002" does not exist + +Scenario: Edit array - multiple arrays + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + When I set the "Count" property to "3" + And I set the "Method" property to "Offset" + And I set the "X" property to "1" + And I click "CHECKMARK" + And I see "3 Items" + And I click "ADD" + And I click the "GREASEPENCIL" after the text "1 Items (Offset)" + And I set the "Count" property to "2" + And I set the "Method" property to "Offset" + And I set the "Y" property to "1" + And I click the "CHECKMARK" after the text "Count" + Then I see "3 Items" + And I see "2 Items" + Then the object "IfcColumn/Column.001" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column.002" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column.003" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column.004" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column.005" is in the collection "IfcBuildingStorey/My Storey" + And the object "IfcColumn/Column" is at "0,0,0" + And the object "IfcColumn/Column.001" is at "1,0,0" + And the object "IfcColumn/Column.002" is at "2,0,0" + And the object "IfcColumn/Column.003" is at "0,1,0" + And the object "IfcColumn/Column.004" is at "1,1,0" + And the object "IfcColumn/Column.005" is at "2,1,0" + And the object "IfcColumn/Column" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.001" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.002" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.003" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.004" dimensions are "0.5,0.6,3" + And the object "IfcColumn/Column.005" dimensions are "0.5,0.6,3" + +Scenario: Remove array + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + And I set the "Count" property to "2" + And I set the "Method" property to "Offset" + And I set the "X" property to "1" + And I click "CHECKMARK" + When I click "X" + Then the object "IfcColumn/Column" exists + And the object "IfcColumn/Column.001" does not exist + +Scenario: Regenerate array + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + And I set the "Count" property to "2" + And I click "CHECKMARK" + When I click "FILE_REFRESH" + Then the object "IfcColumn/Column" exists + And the object "IfcColumn/Column.001" exists + +Scenario: Apply array + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + And I set the "Count" property to "2" + And I click "CHECKMARK" + When I click "CHECKMARK" + Then the object "IfcColumn/Column" exists + And the object "IfcColumn/Column.001" exists + And I see "No Array Found" + +Scenario: Select array parent + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + And I set the "Count" property to "2" + And I click "CHECKMARK" + When the object "IfcColumn/Column.001" is selected + And I click "OBJECT_DATA" + Then the object "IfcColumn/Column" is selected + And the object "IfcColumn/Column.001" is not selected + +Scenario: Select all array objects + Given an empty IFC project + And I load the demo construction library + And I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" + And I add the construction type + And the object "IfcColumn/Column" is selected + And I look at the "Array" panel + And I click "ADD" + And I click "GREASEPENCIL" + And I set the "Count" property to "2" + And I click "CHECKMARK" + When the object "IfcColumn/Column.001" is selected + And I click "RESTRICT_SELECT_OFF" + Then the object "IfcColumn/Column" is selected + And the object "IfcColumn/Column.001" is selected From 22f91e11b339c4649ee723db055b7e82deac04a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:03:44 +0000 Subject: [PATCH 614/657] Bump tar from 7.5.6 to 7.5.7 in /src/ifctester/webapp Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.6 to 7.5.7. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.6...v7.5.7) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.7 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- src/ifctester/webapp/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ifctester/webapp/package-lock.json b/src/ifctester/webapp/package-lock.json index 35d03c74fa..647b9d534e 100644 --- a/src/ifctester/webapp/package-lock.json +++ b/src/ifctester/webapp/package-lock.json @@ -2851,9 +2851,9 @@ } }, "node_modules/tar": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", - "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { From 2727bec929bbf8565c9ba93aea991d821c84ceb4 Mon Sep 17 00:00:00 2001 From: falken10vdl Date: Fri, 30 Jan 2026 10:24:53 +0100 Subject: [PATCH 615/657] Reorder representation_template to improve clarity and organization as per user feedback --- src/bonsai/bonsai/bim/module/root/data.py | 86 +++++++++++++---------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/root/data.py b/src/bonsai/bonsai/bim/module/root/data.py index c23ea49e33..50f3248d8f 100644 --- a/src/bonsai/bonsai/bim/module/root/data.py +++ b/src/bonsai/bonsai/bim/module/root/data.py @@ -134,44 +134,8 @@ class IfcClassData: return [("FACE", "Face", "A planar face surface")] templates = [ ("EMPTY", "No Geometry", "Start with an empty object"), - None, - ( - "OBJ", - "Tessellation From Object", - "Use an object as a template to create a new tessellation", - ), - ( - "MESH", - "Custom Tessellation", - "Create a basic tessellated or faceted cube", - ), - ( - "EXTRUSION", - "Custom Extruded Solid", - "An extrusion from an arbitrary profile", - ), ] - if ifc_class.endswith("Type") or ifc_class.endswith("Style"): - templates.extend( - [ - None, - ( - "LAYERSET_AXIS2", - "Vertical Layers", - "For objects similar to walls, will automatically add IfcMaterialLayerSet", - ), - ( - "LAYERSET_AXIS3", - "Horizontal Layers", - "For objects similar to slabs, will automatically add IfcMaterialLayerSet", - ), - ( - "PROFILESET", - "Extruded Profile", - "Create profile type object, automatically defines IfcMaterialProfileSet with the first profile from library", - ), - ] - ) + if ifc_class in ("IfcWindowType", "IfcWindowStyle", "IfcWindow"): templates.extend([None, ("WINDOW", "Window", "Parametric window")]) elif ifc_class in ("IfcDoorType", "IfcDoorStyle", "IfcDoor"): @@ -206,6 +170,11 @@ class IfcClassData: "Circular Hollow Distribution Segment", "Works similarly to Profile, has distribution ports", ), + ) + ) + if (ifc_class and "IfcCableCarrierSegment" in ifc_class): + templates.extend( + ( ( "FLOW_SEGMENT_U_SHAPE", "U-Shape Distribution Segment", @@ -213,7 +182,48 @@ class IfcClassData: ), ) ) - + + if ifc_class.endswith("Type") or ifc_class.endswith("Style"): + templates.extend( + [ + None, + ( + "LAYERSET_AXIS2", + "Vertical Layers", + "For objects similar to walls, will automatically add IfcMaterialLayerSet", + ), + ( + "LAYERSET_AXIS3", + "Horizontal Layers", + "For objects similar to slabs, will automatically add IfcMaterialLayerSet", + ), + ( + "PROFILESET", + "Extruded Profile", + "Create profile type object, automatically defines IfcMaterialProfileSet with the first profile from library", + ), + ] + ) + templates.extend( + [ + None, + ( + "OBJ", + "Tessellation From Object", + "Use an object as a template to create a new tessellation", + ), + ( + "MESH", + "Custom Tessellation", + "Create a basic tessellated or faceted cube", + ), + ( + "EXTRUSION", + "Custom Extruded Solid", + "An extrusion from an arbitrary profile", + ), + ] + ) return templates @classmethod From 6a63c651d374fe37300ec8950e02a7b11cb91d3f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 30 Jan 2026 15:35:28 +0500 Subject: [PATCH 616/657] black . --- src/bonsai/bonsai/bim/module/model/array.py | 2 +- src/bonsai/bonsai/tool/model.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/array.py b/src/bonsai/bonsai/bim/module/model/array.py index b1c13dbe75..5f045435ac 100644 --- a/src/bonsai/bonsai/bim/module/model/array.py +++ b/src/bonsai/bonsai/bim/module/model/array.py @@ -204,7 +204,7 @@ class RegenerateArray(bpy.types.Operator, tool.Ifc.Operator): if child_obj := tool.Ifc.get_object(tool.Ifc.get().by_guid(child)): tool.Geometry.delete_ifc_object(child_obj) array["children"].clear() - print('cleared array', arrays) + print("cleared array", arrays) tool.Model.regenerate_array(obj, arrays) tool.Blender.Modifier.Array.constrain_children_to_parent(element) diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 636ec9bc73..148f4a6b75 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -1067,7 +1067,9 @@ class Model(bonsai.core.tool.Model): parent_element = tool.Ifc.get_entity(parent_obj) if pset := ifcopenshell.util.element.get_pset(parent_element, "BBIM_Array"): - ifcopenshell.api.pset.remove_pset(tool.Ifc.get(), product=parent_element, pset=tool.Ifc.get().by_id(pset["id"])) + ifcopenshell.api.pset.remove_pset( + tool.Ifc.get(), product=parent_element, pset=tool.Ifc.get().by_id(pset["id"]) + ) unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) obj_stack = [parent_obj] @@ -1104,7 +1106,9 @@ class Model(bonsai.core.tool.Model): # add child pset if not (child_pset := tool.Pset.get_element_pset(child_element, "BBIM_Array")): - child_pset = ifcopenshell.api.pset.add_pset(tool.Ifc.get(), product=child_element, name="BBIM_Array") + child_pset = ifcopenshell.api.pset.add_pset( + tool.Ifc.get(), product=child_element, name="BBIM_Array" + ) ifcopenshell.api.pset.edit_pset( tool.Ifc.get(), pset=child_pset, @@ -1148,7 +1152,9 @@ class Model(bonsai.core.tool.Model): pset = ifcopenshell.api.pset.add_pset(tool.Ifc.get(), product=parent_element, name="BBIM_Array") json_data = tool.Ifc.get().createIfcText(json.dumps(data)) - ifcopenshell.api.pset.edit_pset(tool.Ifc.get(), pset=pset, properties={"Data": json_data, "Parent": parent_element.GlobalId}) + ifcopenshell.api.pset.edit_pset( + tool.Ifc.get(), pset=pset, properties={"Data": json_data, "Parent": parent_element.GlobalId} + ) @classmethod def replace_object_ifc_representation( From 47ac909a81047c41948228687d6e1d008b39df31 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 30 Jan 2026 15:37:12 +0500 Subject: [PATCH 617/657] ruff - sort imports --- src/bonsai/bonsai/bim/module/model/slab.py | 8 +++++--- src/bonsai/bonsai/bim/module/model/wall.py | 2 -- src/bonsai/test/core/test_type.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/slab.py b/src/bonsai/bonsai/bim/module/model/slab.py index 3dcbf2aef0..602c36df11 100644 --- a/src/bonsai/bonsai/bim/module/model/slab.py +++ b/src/bonsai/bonsai/bim/module/model/slab.py @@ -40,9 +40,11 @@ import bonsai.core.root import bonsai.core.type import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from math import cos, pi -from mathutils import Vector, Matrix -from bonsai.bim.module.model.decorator import ProfileDecorator, PolylineDecorator, ProductDecorator +from bonsai.bim.module.model.decorator import ( + PolylineDecorator, + ProductDecorator, + ProfileDecorator, +) from bonsai.bim.module.model.polyline import PolylineOperator diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index d98a81f62d..ba3d93586b 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -48,8 +48,6 @@ import bonsai.core.root import bonsai.core.type import bonsai.tool as tool from bonsai.bim.ifc import IfcStore -from math import pi, sin, cos, degrees, atan2 -from mathutils import Vector, Matrix from bonsai.bim.module.model.decorator import PolylineDecorator, ProductDecorator from bonsai.bim.module.model.opening import FilledOpeningGenerator from bonsai.bim.module.model.polyline import PolylineOperator diff --git a/src/bonsai/test/core/test_type.py b/src/bonsai/test/core/test_type.py index 0987ab3d9e..e46cf8168f 100644 --- a/src/bonsai/test/core/test_type.py +++ b/src/bonsai/test/core/test_type.py @@ -17,7 +17,7 @@ # along with Bonsai. If not, see . import bonsai.core.type as subject -from test.core.bootstrap import ifc, model, type, geometry +from test.core.bootstrap import geometry, ifc, model, type class TestAssignType: From 38f9f309e78cd244ca30a689689bfe2d82f68cfc Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 26 Jan 2026 16:04:56 +0500 Subject: [PATCH 618/657] Bonsai Makefile - enable Python 3.13 build --- src/bonsai/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 68433466bd..e7ad75a1b4 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -61,6 +61,11 @@ PYLIBDIR:=python3.12 PYNUMBER:=312 PYPI_VERSION:=3.12 endif +ifeq ($(PYVERSION), py313) +PYLIBDIR:=python3.13 +PYNUMBER:=313 +PYPI_VERSION:=3.13 +endif ifeq ($(PLATFORM), linux) PYPI_PLATFORM:=--platform manylinux_2_17_x86_64 From e8a4590d0afe1d0117d7618c0bde4a39ace9a10a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 27 Jan 2026 13:33:56 +0500 Subject: [PATCH 619/657] Bonsai Makefile - error for missing PYVERSION --- src/bonsai/Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index e7ad75a1b4..c265097d3e 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -48,7 +48,6 @@ VERSION_PATCH:=$(shell cat '../../VERSION' | cut -d '.' -f 3) VERSION_DATE:=$(shell date '+%y%m%d') LAST_COMMIT_HASH:=$(shell git rev-parse HEAD) LAST_COMMIT_DATE:=$(shell git show -s --format=%cI) -PYVERSION:=py310 PYPI_IMP:=cp ifeq ($(PYVERSION), py311) @@ -104,7 +103,10 @@ endif .PHONY: dist dist: ifndef PLATFORM - $(error PLATFORM is not set) + $(error PLATFORM is not set. Example values: win, linux, macos, macosm1.) +endif +ifndef PYVERSION + $(error PYVERSION is not set. Example value - 'py313'. Supported Python versions - 3.11-3.13.) endif rm -rf build mkdir -p build From d74588246a34a49831666db58234146c1aec27fe Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 28 Jan 2026 15:23:35 +0500 Subject: [PATCH 620/657] bonsai Makefile - workaround for pyradiance in Python 3.13 Until https://github.com/LBNL-ETA/pyradiance/issues/53 is resolved. --- src/bonsai/Makefile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index c265097d3e..3a1fbe564b 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -195,12 +195,23 @@ endif cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pytz --dest=./wheels cd build && . env/$(VENV_ACTIVATE) && $(PIP) download tzfpy $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels # pyradiance is using different platform versions than defaults in our makefile. + # Temporary use `pyradiance_py313` until https://github.com/LBNL-ETA/pyradiance/issues/53 is resolved. +ifeq ($(PYVERSION), py313) +ifeq ($(PLATFORM), linux) + cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 --platform manylinux_2_35_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels +else ifeq ($(PLATFORM), macos) + cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 --platform macosx_10_13_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels +else + cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels +endif +else ifeq ($(PLATFORM), linux) cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance --platform manylinux_2_35_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels else ifeq ($(PLATFORM), macos) cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance --platform macosx_10_13_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels else cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels +endif endif # Required by ifctester web ui. cd build && . env/$(VENV_ACTIVATE) && $(PIP) download flask $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels From ac4ffd91e7ced815737d6f893107a0cb2f159cce Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 28 Jan 2026 15:23:46 +0500 Subject: [PATCH 621/657] Bonsai Makefile - drop wheel renaming workaround #5743 --- src/bonsai/Makefile | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 3a1fbe564b..ca33bd4525 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -306,12 +306,6 @@ endif fi mv build/wheels/*.whl build/bonsai/wheels/ - # Temporary workaround for Blender not handling non-3.11 wheels #5743. - # Use '-n' as on macos x86-64 doesn't have a binary wheel and it autoincludes 'cp311'. - prev_whl_name=$$(find build/bonsai/wheels/tzfpy-*.whl); \ - whl_name=$$(echo $$prev_whl_name | sed "s/-cp39-/-cp$(PYNUMBER)-/"); \ - mv --update=none "$$prev_whl_name" "$$whl_name"; - ifneq ($(PLATFORM), linux) # Safeguard: in case one of `pip download` will break, # it will produce a linux wheel for non-linux build (our github action machine is using linux). From 91ee2b92220d86e711d217f36b6d7b2999eb78ca Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 28 Jan 2026 16:42:29 +0500 Subject: [PATCH 622/657] bonsai Makefile - require Blender 5.1 for Python 3.13 --- src/bonsai/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index ca33bd4525..03c05f2cbc 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -285,6 +285,11 @@ else $(SED) 's/version = "0.0.0"/version = "$(VERSION)-alpha$(VERSION_DATE)"/' build/pyproject.toml endif +# Blender 5.1+ requires Python 3.13. +ifeq ($(PYVERSION), py313) + $(SED) 's/blender_version_min = "4\.2\.0"/blender_version_min = "5.1.0"/' build/bonsai/blender_manifest.toml +endif + $(SED) "s/os-arch/$(BLENDER_PLATFORM)/" build/bonsai/blender_manifest.toml # Provides bonsai Add-on functionality From 40e4894f8e2087b31bf88ee29462f8e0b23a7091 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 28 Jan 2026 17:15:06 +0500 Subject: [PATCH 623/657] ci-bonsai-daily - exclude intel mac build for Python 3.13 Since Blender dropped support for it in Blender 5.0 and Python 3.13 is only needed for Blender 5.1. --- .github/workflows/ci-bonsai-daily.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci-bonsai-daily.yml b/.github/workflows/ci-bonsai-daily.yml index 8beddfe668..3b52198f3a 100644 --- a/.github/workflows/ci-bonsai-daily.yml +++ b/.github/workflows/ci-bonsai-daily.yml @@ -53,6 +53,11 @@ jobs: name: "MacOS ARM Build", short_name: macosm1, } + exclude: + # Python 3.13 is needed for Blender 5.1+ and Blender dropped Intel Mac support in 5.0. + - pyver: py313 + config: + short_name: macos steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 # https://github.com/actions/setup-python From 2f7234684571db6b06359ae2c3bb9a5bdc466dfd Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 29 Jan 2026 12:23:44 +0500 Subject: [PATCH 624/657] bonsai Makefile - fix platform tag to use the latest pyradiance Apparently `pip download` is matching tag exactly, which was leading to Linux using pyradiance 0.5.3 instead of 1.1.5. --- src/bonsai/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 03c05f2cbc..aabf86cf4d 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -198,7 +198,7 @@ endif # Temporary use `pyradiance_py313` until https://github.com/LBNL-ETA/pyradiance/issues/53 is resolved. ifeq ($(PYVERSION), py313) ifeq ($(PLATFORM), linux) - cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 --platform manylinux_2_35_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels + cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 --platform manylinux_2_28_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels else ifeq ($(PLATFORM), macos) cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 --platform macosx_10_13_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels else @@ -206,7 +206,7 @@ else endif else ifeq ($(PLATFORM), linux) - cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance --platform manylinux_2_35_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels + cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance --platform manylinux_2_28_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels else ifeq ($(PLATFORM), macos) cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance --platform macosx_10_13_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels else From 35dc0298988b1dc8a5424487b32f86e1154c54ca Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 29 Jan 2026 17:40:57 +0500 Subject: [PATCH 625/657] bonsai - add a dockerfile --- src/bonsai/Dockerfile | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/bonsai/Dockerfile diff --git a/src/bonsai/Dockerfile b/src/bonsai/Dockerfile new file mode 100644 index 0000000000..9805ec0530 --- /dev/null +++ b/src/bonsai/Dockerfile @@ -0,0 +1,22 @@ +# Build Bonsai .zip. +# Usage: +# # While in `bonsai` folder. +# docker build -t bonsai-dist . +# # Output zip file will be in `dist` folder. +# # See possible values for variables in `Makefile`'s `dist` target description. +# docker run --rm -v "$PWD/../../:/work" -w /work -e PLATFORM=win -e PYVERSION=py313 bonsai-dist + +FROM ubuntu:24.04 +RUN apt-get update +RUN apt-get install -y make git wget unzip zip + +# Python +RUN apt-get install -y software-properties-common +RUN add-apt-repository ppa:deadsnakes/ppa +RUN apt-get update +RUN apt-get install -y python3.11 python3.11-venv + +RUN apt-get install -y npm + +WORKDIR /work +CMD cd src/bonsai && make dist PLATFORM=$PLATFORM PYVERSION=$PYVERSION From 6409f41cdf2f608946d52f26460529cfc46fa88e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 30 Jan 2026 16:02:32 +0500 Subject: [PATCH 626/657] Bonsai Makefile - sort of simplify pyversion check --- src/bonsai/Makefile | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index aabf86cf4d..133920bd00 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -50,20 +50,31 @@ LAST_COMMIT_HASH:=$(shell git rev-parse HEAD) LAST_COMMIT_DATE:=$(shell git show -s --format=%cI) PYPI_IMP:=cp -ifeq ($(PYVERSION), py311) -PYLIBDIR:=python3.11 -PYNUMBER:=311 -PYPI_VERSION:=3.11 +ifdef PYVERSION +SUPPORTED_PYVERSIONS := py311 py312 py313 + +ifeq ($(filter $(PYVERSION),$(SUPPORTED_PYVERSIONS)),) +$(error Unsupported PYVERSION=$(PYVERSION). Must be one of $(SUPPORTED_PYVERSIONS)) endif -ifeq ($(PYVERSION), py312) -PYLIBDIR:=python3.12 -PYNUMBER:=312 -PYPI_VERSION:=3.12 + +PYMINOR:=$(subst py3,,$(PYVERSION)) +PYLIBDIR:=python3.$(PYMINOR) +PYNUMBER:=3$(PYMINOR) +PYPI_VERSION:=3.$(PYMINOR) +endif # def PYVERSION + + +ifdef PLATFORM +SUPPORTED_PLATFORMS := linux macos macosm1 win + +ifeq ($(filter $(PLATFORM),$(SUPPORTED_PLATFORMS)),) +$(error Unsupported PLATFORM=$(PLATFORM). Must be one of $(SUPPORTED_PLATFORMS)) +endif + +ifeq ($(PLATFORM),macos) +ifeq ($(PYVERSION),py313) +$(error Blender 5.1 with Python 3.13 doesn't support intel macOS.) endif -ifeq ($(PYVERSION), py313) -PYLIBDIR:=python3.13 -PYNUMBER:=313 -PYPI_VERSION:=3.13 endif ifeq ($(PLATFORM), linux) @@ -90,6 +101,8 @@ PYPI_PLATFORM:=--platform win_amd64 BLENDER_PLATFORM:=windows-x64 endif +endif # def PLATFORM + # Current build commit hash. OLD:=e8eb5e4 .PHONY: bump @@ -103,10 +116,10 @@ endif .PHONY: dist dist: ifndef PLATFORM - $(error PLATFORM is not set. Example values: win, linux, macos, macosm1.) + $(error PLATFORM is not set. Example values: $(SUPPORTED_PLATFORMS).) endif ifndef PYVERSION - $(error PYVERSION is not set. Example value - 'py313'. Supported Python versions - 3.11-3.13.) + $(error PYVERSION is not set. Example values: $(SUPPORTED_PYVERSIONS). ) endif rm -rf build mkdir -p build From 611a898ada157b9d5cb9b5081b96b12405581da5 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Fri, 30 Jan 2026 20:07:04 +0000 Subject: [PATCH 627/657] IFC Git close and reopen repo after cloning Apparently on Windows clone can leave 'stale processes' --- src/bonsai/bonsai/tool/ifcgit.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/ifcgit.py b/src/bonsai/bonsai/tool/ifcgit.py index 6854b38432..db557542bc 100644 --- a/src/bonsai/bonsai/tool/ifcgit.py +++ b/src/bonsai/bonsai/tool/ifcgit.py @@ -64,10 +64,13 @@ class IfcGit: @classmethod def clone_repo(cls, remote_url: str, local_folder: str) -> git.Repo: - IfcGitRepo.repo = git.Repo.clone_from( + repo = git.Repo.clone_from( url=remote_url, to_path=local_folder, ) + # Close the repo to release stale subprocess + repo.close() + IfcGitRepo.repo = git.Repo(local_folder) cls.config_info_attributes(IfcGitRepo.repo) return IfcGitRepo.repo From 9b8b05a570223d7e1f70380d5385299912239577 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Jan 2026 22:45:49 +0000 Subject: [PATCH 628/657] Bump gersemi from 0.25.1 to 0.25.4 Bumps [gersemi](https://github.com/BlankSpruce/gersemi) from 0.25.1 to 0.25.4. - [Release notes](https://github.com/BlankSpruce/gersemi/releases) - [Changelog](https://github.com/BlankSpruce/gersemi/blob/master/CHANGELOG.md) - [Commits](https://github.com/BlankSpruce/gersemi/compare/0.25.1...0.25.4) --- updated-dependencies: - dependency-name: gersemi dependency-version: 0.25.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 13f3b15ba6..4e9d9687c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ dependencies = [ "black==26.1.0", "ruff==0.14.14", "poethepoet", - "gersemi==0.25.1", + "gersemi==0.25.4", ] [tool.black] From c6257a4b3ac9f7d0b8a09272bc9835a4eaee23e8 Mon Sep 17 00:00:00 2001 From: Richard Brice <37087370+RickBrice@users.noreply.github.com> Date: Sat, 31 Jan 2026 05:30:06 -0800 Subject: [PATCH 629/657] Fixes errors in ifc_curve_rebar.cpp M_PI was not defined,. Replaced it with boost::math::constants::pi Calculation of area was incorrect. Area of a circle = PI*r*r = PI*dia*dia/4 --- src/examples/ifc_curve_rebar.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/examples/ifc_curve_rebar.cpp b/src/examples/ifc_curve_rebar.cpp index 81a705dc5e..0f66f7b45a 100644 --- a/src/examples/ifc_curve_rebar.cpp +++ b/src/examples/ifc_curve_rebar.cpp @@ -31,6 +31,9 @@ #include "ifcparse/Ifc2x3.h" #include "ifcparse/IfcHierarchyHelper.h" +#include +const static double PI = boost::math::constants::pi(); + typedef std::string S; typedef IfcParse::IfcGlobalId guid; boost::none_t const null = boost::none; @@ -41,7 +44,7 @@ void create_curve_rebar(IfcHierarchyHelper& file) int R = 3 * dia; int length = 12 * dia; - double crossSectionarea = M_PI * (dia / 2) * 2; + double crossSectionarea = PI * dia * dia / 4; IfcSchema::IfcReinforcingBar* rebar = new IfcSchema::IfcReinforcingBar( guid(), 0, S("test"), null, null, 0, 0, From c385b93701fd7e4441be213280b04c45723577fc Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 1 Feb 2026 21:08:11 +0100 Subject: [PATCH 630/657] Add option --make-volume to apply BOPAlgo_MakerVolume API to non-manifold first operands in opening subtraction --- src/ifcgeom/ConversionSettings.h | 8 +++++++- .../kernels/opencascade/OpenCascadeKernel.cpp | 18 ++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/ifcgeom/ConversionSettings.h b/src/ifcgeom/ConversionSettings.h index eb405a9e7c..febd789f6b 100644 --- a/src/ifcgeom/ConversionSettings.h +++ b/src/ifcgeom/ConversionSettings.h @@ -452,6 +452,12 @@ namespace ifcopenshell { static constexpr bool defaultvalue = false; }; + struct MakeVolume : public SettingBase { + static constexpr const char* const name = "make-volume"; + static constexpr const char* const description = "Try to isolate and fix a valid volume from non-manifold elements prior to opening subtraction"; + static constexpr bool defaultvalue = false; + }; + struct DeferProcessingFirstElement : public SettingBase { static constexpr const char* const name = "defer-processing-first-element"; static constexpr const char* const description = "Don't process first element in Iterator::initialize call()"; @@ -647,7 +653,7 @@ namespace ifcopenshell { }; class Settings : public SettingsContainer< - std::tuple + std::tuple > {}; } diff --git a/src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp b/src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp index fcb390b6cc..a5a9d94149 100644 --- a/src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp +++ b/src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp @@ -29,6 +29,7 @@ #include "base_utils.h" #include +#include namespace { struct opening_sorter { @@ -132,11 +133,24 @@ bool IfcGeom::OpenCascadeKernel::convert_openings(const IfcUtil::IfcBaseEntity* parts.push_back(it3_shape); } - for (auto& entity_part : parts) { + for (auto entity_part : parts) { bool is_manifold = util::is_manifold(entity_part); if (!is_manifold) { - Logger::Warning("Non-manifold first operand"); + if (settings_.get().get()) { + BOPAlgo_MakerVolume mv; + mv.AddArgument(entity_part); + mv.SetAvoidInternalShapes(true); + try { + mv.Perform(); + entity_part = mv.Shape(); + Logger::Warning("Sucessfully detected exterior volume to non-manifold first operand"); + } catch (const Standard_Failure& e) { + Logger::Warning("MakeVolume failed: " + std::string(e.GetMessageString()), entity); + } + } else { + Logger::Warning("Non-manifold first operand, use --make-volume to try and make manifold"); + } } TopoDS_Shape entity_part_result; From 950e147bdef9b170cc1952c0394314a231762e63 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 2 Feb 2026 09:34:28 -0600 Subject: [PATCH 631/657] fixes #7629: close editing mode for text objects after batch edit Fix issue where selected text annotations remained in editing mode after applying changes. Now properly restores original editing state for each selected object. --- .../bonsai/bim/module/drawing/operator.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 8c29bfbf41..a19a972ad6 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3294,6 +3294,15 @@ class EditText(bpy.types.Operator, tool.Ifc.Operator): """Apply changes to other selected text objects using captured apply settings""" selected_objects = [obj for obj in context.selected_objects if obj != active_obj] + # Track editing status ONLY for selected objects (not all visible objects) + editing_status = {} + for obj in selected_objects: + element = tool.Ifc.get_entity(obj) + if not element or not tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]): + continue + obj_props = tool.Drawing.get_text_props(obj) + editing_status[obj] = obj_props.is_editing if hasattr(obj_props, "is_editing") else False + for obj in selected_objects: element = tool.Ifc.get_entity(obj) if not element: @@ -3345,6 +3354,16 @@ class EditText(bpy.types.Operator, tool.Ifc.Operator): if needs_update: core.edit_text(tool.Drawing, obj=obj) + # Restore original editing state for all selected objects + for obj, was_editing in editing_status.items(): + obj_props = tool.Drawing.get_text_props(obj) + if hasattr(obj_props, "is_editing"): + # If object was NOT originally being edited, disable editing mode now + if not was_editing and obj_props.is_editing: + core.disable_editing_text(tool.Drawing, obj=obj) + # If object WAS originally being edited but isn't now, re-enable it + elif was_editing and not obj_props.is_editing: + core.enable_editing_text(tool.Drawing, obj=obj) class EnableEditingText(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_text" From fe395f9024f63bffd18d0abbb8613cf4186b5778 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 3 Feb 2026 09:13:26 +1100 Subject: [PATCH 632/657] Revert "fixes #7629: close editing mode for text objects after batch edit" This reverts commit 950e147bdef9b170cc1952c0394314a231762e63. --- .../bonsai/bim/module/drawing/operator.py | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index a19a972ad6..8c29bfbf41 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3294,15 +3294,6 @@ class EditText(bpy.types.Operator, tool.Ifc.Operator): """Apply changes to other selected text objects using captured apply settings""" selected_objects = [obj for obj in context.selected_objects if obj != active_obj] - # Track editing status ONLY for selected objects (not all visible objects) - editing_status = {} - for obj in selected_objects: - element = tool.Ifc.get_entity(obj) - if not element or not tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]): - continue - obj_props = tool.Drawing.get_text_props(obj) - editing_status[obj] = obj_props.is_editing if hasattr(obj_props, "is_editing") else False - for obj in selected_objects: element = tool.Ifc.get_entity(obj) if not element: @@ -3354,16 +3345,6 @@ class EditText(bpy.types.Operator, tool.Ifc.Operator): if needs_update: core.edit_text(tool.Drawing, obj=obj) - # Restore original editing state for all selected objects - for obj, was_editing in editing_status.items(): - obj_props = tool.Drawing.get_text_props(obj) - if hasattr(obj_props, "is_editing"): - # If object was NOT originally being edited, disable editing mode now - if not was_editing and obj_props.is_editing: - core.disable_editing_text(tool.Drawing, obj=obj) - # If object WAS originally being edited but isn't now, re-enable it - elif was_editing and not obj_props.is_editing: - core.enable_editing_text(tool.Drawing, obj=obj) class EnableEditingText(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_text" From 1445f89f19e7ca41eab1408fd349d919519b0378 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 3 Feb 2026 18:09:15 +1100 Subject: [PATCH 633/657] See #7629. Partially reimplement bulk text editing. This isn't complete yet, but it hopefully demonstrates a preferred implementation: * Logic in core, not operator * Loop done in core, without needing to call other core functions, so the overhead of enabling and disabling editing per object is removed. No more Blender logic, just straight editing in IFC. * Reuse existing function to grab text attributes instead of reimplementing it twice. * Remove dead code, there seems to be a function apply_to_selected_objects which was completely unused and duplicated code twice. --- .../bonsai/bim/module/drawing/operator.py | 165 +----------------- src/bonsai/bonsai/core/drawing.py | 13 +- src/bonsai/bonsai/core/tool.py | 1 - src/bonsai/bonsai/tool/drawing.py | 39 +---- 4 files changed, 19 insertions(+), 199 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 8c29bfbf41..4c52993aa0 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3185,166 +3185,15 @@ class EditText(bpy.types.Operator, tool.Ifc.Operator): bl_options = {"REGISTER", "UNDO"} def _execute(self, context): - obj = context.active_object - props = tool.Drawing.get_text_props(obj) - - captured_apply_settings = { - "apply_font_size_to_all": props.apply_font_size_to_all, - "apply_newline_to_all": props.apply_newline_to_all, - "font_size": props.font_size, - "newline_at": props.newline_at, - "literals": [], - } - - for i, literal in enumerate(props.literals): - literal_data = { - "attributes": [ - (attr.string_value, attr.enum_value if attr.data_type == "enum" else attr.string_value) - for attr in literal.attributes - ], - "box_alignment": literal.box_alignment[:] if hasattr(literal, "box_alignment") else None, - "element_value_rows": [ - { - "category": row.category, - "element_key": row.element_key, - "formatted_value": row.formatted_value, - "separator": row.separator, - } - for row in literal.element_value_rows - ], - "product_used": literal.product_used.name if literal.product_used else None, - } - - if i < len(props.literal_apply_settings): - apply_settings = props.literal_apply_settings[i] - literal_data["apply_text_to_all"] = apply_settings.apply_text_to_all - literal_data["apply_path_to_all"] = apply_settings.apply_path_to_all - literal_data["apply_box_alignment_to_all"] = apply_settings.apply_box_alignment_to_all - else: - literal_data["apply_text_to_all"] = False - literal_data["apply_path_to_all"] = False - literal_data["apply_box_alignment_to_all"] = False - - captured_apply_settings["literals"].append(literal_data) - - obj["_bonsai_element_value_rows_backup"] = json.dumps(captured_apply_settings["literals"]) - - core.edit_text(tool.Drawing, obj=obj) - - self.apply_to_selected_objects_with_captured_data(context, obj, captured_apply_settings) - + apply_objs = [ + obj + for obj in tool.Blender.get_selected_objects() + if (element := tool.Ifc.get_entity(obj)) + and tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]) + ] + core.edit_text(tool.Drawing, attribute_obj=tool.Blender.get_active_object(), apply_objs=apply_objs) tool.Blender.update_viewport() - return {"FINISHED"} - - def apply_to_selected_objects(self, context, active_obj, active_props): - """Apply changes to other selected text objects based on toggle settings""" - selected_objects = [obj for obj in context.selected_objects if obj != active_obj] - - for obj in selected_objects: - element = tool.Ifc.get_entity(obj) - if not element or not tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]): - continue - - obj_props = tool.Drawing.get_text_props(obj) - needs_update = False - - if active_props.apply_font_size_to_all: - obj_props.font_size = active_props.font_size - needs_update = True - - if active_props.apply_newline_to_all: - obj_props.newline_at = active_props.newline_at - needs_update = True - - for i, active_literal in enumerate(active_props.literals): - if i >= len(obj_props.literals): - continue - - obj_props.ensure_literal_apply_settings(len(obj_props.literals)) - obj_literal = obj_props.literals[i] - - if i < len(active_props.literal_apply_settings): - active_settings = active_props.literal_apply_settings[i] - - if active_settings.apply_text_to_all: - if len(active_literal.attributes) > 0 and len(obj_literal.attributes) > 0: - obj_literal.attributes[0].string_value = active_literal.attributes[0].string_value - needs_update = True - - if active_settings.apply_path_to_all: - if len(active_literal.attributes) > 1 and len(obj_literal.attributes) > 1: - if ( - active_literal.attributes[1].data_type == "enum" - and obj_literal.attributes[1].data_type == "enum" - ): - obj_literal.attributes[1].enum_value = active_literal.attributes[1].enum_value - else: - obj_literal.attributes[1].string_value = active_literal.attributes[1].string_value - needs_update = True - - if active_settings.apply_box_alignment_to_all: - obj_literal.box_alignment = active_literal.box_alignment[:] - needs_update = True - - if needs_update: - core.edit_text(tool.Drawing, obj=obj) - - def apply_to_selected_objects_with_captured_data(self, context, active_obj, captured_data): - """Apply changes to other selected text objects using captured apply settings""" - selected_objects = [obj for obj in context.selected_objects if obj != active_obj] - - for obj in selected_objects: - element = tool.Ifc.get_entity(obj) - if not element: - continue - if not tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]): - continue - - obj_props = tool.Drawing.get_text_props(obj) - - if len(obj_props.literals) == 0: - core.enable_editing_text(tool.Drawing, obj=obj) - obj_props.ensure_literal_apply_settings(len(obj_props.literals)) - - needs_update = False - - if captured_data["apply_font_size_to_all"]: - obj_props.font_size = captured_data["font_size"] - needs_update = True - - if captured_data["apply_newline_to_all"]: - obj_props.newline_at = captured_data["newline_at"] - needs_update = True - - for i, captured_literal in enumerate(captured_data["literals"]): - if i >= len(obj_props.literals): - continue - - obj_literal = obj_props.literals[i] - - if captured_literal["apply_text_to_all"]: - if len(captured_literal["attributes"]) > 0 and len(obj_literal.attributes) > 0: - new_value = captured_literal["attributes"][0][0] # [0] = string_value - obj_literal.attributes[0].string_value = new_value - needs_update = True - - if captured_literal["apply_path_to_all"]: - if len(captured_literal["attributes"]) > 1 and len(obj_literal.attributes) > 1: - new_value = captured_literal["attributes"][1][1] # [1] = enum_value or string_value - if obj_literal.attributes[1].data_type == "enum": - obj_literal.attributes[1].enum_value = new_value - else: - obj_literal.attributes[1].string_value = new_value - needs_update = True - - if captured_literal["apply_box_alignment_to_all"] and captured_literal["box_alignment"]: - obj_literal.box_alignment = captured_literal["box_alignment"] - needs_update = True - - if needs_update: - core.edit_text(tool.Drawing, obj=obj) - class EnableEditingText(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.enable_editing_text" diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index b56b51751f..eb2c47f1dc 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -38,11 +38,14 @@ def disable_editing_text(drawing: type[tool.Drawing], obj: bpy.types.Object) -> drawing.disable_editing_text(obj) -def edit_text(drawing: type[tool.Drawing], obj: bpy.types.Object) -> None: - drawing.synchronise_ifc_and_text_attributes(obj) - drawing.update_text_size_pset(obj) - drawing.update_text_annotation_properties(obj) - drawing.disable_editing_text(obj) +def edit_text(drawing: type[tool.Drawing], attribute_obj: bpy.types.Object, apply_objs: list[bpy.types.Object]) -> None: + literal_attributes = drawing.export_text_literal_attributes(attribute_obj) + for obj in apply_objs: + drawing.edit_text_literals(obj, literal_attributes) + # TODO: font size should be part of a separate set of formatting controls, not part of text editing + drawing.update_text_size_pset(obj) + drawing.update_text_annotation_properties(obj) + drawing.disable_editing_text(obj) def enable_editing_assigned_product(drawing: type[tool.Drawing], obj: bpy.types.Object) -> None: diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index 19395fa449..a34de4d4fe 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -402,7 +402,6 @@ class Drawing: def setup_shading_styles_path(cls, resource_path): pass def show_decorations(cls): pass def sync_object_placement(cls, obj): pass - def synchronise_ifc_and_text_attributes(cls, obj): pass def update_embedded_svg_location(cls, uri, old_location, new_location): pass def update_text_annotation_properties(cls, obj): pass def update_text_size_pset(cls, obj): pass diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 51d06c1c18..a0a45b403a 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -835,43 +835,12 @@ class Drawing(bonsai.core.tool.Drawing): return props.is_editing_sheets @classmethod - def synchronise_ifc_and_text_attributes(cls, obj: bpy.types.Object) -> None: + def edit_text_literals(cls, obj: bpy.types.Object, literal_attributes: dict) -> None: assert (element := tool.Ifc.get_entity(obj)) assert (rep := cls.get_annotation_representation(element)) - - old_literals = cls.get_text_literal(obj, return_list=True) - assert isinstance(old_literals, list) - literals_attributes = cls.export_text_literal_attributes(obj) - props = cls.get_text_props(obj) - defined_ifc_ids = [l.ifc_definition_id for l in props.literals] - ifc_file = tool.Ifc.get() - - added_literals: list[ifcopenshell.entity_instance] = [] - new_literals: list[ifcopenshell.entity_instance] = [] - for ifc_definition_id, attributes in zip(defined_ifc_ids, literals_attributes): - # making sure all literals from text edit exist in ifc - if ifc_definition_id == 0: - literal = cls.add_literal(**attributes) - added_literals.append(literal) - else: - literal = ifc_file.by_id(ifc_definition_id) - ifcopenshell.api.drawing.edit_text_literal( - ifc_file, - text_literal=literal, - attributes=attributes, - ) - new_literals.append(literal) - - removed_literals = set(old_literals) - set(new_literals) - - # Add new literals and keep the order as defined in text props. - items = [i for i in rep.Items if i not in removed_literals] + added_literals - items.sort(key=lambda x: new_literals.index(x) if x in new_literals else -1) - rep.Items = items - - # Remove from ifc the literals that were removed during the edit. - for literal in removed_literals: - ifcopenshell.util.element.remove_deep2(ifc_file, literal) + for literal in cls.get_text_literal(obj, return_list=True): + ifcopenshell.util.element.remove_deep2(tool.Ifc.get(), literal) + rep.Items = [cls.add_literal(**a) for a in literal_attributes] @classmethod def add_literal(cls, **attributes: str) -> ifcopenshell.entity_instance: From fdf23ece8576a14473a462713243f84dfbc0ff73 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 3 Feb 2026 18:20:49 +1100 Subject: [PATCH 634/657] Fix #7632. See #2824. Optimise vertex matching trick for IfcIndexedColourMap. --- src/bonsai/bonsai/tool/loader.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index 8b14de9362..d81fec5fd2 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -39,6 +39,7 @@ import numpy as np import numpy.typing as npt from ifcopenshell.util.shape_builder import np_to_4d from mathutils import Matrix, Vector +from mathutils.kdtree import KDTree import bonsai.bim.import_ifc import bonsai.core.tool @@ -562,7 +563,18 @@ class Loader(bonsai.core.tool.Loader): bm_verts = np.array([v.co for v in bm.verts]) coords_scaled = np.array(faceset.Coordinates.CoordList) * si_conversion - coordinates_remap = [np.argmin(np.sum((bm_verts - co) ** 2, axis=1)) for co in coords_scaled] + # See #2824. IfcIndexedColourMap is not natively handled by IfcOpenShell + # As a result, we map IFC coords to Blender coords (highly wasteful but...) + # coordinates_remap = [np.argmin(np.sum((bm_verts - co) ** 2, axis=1)) for co in coords_scaled] + # Because this is O(N*M), here is a faster KDTree implementation. + kd = KDTree(len(bm_verts)) + for i, v in enumerate(bm_verts): + kd.insert((float(v[0]), float(v[1]), float(v[2])), i) + kd.balance() + coordinates_remap = np.empty(len(coords_scaled), dtype=np.int32) + for j, co in enumerate(coords_scaled): + _co, index, _dist = kd.find((float(co[0]), float(co[1]), float(co[2]))) + coordinates_remap[j] = index # ifc indices start with 1 remap_verts_to_blender = lambda ifc_verts: [coordinates_remap[i - 1] for i in ifc_verts] From 9dff1441d7b61fa396fedd5f891521695ec37abd Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 3 Feb 2026 18:23:39 +1100 Subject: [PATCH 635/657] See #7632. See #5848. Just disable indexed colour map loading for now, it's pretty rare. Famous last words, at least the KDTree implementation is much faster. --- src/bonsai/bonsai/bim/module/project/prop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/project/prop.py b/src/bonsai/bonsai/bim/module/project/prop.py index ea5c9c843a..1c62c98d61 100644 --- a/src/bonsai/bonsai/bim/module/project/prop.py +++ b/src/bonsai/bonsai/bim/module/project/prop.py @@ -370,7 +370,7 @@ class BIMProjectProperties(PropertyGroup): load_indexed_maps: BoolProperty( name="Load Indexed Maps", description="Load indexed maps (UV and color maps)", - default=True, + default=False, # Very slow and hackishly implemented ) links: CollectionProperty(name="Links", type=Link) active_link_index: IntProperty(name="Active Link Index") From 95cc52a6f36ca230c3fd41646b5e281420e746c6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 3 Feb 2026 12:28:37 +0500 Subject: [PATCH 636/657] bonsai - revive very important chaching sound `get_data_dir_path` doesn't have `filename` argument, therefore leading to an error --- src/bonsai/bonsai/tool/cost.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/bonsai/bonsai/tool/cost.py b/src/bonsai/bonsai/tool/cost.py index 771b15f43e..06e3de6779 100644 --- a/src/bonsai/bonsai/tool/cost.py +++ b/src/bonsai/bonsai/tool/cost.py @@ -151,17 +151,14 @@ class Cost(bonsai.core.tool.Cost): # TODO: make pitch higher as costs rise try: import aud + except ImportError: + return # ah well - device = aud.Device() - # chaching.mp3 is by Lucish_ CC-BY-3.0 https://freesound.org/people/Lucish_/sounds/554841/ - sound = aud.Sound(tool.Blender.get_data_dir_path(filename="chaching.mp3").__str__()) - handle = device.play(sound) - sound_buffered = aud.Sound.buffer(sound) - handle_buffered = device.play(sound_buffered) - handle.stop() - handle_buffered.stop() - except: - pass # ah well + device = aud.Device() + # chaching.mp3 is by Lucish_ CC-BY-3.0 https://freesound.org/people/Lucish_/sounds/554841/ + filepath = tool.Blender.get_data_dir_path("chaching.mp3").__str__() + sound = aud.Sound(filepath) + device.play(sound) @classmethod def load_cost_schedule_tree(cls) -> None: From 015431fa1f2395c0fd6efbc148534de7c88a257c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 3 Feb 2026 12:31:11 +0500 Subject: [PATCH 637/657] bonsai - drop unrelated pypi `aud` module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Turned out `aud` module we had in our makefile had nothing to do with Blender built-in `uad` module 🫣 So no need to install anything from PyPI since this module is generally available in Blender --- .github/workflows/ci.yml | 1 - src/bonsai/Makefile | 3 --- src/bonsai/bonsai/tool/cost.py | 6 +----- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a2fe8ce5d..65031e83d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,7 +53,6 @@ jobs: python -m pip install --upgrade pip pip install xmlschema xsdata numpy lxml pytest isodate lark networkx tabulate python-dateutil shapely pip install src/bcf --no-deps - pip install git+https://github.com/zdhoward/aud pip install pytest-xdist==3.8.0 - name: Install C++ dependencies diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 133920bd00..864d522927 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -145,9 +145,6 @@ endif cd ../ifc5d && make dist && mv dist/*.whl ../bonsai/build/wheels/ cd ../ifccityjson && make dist && mv dist/*.whl ../bonsai/build/wheels/ cd build && . env/$(VENV_ACTIVATE) && $(PIP) download GitPython --dest=./wheels - # Provides audio playback for costing - # This is a REALLY IMPORTANT feature - cd build && . env/$(VENV_ACTIVATE) && $(PIP) wheel git+https://github.com/zdhoward/aud --wheel-dir=./wheels # IfcOpenShell dependency - support for new typing features cd build && . env/$(VENV_ACTIVATE) && $(PIP) download typing_extensions --dest=./wheels # Required by IfcCSV diff --git a/src/bonsai/bonsai/tool/cost.py b/src/bonsai/bonsai/tool/cost.py index 06e3de6779..3dcbb8e32c 100644 --- a/src/bonsai/bonsai/tool/cost.py +++ b/src/bonsai/bonsai/tool/cost.py @@ -23,6 +23,7 @@ from collections.abc import Generator from pathlib import Path from typing import TYPE_CHECKING, Any, Literal, Optional, Union, assert_never +import aud import bpy import ifcopenshell.api import ifcopenshell.api.cost @@ -149,11 +150,6 @@ class Cost(bonsai.core.tool.Cost): @classmethod def play_chaching_sound(cls) -> None: # TODO: make pitch higher as costs rise - try: - import aud - except ImportError: - return # ah well - device = aud.Device() # chaching.mp3 is by Lucish_ CC-BY-3.0 https://freesound.org/people/Lucish_/sounds/554841/ filepath = tool.Blender.get_data_dir_path("chaching.mp3").__str__() From abf0d6f81a8cb678cb3065b9675cd64d7f27553b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 3 Feb 2026 12:32:11 +0500 Subject: [PATCH 638/657] bonsai chaching - save ears for those running the tests --- src/bonsai/bonsai/tool/cost.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/tool/cost.py b/src/bonsai/bonsai/tool/cost.py index 3dcbb8e32c..663b16040e 100644 --- a/src/bonsai/bonsai/tool/cost.py +++ b/src/bonsai/bonsai/tool/cost.py @@ -144,7 +144,8 @@ class Cost(bonsai.core.tool.Cost): @classmethod def play_sound(cls) -> None: - if tool.Blender.get_addon_preferences().should_play_chaching_sound: + # Save ears for those running the tests in background mode. + if tool.Blender.get_addon_preferences().should_play_chaching_sound and not bpy.app.background: cls.play_chaching_sound() # lol @classmethod From d6b636909f86b12e58aac14d873bd7b05a17bea9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 3 Feb 2026 12:42:15 +0500 Subject: [PATCH 639/657] bonsai Makefile - revert d745882 Since https://github.com/LBNL-ETA/pyradiance/issues/56 is resolved now. --- src/bonsai/Makefile | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 864d522927..6b4704b7b3 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -205,23 +205,12 @@ endif cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pytz --dest=./wheels cd build && . env/$(VENV_ACTIVATE) && $(PIP) download tzfpy $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels # pyradiance is using different platform versions than defaults in our makefile. - # Temporary use `pyradiance_py313` until https://github.com/LBNL-ETA/pyradiance/issues/53 is resolved. -ifeq ($(PYVERSION), py313) -ifeq ($(PLATFORM), linux) - cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 --platform manylinux_2_28_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels -else ifeq ($(PLATFORM), macos) - cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 --platform macosx_10_13_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels -else - cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance_py313 $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels -endif -else ifeq ($(PLATFORM), linux) cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance --platform manylinux_2_28_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels else ifeq ($(PLATFORM), macos) cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance --platform macosx_10_13_x86_64 --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels else cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels -endif endif # Required by ifctester web ui. cd build && . env/$(VENV_ACTIVATE) && $(PIP) download flask $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels From a62b177b194735b6232fa56de53cf9cbd4f84448 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 3 Feb 2026 19:20:01 +0500 Subject: [PATCH 640/657] Bonsai - fix error drag'n'dropping ifc files in Blender 4.5.6 Example error: ``` Error: Couldn't find IFC file: 'L:/OD_Cool_Car_Guys.ifc'. Traceback (most recent call last): File "\Blender Foundation\Blender\4.5\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\project\operator.py", line 2759, in invoke return bpy.ops.bim.load_project(filepath=(filepath / clean_up_path(self.files[0].name)).as_posix()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "\blender-4.5.6-lts.a78963ed6435\4.5\scripts\modules\bpy\ops.py", line 109, in __call__ ret = _op_call(self.idname_py(), kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: Error: Couldn't find IFC file: 'L:/OD_Cool_Car_Guys.ifc'. ``` --- src/bonsai/bonsai/bim/module/project/operator.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 8fad709de3..b6f63f13ca 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -2735,17 +2735,27 @@ class IFCFileHandlerOperator(bpy.types.Operator): # Keeping code in .invoke() as we'll probably add some # popup windows later. + def clean_up_path(path: str) -> str: + # In Blender 4.5.6 there was a bug producing unncesseary double slash prefix + # breaking the paths. Issue is not present in 5.0+ and presumably will be solved in 4.5.7 too. + # https://projects.blender.org/blender/blender/issues/153822 + if bpy.app.version == (4, 5, 6): + blender_prefix = "//" + if path.startswith(blender_prefix): + return path.removeprefix(blender_prefix) + return path + # `files` contain only .ifc files. filepath = Path(self.directory) # If user is just drag'n'dropping a single file -> load it as a new project, # if they're holding ALT -> link the file/files to the current project. if event.alt: # Passing self.files directly results in TypeError. - serialized_files = [{"name": f.name} for f in self.files] + serialized_files = [{"name": clean_up_path(f.name)} for f in self.files] return bpy.ops.bim.link_ifc(directory=self.directory, files=serialized_files) else: if len(self.files) == 1: - return bpy.ops.bim.load_project(filepath=(filepath / self.files[0].name).as_posix()) + return bpy.ops.bim.load_project(filepath=(filepath / clean_up_path(self.files[0].name)).as_posix()) else: self.report( {"INFO"}, From 95480a231c9f3404130207a31809a7235a242002 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Feb 2026 18:00:01 +0500 Subject: [PATCH 641/657] Move handling legacy mathutils buffer types to separate methods --- .../bonsai/bim/module/drawing/decoration.py | 32 ++++++++----------- src/bonsai/bonsai/tool/blender.py | 31 +++++++++++++++++- src/bonsai/bonsai/tool/geometry.py | 5 ++- src/bonsai/bonsai/tool/ifc.py | 21 ++++-------- src/bonsai/test/tool/test_geometry.py | 4 +-- 5 files changed, 54 insertions(+), 39 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 0a6bc967bf..705fabfcf9 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -1762,40 +1762,34 @@ class CutDecorator: shader.uniform_float("color", color) batch.draw(shader) - def cache_camera_matrix(self): + def cache_camera_matrix(self) -> None: + assert bpy.context.scene and bpy.context.scene.camera obj = bpy.context.scene.camera - # Explicit `dtype` for Blender <5.0 compatibility. DecoratorData.camera_location_checksum = repr( - np.array(obj.matrix_world.translation, dtype=np.float32).tobytes() + tool.Blender.np_array_legacy(obj.matrix_world.translation).tobytes() ) - DecoratorData.camera_rotation_checksum = repr(np.array(obj.matrix_world.to_3x3(), dtype=np.float32).tobytes()) + DecoratorData.camera_rotation_checksum = repr(tool.Blender.np_array_legacy(obj.matrix_world.to_3x3()).tobytes()) - def is_camera_moved(self): + def is_camera_moved(self) -> bool: if not DecoratorData.camera_location_checksum: self.cache_camera_matrix() return True # Let's be conservative + + assert bpy.context.scene and bpy.context.scene.camera obj = bpy.context.scene.camera # Handle both old float64 and new float32 checksums for version compatibility - loc_checksum_bytes = eval(DecoratorData.camera_location_checksum) - if len(loc_checksum_bytes) == 24: # Old format: 3 * 8 bytes (float64) - loc_check = np.frombuffer(loc_checksum_bytes, dtype=np.float64).astype(np.float32) - else: # New format: 3 * 4 bytes (float32) - loc_check = np.frombuffer(loc_checksum_bytes, dtype=np.float32) - - loc_real = np.array(obj.matrix_world.translation, dtype=np.float32).flatten() + loc_checksum_bytes: bytes = eval(DecoratorData.camera_location_checksum) + loc_check = tool.Blender.np_frombuffer_legacy(loc_checksum_bytes, 3) + loc_real = tool.Blender.np_array_legacy(obj.matrix_world.translation) if not np.allclose(loc_check, loc_real, atol=1e-4): # 0.1 mm self.cache_camera_matrix() return True # Handle both old float64 and new float32 checksums for version compatibility - rot_checksum_bytes = eval(DecoratorData.camera_rotation_checksum) - if len(rot_checksum_bytes) == 72: # Old format: 9 * 8 bytes (float64) - rot_check = np.frombuffer(rot_checksum_bytes, dtype=np.float64).astype(np.float32).reshape(3, 3) - else: # New format: 9 * 4 bytes (float32) - rot_check = np.frombuffer(rot_checksum_bytes, dtype=np.float32).reshape(3, 3) - - rot_real = np.array(obj.matrix_world.to_3x3(), dtype=np.float32) + rot_checksum_bytes: bytes = eval(DecoratorData.camera_rotation_checksum) + rot_check = tool.Blender.np_frombuffer_legacy(rot_checksum_bytes, 9) + rot_real = tool.Blender.np_array_legacy(obj.matrix_world.to_3x3()) rot_dot = np.dot(rot_check, rot_real.T) angle_rad = np.arccos(np.clip((np.trace(rot_dot) - 1) / 2, -1, 1)) if angle_rad > 0.0017453292519943296: # 0.1 degrees diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index d4491e104a..b78772fbc5 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -49,7 +49,7 @@ import ifcopenshell.util.element import numpy as np import numpy.typing as npt from ifcopenshell import entity_instance -from mathutils import Vector +from mathutils import Matrix, Vector import bonsai.bim import bonsai.core.tool @@ -2127,3 +2127,32 @@ class Blender(bonsai.core.tool.Blender): if cls.BLENDER_5: return "BLENDER_EEVEE" return "BLENDER_EEVEE_NEXT" + + @classmethod + def np_frombuffer_legacy(cls, bytedata: bytes, n: int) -> npt.NDArray[np.float32]: + """ + Read ``n`` float values from ``bytedata``, regardless if they are stored as ``float32`` or ``float64``. + Needed to support .blend files saved in Blender <5.0.0. + Also allows to work with .blend files from 5.0.0+ in older Blender versions. + + In ``bpy.app.version >= 5.0.0`` ``mathutils`` transitioned to use ``float32`` buffer type, + while in previous version they were using ``float64``. + In some cases we are storing raw bytes (e.g. object transforms cheksums), so old .blend files + might still have ``float64`` data stored. + + See https://projects.blender.org/blender/blender/issues/149283 + """ + if len(bytedata) == (n * 2): + return np.frombuffer(bytedata, dtype=np.float64).astype(np.float32) + return np.frombuffer(bytedata, dtype=np.float32) + + @classmethod + def np_array_legacy(cls, mathutils_type: Union[Vector, Matrix]) -> npt.NDArray[np.float32]: + """ + Converts ``mathutils`` types to ``np.float32`` arrays, regardless of Blender version. + + See ``np_frombuffer_legacy`` for more details. + """ + if cls.BLENDER_5: + return np.array(mathutils_type) + return np.array(mathutils_type, dtype=np.float32) diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index 5a6429adfe..13ec6695d2 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -1152,9 +1152,8 @@ class Geometry(bonsai.core.tool.Geometry): def record_object_position(cls, obj: bpy.types.Object) -> None: # These are recorded separately because they have different numerical tolerances props = tool.Blender.get_object_bim_props(obj) - # Explicit dtype for Blender <5.0 compatibility. - props.location_checksum = repr(np.array(obj.matrix_world.translation, dtype=np.float32).tobytes()) - props.rotation_checksum = repr(np.array(obj.matrix_world.to_3x3(), dtype=np.float32).tobytes()) + props.location_checksum = repr(tool.Blender.np_array_legacy(obj.matrix_world.translation).tobytes()) + props.rotation_checksum = repr(tool.Blender.np_array_legacy(obj.matrix_world.to_3x3()).tobytes()) @classmethod def remove_connection(cls, connection: ifcopenshell.entity_instance) -> None: diff --git a/src/bonsai/bonsai/tool/ifc.py b/src/bonsai/bonsai/tool/ifc.py index 81c5202c19..8cbd2a112b 100644 --- a/src/bonsai/bonsai/tool/ifc.py +++ b/src/bonsai/bonsai/tool/ifc.py @@ -115,24 +115,17 @@ class Ifc(bonsai.core.tool.Ifc): return True # Let's be conservative # Handle both old float64 and new float32 checksums for version compatibility - loc_checksum_bytes = eval(oprops.location_checksum) - if len(loc_checksum_bytes) == 24: # Old format: 3 * 8 bytes (float64) - loc_check = np.frombuffer(loc_checksum_bytes, dtype=np.float64).astype(np.float32) - else: # New format: 3 * 4 bytes (float32) - loc_check = np.frombuffer(loc_checksum_bytes, dtype=np.float32) - - loc_real = np.array(obj.matrix_world.translation, dtype=np.float32).flatten() + loc_checksum_bytes: bytes = eval(oprops.location_checksum) + loc_check = tool.Blender.np_frombuffer_legacy(loc_checksum_bytes, 3) + loc_real = tool.Blender.np_array_legacy(obj.matrix_world.translation) if not np.allclose(loc_check, loc_real, atol=1e-4): # 0.1 mm return True # Handle both old float64 and new float32 checksums for version compatibility - rot_checksum_bytes = eval(oprops.rotation_checksum) - if len(rot_checksum_bytes) == 72: # Old format: 9 * 8 bytes (float64) - rot_check = np.frombuffer(rot_checksum_bytes, dtype=np.float64).astype(np.float32).reshape(3, 3) - else: # New format: 9 * 4 bytes (float32) - rot_check = np.frombuffer(rot_checksum_bytes, dtype=np.float32).reshape(3, 3) - - rot_real = np.array(obj.matrix_world.to_3x3(), dtype=np.float32) + rot_checksum_bytes: bytes = eval(oprops.rotation_checksum) + rot_check = tool.Blender.np_frombuffer_legacy(rot_checksum_bytes, 9) + rot_check = rot_check.reshape(3, 3) + rot_real = tool.Blender.np_array_legacy(obj.matrix_world.to_3x3()) rot_dot = np.dot(rot_check, rot_real.T) angle_rad = np.arccos(np.clip((np.trace(rot_dot) - 1) / 2, -1, 1)) if angle_rad > 0.0017453292519943296: # 0.1 degrees diff --git a/src/bonsai/test/tool/test_geometry.py b/src/bonsai/test/tool/test_geometry.py index 34300f2405..424e1fd876 100644 --- a/src/bonsai/test/tool/test_geometry.py +++ b/src/bonsai/test/tool/test_geometry.py @@ -323,8 +323,8 @@ class TestRecordObjectPosition(NewFile): obj = bpy.data.objects.new("Object", None) props = tool.Blender.get_object_bim_props(obj) subject.record_object_position(obj) - assert props.location_checksum == repr(np.array(obj.matrix_world.translation, dtype=np.float32).tobytes()) - assert props.rotation_checksum == repr(np.array(obj.matrix_world.to_3x3(), dtype=np.float32).tobytes()) + assert props.location_checksum == repr(tool.Blender.np_array_legacy(obj.matrix_world.translation).tobytes()) + assert props.rotation_checksum == repr(tool.Blender.np_array_legacy(obj.matrix_world.to_3x3()).tobytes()) class TestRemoveConnection(NewFile): From 50d00eba2031a2b571fd391d49394bd570868fa5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Feb 2026 18:00:07 +0500 Subject: [PATCH 642/657] black . --- src/bonsai/bonsai/bim/module/model/profile.py | 3 +-- src/bonsai/bonsai/bim/module/project/prop.py | 2 +- src/bonsai/bonsai/bim/module/root/data.py | 4 ++-- src/bonsai/bonsai/bim/module/root/operator.py | 4 +++- src/bonsai/bonsai/bim/module/system/operator.py | 17 ++++++++--------- src/bonsai/bonsai/bim/module/system/ui.py | 4 +++- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/profile.py b/src/bonsai/bonsai/bim/module/model/profile.py index 0a11fa191b..572898c484 100644 --- a/src/bonsai/bonsai/bim/module/model/profile.py +++ b/src/bonsai/bonsai/bim/module/model/profile.py @@ -1136,8 +1136,7 @@ class DrawPolylineProfile(bpy.types.Operator, PolylineOperator, tool.Ifc.Operato DumbProfileJoiner().join_V(profile2["obj"], profile1["obj"]) if connect_IfcFlowSegments: bpy.ops.bim.mep_connect_elements( - obj1_name=profile1["obj"].name, - obj2_name=profile2["obj"].name + obj1_name=profile1["obj"].name, obj2_name=profile2["obj"].name ) def modal(self, context, event): diff --git a/src/bonsai/bonsai/bim/module/project/prop.py b/src/bonsai/bonsai/bim/module/project/prop.py index 1c62c98d61..08859af1f9 100644 --- a/src/bonsai/bonsai/bim/module/project/prop.py +++ b/src/bonsai/bonsai/bim/module/project/prop.py @@ -370,7 +370,7 @@ class BIMProjectProperties(PropertyGroup): load_indexed_maps: BoolProperty( name="Load Indexed Maps", description="Load indexed maps (UV and color maps)", - default=False, # Very slow and hackishly implemented + default=False, # Very slow and hackishly implemented ) links: CollectionProperty(name="Links", type=Link) active_link_index: IntProperty(name="Active Link Index") diff --git a/src/bonsai/bonsai/bim/module/root/data.py b/src/bonsai/bonsai/bim/module/root/data.py index 50f3248d8f..7adf7b5fb9 100644 --- a/src/bonsai/bonsai/bim/module/root/data.py +++ b/src/bonsai/bonsai/bim/module/root/data.py @@ -172,7 +172,7 @@ class IfcClassData: ), ) ) - if (ifc_class and "IfcCableCarrierSegment" in ifc_class): + if ifc_class and "IfcCableCarrierSegment" in ifc_class: templates.extend( ( ( @@ -182,7 +182,7 @@ class IfcClassData: ), ) ) - + if ifc_class.endswith("Type") or ifc_class.endswith("Style"): templates.extend( [ diff --git a/src/bonsai/bonsai/bim/module/root/operator.py b/src/bonsai/bonsai/bim/module/root/operator.py index 983429d311..ac766172bd 100644 --- a/src/bonsai/bonsai/bim/module/root/operator.py +++ b/src/bonsai/bonsai/bim/module/root/operator.py @@ -703,7 +703,9 @@ class AddElement(bpy.types.Operator, tool.Ifc.Operator): default_thickness = 0.005 default_inner_fillet_radius = 0.005 default_outer_fillet_radius = 0.005 - profile_name = f"{props.ifc_class}-{default_x_dim*1000}x{default_y_dim*1000}x{default_thickness*1000}" + profile_name = ( + f"{props.ifc_class}-{default_x_dim*1000}x{default_y_dim*1000}x{default_thickness*1000}" + ) profile = tool.Ifc.get().create_entity( "IfcRectangleHollowProfileDef", ProfileName=profile_name, diff --git a/src/bonsai/bonsai/bim/module/system/operator.py b/src/bonsai/bonsai/bim/module/system/operator.py index 18e8d91d88..089bd9f24b 100644 --- a/src/bonsai/bonsai/bim/module/system/operator.py +++ b/src/bonsai/bonsai/bim/module/system/operator.py @@ -488,12 +488,11 @@ class EstablishPathDirection(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): connected_port = tool.Ifc.get().by_id(self.port_id) - - + if not connected_port or not connected_port.is_a("IfcDistributionPort"): self.report({"ERROR"}, "Invalid port specified.") return {"CANCELLED"} - + direction_map = { "SOURCE": "SINK", "SINK": "SOURCE", @@ -503,28 +502,28 @@ class EstablishPathDirection(bpy.types.Operator, tool.Ifc.Operator): next_element = tool.System.get_port_relating_element(connected_port) ports = tool.System.get_ports(next_element) segments_processed = 0 - while (len(ports) == 2): + while len(ports) == 2: if ports[0].id() == connected_port.id(): other_port = ports[1] else: other_port = ports[0] - + new_direction = direction_map.get(connected_port.FlowDirection, "NOTDEFINED") other_port.FlowDirection = new_direction segments_processed += 1 - + connected_port = tool.System.get_connected_port(other_port) if not connected_port: break connected_port.FlowDirection = direction_map.get(other_port.FlowDirection, "NOTDEFINED") next_element = tool.System.get_port_relating_element(connected_port) - + if not next_element.is_a("IfcFlowSegment"): print(f"DEBUG: next_element is not IfcFlowSegment, stopping") break - + ports = tool.System.get_ports(next_element) - + self.report({"INFO"}, f"Established path direction through {segments_processed} flow segment(s).") return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/system/ui.py b/src/bonsai/bonsai/bim/module/system/ui.py index a3d73c10f6..e8f8b7daeb 100644 --- a/src/bonsai/bonsai/bim/module/system/ui.py +++ b/src/bonsai/bonsai/bim/module/system/ui.py @@ -333,7 +333,9 @@ class BIM_PT_port(Panel): else: cols[7].label(text="", icon="BLANK1") cols[8].label(text="") - cols[9].operator("bim.establish_path_direction", text="", icon="CON_FOLLOWPATH").port_id = connected_port.id() + cols[9].operator("bim.establish_path_direction", text="", icon="CON_FOLLOWPATH").port_id = ( + connected_port.id() + ) else: cols[4].label(text="", icon="BLANK1") cols[5].label(text="", icon="BLANK1") From f10d4602fca23e05dcc62433c70e06ff9e92d609 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Feb 2026 19:21:02 +0500 Subject: [PATCH 643/657] typing --- .../bonsai/bim/module/search/operator.py | 72 ++++++++++--------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index 47e87a3caa..f57a313502 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -45,8 +45,12 @@ import bonsai.tool as tool from bonsai.bim.ifc import IfcStore from bonsai.bim.prop import StrProperty +if TYPE_CHECKING: + from bonsai.bim.prop import BIMFacet -def draw_text_editor_header(self, context): + +def draw_text_editor_header(self: bpy.types.TEXT_HT_header, context: bpy.types.Context) -> None: + assert isinstance(context.space_data, bpy.types.SpaceTextEditor) if context.space_data.text and context.space_data.text.name.startswith("FilterQuery_"): layout = self.layout layout.separator() @@ -160,6 +164,7 @@ class FilterValueSuggestions(Operator): def draw(self, context): layout = self.layout + assert layout filter_groups = tool.Search.get_filter_groups(self.module) ifc_filter = filter_groups[self.group_index].filters[self.filter_index] @@ -202,8 +207,8 @@ class FilterValueSuggestions(Operator): results_are_suggestions=True, ) - def get_suggestions(self, ifc_file, ifc_filter): - suggestions = set() + def get_suggestions(self, ifc_file: ifcopenshell.file, ifc_filter: "BIMFacet") -> set[str]: + suggestions: set[str] = set() if ifc_filter.type == "entity": suggestions = self.get_entity_suggestions(ifc_file) @@ -236,8 +241,8 @@ class FilterValueSuggestions(Operator): return suggestions - def build_hierarchy_path(self, element): - path = [] + def build_hierarchy_path(self, element: ifcopenshell.entity_instance) -> list[str]: + path: list[str] = [] current = element while current: @@ -262,8 +267,8 @@ class FilterValueSuggestions(Operator): return path - def get_entity_suggestions(self, ifc_file): - all_classes = set() + def get_entity_suggestions(self, ifc_file: ifcopenshell.file) -> set[str]: + all_classes: set[str] = set() schema = tool.Ifc.schema() for element_id in IfcStore.id_map.keys(): @@ -273,11 +278,13 @@ class FilterValueSuggestions(Operator): try: entity = schema.declaration_by_name(class_name).as_entity() + assert entity current = entity chain_names = [class_name] while current.supertype(): supertype = current.supertype() + assert supertype chain_names.insert(0, supertype.name()) current = supertype @@ -295,8 +302,8 @@ class FilterValueSuggestions(Operator): return all_classes - def get_type_suggestions(self, ifc_file): - suggestions = set() + def get_type_suggestions(self, ifc_file: ifcopenshell.file) -> set[str]: + suggestions: set[str] = set() for element_type in ifc_file.by_type("IfcTypeObject"): if element_type.Name: hierarchy_path = self.build_hierarchy_path(element_type) @@ -306,15 +313,15 @@ class FilterValueSuggestions(Operator): suggestions.add(element_type.Name) return suggestions - def get_material_suggestions(self, ifc_file): + def get_material_suggestions(self, ifc_file: ifcopenshell.file) -> set[str]: suggestions = set() for material in ifc_file.by_type("IfcMaterial"): if material.Name: suggestions.add(material.Name) return suggestions - def get_location_suggestions(self, ifc_file): - suggestions = set() + def get_location_suggestions(self, ifc_file: ifcopenshell.file) -> set[str]: + suggestions: set[str] = set() for spatial in ifc_file.by_type("IfcSpatialStructureElement"): if spatial.Name: hierarchy_path = self.build_hierarchy_path(spatial) @@ -324,8 +331,8 @@ class FilterValueSuggestions(Operator): suggestions.add(spatial.Name) return suggestions - def get_group_suggestions(self, ifc_file): - suggestions = set() + def get_group_suggestions(self, ifc_file: ifcopenshell.file) -> set[str]: + suggestions: set[str] = set() for group in ifc_file.by_type("IfcGroup"): if group.Name: hierarchy_path = self.build_hierarchy_path(group) @@ -335,15 +342,15 @@ class FilterValueSuggestions(Operator): suggestions.add(group.Name) return suggestions - def get_classification_suggestions(self, ifc_file): - suggestions = set() + def get_classification_suggestions(self, ifc_file: ifcopenshell.file) -> set[str]: + suggestions: set[str] = set() for ref in ifc_file.by_type("IfcClassificationReference"): if ref.Identification: suggestions.add(ref.Identification) return suggestions - def get_parent_suggestions(self, ifc_file): - suggestions = set() + def get_parent_suggestions(self, ifc_file: ifcopenshell.file) -> set[str]: + suggestions: set[str] = set() for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) @@ -371,9 +378,9 @@ class FilterValueSuggestions(Operator): return suggestions - def get_instance_suggestions(self, ifc_file): - suggestions = set() - element_data = [] + def get_instance_suggestions(self, ifc_file: ifcopenshell.file) -> set[str]: + suggestions: set[str] = set() + element_data: list[tuple[str, str]] = [] for element_id in IfcStore.id_map.keys(): try: @@ -392,7 +399,7 @@ class FilterValueSuggestions(Operator): except: continue - display_counts = {} + display_counts: dict[str, int] = {} for display_str, global_id in element_data: display_counts[display_str] = display_counts.get(display_str, 0) + 1 @@ -404,8 +411,8 @@ class FilterValueSuggestions(Operator): return suggestions - def get_property_sets(self, ifc_file): - psets = set() + def get_property_sets(self, ifc_file: ifcopenshell.file) -> set[str]: + psets: set[str] = set() for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) @@ -418,8 +425,8 @@ class FilterValueSuggestions(Operator): continue return psets - def get_property_names(self, ifc_file, pset_name): - property_names = set() + def get_property_names(self, ifc_file: ifcopenshell.file, pset_name: str) -> set[str]: + property_names: set[str] = set() for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) @@ -435,8 +442,8 @@ class FilterValueSuggestions(Operator): continue return property_names - def get_property_values(self, ifc_file, pset_name, property_name): - property_values = set() + def get_property_values(self, ifc_file: ifcopenshell.file, pset_name: str, property_name: str) -> set[str]: + property_values: set[str] = set() for element_id in IfcStore.id_map.keys(): try: element = ifc_file.by_id(element_id) @@ -462,8 +469,8 @@ class FilterValueSuggestions(Operator): continue return property_values - def get_attribute_names(self, ifc_file): - attribute_names = set() + def get_attribute_names(self, ifc_file: ifcopenshell.file) -> set[str]: + attribute_names: set[str] = set() schema = tool.Ifc.schema() ifc_classes = set() @@ -477,6 +484,7 @@ class FilterValueSuggestions(Operator): for ifc_class in ifc_classes: try: entity = schema.declaration_by_name(ifc_class).as_entity() + assert entity attributes = entity.all_attributes() for attr in attributes: attribute_names.add(attr.name()) @@ -485,8 +493,8 @@ class FilterValueSuggestions(Operator): return attribute_names - def get_attribute_values(self, ifc_file, attribute_name): - attribute_values = set() + def get_attribute_values(self, ifc_file: ifcopenshell.file, attribute_name: str) -> set[str]: + attribute_values: set[str] = set() for element_id in IfcStore.id_map.keys(): try: From 2f586d6b9e93c71c7128c3c8c5e66d6361da8ff0 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Feb 2026 19:44:09 +0500 Subject: [PATCH 644/657] bonsai prefs - shorten some description strings for readibility --- src/bonsai/bonsai/bim/ui.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/ui.py b/src/bonsai/bonsai/bim/ui.py index f90d2165fb..d224761609 100644 --- a/src/bonsai/bonsai/bim/ui.py +++ b/src/bonsai/bonsai/bim/ui.py @@ -721,13 +721,20 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): chain_filter_with_set_operations: BoolProperty( name="NEW Filter mode: Enable chained filters with set operations", - description="Enable chaining search filters with set operations: ADD (union: combine sets), SUBTRACT (difference: remove from set), FILTER (intersection: only elements in both sets), with autocomplete suggestions for filter values", + description=( + "Enable chaining search filters with set operations: " + "ADD (union: combine sets), SUBTRACT (difference: remove from set), " + "FILTER (intersection: only elements in both sets), with autocomplete suggestions for filter values" + ), default=False, ) save_metadata_blend_file: BoolProperty( name="Save non ifc data to metadata blend File", - description="Save session data (window layout, settings) to a metadata blend file alongside the IFC file. This file is automatically loaded when opening the project.", + description=( + "Save session data (window layout, settings) to a metadata blend file alongside the IFC file. " + "This file is automatically loaded when opening the project." + ), default=False, ) metadata_blend_file_suffix: StringProperty( From 7411da2ae87a02bda70f5b1f6897d6ad8236d7aa Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Feb 2026 19:46:35 +0500 Subject: [PATCH 645/657] bim.search - fix error when unselectable objects get in the way #7635 --- src/bonsai/bonsai/bim/module/search/operator.py | 9 ++++----- src/bonsai/bonsai/tool/blender.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/search/operator.py b/src/bonsai/bonsai/bim/module/search/operator.py index f57a313502..83f401a122 100644 --- a/src/bonsai/bonsai/bim/module/search/operator.py +++ b/src/bonsai/bonsai/bim/module/search/operator.py @@ -788,11 +788,10 @@ class Search(Operator): ) objs = [obj for e in results if isinstance(obj := tool.Ifc.get_object(e), bpy.types.Object)] - for obj in objs: - tool.Blender.set_object_selection(obj) - if objs: - tool.Blender.set_active_object(objs[0]) - self.report({"INFO"}, f"{len(results)} Results.") + active_object = next(iter(objs), None) + selection = tool.Blender.validate_object_selection(context, active_object, objs) + tool.Blender.set_objects_selection(*selection, clear_previous_selection=False) + self.report({"INFO"}, f"{len(results)} Results, {len(selection.selected_objects)} Objects Selected") return {"FINISHED"} diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index b78772fbc5..80694917a5 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -36,6 +36,7 @@ from typing import ( TYPE_CHECKING, Any, Literal, + NamedTuple, Optional, TypeVar, Union, @@ -718,13 +719,18 @@ class Blender(bonsai.core.tool.Blender): if active_object: active_object.select_set(True) + class ObjectsSelectionArgs(NamedTuple): + context: bpy.types.Context + active_object: bpy.types.Object | None + selected_objects: list[bpy.types.Object] + @classmethod def validate_object_selection( cls, context: bpy.types.Context, active_object: Union[bpy.types.Object, None] = None, selected_objects: Sequence[bpy.types.Object] = (), - ) -> tuple[bpy.types.Context, Union[bpy.types.Object, None], list[bpy.types.Object]]: + ) -> ObjectsSelectionArgs: """Validate object selection and return only valid objects. Can be used before ``set_objects_selection`` to avoid errors @@ -739,7 +745,7 @@ class Blender(bonsai.core.tool.Blender): if active_object and not cls.is_valid_data_block(active_object): active_object = None - return context, active_object, new_selected_objects + return cls.ObjectsSelectionArgs(context, active_object, new_selected_objects) @classmethod def clear_objects_selection(cls) -> None: From 7e1843b96224cd195ac7bcc79ddaa4efbd928083 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Feb 2026 19:49:31 +0500 Subject: [PATCH 646/657] dev_environment - support Blender 5.1 with Python 3.13 --- src/bonsai/scripts/dev_environment.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bonsai/scripts/dev_environment.py b/src/bonsai/scripts/dev_environment.py index d16edad96d..e9a8d2a44f 100644 --- a/src/bonsai/scripts/dev_environment.py +++ b/src/bonsai/scripts/dev_environment.py @@ -78,7 +78,8 @@ BONSAI_PATH = find_bonsai_path() # --------------------------- # Never changed by user. -PACKAGE_PATH = BLENDER_PATH / r"extensions/.local/lib/python3.11/site-packages" +PYTHON_VERSION = "3.13" if BLENDER_VERSION == "5.1" else "3.11" +PACKAGE_PATH = BLENDER_PATH / rf"extensions/.local/lib/python{PYTHON_VERSION}/site-packages" def main() -> None: From 79ef6eb55c337a4804d1480c992eb7148603a14f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Feb 2026 19:55:35 +0500 Subject: [PATCH 647/657] validate_object_selection - fix missing check for active object not present in a view layer --- src/bonsai/bonsai/tool/blender.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 80694917a5..e499f35106 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -740,9 +740,12 @@ class Blender(bonsai.core.tool.Blender): assert context.view_layer view_layer_objects = set(context.view_layer.objects) - new_selected_objects = [o for o in selected_objects if cls.is_valid_data_block(o) and o in view_layer_objects] + def is_selectable(obj: bpy.types.Object) -> bool: + return cls.is_valid_data_block(obj) and obj in view_layer_objects - if active_object and not cls.is_valid_data_block(active_object): + new_selected_objects = [o for o in selected_objects if is_selectable(o)] + + if active_object and not is_selectable(active_object): active_object = None return cls.ObjectsSelectionArgs(context, active_object, new_selected_objects) From a54b21b838edd49636634e78ee44eb6430db86a7 Mon Sep 17 00:00:00 2001 From: Richard Brice <37087370+RickBrice@users.noreply.github.com> Date: Thu, 5 Feb 2026 04:37:58 -0800 Subject: [PATCH 648/657] Fixes documentation and adds test for expected type --- .../api/alignment/_create_offset_curve_representation.py | 7 ++++++- .../ifcopenshell/api/alignment/create_as_offset_curve.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py index 6850013c96..bb3fa6cbe8 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py @@ -28,7 +28,7 @@ def _create_offset_curve_representation( file: ifcopenshell.file, alignment: entity_instance, offsets: Sequence[entity_instance] ) -> None: """ - Create geometric representation for the alignment based on an IfcPolyline + Create geometric representation for the alignment based on an IfcOffsetByDistances curve :param alignment: The alignment for which the representation is being created :return: None @@ -36,6 +36,11 @@ def _create_offset_curve_representation( expected_type = "IfcAlignment" if not alignment.is_a(expected_type): raise TypeError(f"Expected {expected_type} but got {alignment.is_a()}") + + expected_type = "IfcPointByDistaceExpression" + for offset in offsets: + if not offset.is_a(expected_type): + raise TypeError(f"Expected {expected_type} but got {offset.is_a()}") axis_geom_subcontext = ifcopenshell.api.alignment.get_axis_subcontext(file) diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py index b24fb16b29..6ac56af362 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/create_as_offset_curve.py @@ -39,7 +39,7 @@ def create_as_offset_curve( :param file: :param name: name assigned to IfcAlignment.Name - :param offsets: offsets from the basis curve that defines the offset curve, expected to be IfcOffsetCurveByDistances. + :param offsets: offsets from the basis curve that defines the offset curve, expected to be IfcPointByDistanceExpression. :param start_station: station value at the start of the alignment :return: Returns an IfcAlignment """ From 2692341d3ad7c921412b3c8ab7f4f05801207e1f Mon Sep 17 00:00:00 2001 From: Richard Brice <37087370+RickBrice@users.noreply.github.com> Date: Thu, 5 Feb 2026 15:10:33 -0800 Subject: [PATCH 649/657] Fixes typo --- .../api/alignment/_create_offset_curve_representation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py index bb3fa6cbe8..a5675a4dc2 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/alignment/_create_offset_curve_representation.py @@ -37,7 +37,7 @@ def _create_offset_curve_representation( if not alignment.is_a(expected_type): raise TypeError(f"Expected {expected_type} but got {alignment.is_a()}") - expected_type = "IfcPointByDistaceExpression" + expected_type = "IfcPointByDistanceExpression" for offset in offsets: if not offset.is_a(expected_type): raise TypeError(f"Expected {expected_type} but got {offset.is_a()}") From 5e9f97a0c7a7776f744d8ef899042635c2dd96e1 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Feb 2026 16:12:14 +1100 Subject: [PATCH 650/657] Fix #5220. See #7629. See #7505. Reimplement text bulk copying using established copy attribute paradigm. Previously, copy attribution was coupled with text editing. This meant that you couldn't just do something like change the font or alignment without also affecting literals. Now like most apps you can just select bunch of text and change font size etc, using the same UI look and feel that copying attribute has when editing attributes. This refactor also removes the need for explicit props tracking each possible attribute to copy, and the settings collection group. Bulk applying is now done in core with no calls to UI. --- .../bonsai/bim/module/drawing/__init__.py | 2 +- src/bonsai/bonsai/bim/module/drawing/data.py | 4 - .../bonsai/bim/module/drawing/operator.py | 28 ++-- src/bonsai/bonsai/bim/module/drawing/prop.py | 82 ++++------- .../bonsai/bim/module/drawing/svgwriter.py | 11 +- src/bonsai/bonsai/bim/module/drawing/ui.py | 137 ++++++++---------- src/bonsai/bonsai/core/drawing.py | 41 +++++- src/bonsai/bonsai/core/tool.py | 7 +- src/bonsai/bonsai/tool/drawing.py | 73 ++++++---- 9 files changed, 192 insertions(+), 193 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/__init__.py b/src/bonsai/bonsai/bim/module/drawing/__init__.py index 67a9ed0853..9f172ce2bb 100644 --- a/src/bonsai/bonsai/bim/module/drawing/__init__.py +++ b/src/bonsai/bonsai/bim/module/drawing/__init__.py @@ -45,6 +45,7 @@ classes = ( operator.CleanWireframes, operator.ContractSheet, operator.ConvertSVGToDXF, + operator.CopyTextToSelection, operator.CreateDrawing, operator.CreateSheets, operator.DisableAddAnnotationType, @@ -115,7 +116,6 @@ classes = ( prop.BIMCameraProperties, prop.ElementValueRow, prop.LiteralProps, - prop.LiteralApplySettings, prop.BIMTextProperties, prop.BIMAssignedProductProperties, prop.BIMAnnotationProperties, diff --git a/src/bonsai/bonsai/bim/module/drawing/data.py b/src/bonsai/bonsai/bim/module/drawing/data.py index ed457a7bbf..a4396d84c5 100644 --- a/src/bonsai/bonsai/bim/module/drawing/data.py +++ b/src/bonsai/bonsai/bim/module/drawing/data.py @@ -355,8 +355,6 @@ class DecoratorData: font_size = FONT_SIZES[font_size_type] symbol = tool.Drawing.get_annotation_symbol(element) newline_at = pset_data.get("Newline_At", 0) - reverse_list = pset_data.get("Reverse_List", False) - list_separator = pset_data.get("List_Separator") or ", " # other attributes literals = tool.Drawing.get_text_literal(obj, return_list=True) @@ -384,8 +382,6 @@ class DecoratorData: "FontSize": font_size, "Symbol": symbol, "Newline_At": newline_at, - "Reverse_List": reverse_list, - "List_Separator": list_separator, } @classmethod diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 4c52993aa0..d02e4c6c76 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3181,9 +3181,20 @@ class EditText(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.edit_text" bl_label = "Edit Text" bl_description = "Save changes to the text annotation and\ndisable the text editing options" - bl_options = {"REGISTER", "UNDO"} + def _execute(self, context): + core.edit_text(tool.Drawing, obj=tool.Blender.get_active_object()) + tool.Blender.update_viewport() + + +class CopyTextToSelection(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.copy_text_to_selection" + bl_label = "Copy Text To Selection" + bl_description = "Copy text formatting or literals to selected objects" + bl_options = {"REGISTER", "UNDO"} + attribute: bpy.props.StringProperty() + def _execute(self, context): apply_objs = [ obj @@ -3191,7 +3202,12 @@ class EditText(bpy.types.Operator, tool.Ifc.Operator): if (element := tool.Ifc.get_entity(obj)) and tool.Drawing.is_annotation_object_type(element, ["TEXT", "TEXT_LEADER"]) ] - core.edit_text(tool.Drawing, attribute_obj=tool.Blender.get_active_object(), apply_objs=apply_objs) + core.copy_text_to_selection( + tool.Drawing, + attribute=self.attribute, + attribute_obj=tool.Blender.get_active_object(), + apply_objs=apply_objs, + ) tool.Blender.update_viewport() @@ -3207,8 +3223,6 @@ class EnableEditingText(bpy.types.Operator, tool.Ifc.Operator): props = tool.Drawing.get_text_props(obj) core.enable_editing_text(tool.Drawing, obj=obj) - props.ensure_literal_apply_settings(len(props.literals)) - text_element = tool.Ifc.get_entity(obj) assigned_product_entity = tool.Drawing.get_assigned_product(text_element) if text_element else None assigned_product_obj = tool.Ifc.get_object(assigned_product_entity) if assigned_product_entity else None @@ -3297,9 +3311,6 @@ class AddTextLiteral(bpy.types.Operator): box_alignment_mask = [False] * 9 box_alignment_mask[6] = True # bottom_left box_alignment literal_props.box_alignment = box_alignment_mask - - props.ensure_literal_apply_settings(len(props.literals)) - return {"FINISHED"} @@ -3318,9 +3329,6 @@ class RemoveTextLiteral(bpy.types.Operator): props = tool.Drawing.get_text_props(obj) props.literals.remove(self.literal_prop_id) tool.Blender.update_viewport() - - props.ensure_literal_apply_settings(len(props.literals)) - return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/drawing/prop.py b/src/bonsai/bonsai/bim/module/drawing/prop.py index 3b7040bc02..b323b8d41e 100644 --- a/src/bonsai/bonsai/bim/module/drawing/prop.py +++ b/src/bonsai/bonsai/bim/module/drawing/prop.py @@ -872,22 +872,20 @@ class LiteralProps(PropertyGroup): category_for_adding: str -class LiteralApplySettings(PropertyGroup): - literal_index: IntProperty(name="Literal Index") - apply_text_to_all: BoolProperty(name="Apply Text to All", default=False) - apply_path_to_all: BoolProperty(name="Apply Path to All", default=False) - apply_box_alignment_to_all: BoolProperty(name="Apply Box Alignment to All", default=False) - - if TYPE_CHECKING: - literal_index: int - apply_text_to_all: bool - apply_path_to_all: bool - apply_box_alignment_to_all: bool - - class BIMTextProperties(PropertyGroup): is_editing: BoolProperty(name="Is Editing", default=False) literals: CollectionProperty(name="Literals", type=LiteralProps) + newline_at: IntProperty(name="Newline At") + symbol: EnumProperty( # pyright: ignore[reportRedeclaration] + name="Symbol", + description="Symbol from symbols.svg to use for this text.", + items=[(s, s, "") for s in ["NO SYMBOL", "CUSTOM SYMBOL"] + tool.Drawing.DEFAULT_SYMBOLS], + default="NO SYMBOL", + ) + custom_symbol: StringProperty( # pyright: ignore[reportRedeclaration] + name="Custom Symbol", + description="Non-default symbol to use for this text.", + ) font_size: EnumProperty( items=[ ("1.8", "1.8 - Small", ""), @@ -899,52 +897,34 @@ class BIMTextProperties(PropertyGroup): default="2.5", name="Font Size", ) - newline_at: IntProperty(name="Newline At") - reverse_list: BoolProperty(name="Reverse List", description="Reverses the order of any list.", default=False) - list_separator: StringProperty( # pyright: ignore[reportRedeclaration] - name="List Separator", - description="Text used to separate lists. Uses a comma (, ) if empty.", + align_horizontal: EnumProperty( + items=[ + ("left", "Left", "", "ALIGN_LEFT", 0), + ("middle", "Middle", "", "ALIGN_CENTER", 1), + ("right", "Right", "", "ALIGN_RIGHT", 2), + ], + default="left", + name="Horizontal Alignment", ) - symbol: EnumProperty( # pyright: ignore[reportRedeclaration] - name="Symbol", - description="Symbol from symbols.svg to use for this text.", - items=[(s, s, "") for s in ["NO SYMBOL", "CUSTOM SYMBOL"] + tool.Drawing.DEFAULT_SYMBOLS], - default="NO SYMBOL", + align_vertical: EnumProperty( + items=[ + ("top", "Top", "", "ALIGN_TOP", 0), + ("middle", "Middle", "", "ALIGN_MIDDLE", 1), + ("bottom", "Bottom", "", "ALIGN_BOTTOM", 2), + ], + default="middle", + name="Vertical Alignment", ) - custom_symbol: StringProperty( # pyright: ignore[reportRedeclaration] - name="Custom Symbol", - description="Non-default symbol to use for this text.", - ) - - apply_font_size_to_all: BoolProperty( - name="Apply Font Size to All", description="Apply font size changes to all selected text objects", default=False - ) - apply_newline_to_all: BoolProperty( - name="Apply Newline to All", description="Apply newline changes to all selected text objects", default=False - ) - - literal_apply_settings: CollectionProperty(name="Literal Apply Settings", type=LiteralApplySettings) - - def ensure_literal_apply_settings(self, literal_count: int): - """Ensure we have apply settings for all literals""" - while len(self.literal_apply_settings) > literal_count: - self.literal_apply_settings.remove(len(self.literal_apply_settings) - 1) - - while len(self.literal_apply_settings) < literal_count: - setting = self.literal_apply_settings.add() - setting.literal_index = len(self.literal_apply_settings) - 1 if TYPE_CHECKING: is_editing: bool literals: bpy.types.bpy_prop_collection_idprop[LiteralProps] - font_size: str newline_at: int - reverse_list: bool - list_separator: str symbol: Union[str, Literal["NO SYMBOL", "CUSTOM SYMBOL"]] custom_symbol: str - apply_font_size_to_all: bool - apply_newline_to_all: bool + font_size: str + align_horizontal: str + align_vertical: str def get_symbol(self) -> Union[str, None]: if self.symbol == "NO SYMBOL": @@ -979,8 +959,6 @@ class BIMTextProperties(PropertyGroup): "FontSize": float(self.font_size), "Newline_At": int(self.newline_at), "Symbol": self.get_symbol(), - "Reverse_List": self.reverse_list, - "List_Separator": self.list_separator or ", ", } return text_data diff --git a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py index dac8e54a61..ef64fdefc6 100644 --- a/src/bonsai/bonsai/bim/module/drawing/svgwriter.py +++ b/src/bonsai/bonsai/bim/module/drawing/svgwriter.py @@ -989,11 +989,6 @@ class SvgWriter: symbol = tool.Drawing.get_annotation_symbol(element) newline_at = tool.Drawing.get_newline_at(element) - # Get reverse_list and list_separator from EPset_Annotation - pset_data = ifcopenshell.util.element.get_pset(element, "EPset_Annotation") or {} - reverse_list = pset_data.get("Reverse_List", False) - list_separator = pset_data.get("List_Separator") or ", " - template_text_fields = [] if symbol: symbol_transform = self.get_symbol_transform(text_position_svg_str, angle, text_obj) @@ -1010,7 +1005,7 @@ class SvgWriter: # NOTE: zip makes sure that we iterate over the shortest list for field, text_literal in zip(template_text_fields, text_literals): field.text = tool.Drawing.replace_text_literal_variables( - text_literal.Literal, product or element, reverse_list, list_separator + text_literal.Literal, product or element ) field.attrib["class"] = classes_str @@ -1030,9 +1025,7 @@ class SvgWriter: line_number = 0 for text_literal in text_literals: - text = tool.Drawing.replace_text_literal_variables( - text_literal.Literal, product or element, reverse_list, list_separator - ) + text = tool.Drawing.replace_text_literal_variables(text_literal.Literal, product or element) text_segments = parse_markdown_it(text) diff --git a/src/bonsai/bonsai/bim/module/drawing/ui.py b/src/bonsai/bonsai/bim/module/drawing/ui.py index 45ae50beb4..556459b8b6 100644 --- a/src/bonsai/bonsai/bim/module/drawing/ui.py +++ b/src/bonsai/bonsai/bim/module/drawing/ui.py @@ -644,58 +644,56 @@ class BIM_PT_text(Panel): row.operator("bim.add_text_literal", icon="ADD", text="Add Literal") else: row.operator("bim.edit_text", icon="CHECKMARK") - row.operator("bim.add_text_literal", icon="ADD", text="") row.operator("bim.disable_editing_text", icon="CANCEL", text="") row = self.layout.row(align=True) row.prop(props, "font_size") - row.prop(props, "apply_font_size_to_all", text="", icon="COPYDOWN") + row.operator("bim.copy_text_to_selection", text="", icon="COPYDOWN").attribute = "FONT_SIZE" + row = self.layout.row() + row.label(text="Alignment") + row.prop(props, "align_horizontal", text="", expand=True) + row.prop(props, "align_vertical", text="", expand=True) + row.operator("bim.copy_text_to_selection", text="", icon="COPYDOWN").attribute = "ALIGNMENT" row = self.layout.row(align=True) row.prop(props, "newline_at") - row = self.layout.row(align=True) - row.prop(props, "reverse_list") - row = self.layout.row(align=True) - row.prop(props, "list_separator") + row.operator("bim.copy_text_to_selection", text="", icon="COPYDOWN").attribute = "WRAP_LENGTH" row = self.layout.row(align=True) row.prop(props, "symbol") if props.symbol == "CUSTOM SYMBOL": row = self.layout.row(align=True) row.prop(props, "custom_symbol", text="") - row.prop(props, "apply_newline_to_all", text="", icon="COPYDOWN") select_op = row.operator("bim.select_similar_text_literal_value", text="", icon="RESTRICT_SELECT_OFF") select_op.literal_value = str(props.newline_at) select_op.attribute_type = "newline" + row.operator("bim.copy_text_to_selection", text="", icon="COPYDOWN").attribute = "SYMBOL" + + row = self.layout.row(align=True) + row.label(text="Literals:") + row.operator("bim.copy_text_to_selection", text="", icon="COPYDOWN").attribute = "LITERALS" + row.operator("bim.add_text_literal", icon="ADD", text="") for i, literal_props in enumerate(props.literals): box = self.layout.box() - - row = box.row(align=True) - row.label(text=f"Literal[{i}]:") - if i > 0: - row.operator("bim.order_text_literal_up", icon="TRIA_UP", text="").literal_prop_id = i - if i < len(props.literals) - 1: - row.operator("bim.order_text_literal_down", icon="TRIA_DOWN", text="").literal_prop_id = i - row.operator("bim.remove_text_literal", icon="X", text="").literal_prop_id = i - - if len(literal_props.attributes) > 0 and i < len(props.literal_apply_settings): + if len(literal_props.attributes): row = box.row(align=True) bonsai.bim.helper.draw_attribute(literal_props.attributes[0], row, enable_search=True) + if i > 0: + row.operator("bim.order_text_literal_up", icon="TRIA_UP", text="").literal_prop_id = i + if i < len(props.literals) - 1: + row.operator("bim.order_text_literal_down", icon="TRIA_DOWN", text="").literal_prop_id = i + row.operator("bim.remove_text_literal", icon="X", text="").literal_prop_id = i expand_icon = "DOWNARROW_HLT" if getattr(literal_props, "show_element_values", False) else "RIGHTARROW" op = row.operator("bim.toggle_element_values_panel", icon=expand_icon, text="") op.literal_prop_id = i - row.prop(props.literal_apply_settings[i], "apply_text_to_all", text="", icon="COPYDOWN") - element = tool.Ifc.get_entity(obj) assigned_element = tool.Drawing.get_assigned_product(element) or element resolved_value = tool.Drawing.replace_text_literal_variables( literal_props.attributes[0].string_value, assigned_element, - props.reverse_list, - props.list_separator, ) row = box.row(align=True) row.label(text="CurrentValue:") @@ -779,8 +777,6 @@ class BIM_PT_text(Panel): else: row.prop(attr, "string_value", text="Path") select_value = attr.string_value - if i < len(props.literal_apply_settings): - row.prop(props.literal_apply_settings[i], "apply_path_to_all", text="", icon="COPYDOWN") other_attributes = [a for a in literal_props.attributes[2:] if a.name != "BoxAlignment"] if other_attributes: @@ -800,10 +796,6 @@ class BIM_PT_text(Panel): col = row.column(align=True) alignment_label_row = col.row(align=True) alignment_label_row.label(text=" Text box alignment:") - if i < len(props.literal_apply_settings): - alignment_label_row.prop( - props.literal_apply_settings[i], "apply_box_alignment_to_all", text="", icon="COPYDOWN" - ) box_alignment_value = ( literal_props.attributes[ @@ -824,61 +816,52 @@ class BIM_PT_text(Panel): props = tool.Drawing.get_text_props(obj) if props.is_editing: - self.draw_text_editing_ui(context) - else: - text_data = DecoratorData.get_text_data(obj) + return self.draw_text_editing_ui(context) + text_data = DecoratorData.get_text_data(obj) - row = self.layout.row() - row.operator("bim.enable_editing_text", icon="GREASEPENCIL") + row = self.layout.row() + row.operator("bim.enable_editing_text", icon="GREASEPENCIL") - row = self.layout.row(align=True) - row.label(text="FontSize") - click_op = row.operator( - "bim.select_similar_text_literal_value", text=str(text_data["FontSize"]), emboss=False - ) - click_op.literal_value = str(text_data["FontSize"]) - click_op.attribute_type = "font_size" - click_op.display_text = str(text_data["FontSize"]) + row = self.layout.row(align=True) + row.label(text="FontSize") + click_op = row.operator("bim.select_similar_text_literal_value", text=str(text_data["FontSize"]), emboss=False) + click_op.literal_value = str(text_data["FontSize"]) + click_op.attribute_type = "font_size" + click_op.display_text = str(text_data["FontSize"]) - row = self.layout.row(align=True) - row.label(text="Newline_At") - click_op = row.operator( - "bim.select_similar_text_literal_value", text=str(text_data["Newline_At"]), emboss=False - ) - click_op.literal_value = str(text_data["Newline_At"]) - click_op.attribute_type = "newline" - click_op.display_text = str(text_data["Newline_At"]) - row = self.layout.row(align=True) - row.label(text="Reverse_List") - row.label(text=str(text_data["Reverse_List"])) - row = self.layout.row(align=True) - row.label(text="List_Separator") - row.label(text=str(text_data["List_Separator"])) + row = self.layout.row(align=True) + row.label(text="Newline_At") + click_op = row.operator( + "bim.select_similar_text_literal_value", text=str(text_data["Newline_At"]), emboss=False + ) + click_op.literal_value = str(text_data["Newline_At"]) + click_op.attribute_type = "newline" + click_op.display_text = str(text_data["Newline_At"]) - for i, literal_data in enumerate(text_data["Literals"]): - box = self.layout.box() - box.label(text=f"Literal[{i}]:") + for i, literal_data in enumerate(text_data["Literals"]): + box = self.layout.box() + box.label(text=f"Literal[{i}]:") - # Combine both approaches: clickable attributes from PR #7292 and display from PR #7106 - for attribute in literal_data: - row = box.row(align=True) - row.label(text=attribute) - click_op = row.operator( - "bim.select_similar_text_literal_value", - text=str(literal_data[attribute]), - emboss=False, - ) - click_op.literal_value = str(literal_data[attribute]) - click_op.literal_index = i - if attribute == "Literal": - click_op.attribute_type = "literal" - elif attribute == "Path": - click_op.attribute_type = "path" - elif attribute == "BoxAlignment": - click_op.attribute_type = "box_alignment" - else: - click_op.attribute_type = "text" - click_op.display_text = str(literal_data[attribute]) + # Combine both approaches: clickable attributes from PR #7292 and display from PR #7106 + for attribute in literal_data: + row = box.row(align=True) + row.label(text=attribute) + click_op = row.operator( + "bim.select_similar_text_literal_value", + text=str(literal_data[attribute]), + emboss=False, + ) + click_op.literal_value = str(literal_data[attribute]) + click_op.literal_index = i + if attribute == "Literal": + click_op.attribute_type = "literal" + elif attribute == "Path": + click_op.attribute_type = "path" + elif attribute == "BoxAlignment": + click_op.attribute_type = "box_alignment" + else: + click_op.attribute_type = "text" + click_op.display_text = str(literal_data[attribute]) class BIM_UL_drawinglist(bpy.types.UIList): diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index eb2c47f1dc..42b0f77fbb 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -38,13 +38,42 @@ def disable_editing_text(drawing: type[tool.Drawing], obj: bpy.types.Object) -> drawing.disable_editing_text(obj) -def edit_text(drawing: type[tool.Drawing], attribute_obj: bpy.types.Object, apply_objs: list[bpy.types.Object]) -> None: - literal_attributes = drawing.export_text_literal_attributes(attribute_obj) +def edit_text(drawing: type[tool.Drawing], obj: bpy.types.Object) -> None: + literal_attributes = drawing.export_text_literal_attributes(obj) + drawing.edit_text_font_size(obj, drawing.export_font_size(obj)) + drawing.edit_text_wrap_length(obj, drawing.export_wrap_length(obj)) + drawing.edit_text_symbol(obj, drawing.export_symbol(obj)) + drawing.edit_text_literals(obj, literal_attributes) + drawing.disable_editing_text(obj) + + +def copy_text_to_selection( + drawing: type[tool.Drawing], + attribute: Literal["FONT_SIZE", "ALIGNMENT", "WRAP_LENGTH", "SYMBOL", "LITERALS"], + attribute_obj: bpy.types.Object, + apply_objs: list[bpy.types.Object], +) -> None: + if attribute == "FONT_SIZE": + data = drawing.export_font_size(attribute_obj) + elif attribute == "ALIGNMENT": + data = drawing.export_alignment(attribute_obj) + elif attribute == "WRAP_LENGTH": + data = drawing.export_wrap_length(attribute_obj) + elif attribute == "SYMBOL": + data = drawing.export_symbol(attribute_obj) + elif attribute == "LITERALS": + data = drawing.export_text_literal_attributes(attribute_obj) for obj in apply_objs: - drawing.edit_text_literals(obj, literal_attributes) - # TODO: font size should be part of a separate set of formatting controls, not part of text editing - drawing.update_text_size_pset(obj) - drawing.update_text_annotation_properties(obj) + if attribute == "FONT_SIZE": + drawing.edit_text_font_size(obj, data) + elif attribute == "ALIGNMENT": + drawing.edit_text_alignment(obj, data) + elif attribute == "WRAP_LENGTH": + drawing.edit_text_wrap_length(obj, data) + elif attribute == "SYMBOL": + drawing.edit_text_symbol(obj, data) + elif attribute == "LITERALS": + drawing.edit_text_literals(obj, data) drawing.disable_editing_text(obj) diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index a34de4d4fe..a0b6290b12 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -334,6 +334,11 @@ class Drawing: def disable_editing_sheets(cls): pass def disable_editing_text(cls, obj): pass def does_file_exist(cls, uri): pass + def edit_text_alignment(cls, obj, alignment): pass + def edit_text_font_size(cls, obj, size): pass + def edit_text_literals(cls, obj, literals): pass + def edit_text_symbol(cls, obj, symbol): pass + def edit_text_wrap_length(cls, obj, wrap_length): pass def enable_editing(cls, obj): pass def enable_editing_assigned_product(cls, obj): pass def enable_editing_drawings(cls): pass @@ -403,8 +408,6 @@ class Drawing: def show_decorations(cls): pass def sync_object_placement(cls, obj): pass def update_embedded_svg_location(cls, uri, old_location, new_location): pass - def update_text_annotation_properties(cls, obj): pass - def update_text_size_pset(cls, obj): pass @interface diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index a0a45b403a..3b98b92611 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -608,6 +608,25 @@ class Drawing(bonsai.core.tool.Drawing): literals.append(literal_data) return literals + @classmethod + def export_font_size(cls, obj: bpy.types.Object) -> str: + return float(cls.get_text_props(obj).font_size) + + @classmethod + def export_alignment(cls, obj: bpy.types.Object) -> str: + props = cls.get_text_props(obj) + if (alignment := props.align_vertical + "-" + props.align_horizontal) == "middle-middle": + return "center" + return alignment + + @classmethod + def export_wrap_length(cls, obj: bpy.types.Object) -> str: + return cls.get_text_props(obj).newline_at + + @classmethod + def export_symbol(cls, obj: bpy.types.Object) -> str: + return cls.get_text_props(obj).get_symbol() + @classmethod def create_annotation_context( cls, target_view: str, object_type: Optional[str] = None @@ -1181,8 +1200,6 @@ class Drawing(bonsai.core.tool.Drawing): props.font_size = str(text_data["FontSize"]) props.newline_at = text_data["Newline_At"] props.set_symbol(text_data["Symbol"]) - props.reverse_list = text_data["Reverse_List"] - props.list_separator = text_data["List_Separator"] @classmethod def import_assigned_product(cls, obj: bpy.types.Object) -> None: @@ -1279,7 +1296,7 @@ class Drawing(bonsai.core.tool.Drawing): props.should_draw_decorations = True @classmethod - def update_text_size_pset(cls, obj: bpy.types.Object) -> None: + def edit_text_font_size(cls, obj: bpy.types.Object, font_size: float) -> None: """updates pset `EPset_Annotation.Classes` value based on current font size from `obj.BIMTextProperties.font_size` """ @@ -1289,8 +1306,9 @@ class Drawing(bonsai.core.tool.Drawing): element = tool.Ifc.get_entity(obj) assert element # updating text font size in EPset_Annotation.Classes - font_size = float(props.font_size) + print("we got", font_size, repr(font_size)) font_size_str = next((key for key in FONT_SIZES if FONT_SIZES[key] == font_size), None) + print("so", font_size_str) classes = ifcopenshell.util.element.get_pset(element, "EPset_Annotation", "Classes") assert isinstance(classes, Union[str, None]) classes_split = classes.split() if classes else [] @@ -1310,34 +1328,32 @@ class Drawing(bonsai.core.tool.Drawing): pset = tool.Pset.get_element_pset(element, "EPset_Annotation") if not pset: pset = ifcopenshell.api.pset.add_pset(ifc_file, product=element, name="EPset_Annotation") - ifcopenshell.api.pset.edit_pset( - ifc_file, - pset=pset, - properties={"Classes": classes}, - ) + ifcopenshell.api.pset.edit_pset(ifc_file, pset=pset, properties={"Classes": classes}) @classmethod - def update_text_annotation_properties(cls, obj: bpy.types.Object) -> None: - """Update all EPset_Annotation properties from the text props""" - props = cls.get_text_props(obj) + def edit_text_wrap_length(cls, obj: bpy.types.Object, wrap_length: int) -> None: element = tool.Ifc.get_entity(obj) - assert element - ifc_file = tool.Ifc.get() pset = tool.Pset.get_element_pset(element, "EPset_Annotation") if not pset: pset = ifcopenshell.api.pset.add_pset(ifc_file, product=element, name="EPset_Annotation") + ifcopenshell.api.pset.edit_pset(ifc_file, pset=pset, properties={"Newline_At": wrap_length}) - ifcopenshell.api.pset.edit_pset( - ifc_file, - pset=pset, - properties={ - "Newline_At": int(props.newline_at), - "Symbol": props.get_symbol(), - "Reverse_List": props.reverse_list, - "List_Separator": props.list_separator or "", - }, - ) + @classmethod + def edit_text_symbol(cls, obj: bpy.types.Object, symbol: str) -> None: + element = tool.Ifc.get_entity(obj) + ifc_file = tool.Ifc.get() + pset = tool.Pset.get_element_pset(element, "EPset_Annotation") + if not pset: + pset = ifcopenshell.api.pset.add_pset(ifc_file, product=element, name="EPset_Annotation") + ifcopenshell.api.pset.edit_pset(ifc_file, pset=pset, properties={"Symbol": symbol}) + + @classmethod + def edit_text_alignment(cls, obj: bpy.types.Object, alignment: str) -> None: + ifc_literals = cls.get_text_literal(obj, return_list=True) + for ifc_literal in ifc_literals or []: + if ifc_literal.is_a("IfcTextLiteralWithExtent"): + ifc_literal.BoxAlignment = alignment # TODO below this point is highly experimental prototype code with no tests @@ -2081,13 +2097,9 @@ class Drawing(bonsai.core.tool.Drawing): cls, text: str, product: Optional[ifcopenshell.entity_instance] = None, - reverse_list: bool = False, - list_separator: str = ", ", ) -> str: if not product: return text - if list_separator: - list_separator = list_separator.encode().decode("unicode_escape") for command in re.findall("``.*?``", text): original_command = command @@ -2102,10 +2114,7 @@ class Drawing(bonsai.core.tool.Drawing): for variable in re.findall("{{.*?}}", text): value = ifcopenshell.util.selector.get_element_value(product, variable[2:-2]) if isinstance(value, (list, tuple)): - if reverse_list: - value = list_separator.join(str(v) for v in reversed(value)) - else: - value = list_separator.join(str(v) for v in value) + value = ", ".join(str(v) for v in value) text = text.replace(variable, str(value)) return text From 02fab6eee219d4d04d2847379343af29cb4c3c3f Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Feb 2026 16:35:04 +1100 Subject: [PATCH 651/657] Fix #7634. Support formatting signed numbers. --- src/ifcopenshell-python/ifcopenshell/util/selector.py | 2 +- src/ifcopenshell-python/test/util/test_selector.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index abcba23a0f..17051d6917 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -144,7 +144,7 @@ format_grammar = lark.Lark( | mul_div "*" function -> multiply | mul_div "/" function -> divide - function: round | number | int | format_length | lower | upper | title | concat | substr | variable | ESCAPED_STRING | NUMBER | "(" expression ")" + function: round | number | int | format_length | lower | upper | title | concat | substr | variable | ESCAPED_STRING | SIGNED_NUMBER | "(" expression ")" variable: "{{" query_path "}}" query_path: /[^}]+/ diff --git a/src/ifcopenshell-python/test/util/test_selector.py b/src/ifcopenshell-python/test/util/test_selector.py index 0b90f3b278..959cacd02d 100644 --- a/src/ifcopenshell-python/test/util/test_selector.py +++ b/src/ifcopenshell-python/test/util/test_selector.py @@ -54,6 +54,7 @@ class TestFormat: def test_number_formatting(self): assert subject.format("round(123, 5)") == "125" assert subject.format('round("123", 5)') == "125" + assert subject.format('round(-123, 5)') == "-125" assert subject.format("int(123.123)") == "123" assert subject.format("int(123)") == "123" assert subject.format("number(123)") == "123" From 1d5108f934910917db887718fb45e4b33471b51d Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Fri, 6 Feb 2026 16:51:41 +0000 Subject: [PATCH 652/657] Fix linking for builds with -Wl,--as-needed --- src/ifcconvert/CMakeLists.txt | 1 + src/ifcwrap/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index a5e16180cb..af46bc7dfe 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -15,6 +15,7 @@ target_link_libraries( IfcGeom IfcParse Serializers + ${kernel_libraries} ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} diff --git a/src/ifcwrap/CMakeLists.txt b/src/ifcwrap/CMakeLists.txt index 47420d9817..16e3a86565 100644 --- a/src/ifcwrap/CMakeLists.txt +++ b/src/ifcwrap/CMakeLists.txt @@ -140,6 +140,7 @@ else() target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL}) endif() target_link_libraries(ifcopenshell_wrapper PRIVATE ${CGAL_LIBRARIES}) +target_link_libraries(ifcopenshell_wrapper PRIVATE IfcGeom ${kernel_libraries}) if((NOT WIN32) AND BUILD_SHARED_LIBS) SET_INSTALL_RPATHS(ifcopenshell_wrapper "${IFCDIRS};${OCC_LIBRARY_DIR}") endif() From dffa3515c0a87d717b66ee0588d3087206de52bf Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 8 Feb 2026 19:17:12 +1100 Subject: [PATCH 653/657] Reimplement sort / reverse / join function to format language, simplify text annotation variables, add tests Previously, sort, reverse list, and join functionality was implemented as special cases in Bonsai itself. Given that it has usecases (especially in material lists, but any sort of list applies) I've moved this function into the IOS formatting language. The IOS formatting language previously wasn't capable of this, but the awesome addition by @falken10vdl made the formatting language accept queries inline, so that means it can handle lists. I also added tests for all the new functions and expression syntax (+-*/ operators). I simplified the code that gets the evaluated text literal - previously it seems to call format() multiple times. --- src/bonsai/bonsai/bim/module/drawing/data.py | 22 +----------- src/bonsai/bonsai/tool/drawing.py | 13 +++---- .../ifcopenshell-python/selector_syntax.rst | 4 +++ .../ifcopenshell/util/selector.py | 33 +++++++++++------- .../test/util/test_selector.py | 34 ++++++++++++++++++- 5 files changed, 62 insertions(+), 44 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/data.py b/src/bonsai/bonsai/bim/module/drawing/data.py index a4396d84c5..1668d386d3 100644 --- a/src/bonsai/bonsai/bim/module/drawing/data.py +++ b/src/bonsai/bonsai/bim/module/drawing/data.py @@ -365,15 +365,10 @@ class DecoratorData: for literal in literals: literal_value = literal.Literal - try: - eval_value = cls.evaluate_formatting_expressions(literal_value, product) - current_value = tool.Drawing.replace_text_literal_variables(eval_value, product) - except Exception: - current_value = literal_value literal_data = { "Literal": literal_value, "BoxAlignment": literal.BoxAlignment, - "CurrentValue": current_value, + "CurrentValue": tool.Drawing.replace_text_literal_variables(literal_value, product), } literals_data.append(literal_data) @@ -399,21 +394,6 @@ class DecoratorData: return element - @classmethod - def evaluate_formatting_expressions(cls, text: str, element=None) -> str: - """Evaluate formatting expressions wrapped in backticks using ifcopenshell.util.selector.format, always passing element context""" - import re - - def evaluate_expression(match): - try: - expression = match.group(1) - result = ifcopenshell.util.selector.format(expression, element) - return str(result) - except Exception as e: - return match.group(0) - - return re.sub(r"``([^`]+)``", evaluate_expression, text) - @classmethod def get_element_value_by_key(cls, element: ifcopenshell.entity_instance, key: str): """Get element value by its key using IfcOpenShell selector syntax""" diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 3b98b92611..a7238c75dc 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -1306,9 +1306,7 @@ class Drawing(bonsai.core.tool.Drawing): element = tool.Ifc.get_entity(obj) assert element # updating text font size in EPset_Annotation.Classes - print("we got", font_size, repr(font_size)) font_size_str = next((key for key in FONT_SIZES if FONT_SIZES[key] == font_size), None) - print("so", font_size_str) classes = ifcopenshell.util.element.get_pset(element, "EPset_Annotation", "Classes") assert isinstance(classes, Union[str, None]) classes_split = classes.split() if classes else [] @@ -2101,16 +2099,13 @@ class Drawing(bonsai.core.tool.Drawing): if not product: return text - for command in re.findall("``.*?``", text): + for command in re.findall("``.+?``", text): original_command = command command_content = command[2:-2] - if command_content is None or str(command_content).strip().lower() == "none": + try: + text = text.replace(original_command, ifcopenshell.util.selector.format(command_content, product)) + except Exception: text = text.replace(original_command, "") - else: - try: - text = text.replace(original_command, ifcopenshell.util.selector.format(command_content, product)) - except Exception: - text = text.replace(original_command, "") for variable in re.findall("{{.*?}}", text): value = ifcopenshell.util.selector.get_element_value(product, variable[2:-2]) if isinstance(value, (list, tuple)): diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/selector_syntax.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/selector_syntax.rst index 67f7b792b3..2d0cc9e071 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/selector_syntax.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/selector_syntax.rst @@ -252,6 +252,10 @@ nest formulas, for example ``concat(title("foo"), lower("Bar"))`` will produce "``number({{value}}[, {{decimal_separator}}[, {{thousands_separator}}]])``", "``number(1234.56, "","", ""."")``", "``1.234,56``", "Formats {{value}} with an optional custom {{decimal_separator}} and {{thousands_separator}}. The default separators are ``.`` and ``,``." "``metric_length({{value}}, {{precision}}, {{decimals}})``", "``metric_length(3.123, 0.1, 2)``", "``3.10``", "Rounds ``{{value}}`` to the nearest ``{{precision}}`` then displays using a certain amount of decimal places." "``imperial_length({{value}}, {{precision}}, {{input_unit}}, {{output_unit}}, {{suppress_zero_inches}})``", "``imperial_length(3.0, 4, ""foot"", ""foot"", true)`` OR ``imperial_length(3.0, 4, ""foot"", ""foot"", false)``", "``3'`` OR ``3' - 0""``", "The ``{{value}}`` may be specified either as ``foot`` or ``inch`` depending on ``{{input_unit}}``. The ``{{value}}`` is then rounded to the nearest ``1/{{precision}}`` inch, then formatted using fractional feet and inches if ``{{output_unit}}`` is set to ``foot``, or just inches if ``{{output_unit}}`` is set to ``inch``. When ``{{suppress_zero_inches}}`` is ``true`` (default), measurements with zero inches will omit the inch portion (e.g., ``3'`` instead of ``3' - 0""``)." + "``sort({{values}})``", "``sort({{mats.Name}})``", "``Name1, Name2``", "Sorts a list of items." + "``reverse({{values}})``", "``reverse({{mats.Name}})``", "``Name2, Name1``", "Reverses a list of items." + "``join({{separator}}, {{values}})``", "``join("-", {{mats.Name}})``", "``Name1-Name2``", "Joins a list of items with a custom separator. By default, all lists a rendered as comma separated." + "``{{value1}}[+-*/]{{value2}}``", "``{{z}}+3``", "``5``", "Does arithmetic. Typical operators such as +, -, \*, and / are allowed and can be mixed with other variables and formatting functions." When using queries in an IfcAnnotation tag surround with backticks. Examples: diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index 17051d6917..d3bef9758f 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -144,7 +144,7 @@ format_grammar = lark.Lark( | mul_div "*" function -> multiply | mul_div "/" function -> divide - function: round | number | int | format_length | lower | upper | title | concat | substr | variable | ESCAPED_STRING | SIGNED_NUMBER | "(" expression ")" + function: round | number | int | format_length | lower | upper | title | concat | substr | sort | reverse | join | variable | ESCAPED_STRING | SIGNED_NUMBER | "(" expression ")" variable: "{{" query_path "}}" query_path: /[^}]+/ @@ -160,6 +160,9 @@ format_grammar = lark.Lark( title: "title(" expression ")" concat: "concat(" expression ("," expression)* ")" substr: "substr(" expression "," SIGNED_INT ["," SIGNED_INT] ")" + sort: "sort(" expression ")" + reverse: "reverse(" expression ")" + join: "join(" ESCAPED_STRING "," expression ")" boolean: TRUE | FALSE TRUE: "true" | "True" | "TRUE" @@ -201,6 +204,8 @@ class FormatTransformer(lark.Transformer): self.element = element def start(self, args): + if isinstance(args[0], (list, tuple)): + return ", ".join(args[0]) return args[0] def expression(self, args): @@ -208,18 +213,11 @@ class FormatTransformer(lark.Transformer): def variable(self, args): """Handle variable substitution like {{z}} or {{Pset_Wall.FireRating}}""" - if self.element is None: - return "0" # Default value if no element context - - query_path = args[0] - try: - value = get_element_value(self.element, query_path) - if value is None: - return "0" - # Convert to string for further processing - return str(value) - except: - return "0" # Return default on error + if self.element: + try: + return get_element_value(self.element, args[0]) + except: + pass def query_path(self, args): """Extract the query path from variable""" @@ -301,6 +299,15 @@ class FormatTransformer(lark.Transformer): elif len(args) == 2: return str(args[0])[int(args[1]) :] + def sort(self, args): + return sorted(args[0]) + + def reverse(self, args): + return list(reversed(args[0])) + + def join(self, args): + return args[0].join(args[1]) + def boolean(self, args): if not args: return True diff --git a/src/ifcopenshell-python/test/util/test_selector.py b/src/ifcopenshell-python/test/util/test_selector.py index 959cacd02d..3c94876a66 100644 --- a/src/ifcopenshell-python/test/util/test_selector.py +++ b/src/ifcopenshell-python/test/util/test_selector.py @@ -35,7 +35,7 @@ import ifcopenshell.util.selector as subject import test.bootstrap -class TestFormat: +class TestFormat(test.bootstrap.IFC4): def test_no_formatting(self): assert subject.format("123") == "123" assert subject.format('"123"') == "123" @@ -78,6 +78,38 @@ class TestFormat: assert subject.format('imperial_length(3.0, 4, "foot", "foot", false)') == "3' - 0\"" assert subject.format('imperial_length(3.0, 4, "foot", "foot", False)') == "3' - 0\"" + def test_variable_formatting(self): + assert subject.format('{{undefined}}') is None + assert subject.format('upper({{undefined}})') == "NONE" + assert subject.format('int({{undefined}})') == "0" + element = ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcWall") + assert subject.format('{{undefined}}', element) is None + assert subject.format('{{class}}', element) == "IfcWall" + assert subject.format('{{ class }}', element) == "IfcWall" + assert subject.format('upper({{ class }})', element) == "IFCWALL" + + def test_list_formatting(self): + element = ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcWall") + material = ifcopenshell.api.material.add_material(self.file, name="CON01") + material2 = ifcopenshell.api.material.add_material(self.file, name="CON03") + material3 = ifcopenshell.api.material.add_material(self.file, name="CON02") + material_set = ifcopenshell.api.material.add_material_set(self.file, set_type="IfcMaterialLayerSet") + layer = ifcopenshell.api.material.add_layer(self.file, layer_set=material_set, material=material) + layer = ifcopenshell.api.material.add_layer(self.file, layer_set=material_set, material=material2) + layer = ifcopenshell.api.material.add_layer(self.file, layer_set=material_set, material=material3) + ifcopenshell.api.material.assign_material(self.file, products=[element], material=material_set) + assert subject.format('{{materials.Name}}', element) == "CON01, CON03, CON02" + assert subject.format('sort({{materials.Name}})', element) == "CON01, CON02, CON03" + assert subject.format('reverse({{materials.Name}})', element) == "CON02, CON03, CON01" + assert subject.format('join("-", {{materials.Name}})', element) == "CON01-CON03-CON02" + + def test_expressions(self): + assert subject.format('2+3') == "5" + assert subject.format('-2+3') == "1" + assert subject.format('2-3') == "-1" + assert subject.format('3*2') == "6" + assert subject.format('3/2') == "1.5" + class TestGetElementValue(test.bootstrap.IFC4): def test_selecting_an_elements_class_or_id_using_a_query(self): From 3fe9980aa41cfa90dc9e7d27b4b9bab4e30b4880 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:45:56 +0000 Subject: [PATCH 654/657] Bump ruff from 0.14.14 to 0.15.0 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.14 to 0.15.0. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.14.14...0.15.0) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4e9d9687c5..74c3b0ee18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "IfcOpenShell" version = "0.0.0" dependencies = [ "black==26.1.0", - "ruff==0.14.14", + "ruff==0.15.0", "poethepoet", "gersemi==0.25.4", ] From 17b88fff229ebf14d93af3957488753fce3c50bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:45:40 +0000 Subject: [PATCH 655/657] Bump aws-actions/configure-aws-credentials from 5 to 6 Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 5 to 6. - [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases) - [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v5...v6) --- updated-dependencies: - dependency-name: aws-actions/configure-aws-credentials dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build_osx.yml | 2 +- .github/workflows/build_pyodide.yml | 2 +- .github/workflows/build_rocky.yml | 2 +- .github/workflows/build_rocky_arm.yml | 2 +- .github/workflows/build_win.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_osx.yml b/.github/workflows/build_osx.yml index f53d91b98d..056cf13763 100644 --- a/.github/workflows/build_osx.yml +++ b/.github/workflows/build_osx.yml @@ -139,7 +139,7 @@ jobs: cd .. - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v5 + uses: aws-actions/configure-aws-credentials@v6 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/build_pyodide.yml b/.github/workflows/build_pyodide.yml index b5692b18f4..744bd9e772 100644 --- a/.github/workflows/build_pyodide.yml +++ b/.github/workflows/build_pyodide.yml @@ -77,7 +77,7 @@ jobs: git push || echo "Push failed" - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v5 + uses: aws-actions/configure-aws-credentials@v6 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/build_rocky.yml b/.github/workflows/build_rocky.yml index 6a21a9dfc3..662aa04f26 100644 --- a/.github/workflows/build_rocky.yml +++ b/.github/workflows/build_rocky.yml @@ -118,7 +118,7 @@ jobs: cd .. - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v5 + uses: aws-actions/configure-aws-credentials@v6 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/build_rocky_arm.yml b/.github/workflows/build_rocky_arm.yml index c595c63676..445f49658a 100644 --- a/.github/workflows/build_rocky_arm.yml +++ b/.github/workflows/build_rocky_arm.yml @@ -118,7 +118,7 @@ jobs: cd .. - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v5 + uses: aws-actions/configure-aws-credentials@v6 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index 6ef112da61..ab9d7b6f80 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -73,7 +73,7 @@ jobs: git push || echo "Push failed" - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v5 + uses: aws-actions/configure-aws-credentials@v6 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} From a4d5d4e19ad576ce237362802479401078ae7763 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 9 Feb 2026 21:21:10 +0100 Subject: [PATCH 656/657] Ignore site placement also for site geometry #7654 --- src/ifcgeom/mapping/IfcObjectPlacement.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ifcgeom/mapping/IfcObjectPlacement.cpp b/src/ifcgeom/mapping/IfcObjectPlacement.cpp index be0c222e08..098236d7c1 100644 --- a/src/ifcgeom/mapping/IfcObjectPlacement.cpp +++ b/src/ifcgeom/mapping/IfcObjectPlacement.cpp @@ -22,6 +22,18 @@ using namespace ifcopenshell::geometry; taxonomy::ptr mapping::map_impl(const IfcSchema::IfcObjectPlacement* inst) { + if (placement_rel_to_type_ || placement_rel_to_instance_) { + // @nb this is not a full solution because we only look for the direct PlacesObject relationships of the current placement, + // a more complete solution should track whether this element sits above the element of which the placement is being ignored. + auto self_places = inst->PlacesObject(); + for (auto iter = self_places->begin(); iter != self_places->end(); ++iter) { + if ((placement_rel_to_type_ && (*iter)->declaration().is(*placement_rel_to_type_)) || + (placement_rel_to_instance_ && (*iter)->as() == placement_rel_to_instance_)){ + return taxonomy::make(); + } + } + } + const IfcSchema::IfcObjectPlacement* relative_to = nullptr; const IfcUtil::IfcBaseInterface* transform; From a46cdbb907974c03be91bad002ce4f88aae682dd Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 9 Feb 2026 21:37:21 +0100 Subject: [PATCH 657/657] Ignore site placement also for site geometry - add queue #7654 --- src/ifcgeom/mapping/IfcObjectPlacement.cpp | 36 +++++++++++++++++----- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/ifcgeom/mapping/IfcObjectPlacement.cpp b/src/ifcgeom/mapping/IfcObjectPlacement.cpp index 098236d7c1..a0a37dd30f 100644 --- a/src/ifcgeom/mapping/IfcObjectPlacement.cpp +++ b/src/ifcgeom/mapping/IfcObjectPlacement.cpp @@ -21,15 +21,37 @@ #define mapping POSTFIX_SCHEMA(mapping) using namespace ifcopenshell::geometry; +#include + taxonomy::ptr mapping::map_impl(const IfcSchema::IfcObjectPlacement* inst) { if (placement_rel_to_type_ || placement_rel_to_instance_) { - // @nb this is not a full solution because we only look for the direct PlacesObject relationships of the current placement, - // a more complete solution should track whether this element sits above the element of which the placement is being ignored. - auto self_places = inst->PlacesObject(); - for (auto iter = self_places->begin(); iter != self_places->end(); ++iter) { - if ((placement_rel_to_type_ && (*iter)->declaration().is(*placement_rel_to_type_)) || - (placement_rel_to_instance_ && (*iter)->as() == placement_rel_to_instance_)){ - return taxonomy::make(); + using QueueItem = std::pair; + std::deque q = {{inst, 0}}; + while (!q.empty()) { + auto [placement_entity, depth] = q.front(); + q.pop_front(); + + auto placement = placement_entity->as(); + if (!placement) { + continue; + } + + auto self_places = placement->PlacesObject(); + inst->ReferencedByPlacements(); + for (auto iter = self_places->begin(); iter != self_places->end(); ++iter) { + if ((placement_rel_to_type_ && (*iter)->declaration().is(*placement_rel_to_type_)) || + (placement_rel_to_instance_ && (*iter)->as() == placement_rel_to_instance_)) { + return taxonomy::make(); + } + } + + // Look for two levels deep, we want to know if we're at or *above* the + // element we're ignoring, but we don't want to traverse the entire model. + if (depth < 2) { + auto refs = placement->ReferencedByPlacements(); + for (auto& ref : *refs) { + q.emplace_back(ref, depth + 1); + } } } }

oh5cz5^p5exPt?goi)900kkrgvPzgCs` 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 z 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⁢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 z zNpJ>q#2Ys^ynwZ~2m)pyZ!rLXGxAFcj&IEP9L=}^DxUjhtW*`_8^xNaxI}$G81^|0 zAnlt;092|e0Okavjxh8u|KfI5`*HPw=ZORaAErV4+fL5TkZ@XzU~>KY`58ziH{@uz z1u?dwc)^ep$-vq=a;iv4vrfVN?i3_D{g{|Q2YMYz|&ywu}naTi~y{k ze>ms>t`~%Y%M58M%;vm_g?%z0a8Jk)(RMaKD6gQf=1u~MqXl(|dD=h#n$QrygN=b& zrx_4~+yJx>gt`M!-l&uF;?rkH-62hYnhM4EZxx~*D;*hS`yiDlnl2+9h2fI#1TgZG zoKZ&AO@)}n!G?V(nt5T%l4(OWSb4*Y8XA=?+4)H9Q=G=d93|ll^eRz4wm5meH_VNG zHXQMa+BXxBS%_ioV1*?0EzoGUKR@?nKHU42Y#;0fSxnD}gnMQ>ZzL)!E+4t7> zc3#srJt-;4ef-blqzC{p#of2C3jCyv~-BW)pzs% zl;xAwdeR)y@${5-$nvd*5)~%fOGv6(D^iUgtKhHI-yZSR$;k+L1wHX$`FL6L*(CqG zpGZkTet8>uv4|NgSgBdVITi)LEB^+}kartw{w}r4 z$9$&cf7^HX8{e8*>Bsa87#g^*%%mw}_Wt!1?VX58@d%N^UA}mll?!1W%r#e1#{& zqE@8$I+Yc`)LM>7?nO~(l?)Lr% z^)w7^%*9NJSB~n|WOv@Rzqx4U3sd!5ySqiQe4pHfz{P$JNwx-g&`izcg%)*nb*$Xn zIF+^9H;xMpJIKhTnh!!~U;H5a3{dlj``(23hR*CcgKYWFD;+nBiyhwlpF3`8{z?3Y zBJsXZf$+{xPwgJ&%jy(vN&RN@Jfi?-587_M4+*^A%}su4x7lQfH@}iQ`hae53&9+N zJrF1*!AmUt=ewCXKn(>DfDc!^c^hq8N!pNTe+Wf1SmlmUWw-;v6MuT_e7;@;C{9T9 zWMm_*=xNkvuK+J0kU|9B^|Q+7%g${G#Tbxzi@)n{?qL7(O79c8QHfm{L31|HfR3+?zgYq95Sk`-8~6de-JXr_J0{e)iWBr62eGQTt-904r(4+507zY zdM#@32A%WlzFrGXk!r}*B|d$r`|yUkFnA?z)Jb}dAROHaeVt&v=~eWB!~P-}62FMP zCT&{bXr_|tL%DT?vxyk9Q}MZR(yz|}D*YYtEMkepJ|qp|6mxj$+89}*Z;42W+8<_F zsnlP7K^Mm}N}{&r;sZ_|aya9B$_!Gz!OcDs_?Wa(POgxO11DGK$)!IMfcnJAGccSC zboRrX=Q}+N8}7d)I^H#yADD?r4M8$Pm1^?ToVxB7W#`{qYSLtLCYf&6=etakfm$em zTio%Q$Ai5a52l@)jn+jR*sqI0aa>no1neknF958FNO7Zm2>F3^6#5;x+6(E72bein^Axy34nFS_SA{D$abQp5+HpS0t zcpokG0lBITFvJ09{L?a*rJWr*&=6L<2V+Qqas>`R5%jVa{r@YqNmZee{;yk?{-H(p z&6djlGt-oxhDJXts*^4Yb%RZgkDeSz`v?NPHXRnShQj`(ceXV*;R!gmR$G|+jqJq~ zvXIHwg`ntgB6y=~bMJCgi3U??VWg0LRUA~z>WiQQN?90lx~O(iju^QOEw{=3iKuEO zz204V?_rBEzi4q~5T8{y$MY?`?cE|Y6#X+d8_zfn{#=KX5le!&fqK)uZxf~;ZpS@? z>*6(Z;QO=*eOpy`HkzWs-Gc*d9jM?Ms?|&W6Fxrv+r{xm9Yz>jWOyNu>!pi}tM|^r zrGh_7Lc8{GFv6&abp=Z?{FCM38k`=;sPvuKUS@aU_p;#nV@8B_Ifiu^Ht>F?_Vlz0 zH~B$B)%Tn0hwm<;e|>nzM>V*cpkM1lCJgn<<;Ctj4oEDjNMu*0N9!tBI3IU~Q37`Sv7Z zp#~5Uo|lELygYFG%X*77$K&uvs*bjqoNN!es?zgM_Wd_lGV)lp4bJ@)BA&c9H|f-R zrw(t2jwO7V1Id;&?jF3yeSLAKlFclq--nq{vr~Rh^+DL-;PgVV+#=wXEr9uBX&1-KHB(fY5D}A z0c_?2z{4}9$_Il2`BW1CA;JBjQ8#LI#PH15@|1`fOm1Ui10}DhIB=kwbAiuR7;s;xiM4-?5K7n{y3ISlE!`|(9liDGdT*?6P8e^;IpV#r2vJaJbu^)p~yZn z3&E=UavDf<0OCh6k9p?Pr9 za#SqL;aid-ef&+JYy6GXzyFHm%L6sDbVbdcy@WjeTx8ma^61Bk2$jh1d+P!tY+%06 zctgIlBxvuvDLX{OC*D~9<;MpE3|1W+|G~ilwOIJNws^qN-|PLB?z z$Qo7{@pZ`;3=cOHO#ftb{}DCsm-*_co=#5TnG1I+fuYGJF;)x~E0uB|BsH-fs$YL; zz7D$V=&B|74$3<^r|XM}>E$u?Ycn&+aWy>QV0<&_6o%l!vM@x{RbGi;DM`F+23-H# zbt`GXS7j-ZIKC2sJQb3^Z=qSH1n3{9QB-frNh{i6x8%rTrKi9AwHoaoMm@=H&UiYw zg?{xS+|1x7wZ$K8f~`MsmKNlxvJSSVj5{I06-LY^9dL*4LL#5uwFn3OF^V;p1Fd+l zwp}VO&oJThDYs;g!TFOyosFeLVn1eO+MXQ8&uFvR=VI^O?e%LCPZwtnE`iaZVHFP- zXO??#Z%=d-m*XfTN;CAlaWg4A4-CBV@gtXKoU;6WV56SGn?B0S0PC3*vcY@604pUi zu(jxFGs*dKl zYyoc11i2bIu;9ddwxJ>Vn(36Gplw7r&c=gh&|>2v~8j&I{JV zd`7qF0Vz{MBfNh-?eH@tfIXD#m=>V6dE|+YM9C)5ye#MljpHg6Gy`~c)ZUj%GgcBz z@k!}>Et6AIy^ttf@VOugU|$#}HgR?y-NUYw@Os07?M9=|LF3IfPbWBcp=BQ(LG9xR zlmXCXgt=SvOnSyvR4@ZY0mv2`KT|no8=}y^2zp-iEi^PXoxIs62Za6Y4~xL-b#q!WuP?L0HTB8uTnYVKnSDEkviLVBfUHZJAkbw<-6vsq zSY@8JWskFEuEunvhQjXtY(uB*pdyiwuyU{*4ZIPpMYK5nz@+p64DQBSkMn9v57M%D z?rbz;D5^}sXi`fRu7L@2YGOltRT^%ZE0YWrNz^|)rZW_=j4CdN_hxL%aj^BlS#7HmSBR$o2w* z3rejRU}6+_fBqbsNVCnQP86R}U#~3_Vy2fP>t7kjjgD~*D%9xQa$dxB4#V=939&lh zoZG?(`?l9qq-Q8Uh(hbrA0s_+AB_JUkQUW5w|~tO_1`q`0d~edUsNh?rQCstYIJ=nb&#z}iU)A-Y=;;q_q$dnZ+mFfPB$V8!OQy%5NI?{Iz!0T93TET z{(^%`RW1+sFT}0ZNCtsysKpzsri_ zg50nHc1JA8$Yn-Z8F6OuLx9QXZnxx{M z74qgk4`sb-cBBLznwvR|GnD4(a#Tq^ zv=D>W9=Sd1$OVjAJr_=RS>k13W)#5%-19}ev99AG>89SIDQvI_T0#^M!J3p ze}xfW%!o#zwb7m3>Ep|;ZP(pRj%;E67>myzWK7>CdKCg+bfw3wt)Upp1>f=9Vr(jE zlC1q5xQx;TK3Lwb%4l}elJ>Q>EGc8_bbomm6u<28rpeGq{Yj9b-TCL@aY6Xj@<-$MC*BvxvDCWw zAzk|#?B+_8@`}ML?0GepEV%SbTAI21W!iYNYMP(En4gGg?rf=kQyde zS6?a2X&j6+dz>;OckG)ij0G>ZgGNUwsO8VipYBL#}h>EME@D6cg znx%%g+gqi)(*HU3dDw$e0gr{dc%D+fWdRWK$RQqW65K*>3Z{Eyvs|zj8NS6>wm7+c z0Fa%*QL%b#H!AP#4WGwyXRJx_`;4+G8RelT@LG3FJgHl=Z>s8U$8zji^Bw!QP~Ig(x+d%S`GO+ldL?yaF`m1(amCw4OVfOD zZ2WMUoTqov@~6g0#R@u?YUg3?^}#aFpJ1f+`Z&jPYI4DQc3k6op(@@*8BQ>z-|C<{ zDGOL0pI;;3RS9BWyO<=E(K%DFjZzEovV@7fQiMn%>9JCYkIH;qE5t^5&Lga_olcO3 zAI-wr;S*C?$?f5=w~^X+lzfFBTHvJH8AJqer(eet%Ij@hsb6s+DOI=W$Wqg~4xrEX zaXH6XKWFQiA)4}m9huNx>ZT3O-`j3gG}I!@ES?(*am~11g3g@OuuOAioVOW#3teqk z-xZMYcT%J8UInrdF& zf-2gVX6;wMF$~II3VTg~QZt)3Iai4v2$6G)p<{B0opauH3e#W&2YRyB>~eb=&{%?h zU}P~w9ab}-%-GdYH6Q^tUZ9^eW6vlSp0mNG_K-BCk>gm~hXz zyz~ImmrY|lIG+86j*IoB1%v7gC{_4i2TO?r2eQ{HcRfu@VVtZFRH?qb*|~e)3t!Oi zX0q9nl-3{_S05Ug4~i;kjO-OFFnP8)PGV13 z;i%KB|Mx_~AFrWHkc^T+y!MClcI#`_WzoDWTo=-kU;YxJXsAn2{Kwdz8{+HF#opuJ z7QOyc@K3|J00sQKN}F4-8B4(lV%}SH!1$j|lxmg?Fc%E9IAEIv8`Nkf4Fmun;imRV z7Cv0nefX3lKTJ$ildlpsHm#Br0-L)<9{S!<4<7v$tOGQhblMiUmO|-s#3N#tQfX(C zyJdCX^XvPmjuK49+>Ch4*yj|+caF?uaT_MaEPfVzoUfW_D~V8-s%5#=bK%SPtT|#V z3n?gNMCnY8o6l-m8BSB)h@58qe*18}206Mr_pfZTeRl8bOX&Y4+4T>#6e_uN{es)k zp}0LZsrM#&+zUQg{#h~hjNkD66c|oro+n$nH%0`0DweoKrEZxdmq#THMPalr0<&G; zy#u>S%k;jefM zLPhY&Dcnx71y$se%gVAzhXg3 z2YaWyUj6V%M`u#EwV4-}jhjDi^5E^xvID=>|J`CoklNFm%3L%d@Xl~ z_@uQPcqamWs=7%(?B}?yl8bHY-AWb!sZ3lqq=o~x{bm9iSU)8rwiap3RnvTR6$-f7 zQp&eMX?xvl+L1+>s2;ZLmAi08q&MDk1%EC=nf(7wnF3W>ci#6&=WsT4qEuV*0=&X7x}6rGNfOxa4SkdBc_NLXLjoHcZ~D9 zIfAi_`+F48nOZLq4k{QB8qLAM;W`^nC^pLY5i1NqT!MEvnn7IEss5lhkaCEt^-vPI zVKY85S0Krla>1j>emJk>&Ux~&@Jc4yp78mq$@ohlkY7wF5Vze@7!Z}~%5@7zU~hVU ze_8-ZJra61rzKpoCw+4upcByQt@D-QKW#24Wue)td z-gG-~Ope|V2pM`GBZZQej+sf67TJbjg|H#1aN#rR8zzU9lOM~KcG+j?>?|xu=mw7X z@L2b4;0xg?ygh$RY;RKrnBAVO&EQF)-(mbiw&kTqk_IGffuc(AnjbX9849DvJNoyK@7Asg`nkrF#a&a!wrh$bKuC21^Gm;(?0X;uUX2Hkr zGW%jGviP?hd^K9#6BBd`cER7XT3fuFvkO@1_+ONgeeBr3e=8J=_z&%Jv76wFnX2M8 zt5|&k>&oI-r0Yh^7)0-bTMz3;qzNvBSLs+C1mb}C$sJMfSv$N&@?DweKa9(^@Y#@7 zKZH-`x}NHy^rBxk=+J4EI!7yd{E%M}@ zeab0)>GMP?jo6t#v&t;+QfK{ua42R>rO1_xMv6}nKZZTD8yWRUs@I2#P!h+8>PVtA z?>oE4ZtAukvthcXeWoZ(C1P}BU1E^VYg&y?{qwWaL5bD)2l04jLc4U|!_CIX0E372 z$xf|Bhtdt*-K|tosg{pznf}bP1E)u<9)cqm|8tB*QM&)Tl}QRO)`4@XKkibY9+E7$ zvnVW}yY5t~(N6K#hcBSg(VssNtTIlvB1|6C;)pb`C6Jw~brLxMp%fhU3ES259v0FU zRIhL(SBf9f>i&udhb_QW1w0~w&koU8n`g%*+}`OS$GEl8v(i(oGLx|Dig-nUAJ7N( z3=ka&;Doz9h4Ac8Bytk>NxZ0sn)DFkw4-Ns^2x>>n1AEG!@cWP_TFX9wY;_0UAS0( z&Umy}h&xuehVPATpt|VFbCP(B zqfD%Z@(YJdxcTKzJaV77&A zXT8mv)BHffXqA=uE^o-fmI;oh`FiPmrj)%|tnSl!TblaY>(mv&!QBS^j9tc3J~{N- z*c&O;`A`rgfF`AcF}TxJxwTP_{6!u0X4$eDeT04Ehcl@-X1#;bIC5zN(XklPmwJiu zF$W*dE9DQ&rw?_sPyvBB2b&Kvg*(E+{CpAff#)Gqq0_;yLlEGUXqh?1vuh;@4 zs|HN#5>PRk#TK&-dux8&JB%kmRSoHroHgcMDIY+IudcQq5%hlPYV= z`z%zEUS9K=!t^hyMK-i7n#j4U`|ITy_viL3Ek;6v3Y_^>);e$G<}MUdZnC!PoqbL} zcaTS7wB=7xg<^f;Pqu5ZhLO*PT~nzyS6z0E<%O0~f9DChhr~^9=-u4GavzlMFRN*U z^-#V!*I#Yh_b}|-NauB0iM^`|yk9bFe{0~ii@>4}&8J=wW5_XB>22uH?e^MD7MM=Zfj&WV7TjQrd~4luig~1_;yk3H1SuYh0mXY{amZM)MctP41Ieg zb#2vNrdpp`d!R#1%@7leDD)SEp=>3@oR+&ilmN2YSY?%}Oo23mf zG}TZ4-nZ6Pm6|Xtd4ADTDuoOkr{P}i^yyy!i7ma7RH2bR3P(vk)R<0Ut=uf%Y$Zmf ze)6{_7Nkb7vTRqd#)28R_boNPQb;C4%9N}HP%_(Bd6M6%93OPK_A$!y31jGOtS9wv z|8TphZLHA7Cm+h@6YYJ_5#S+bN>R0uqD;v7c6!t2INey9>gFk1{9pirp>#QOn)FW5 z?~HQ4>0+un7MTsOw;!))DTC#=uy9}|p>R{4UD&}qTI_UHuBlPrYSQ3x*5TG(*Kyn3 zVAm}snnJeu{yv1q@07ndT21gTrV{&W?%>Lu`i3U0fECb<=NKM=L73O;m@K^VEdKF2 zJ|;F!lL>DA^qUPeTzq^S*=H*3W;cBoQbOV8y9beZPRW5{HuQH7ofwi*v?p*Pbop9l{GUAS`Tf=Vjll&vI6w`I{hw&|B0l2BG zDQII2i~W>B>|Cd2<4P?8hcVmTPwKdbbA5IFetF_O-c8gG)0xLo2oV)W9dB6 zXu#H?wNkFsAN>hmfh^c@8?1gRD@zHs1*T*WQRQi8W)OV!PnU-yQzZQ_rFUvVFBaw> zXvP?d*m;yZzE#w$MG3U1w49VfKF01V{h^BFq1nfJ)GCIKDO7t_?3`$QTndSCp&lc( ze~=F@_^p?}f#>5?2rw<@3RdXqvZ?XgAVe0%2EC^JvRgd16yF(rg!oAyxrVHL4vL(U z-xR*{bFziywkm}UiSO}}?VZ$^>zbPH&X1{1P~VUUWIHz>;~&u5i>Oy6aRNp%h;#p( zJRUQF9hB5V+V}l!$4$$?hbu4tJEpg^YLl+ll@S&;A0inEzhBR)a)KFnYZ^+iy}KV3Xjt+7{i6+9=#y$7%b}H?AeeSw zP>$jl1r^)IKV=p#cuBx_A~{Fi626$0K@P(0W^a&4uA#xl!x@spwzKD8>12h+if6a9 z{ATL7TJ8DA&z~dB^dq|ipcISzY`(W_F&A&ef6{>y%`U(JY~8}JtTN+lw6pWVQPs#R z_sHQ0H8dvh%n!uZK2pJ1y7Ga#io8^*45`#}D`(^e6OAR)^q1X6ZDO@(*I4e1eN9c< zO__))GTVaf2s{; zJRf&D=D1b4_|t63oM<-aGMby$f3d8(&W4uc!LFE@qW*M?-ag=iGdW1N)n^+G-k>s_ z>GLt0T4h86F+Fm4c=wh{>Q>A4MTDKCSyQNF`v5?}{8k-NBHLd8WWXy|>wiC#UnF7X zIMJ6HH%NYki3OX~&^fxz2le0hP!I7V!2zG0=?rsXC-ammVBrXsN9d_$&x@p`H0%o{ zkQ$&oDknjkp&mmGxE&qR2~OoEYR-R2yLCJTUsZD!cR<}^ z8yl~|!}Zhm1_FP3JFg&C89EyB>xXnI0jy@k)9 z`Sp^B?-TY*?zKzAyi3m7Szd(guG5!s=)6$7`{VzJt7&yMurRL`zz$nSNu=YmrPTVE zT!Uu#xUQSse#{Wac|#0ie_wI-$xTAT>cG}`sUj-_xtJ*HIrXUMTEq_z1XO1d1-Ni; z3gGH?7btv#4W>UpRx@F$BQq{4L}UD6L0v`;V!mY=G71_h3Jb)IfH>1FHn}81ro{fE zoA*m%V(P4+>G`FhB01dsAFo6Vm7dvKqh`y9vBpo}oQWHmUR^X(rXxj%xnl?4vwbq6 zuD*H3AnW<_8}Mn(Lsu2h36C zZhcP%fJE$;C-X>D)dHZyyiPOkSG6z1uE@~_yP>o73mW*WVxp$Es=A=VySitrBuf3( z4S2FdUibj>X%@EqzsM%36#uE7Z`2~6Wb=*orkOOx(BZFR!~m>LGY8rMW2h<_rQa4gH>Mq|ENVg;>G-cGR^n&mR`#|VX}S)uYexWO2ZFtHykITBChgIno;zJ*esJ&2S zfM@BG=~tso1IJT)-S+d~GqtIvxYAz~ePw*>SSE>I z=(TspQzA2wg3Q_-2`1mS=47p>A> z4NRzm&cA=?!!sQ0or>=i4Jg#-m^lLvMX)O=p2zynBAh|u|C)6z_+Xp$5+EigO_Q`< zyVy@`4~{hL%7&_u=^%G~sd;z41wJXxx7JJCQ3c*@B}^|6^5R>7(u zn6ypz?hF@R1g}^WWL%`GtJoIwo8;&&P0Gib#&;=Q#f@<-b!ANOT@4_#dU{kWyk=a# zc-blO_%q3`l$Ao88`oemD}8JaUms5a;r-?+@Ox4mi!pqeWt%qxY?4MJ; zk1n^|;b^hlXEKenns!-Oa1t79YBZo`^9uXMMRcBFEqNY_V55ZBh)>0Wt6e_yBOvtZ zI&|RE0Z7sgxU#dHx2#T|6ypo(b0q}-nzvD*C*}h4gnS3HmeH%p8W86Ry`nKlz1vht6<+pBDAY2Vg0qxqne- zZ2hTCUt=3~blWVGK9fe}(Y7LzHxCK7f6_q3Ej8tTMzLIl{+b!FROZ6xu>QEa>%-%s z0w?_OsP%=8ug+W>J&w#Q5+Xj$z#wuj%=pDCF5IPhmDw9XOcIdap`wv0mLIg&3hq^} z!&f>>WaewTAFYYQjg{%}GRr=@a=tv|#ppark4hMm$=ORiCdS`RL#Ve^s@F7Y@b7S1 z?%s5zYGo05du=$qSN)%%`v0kr=s+|y1AtK0*i&Fj4M4IgaaT}C^M-X}6$uc4G+n;CAu1pesg_C&n> z(+w~Zn{_a0ddn-sm$ZT$6FPZb+BJe5Id0M0EuWF?ZJ*$#Rrbdkr?u$pp{@k_W4`HO z2;UewBFQX7kG7<}4jU`F_UyWnP_6?t^7pFrslHuXEX!XON#o*fIm~v+g6|fOv{ke! z!3n5EoNM`NN3V{58e?Q<{jOup{xjmJzjn9)_wxQIAd5BNA@8g_@5VjgVMJKTQjSn9 zxbG?k`=NN_^sh?foo*Z`sx#G7H1|B`>~FIHHwG-zB3G64Yd*A0QX9z*K9B6~JUW}W z>WWumnp#-kQ-T=m(AiF+&SxXVd=`P^uAZthh|2NHSn8sNtF-EnSf1PWEogp4X7b?hBfAt7axQMzYn9xE z$mmzTm&i^Xh3C5nDA?q>i_LC|(O<|?m2VM`WijM9kRK1XZSi?Jvj-^YItfAD0 z1F~)czMB@Xn9!ToZxHEZpM_k~L3~u*`gDxBx&69h z{)hLV2LRD`LP$h+8ftV8G7n6tQ8*BO-VC*!8yd>q+jIW)q#pvj2|Nwa$r(mfKSB!X z)#0acspRqMiDk^v7-+OtcI!aLGYlHjfcA!*qnFEH>uzs9*f+fL@jRRQdv(nk{~+wQ z*S7k*D)3mVo$rJ{{^7T@hH7mX)^=K)4Qg-bpjSXj#?adkKVH`U&iWI4Lrx|!q(uS# z=7Yv1C(?+n+a64(sD4$7Y6ID8gQ`M3U2N@-whWb9#@qbimB!n|t;LC~cuu5*upf%U z^GnkujIfy);7IPX<|Kgu4||znZ53-k2bC7+px#-IDKp_Q1jKCl+8x@Gr`7|(&>7(X z9q;QG#2E!^y=Jf)u%hoP>5;w`jM+->Y+{B?L67^Uygiv6pASo{ffOAD+)(XDM%C%) zE_b>TjkP;6qItr6gPcV}7KQNO2{|6(zcpJ7s%EvYQx3JI6;o$T2 zD={R&LDP}gEG>OJMT%0(0VTzxJi4{NF95zphltDw9$qfb`Rr|OcT0j*07p`AA6q*G zXa@Lsru6>Kg0xd$?eoE8QI5Jj4G;i5W(U|}y!K^n;(J=M=HhpPk%t1=>qEomZ@iE>VwYQ%L>~KM)@&1Oa$}d z3Fm^qIqix46YRh0xI3>6Hu~R*Wuv`O!a}kq^bt@IPCuI*nBeYhTF=F8B#dvRX9uP0 zk$?o&hKx~~Vzwq5Dgk>pU6x`960!FjX-?U8`C)nxmt- z1F$|u1%2eL`9o3tGW>lb#^}$^ze%lTFT{`#$FuXRQDA>u3AHXUFX|-IiG3vD2Xr1X zyx{n5LjJ6(B?Z{zol@)G?m=yFaGsqyU|6x5b0fAQ=-^UpQ-b8|&xZiMWcGwFS<^+; zUT*D$V+ZbqnhWOc+IYBoEbk3)A;pl4`F{CQ^@*T$K)ru3)ul>&iuB8a9!78-w1e7L8_KYL#om*$ufnLN-+s-RF0-GInGSdk}Lj?-NfT<4) zhNs5dm}xcYSs`n^%@u|4${*%1q^1BIg)g*DWG+At8Ibxz6 z^VY1bQp%_S>H`1Ma362JHg)%HAT`(>aHJIea|(A6|MNX@<|%TmLKgQ>{TOlWhkwqZ z8wG9Vmyjv+E9offfuT=f>^AwzKiKf2Y(>@ATlC1{r-BN1D^RDuP|wmL!Eq||+3+~G zoz>f0_sHrZnRA)U4v4GB`OkE8;C`R*+A4Vz_H`sC8FK%5|1e(KQI@sx-9Ja4gZM2m z^W2NU+D&Sgl=;LuXrwVUq0=EcoS7&b#QC(J5H`f`J^VA#kgT%#lXT_&x z<jtTBjkT)R0L-y7@zN~ zK>&0GD}Lyeh9kK`{R+DAvs+`WgWdxWKZgFf1%yO=Jv6@9dR+brr`Z0wmH(cQACD1v z#V+1#$!6p4iy2Xbu>|NVMDT&PDL*rm89qx53 zEZAbxJMW2oE1K8GypW1xuj;Y~Y@ZlMr zyBJ_Y3pLh0>r8B5uf~GQKGTlU(4vX3vn1lh`E&NyPa*xy|Kvlc(En>I#;ni+lPz2H z`Li-S)D&3w7h8*|q%=4GkS5|n>uXei*VMpIGuNjqZ0u{~%KXgx0>9r~|Jl}EW~lk% z{46a$w=NNG{~_rNEMmz>h>fz#pk|~h^Jpk+-z%r}Fga;A0gY65B1USRAN1umRd10s zheOw)?#Wgo)P~qmUM(a=*OlqJa-4DECGUQ|Yfvf+_$yE{8Q4si|5Bu`A(Ll@ec&Up zO*WDsw?8sR`k#-bJ~9wZO6=y2%p<7j_U_?;zUNAq9(Q!$?XFgj)}b0n_Nlr8@Ecly zUtx*tCZPtK@CY)b{8I3UFQvOS*xFj)@(+cfq9W_lh9IhStGj|^99()x@`eCGFrVo+ z!YDS$%U(B98@LsSK1dyTt$DIhlp;;TdG1E@(Uusv64B6FsyxJ*vp?V7Q|PNj3o7+G z$)TtE9~RnJq1|l_i`mUA85Ju7=l|3a8_M$ebVi>BVWsiy7rRU1CU~Q3xxFoPHsnEvV4m zT*qPhPK2b==R_Y70PBA>f*Z`Md|OAvmKIXQ$72PiakKmkVmGO(>stmbUjB$_uls9V zXmgEY-`3yCcw9q&*qlD1{Weo2E)Zr;9M}AnO+Z(+591Ci+@zbmLK}su41SBW*jkf1 zk-N;300qG-*E1H)4mwbo9t?8muW+4Hr4cXv1E#ZeOdB#AF2;fY zJ)i<*VH)AVA~`xQ!=2=6gS2GD^GRr=MJc{mx4S+A+&mIFB<2$ahkftS5amK%P$C=M zg=Yj*v9x-N&_DZbG5SZ~yn!@%IfbcpTDTl*Z2pyz{bQw%H>RWDUyt@|tE{rfEYEp` zJ$=T%X>x-pzm~G!lYPy|GZ2~2MT42)zGy-dFi*uPC8`!om5?$t@4w2y0e<2#_}=!& zS_HJ!Y;{NypNqnYHSFcc-MvOC%+xCsxZ;74;SYSh>tdd{LIE?+o>c%(mRGMDxnOyX zZMS8Y*wCJ5mKoVtVCQ;X+;Jw$6qGO`3_#uV`wCcGO>{nV>4Emnl)Y-vcYp`Lh;yYX91ckwlS@&|5YcZJ)P@9LsA_O{a36#`tT z;GB^)4zxsiw+r#V%lK>OXV`;E7K@?Ht?;`3MVJ`uq5*njz*g%}!$C}0sq`h)D;GN? zkHvw}u(#QFSLxln?;Q3fD)x>@R_1!3Yy$l8qeea}gL;0>cwzl;4i6J5+nT;5%(!jQ zVRF&mVhIyG&x+1hl|_3M#pW3ZcOr-1)6`csQV~(3q>pr~_^&n|G-gS+;S`ALtX}Ch zI(~fdB^{0Qp9DIM*{D!Oh3Rg-RToPB8li$n2=QNU04AVJjP&AmTG1?9eZ zV}1q=e=Dym^nt{uXLfN&U-)k?GU>y@J2qSaMu6ycG2}GeZC(5}459)_QatH>LseZd z>sil?EcY{6XEhM}PXy1PIP$eendvUI3e5IN+|ZdSr*0EQK9{Q|w9ur3+0rtpoK)zsw9rGG0` zRd$sT^Pz?ZRDTi#w(-a&*5~{yA zkV!bbY@Obr>GWS!bfR=??6@9M;ZuS0AXxo9OK@D`*R&~zB@)DyDew`QKI;4S;K$Wy z4W5i~SOOE*n9!OX_Z>4O9MdX;a0lD!r1IPKsJDbw5A%E50yEJ)S%@|rQ2`|0l%j01+c9QFW8O>iVw91oG>etl4eU-ktxa%! zY`=*4P3>0htutwgnCFql_}uhCHe9Sh>IYB-1z8UrBL~Jj)QYkYmRM#f|2=n^2>({R zv~bAUu4=9rV^Qdq_fvHf7O+%Tk3z|)NJ7-httJgO&aReM&$DXWvMQbf=a4}bw&?23 zyd1jP_t$^2z>0J<29^=jy6=5EHCjn{pNT36oQkN7E?(@1moa)B_&V3}!{R#Q zGFkU#HdqT?sba-FO=j=)Hvg-qvt=A`gqWh0Rf@H6jui%}*&EyNpsS|m~FBGa2Qm4j-yIn+J50i(R=@*D(1 zl$CKG{9sW+jJshSmN;!NEm^3s7f8#pMgBJ)r0Cyxka|uk7_Eo~`ufD{C7ZBJHZ*LA zs9vb5Mgu)+x(Z5#F*HH7*L}r{#-iXRC3+43{=kq-qU8O>KwL_a_!=`#$%BXPaU057 z2ae|AC&_yL{N18^yCNoNW8B%ep?Ix84f9)-CQdy;uJBHhvfHMMoj@M~p7t%6(N9Ft zBi%Pij&1@zdVlSc{FZu_Q-wwKior$)U=M|2sA+ZYdBxBX28ThIrrR}XZKpRhr;*)2z?^Ag&At86+oWS% zHR*GZ1{>?Oxr~=Dbz+>(->_=Vvjme*badJsW+y-(n9Dx@{wA=Ypu{ zpVlET#WVL|`i15PF>q4lm}Q^KsAKlAb@NquNBx$xqk-2=!#CWpZRiY&1(Sp*mYy0a zO(R%{lPZ{WY9ealg-xaHiBlam^@g6N#^lgxw7wmT+u%JGton1C^{;`v>c0-FI>b0Z zo^h3XAa1Ixi~zX_ny$88iJ-I; zU5Rn2>-kutbv$eHWOBMiczJa9n>48ddB4MyN)bO!)o-L9s6X!77VHb|y-y!~iKSKp zp%%4`k+}IUf9=;1PBfHI-S1{`j_;<;DgSLE9UyYkeK&_4*}X;PN~*Kaq9lOgjNp zU^pvMQh?(a!g>TW1&u*=t1NLq11A{&M_E+81zBN+wt-U(-i=YVs2U$sdj$g*2(}FA zjOcZ7g1I!_^?K{RD9My9Uix}aSifph{br|$nS8xz*KTQ^dJ?3`&56iH;yT8FipG2c z`yn;lns2YT{?G!%{n@ruN67ym%DNmUm_)-beZbi7@P~v~nEt9@+JN9x@2M+=qoZzj#N!)7r=s0Gs zZnhZhP+LwQZmfR|Vk~Q!K$!F?JKGkx*1Cc3-Zr`wEjJGTQ_^z9=9IoJw*I`^|t zNS(+2mvn}em?vhglYZ0xe%zYk%gRo^bQ(iJ)l%5}rb#L5wwcW%QBV$q;tKiHWqp#7 zbE%zIVo2AWm;+Ew1)yV6rPXctp>GQkVbu{7tI(SmBg_H|QVwMmD9{HLmwveJu|X}p zE=O36e*aiY%N^%^XL!7B#(>){PKR~fQ)bcJeQ|RB=uPnKXeq)>%Oq8hsOUQBhn%=H zx%0^kbm|>_%rZZut+%ELH{hly8S0}I*uT-fVC3gcas2fhB5okIDXSaRJ()%q71H?- zuOeyo7z-Fq{k|XP6p~aXu+8Vq<&Rr2qU)rHyh-x!^pdp45S{qmkil(d zsv2Tzr--lFy^go*gjuTpcN*&T-3@UWjc}7@_bV=DXzpYI>_v~01!pndT3MTuB-#meY$E7Zy&E0Yaq4BFSmkf>5FI|0y#0Fj)w z_yx%GwGNwML*q#a2F!?QN!`-dW!A)a62bqpUyU?4{FFQMXYKA`V-_T56^fi0B8>ht z^QtVsbm1AfI8!1?IIM=o#*257SIpEn$iG4IS-k1LUD^LVhf2fz1Z?~-vJ&q4P4v-m zvt*gDT(WMnoaotStppOo5___$R*^Z_2aZp{*XwaO74OJIpyAFvsu~)y@GNhTRAd_z zNstirj$gn&VIQAk4Y&$oq$>}EexPe;9q-~+6&{5TKN#$$g`d%~=07?)`sE=>+-2H2 zx`qv&I<6stvd(u-y5IAyhMYG?k&7qVN=@3W;#!%?)5IgY zr%+zi2!;=}$h==Z#0tJ05np2kA=Q*QiiLIMT(bd(r5ZBE6yOoXdmw@&C>y^ zl!aUhzRWcQDZ@y}pp0RsMRvoy&^BFC z5q)f9L{`v993cd!EBcf}so2TQv#1-!%oRaie$*%)GOYVJA23CU{ec5fS1mCJr3T9+ zU`|5C6zRXfH$&_nSNGbG#?h(YuPPSImZ@s>5v;praRWU`sO}BILRZU_XVncsF8G{; z?Al+R!B_lz@!KxtgrP`ysKu#41yfuDE`W?Ho-X1-1xsmMzYPqFK{Rtt?L^=k*49f8 z3NT6S4X%db;cS%9u5Ah}-<`z6k5glYY;6_ofsvIlEY^z^vjHS-VwhQAt@MLPkIZLcM5Pcda85LxRdY_ee*m z5{MA5QnL{(l>A&QF)J4Q(Q;`=D z?lf+KHyIj)X~c#E+w0&--JyTA{B9@`+3)X&p(IU?WN}^Hxge7MS97oBw z6l~(n`ADQd=7bYG@^n!JW8vW7WXn{uVXkYE!Etn>zVY&Zw`~=2zcdOkU|?FNapy%( zofH?ITM2Pfc*AY@^>=EE##UX18;;NlJsaEaQv`Xv3@PD_>bdN*$}9SK^;ct1CJhOl zS#p9mW?TMdxX51pg6c)Dzybe7k>;#4Apq(p{CzFdH+>-y`4P(>e*V6Y%dxnG*G#lXFu_ZeR(;oGG>_>IF{`W473hV&GlrIj&YZf=nQOE%4s|b4F0RgQ2U=+s z$divoPy)Nz?U4AbgrRKfn@y}r`i(&}u0A&?!e_DNGb%M2{uv%&q| zZtJOg?1Q50L%pwv8YQVYrkBw3jFHo_X?_jk7a20UB6J8qSU ze)Bk9uw$=%VfB64p`GSfku0+J)ZDb^V(s@Eb=yC+lAIg(xl|b#B2sI2YrjZ#Lm8>z zbcsI^nbj6&5lg3XDy`8?pixIHuLK@b!U=!kv2zDZGCS|SNOCWG>6Yx?of@KWkj?o_hYF7`d|_dGGxm?rdRnzsU%SuPs<- z)!L8L{)34|7mZ6!W8Ai-zPCXqDbjsH%Hk!@Nfo96*JY?%cg^RvZRNe0(fHY~NF?C6 z2IyHeotman8X7o3P2IqVHLC5XlLS~gfWV1ZgXbY+;7Gl1{C{9EFIUhuS!V)1Hpu-| zru%AL+?M)T8!NJPRvtbM1$Od*g&?{uAaFh@_R_QBJ=H02xud8ppu-Z|kGj%Eg5|I$ zvt;dosu;VcC1GYNjgkeG(|2w*!OzE28w!}3{{Ddl+O0p)<4-;Pms|eUqK)OqXejTL z=Zg8mb>JhOuj9+$oJP9H(9iEn9(VZmyIhqH%=IEQSR@2Sx@^}`A`;oyt}9=U;#;x> zc%um_cM~~!V|&##fQ7`nH*ac??ivDbd4PQP4^FV>2PC~nB&MR!y_*`OQ9i>Qq;^@z zA1t_pganFE3RDsrIMnG7Gg2QdLgenOgzpwL?afH@?uA9)A_1P2$@I%h7qPt^|WSR*YqJG)bu#|H3kq501)DMF8*gv?2$l- z&|vug2T1UD(2C0?<_yE8^Hq+@7br7zU%^v-f#4{@0gi{*tV7maqo#O>X3>0jW{wLH zFIu0i*_tFRywrT#l6fGHK&!zGiM9;<&7zqRy}4jOK>&JEFb}P4_liwlpa9l|l{ha^A}EG#Sqo;`P1UPZM{ir+zrbe8l=E-sZ^?WbZY2 z6P_|{p4_@mfD0j}s_fmY;XVFg*JFU-#f;kQVoa2F8_W4h>OZH_=Rb*0Qz@w3Af`Y9 z8m^8fvJ=u|{uU^wixQW^_FC&5HR*ttcNEB&wvW!vb_K7`G^cgoJnYkLD{|g31AOMk z{xF5Uk51m?z-zL7BYw_T!>@3?g5b8l6O=e1eQd`*htj3DKEM3O_GjJp31BygfOONl zgZYWTX3tqub^V^NBw7;=(65A2YPNz8Reb#6{XX4E~3wDxponz6b35H%Z&V zQ_*Hh2ZN&{t9<_7fBaMccr7slUe+6JSPN7R==1+W)LBPG!F6qa7+M;Mp&LPwM!Hjw zMnF0gkPhh(q+3KnQc6NnB%~V=X=FfZ$f3LQJNSI>^Q`3`F7Df6ojGUkYhU~NHKVO2 z51Q)8zkWfKx-z|K{|^|JHkG>GrL4ut zA#yhvaXW>G^s%rdv2t9oS%1lyl?Sb}>Nni?X863}GbWJ6e;)w+u0~lvXiWLea|uTZ zh;x`m2y9EGqZZeu-wEPjB14UaPdy0v`N|S^{xwYF%Agp^h#k#Z9X$04T|Q> zH=J4)Qc1=af8CjBtkC+v?Bd=5jzsbSZ4@t>9&8*VqU~IUfhJ)B;WvK;YgqSCsc*ySf_TD$Pq#3U)L<0VbaE}o?RQ8|Y>bUN%O414%w()&`@ilN zF06>JB`YMpB7Q6l`hyuc+HyTPLX5p=6cXJuwog15pt^q}KPcSiB^t%Sbal^4Zob8~ZpQBie*Wc#~?{{?_gEb%H0Gmr4yZ6*h?nqFH~y%S}# zAompn+7nFKlielR=6^if3zx(lI&{7|+i#e-oG4e}_Xf*o0N^Ai{y(B5n0wX7#l!$( zU`fG`TE-Q|htAJqX38#?d_ESUC^8~-dk8E!IIR@;%E_X;!v^e|sD|CeIjMcK$jOtb zKU1{e!&uQ5o5ny;~RD*Z1PH%_&;x2luuI5hrGiy914 zR{pZ%DCGW#T8IVTU3u-#`naR`+=i(=qgT9gIs7^DU!&TRO3O-0V3f2yK*#G|i^9t2 zd-;B63(aZoL;;zVH7^9VI|b^?>y*)+xRYu@0|=#}2#rYSuQ}+^>uo)>e@>Rp>0e~2J|jMSCwIBoabg+Np4`M_Ys{jm0FJg%2v$MJmxo1&qg-1#M&~Cf;qQ-$gVNu7DnxHMd&rxOT3OJ!R{TODb?i zvcyg+3Z18K>nUiOlSnJ;qDhF!O<>(OjVBO@$c1fVlWwpJ#_R-xYGii@|7!Kv&t)HO z1a3}YA!gjt_m5~zFQ9t{9Q_@$pjk51wW7bBo4*yO^;u(}7V@fGh-_oTW#}MO=~n>* zlqKf2^9f2!5_x%$YcC=y$|EQkQQX&GFXTeD9)dCb#B7a{Sy`1QTIGdvDAW2RB7^Bq zf)ruM&lMbfBNM>ib>_fnDCxvOyV3}3M?JM7^uf_6ko%dTS};0`Z^@Bd0goFw?s+V` zp7)?Xpw{7jbhKVK7JK>Zii}c3w^)}9zJ(v9UlC?0S8ORE;>)`u%-xXI_p&?7RD>$R zX3cIo>?mRN(qSkXFhIhr)FDOZ3XyzNMM%Pv?UL}6LP?)e$kJWJNXe@udVPw5gY&WU z7(edO$w#@hl2PW~7S+)JyOTwS{wK9{Wga7|RAaj74fkumGuc#t8N}Adm8NJ+`4etQrJCViN@v+<$*(O#G9eBc+H%sqKGxPYtkAt;j7-24rZIW1NPL`#Xg-5j%tPm*M6-__d)mkKcU$bm=M91npZ;LCY`9Vp!ViIeLPgev!8LVBZpk z@oX%n7c6;`#!lNTLUUb12!#O21O#99N}TZc9p%w=!&^=SI5;@A&T52_fDL`?yX-3L zx5}3tIWOA-lQ>9-M}YKlY2Hs=TU#7}2Y7>{E(Yx4YIl4!9!bgg?r!mKgGny_gbn5eU90^clf0rIi^*RetQ z>waKkLxXO?4+Xy4n#<5VC6RI9%GAuG;Eepm4vMl-BRG{LKofrBfQ6wjpaJd12wre) z%mlNnnj|n%t#PcqrirD4xbP6$G|N;I0ve&dG3&b<#_@nQWvcP~@3OzfeBg5?>dPy( zmex@`xGXa0cRwdBxPMirXa|^RpMHzfDLe1$GE^+ z36vcLPVkvMP*1Dxjm!{@I`v@f2bWf?vo5?TrLEa0wr zFN<_V+4!{!gABs>LuD})-@SgXLfk(^7#)PuL&2XEoMXbsO&FzBy$_U-19|e=*FkPA zohyRU7D(3ioIfubStolMs$xkdYOx(>#X^&LZ8byR0L88R+Z<*I?QMjvf-<5jeJM4o zpV3D$Isjr-U~Yi#U&q#YY*fkFM&WEWyzJ|~Fmp)$K7D9um0%uipvl9v=g92dkmLy? zhSOGfiK%aMh8w=d>Jj&3aI^9GBgZV=rkzkqOdJ zqdtA2xC>xwdGznSbuq5Zgfz`PCHq%wg6B7lZ2-9TycAx*-50z~rj2p+o|A%aqb3O; zU)+TRM0A}@a^S(FjK<@-Odm2%Bo|=;Bof$pz0jHcAh*=B1Wd6uX=L;8Ei48zW_K7i zYUmO12V?xm*6DnsE#RC2hJq=?z24zQjA7r;RFF!cs)!#W-ncW9;ht}|bW{6QIXH+1 zdfiOLLuF5QP$6tS{^bwm&RVDtZ-m`n=!#Z8Av){+#GYUA#`5hv%1hqNf~P_TpVy3@ z67T)(1$S_^_mHpi^mg4+0l8@xLCdYb-x@Li9}}P2#w(}!Z)97)KPrr_*=ttLte^Yy zCZ!e)HWou=#y|=SG=12fMw-ox662!`El5!PNU2)dj~FIo?NO-cxiGSPEBPJ72&wdTPb~zU zu79WrT9x{k1v>QMY6myWjFB%NDMJK)4T~}KwY3sCKKbxH_8`zGx-I>c(ypg zkiB5F)JP(nkKAq89n}{DLpLqH?m$G<*&fXB9)9cIc1WLZ4>s5{89Vi@cbXR z6i7*k43Ou%*3j~hLMYAIxA9m$YfvNRc&8^?ksw&KxXfT0U9%oCsx${0@Ftn|2 zx0C-)Tz4IxZkKgIb-^&0Ssy_aunK{^ziL#4Sr60DjDFDnJ%CtVCJ`BQU)&4oe9Qzj zRfo>4dB!buG42(E6zhGu8$!CP;c!5gXbB^q`N{$<9HRi~qrV66EX*A-w5#*D<66 zP972of#p_2164%Zi=wD|y-&>7scQ?gwUO>@*iH5-mywT@pDv<9bT90G?QI-J%aaqk zvbd)NxnQWf>e~(SF%ju=A{h$F+k8gfD=Jiygdw8db)nY1J0}k1v;3I_TVoshKQ91{ z{LErY-?{D4YYpLeAfLUU6K+PuVGLw)Qxf(umN$d!H8BnvH9?F8hco-=lbTGRe)p;S z0WOS~`C9iT-53hY+A30(6*a{Zmvxtec?CeE9kjIKq?$#A6SS4#+ccoGxI%wip8U22 z=Xd2$iTc~Zn`veRcx3fZmLe=<(z7>9l`dstQwphsVOe3^^YgJRX>)C2l?$TWfAVxk zT)*L)QS2Xr?vPezLH+5u&ReOO*9wp z7|T<1Rdf_SKBJ|1G?5sTw``_dKTn~_>ja{o!82o9n=vw?*#w{=fa3)qp6lvwqwe6G zFk0Fkz|}#4q;Q#rA-yYsJE*Z0yeLpe9Ibd1$ld(>^(ziI*&xZ(#rDW&$XN78FW_^5 ztWiMvRR5fphgwnsD&cDDAq!jEdmwr{Ds<5eIk*6TI^Db1bGr-U#oAsgNqT#9xBGPa z`pn?uW4$W^`uzQW-5%lNAVO#;P>O`X`mP~S4-CX|a9!2deRHWMBrOgltb$OZNslRK zY(s#sF^Xd2{bTk}?5u_Ets@wAr8B0X1C!hLAeL9OJy?p2=CXf0H{myb{_206*=&^f z?#^rq+5FYI9fFI_+3ZRIy6B$F);Cm;&%UM)vfgg7Z26vIVZyPeFlLd8Z$e`Vmfuj?{6CZo>#02r+ zNB*K3G=eL_l3SeeMX7~qLswReu6)^5ZeggS?3i({%>E`SIk?8L%c2MiV+sop%*~^F zcM={vVyyIjgLZ<~`Eym7u_vb7ylYx4=Zg{AU@FEa4LeC#LnU`zVE>`^8bW>&BfOa1 zT@3VHCPXO}&n&D=6h%JC=&{xe8VJIO-+l$owxnAta;Xlk5e=JXM55-6ONH)sC>18D z9b1ck4*vq*N_U8Pd9qQS_*jEs1E1e~_>-cJ^_rXw!^=TM`}mbl9IHL#ckjaR_T~f5 zcxtMS{`mkrn&zkZ7a|W$@R8K(LF31CN`%k9)Gy1J@+WW&LLePdZCV5RX*1X|SoP&N zaCdOIW#HORdrU`p!I_kmz{mi2B)>fPr(kq)*K(lRrIAJZ%56t>O)J0~`(F(Xd@!C~ zfaSB@i`}IJpBAwvxvl0SA!HecULSCj>*hf==3QeFY7RTQLQ2Lz(kmage=%k6@%$|j z1oTi4wgObeT`Efs2?;q#Nf6C`7HWEi{>IajDW%`s$LE6bhi4vAL5V#*6ZokZl|jrCj?;Lb}LF85WTE^ahG6ywn*Lzs}TH;W>+&+mf7~7 z11=X$Jiu!Y;IbKp9At(YjNWfXc+;9E+-H*wZgqp*XjRfRf4MRjio}hLGJ03%zBb6H z1xLQ$UqKLjto}(IW+0Ik*VVW#r(1zRt~l_|>yGW;IbR#^r{!$D8=pUBnICn)F0ZuP znOC}*#mhJYE_OFV_HDRPf)JnV>zUiWM(*#Yl(;8Phpi|DuW_Ft#D*W5Q}|4YCkfC$WnkbOg5Ix|3ddU-q_QM}g<u>WhWRmiSWmlmvxF#d7Sh7jgA%7d zT8TyUy)tV~@jXgbTZeCxnH8G8wBc~;y2#daC#im?IgetmPS0&xMh~=Ds$9~^4Izg( z1$S)3;xg0L1=u)AG&A;zqDJ$3AL^twyf_ZoSIUoiiEt(2 zx-b@v00*2nge}&?4%i65#m|ikn%!O(vuTeRx+)X@8qL?=8pcbzV^skwxzC zh@BlrNE^s_4$Drba;!&bJqNh(6w?3-P$#{O^PKa>l)<_hp}Quc^+E(irEnE=0T~b2 zS`Ydj>>rJ(_X>2`Oo3ZDE1y1nV9_o6lKLHe+vB>KcX!QCyx0Mj5b`V?{GMTOx_`xt zjr#w5e)tS%2j^nAo%%@_O>?*b19CcusQjNwR;;$2f6)wv4iOEGelE3B%!3}EjcV~b z2|?Jyx@5{U!$U0jrGA$TyBdMUEHHmu?EawKTF*4OkBf%Hz7>vk%;%0C zzI6a4JV{6dftz;?(I>sPsPI#;JxCxI1oCS zk%-AYZ`}!X{8PKnSfiQ>ApV#$p4+7Y1g&Kzyo=9EP9e_(v!C?QICL zH(X8q)y_k)vK+4}E@}B7dwy(Tad9Ddvv0VwwX3*U-j9gkG6xNYV5sPAa6;9G2F+Yv zV;9GPDGT$BF3N|1N4E~?G96r+q&9wpjh~cz-#QGf52ihNaU#r|*4X%I9xZWJTwGhVK?d_F49z2S^B)rzftX4xgDUo=X z6tCfno-u^8Q0zGm@m_9ZATS2VH+g(4%Js1pbu?^_uq|2Pt$YpG6vW`ip1-6TXt7Da zQI2Gbt^L${WJju%Nq1ie9-<``X%CLj_BSl&7a4 zIFKMsJOX4F0|kk@$N6k;;c>-ocQm=n`N1n(JiG-EJHEe*+u2revr(~lv_1yp(ZoK) z9p7~Cpr30=5yTJOWuAjbamu>+08tDK4Em6w^&b@f?(@d~Z6PHCCa@6Ri;t zie9847RqyNbN5edR<25~J`CG(tp5o+t|nDxtkFR>VVyxzvc8JAOHDX_iQ8~<3=~=f!Tfw!ZQcMssg6?Rg~oi`e<1u zl)cN{F4QmTu~Gd|*VdE-W_fB2h`BY=* zUM0-%!E7H9=T`8cXV4@>ITD{$!uLp$LmVy$P%-MATEQu6rN+X0gz)lJQ^DUK})+M_QvC_WU7^!|Di zCx8FGT%rL$!+xD->i@R4mKP7M_&WetZ_*>Z+AGSaT!baiT}#|ZdSHN$wEvrLsPr-e z+%s1@yEmKxS4(tE;Jz(y-07HW_T4AA-6KfP+HAVm_zKR{S=R%Jpqv~A01m&iWr&N5 z8-ix=ncwkO)9&5do86`A>}w9S3?VSg-f6jX1Q=gJz`iz%F}Je92q&QHq4AsvN=P93 zJutAax6mo%jDP^|-)(h4+}D3~%6GE=mE@|-E(*nYAmW?PXdIc*tCde^0ar?heJT3Q z9sC#h9wp}a0rKOzj=wKAXOr{6yuA05ISd%P)4t^Bb4)CEfFxp|EVHWa$WPSR$8R@BOVfVqPd`lT zFG0B$s`b~sp8dKd{@HEkqieyo^*1H;3Y!`p`t`f_J*5k+Cc`v2q1i9|Xvn!TI)j$+ zfM_Z$lH^z-hp<&{g8)LoUORz58-UJS?B4cV()tm0c6L5D`gKy2jb&sz!4<-JMUO`C z4J_6;XHe3i8jxUM)S{0hm0@+7v*~6L;1ZlzxG+#juBHvYs?D{qKYWyj)|MZl%O-%@ z>VCm^;vq!XIg5ybN~B6(v_Y;ysa?66P^vx}(rDvKtwz27_Pqr+(BYH*;JH~$4%6#A zeI0YoR}AE`zuUSkQo?n#6gx)S^q5!wY7+;E&v#Bmlbabn!SM0bl|wu%lN#unUlsZ? zk@eW#x__7WLjYKKVtEoe=lRZtv-SaYcDjCBXyo}BiI!3jhbGo#PLbOSx}q$r|C&$%UqG!eOjUC?jPlf;&4o`tsEu8D;GG(}l}| zO>|&T9ODO;2#Cu=kSp@okX%oXl`8LPvmIEi1n_q7V}CM|^%QVk;vQ^!7^ldUP<9AA zP4Sp;UObF~s*dRbP)#B+KaM8j!`StUc41S`w-wi-WPNQ3gw)t8V7OQ^M-DkV>y-o* z!X1_sY~(wfpKB=tv-2G$8h*8NcL{@*G#hBP8&_b^7fsG}2XZ7Z!f38aWjXR95yNST!V3kogesRU0k;ZT%d@*yX%3kgyXKZdET$Tn~{GNAg>7~ z>n`B4V|r0w+R-a{o38#H$4ogi>@4OR^ z?&KU&e?iuNo$DmNy_uPmhlj@#AMt-*pvQs&F7^I45R4qp&qtnBWgLe6s@2Q^;VI68 zOD~w$WdgQ=i<8*vO;v#C?ptPizMjR?vgbHsHDPYFyN627PJf{0HTvlxM%z5hA%O|w z=FGUuV=B%K4n;oIzc*PH8l^dQ%9H)zt*YZ;+VfuMo?@=0wiSY)q;ERT}9NE3l_HZ*~g89lYgM&`csa{7`Pr1Y}G_`K-@TNiZM zY&?tDw9cJikfMlg+ANsVPel^oMD+DDJ+uu zHZ2W^I_js7LHWjjIhgyMTUL;pSE!PYD79;zrZRmr;OPZA=yj_we6q1E1osZ6p8DPX zsIx#3!jdKVg#I-TC(PV_z2@(6N#kb29-oAWlX9nW+UF(9ZR}t|^_!*mgf%rpR(xwC z1241mc-oc@eyR?4fD5k7y)zR?wBedkzJ+ED1z0L2PReC_uT@T5WKg`iA%vg*@t=b( z$yk>66Y!W+by37J%%1`qz(RwgN^Fi*xLceYV~`OiT=$(NGuVEHf(@ml zxE>I17kvDu&vN%n_?Pcqe%*;rzJDwszo|KgnP2iS|Kp~b7SS<>ZJNUT(|^amp0mHd z-_Yl3r9UNyIkE2+{;iadvwtYw$~=a%rMToCgPbwfV#<()VV0Ci zchTRRO&>oZfjetLx5LmfWf%j{MY$vt$(^3gnW%mrdj32V>AjEcoy#8vVuChc#4>?y z_=VG9aP7d+2MccuG&V9W9?7_P{ zC}wTA4{Pxz1Urhyv3lIjmZpD9(u?rIv~BB2r6W>q4h7iKfRs7M?XvobE2}MQI?TLq z)6;)g?FBcnp&c&k2CAMA*#7x|Nc|mW>FP+#OTbn-{-!&P`G-w)E9>;N3fLaTrx6KR zNFZu*K48w0bb$gFz3PY`QKpJl3rL{RO~b4`F>xL=Pa_-sgqxv50G-s=|IL)08D8Sd z-SeL79=8Arh$WWyM~w=Fg3Pk=YxHTv6Udm(NYYcOF`eZD`DZ4d3`sA)u2VKNYMDX4 z{eW_+-`VIrcooIK{GH~>YBJ865vSB+AFM($dg~N`z=bBY-%;nap+mw*!@9eSu3f=qsqt9DSuKmikMxQw>KHL?;ST8 zeGEMcF>~7u_j}2;YQ(M79weATwkO7_C--F}3CrIw;g4bI^54=2Hms_rwwfCsp8ChG zI3hF73B8@e3j=q)O7~i_vz=u}a;e2DWLop4%ae+T2M0iae@J&c3{Y_X%G!9ZB|1_F!&p z-XL#+>DC5B@Npd+?WYBqG2%LVlj9Cwdk@nVWRKkvTKE6bC3W(vkE$vAd*j4G=>lB^ zK%RRD9RzNfz@kh{M-rqxReinH*kXU+m5!k8*&3Hb3zzZzu073po6k>76`35{V5m9h zQPS9Pt{2MORTHZpbSC(P5{3B~2&CpK8lP0;0glJCdcL@=#ut0^#xyI9xWGDzvj?-gJVG4df|}Ozhdu* ztM}TZvaU|?|H3>*Br|j&7&|7zbrY-P=0Ss8P;3UorGyb&e0V#)YkrWSAY}Iv{2M0> zLd?BbUw@sV=IvQ_i{Mefi4>|IGDP=Wq<ia|omAfX62f`>}uUA}1 z+Vh?W?}A|DhgFMSqQ2%&Av0Vulin+TZm%qj{F>NTvkI=#+g}}?#hGx(df#*MKQw-3 zRFQFhNNBCXy|MJGIz?l;WN9KLAVSfk9>Z=+92sAnp2(&?+lVE8d%>7IZ_>U^_uFDM zk6cZF%#LHHi8p@a6VY8`Kh!sPu7-fLbYD%-0O3!H5`ECCy0Wqtd9Buh0|>&3bpHJ0 zL8d?4aqcJGi;`u9rYQDkP=6AlhlZPDRq&(04~xBSCB{phb3Eo?9C{>5E$nYoM`5Y? zknLG4`GU~B8lQ;fW|76S9qYBKDqhx8bcBI;*TKd_F}j%zs)RNQTDZaA`b&KmX!9sZ z(Do|rmeTv^wosKs=L*wz3)IuG7)=RQ#Ba*TEWEu@jo4p4aq812Il(a#wj_*c*CR&J zR;uGasU@}#C*tROuXQAcHuv>;m0?-CL3Ep&i&5k0(c*CBSH<4puNZ&38g3DoKGlB< z91`O`HZHt-^UH%?+MS#J)0w^Z+t)Z;tu7CCUnSZGr(W(wGif|vbF~V;p~j#zN45I> znO}S3r+~^ z$?LGG&bnZb91xyeeH>6G8J@kg=TC5Z!!~ucr*E)(`FZ+3zA-VZ|1Q%6t#Y6t zVmSH)8qXev1WsK1=9;sn2{eYITjFYx05t6e#*DPVsc>N2_F*1z!H^v#H&Sf35_@JA zd0o#ouMV?(&)gRzjP|{bFte|7E;ah)x1fYauj=L9F^XHso_<`7A4}WtJ=^`X_bC7K z@|;AW4*L`NX8gRSFB17i=oQNrJ2mJek3yMNoO2~X?a!~-^#{orj1x!R>Wrh8mD#>| zyZs_DT03qk(H~eDyg0iZLRT`7W-ej)27||`t4 z(sP2hRSuRUnq$SteJvvx26%#BYUCQ*lSh15o%ab4t@Qf6#7|dyzZ5zveoBIf^h@DHWqh}YPdw*+3VC?Jzo5JUN=YNmr zhaYOZE^CMN-#_GKD9XOub~q4_$QAXj%!pf)$pG4WJJ?zZ`lkoZ*^1ki$`?s~p+g-FMBWv>Cklv&Qh(3Y=K*{!JRsc0LHWegToPteaYI&}aYb>Tvb* z^405R>-PJSw`}*4b_TTIvrZk9+1vdr*OPA?3K>Hsx_o z?JbAiNjzJ&xJNN0)b&xpo@MPZ^3>t_(-D=`jll^ASPIJWZ0v`bt``Zom(i=RX~D|I z#T!(*NmbjFT0!Tv(=I|+iTJ7W8Qa`!;hl^v_@luJ|H`Q2ZG#&p2aeJ`MEzXk%DnEk z>+y=|TkaU1qCcB#bGV3DAB4DLvU^sM5sjiwv}UQsn6QP{l<}new=pAi-oI_;oMLb) z*!d~<>oi&=v_Uz@0rsl3FAZk6@NM)+4V(YKE%aRH=J0iJkuAJ;2IM z9Dbno&xU|yu@;$&1^&=Ah;Q1_s4liZqV&3qzjXr0dN9Ufc>jf+GFHKmy~JAn1M{!} zveyJFNGLA6;jo&JaaX6LMgbN!9(zJ!Q>FmeI?YAVb&B&`{^5s1ap~ zQU5de2}fDo^8;}Xi&vvgT~P3D}wBsG9AU8QjBk&`%#-K))iN?<35)MWQZO&6v-j^59X^vk3GBxEOda@ki#64^qIBlt+s7O* z4%A6mlaMk-XPBKmr$R)zmvbkEGABYbw~^7A*xbPqPqa}~Bd(*nuNakaZ=d3~#pVfx z$9_uwJYPN02zf@lrMpD!0WL*8&6A=Y>u{UXVRz5E7c(#BIxegPZaqr`N^$A)MYK_3 z&AAKZK6GjD5r-B-e&z6%I_^)@&3E@~u}bXQ4ITTifp@*+s{qL;Z*s0xu31_>n=sRR zE&NhQMnXX|>r+=LjKPpWjvzsm7h7b?#bQ;dYxowoX$MbFyjd@Jdkz$Sg9helhB++D zaO60^d9WR}Y1=H{Y7x_i)GT~uHYmJ($T^0$-tZjb|KExcYBG9R|KIcCCe1qkqa3F| zCkw+bBQzhJHeWG=t4)rK!>iQSWuOT5VV$M4bj5z6f|{&_p9#r&{9Yt3(TVS|ZU&7D zHPWr$Wc7qR$1}vrw@>#>_*R=F~r(%0c70r=g8!Ykc==Mmg zek-1t=!fa}+4$`q8U#`1)Drz5;AX@Gf8B^zgzw$D;)5J9_o3TZBaWql)~3+SA=81k zG5X0SB%3!iM;%I6K#Mp`P>M7<_1JKjJ1=fXJ(`Dy(dSvXXvpZG0*9 z(~l6D9PaT*1mLTlk++`M=^Gn&d*1BRF@&_;8Ifd}pajW}NBv=zW?Qh`_RGdYM+aEv zLL=NZwo%XwHwJ}Dq+MWeA#2Y!4BadbZ7&nG)pu`XRvmAy*!(idllvsH7e#MH>s#D? ztZ-yJDIZ4NK(1iB(7g|x!2qYxyIt^nOXpNWh7{d2clj%La$Sg*t}h(Wq(Q;Co!t<2 z?#{b4%H`Y|M6k8`9d%%v!CWYQ$l39azmOi4FK$D#DaHt=_&dj_j$JMXOSi%-$>Iqz zcDI}>i|S9mgca@Zj7Ql_9=7e%3`aMMjz6)}_je*q$w~{-JMa;wezyjDotj%aZEx!k z6J#+cRd_oWuS+4MqNStUe%R#uAxQKwstSAKfmoOEH>>f&Ddb%f5y6dnShF+n(yYvV zF7?wybNZ#2Xa%9CFbAqNGPnAD(D_Y+Xw@~5v)Aqaf78pFa zL~o?N0pJrn-bHv&8REKc~t z^Ly<0`GYhMg5qF)Gw*OJyqcEV9dk~`N|L@Jl8k1&-DwLVWh6W!2N%hVl@#YZ9b-&s zJ12ktY(9Nd4}m1wqUA}D&FRayhzSh`BAA~UQFZ?8_RWrmal$MK;{vgS?B83IHAH0| z({th5#_#uC+;6%Vp*+V%Bp``jrJ#n()YsAG0s2Zjt#lt0w!O z+V2fDKZ2N_9t_oYHJ4VD`7BKQ(wEvqN4`bLitjgAV$aM5r0A+u_#;OFT|ezai;- zyf3392dSM)F*(j|7%TfkO|3@3GkjQZs-h`0v%nA3)TPl}8&*O4t0zxRN(4x7La)(2 zUe0EjdxgeX+D}XEV1(si1RObqhtxiatMQf1{Yovt8SL-3Qzw90_nct*y+=UA4I+c4 zf6OVW+w-kh^i;vXRpRRpU$}V#4cVkUJ`*i`-ddX98>`PWqDvFat9P+0L=#9H1;j4sHi}`weul^SC){qDGRI(ijPN@3~mUpRuNBb+}|S z`L5A>gpl2hN$bmf>5n}L>t1Qtkp8Th(0>&TYkiX3?*)?3AcTSzP1j|o+}@T@2!izT zEz0mCfnFG#vFRwK&Ur~2o?aX#o2)dvo39yF*LqFMN>>bNOXzDWdl}hQGa%yVzaH+j z9BMb9faXA3w=TE)%Fkuwjt_c{5Hlqu$rT?s#coqny3NZ!xrdM65@hfKzCA zCkW+L+kg!2=Lg>SA?mp}xFgg)la=$Pe|rq;^fVp#qZ7VAQA)*GAYG`Z^}=l3Jl=Qg zk6eOT&3t}SfL4gWHDI1)v>)1`|Er`?wu1us*IhV+go6wx{0ENE zfn_aVWBLe1HaVP^(|q%%3S0OjM!WC)O<~I%=CS4TGVP1ENaaM@OEZ4t#S0a9=Wlb0 zNf;^v+D9#CV{)xu;lJ7j><(k{H#r$Y04%rYkFBxc?*G>QQWCM+#(T2=bE1S&K<5|3}XI~P~hwP3#O3a1h(RGViG3*No%P1&ER5S!gJ z&xinG3+NS&DIjhArdJFmXR-08phAn@y_)A*m@*C6m^^Jf>*D`%0+P&c7s({94TtKk z{f4ea72~h{x}4jEg7sX@amYlE-DeC;o0wg`zZAnfdpgojFc4BJ$!OVl=y_tpn&fXKy$*+p~^CffFnKhM0(m!bB$jeQ6kGji+h%Iry7cQ6{ zAxP4QDM!3ZYrNJg9L+u532v87uZ=3gWeI5tYIPNx{*ZLXJaJCN89E+}z4C>XxpO|U zV$XPyXl40~6FXbM=A+ih_1~k)gg@wSWaS1nWI^@LiDJ!IxqCTmz!b$8VlFg(2(~gA z&{#&Y2rZwP5OfHKe! zE4(fH#}#+!RG@TQ3%A?bW`!zhB8dgVf^2J|nlov-9LV~B=!eVvFb~BDF5OIP;ZzYP z)RKO}Eu!1=@)a5`F3&%+iE9^BZ2&wz#{Zeoev)SaV<~8@9COxK@ z{WV3-g@i|AsW2`}A6HykS2T}83@SRVns+IF5s|#BDNh!dG4hHrFoVr-TRvc=LQet* zVzH_ghgluS#`bp}K;cyGTe@F|F`Q2lLw)??glRg{PJC}s2xh)~M=iL*hoF*N|4^R~ zOUC#5_E0(_N+R`^j>BPLd&<4k34SmykV`W0sQna&M)lUAz|?frg&KwQvvV;-(Ah^k z!wuCESAojtVom-d>$J*qrU>c$27}-kkILq1bcoU-ntUDF&|%R6Bn@6a$}dmdJ8Tfl zgHfQvi7v?zdC125sXp=P_pWBIEKJL1aClL*Fi98#IC)uX8{Q^axEa{#!8+B$_@643 zpTY}~&b*a1z^vIcS9I+6@eiHmhU@9iI9WRygTkEuzLLgjA0W^Et4<3Z$pCeltizf{ z1O*JQ;5g_SGBdv8V{E4ge)@QnIaFtH#=}jr!tYYOH9B3=7d2q2U;ekWV#C0xuAno5 z%y_0nAbL^G+@`j|)a!WHMDg{vhyxvLnaq|TsS_B}*ef>mg}Z(ta?=xi2i|&d|Cyx7 zl)XM;#=j+0FuC$-;-2HJ85tj4v-5@vVK7LxirZ~tR~gTING3>L+1P~1Ld{kn@(_C3 zDQe9MCBKJ$)d^NV!5SS84-d-Fp^y0Y@Tj&J9_GG%GOEG*TI?LZ2Wzp961=7@Lh|1A>#@?c`H!fwIu8^AVoE%RU7%@-pO{QDa#KB)QTxc#T8|?5gbjxJsSt1XPR=W( z&Y!0AHN-9{R=~v@qBSJfJVGt+pwn_w<=;J()qv;1!{l3$h@TA8+!!EqCmPZ@$FmpbW~ zC@RvsVquc!7t>w`Zt)}TZWcwwPW&3ir3`9|Us7$DqXKwR`XU-%ZdO12u)KL4zS8J{ zrUrL!hvn&vbAAv|i(9HM{7_c&q(b{Ah@w~-{?%rC`**@6dLR;W>>;W(3ThdWsRuU7 zFYe(6U0epfV+J&EK;c=5|2uO3^)OFe%@ce`Z7{ zdD#0r3tAd_K-!cWO<ow86xoN3om_*9B@I{1bpaE1=|YAOOq0Sd~W3o3|{ zR0P=yz+&L`MLx;((B_57GR1K78OtCVHMGne1MoE8c+wRbSo-)-E8kOMudJ+(lR{0> z_R}SYOah@e7p*b<`A51veZ^*z87-71EewdxCc~WHCVq%3LI^qmvq|jW^3sr}8%%l~ zQM~^JDfq^%xO8^OGcz6=3^)${p{k@Ja|98{D zjQd+rE8CQFXU^z$hR-2^0%SGZVGm>4H!Uul6k2J@Knu~psM(|u=sHw~JL}-s${YP? z$V7%)Bm=IF4TW^fV)@BiSX$<>e=MLZcV1|e2odsM>NW3yxkhUx3Now$$vq=hy<sgk~0LLd*E)lLH^Xy0=qO-;KN)BDf%R$eq6ZlCU*A!)la^;R{rI2KO` ztoF~4j*I)*jgjfuEiRvl;at8NS&Zi?LJ--*X0`K6M($efMll>iYmG})Z4n0Osdj?b z52GHwA@P*xwy$5m79AC1HPtn$pcfDX@`Ozh#6N)axCt*;Iw-HkEsQp`2P^{|D36(g%6r)acCyXf#@#Bb7` z?uOsudCvQu?|grGp%=)t?|ZE|=NMy-;UL^sxkIl^=llfH*F2{ron?8nG&Rik*E9@j z7qE1Y5b(4gClh7Bmu~wagP(3V?4B6exAH}2L z#b18uCd06f2+UODcD@KtL5*`=nQ~DZin>0+1P{`g6Q`U&;r}|2u4amolgQm&Ax{ zXT*OVj`Pn@x&}pfl{WUVghgZoOudn7jaAJfPsnBqWS@5Brr(ju;DXzgChL{jL>+Qn zIlar%dpP99jb&@&qOo@}r}Se$p90wO;q7>RGp35Z^xip6Yr zYSCtI7R%VNk(92!SY6?QlXN9`20x}A?a61{zp#hx+~$R!yrw}yNr}95`%8LxH`%h| z*K3sJ~0m$-6lFy=`7x}U=&VeiVa<;VROHGI`S`ac?^sD$i@~J*Xgv*fBJuFId z#fPjPhDrNek=feBF3J*mI3c$4Fkhj!+8xLYg|zBbL|@pxX^f8Vif9=-&74W#%~~MtZ79acij_} z=Y6Xhr1_=vSoi!_+gzxgU6E1rashVLAHI$bJVVnXra@;64yv19Lq^!)G(z!nF4dzm z2)}QQDjN}B3BDT^r0pY-RtsZ}cHQQ<`Khi7d|maDab_(9wh)sgzt+iCXh~IQ4KkWc zyQ?u10OyY5vt`FA`0OxCeBr5Sa|&5KnWJ)UcymnkfmV;7?u(mNLp*?yAW(HifzVo4 z{?9U*6!QOPP$|U^Do!~R!3I=y(m^Q0g#9RIvUYI_;&f*nwdx}@>6Rs$#lHU5Ft{eH zyEHakk(+o*nbGRz@E3h1QW$$o&gk!joAlv`lrR`vPR{5VPzk?0 z;dr=vxTLD|zeNvGdoW-U9`p~MU~L8;f~eos6NO|Mg#?GtGIGL{QWYjlG6yaf2a5E( zkDYNUMqWte!EGm)#@r#g&yE}LM2^Sk1yWF&u8;XPQaMp24Z13QZ|D1c2cyVd_X1Lph z0#y;?!~rI%%&UML9Ch>@n2RZx+E~G|8bZCSLCHlZF5!tHAg)pK0CI3DF?-zP;|&<+83 zZ*Q_R?mv5Nn;Eqco(|||%$KiW55QTz&EmFZ6}D z{F5aM7MUG_Nn65}$!Co?z`|E?i&Ei+QeX}}j$-WX&-MZ_d=cLycA?t*k}a;bR1&Uh zVT;Q%Z0)1YE);N{5Q3*r(A<^@WS38M;D-N9LJ9;>vf!fAqn#1ARy=8jG4lnw+929_ zEekvOIMT1mDyI_5?RIzf;oy=4B$f%5n~aRJ15qjM*lVXE*95BI6V-tR){ec{*#oya z@a`>+MtU5#ToO{8ETS4gCrR?O6p{oeL9S)3uzL2agGD82#>}(lvDLn|Z@)LCpmo?k zG`rY6=MtaZQBlZO70)a&R3w}io;60Ute94r z^pOZy4Ha$Eb$1Q35p5DfHQ+muDe7Q2Yna2xcV2v^v5%}8_046!8?Kk9CoveMuP&Yx zh?QwweB*(&!(nnk9Mwo!#aW_kD}swR;?f>0Nyu3XHBUR?m>H|TwTFHsD#Z)h(7|n0 z@7pWJ(kv*d=pQg72sEANB8Fg1;^ydh{~IxKxTD^hp5E)(lC3g#aC%NXxTYZ)>I; z(PkoO8FV8$+QzpZA*~t}T{;-B9qHh6?zf+UUFL^BoccDC<1&>zgpIW0`lH6*r!b-w zoV;_|*T-nRof5H3uRl&%WKhnxfa7PDjJ~%qo8Hs*%Pffu!Rd^BZ^HJ8VVL81-xJoK zLp{6}HS!X@U!#rciNw2`>Vv&r0)&;IE3>bdh4 z5L!t_1{14c4??Hr5TAcj|5EjKS&64;E_i<|bKh6&yK@MGJOBVeVPi5!;ir-y_X zeB1wD3IE=I{qVSdXV<|kWcK|O93eJ-O?N<*#vhL3U!ywi#MS4zlIiw(yM}#%6RVMu z^v=|Ic%^y&Wr6U}=&);JC$u}Mml{mXLKDjt;?1k=$dqZMT-}LJS>Ao2Whh-ufM2G5 z*kv^E2C$8ebJ4OgT&H!=SLzl_4uRr<^NdFm8+0Q zDp`*0Wc6}prB6&R`Na6C2s-wcZvdIvanGwa*RLF+%fdfGscsTrij^t+d#u-%xms;9 z@t5QdLHyrbh&{VWc{n%Oqu}L+?wdOL>O{y7?qXPg==KK1%iqDI_n|=W^8Pd(bMDPc z_ho+_JYTfc)9icq)B7=^rRKJ1TY3aIYjYfZ;xAmT`{PXHaVXh#=o>MN%;^jhj-xXU z%R^4Bps3(CUXt+U&_`tbwZ$@%GIcXYBofcGZX63exW@6H2r``kWp7GvV&_aGJlQRP zCOny2c6E_-&D)4$BYMQ$(h$BqI{srTl)X@t7+P2U)TC3G5>j`r zv_52-@7|I36xn^|C()F^mN(P(_^)F74n>v^3}{_kMR!Zc-|slW1m1)OYk|bDvhZ^a z0miLP8Taz0&;2}3R8AO>pAs_Fcj59_j~^=Gv^-HO{|+bcl=6P3xI z$t+gl89X5~ls{v>Ij(6|@LS@dL#``&RD6D!-T96%qd6vUJ-sZ;yJjiUTN4Z1VEsI8 zn*v#QFIW7n{(Fc(^jvcrH<5yll5)y&^OL`4IKIB_J;43wbD_C~l9ntKni+C?kF4*4tp7Fs=5%Ri5z;&?;%unR0B$PQ^r`%T@__?x@Y&pxg>4sx zr){hV#Qqbu?mBkWjjd=Jaak%1P`}=jH zkU!Y_4??v>8HS6U2{8TUtoy7Yu7UUDDc8^L8d4pzB?_2BDy>s0308;}-Pk2P$+zXo zTU(-;L@!8+=zSkqU*@wolrJalVJ={(D8hxbN^)S~S*c8|^T)6G`B%MZt(n>!>P%G! zzbh5p_WrxK$_p==Tu8hVF?VkQmKa*I=JWP01meruiw8kW*ec4Z?sI34T-(&(Vz3jK zi0OwE%MI*uWD7?puU`Kb2;}(hk`m&OE(EGR;5XW%=lhpuxbU~0lwFP@B>N=aFxxi0 z@Z6W8zxMYbTzTCiGaLy^0(yfchOi$OE!+|3zUj-^)J?FF%x)#cnD)=dg-{4T`WW4HTDR4F)B{~mDv-0Tor?Z%=2iU7)#r_syDwP-#)YX2qE zY@S|NK0lB@j2`N>{a>!P6|Qf4;T@GgOyMsQM3@SarA*9Kj^MA65h(_|+#LyY7c*Qh z97|er%(b<(Cdlmur$3q+fvK4pf`ZzZrWjzTi7c(=iGoPY<&p@J*N~Cg5sMjsZV$Jg z<@t)4eeDcEkgf*Y(&AV6H1k^?7;hbX9u?xF<`n8Out5q3=3yn?gGq>adAUQVMU_~e zGq?OcVbBXUpf4EBA^cNEDK1aaFe}jSW(Y?lsbJu<`)uJOT1F0;{esarhp2iG$5o;_ zoJoehjub(ui6p`|lUM*c_Ctd!2ml~h-wj~_s?>MVNPJTTR3)EnP%(sA#uy})(IHE> z@x)B>90)h<*uz&+5nM{Eobnw~--`XE1LX=0N3~IhlNmeHX;5-5((4cJ_&1*vJv?=$ zZN*y&wE7{G$6QKod5_h}B% zQ|{*_o|o}scGFL5)lIz`fa`dkv~F;~>;>?8*P*claxO%98Fo5{|3sVOD&!(|;IVitK2DgOGW6ynwT_~71XA;&L>2Gql zQONbI#ey}wXt74j7d~=`apXK2 zobClKJA+j#*G!dNWQr#@u~!EVTNjVS?n*-TqI;J~?Ul~IJT9-uF#=_a=~j7yeHvsp z)!r?v%e*gFoMmU9Jbo~B8qxwMODA~YqEu+2%x}SV6>lx~XU%5}2p1%@NR|f+ zvIG%(u%BcG&8o8h3j%6;DcAL#o(iN8B&yRyYb*3`|%X1shVZ~LiIxsa&z z8|yr{<1C5$I$JkyoB`f!V}q!)c;|O54liJCj5K98|NE=(w>|_JViU~XkoN=DXpUuY zTV}|st4L#eZ2<806_T+jL8#|6{xwuZ_gdY#42&9MwYnfgK&!_(<}X zYDBm9ad+M`aaj?kdwAv47>t!GomkPT-yb>x-+d_;i#Io+U^c)!w$qgMY&`Q6>&emH zI^5-aiOlhtmWF%bQD!=Yx4XZG07i=7Ds*Q<1Oli&;7?I6JqvBFbWQ20D$Erk%OSb=?dv3w$3*!?gdEG5{$`jz!qu>o_rD@ zNQ!LccJi?p`sERaiQqx_$lc6}*5BA+{8T-=a{%lSu8YRySw2d!}gM z#$bc4qxwt++v|wa(e(HOdUPs6kz028%T)=aLikEiPtw>Ieiskkq+qlHM$TBG>}hMi z@QGEknLXBR0Ay|8zmM0r>~)0E;Jh*WFc#MvRo@27*?VZxp`Hh zzG9*1U-iu>8FR8ojpdHje&%%_PK?7x_GqC2alm9mxWMTnv2=n-5b({l`;#y>@)$~1 zF9*A{bHc$4CtM7|6<;K)s*6M7!4PYZK_+o@%y3JtZ6YXE4`KVQbW|b3&DZdSL?z+E zFjWw}b4P0$4Caa~UgQ?sfE@PZ$ZA zx-(?>wV^6yDGGJvE}a>NY+v6B3ViEZY-ANGZy$wondL=WLP@#CO2nzk%lTlbL z8WuIE+w|8>wR>90A2LRs44^9Nds%r<+RabidYYz$G%;QVn9{7*yw0uwoZItEXvZ=w z$(h@S0&=$Yrm(TMzGG0X?@iyrHyX4K|BUz{(G$!5BgYchIk5lKj!QR*7R!wzTkwaN zwwNN)?T{vkx5+VeYcBr{(B@mQ1fO_;DYW9O$r$FC8mvz~V)YZMJ8-HynG47fJBL@( z4N<;7@p6TmVEPuz_8b2m7<*g=>w%(vZdkD#I1y6|A#G>X8K7a z{#@<3vWB$UL~_iOO=f{nRk!!1@q(iox*Cul62=If$cl8kYMzvf+7 zev1|*eWT;RbyFx~aC2$lcdMNjp?&W2vM4`na8o2;#W(;H?(jPB1}*n$BjMat4pGq{ z;pn_!Y49RXBEJHzpp`QsYF~|9G}_XV zH{#cW^5qZP{Y_v(-u)?vcyk-+ zJo)2aI&aYKLny4DD}zy|=cT=GfoVztFc}PmC`+@>WbI{GYpk^k){5N$ zLZ1lFMyxJ|4n`lG*kRCNhCKdMS64`|DG-=03tL-fVO)@_7x*cak<4{X&_fZ#e0HA5 z4#*gMWbP(Gbvk?4Kmo>5#*9SRv7<~>Q<7Nq(BZWFG4Pxq zmT&7Ba)XGjsePX}mR9 zQl~kAfU9TugkkX|=CGi^R&AeuBy;p}m<|y1*V&AmfEEVGpdH=tzFS^Pd;ZKsco#Eu zl7vG?9280u#J!n|g3=w06EfUZ8pJId$M!D-evPB{EcKq95cPlF?>q5A7yg&q5@=A} zhQ29=VS#vGANc2r&UI6pi#)+Aw)M$qpC4;M7U%QPa9B<0$B<$WC$lDS)$XL+RDv8c zoSb8qqHd_tWEl&OA}5XH*&|pT38%v~^q~i>b}BI*j_}$e;^1MDm89c&#F#YhSn&kx zbuys@Q6Hj!gjMgP>Bggc-)nV?I#m0wqt*8AOq^1BzDRgO`xVF2O6_JLl-1qsb74R@ zci|=?2RAQtAMew7@Ohe&)$6{Uwxm1!)K34rPxWI4^n|lDNUtusWY zK}coB`d=ZJodZo{-|0H=dT~za85`&eo;T?5z*XQ)SlPXO=8?wFUEPd9E2yq5`2vGi zOVarSUG*?uyCE~_08x%3wwv{OMt@0KP{i^BOb)*F`IvokF)!#{Kj`HW(-6n?exB+N zV2}EM;5CaX(7zXs70c!bU7^r(?hy*-CCl9rM-jaxf03A8`oVq|+NYd9ji5SR0zKdI zty=mu=&QDF8?qPWeFnd(D`6X@M^q@3fa!a(Zk z(k3d18#&f1{jBwMra}w6$Opd4xQ$gRno_yvH^0d-cZtq3mWl^Fc*g5F5#3mZKp@)r zx2e?|r(tu49mi`Y(Ei>-M8y8s{@v4cA+l;=j{d|-);oyoh1{@%XXMff2gj^T1fD?0 zgK-BMhhU$jY>QC5k;~S5x5nFFO6}ATvy4YBTmLhyLS|fLI1w`nqrd>jlnt$oPPLLq zgMMTfIujTcd=!K6tGJfDHKDLBc})>FMFzxO$}=@h>tJAF6KOGQc?4)UCOuB!9_0;9 ziws{)2f|=CjELB4**`M(8m2zEhnmX40bkI2hkq90Z*N8Zp7}hAhaT7dxNEZ+;4}UU zO*(mHz_En|fxSM%1}9|A3f?iEpu_?_?5o?l`GkW|5Dut>(3J`hO(tf1d|woak9sPMj&=J{=1pCDsW|%%cM%m+NFj!sfVaI z$PUUj)huxkDO@qb=Cp^iU@Wb6y~$L)XrlI5AC%yKhGpbl))Gm%fR!eXAoa z7+@!fX978>%gn((*_Dl{hk0)@{7fDem8mRm<&YrSISMXVqc zorqy@IbJ_aIGnFW-M^}(`3c_8@uN9ZR}(1qb^pM#IEFTmk#cz0=7H@P=T>jN7P8*{Ym4yZ9GdWs}>GRPau!G zUst(D>bQ*QhWZHX;Q+0 zi5|bUUN!r8zgL>ZcH&bd=^>cEzR9fNVngP^(V`EV#5vCw_DLIGy0aAZPN0d&4 z`wI6kXr!|HuuKa*m?_r}@8P85iXZ&K4}%>yo{#p4pIwwnO)-15zeIP+OV0#+1&3=e1c`mT(|LmSTd3&3IDu`d_Tj2@CGZw4^1~P|@>7q8 zI-lEFM}Ci!ju%rDH8xlF_V7JS%+^t4LuOJ_&&qV6`+T3$8xmX3;k&5)gKDWvJw37O z^a!VlAhH-F{`*g5?|(9NE~H%md#k$?Lp%6swSKZZ6HMe{)p|T)8Qi2d-zrKDR}`?a zd~x5A=k+E}z!9m2fQ(UrO2mB>xik6U=R__PrtbcPoq!Nddyr zP7D+A+g1Ksljn;;kPs5*^12Mer3jm=VFE^$M(r?H6fy7PqC%AD-IvK{wsmBy0w`M)|72`+ zUEBqW@w*KBau{MiJ7~M0xf!ph<2cduRZ-_aKdSW=+BmXfO z6h3GT9SJzExm**wH#cbf-C`*_rT33f(EaVm!>tmPid|eq1-reYBh^k_z|`8~ae%D) ziT}4ThdB$t3n=EEiC{}Y8015^Fi|bl;n}QZMUNWzUJKsa4mjmW=lc9qB>k|Z`z;)5o&JF)zI`57&L=rw#Aza;D zC`c0>qozjrXDe20oobhvA5YMMFpwxY_@lb`UA)-(V~v}fip$lf`t`kz(JU0XZ>25( zI|k3hybA1qVJVGD*|JY~p)GCLe3OcT+Sfv~Sj;`V@ipQ|j!DeKlgK{X>5g%9FLdc? zKt2qaNe+?xv+Q7ukBm4m3HD);?6Te%$R!~rn0ArW6Vc`9hnDd{2jJE15{rg-46ByA z;ka&K@BiJTWk?IAj zGBcGj&bM^s@2d4N)ZQT*j0e%H7&TVZ$!0Trp0fKqwFB`B6vJ)Qx2m93ykXpKKs^nA@BU||U z$m#T(Pj3{oazpf;j~2xqM2qOvGMUev-X!y18^lHHHMtbG25>vt5(TjmncOk{dzINgD(FzKVG2uX%y3Y1ET#N z|DuN$v|AKR2MFXcqv8YcdUiku4+h`jOvepY$zS`}>_2M>4fu#1*wXiUY@ zTFN1Mk=q$^O)rtDqaxuX79yj%Ap8e3?_OQiUv7wrjP}n`=-uQH=kwBzjM3F|1`Nkr+uW#*!yc0DcOqY4+e@r!0uzh z3p;TtYc%uZ-}dbXU(#`&rjyDR0hf7)*5l(rkkEC{NPTx^ytV!_c{cNv+nPXpa?@~q zC@tfpj~odjgSJb`o4>~-1PI5u-AbRBja^hql91ADdlcQ1qDa?+X(v`p!xCrSqp&1k z;}~Rj2bzcUHZfj@fc19NX~FCI&{ULKGL2z3ow5cq7fK8m%q+j$_O4WYAo+wMBs)~N z?(p1UHO$L3xNm}P%35sm$mOp~ERUbknyb%Og8?T$s_6(>xA7G;=yyyM)Mt^dXj=;e zF>a!Y{@hIkpA4Lx%LnbO#&IwSC@j6`xe?o`)e?*)%e;HG-Guxu+vl5OIK4rm)yM;b&@D%~sny zz>b}$#%ajqI3GXfiA>=v;g@mV?B5om_KVoBOr=LT%=gCyy&AYM5xcpjc%Q-?k{Es- ze~2(O(IqOeNgCOD@xhWL;-xOR3p?8&ojhL7^pfmY$yA&yJwANtP~XcD`gn6c*eiuH zJ5iw^Q<9hFIB+{#PgyMZ_`P!*UNck3s7-g2IKDI5XG~&P=_NL1fFOvTd>lFasS=Rn z6mXKo#=&9a*^%J4PA{$2^Jv`&3`0P44=s{>(jhRmJN!YPaLC$m%$hQ2k(QPQcM0O# z-iY2GCA<(7eNEBddbOD)0?c=T;i8b8TE2y0HPQBA;(7Fbs$Q=b0DH|nwe z12;vTCrjB6c5sENt407=&NK@P$z@01W#DT((#(GG+~zq)8|R7tLuO7ws=DsQhGl(U{5%O2oQuZA1;YykFaiVB2=~e~$xQaR0W+BDT^L1<* zgZ6BWQe!y4BR&rdRpLwYQ62*U=x=(}XQA z=sT_O&l6`{2SD=?30-qTEy%JvxN2TY>z5I*q`K;q1ly1)8Duk3OFh(0T?a&F8b1AK z1m(g+K&xhX@yetsk*S_xh^8ku8>XqP1OKC&9x|w8%#-{gMsA!gUjKr1ZDo@(2-k#? z>?u)5O!}tW7g7IFUZcX0qB$BNekqZfuoq)089lSjZ^)9|h)beCYWSS=*J{QnGqz|h z{wom)tz!~I##@@VmbM?HAOjIm_7E*1sV{0upUjGIGGqtc1th8su*>)e9m_(}PZHIF zDEYr>HOz8!alJKl3Er?Jlp<@auTf5(>f z`Y?2{Rc#nU{jl{Ao)R*k)6_j`m}fb;bw%AO4eJzrvc$c#?aY&Dm@hhQVo@NAgZ!DH zQ%(uJselOXfGd8DrnsmnYD-W!NK%$we3xvRv*g6OTekVy4Nse2fc^D9k=)%zE^rZ3zQX+c z{oxqIUJp00kws6~5O9RA6wEDTUcCr7xbV8#NWbdD4oDml1Gh)!Q+0)0uT`|i+z=3U zpsoOX^x*G@z(DeAc=-77$i1){eoPK}w81^ztr_{=*eFLJ<9FFjy$KCQ%qaQE-*KfJ z0Ahb#`zbvSgR%XB9%G0=eFgVO!u_9w#;si6%kzegA^HT75cPjt=pTRboL!a6{(>NI zmM5j6+7!Ee{{T%^5&hZIgG7DxX!*l=zp{TBZ04z7#@GUrx1ik z{xdSQ$K#y&GRy;R>YqbiIJ!%EUT|VhAoG#j`LE-GJ)bbgLTm0xx#gA|K7-Bl;!xxw zzboR@fuS#i_Ir=_ob{)yE%L$d)=GSbsEDo`drr&6J+?{wI6UUmrGabRav;O*K%!13ED zCE1!cbJXm>R|BudCFy?Ip&;6Ai%HPqEhb#QBVi=VT$7mU=MABIHz%5Cs=iTfvO8qV z5gE+&5Aq0-TrlHJXqW5!1qFIWrjg0%;UB^dRc06OEagI)OrsuAo`rx98MZn6x?gH; z3pI3@o|sXRNzz!`Tp=@uAH34l)aMY>_!NROU4JO^l_i{(L1zAGsnTCo+{xk~3;s_$ z>#CxAp1&n9)=#*#`~VX~j7O{u`ktHT#8>f3yFCfef?nnY!|!xo86|?9$c$` zwyKXqXCdn%tu;|I_)t-Pmh|65;Tqy8)vcrXsda#!B^|7Fe*dK(CgDS;{=B zc&xxt`JbwR{Nt)akl~Qoas9PJk|kUnofgR$;JDwPq5@an+gUI-T`c)>id}YMN3Lan zNTS09w~?diz`JR<+i|fwe5;Y%4G^FL_n4*HdXjUnUO(@+Rw{PKQolGL!&(ehnr~YI zFAl(;y0?!3l@DO#{B_ZO(e~>P$N~$Rcj{H%4|Yn`);u)xJ2 z28GX7XMO$NM(uHg$cRP5p*04)dEJx@iTpupemk)dIr{@FsFamA`8`e5Lui`+oMj90dO7^-Y?%!ou5=i{}H_^2&{bpO7LwcDnJx zzuX`NM6T8LfDCs{iu~9?b8m;yAJc1P_TlYT{eS!B-e+u_ZA<0eQXtt=Tg7+aADG-dd&85UG%l( zo04HJOkhKQV(0z{2-rND7QDaD5+2>xe zt*?)k$_8%pb*mF`VPCdkwJ9LUOn2ceKOMD$0w86$SYXisSR+F??A=r z;$lc2%uiYU_3;IBF>nJ0Sc!TxFdGl`Y+a+g?WDei9}zjh9C>*`@sIngDTz*6s-RnG z34FbSRU8h7QL7vd5{Tm~N@0-idbp&1KzuwNIUxI$n~Mwjf&SH@NCHEX&)SGx@3XK* zTZ-uz<9}Mmp?g{Fv;V0z);yE|zG-M`;L92^^oFp9{m8Z&*Wp_e`8q3PN4->HcDRSL zgCZeL(XWeYJox=x(mr}o%B&T8yg5KQRor>%*is0v@AKr z)lJItcayL;Ugy4?hw%w8G;veamU~;CMRD(1BypQYD1P7t&#MEmU%|qCLKJVDPP*tz z%VN{#=RB%z8Fg5Z;?Z$AmGf5Xh>ccyX5?j2UNI9X%CTI$Bi^f%Tz>o*IqxQokB(IQ zLiAO#p$lttfA&h=d>VCCwR7_QIq?gxu$z5ryLuF!LwVTZFJiG)$9Kvg2Gf%~Xc~@y z*FF}r56J};>U3W{Lw<^;s2BB$Sp_4KQKbcPKY8`kjS}R?7Dc8VU)~F4h0&=4VZGrW zXkJey?&>dMw$fa*Wtv$O>JUy0vSe%A^XlFNyRr&Y`fOv-{?I3?v>C&sE0-RFm?5FC zPNJapq2N4Id0tbe;gqHc5qY^&)7UCqtXX2fR*xjIGehs#p?BJXW!>q7oofJ|O?_M{ z>p~!Yv0PDT!`~+jwCTPDyMiG!H2VoG@r2GEhqHD}E*OsIcZWk#aJRPyx$8gL-jfJS zz($|imA2oAC?*fK9yIJ9=wOl!Ij*s7W!NdfRmhswJ3CW)s)!~0MHwrZX-lEjQ~+q9 zDT!rBzNS6u+sdrPzqZ*)MmLV}E>%f$y>@kT5oXKG(U1`FX;ORqGW|bB8@6W4 zwYm~X43sunG{w>^#mLb4pe=8|eYZRy`)@z5tK#P6bsyTx8hQ#Q8cb|#WA`l0Q?h>U zR0ZT9;P7idKit!)z(Pbs1T1NHr0YQgnQ1wtX|~tQa(5AUt@02ByUKyBfW&Ri$ACz{ zm}LvOM?WI+rYc8(eMiB3R%D@va7oGXsIqX;LiLfm^OS3SY=Zi4Kk--J#(Az~){MF}k2Vp1n&uo=@ z7eVk5zUP7Gm>pg5u5M>b3SP?!&Lkb)$Q<|MwcisI1V`qA4;riNyGgavnU;iiLO`+a zMu_s{;v^X6jh$Te+DfeDx%U^F1Vqo+QO{4Vi+ks*sf0lmS(<%=VMB@ItRu%$S;$X_ z9WCEFGq@ow#ZBbYxF2g0J}u%tm6Awd#K zEuB&Fk>~0(4paf_Oi3n4i8Bc8s94UOhIaK)Ws%+iV|4>8RsqY zvwj1)o!||F{ynD9=h&#BZjM(T?+6Z=eN(fRz4dJZf|dzC{L}-ROtdUa;Z0?60P2 zPl7oqy5)Ci3CUr4ZLe3-D2#e%iTATMK4^v3dHP>dS&j@Jor+}_@EEMGOEv6WpQQFG zDo$+LQM4U!)i?0>PLmC#YL?nXLW??hBB^9%zPk8!32%#WV?t026I`cb*@ zK^;8!KyM(eyF6O^2XG$|yT6TKH(EuHc_e z=O(M|VO{T^>m9T{+pZxrkK{rMSmhKMnLnq)@8$yG#6Wffx>)cJc1H&s&Kq@A(>tJH zqExgmT4QlX8s0h~xzU7zvjEz#Nn4(*pKZLZ{LKcZ7_iFp;AU6IJt%ea|5@Vn^QAy zlWF8--`A@4fz>X_!H)&w68m8GbcWqsoCJa#0gbB3%YpQcUxTG8JHFw3pHI&|j5s+C z(G(k4k+xQvNI@q~MasT(xv=3iuJF##nCL&nuZfv>n2zZgX@9NrwWd{_@g3$f>gI%1 zsS8uh=t$NBnN&K6p7Iy_o9{F|7xY?;eV;3o2o&-|5=Zl&n_;|&YZ`t=+9!+Jcv9cJ z;Ab6{-0uV)g^&d80d6Gwf_@cMi@`vl=GYXsI_=@NEf+}gX4&*dL(N|kjEZLC@>2*2ygjxn%7q@=R z4))HgQQ(sc+E3e6Wq2hhC!3O(#bvF(cgr}xKUV!_0I1)>){BS6yzYwyB&f>$&RTY0 zfZ1Tb(rQ@$!#Nrm>rj0?=M$pO?0f>wuJ(gl6V^U)pK-bQg=46BoY~TkRuD0p$}9(AQPJTX&!wM=oNcvbjW^fVm*A&KiGqAm4Q2uX zw@pmro4M&nr+q+(%{IzCbnw-)$|r?^a!`~aa{Z^U^=wMtD;HQiE`v0h4+vDTN?ad|6Kx3=>Rn|bavvweH!*79u44$5;(hq(%p{qkNpsQ=Fn5{^+3~f zv*LWcvS=Pm``|8hx_#7ocdia5uQXmHihQpsUb$-&_})RXI#UjU9Jlc_&CayR$rESC zJ>dSV)Vsg`;Lke}FrCD-?!53se8kQs@;1JH!t2#n$=mvK_kM24%4z6yT2>*rHZG0c zIq(NY&B)a|UM$Jquf zi^}(F0$DeoAcuE2VvwI(hR-%cuCfOe>T(?l)J?zY5TY`12d8-Pt1ndhVEh&`l6)?h zkf|$;`9_t=(M%AXn=)qL{XV^8Sh>hO#ZPs@REEz@7Q2OoUvC=XKZMbawO1olcsY{p z{DGj$XhctS^3ykH+ZmAr1^Eq^WY{$+5@2wI-=cNtCI3mUN@Sa!6Z7-foyuwaupgR@*NXHaO?M!Xs`YO#5{4W|%c?yyZL$p8o4kUW=WhAKb1lPE%?S8|SX?C*=0b zO!9u09Tx-;cRAzx2r=b0U3zr$0i*DC*TBto(td7J61<3&_8;4OL}?bd{YSa>Ug->I z?FVZ&qW^<TX;}R|z zOau9TR013SYEBZ7+pT+m$p&7r;OYAz#jVeKWGZEsdNsTvBWsVCbNm``OYn~?D=VwN z;Kd9Dbtb+l@NVb!-06Yu;YjTM)uWgJu)g3BJZ5YIdH+c#^-{Y~BWO(OXU6&%l!qGBz$JRQRTQ zzN{kgg7c;)j;XEMKnc#Ls)-HDc5)lM;4pMYr#llo=&52-B|` zsJFk4crTBFs%s?LGtkARm~8c9l0$V^Utr2HAXm?Es7^0+da2xO{z)ieXi7}@J|2SI z$^p@A&Q1Yx2Y5{5HzF5(1T`^}yD*oe#0-x5HQG4#a^q|pSpmsKVx26)4j2X( zLJ<~R@804B%~M&w)V}%|=$|chAn;@8KyYq~J315@B>~g<=yd%}j(@ViO5VfZ2$#~& zD!+UGdHhz{aYX5%$ZLD7VgmVs!~r3-7*%<|Y`w_HF5ku|5S5alorm|oa2cxi#WD{mFx zFCdd1gkb-8ByE5_Q(z9Dd<>>#Sb7rzZ_Po!#vic8f4OTVrbr-@E$9~UIH0V63~YgT zDFPXCA=`#2jUCv|V{*&wPT*bD)no4Un!w}HtZ?#=>A2tN7|t~E2VnRkQwc&0sTnY( z0sunXzIQ1J0g|JC=p(0xbEgyXjwA93Ti$@97~_A)DJUX#d5rm9`(BTa1%(98AqX8d z(CPiXz8pfH34#wrtEfG07)=qf2AS`LVLO z7vD>pB8?W#!}xkw_VgQx_0bq!D)*g%bm6QWn=*$675mX<@)qBQS4+BXu3kQmy1lP2 zd$P?3hUjmk>NyqW+AkfcTSAYH5WR9Q_-GF;I)1mw6pk(fB246NLc{O0ka}Zgh~JL( zkSyT3kh;2-EAS3W+lDWz^^%Ma<6Ck&q&B;HTm(VBAb|k56+O9bXr05`qR&%bOd6sUbG^?o zHQZQ9UhgpHsxORMuh!CkF^nPb>hNJ2XXP~#dGYh*8H!_TllhN}Z0J`4xQuMwj= zep)EpjJqKch>empZ(jq7T1Y~^V zPUmwF6+vHpPKkbbK4P@F!Ov8a#~T{?n=O$QyEb!t;SZV*L<|C9rR_CGMn`PQ4QOu~ z|14e2Q>SE6{tG|wfd@oGde&8|ba7JMGkW@8dbp-8M9jAyt?Q@ADqvFmh3zNuW>yv- zNkV&O(Fz0@;_>Y%6t13^G%a<@D11cYANO-AH8k)g1!-a;31D*Jtb*y~=a`Z}XrGsE zGe>)9GBXu}L>HiOb8nMG1>n_XyNWY?95O$RgJvS1v`To+kfqzmB#nKlpQs9f%w;=l zTeUg&>yVm0A)@v(!W4BjcJ@8h9_=jU)hF&H#Dn=0m6 z6l?OGPqzn3LNL33#IlVwneWwaU#ZhpJIw1MCVrqIOS4or(@+xm|1tHI zQBk(r-!wxH-AZ@oP!iJJ-Hjk20s?{{odVJ+snpQj($XLd-Q7s{d;6U8y#MpTwe*8a zmTTYp+WS}AIs|@iWuwh!iEU`TD8qSu6j(LuV5S?NfIH+Dm)Baw+V892%RR1!e{Wt2 z8q-HwV#g9OZ<+*yGjmeAt~rU<=IVO`�BBI{D~!IEPnzBLm6xS5P!Qdwd9%CF#1L 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ÔX}`>~mK9)SnL$I*B9Ikp#07 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≫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 `;2rGM@?6OFn?gmzEu(LP6 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%0Ad)alp?n<9} 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 z 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�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¹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 diff --git a/src/bonsai/docs/reference/images/bonsai_customization2.png b/src/bonsai/docs/reference/images/bonsai_customization2.png deleted file mode 100644 index 6eb7610c70dc0f3f93932aa962b7e409ec896265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1723728 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

d82a%pnbcp; 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 kq$_-O$tH|%3J`^|0KaJS=Qepdmd+YT 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%0A^UEeS>9_tZY3|goQ@nk-PzuYv3&=%kTdE+;?? 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

oh5cz5^p5exPt?goi)900kkrgvPzgCs` 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 z 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⁢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 z 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�BBI{D~!IEPnzBLm6xS5P!Qdwd9%CF#1L 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ÔX}`>~mK9)SnL$I*B9Ikp#07 zlj$JKCt|0*_zWR(T7{$rfwWi5SZ%3_CO-J>FlGzv7jilje^>{2u%Jp}|I<(h9fG&3 z580|qlE9x~r%9^;jp7=*0&yQr(>dvcoK38c9s+XUS zzRjh-r4$jteueCB(-V!c$Zf#pqGz<}Hfoono@ppRyD-vLyV)4uVY&%@Gd3c>!F|2) z2X=6ckZ+LC7#-I7Eiz~BH>SomZPCdeT-m4hO1zTumD%lDy7QevR+gn@ZTp$tS3k{j z9Irn5`mV+v>CoDc+R$YOP!wQtQzXd@h^+1Act!&O(rkkrbUT`H5+ExuAt}iIluy_0 z?__ScgEA3oWReg{UbsM*^@Pcbfb1^~%JrKe>RQ2lq&~8`ezM}-l$Uq!<4){OPpJ9g zZF}m2ciX(~dXa8=yszWr3fT@JjTmTH&STQbvLDrHbB_%yP)Df--%LK=8|QZOkQX5V7tU0^5ot4y;dgxN4_J~NWQjg>4kK@G&^t(b% zQFk@#!&gpp{MTIZQdHcIS0sm|<~2+>j@ZWDz4UM4sWNZ~!$#0P?Fyv0YtRAju{d zeD1LU*0e*b&OD81ESv!tREq=iiX&oi|NB{5l>-Zw4Od*G>p0(%D8vvm#Blx{i~{bj zTWtZ5CLG_{pG*VA&9nDk-63<8^fh+IFV$@PFItHvjw_)HrQ-BaeF1mQ^r^D5|{=^!p7DVR0#r1H$sRsnIrJor3|>JMg;FeG?v zWnW@t2fEn;KD##9gw?JNZRpd(Wn=i&ebJ#MR-tucVTbZ&IIys+C^w3qAauN!o!xZscJQ0>t&GiI$B zWC}Eam>F_&Ka5JRWR9seR}CdccVSE4Am?7Yy}Zfh&(@D*cgqf~O4TS5@Vw@W#|jHF z2d%!D?n}^lc*YoxJvpy#%wMYYiKM}_!^&&WK^IR%2Y+GSqEn)gH*w+((^&YxCWkyG zq@{{atb&YM`O}~xJt7$?6jG`ZE=Qx>cu9rOgZ-Zs6(2_N@8>eJJUD|EI->}&WYGU6 zHVNxj4hKRk+=7FT!8na6m~cb(K(DXYrm7CF^~zwq2pz48gj_6l*Ns&74(CsBYqw(K zTxFXU_-SOOF<`wOKu(@AHoj!<%Yw=C8Bnc`?-FE!6!#IC2=K?5M36bfhfd@gGNYsY z^KnmXLSq%HmS6fSLj1^`B3QKJ9P4o5WWkF6V`0WV@~#XT95=;t@mDEbjZ4ldt1rc&CqQCv3_bbvP3@^cCxWcA zkIc`Onp1SMl7 zZvcCwh9BsNNaK|WA(j9DD2GSp=Pn8&<`L+Mc7I6M`B>B#kx6KRF{Ng}MH@t;&o zB?<(n7=H+&uwtBXNgf>-7ew#tan^Nc%|x$IXH)V7<$z7@Er(X=>+<(+);?gDsZ+)= zCKhU&cse>|AAXrf-D^_9Wf*Ssq{I%#g!4aWfpo>>l@64}N03ruhneU^iYf8u{~}V0 z8X3{8EFemt`@ThTxzaIYwdxyKdHh4JjGYHZJWF`%G7p>H88X3OIdSDWwYsbji#Eln z%L}JZjtxhfAnkK?F$*$-skylz)1(Dc`yvv5py%}15Lt^O@&92cvPRxP?t&LE=$dZ&ds>p52Ng$?CQHpWM)vgQND^L9KJB z*s11^rqWVvzojWTEvC<#IznH@azA0}DzR9;5<>np-qs?>`Hiq7yyr9!ZNpXR+fWW$ z5Ka~X32TR)H7pBno9@^p-)cC|AmOY_Thcci+P&k0tdj>^@m!iDqoo-$hhTmrEiITD zIYyV-uLOXE#xk-kU9q+Jt~VartTz4XeoKCWjAt^WxpF{?uwETA%;Z`8!9?8Q@P?as z=nOfs;8fzpTM3s%qSynja_Et1+^@kNrxGc*t6X257jqPr5d`(SPQ@8 zkeTyscF%9ZBa3B1uu=NXZ~j&!8MbH$5Q*kPhRKJfkmYA;^JB7>o_MGT0EdD})A}wnAOlJM^9u$zdI%YoQpY#IB{{%DAP+Aa z7GDPs_)54UePe^BdF}N3rf16rGb74h%-l$!=-aAEVxjNg9aiVtj`ZUztKy$&DUBdQ z6)`a8)rQL~CkiLoH8zkd4rXAn!_i(;FV!I|H{JYFR>`J#;rbuk zfO;<*z5#7~lA|xTSPG*A!Kp+f6=rlZS9stF^=cAJ564KAy1warnW~Qcb`s8AF9OIR z(lthK@7))Df0Mxf0{bZ(?n78#bsjPVZsDBGIjP>8hh(96kR{xIY^jly^>hA06he1_vA z4y0f*LD?sxPCgc2kQadI(qJ3KlSWGKvI>!>6stELroyi=T& zdEc#=%$U`MCKH&1K=_o6a~p(1oSX=p&0Yi`5HoJS{GiVjW; z#-CuLove)I$J2T?c|}D)rP1olBZBpJq5D2wby+>KoIqJ6c&9w2p8`OK^j?-BiAP{=attdr1)Mk z{=7eORp^RA5hjFOTwhKv&5H_4+ZC}IupM9{vZPZ?;rhP}YPdE*iR2|=?Wf0Ob4vOy zb_4n@FJiJA)Nx@#W1V$G1P1V|zSX+@!glgDfjyb-3+2Apfjw(oX}Dqy0(LLSOnQ+; zWh6rG;r?I9of)m9xr&M!58Zp`LbvJ+X~y&Jj+Ynm($0vO;}R46XW?<%bn6HpJi?fm zZK(8ocxXb@Nus#*nIj;bksPCIQekMwJpA*%(Lhs;2{kb>rZxz~D)iUWdpzn*>du%0 zIE=~L zUbN0V5u}qIinf@y7HzUqs<~aWx9{`&mSkyyDhp|UI5P>YS0*fIzo()dR&oRr+)d~F z;BMkqXGqfUKanCU}QAlF^*N zy^k8PZ}vR0pf%T?a5Pe994Agm>|9BZ)Wa#m%0=cB?JH3lAqsSIYUZ$e9aV&%jYsz@;^Qw?tAXIpzCT#JJd}U4MsH^nzLv)*c6>IXXIb`3!7_U ze%{2b+aisD!w*j*ztACniwEUGA(dCM6L_hrI_e;oCh}IhSr*x?OF@uRYL5A{`_e15 zsy2uI^OE-R1Y^kvN9v)#u9y9Np-8|#n%mn3tAeDW~XTyuM$y9;*Y+O zMRzzw-WEDD>HOea9*C3L!H1eC>`1#lUqc$;5i4FZvO=-u^Uq7%%#*bfUB7pmX75hkrxPcfa$0Fr^qKNpi2Ze)~> zv}5Z^0oh<4d30Hs>MS^M=Fu&`Cl(qW!h{pec-BQv+)J-i=p?=(0=0+{+&sDVlvxao z*#_tc=Gje$T!>;XsG0%@(!%A~j9#H_j}oSiQexgg&~MsJ?6AgsafVH12#&~SdfxQ> zgu{tV2!e`o8*Gd?U|Jy#D4+5peaVwG6%Q8#4_W}H)VSg8u{ny!scd|lfTYo3tMvCe zpOviG#W1{3ow;kPnO09=0E9!L56Oq)(=}egOibC{TbG~HvBKXrJ6$A>`pw8{t84#8 z&Xkfm6&2IfC0zz6ekE0(i@ujL%gfsHA_kL=)6O1?}=d0>b5668`A^gN?>cFd}D>di)%!K`nlkZZCvZxkjR6jD}}XMyOAAnf|C zFn@CBxu}yW>}qa){qto-=~SYd07->5Kbx`=Q^H4&89`n60iILqUh&!kDXMs#S`X$3 zeAccle$>9$*-Bb>$49*{pF7TBmvo-l1WRo0BPLg9i}i(jOuRfO*lz99;KFywQoY%| z+|Gk5gIt2_wpJbJI>DDhR zU9iI-fMqetRiPsVTl1fcKFlQV-_HeQ^r0|>ENvPR&-~MiRDYYeZQYjBg*)9>!ciFJ zRULpHG)qdxdp}mx0QmD)o(J0$wZrDqT<~*D<7)--yxRM}glw@99fU{S60ekWS=+R9 zqXj>tgT~U(hDREDZXG?I)$X}FFg!3_zP5W~z!M!kX;*tCcFYrmIZ*NEOV2UJ2)YRh z=gYpC2(-UjvAh(y$mEz1y|-(3bm>|Z46StU!MQ{eWcC53fapCTN|xy4%R)<4_$Wq# zDetn-Zvr-=LA^jbJl$bGf;lZ&2lbDeD*U7VUQH&r=Y@@5lVfEp4jmx2s&L9@98#!3 zE-x>wm%B(W12EkT4E&0UXwduU4t&hsBUfl%nxLY33+ztg()m z*4<&THjncL_r16G>`zyEFtFeJle(2ZER8KZtQI{gWE)MR&IhZL)Vt%M&s#$pr~R7< zeFD6L>U(JMNo)S@i{GPm+s@@0H61=p5tMOXc^rQ5ydr&}Q_ZaoMyrVslP!mi(&9&Z z>zKS&bDW#Ur22R6eE36Oj&JsDk*M#!irYJI7*wN5X@iTIlavh4vLML5EYr;7UM*4U zy>jz*s%k5z#YXX3t=?x>`Zx5!5&!qIs(dS?2P=CQbmZEq)HB(n+8)#h3ah%`E(O`f zMVKb8^PuiX6@~fTI=iR8zA~oKMVy?ov;Bw>Y}-m`S|{eMGRujc-?C>(Wi4P zlb?VgQwGaQGOb-!cb<{!*N}By8AF(uk(QAS$W^jO=SQ-}5}u#ar3aYlV790Xe_0I| z2_hE>ss>k^h?s2;IpfnT{$R1Q0^jbl9P{b#!A?2*xsShL;LVXrbl=OKtI8@yiQC+7k@|bD7Jsbq)0_>mO-*8jiN;LnAk@a>$1a>Sns$|RhC~Y{7_Eh2Bf`e` zT(@@|FZgDOz2b?&z{}ZIAQO@xgiu~h590x(0_P71v-BXxFfXj;8*)=Wn-cUL0Vdsy zCgeXR=KgYmc%xw9CGUX3nGc>X59P#uyVenzf3} zo_BCr=^S&Z@piIlfoFZkX}&iyY?w!Tz_GBIU+ME|jsR6-`>g?E9ml)*bM08>xUVov z6HHpo!ukr&p#!Ji=vz{?>{+@$9NF)n#3`Ey=2WM;xg`#BIOs$j)jM~l>byela~DYY zsEMDwJKkpCDTs5aG-Qw5cY?jUKO;yqAWhpYrTvOeY*Rj0v1H%gtU&Ms2(odax;O|x zekDp0TOQX+0h4^~_CJ{yN6i1d-5k*Ta$78DkptW)ILv{&jkp#6$TV_sp6(dlJn@xeI6pE3|vxp2;sYd?P*SK~uE@I3*7mRvD{{zq&WKSoRI+n|x`y-L!qWYX}puz?^sPMi3m? z*OsBS$xC*Z!#kW#TupT%D)xc|$vpc59jKEai-!gG++R4{uFwyoayF*^mPPfCn8dn7 z!w1M>7q7|9FxqUeywrjzYpMXvoY69(8Sy9yYlIMix{LSyG>&znv`??R~!L zZR4^oOfMqdxEvQ*u8VxD(tdMjb9sGf-vkE7PlgWj!Te2wb>`IPHHJUgV`)b|xUf-N zI}MN?LuA?sf?+%_5~r^w%pr!K%NQ1P+VA7-H->ZZ-!*4b0j!IA4yBSEY7m+TwyX`h z=S8iw65faO_Z8opNG30NPU`U;;N7t=QJfs3+k4a(OFcY3^4WOuwVbu7&M{>!!g+%H z)E*o_4x~J&@1DVeQpkzw`>^ypZ7;4Ln_uB6V3nxb5+qJJs9c_Y-(zPTK)N-IEiZ8lmTvyhs+xY=>D_NSa>zQH${Px)7_8l?7wQN zT==c-*^(gN+9*IB0%Op#k)$l<4Efc^cVONN(5Qg&HZ17(OJ(xbuZ8x9FsK9)pub^3GpA*b&yh)6q5%TdzJsMBvsby@I`XW6J0W zQO*PGwA4~TeOsvE?*{U{Ia15|qlfI@G+p!A76;hDajQ_T=C0P{31D`Rvu`-tUJVC} zR&Bktqp*V9gZ6lrvhsH%qrkqPz(|oZ$;24D``hkfkFb_P_S$HABa^L`h`bGR87>@U zkilg-mrkn(7j5**-R0+k!(7@;c884%pieQ{oX^&OEpU75sf3r5p01^$YFHKs*a~ys zzQxPYXin9{I+`E6*t0cfTTqCqG}M$>>GIc?Q``!LRpp_?iYg75&hiZP6)fvJrW5mjb3cQ>zYkj9%1+5IFfg>3KBhU5ioXzOLqeOQakAFU zn6cb(gEd61Iu10-EfbF$Xe+PkGI6vi*8XMjF~7Un^^A`Qe)9Ze-#cCwCp9dLng%mm zWVTEKRBoqS&HMs|go0F!>x{-6zyda9))!YaEH2A%1hrkP3ZjVd1&y$`~zMfJY2oD2Urud?1Q~FJ*==X>J)71?kKSy zrTBTNzvX3R*3Ar{o5Dl<^1@r_C@{Tf00l2^Ydm^$&0TLkst}a8m(Aw;S$%J0kJ^s~ zkGk$`$-FO=Zf|dk8nVC$vBR=WbFIU+3<%o1y}h6KVf+t&HZLwORdpXTnS?P z7o2Z?n+x$3LgEYw&xXLb*KdGd88%_F%bqp_APZ-y zmaBno&ff9y?$c|(TYVG+Gm&+jPi2B^O49!=f8q7Xal=Rg_MN#^R2|A)m+umd1lR+0 z6^q^qygF*H5+7_|U5jNePhr?*f`X;?dI?AEtx%71yVyLqF5L%~y(6%6lEBL|f6B$pa!;)7g5 zmEvExQG|9JeLnb_tSUH*z zvwBr;y>SGjwd`y%Ftpe5t0?1%g7UHBbg*DD|L&+gX7%B4RbrM?&-+sK>X1>eZ`Exx z3asper>sqmhC@`6%`wPum{#x<<%xZJ_GdFD=0rbH{jnu+?~uZKi?VexIg@84gf3wsx5aJyMvoxnRDu+9(|R83V!_g z6H8{wISW`#Bnfz4t+lZLKFd}JvF#ezF|=9lQoOsBE8At3x}GY-j5DzR?Lttz2pk@m zzxD?GrzRVa=tQFO$?E#*E)*)#edWV?--v~fLRovYjo;c@B?}nFFSD43_CNG~K(^4y zp{ZpHOnCi^N2_n`*BJ|bGCFwC(CB%vW5j5w!N__Y6DXW3(#1~hnz!`F|9Zbqkuh$@ zDk}osa)_aqcg*0-aHE@`P9UX!XVn3BG{@#btVM4G+1}Q&dHO1!UDYkb^M*sKVvv+qblP)8G2)Y#+4Gl7DYFa3?nXVXgxc;`wA+tc z6G&2|c?PX*^UvH91it{K{4k>cQ~HNWe)K-V4P;H5Cy-qmsC^g`?zO#RNcwW#@#mu> z{W~qWqP)>R8hBV?Gqb;(euD_cFzVK#aA;x&kh@e4Q@QbgD}p@r z!kBhr%*`jozPH7HAC4ad0S(EQYc`afQfyNOP%zV9o8{cs3*B)T>{A@Gp`!%AfR@ki z+Mx~46LMtW1?STXgn&KmKQCFjE-OEd+?}Jz6?qTdlFD`8(~K3#XS7`Z^t80JTu0OY zBjR-g_FyzA-=B!?KWKpW;uFg1a~i=>_gMN(x6oQ2WLi6D?_rppbORtnPIKjs24L*e zq8AZ<<`nI=RH@-XL$3lqnkqA-p7F;3q@a~BboDwEnF&ukZT?J!3U0s3u0&tJ&#>KO zqHynn^ai@hx=0&?DV4veV9ra&yw|9oBsVv7Cfjrl#aQY>4A|8yzPB!pED zfq`i5cLQw%DZo@^*qWOQgz}ZNYz{PO$($2sg74)~D&~Ser$+MWg(G9-2BgWxVjwDU z;c*yBK|y6C?Yf}-)ojyn3>VC3|X^&}^a6kc@>1ix<=>p}iBr&jdYF zn^)>FRJ-{#ug0PjaXCeEeKbkISgh~l0g0ehz5NnRIzCgP$Ql}5_?O$u1I>09=BHhu z58&a8?we88OKo^#=^7h;VZeB{C)kNLJh!IC=UIbILzA*yZ}0V&jCI?tgr7&jt0`^p z`V@35KW_dORyU`p>-nT90ML}_4_h7tR1swKALMgR9{ed6ev=fF#qVU5t;**XZ&O9q zI&jt?4B@8Fu&8L`OWm-n2t%A2n%Soo)SDdo5Y(H4Wb=4{hgM>F_YxQWfvr|wnU%U- z(KZv3&$lma%~gh{>A~}k^5tvF$Ng575T73Kccps{GF0<2MH~^|OA}bPTI_KA4%`Ua zn2&WCF`*EE(ZaE>wE;HlXlqeEMDIQ<8*;2R&gW8AYxPVTiqcq*!tsc?*$P z@;QpQ(oTO1H(p*4=8cyinQXp>Wuiv!c}KWR#b-JhCYQvof?!DlzY>z6^=!|h^{V!x zjcLi3g _Psx$puG?3^pt;vJqyE#;C`V&#e+>X$PsRfyU}aiZTNeO0onOYst~9>m zj)X$ll#M$@%On3u5B$aT zwIkqz*>+y40n--GtKaKSwuw*sajDgj*4fz^Ock7de7yQd!s9^ob4X(wOelW@v-eCo zE#Pgeg7yZF;|_Yx%~$h3qv~BEz%T{So1e}@(6&7>_q{TIn$ssw7&*C_^!4dCw$n`k zu=W!WxB)QLs~w&fFJilm+FE|UP%LppwP{T!k_i$zT8_Hw8}fi zL(%pCG4@_rSyWw};AvWmwetd77&CHF(Dy>p_o>GEbQ><{`wD>H1m^00x@}?rgT3Ra z)m5R5$ zkMc--4rnM?6FCCw{-zRpjO$j@m<|rSIn;aDOa~s?w}4uTeA4G ztNPj+VPv2WOl^~1q?K|tJLN?B@mev+37#zaD1$ItyaWOXk2%59sZJ#nR>h--1C8Z# zd`iO_hvhTr2;)ex(=_Q>t_q@rgmx`yE*hnVC5_K4LnjUfH1f$dA0(8@^-aiuUWuzB z5q1QK;0TJfwNV_P=|w}1%I82@6BQMu(`<~CCKnRgbxx|HT3B0Zsl`%Ai4_7HERrqK zE4&bew$WeO`1F89((*Q>Bi|*k8_}faxr|c3tzeJfUJ4C7N*+{Gw!%pQO+a_l#ocUNvjY*Z(AFR5wQ? zOZDy~#i=?|=kP(riU}2rcLHf9w_?v?=J`W~u;Wr^&iR8dPwgeVYtm!59O5&^Mr3x0 zl)UPl#wBqnok?i%^~Kq}`4xp;Guq9l-= zrqldKaKhZy*0!<0h2s^{t#g!@K#eX6AcK}xR+~i`wnpGK1|cl5F^$_bf6Nmgt)Zde z1lXnw&8sa^N z2`O~W922qv0`#XXeShpLBnajS3UhP)J&!w6!1;1|HpWUBl&YvJ;XJpp@^xb%!hI`F z(rqWryri;n`w2h_LUzD3WqSB|viafT$6eB6x1p9hlmI`WzkNa`pvCjg{~pkL=nV-S zKOUqu|)a2zX1%>c@j`QiCmY&iCMVTUluzBW!Z?`W?a`N=rkwEDAY zm)9tLY%V3Qu4*Pp~p9= zVI^HV-oesT@$Mqf!;`VcV^tR~3%;=1QrfD@k5vfdOZz<5;{VkGq;3U2p1*2-IMN1M z6!A`-%~F!);)r9nj@BY!8dMq%*}S=TnmZLhFfyHa0ICC4z02TPO4mnBaakJ z?0ckY`jnllco)&TWK09y?0474=9l~PAZKo=Sa#M;=>k?ee~GayJ3_m&nZ)Cw{fR?@ z%;1^f-QQi9w&t<)ec=rx(w1blhX}5!zun^!?e7k6p~JTo`XM8!t-XYRi!cPWMlaRY z3rwTy{?m**KBeI?kBwigFLqr@rsr+_CSrlb2$UE!O3!$*6fzjN58p@8|JKTwU(jb? z76;!y%~N6Nti>WddY8woO7crdSk?elQZTqzmN#|!uf2ifmI>~ga~Aj}BiJcVO}TQ* z_A_m&Tcr~JI90UBQq`zDK>~pG>lZ4&tXNo!NtQksOXX%EqLz!^=q;@3saG{GD;vEk zQv{pb9oVb6fmmk*5Qg=h0-LB?T>y-9otCOV1%X3pCG*76U6%r32uOls$IaY<*UMxa zrR0-W8o_lhAe8qdY!_yAU1z*Uuy=wDad)x4uu)}L4>}Snxq}#ylC%%xJ3~2tM{;UF zZ46WoByjn)k_P}|66{wf1i;OACisrUW;wHcAKX8?MJp7rC?2e%P0tJFbW;pTZTc5tO61kdbOKI7X4E3J#1EFvA z^1NWSM3@}^WW=#012E1iX|%F$BLN=RsAH&98Q6r$dUz4x=7|35ntRz{<#=}U{JAY| zk4j#o*t|rVtf6J4snX{GSB5{;faW9(sf8y+H>PvK`Pw!k`A>6Vu=;CMyT95pR1m!yoxX8T5>l^(ql8_})-@R-BBG5T z{&P|=Tme1F6%GA!*L}zL^QOwR*8P0Pja`i=6$N^dNiZDwIy<_F&8nsT*n(nhePi{s z|BGYlLzkeQ*E#~oX?>eJh@bW4A@|Zpw!~It1{gpgBFNT!!k8Kj=v$VPyiBqtmKD=d zT13KxGskIx#yud5zlBosz(X3qYK}_#c-=Arl~a^&120jkTD^ zKQWu0>C;Ee-B*p(7^TZ>=m1B1L-15Nl$$kKsx!qY8~X(OH-HTmUUixyNvLkS%jtBC zPa=S?4?XMbi?IR^i1QsBfq>SWS*hK8hU9yK1eoeiTki~b_>kLXlqN1Y>;9viZ~&>` z7q$W*6?lis(cuja6VRZ8G1wf8s?h699~_jZYS}=wUM9PA?K`HIwCbL|UDGhd2w01E z-;A5cTK8ROh={MImQ7BqR`z|8z5b3L* z@*-6q+q6KCXir552g5G}XMsGCL7KR^!@hoZl^tOMB}QEH$jXkI4UR zcY0M~Wiry-G1dD^Y;m?%yysCTfhyy1eDq$L23A1W*Ew_oNZ(x17OprnPHGJiKNL}Z zu8Thc#~odXd~Sd0G8auZrCJA}Cr*_4;>s!IKGT5&$+=d>C@#uO$EUaJZH%m|7-9NoZhYsn6^ z0Vb&lMIqvJB4OgfN!&<0`eFEk>Y|zTnP38A*PSjLJA$cvz(#eJGk`pny`F)>;d_R4 z4udm7HsjI!e1KCz7NKDxNm)V8hxFG4IT9#6=IK%m%%x1$%R3Ku$Do7x}TqoJP zb0&9RkdT;wnE%w=kgyKe!}9X+q4dRK5WltqS4`Zy;?nYR__e32I_K{eE$h5{cc;zmluQ8NFlZFZM(8#RC^h2WNKlNf zFUO4Xd}kNiRQ=T?xdCo31{k2W@%p>@au*m904m{MBw)xDlzPH0CT2yQ=P9kb@Pd#K z=5tfi>#kK+fvTC!R4Lv2$;TU^n>|UPQBcKqpY;4G%A2(VsMKrA0AAhM*_puNhzX%= zvQinMY*g5K^%n#S@9cVRE9P$M=I%zg& zB0tL}uM7k&ScSmuVX^%C_pgAsxH?n^UVL=D*yKC{0T-hV(YI$t1*j(N@lG#g;*R53 zq>|(kqu58SiAh83<7qPBky!}JsvLeG zHI45HI+YVXTRzK{hxzS&_V#a^*VjO_@1_Rh80r%)SY`;hbcE6gQ>c4muG2qOrM*8= zsRzg2_C`S-Q6vCa1ZVT2yQ{& z`=5R0t=-zKn)#3qQ$zUOd+s^ieY#Knq&sTM^xXI?=gItoLH=~jEU}QQ{;N+kgtpDw zUYVY-7hB`H7thI9*(o^gr|u|+BvrK=$}o7f$Ev#f&qewMHcehX5{?O&L*vWeOr9Vg zSP>SL7f0_YQ&q=dvyKV3RBYWpwMDmshAmquONsUeb3(ptY5YEN*Z)80H4+%L#ogRM+9Yt4=L30=9VfL$y$IlW03nhNnV#2+<{rSkJhTZx zV$vTryssDJ!X@(Nb8~XW4VhAV>*YVo+#ehtlQt5Ye0Cb3LhV(K6$3&DG}pQdhRpE` zNM@=O9rd<$wK4n&kPJ0n&FMl~W+VKm>1mE^lknB~*;##d7VOXOTU%PB8AnX7b4%!d zJEuTGv)nTVxaReG!L=C##DOoi)CRbX2YDl?TLL@i=3uURxVC%dh5(z9A08+{1~h2W zApr@&y0*<9m)B%=lI6(KMq84?_nD+FWZ+U&`aK>_^Pd1Fz_fx=GxF`ff{ZtyN#;(C zh8JtF`M{n{9vq$?7=pR&$XByihDxc%`(-3IhZg)1vWM89J@cMqpc|sVkQAg7)KrR! z3(>7%Y$rShP=A^FJ0KVGxQ2vip8>cA4{ql?+s?_soCO(i8@U8e-| zYr?m|zqH6o;3wc!watI^aV_SRsG4dj62$~(G+{aJq}hbmr?`L$&TO(V3r)8-O4ZA7 zmRTwjj#${w2CuQ9F$1Xv(YNg{V)V$VL5+Yj!gO5!jSCc=E!OvSmJ!BZxCA07ryGJ){h@NK<-#fC}?lscUB;p8nd~%XsS$Wc9Jo9%&M&>o+Um4z-TQ|<^6Rn&2E#bt` z(FXkelfA{v=QJYQCZqoAY((XT3n|q57g(+I$P}!oSR7x(i|*cxZxnp|GMZ;0;8Mf5 z!}um~d}~qItUaJaeJrg+->UYh+-mWkR}H>KM13W;pj{f@TR``Hni?R8fpZ_O7L~7m%eYGVGrVWJEs|q(r#s>(mQ3N3>BqSuDe~i*J@CX43#>tR>0mED6 z`{>E3Afc|Vm?^9PCR{-GMs3}SBLaux#WoKPI}kzsJyso&E!$Djc(EumW^X~jn=F^4 z_k3sMFMzv$3ap;RupKVcl-+jhW`~giZuT6+tg^0-fp8LPZ&WBqD-2RS9R7l?6gbp@ zID!~}JH@(Ne_I?6gh#pkX)fGr)3_o{AHNB3KJSavHAwAX)NkR$4R~Mh6DzyUhcciH z42Ks#IUs(&OAR1UTTO2w>JblZ;&cQwL@19 z3&?<3;e?N8#qWJ0uCHC6mi+GRfR^OUtMkT7;=s|JBz9hAn@bG5A=1)gJ^%lH_J;ou z1(A06(u}4kfui8SqsSjia4H@J!+GKeSZOb?0Fode(c)F)!>t@=cK!CgHd7zWAzS;;_PZ1vI_cdofj8K}#=vc6=EJ2abLRJ4qpt+l;E_>HI+ zSYQDGQ9&-n`ECHL;AuX~*(zu_Krh--hN1!%Vz6A`T-!a`iaxN`AiBREShL6OKDEy| zk>75emB&B-IquuvezO{>p{RLi1gKEq%mLaJ8MX518TG^n|K67dAI=|@e>pv8@W{^2 zeD`@OTIUUprf?atV#SJ2E*g_h()*jBUe;truovrc9_i;1aAl`E^7SfmVwC+Vl3pMh zTixh!X%0&M%vXW(OVm5Wet!kG4w|PyCn4+67(7>i@-QdnD$xSh#+Hh2^3-R7cKzwl zK(VxPqH#!kCJ*A@0RN^aO)y#vG{55stV-&$HDDc^1EgYcY|8U5+i*GRFuA~A3%-vj zR+Wr+I|9gDkXS&Y4y+Rtra_d}Z3kIw@lKJ|qFFq!k%W*=Nd-eZoqrWT^TxBW1~91% zu&}zH9d--Be<1ld*C%V^pvMH5jTwN>!4UYgLG}c#KM$Hx8B&knaqnFY2nE-6KFk2X z6~O0d)taH1k7s~`!Ktvd5k|HP$vgl1uqQG;!qORKk+ST4F$zE`s#w9m99mUEj@)4S zt$3CKW|q2^1uE(2xuqQJtrNWV6>) zRObEvEMZCAWOy-&ns}K^*rEeKC$RrN^gZGz7e24|{=>Eo$>(6I?v|g9!UB?t*Fdsc z`~z|N&8yji7E&6G@Poov{WB`vuEm2LDU+PhI`uI<$uK_V99o*&#oAh`*s5xa#@k;e zU|@Ue5v4@MMqbkHXf5DuGBEdO4x()dr?Bso6!5RBruts?Z`i% z!`6WBkrG9b(e&{EjnSY@s|8kHbl#=GcB#L=v~qVn)$Y72vE#@6aZ6+=x2+_D35kLf zqTmT4-OH~A?lFW4O#)L+bMBo4=f20Y_W*SI^yyQU$KP{;B^dzaPg!77NYAOrSgx=m z28K1xnR4UY3d8#NsIL8$T|$LnUqro*=hjG9KO0y6XN7_8-5g87p(ziGNKIruQ9_mV zv`X1`t}8Un#o{d-!Hnm*ceEuvqnT|M|LFU*5fm}joxR|U95Q%MVbwV0d)rJme2VRv zUX`mybU6xVAM$scj5I$g1EWFQ0+4tdIfvGp#5LJcU{Nz#0=#vQdhMl`eqIO)j#Fih z4?J>yf%wTTzu!sXcK`uUh!o?s>{xF!p*FXX^K-6##}rT1H#^==gb9PtMDG)?wJnf$ z`t8o;^{8YQ{(a(g3=x=~#f>au5Aue00MQm8xd_+7LXF(t ziV#~6vy7eL+^3b4V9|$R20{i`J)f)DhhLSCgcXP9AdSfShmZ7qxG>poe7*Ud{mEQ! zK=|*1_$ZJIzsW5(0^-A4DlP`8Vj;2_`@M9x^P}2v#anzzNEZu%n(dx;?NoGi-2R_yox6rVz{)dAtjeP>8F+5FEB1hV}gqEHZ3 zB2D=vtFkf{QkKFS?fJ&8%VITyLp+0`aNc>J zYq9O{$Ig!C`OhSpn-dz0bPcY2d2cK~%f5Xr6+ua73nhDW$k@Jy(K~I8T8-*Y@bmKL zMQP33fS}}l=kedtnHPSfumIp2=fGXW2W&)wkTfDiu-@mZ z%gbO83R=I4E)M>T338DgnoBN0jkj!ibAdzwf z5c35lf+*?C+u09&pt_g7N?>;NSNbBCUx^4a{!_l!rP$r@j7i(HjPcI_(X&t?Ql(X` zlhf^3V`ud9q2D7*krl z&CsBK5hC?ss!B}Xu19lJ{bIU2IhH69Qh&mFeQV-!H(D#}RxshCu363#64#Fn(@e$P zA1b}!*>{LH;F`q-Yf<{=IlEDZi6Hf0z!v*pu&CXj;I84IE_x0s_>dd5rLZs_v7mkgspN zNovL6Bpa4rnYU2C7B*|*d^U=ZVkq^_*0!LhcgBZ`^sl2Ln+hU;n?PQ;@Axq1Iyeu^ z)A^rB29j@5&IX1mQ794~2)4am?Rk)bY^*?XkS}=AQ`KMt`XqlR5SxYP^E8#&?V|rr zAldRVamQso%P30NaJ|TRv)tN9$n}YFB~@d!vroRBA6;f;+MbTJ?zR`0avu_qmO(^(zwJmOii$rtYgkbu=d~Fz z>SHNpKZ)JDVSo_XG6%k%@($$!DY_V>J`l;>~_J$DUF2nrq4pdj-|7ko2tzE zs|K4bkWqZwx7zN$zeV<8o*YC!gw*t~qs21aktH%Yuh~|^8=O^io!NFzb~2suyBrT? zKEO4ux)O2QEvmHRAxZok8{6#s;Dxi8oE#7DpXhVk;+ev5+Y#HA5jJT@UQZW)d*rdKuL|^|_`wN+Gje_f|x6yRbX!l|Z=}`=^*s1voaa%2gv`i>8 zcIz_&siB1hehYL*pqGN9SQ9F&@~3isXZ^5>!=&`|{2Q0}e==YuxxDHn4%3`~Yzh$h zKVB@Sye*elLV;&2p1zwhrL}06SQ=Gy)xi@7TLK>X0g0)aJ88K4pPXcS8^vpk9Ee(q8#|_`QYu z>nZ-2<8RU}8@bp5ZOqK^BXQo%~IqCnykpSZF6X9%=v-L9c}uH0S^@dA(#epun>d zOeGVu{_K0i=Kb(R#{ThYzLIvZCXE$!qXoU7kS3SB>d1KFa@R$bCAa?0v3t$K2-q(Z zdT&17d>Jz>A$n^6;iA8g$nW&i?l(#qoiCB!{rtq6rb`QYpg8Zcxtg3R;rfA}{CjMD zH_TSjmOjiW48h^3Q*r&5K&ALV!Zm{*p8T;4tofQS#u$OC_oXND^D7l8gKi1eUB@OS z5VIj4Qeer@VHV+b|5d+ndzn6Dj$X!fvSgsSGcV3*h~1Fx35wPI$3trmGP}4`IXfZH;fHTI~^>MHic@02>L@8Bjc%pm5kTF-aYE_Rn|^$ zSL`<9E+zD>28EF7ety*XZKHp5&+vD#c*d)7#)|RsB+{oJcL^69vK>|S~x?+SDiK+>$>URh66d~&ZzT*_IYfeUFY zq*2ODPgBaG_B_CwbAYV$$3)$C4&S6tYWNV7w}K{$4Y5L;m;SsL9=ivoX&p1AXenfb zaeG1ttE93Uhnu($VUFT~NE4NagB6&E>XV~JlC-}f4kizd(|P6T5Fp+{g*K|<;Jxj%oxjzJ9(SbQ z-_@JbW>5;$mTYHC()@0T0-iewk#7G>Lhr9X`QYQ9#MpIXpYarO1>{t;$> zv`8wKmcV(Zf`+57D=_J!j@LgHvvpc4V`S>ARgQqa_qoG#NO9NR@%e>pePPv~h9@06 zbP6;Eo|GW=3L{5j%DWV+)`{<%LOb9BUkGnC7Mw5gUR z`8O}j%+2Yb+79+5P=X*uc=|V8C$k29$=Hg+b*x6 z96vzs--7s5Z|zjI(Qkoo18*v$iZ3)1v25>x$NRN@+Jz+4NRq^q0Y{e6RgPXbQ4b1k zW}rI785B~67(nwL8h;U20gf_E_(i)-gwJI=7k>-%^T8xhb5!fT9`IsfQu{Gxzv9r? z+8KK*Hy5!tD{8Cba!vCuX+o$!!zt&EFjxSwS9_t8iBLKcIF+?$mreia#71ImjPz&J z&&?}85k#T#UTd~j_Z(zvUNDNQ-O*%A;D}qc^96I3J-CxLXA4>vY8`Q$!Ui)-49iO( zDu1zhO`!Ab!tIP4(~)M8&Bv~_=?J2 zrZs}z75SO06e`C=J*ISYSpnSG{bd!en!{#B1Qb^jjALj{BeE(Klos+A+~O1hP? z_gh{I)0u@Ir#kL8nIRZw*)6W# zrj;3w_O*I_3v{BZmF>0d^(&LICijrT!C3yP6&P~--~#{bYcWGodR9FYxuPyycz3yU zY)T^vf6QgobzXFQs0#a(!8gHiT&(Q;Pzdwa_UmVE;LiEN`HE7^;S4J5oL>8pc9&%D3F9-E0l#;_ZF$vKGdM>&m$hF+)LQdEjTiupi6tA3*(+QIMx;Dg| zt&c_5#xfvvBANk?m7JA}Er6VHHO$%iMQD{_ipGp`%~#Vx^~IM;xbXT#ROH%8M)=BE z5o%$mW)*xO&iz#M43y%(5gY`zBs-uWeh7q3xGXQnocf zzek*Q5lU+<25qQvf^Pzrkt4+Wa*@E-)yaiog%ktCw{<#j{vntk8B9DJCrox{n`}=I zxl|d-#b@w1JgT||2K0A|MS~{b5pluL&><4CZnD7r9j(1k%ikZ?s;U?EQ34gXI=-*q6!fDGG$b zaT9w(OiIjk`D}9gC{&m==ZjHZz;XIsPiF$^3f2Z2&VbB%@|jl0(mKAAB|g*-i<5NE ziSNM=Xmf5eJ1+z!RMQ)lU$qTQxm1@Nl5MJHec<4S}ZobC1m>X?g6F zVrh+6{zKIFTC(jEL$x9KxRQ3kxDWSQnv_eOU zh8*i45&*Em+hA>;iUP&ozuQR&t^-3#>7zL)P|YJ-)UDX$2kq4_B9u=1GlKS)7IjO} z-oZ(!S6$8d7D=av#SkKzphlE*$y$lh|8Vz3-5XDrh{K==mJ?gYS6820TZ<*(Sq;Bg z^CNrzd}I#3J#-5SAAynq_^4JrFeldz*|4hPX3_(EI= z9Jvzje_t&Ur$S5Xgqc|`*pJ>}N4&|S3lX&yjBQ5IcK1E&(7=RK%IcXIrO%*| zi7D!wsg5wW|8(um{#xoLZvMlAR=j?|PIZgk3oHHkTrT+61iX8n(Ut}Tv=Uu);!V7! zd{~UCJE|2-g;iXs@rRoA&#UDY_$QRjAK7FbWzeS_V=KE88eP(NzopMMq?+nv| zsi(1~m)@kzEWPyGYf?%V;un9tGgeDoUVUh)owDsJDH#)JEWg|}s5Oofv&ZRC{zAmk zg=9^8cjp3&+kr63@$wWZCPk(TOC`%6X8`UPsVM^`n4+nNZU($TAGO`f)Fd4?OwIjX z1T)+3|E5}SUkSZhu7X26TlGs9U4J3#l4se@rtlUa0OuQ({9pVe;V@u6v|f?aSo9V9 zM95~Pg$o%*1iaw;NBg2yUS9fU+l0f$V(TG+t!K|>N5e`d;zsLJA}k_{;zUX=g(A05 zSXfw1e|pIb=I2NEE_l7}IQ5n)9C?h)$7dJTv>zy)J|##jQMKKjKx-yRyz3H`kA1b#AOu^Mv59!2V?w0`4`PC{OJ zXU=~rJslprKPdf};<7pF0^s654b!(a*l5<>6`tH*@M{c5#GBe|8cD9*6d&5b57N)3 zU6jBxOsDFDp#j0n9KHE7wsdSArN9DQI`=C@#Fsd-ap|&Fd}j=?v+jGA2MFHz?%{P) zd)z9*Yd0Gn2Ap*5dOU{O3zVo5*vRnwjpdjoWm?S{762wOHFrb|#u%lI!J5_X9MAIP zcU}t~7viP-a8#Dc+GpD(x(}UkC|)#!24JCth6jAQ%T3BPXBp&_{EgcVto>gtHC^v= z`ERbtgPAAXOx~CCYP1`uHW@gbie$;j zt;H(00j0j8U<%WoPv3VZGe3LX<9)r>t!Bsm-SMoraIBr*q3-R<+Px5>3&}~mehZnf z`;(wv;VsV`lU#D^{ZyBvKhkPdxfJD_IdMVXmZQN)h!N^TjXNf z#2;#yHhpy>jiy6^pZ_K|e^u1Q`8Gz49)7?fXWdn>30+V4d8oQRBQo&+sQx7cPzf8f ziv-n5v}$iescEpc;mG#V0xhk`Z≫0cy<;Y&uXih7XG4i_(T?G1CPu_SQGf26zd88o2W)VIS>s(QiDsH6suih~LhhMHn0dV%WR6F`NGs2w;!ju6ZUhr&xd zAhiy!1m^-v9UK=DFT!n^fB=OFntnF>-G89oE+Rhnx~Mq?rcZ|!_%NoO+XzQ$7cFl@ursUcCb1ahoM>J+BoPUdLP3r^7uF8PN9uy{~1vMRauhgVfV; zry9?iyDTp$0y7%=yNeD|Vx;k)YCY_Hxsx2VjNv>#o~wW9blL-o(E=vLze zrH)Q0pq3mkUEyS}3UZvBBy_fzu~S67J`j1@E`d9fIi|r<;iB+|hX00zH7Vpe?`l*;haalkOZoDG z38zADKf@~b8#D#-*SSLXCY9CNgnLHR-j)<6s*!K-J4DsrtlI_yQHyEb=rt2-D`o61 ze|-}#*WK`kVYlg{{fa}Hhe;_TvP$ec3^o+?KhOWpzjfhloh6(<-yWbGQu2mCAXBE{ zH>{~BHsCQNR<9m+Kl)E%5+vFg%lay-&SXcYrIauon)@h4;@t`3a$4x*%`aA$9`H-) z4HU0Qy5-d#H~Mia*_yTttCYCZLW*w!dP~qBTnGX;^p@0ZYcrIPxt$zH`l1CP@j!MD zF3u0Wu!;l3LVU+9_@W1(d2QJm0eVI3Sz|`=O>*tWBtixP2Xr>5Ax!+i}9r zXbvx~wg?xM?6a2r0u12}4oY*$PXXC8vAFnoP6N47Q$aA5$j2sG$&N4G5AO)O&DUgR zk)x1}ojnl4Z<`7<17EjzlQL3zwimSO+*^FV=ef^Uy%!vpFc_COVKa0|a=|h#Z9+a4 zmZJT%vJhC_XdM9H*gwyLQC%2@^*Wfp4kDBG=}06_^d$>8(8{BjyYx0D3a=*_Bv)7 zISpbRbJ0UC?iM%s-a%|uH@2WJy#(7bQZ77cWyt`4a;RCwBOM$bJySds!<>0^)%==6 z`+3Q3w5X1#N)M7xY_l{|oQ;fcf+;R)LfA$}_P1G3{G}+@jJg|a!p4V&DGsgvY#ElUh(8|-vyPobo*WO%>E7dERB*-h$V1yb z-7+md9X5*YUwRp}gVe=OFqG;?h=PJn(9_>k*DJ)u)UB>M zUnr=L>509Y#6dMuVg)p4>Q)nHrE;w?48*_3u2&z!!@$o|M%U%e^oTG_6$J{`t8Q%MZ}7LiY_f#lTNkl9V@1^5 ztv`E)yH&uko^+Hx+(^F`aK=T3PeGAIY|eDnm*Gx@-y;UO&Mg6OaTl?pmmc3tO1F45 zo%Lezn##>VifIe_Qp2II?$F0Hr#uxpfaBNPq%tB?qJ#~!YR$Jy!2H`6G}HbE5_(mx z0==%|{HPxVQvCv<#KS)sX;NuM=%e&&&0O(7Ui6TZKaFN@f-F-CfZsz6b*2=(=*<}8 zugVnYE>?#U9Fr5BQyZN;^%D@BX^{dI*EF7rS`HhId&4c|J2r z7yw@Z7>XZlwm5nG;56uk*sE>#qu9d`MO2hE5wT+6;8(zt(u30=_=az5yQB(}0;StK zU+c{pN>&jz9Ca{f?QoRekqTbKDv?(fBD~!ZUwB7)JC4V(=k_A$)4j|Khx^Kt&`IMt zPp3g-)_!v5mo9L^B95fF<^x$s(ScoWob?B0=k|uG4;0nKR|Q-J zA)#B270Lv>}b}8%m;HmO?R!`WitYY+@MpzL_M}O?5w_~Ps4QakNxxC~p!-e&<{1`dS^{#jS zH(OFUwevgOO9ylGw4ijCs>f9;qk3Jd$Cro{?*^lH$qSr+j>*e>sI_^~Vk|lz{Ua*f zF@}57WR`s1b;?_`W{|QWMBKgEI&R~z@fE87o)T=;p*-Kw5Zgy*yNL|j6Gaaj_>P=IT>Gk)agJav6 zh-4|*3A1lyk>H%i;ZO*y>!Ch4%o~*+N({n)bgVt#V5hgS9>wL|C?}4XTzPJiK^b9G zI`)K)sJ}ijEmL*Yf`;RluCo=G`klgIfPiRvT1PQ!nS%iJfVa?a>+9if6+msT9NHoZ;=^i;Z~go-vPkU#^WG3dC}`Rqc95 zRCqaDsy7EZMo~Bn*R2p%VZjJm&mK{Mv86~0j^24527kTCt2z3I+-~m_0{o@k-~Lcy*z>G`c-TdXwcLoAe2jy z7k*^p6!uS!bOOz_ckG7)TZM@EN67LfAYKDu?K(aOy+F^(%?%3dn(f*I$s3#c%xw(M z`cKVD*{R4ME?Q!O{O*q3&WJMqqH>nI_Pqr5_9596KNa7<;e~38+kB#5;O>cmDqh|E zTc17CU1^k3oO55I=xlA0N|JbapsC7P7Q}A%BTqIqKfly- z8|RvsuDeZ-v#cq!q0J>Mpr+2b-ve38YSXN*W**(x*dM5R6G}>?^%-_LX}*+{OmL!w zh-YW-3K6EKnZz5dsk|epyjuQPPcX7`b1G555U8Ok5U2L1W}Y%pqUFc;$_Jz zFcY+1;0l`?tv$7YH#uoE+7!adPCN>s7!`G;_!!mQV6)Jmf2dG`uWd?!Dp6E|tgcQ} z&}wP%Ng#8a=Z^=~TT@L0@cEt6mhEaBz1zIF_Sz_7<^gv6U;W^&w9{!Y?CcD)OGEnu z?}pWcAQtq+Mv(_x+t3XP18L*Gknrgb7DRvv_m!{RQun?U$8o>;YjTRrJe5v&8tlqQ zEXW?ridy|~epkm1xtO(|Pfa2uMVU1kDXr5TcaY7#Kr+2V_KQVI({aloV3vsB1HcAC zoT4giN6w~%OZZ=XpTt&0{W1=F3;U)(eg6-ujTmGtf4DC%uQj&+YJla2t)Oo->&>>k zKDPSvA=8^(3wgcPc2zL&F4v`r6Y%`pjV9ABL~MMV(Xb*OMAC9$i^hSGeQP()=Ewtn z4zGlGtW$2TnydNJ_}tOWB0oQ^IHQTl*6&E44`S>nS4Cb_gA`hLWJW5SkS0Pgi+MSM zhc6chS9A4Xr9j`DYVjRbM2;b z-xzJCVgUxe@!Q*q)QC!)((h9hhc&#ldiRuMs&D^~u^=A7|FHe=#27Hyp!&;}69_!_ z1%-!*2b5^cvwW!y+m~7x?I{L^U#D%!p56VZVFbrvsR1v&E&=C>Z%@HTp(+DVi|~GWGQKkbe{i9? z$vNSp9Ev)iS2)(4Fk*CQUAx{uF}uJbNbJM>3lB^c&G}h#up`{LUUxYO61zW;Shtpw z1&}c=DO9f3Sr2BlSC-GEij{=3A&kysHPGT$vuysHut0`kp(KU#1w^&|e!9ed9=ZJ$ z>vz0Wraw=*cMDTvT`1Z{tnQx-p=jP`{CK|2|4`y?zJY@@_?w3QUoC(HQ2OfO6HBf) zqq#AGt+Z@wTv;1=vDq0Ql-ij&vsF=pFHhB}x=LUgd=Gd&)v#_TFaly<4I5LJWE*?B zC8O1yAQsC|V5XTTC8vpFVxz2jWW4C+#BW(NT-ji` z@F9!Y>biOK=+4Z8W7v6!c_5H=1esW@sG6LWSSLC|_^p&h(oQdCX@Vh{lL(DNJABNG z4sJrNWz1mZnpXDx*Iv#@__UIjP%)8YmHBNr2w&J2`yt(xb+B(J;(K_*%=8K1a3hcv=DU9c{ROr`Z=ex@>VcC|&g9s!4{{7bGx?%O8B&?4jN(js{ zH(s$YinN?vRAzK`MQ^8r-iEAOeznVunR`X7+Xr`y=HG&48dxQ4A`_{{@*4}|vAK3K z7+wBD-E^p#_+kLZ^nAw;izQCa0@z`mV-s6f1gP~F(CZFKDL5|uHm3Pvzy>%sE9K$F z^L1~gnk=7(DZT@jlj>PTJTNLeG#=#xH_=&8?Q?;JVU)7iDvnmkNC~QjhF4Uyn{C0k zbPf31vZBs2Ig^EM;Pm0r6Brc!@8TYh1r_r`_S?*r8-*i#uoJ0^+*=({n>VKOAI3ap zUVfoAJjkr?9tce}k6Zj6B2;K{)UE-StBsmd_qoA&_nPZ`1s*T&QW-oyaC+vAi3v6xT-e z8v~s{hTr5d&wOdKs<(Tg9(&k=PeRarxee#NW|uTxc;a!YLV76-Yu1V+#VL9-9DGdJ zPf*57rqE^0m95(cQzVWD*v2lturG6G*Y9JqSarK9!ff*n5yeZG z-~g;=%Cf!g(dQMHP3A8V@=*(I=@I<8Z8cn>qFyi%n7GX2EU-r5xP5t3PqUX#|8kl6 zk8yd)K??#yDlmy``}&u}QM+wH+`_#*#RP23fVD1u9vUV3_z0NoLndE^^?PBEEzi>r z!@zxi7!HHRnS+i-wlHEMlw7|T^ms5xX&NSPJs4`{GL*V3{?CEBD}E)|k{{!Zg^Zsz1X`y0lZ0 zq<-WvY!)qgS&4Fhv_}ju=az!rj9NBfL1>z~?0q?h4R>)ogUZA>ctdDR&%R?badkp! zSy4m_?kgVGAt=@Vf#?(3&3bnnZmeU4*&i0V_FC2gPCPHv6qA<|7F9l@cfE_eX(U?- z^A?#Mad~z&B+>5-CC&ZW$Jy1TyJnw5?Iq*2`9qb7^@ft21-X0m0Cc3Y>4%4f4pz=! zkcF`c)*VYD#rZl;Ok6z)bE$d}d#j9u6XBPnCvbZX*s_y#%6ZKH5E?bIB2eX;OkYP= z{bEe>Gl$y4KD!u6B`jc;&$TmW`A79vie%vq_`2^%XsTG>;&3>K z2SWNI;S-5=+NxCYyTPE8vl(@zB(FABIc)QKh$3=IgFQ;C)bL}i_PaeZ$K<0L9sd4` zH(JfWp9@>cqQ!V2nj9#;OmvyzW2zl9G+Yf>+@kXT_uXZ}g^F=|1R-{l`hIv@9;7|2 zQ81POUa^5(U>->d$==|G)PNN9s*PR7UyX`Xr+oeI8;p*MLb~XfVSuyqfdNyjHgeJI z3y@Yn645dMh`GC;8;(Wnqs!1N4Xt!CqOfJpZ35<`YZ6ZJ6o8gy~(_l_l z1hU*21vV$X{$X*bC^le6tB=RppFnK#uNY@o>Oa@{>n9X=|BvJmpgv1j&%9+=yV--E z*&f|_{gp%(#CPF`0t+r|vv=XnnUQEbqg@BX6g(D2m$D4I2r~?%G_9JjiFgz_ zzzQ9F>XHb}ni_X1TC@s=2o*f_2WX{%-QceQUf{W*#ETcq0BPrY9y4f7$ibKwFgNGk z)HLTIrIaGZx$8Jx*a+FmSuT7ODA25|ncWZ}S2k@Mb4&V5@xiIDY>Gn_q2gHowA|Ks z0QPc^hT$j#i^l+nOFllwt@*OsjUSXluPn2E@y(pg-WF;Z=K}ZL*Bod5XdlbH%jjeQ;466_y z(wGOhxubzyz%QD(&KK=BTJiP^St4&OHJ5-fCXxl`6=`{Ng{|^J^lmqwIvdOGf5VfWn01I;o=H)3Wg8(%z()vK&uN z2%Xn_r2_D;u;aHoOn7DAW3|!v2IMYEhrY?>$Bpb9IJSKq_}<2>g#G5gw0+@Mk~9+3 zbi2SmDw>0T2kf_X?ojT)WaFacX&308iWcbXC`YO=Oc))oaM;zruCv~JK6)NfH-u+F z-f#0IjMz1~^G1k+FMj>$3bEF;2AI)6Fy`t_9z$-Jdxn}9Jgpw# zmSi8n9UuwN=7(_WwH&pGN0^9WBmwUR$?f00Lox6?lLARJF@at2lmgH!oVzT}sLVI@ zQ?@;C0yZ}`jEH^rNW3pi$Vy9%c{BDldL}T<3JM4*_dhP72aaJT+gR);guc$0hW-&V zzMEBq45S_iF{ol(aAO@Vq#C72rL(~~)XzkwyUM0BfEqJF}Y8JudJF2Y-r0j_!QX~`~dB#04LfHC&XbUL$ zTC}F%wAt}Vp!pleyAOtYlBd}m*n<`?G+hDay61ryNbWFTO%(^NLIFoSpq&`884bL3 z-81mu3qvpuNjucRNwZ&z+G}~Os*Y2WwCb6D2uvGdw6#q^eVH&0#hKzn16sU!x_9k< z=PlA`YS;+pfUpQ!%%zyMEw>t^|19om!RP|-$l>uR6gk`K>boC#Fy?DMn_hg08+HAr zo7fW=sJ4gqm7A*~&3nTY3F=c$y#*zm2o}UqwZ=S#R6o>=P`^2CA&#@@wHgV4NIGD> zVb%WG<>PdL0?^AmF5wdr_DqZ1696*-hdq5aU{u;ZmztnQ!Ho7d5f_UE8^OT(LGQo{ z#TnsR2;=$ecI!4BxW_EKlO$47tvJMOeWo8ec{=nWUH*k$JVr(;2?U}I zM+Xw?Vc?l2_TD6Mw*Aw!n|f#1pmYHvPEQYK7Ph;t@S)=cE&>I1g*Xmx5DrYv)vw)R&Mh6 zUGP8_l#ziOLHEqeOhiW}TPW~uC4j7TIn1hSg6038KYy-6HUofzY53XM8NH2%OR!P+ zxZl%7)5Vy;o=>?F?K<%5TBtS00Lw%giF~2|qk+;&uN$I6;CJ^B*Af zLajL5eD~pQDkUQlauQ2rNd80duY|in9smAqaR*g=BuhiH2U2cEQbW6T$aUKyKjtp4 z+kQg*)IKbB6RpasgFJ{{$mZAt|93KeJ|e=c`1^qM6t(qNY1ir~H}dj%wj9!USB-cS z%Q=%HaISzXID}b4XEJ&wX4#Ehv?YUNd~2XguMSp;XWenAtMlZZ0r`QWpS%fqqi8T1 zZyk;sTR+>j>mw~f0D(B(fAHGrduhaCtRb?fg?uUQcAjg|m&mINPMDzbShcAKGe)r? zNU3Kf5gQE;fD*%@%CTO-esaU6@_oqE{-Q!(HebbkgVl8>*sU)4(HxAuicthxvwHYruH-eCql&DA7Sl|e~H^P$bNTl za!Qn5?UpIlxOJB-I&q_mcwtAB7!Ewnp?>wd`j_-F zphAyX%+Ai>xC{8=HDdjn#40o;MbApbc&DQW*G&sr2%6(*_#Tgq)$ zF;@^n6Sp-VC3PIIW{iq0rG4e(krCE<+=Ald z5ri<+5fdUQ4%w875AWK@i9#^HiD^N%*bV1A9#}x3ek;^v^L!28S=9hf)^XB%xQiy+IO5L4@@9E2H&d&mf2j7UQL zc`4z{4`*I|_zbRp4GABHFc*`FVKyW=XS7VB#Uf~# z8-5?1_)oy23;DniRW2z_&fC{;Uq5a6UM^R?6#wASO)H*9i)hWZeM=ll{eq2)8~$aH z@*cKhGAazPk=x7g!KI?2+TTCQBR|z)#D$A_;g5IkWAxc-;R|@ycbM>&GK-qZ&l z0-hLqd=)c7@o>pZEX$!AAF$KDk{eILkceDV4uXEbc6)=({7M?Dc1oIgNn^7k0rd@w zK1xXm;V2VS))wkj>q$zypqbD(18#J)nzL9&>*hdN4mL_84sr;gEt@u)!gSW5r!j1o z!+8=35m97E!VDBE6sTf`;5hOu+ru{4t;JmI0mqyXrhA``lP!p&8Ss7%9QQePatEd{ z_P3`-zyKc)_?bYQ*Vx$D0#pkX-|X_MA^3ZFdY%HyF!+HOl3uW6c?K*{P2An_J0C_m zqpGXf(s&(mc15sE7*nRrqJUo?WG5fs-Q&XdM=9d1AY~Ppp>~7P>4Zq}U*x4)mnBRW z=ezg+NZV!8zr}l?^@5$a^|aoGKmU)dw~nfEjn;S<-6^r8K?M|qg>;vIAP6EQjYvy( zgQT<~U6RruNH-{mG)PGIqPz3HpXcl|?zrQQvH#e6yCm25zH>hFnZHNdmO=pd9MB32 z+Yd#6D+$+w`Ke`WNYv)4;rEr7iBGufnIgA-{=W8DbEgB>J6ZfIG7KPhGRLqn+|)Vh zCCrZF?t9bM=@QnLf_3`*B8LY7qq&zhyo^s(sgG-Sm$}$jx?UBKfvdPsF_x(lt~e4{ zSZGIM);F3Uh%8scOU`DzoTZuWd-crubppkGP4jGOwQtl2n4F9ltHda}nqKy4B(W-5 zr0^a*=?%kPaVIjAb6#@(uDL$j;+ zBFj4K&h_@x;Ls4t2oH1>1KtWz%Ppu^z*h6wz}NJ4fWEiuk`sF$A0Mx6t9<}CHMpzS zU2%GTlvg*OqFPyRd`^BS`@A2x8ncy|`Mdc6>7JO9hGBMGW6cK03Kezi5!TER8peIQ z$89XLkd_55;((9(Uk`Pb^n=;igpmOkq^P&W2ms&5P6bY^TBW`g}8v{TExnCYXwB z5-n@7;R(ksFQkrdyZzk)u>|07!|Sr&1BBgw6wi~bzX1gW1tu*6ARS3j(a^zx6hK=h z2L{A%ML6^up*uO>@b`H039sUd7mI)f2vG;XGAlw%ED9_uQvjx>(@`Tpu)7@%$?bz% z91gaC!HMm5xm~jlaC@-I%F3Z7pY;SEoM@2)Y=Aunb3(vmiKM?h>vG#|I?Xyi1WV(T z|NhX!1Bf}Zp1Yz@3|s5`{CtJuR-Q#aTl&YIl`LjDurQK2apnRBrvSCGBqx4B0!ji3 z(Hkp+ODcd~xPib&9yf~20lR<)f3~jd8@B6vdwDpU4IZ!sfKQWSj%}NmfJ5K%_2ucn zR5Mt<#wHRyA_i(1f}cMGDoZr4@OzpP9Hy9AShz$*BOw4f;Aoxov|K%hATCe&QhsUz z@blXFZ+CGW9i9EZ13nZDF56Nd9OCGRC*6JZt_axN{$A=2?GG?+{I^yjEAn}0W=5~$ zae+7_UY=-frYt1qwE<)5eN7@G)(Vk480{3^+N2o4s1p}=V%ypR&sO(uO*8xsg!VM> z1}UX#_z}OEMMf2>Xr?3G4~4Y2J0Cq6dlUvDM_0FnKjDXEJ&kn-&)r)rD|c^(2E{=w z&xgfUuV1d5D(rx@1}Aknfu9H;g92%#d^h-2QQKCF*z>oXM3+y>5L9zGYhxd?NE;cmDgV~-q%N2mg zxHZ{CU6{A9o^g$TXK86|W2dyohU)_f?^`2OVmp!hUhBI6yu(~=GZSX5saJKi zDKnr)DptxgcgiI!8aedQD9|WzV$*i2n#3vS*E=QY8lK|g>nX2SoMf5vXU(yRbm@|X zeSwy0-|*a@%$L^p?q9Ig7G$W#;jSUT9pmgAe2naQEKAzq7!>8WwCdyHu{|RED5WqvF%R!l@6C4~2 zV7-~FxPUkpKqM9lh>`E6Ye~ef7Kru%`8q2%7o+9GswKFtPB2x-85bP%oB*o7_c7WF zy{zek3am59K;pbV7M%ou{zDjVSgZHxOo;eprFaK;!vjF=L+CF;w9lQUQ+?=q=H}+E z-EF@77c2s&p@9+>J^)BA%yrrx3#yhHuMT?f_!fcT1p+^S#}>kVXIE8`TU%R0n212} zi)``s<>mX$movNn-14OpfFAQ=el^9m^ZIly8qj#LUcGt+x(tZD3;41i#{u1E-PK6u z1cA`-ts+yJCzxt7SD z`0X7KmC^+z1%0os29}HYI%GPU@w>mLsyhjQ_K6Ck^S!bMXftByWgSG~BDN_#?&5%> zixfK*gi1iSje@UxAY=v1V7(4vGk$=d4}^$nNdOP5g?7;njJ+rdY9B!Vx{*-KU=GLR zQ9?s{%{1)%_WM|DsHEo`D{X}{SS1?%r&F-joqTE6)$rnb^%Z~VM^M#x(+3-YZ2>Up zr34Eovg6Kc^>mSFYUfQJi?qciUxur<)mxAi(rha1PLknRpQN!-z=GT1wt{VA38f&% zFXO%nc7Z6gsp=G$Zvpr=j{P48kVO?>Tji%!g+#|z!E42Sr4EQ@ux6Ob{3wBf$xy7e zjDbHkgo$h|UL#><7@P5a_oRn53d}UzKjHS=dHUA(h6vrKJZrEw3C%1sA63WYSlx;n z2L;h`Z*RKyKB2A`!Hl%%MD_V2@bgp!o7w=y+IG7i;u~6NHt=Sk~?!*e>J;%dxLA>=Iv`{M}y^(2~#S%X==6H6D6|w9WZJoRU~m% z6Pj7_mAppO1J6{>%zkl{2*?=KvlSRgrA`>>;vPwP{M=8%UzMc=rw_-hr{B&#N`6m! zY7iaHB0JPzJVHKK^qLCnv_u0F6I_rt%o|L%ti&A1J*sU3Ej75xm7Wa;N%*j1xn3Mx z>A{16Un)z5tJ)G!5x{uRJ~jVWe(IFH9%a-LyYSaSRs|jw$xlI`oqD-Z8VXWR8c>T0 z!+=3}?lk+wSRZ1bRj_PIkl{(j?j`s=R$I#%mt?UXM(HHWDP!J6eQ>-DqSz){01yA< zTlB)6j5Bly0`&Mot6%U2`9nawA zAi;jM_b%ve0f&3xTNhmi#5FQYcgF+|G-x}105s4(0GzN}#t#AWC6Ile2C+j4a`=RV zP+zO+L|X+ILtY@OM*`%20CIh}vhT%+fc+wR^VJF`upt1ZLPrSE((cX9?%sR=(VGGA z5`7lxV1HZR%c;X=J`s@!=-(2PlKk^5u-_ZDZMy-E%RU5Mf-q~5P|nHF039dk9nNMF z^tMJ{vj_+-_~;)?q4m!nvYU&tTdJB_54Lpglh@$08C(O#1z@B2K|w)7htOl^dwc3j z?`*??Z2DZ5)U&b&WrBb>W)*ebN!jxj2JGJ+;-LEi3>3SyK}HBPg9a11y#m_>C+r-$ zwJ~c_&X6hpvC7}K|MLuz=BcnUV55Th{RofI)JZ-1ZvaIr%>PYn#;th9`@WZg5?~Od zo=^RX%tPGxPz8NB#{2sNEw18Ikw{ec@P8Gqv!2J?n7qZ8VQ}H9)R9&g2JBv{AsCI8 zn-lKn%4@MRQ1YrhYD`yqQridDNf;DG(mXcBOXb3HTymdCvCa{CY#ywD*OWklpa%Hc42+npCkZ_MQHbo)ec!0?tgU17S!^= z%-*p(;vKg)!lk-z+V`IqfO`WWTgXON_=kr8l%GH2R=lT!R<+dCfs(A`s$4^Y{ZcnL z<&QTdx+KpnXSAkZ*`~X`+Fl)reSe#v@>a8z#=q4oc(A{h7?I3N5Rd}o!%oA$Nojvr z`UT1RU-<3p*Z`I~?caA4SVVNX2j9Z7z`Fyg%zgl&tz`i~16f^mXCpm#>aaiu3e)#F zH}TrknM-yhaN3y`OcnLy10kIPgtK0UN>^?4S15e8vk{KS{soY=gARkFb&wFp3sH@L zLmmu}8L-PudMJ*Lj^+&j$R0!=s}_*K49(54A#!}C1r=Z+4S@x0K=PpiH88OhKy^Sj zEohBvLBQj}rH_*sCkVi7-jB3>y08L3eGohQET!d~TI6KHSio)`1_}X+>8Ot%NkAR~ zI>_a@F6_?*K*4~`dSDedf-eHJ5q1Z0k|H=I3_;4>+RjcVz!*`IAA+kHT;Lpl2uLqV z^zR0o6$X^__W-iPZq+tmX<%URde;mdd>i7FD9MUy_xLH2!2SEXbPUws4@8rQ^Jf26 zz1vZx+Ag2v#q)PEZMLI|Cb+u6y|-#!N!QeXO-rBk)|GF zvkBS`qVD2AxFM#US-n?eE1dYKkOqEax087 zxFWa`^KkSw>^Lg5z>?gI=8>`{b~Cl4kqb6xo&D=QF+Bp|iE&ZK z4Pn*06Cct2TQ1_t=KH-b?dH5sAKW46e)0pRrF+Qj$z3kYDREhppx+MR1xt5!E(}^w z7^fMqiDgK>n>hI?-x)Y$Xn6CTfWlB{bE-{XF0Ml_diKL_MGQ)V=7^Djw2qw);h}H2 zwD0ONLXP%vU~u|$zli%6r^jtJ2DK>-c~$~PHw|{%M+EqEaIJ&m+RkqlW<(w?PR1L* zd0vQIQ>DJZ(jl^zY)KzuTbR@{Jf)C-xKM9HTKLDAHfo6> zj0s)R?zw;x_Q${n&#JK*8FG97xB<3lbHRH-fbPf`VDbNLx`|tCF`3#QeqR`FJfAA9 zkQ6xbN33Y|{vQf`hV^!M_7cYmU~qMboq%5gcx$?$^4m;n9ROnsIQRPn!G8Y!a;)+q zl+*c7@=1@RaPca$R(AP zlZ!PLi!ufgT`(AE>;V3fbWz>^Eo^OT3mpbQth>O++}DZsHZ?WvzJ96j0m1^xbEUC{ z?e%gG%+mvo;U0C%KD7Yg#b@=9ba84c{&fhUH1BDOZ@rJd6E)e3a zH-iEja5Q0sj#}~B2~}`oNByD`(ItTwvxhF5v0T9r4DsxG?$(<|%nMF`){3RVP63tJ zOVCX}oc8azJpRAu@@{T@;bb+zRCR1=p_Sl#Uj14@m=D>T9zxGofu&6{0(vHH+|11V zv8 z#P5&*S)gi4DYBpf4v-DU4;#-Ia-Zg^T0G-N?H7DEBdNysQb;FoPMqLt zPjDQ+#lb15TX7ryyYj@2@E+C>a&xJGxJvUT5~(p*+B3^_jbq`3Ork9;SmOab%cl%0 z=cAgX*{)svgDMW%hKQt1unlz6FyN>`Jx;&J==`YQp)o%<&)(=w9t82Jo) zw`U#VKZ3>$x)MNzResxw0?cY%ZwzkLuxnS5A3orKlp*}v?Uvh98GS3`hAWPZRfmKy znYa7g;8&jc%jRHp}Kjy7GNj7;EQbduh3 zGo+rpoHVD7iC?jV*~XkNIH<{!i7#2KX~shh08w)U#%y zPOT@U5*2dTLr$l2*{o7zGLEQQ)z&PRB~&55gvg0|Hr!O$UP(4i4yI4?3nIIHQhHV> z9ydx*$pzKOUm!X`PTRjURZL@i5X5;K_VMG#DX}up2Z`>w6G4Jawp?^O0{`htVDtPZ zPC&v6&?Lpo0PMYnrK@6iY6=eqr=|S~=$(5|HiCf57X0Rb^Oh8lID z*S)kTAgioAkZPsZ@9q$lk(ek!)AcV31)1S1=AJ5as`)5xN}nYqF9|(vR3sgbk^`!H zUy?npr-|Tla(2#Cd(`LNbbiYFxJUb_3E7fP+Qrq`)de0Okg;WZemONY6??2VP+u(P zb=a&Wy7_8^hb&y?YG&@5wjJ@KEdXmD0?tX(Ul0o*|6zdVAR#lx(Rg=FcmT6D&lhX&e>WGbi^qD@Xy_LL68^>bkcNW zrY?us4Yx9eQO}BlgUxGm@DcJXKrAfyS%WpAL3uf#jWDVZTMw3MB?{@c|2ejJnyD+I zGT2^AhCst&H{CnJW%8-SZ5dEWdVCM}p0+JOcMuj!IX@XH4XH+h^^5t^=?_V(;OuQt z`UL-Wdf>iQHD0=ORB5)qIPN2eei2qpt4Fsj|;x98Z(>Nr^lZ2txK>Q@+UX zB#4cT4K=S=13&z&=_X8cOP+qtD~H#76iWe7K*?(f@3<=(SU!P^ahU3Wkz^} zcAkVeMxCv?em~Fo48(_@Z@BKx@haT`a(mR$eMYfife0?46V<|+8p>$#8v*b)Aq3?T z7%@6WrVM~#B-EJ6i5-vtxOk3Tz4esa)YNRSmss@B(2yX?d|R93w6|*&@dIdyV-XB4 zYwedXgF`}wMn=&31tIwlN{lPFrUswS^K?f^AJXqNOLg0T*V5=U1>D#$!U#MhASBH< z(zWGs2AWUV9dD=u5-|o~wYPQ!7hB6$*rc*nvUN{&8L&e&z}W%-Ac5Z4|y z>i9-<(?M|e^}xl}*47V@mn7e~>%9xni~oW*+K)TR^B~X-B#D1zf`LZt*OQl6|FaDz z_2h**Me#N;4(x=%BLAvjEG`wWZI|;_s?XZ8xhHuuski7J>B_ zT#mJRF*ERNRa<|pu;NBGPQKKpN)#0j?_T6d)u(o8LtpxvhF=xW^UyGu57tX?%Ov{) ztvs|N<+#-ubA*e(c#4uSCu#8f#Kl2xwDgOpaQ*&)tAWfMZAvB%flEW0h-{71JJIhL z4fL~I$U55VZR+~sK$tD2e}`8ncWjsadL-V&%ZbQ7QE%4oRg&48K~JrT&!DlvS1?qB zT8f=!B;7={_a&vda}^^1bKczc$tRZ42nRR0PWz`TrNsM0P7?1)-4U?z_3ath=+l&& z@ik`m?2;vu!A>Ra_am6G*jo0Q8UD6C%lPiExZkFk+}@I}7vbe>6=jO+snm#-)V$OB z$I$oKWmiafyMDX5ke$*^!4#L1`8v)Unrqj0rA2sqUM>xhO}29cWy?z&1y*abV^v$@ z4EGP;v?jYCw)LO;kb_+!&0P~S!7t+xIiKzH_}5D`vl<5LYHbEbP9kQ zC|A{gvwqN7^kGDikjO=IM%}f>$oD*IN=x$N;F=D^Q+TjrJ*t^^OP`RllGLWC_y4z0 z`(u#v5F7RC5=cc*XfPI(P#grhDDt0gNI=j%lrYT2%lj{^Fyh-=5mzrS8VIo*0Zk9U zOKjbHbfC8;gf&Jp#s{*AT%B$wl%!|`Akv`8f#gHJnMRguTyEcOD}xRwE9`#+P@s*r z^C*cN{JIAoI1o(`oM&-%G2RlT>~j$Nug8K~s#Hf2&;d<=c!g4fmgeQE3h*M3k=S?t z{`A;bFzAIc!BGIHP|MZ{(h46SieC4j0Z>$Fgq*N_Z;-xG3Hly5K=iCdrhCSV_LtOe zf!D@@G;uM1W$%qwpd`cw`Us%KyBd0ViMVe;{P5*^-F{D8#trQZAe2GzV>=DIV((_^ z$pKLT`cIdg=?_rwgA*Zenn=aVvytIuWJ!wsyVO2mR;97Vdj@<^!8)g-XL5Rq)5F(ouLY7jh!o zf7J=E16;=sE=%$(zy;R4o2^^92<`9;4SFDxBdYWdFj85rx<0-)%s>ng#jClAu7|N zq-hqLu}6|6JXhD}7&q9U?)|LZs3)gON>JPN^Y>2w=z z-*xd5lT(42=8BQdbL-oNPxYVXJgFu;QQ7O#lUpl#`thrp4RMX{zd*AL*i?6nvqN)x z)%J>XA4*d%|2kgzLcKnrS=TuXo;fc9jX0nrwBXPj6Kb<6vb zsgB?W93lF{UeTEFq1kJSoX<+4&E+wyVPLkE#j5Z=?)8){I6p0td03dT z)sROX9jEp*1AlGr8h4*-V1E<|E*4iB0Zuwlj3is8MMp+H5C>7F_36gRs~(U0!=T9U zAnU2Ke%IyzkYMt7v(BDo32=}TQ&WF{ln%(t0C9tZq)<3puAYcpuPZN2R#^=?)2b>o z-d^u^{rG_nN%o7-JqPLZpiG2D&U2TurvTC$_LB)JBEfiU38WrCjCMN^vZq^XhXPH( z#%h`|7}0?`AHt?tY6y}@p<&=RN8}6LMmG{D6L}9ztfjI2fpokG68s>s6pHU$1Q9_% zbZmn{M;rIr@$e{mKdM5P=R~zNH6g7~AQ~3oJa`S{lj`loZ$1ExF~~L%!|#A0ui{sr zXBYaST0kIbR}dcMC&DIhN`zQXK_4H)^U(ph2+9P7f)PJJpL$f&K!&Ev4SY*jbEo?t z04YaEHf&@6@N6l134|~}iYbp$2QbreadQVipBsFuQXl}Z`C_z;DPsVr0wUK(Bdl=> zHF^mV-!SI5!?JXI3e>^=_g80 zOT*aQ-HmRj&p&to%@VLJ8bJlIj0D;*ubq5_lJlPWsO9E5lY*XaWq3F|%~Q__zYkTU zvv);=`Gs(3<2$8gl{8XkJ=+5B7%q)%Vhi{mLB0UB7*%Y4z>;*=f3D_cOHqjCPA2o% zd8?rNE#N6Dfb<1!O(#GKovLOG{H50A^zgxS`Fq4}#}0qYrjvFBbvd(hqJLzfyqgEc zr%}f(uJXhH3$Efu8E9{?X2=6MCTLmzOkdm)t@56XqJCO?0DZH#`>*A=hZEKm#qTj- zwMPdg;8CTh3W=TmT zbIfB2g%6O#Cf)+NU7s@}n)*u{t@zQkpT7e^1v(1ee7o+uoa8?l>+CI%r3rq7nq@Qj_026YR2Y6_op?h3$ua3 zk_D!%aA}}=EjG8N?i3bsTTM2+riK)1E@9!RH5o=W@U{Rp0g(ZneJe!gr)%(72c8Eo zm?znH$byp?B$mMM-nBT&DhBNS7Z1dV@bUi~r+NgmQ=5Qv+!)nG5JJ+^yc)VBAjpg~ zsLX#4@*SBS|3dR^=*9#g>vv!ydm=Ygke%k`nsgqxs$j z&Z4=v#+*lq=RvSlEI)9Q=c>y0b64H!rHTKkDD2{_rr8kvd706^`J4{s@_y3SIW3emn7~z_ujrr z%pEhM=^FJEN#{puOJIL&6eEAg1h}w;@t2}U8>2;sRR~+ufn>^ru zl7RcFkUG8aaLp3)*{{wDp$GM+6btVjwQ=4}bZhea8~!)-EpzVEI^7qj?qHbXJd;QG zY7BFCRLM5E_9Jbf<2#xzAX;?$6jeWvFPohAW+SIjSrmBDUj}|wl9R>7A(L&r3b~&O z_;p`wca9jN<()oPLBdJuMd8Fd0BqgX6;BfQn%7q>XuE}sglfUG}my73aic6 zIQBiuCPIZpc^&2oE*MD-2is#BVLQFEkekO85Zh-`+4;rHavHQ2kZ^?oLBuP&)TqDnt1O zx~{LB;ll?xpF`Ujk|OFgN~0qT?Y{W-b+o7|1e&5dR^rSIz4GoG;EkG{Nht^79=O8x zhh3vGJ#{Fn>83xC{WX{ADASc}77o!1aphpU!c!Yqhsw{6GX1uGteUa`RMO#`-`OT> zBNQUOOy_#=z;Yh8^=X;m4_ugxKTqnH&!T2J`_aZax(+oBg%p?ozHQ>HPTzQ)fYp-{Dz=LrHc*eb=;rok{~f8GksI&7 zyY|9w*qqMztK;6+VPVEn{lWv|%8-ZZdvp@3sPE9_{evbQfz)2k&W7V$btnzJ&@vZ#C|@J^zp8)mj(P( z)MqVzFUdx|=#u`T)d$wfc5Baco)p9LCbi8De=R=h3tMa5-&b&7W3uaW6rg~D8Lztl z5;E6*GaH~w74xRLJ)OH1ojqR52Jp8ZK)&=jxjF>G+eP;MOPy1>{_XnnF&EVIvT7Z> zgSmv$*P0v&<6dv7knXiE*Frm@PUcDmlrWJw>Bfh_qZU%|hw1&QDRZm%GgI}0qJKUV zSaA#NA6eN6fo)VXVqiP2HF*bf?fkj2q`BZUv37Sud&tVkc2nxKI!-hpMuVcBq;X%t zp+7ncn+7${X!ys)=U0qjK|9W4m?MG2@^V#^40e;KaV21~{`BS3CCS75!5myn97a$t zsZ!=Ir8&D_c{#jLQGF(59h$Z}QVeW+s`i8oR>~L>n-3+j>u)TR3_56PkRC?}P_{%AY2xLgUA?eMsOyDf5Vy>WvaLxCR7QlM&wF2KL_cSbCPbE5{QPCzWB4#lt*#6 z9D22Wt*7Hh9_Q1Wl;y@#gUKO3!437($%sg+T&U#e1+m^c^(UA`hDL@4^u?+EhjO#6 zYv)`7w0w$Y*1`|I#vw2sjc`=YiK7=u{6xq8i{SF>f#3in;2z>I0`U`IRxx7c@%yz# zmDSbuj^^`+vGey;2ndU!EUjqY-#dQQ)>=GQrVlc8STg5W!#)uf0hJu3RW?#4pG!wQ zHTi8gE`F&d^hdy;(vDDk@8Q(1Cme4gIl`m%C{C91cQOdRe(sa*cx#ALq8+HD@Bzd? z<3bkUKw_sR1?aAeubjrD1@5>1mdV$FBz(-6`;<&Z-o%`|@Uv>W^NgD7#XUzsZxRop zUWS%Bblc7!69q24jYg;y=Xs@th+N!f1(NgZM0pm;fDr>CU%ckN5`MdTFYp;I3;U>` zhBKOmkpgu172v(9rXr^^i5N1QL$yTP3O35&XtjZ3zMGQ$cTE<&F0BIVnFT4KU*Tcd zCV}lCHq-zVA|Dkg8O;vQ42r?p3u@Td+nr8`Zo40{ixra@IGDmMp@dz4MSIml;=$;1 zvvP0k?-vX)l^_ffrY6yiX+qy)+4Rb9ho^wDqlt1zeaS)MdGZdC}<1yS*_V zF&yMgGVB45&`k@c4+$`jzHf!SNEJZo;Q3}d*BnHT_{z207}a!m+oG|(OW`s7<`S7& zzCXMj>J7x#1taw48q>?m-LOMMJ$wK%)-_ zUqpgFT_0%N%MLEud} zK309{2(NNj0c_EsUSSOLQSRq%t-#Vv9=dOB0?2aqaMT=URYn)`_%Y|EOn(K&AN82e zx-Uqj{2ZHimb~%O90@v}b^4(U?zf;uEx{y4Xno0GrSuSd=)sKhxISoQb)R>B;Xm};6w zjd|@Mf82R=EIUGu1LZ~y%RNeonGR7-*twPNfb(MEW#NyO+H({auFksLNr$ zMiE-uB!B)v)7OsFbG91Ky2-l7r+LQI$j(>%sv@*??cikD#;q~p-8X5z$lJz0OI9rj-zNX;zmZ&k1NT_1*FMvtR%y3uI2gqZ zvy~a%rnwfoyXucSlQ^OOB3dl-Q?eZlV(0$F&_d-A9s=$DFj6^ z?Jf3kFT@EeVv)=XN*#dpIz<40{;ObMb(t0rw)BRQJE=7Zu05b&Vsp1^Jy zm>K0E{9i{MB!>H)kCr+!g&S#L-s8y(p+H^epyVhgT$t15iuHRNllhb^Xb@eAiXq2& z@LMwt($@ziO-Be+k^{dD0=bs!9pLqzcyOfKPB^FGl(#gVYb|L1)QGhl;lCRL*_INZ z)n{oq&>ZU1hi$S6+6B8-`%?CSdO&Wxv~<>fNBK)-IkLVrTl!hBFYR?GP!tWYv|z2Ko@L?mNaJ8vByU9%Sk01p8vv&g4J z`z2Z1h-hK}MJh+b1ud)6*nGB9jnmP)UD*K@N}E*bpH||cXbpYAdgaMkp`De_vOr z7muD;nN<1zo+NG{Ms2-t(NH(8;ju|k0{4cDHNUoXDBuL=V2hI*=4UJkfW7MV{tPx8 zSdkz=lY)aF$GLb}|Nq!xg(@(&?SE%Fm|whS$ahi2M*RVayFq6oBx zqKJd1gxOufD)qz3cU09GBDnw{Cbsmm#jL9!5*Y5lr(USy;p9vza=AQjZdu&^%1mU} zZ!zzRX5Sw>AYOHyEGkkz1~exjxpz+dhMg0sOSZYRh>B;~KyY-!QhG4Xi8xDrzZSRRt;Xy@v76Id^xK1h+lZ+C z7fw|Y#AiT;0d)je&?)lF4648AC)yvY*V9V;rgQ7PnZgvt1d-+5IiY{k^~Rc4t&8|L z#Px2f-dVk@l6c^hLD+a1Gxf+hN^j{o0qC&^T(WEjOcn8!=O=tq{q)M`zfUC*pmsg! z?3oiLEL&S>z1(?^kjbX}5EHMOWcRX8LzY;Bg#bJ~Pidm!p0{V*PlJwoyyo4q*ZV)e zJ84*B6#8vx+q7upb^4ErVDfT&OHWg`o_c|rdf$`1N1@+2lBWeGz3mQi6*)P8Ty%O( zusz>MqCpDNNVEGNsO+Xzx9iLQ@PTTXu)RqzhmSV_sJC%vAl^Kw1zwJv&yLJ|!}A&* zcA~PUH@Nk#$^qfSZ*?phV<0$K@X|(G7z|wqAt@qcv))dxW+?n=yd*Zj z*#P?yP#BI+UfrQo+Ygd;Q3GH2SrG9XrD_8<9rHQ8-NRDcxy}07;VEzqwK-!O$gKq9 zak{i&gdm<4R@$(eBJNRpm@^DEMH1YOg(ji5!ZH}Kz3n3Ty(NNT#y&6Jd4n5iklec2 zQtLOXCu%jDtLbdHMYr)DfuVmMeTVgEIdh6E=l=Rnc!13&u^?0`#tj)o=u-uhg8k+o z^W@;>W-*boLFrnTZK~#r70&FErY4JkR-j-g`y8eK5&q(_dC~c$rE*PpnkO>EpK@cX zK_%3!d3k@d3(Qpazj001x;T%>ht%yqm5k&tF|d8qD}x7Q?g!=WEZ4@tf~a z2~^3Ynb|G00hd?^;3YMg$uk|A2z3L8z@(U}r|BJ_>~1^(?7rDgY472)gmRwyuwnCeCteqCDZ%{!H&b z`45dxayj=)v9AZWs5a~Zb-%uFCEld1qIkK-qf))p+6B0ctF3|b1Kw7bH_1&dpt$6p zkKDH8na@M?Cvmt-YVC$BC!`~>xK%?(~RP44jp?T*iS zxT2MAH!4lpa&&4rzsKf(dG~k$g9BtuWagSafrSeylHZW;^zGRyly5jcj^;r(g8i_s zTJ#appk;jfbB#ftu!9TXW@y+UgiBTJ-`tea#!J}H*Z$Lh;NDyu8fD)d!ux$8T$mkP zhTm~M|6u2c))zY?TyL&zZAh7!nXLx2g3%oqjtaP~ z4Nf-YUreY19N*?zgUa}vVA-oK8|9@;H?=bp)=FTvb;&{;M3U-))&9&jKi(enlUZgu{6bh` z3iqK9`hVUh zZXh+Rd*Je9+iL#P+h{7*F=txH8#`k{1W(Ds8R22f&6!`s9C0L_@$6y6CnE`>V&){X zak;iW`eYJNx(O~ciK=0jdqO_o@)+T16AVGR7tq_?ceL*}n&Jy2-t)e#{&{CCEYAXn zR_+D^huRKbTpxq)dxR%;Pqd`#IJaI4ILE=%s(z=CS!gu9i!BaUDOvmd2JT`7?vZ4$ zZVg(;Fm-aks|5okT(_+ED$gB})|eFB2!iqh3a!qLhk@TYl40s)tl0ZKEC!u7r_&$2 zl$(uuxEy@QSTY17U9X3x81K~?NxqfRkPaq!#LbZ<|0SBp@Nz6|;=9G2APWkxD5fvy zf-mlQ9W~M;>sQZy$v%qy%*ct7 zeUJasoceDLnkK*0*nwrF9otLe3efQr5QyV2uA&dMBLa6XoqSLD1dzZA23`&OQ%7JO`ESQ;I6w$i7E!t>-z73|sG<9SHH_)m!&sCMfhZl* zn9Pq3XpDTcsggFY?#4Z&&Ssh7^6Yl2yoX))_~CTHH^trku+!%JH|EfyW zLIw)b`dt1TCV^;PtxPly-n06YgS}lPcFb6sW_pQW(&T5#EGAOVMAzI(bZC~AqhA>!0A! z-?yu&$!Q>KR~bI20Jf&G7wgyN8r@|E48o9}p~A)!*L?U>T8HBXe8FmZrijjYrwRD9 zI84c0;Cf3?(I7*zv_s!T<O#adQ9 zwtM(ROC&GJP(B8yriJ7UHAQ`|w5A5Fp_hm}#=swk{L)q_Y(%Gd@f#AbL5nT9FodaH zm|c};@!SOiZ1+~MKl+_wRG9Bgfp&J-fXWRH`p(oh_Rc>fn~fc^US z))u>}s_Z|-0eH%Et7cBy5nytnf6Nd=?O3r-S#$ zX`XT@{no;H_yAbo92Cuyt2d%P*Swl?7sf_~tT{jL8pAO`14+|mzgYUF{PCp3$7T`RL%rs>Z3pTjKHtp2_pKrt^74*kunU>3f2`Ss&& zpS3x^A)OThjhcNG^1-F2p~64Oz~J*}^Wg z6^S=lXalqBHt7(%t(AoRTd+)eRz>6m6L#HEysj7Wy%Av_`7t;+*x6)3qggg*+`D}s z-14klYQ{H#HRqq@)qmF$%pVL$EO(zE*!6r>6h6E%>tDR_+|l39s7XZNlY9^Pbu5TT z`yA*y5{5#Hwq1Mc+k#bjuTtRhaJ)^h>jW!!jNNI9`%fei*hg%-&ol>Y=w#C# z=e%MNMi~k^SUXjQC}Yr=&7EdiXp?4vjSMxp%}MLru=^@p!&{c|s2Bjpot8gZH*TLQ z`15YEz4%J%$hjj)VGN314+(U)@FWOCf%TrkU5x+CU7x7_pw#+U&Z}di%$<(&xaAi{ z75eSVy1uf;Fl~6cn@Ku}Wk&3dYHT*iwVxa*kVAc5lq;kPE*5Z9v8P4M=j+_uRd?c{k%+`q1!N6?_z-7h6CoA3PL{NsVd z(rEXJ69HF3=_Y)-o*avi?nj*?a&K2zGzggN|G1!+sy#aU%97qH=X2^BTl$>(ec$bE zvQ0}B%G~*aL9gdk<1Ga`3UG)cxcGuu@nfC)5j8`PbryX!OZ7VP(s!KKwbe@1zE}^% z?Djp#z$1ulp0R&v+W&MeT_33GV04ZsO|8WQN<~L&V!cr0Npp35`r*Y# ze&P!faE1`2x+L2^{Uys58UM0Q+aIZk$MpLdQKVwRc`)}9Nm)=h4o;H)WGW98*xAXSFW{FXKmO|&o~lY7 z@~5?wc(GcNPBo*Qk3NM^vBRe93r}*#uYH%#Ww!G_+9|-(0}t*_Sgj)b28tB0$J@mP zCdo5t9P&bT{R;wwAX0VrvH*_`Q!++T0uf}4uL?%F_R|^%oxRkm}v7KaG9F-XGX@! z!cl%0l7J6ynD65MOO@C!W=sOhq>{w+*t2}ZsKX9F)%!-|K(B5CNy+%|CmaouiYMaX z>5ZX12^?q~0mMQW{*>Up1Qv?mU?RJS2GZK`IDluFLdPgHGX$FLgbA zjv1vcMaLMlZULO*cE?qlZr8p|C|~=6)e)MFV%sj%UCq8UppR|+IXqMUJk})j_9upx z`yJuA3en2Vk1@SrC@!xJJsh6Y?J^tVJf5t7{Wi8MU}%_ht-Ns+jzWVKJP!Ou#YO-_ zI@GDn-1}!$VceAKOVIhh_yb747*?y11`oT9`z9^!tI^T2n?mt-J1`7Lou7^1P8 zr|<3i&ztp5_<1Vu;Lt4dHk;Ne6t7WH0D1wFv6-hLKUHWR-y;)qnu3|V>tlXvr5bW~ zBJ?%y6M6psEqO&FQ%=0QWBd5c&A+lyZRhOdc;iJz#i( z(vNQav8d{4YMjvYw+_qrXo`34^lqZl$dGh)b=oaWs)HM|Sa}%Ux?XAa%?kMfUhmVx z#4##)=90xKwT2F0d*#C0oi4Z5@1@mhoScZ9GtKhx`1>Olt1{C4XG}Xdv<$u6eHoVU zUE11@j_-cA)vw3fThBGuuChJF8oh=UJdiSav1+(k-;Ju#V9SwOrup)Or>8P$x3a zV$iwiL1%(x11g$%a%pRoOnOS60&1&e3Mq6i#EiAUbxu;{{@;D+qFUF>PPp#)%wS$5%!5orSRG&H5zT2^);V29%=fah|?ESbLRG zTp9!hj(6f-((BKozL$hg7P9z--M^yl7-5TP6daI)Bx>vc;wPU6e{76{wzO&u{tn~+ z+=fv;n{a3@c(>aGD-rweGr&2o2Ynxk;D`O+@ZbjG=j@(j%qw)D#86+C_&ea$ty+^%m|7$ zU<|9fG`WOVuD}a02wT4($}$$rXBI_w{`6&Sa~uQD7~N&MVCVJ z$baETIk*^pwz*I$P14A54GCHpG_g)pb6!oYd53K+2*(mSt(|Z}^7QKZB^6;rG-~_t z&$jMRJbtDi`1Mg;o<)yP6n=-F$!l2Q9qAN%L}3zFC-4zHd3et%EoC$?aPpczEGr)O z%fK$xbCjzsaHfvl^uT+b!dmWv(FpFH#1+=)I_yLurSU@AY7IoR#8b?OLD^mt-m9Jp zM>;(c4biUhP{#i;pt9+>2F8qLp_Sz#g25({w5u)363u}3KE}HS+x*FePt5Hf$zDks z_N|7dt(g+L!S~KmcSM$fa&HLQYkA_c7O;b@H#4)gwl*=i;!R`?XgUzhn!ZjZM=ureWIMQ?XNpVvs5{v23Za2FV5H9vK zu8qb-PS0D8xdLOH)#)Bf|9h7uUG<-$P1K|HeE&pDEYAs8A7skCg_DTnjlxNMy@$3T zj)XlG`4Sev1%yCXq4AG#Vtli5!Y6+_ofO5WL-}Pfscx1DaIxF8>Oj zuEqbF`iHgQ#{Z3{|H`7w*QwR~mIX;Cp;W!<n~`dO!jIJD9uF&~5X9k=1) z>k=1AB0cOs|J>lIH5A~2eLr1?+ddDw&%Fdurge^oQkS+xYWK!@2ml~=d;))jhX8B= zMlIzCKOU@~DdzvAJ%`Cn{6hY7IQdhN_ePsN$?rHJ=Zo|Kc6z>=@N#u%;?L23E9hJ& z77B93{;TEGSoO$-yB1-mDbAC*@QdG|J^mVvK>v}HO>_}MdG`C(Y>;ggRQwD(vjagj zvCoqW4)xP?QGuI{BDa&jW?+}Tj!|+x+_uplEZH`$v|)i_Tq9z^lx2R>V0uSzwEcNm zhHyA5eyd;u?^%ONkv^twtsBWyNOk+mL%G$OJ-y6l3cX}zM)-Gsovs!Jec+q4ZXf6i z{Qngh=UirlxB2w1{vWc=Ix5Pr>-s|@EfPaXDIwk6AO;}e5YpYv04iNdgLHR?fYL1u z(jcfHAi~fg-QP7lkMH}g_5Cfdkh$;cI_KCx4z=A5Y85}IhY&I!3;{OAuZu}28 z)f#Bhzri(ZpIn#{L@?=gAciLg#>Ls#C=D_eO|cy zlfc_k9J6EUPte)RHC1F+Ky|-^d59S#nJ!w{3&Fa$JD|23Lkwd@^b zEB=zi7`S2|REAi6<5pjYx>@Ux8~)Ui{(T*FqB(ukviXaN zhwC{_PNP|G)tYZmr}s-V*K9HrfX=^MkY8HI=47vR{Mj92WW|LgX-N6C-oF6LssG6^ z1s;P-3)RQB6!ISq32G!V&vdpQ)yu!HnFbouOdHOd;}K~-1|`CJ<39=F0XjYx%yIaP z1xm8DWK7!UxY*U&%XPw*4?}Uf8-3(8ajsqB0AH=rq!QC)egzR` zN%W79(&SK_i_+zB?g+ELDEe~cQoY(oEjj+b#cKQa2ra4$J0V8Rg$o{3m*!!epCF%eW= zS@E2#9l~;zlbzq>bm`Ca;b(l_Y$)Th4`x<4A z^a79t&}CnIrzoh)*+>SNGFKismEWv!)$1s0@g+v{wyXSpRBow}_`6CLLD9xeUAYm| z;508#FJY~x|JSg!0;z!vvQ~)xpCTT=FhCFBi}2(Cll~mVNMO%ghm3s)713f{ra9BK z@nNkk54)%c{iBu9Up*>|ch(G+uN07*jNr(QBdXeL8lcmLhB)abwQ*TSP@ckmssm!P7vFXt>T!o&vL_9_Ngs|k% zNe`K{?cz)x=yvey#8zI*2~|bkt9?f7^H925mV1CmQ&!#>eX>L!+~Kt{eIz>CZOnv_ zweRDRN$nSp&Ua=bI6RKHpau*NIH09VVvLs3^%&14<4&hf@47`D8!7H`y1Batguxd| zD=P4jMsnn`5jnu3Umh|`b&4$k|(fGT-SpyH|96aL9&E(>%MnNt2oq zFZ>bfU}1roT1a2|iSEY{6(f|AI>;Jo+tmLa1^7(rg1JR;s0^jwak8!&r6Vo0P4Akx z;r5iwnLhX`MS=Dwcwg4tKJ-~Pg^1n%9vC~LI9~6;mrM7B?dCOcI^W#IX%6N!M$qRf zXmJG02=ix z`MG;jOBe0R0KZK?<|X{ivA5J6lrkPO(yDxKdkX7&s*N(IvN#dKzje(F9Muww?0 z?g%5&{381&w?$q5U+ZAmC5=RLfj9rPEy@5NxQ{~t0TO^vXOB$}_EPj_hQH!F!Z5Ue zMCf8gqM)o(;i`sbwXkkF*~Y4E&lx847wTP$pP-iNmyThqT@n8gvkhnn;#?Yi^d;ba zai#{jY6~YCKV`f*N@QNaW+Wou=Zdo_fgegm*G%X0Y6QhOMvK;TIzy zgGJmZ0raNDYoAkdTE%ua-p^gyfQSdAW_0*!y9Py~sGD^JvCH75(4(N~oh@*N=8C51 zVK*i5XPN8Fw!Rg@1e}$RV4+LV!0Yb3gaq7UB4zZ%`*ITOJ$BKaJ*gAp=K6*Ywnt09 zuUkh%Modkk%)%vFoUNhF9y{6xJF%I&jBD6x(7`T;dciuehu#m^qfj(EzjU-oYKx#D zqFemO4@{jz?UGdl(0ANsh0iNYXWe%-^(0=?`NyLZ2wYJS&6Zi2=(JuWLh~8steUTcswZ&?Otc6tl125VXS# zQR7IinzJwN<@H)rJ;j31Xk~eXWrP+LvEA4<@VmhL}@aV-OKI(||!0KA#BAiF<^Q2lUS%DY$CDVoTDc zO7Hc7qn7@1#ZHdYObd4S>Au-0NWu;x;zl}9zHl^F1)=G>60P0$T2ebb5iHG!rSR;& zi!RyFTe3+&UnaYd*U$U^SM}KMO^q1QEbwazh#Uic3o#O&!*=^pBo>uYsg%dkCa${ z{$YZrKB)U;%bEJ)1w80YyGvtB_d$XEWffNI>m)RDOK($)l*# zSr5^=cY`?m71&8YjCPYdieFAOg$7Gi!XA0QX*0kaU*^kcxuL*GW!A>Lk2=GPa<7*__R{KELvf+FGf2) zgwMv<$d{(K>2NMUj2PEtJlHxFK)*$?V7f69JGV{bEdi&{hTKpIU#+)hT}P=#+-=*R&st#llwVKE6Bh1jKY#RuHE)eV zIJo-LvTDNI?vt0=f4maSji*at$bD?Eq_O|2d3Qt@dv1OnN$v+*o^X^pHxwQv9Mrd& z@2)?2Luu{@oewSaWU(1~=}s=RT!tEML{r`i^m4Ui3UnWSj$^BS|2y zt@VBp;o&93|JM8Ie+WXY>Gvcb5(f-whb0 zo(w>BW9ZBUc=1ftjm>z4CgB)~Suj9t!k7$~88JqD#4meLfDMt_>p*K*3ZWVU_{!=| zo7+LrGx`6Lj)`rji6A4p=eXIwMPWGfMCdY=X>*O0cN55d8RLw3Dqs$4MaX_ajW~KR ze&a(t@?L#Ineh`{7f8wkrv*z8S6NhFW1LNG42lE5;6XfUciD6#Xr-qFO6SPmt~cGs zX!!KqZrVfoeO?Jo1LEFdqKx~92#26j=B#x@QK5&!>eZi=~3Ty#9{Zd4xg)K z4|Vu<=9o{n3S4vH|Iz|tSVJTJSjWD|7e84492vn7`6&7EpFoFRmc&bt(X;*&!JYmZHrvKlML;8uJK_y`@mnGDh5sD7D?RF*EO!2+HK=32l?l?ZXE=s<^zQsQ zgx7)_I&<0#;VTvf!nJs3Aum^2s9wVZ@19+Te6zRGui&&v9n;3D4n!s zK^-4^X2{~+ah^8(V5MO0fviOkicvcKxRu-#rm*Na3IWac=;v1DTvhR!6srP?lqeWeMjgFMR~s8&j5EG6q%7aGrkDqQ81u7uWd?on|}22$E}#4`8RYiBoST z7%<6%7Gp(Bb~BtVhYnTXfb`q6Pc_qsMQv*zwg`vIBNi4 zDi5AdhnD@v<=WM#NCE-r@c8vU?G2AZ^R^&BEoG(b9{?v0z5L4vL$Z>Ta9PP2yG*Vd z=Nel6hgm_-=_aP2XO#X+vgxkT52eym3@rv-NH7O~6#V&E`^ze-c9mHjD zQfd`uGwbDF+=B|gM6-PFu+@9V6c4Q7&cFc~(N6Gf=hH8jbj^U~9+SaD`uqiKIvlg% zX;ir%$7mNXx*h?IyZMR5cmFihx&8c2Q9#Eg%4MNx0Kp3ZTQ#tEVGl$I95 zHWm*>p_@a}n@%xSHQ8yDD~A>jx9$KjEj!P`(+(ETUpVnWC}--4kTz#eTLS;;i^_SORrPY z()LT8rFDj_WMC|y_rdS-<4kcr{Zd7q z?erUuaM0{|<;BEb<>x4n=B%ILksb-oiU?vVTIjp9{W13*lg}TmgVjvGxO!b~V0|>6 zx7RY+A5>6v!$G~LZnu8T@3tWS2pZnD`Wi*4r^RTGPO5{k%Mv&vxg(0Z4AT)CzrhrQ zyEm6$_|HTT5ulE%C$~XE#%1sJ3DLcK#c`~XdH zzzoFt;_#B#;JJ=iJG5h~WQvC(@qR!o=t9DIk$XM>Ymp?509t_9Zp*!>dFiWmkb-@dsLA zH)^c!cE=M7@`F+0WGf7QCL9g@Qs2OzLOfb_86z9yS`CHa=qa6i?}ZMLejyUAnWu<| zis-VLjJ2v_?H84!7xS?5l(rB@Q=Z9Ad1WmW7E>dOAXfLnr#XT^%D#0UXYF+CUiu2j zp`+^MKpv*F28-MBKvF9i8jCS=u$`^kxT3Oz14sv8+H);XaQaO-n<3GO4ZFUVgoh_5 z%OIF=7{hxsUB=Ooi#G)i+&N*>Wm=}7hqtn~?*UW+V?a-y!db6mN8=-JHX!UG!Xl*Y zgxOZIpKfCL`#GL+lTmSRDpi?8kBd;p*GP8{QgNX{w%)iCR$l)(FAn4#5c!+7EDbg3 z>YI_Nhi`dp(aaroSbR2YgnBDt?frQ1t9vC)D|>se=TMA*UV%gyWuk;|H!F+|LP)xn zdKZJ3^DzLpWnBINsb4zE2MGlXhbIQHu~)gG0^{vziipe{-m(q`p6Ew?4HjHj>u>L?;l=)>R~V#Cmy&km~F2 z?|;}nTEmWqk8cbRLZR{u8=tQxo^v6!O5|}zgnk>Dl9))w-Mcqy8jYlw7@iGkscLDx z1Bn=ffFvogv9ZAo;swCSV`=Ff?PI``IEHU-ZUPpi7aBf3{w+d+Q85Yvk^CDQja0*| zY;EO;(2-Qi`(RHWP%qQT$69Z$FPs6)oiRnp1dxlOC61v0o;m#Vqw5ey{p~k7I)WfZ zVV_H3BzoCvuM>-$rXJ9rnRi+aRQQF2Oabr(iA^Z&y7jIN*q`yH zT-r|Zho6H@b7W2WRh}s>^m=Y$Lj4N|E1u49f-A7hgO|DV?_+%s*oyH4q|klr@t-C( z8b2rbV886t2S21O?pjkr%gLTLa?Z7;wEKx^%3j(aP6gU-Y*dyoV)*B%A!sE@jj5f_ zV$5;pSJ1mGoOFsri_gEJ z4(&x36>|4;j+*iP%ao`;c_)Zo8ez&SS3t?y7{!E_T7i}*ed0vk^!81M1VJ!@EP4{I zP>H>?xJcKelHLJoRntC4pTJ2831PQAx>Vg)PSZ{B)BcKjlb`b*rt{}V+BI&h8&s6J z7vc#Z_W|$l$k@#c`g?9yRU>12Q&E}0Kji#8puKImiRcK`y&1oCcHS2uvIS@J$ZB$T zCQdC`$|!Qr@m6NT@JGQriCEl<_2K_Kljm(uMWQUTh=uLtFK>z}Ff5>5XU*DD{%(GB zJ8<{BYSX@W>TYsOz~G@}Ho*pz;(i!7xg|+J)#idhX88!Oi=`Ot&#KZNZxe`Hbj1_1 zSSuXe(JbmNUiOkw@UQPzGr~ne;QG;FEFVs5*vs`w8CkTVm9Y762gm-zepuZ<3vxjbGlg+7)s01^m5D(5ygQz5Cl zA^22PwlkICBPf_MehT4a#+%J#=p=VxMKg8XU169Uikc&@_f z&-N?b77#Uqti$98C4z?2giJxD=6SY~#3L#i7VW)dYUSY23-~E?K^-7#26SF~gKQtO zD=P_*fdj8zz1lkgsAOT!Jvyjq12VIw2dqd+NJx0DrdT>{&GO7Sb>TMvlvuU*g*%8a zfwLPlxv>Jg>mImkaIgrdJCJO24&Az2ax`GNfbtrU)5D~$CZ&2nAQuwQj3i5L&V20K z1rmr6Kn;NFJ2dl!0~LZAnZ2;D=zFLr4BsFDMtsBHU>~Ppv$7d^de{kuBMD^b2Nd=n zcQ23vd6nIFUPuR$5D&=pbVI8>41kU(k#8pwKMxGrNEi~bdfi{{TQ@*%ys4W2 zep9$)7vk?pO7ixuV9CocQOLd9A%(gXuhBy`LrvY8h4s_6Xg5*(p&BN58k;U&ar>N1 zR~S!mQ}opO15Cmnd%bLyGDfvvzKk?U@_ZaX0*_US@(^*R4L_o{gJTw2bwVCn6MG#8 z5g{7|#JAubs|sX2mA^C0Lk16&n0aWHgPZmznnr(y8ID${5XM(j`sjAs;_;Fp;2FSR zu_U$q?v^~_=>gL@jNjuyydxi(Y!zfqE9U-lIW^McJD)bXF!EE!7nyOR%Nk?4BeNP& zAbZDg%}(>X_K#MWVv||k@sXirZ#>%gvAJk2;T7{Ea+#S}TkR8Zcxf?X)#bc9IKcs3 zv1dK=KDC4kdZeAi}6xG8Eht&WB&i_L=Wr)wqKPQOoi)mteb? z2;E8Fa`rl-;vjHmG6!hb9)LE~a<-aw3Mi2JbMP5`WJ%6-ie#)G z0QNs%?j8Sh>{Aw+4+6z0k~i+yvX4nXElfme<^wLNYU@cRz1J%Vo*>RTPk_&{{YnrS znJ9iT=c-13RanSWuJdWNWz=k_X0P_6H$F1U;JCg$5#eGd3wzmeGX+^9j> z_Z0Sy&=4^30tsger@cbR$NdW-sI>bocH5C@LN^dd%i+ZHwT%r~M@Pr$U(ra2*xCUs{ zRLX8H^Sgwj2a6XzFYOdE!>!f677TFCK~|}|k=8G}waTbawB^0T2)c2*u5zA1Mv8lA zfFcBy<&tMg2r0E4`^tdz0Gn0J?F(JO!_nqV2SYT-?8O(K@@7|iR-w=siskgqD!5f4 z<`UNI&lAq6Nv2A>W}I#N?JE0blYov)gfS>B0s{lVA*?VHdT&hD!^0hUUb$?EG& zjy9%e-B0Eb7&##IMgtsPH%IS$u_2&}j11`DYCUDJv9+yU>7@dNhiVvYMKOrG6pZsX zPG9gp=^lt{Fqt0ACD|V^`=lx={FTXdr1LWc>x6mGYtGM2*K>%@5ygex#2dJT>|IUR zcpezoEaLQiIHDPUiwbF~$b%o5;K2#=N)Eap63cjz `;2rGM@?6OFn?gmzEu(LP6 zxwD1YOd^F!pFocu!9$fdl0w){f{LS+Q~IL?4do2w^SW$&;-g%Ze`mp2Ft?f+R!`9%#Q3F2N^GzK zMBY@JEH`sU@2g1BRRaXvJWf5NTFA62Ko8$hpe1~fUEqw zFwNl$lE;jMts{d-fYYdOrBa5%be!5A8iKr~AQ0Pc<(=k9`XPm`7(ak~K*Z4GU>>oA zk+q!u z4j)e@lSKl_z=ihmuptV>KicoEPZj~svD@g#fjANrOeN&doz!;tumzOIo;Oz~`-hV+ z_Yw6o-BnP zH}Ktu{zG!-PD<9W%dz5e3&SUsn+(_iEYhsZH>_KR+JD7m5K~{`Xez>Kvf1H%+Uii= z%QBW{Y9l4CcSDS)ru7Y80KRxQ@W&KdtGwA=m4m^i9>Ja7&_txC_%(`$n>{BE`@%XS z#MtQ2!M?c1Cy6TMXG{enWv82t=oMk5<(>U}srRm{>t}SX>m)JsPF{SP!k|)PX05R0 zVhy8H-aEz;LT=AoLVE!kP>Gbhr`wD6J!E9pt;2hs$lh5BD|4EM&wv0Tir~y&=i83X zlfy!Jm6Z+?Gv-96hwGD`*Nup=si~l0-MZ|ywl;04-T-1*@YHzy@Rkzi#ZjJ)QTj%5 z38(2(7-LcWnI2R~?tEtul{&_P_vE|NaFL7thlSJcDsz{O9Kfol#M<=7Iq9DlV1`fD z7~9ZjH=I@)9W_m|ajC`E&;=&;%iBVTGD$Gqmzp=bt(9PAuK8|B8wtV9s&-}BI6UKt zAi2-iyXxx`SJvq3L_T{pp&zt)DCe3lzT$x~B1MkC`XPca zr|A9o0PGNeI2{l^csd^K69k}g28a6*)x~j+Am{1c3vqvB++>~o@jg1EK|$*|Z2DYhrsl2Ho3xfbK5=nscnPMDV({QPu5 z2p|>Actwh~6Hsisy$3!NCfbF9pO2 zbZuYPcYFRNrOU29g~5^wDU?M)9wd&iK8Oz>lI`GEo~?@nqvMG?RF%P2+8GL06C@pS z5pL5aYuS+dA!orsZ5|gCv%BEKzGr*^)c`(gKUj{GhY6?+UOc+@w|&V z#oTX2;1Lg9nLj#1O+hr6`AqQ7ldEDjFdGB^wW$l} zjPcvlhIi>acSk3)ct8G?E<^*(3hF4Mt1On9rmL!PZ((sh>-u}v@cPC1`8g=EtBWso z-9RYo{=2L*JfINn4OwO>Jb(UN0o`9>6g0w!;I05^qZ|LghNU02IM=BRM0@zOy(Va> z75=1bo^2gi`I-H2)nAubGpG=Qn{~&%SgBu4RaDg-Bh;edJ!ND$?rOxTaGySUiJUxh z1-_8CkH;GRe3}0g7ye<^b4FANuVDP>*HbeM0?vgNRCq=0zHl|Mx()rJC0c&p#CQ^_ z6a*IrJ^zYh{8hn+`5CBRF+8aIa`wKn4~*E8XzB`|(GQknRG7basXI|HcZy%VT8?zR zpXNF{y^1Zo9O#Q}#Jk^Yo4Z_9-YQXd`&UuTPhO z7~1^j1aZChj`!z>{P6ayrxzwP?y)NAF2?e~R#c`_nHuAD~pTX(%bTFqP{ z2Lvf8B{ILhU$<)i);~rjJps2f@rN9&pLHmI9Db{Lbfp}K6M}k6_PrHq9m!Wr|2kU@ zD?J|61+}sIk0@8W%q*8we1IcYhY!3j7uNx95eYJ-N=#@9Y5=j}rq8uut0{UWX_JcC z=bY<`&U*iK3&`z+t0zobBA&ru;M)|`z$^m%5Dg$z)Ue-56@!8=*}AsQW=Imow#!xj z$O`E|^Psq9!ieHpn;gPf=nY+X?4+p^-+k$%ZayaMoz#c@*k<+nL{?(UxuX${8GEj+0V`EsC8)OZw z8(yM%fOwO|7B5ZVpNMjlv?e1-{+pvgLGSwzMkIef+i@QI)rb1;SfuL426r-Z@7{U15NJK zKFhNaJ`2zJe`sG+vsJHpeC+t1=k2)}>cQh?1I<3WC(HS0J}YG6W2duJOVP$#Nw;Z` z5vf3khD{Ih(0C*z!3Zap(>_!lwW(4AY8+zbuaU~fi9dRPoN9s5|7ja7#*cfU@+2df zcNEl2?omISG>zzSky_0PpIqk$+n3gz!EGNd%f#{6*4mnNDN!#qmjx^nG*v3nJSzFU zwgsv-cmX$_X(wC#w@RmRmuc*;KiHYhZO7{C$x=Q|EipTQ-+8LlEvMOO=uvT4F3?H1 zd)K_Uv3TwJMHB_of|rF0e&v_`zK{$eQZx60xKj3=<&3L)crd#%%jE^{Ky{VCyQY@0 zrH=a5o>~hBXl|)Y0dy>Hgy6l}m8oKrOVQY7OuX1Il;J5W<2CjmB}f4M9xA#IL;<#T z#Yh^|%Nu&9H^xdS+tm~cikQ8gq(P3HT%Iyh_DwTXzD-@4gQpZqSBp$|Q5U^y=HcZ= zg;}Y>;F|vLgx_3L)K}S^xv(3yd1)?a>FS2#QwhmV!o_dqT!HsXUc=RO0EcX38rVd>R7_>zjk9bWfoPxVbGro&54y%q&eSg0?^7xRJwgc-UbpXt^ z^Vut-7A1F(O!z=7USU;9OR%OBo3_*aPFis zfx7^r7#eJh4f4w>OEmiSdyb>Mwq!>|K79Gmj@HwtT0w-GiBO=opcqRV5UwOCEtQ4A zQpKWJ8=0QKU@T#%qX$fprf12|!1+vcC6dyzw+lO4eY*e-sN0Y+-jwcW-%HbU@z*ZB z3v4Gn$gUeqoU-%s(2#e4ef@mM!bR(X94Lthef9#2^XzSH*(zI)UxC^oHI;Jf`zI_A zdnl$^@hbSok5}aet&~WV_bXjpuptR*D3o3(azgBx`EJJGEj}6=8d6?D>c}8QWoxeS z9-t>CJiEQ|L|BnMAaa9Z*njr|i3A2>12WmoxGMx7 zlqC(TskVE7X?_8wN`So0)pp7tj5zr53miLMAWWeL0FBhZD?c)#G6y>QhVzXwYsm1=lEsMq4Dm8O91d2J?MafMSaj5$-d8RD+(jc zHTR~BOo~J?f=U{MU$@>tr+DQ=BJ|fYo`&xEbdEYF14z!9fwP3EA3Ezj1-2OLRJGX{ z*}MXJwD=m9F1yh_jT6(kN2PJpjkM$p{IBpd!g<-d;R+%jvZ8TYX(>!q8!@M+WA1`vdWdd?pUDW)(}(uUqg&p&dV=4 z!1JY`mCZzwpWvKMAriUNX3WA+4{0L~>;RJVY@;i)L;KaS$h$lsJUAUqYX!35TyG+y z$%WsqCMIg5`v((&sfn!bf=-Z(6K6UGwXhp@8K`j9r<3A^GVU#o)D( z(oq2zvF*y#yUiZ$f3OHudwXBVPsjncXDDg^* zqj#)?e#^&)wmkn%b5uY_ki4uPoDKMIWS~B?){*ZhmAcqNUXlrMOGnIZnF57UyX`(%4>2v;5+I6vI( zvth#Z2V`!A;1YA92K8QNR@4q8{u`!UD@aG8;+i5@pYEkWsL13XZQmgqe@Idl>JQ@{(Y@IhXFmh z`_`;K@)dELRBiyNqR2~<+`tn>>TKYJ#q|DdU$QTd1mU)|wZ+}s*a-Xl^uKD(92m+R zA_Q!|#XCJO>=SusuJg|n(#uJrv13*wN{>$6$NCI=%;9Lf!G>DX8}qx`J-K&r$!i6b z?Vts`6;3O*q7+4<%vn;tl#>IZCD2mgty{;YwL`RhQOkOVh4;4m2En}p#$Cx*R?x@% z&O5>?(=XqRE<~p&6`F-V3?k|m)oBQ2FDIZ8z!z+IcJCWs0R|?}o;6=EzC=wH_{@^o zO&Y1IPElj3lU&Pm+*U=qxud7MF-)&O97eP&*-E7~S3^9onyT)o(izl$Wj7Lp>nkj6 z-*mT(s~HuPv(?yjBSA!{H`j4li@z>*9uC9fB*HJ`YhvG`34Oe= z*&JK&o(s9fzlpQh9y?})?of0BIaE#q@ii(7?c@E&KS{&YW?qRQW{zlREeTGHZ+vOH zX?(B8MWhJn6CO-w$j%ON$CKY5DE!1dP5EFewdM{G#!&TV^0?pcUI1@6j%+5N^noR_ ziFLOUptiIa}Zw<*KO) z^|E7%lOaL}syHZCX8etz0X*)NP#tK+N7D!enjqy#amUsSV*sD?o}lDuq^SuFvU>nZ z_I$(#gd|V|kvY51Ncc~@Z(0yTTxNMlXUh9jy#6D_i0Y@d(|>)L&MsYaSDRY@TEeL< zC-hoCC$+r#YW7x}-v{Tp#nCB9pVs*A29>(xU?W;p<>q*#?CS$=2cfiOpdF&iKwvO% zyu6HUB!Xg5YFdtat+2Qa$(1sPwn;n{?kXrrR#^p;aX?#9P+M$rc-o~rIj}3q%0^6X zL#;(DA_LS&@NhR@X>S+0tHDSxWQfx1qyPNLsN4j9b4gm$FdodI8bJP0*zPMqEZeMM z>Txa^(g{_9-h0Ek|4^j=T!%YYW|}m$p$(nl`lu1h(76+R6wb1bL6QItc_Ds-r{=1W za}4s$zXBXKg$H|G2AiQuNo&H5+@Mud94s~{yB~YECj6a4QVS{Be|{zzX$VX$ zL~r^f5qe(dNwSm$Rast(TIOb_NpdvcSw4{(H(DM$&a-N+fscF~hDH5Qcv{}zPC+Wh zfDVy0+B$`%-^G%N!JWYL@f%xyqAj2r|F@AgW+9jtyy$PUN=uC*dfJK?y}*+^$v=wg z7W0=8ob^7b3(BxxGx=9gU*IEw&xd6c4b%3WAxyt3*Q&3|f%|s%;`Rw%N`RpU>jRuMN#7v=NQVT)i$E+JY2-6kbS#-v^*W{Jb-?Kl*tG=UdQgL(N&g^!l zW`-B)F8h$|hWwgg5HJ02;p00?AEXLTkRk-w#Xx)csM5ry@vf{APKNUcLLw!P8H3C| zS=t-Hf*NhQ=OlqiI7@VYUO1BKdqO-98Elzd(d7#)WQ0VaB>Cw#*)e{ON2TEHC@W;M zoa=YSqf0%+0omhwxhy!q!Vhd&&UnNC+C5uG!(mnW`HF>{AjlZ1{7uuwIK&0t*>%LY z7&GSg6GDq69>TC*S9+8t60sLPr!&*M*moJs5T$V!IN}Q!vLu3LGEc_GWK z+w#(2bY+Md-$5`UwZu5z1MjiyyV&G~065MK@rStkPvoe0VkoI1+g3&ID-DNOC!3#9 zaD<<}$;6`X&L{AhrbJIXNKJ5$uALaDEODV8BJhTokcu#OSLN~h_hH+0I!;9Ozx#pe+HHrp2e1FX=JO zVB43K-~J}EpKwby3hS)NhcvK>L`c<^9ZgBUO&?fRbN@ZkUdT!Ak`prGcFKstdygWh z)X&0(KP5vE9}n6VD!re#=hzl=r-}%>bq-Z`15;^`DpFbfd-;#KxzaTE{Sl4k>dPN0 zLH^l98cJtT(HS?pGmr~^(xeFo&GnX6t^Sp1DxJ*q-1F&+FxwGO(A~d8P@jUoa*4JxR_u zgS$db5j#V+LTwXm3b`$=g5oj%_mh4O5tg!ohR}mX2P5s7nGND8eRqW8A6E(a$sc&B zno+W9a(EuoxxO#(TlPKKjULddlVAYiHEgrkSYpd(WLMtkbR_*XQE5AmU>IwJP z{5ya#ov zw`~z*g$%g6Td|VZhS_;xCn_xdueJGvm=9&d{Z703%>Yrhtdbe_?F z*cfFNkyBlLcShe=LVUDql=dy2EH-}v3-*>Ufr^L6@}H78D+fDy{q3)0RHKgtH#;g$ zVyxbul$O?%lBZ5zvFBP}g{Y>BApAadk2?S&nG{LcMF`{wu3l~q#u%?0+ta!Q3G8zKuijz6>&cgN0vRkL_ zsr4`ghNQcS*7qjkQ3ATt3_Nzgj0uiLCOamZlnijriRLhGEX1Wlhx69hhzLkvQYFEN zTJHWk_o%s}I5XtyclLB{+)9_?H*ol;X|vO$w@y=AjYhj)ga6O;&ZLn$`6V%>Z~hxr zn@T?28hI*;1rbea0215wnn%P!kh7orgQ zOt0T}kV^!isT1xFBZR1yH9F$QYk5WyIVFuEI3gTDu}j9(l5RvrDsa=4Fj9=0Cj^&} z%S4y-CLrFj2e?eTexVHw!HLDDtHp~+UaWBob^(NiTCWG;uW8pYkDKpQsKT71;@dz^=mfE@1b2H(ZA2{DNDQ^`7 zU@pVq?foma9Z_w?KGfk^()$+-i&oq|2H#2*>=E2}|5p2dSG+_4dFbjha4+Su#4US-hV6;}M=9)AcMhJwd{P4E zqY)8)T`YG0ou#<7o%N7MFP#eGdwx%ycpwg}`zt^O8%CjxZDIe%JZ6Q;Svv&#e`fl{?k1U?WL{RKl z^+^HY>U8K#6+Hb-JJ!+m(OAUu=-N+;=c>)cWcbfF5SOVzF<+h%=KIq}h3@k}q_I0( z#n-~_ba6kwPSJg$0p9J4!SsV!^5po=RVAi-n^}Q$sgq4(UWw@+-SveYaq5&HKYrIL z7s>E+N1NhSy=K(SCY6kIHXthiQ`_?LGKTlBOV=8(0qnZgbiac6)tbqc>mA4tgzwe^ zUUI*NWzy~+lO;X@6oTeNA;8#HnEy2UFB7xgit<}}^esU`4zNmR^^}p%B*)iKLY?_& z?%5q;wi-V3YaX4@AR+|D$X~Q=XJ#>B5L2~qQc@)wQBwM5JUb`dEh!=+=ygb&X=vHn z!TT8ASeiiwZzlYO(P8gUX*xV%cE-EGRgZ?J#&mpCnJZ+S&VSwtu;ltiRyoz>EFc> z*Y^(z7Umj#2%$!o(II)ocsu;U1=#PWI-x1K5boPYfRzoG0+P6NM}G#C3!rv`;YZ&6 zE;FqsiuyJ-ybxwOhDU2U|MYPC=@*)Up6AYt%+m*A8k*-ktjsU{=j1;ZTH_i7*Fpb^ z35!L^k?xu*%^X=RsWZhjn)SS;6H0`^D&AM?vHnFntK3xYxd@L5M?-$>28jr*ku!zp z0b$dKPE~xmp4j{SUraekl>KuxHHChf1o<8Wv!kO2BHj?S`Q>Ul#H7aKQW^&7MZiG7 zy!#~Quk*9F+Rj(JLH>|sx2^cWC!^RQO^QxuM?=qBS*yX|yOh-kQ_kva?Y?BF2J;L5 zw~z29wfCGRCfiRjkk>h%fs*c{^aH?;2Udr7zQ=sYiNS@1g#jMGOPbt~cXM)Aug;5t zzhaMm*^LS9R}NjZFpBcb>WP`#h8RdRiM6Zrcd(v4+PeSQpjudK&Lw0wNyl`tKWf=Z zXB-dKzIVFu%axMG_GgS8>+bTq7@OGjQE7@P9zk(bo$+rc-o;9RIccN|_?%L1m`3U+ zPa)>6FLu=bTxn6*FzpwBDEp>fgYvl2OOKi=&gp>^B`)lMr=~g~Kb{LDuAHMh`c3QW zLQTpCVFxlAsTFp>VoPO*^#1LkE?s#i0PoSQ4K`+wG=zR){V?69{ole7_^e4Gi8PM^ zozLPENl++j#W%(I3HFV|2znp&V2ahG z!rN=o`~+-gm#!`9;TK~5wN%&9)m+phDJT~!*1R|J+RX=!-2SMWN+ZFop>h&|*Coz3 zten+;AmjJy_nRPfbbjVr~R@|`I)NhCW*O6 zs;`QGIe2nH-BBI(mzUH1y4}NRTY@U5_@%UiAk22{)f#^%9BvV~7#%M70I* zXpP~c0p}R&#wH0df*QH{VLU{JM@YC_Bz1OYOFlPSX3_BG#CN%7h*NG+1Yt?V?^2cYZLq%$9scmQSGNV2TrL3uWjKC8KCgbW6|BQU2I0@_wJ@ zUVYO}Xfj+;R)UQ|Z_WUewK^f(nc?|QxIxlue95UW7<~*bJS$$|@t}8`Rb`Hvx(`U4 zYhzQk`dh8fBfjCmy|8y!s@{eBlI`(}WQZDTZ9yVpr>akMg?)E3Zzh+esF> zV{p2^+ib-2Ljma_bKc}5Wvi4i$eTO=)veC6I{kz>;h8^Jb_s^V;TXTf|0BLyI9ge; zoV)UnIfIEnD${?AGZvrt*Y9Zzm~*CT7G~>k0?9Q-)YLEf^Vf@{2Q_=(Yk=yLJpi8v zfARq(3B?``YyOA42tYT9HGEvx=SY3>ZrG3^!B7Q3yv{!Rq z9;XAlZxBdEt*tZypc?F3#_{p7$;IZ!<(ieD zao3u%|HsyO$5Y*h|Nq$HWbf>qy^@)1l8ng6J|u;l5VCjnDn+tMl2u8vWy^?Ckr^js zB`fQ9ecbo`{r-NB$M2u}(e1uF%K4o4`?_A&>w3O&*+RlO&wuvF^DfbO#XoOj7$wFy z&#RaoX>oJrMdxJu=C&6wq)l{je}{v+ESF=k zTJv{~+$J1)pVRE;hi!t&^O~&}w7xSue}Mi}TFMgXgY0?A(~i}&FtxpZuK^l%-({(c z2%I0$$x}U5BIHe7RTn+4x3|e_!!&efN3LOjh?m@=cR&Dsx^?bGIAO=>1yKI-8;C8K zHa9mR-P_lUoS{rAl1|kKG8~zfF3Q z!yQz58i5p{I@ge|aUYeaS<#T!E>m+z3hnEklQ-L#`%Up4(v}pheAE`xCnnS%j>j+f zM0Y(ivFs1gkA92NQf_oxwbfuMu?&{$l{9OrMzg`~ajexnV!Y=c!rT`<{b^Y6J&Rf1-rOoKN`RGaMUKEz zdY^qb>4r%{nK2SK(ec^L>fdL&H7TSDn31{;RAbe>2)NRjyP8j}Nl0eH`bizTjC=E7 zLg^9uL7wgLTF;8KXMb;LoDc?`?qu|Ih>Uaf2n>aT^5y$g=pQTFJrtwACw1+gm6Dm7 zJ`=nVs=r)VT6#k!Ju#2%^;6 z3yn{gpsp#WXdM5$j+IA$LBAV_C{He#1$If4|I)-`xl&|z_F6KVw1ih71FbR#F=O>t zh|Yw_PVJ#RKgVBz0wy?j&6Jgx^Nd8|M7T5dgYqf826_5uPvW-ETzymp z8F=+)zeGnJUh^6e2iqMvxHO-gt%8-G*psJZ?Oe~9#XKU9MmA<@?ML%wBDstra%sDX{Amnp+ch*@EyMe3WM5{?S z{eCJlNAN9xkR_z=6$|%a;3HOvG~(KHJ!Jlcq+3P2NAYFT~a)T(m{|o=E=iQ z3tkFloR>xmI4jXB_y0~jEq1Yse-NP9wcnjz-=2AuB8-!)sk=W-ib_EJ0Ufaz`m21_ ze0H2VDITbCRb@+m3peE=e|db6e>$75CehL3o+ymu-II@c!-vo730GV;j%0!{7R^2U zniF|EbevKWLg%kiY3uT*1-n^X36+gI?){SA>OED-`YEPCVrObPK+gP;P<3B|LZ+-I zf3C-f=>#R_Y1+@pG>toJ`)XRMROd56}pv()IOdJ<@z8Vvtm^hd^4Yx@Z&WfG>T0^VG--~u^?ibWaNYJv~P~sqyc@(9a zpj6Bip7GnpGw98^TrX=AeOTQNtGj#!^;VpbyH8ZTX?G*!*g;Ue=)q=I?7~fopUGi? z0tts1lcr!L-7z2Np00W^^KyJsW@cu!;5e3Rca&M}p6)2~OZl?{uL*$d1?!#)cm6ph zob2N@M;|q=4lHaRnh0tBEBzRsBcn%Mi`V=PL{AOb$3-!tk3QZYwES$4o99W#Z7AVe zND;p0M!Ma4wjmO-9ym%%TP1Ek_~;T=q0}{NOlq{2Y|oe4(tVWEpqNy?RJs~<^nI@n zN0I5KS2OoD=E?hh)@Xr5eSQ+w-@N)EMBQY=God(Lvpj2bWVxm#Lu7gRV5?A(_?+A6 zTRpTNsW=Ut@zwE(Ge=@(-&e8r#)^LZ&D)*1(%^g!ccA{Y)2zDq`NE~90ZTlKj}71I zoNKk6S65d_;t6FmH`gK1+9gwqtBs7Srihfe-`U%La+{G?&f-Ofd#|yanF%-ciDXXR z9qJzxVIehhau8DN#4L1qnlhrYnt@wBBLAU{=^tbCQHMDpCqB8H)hH3cV~fggle~`# z{iM%iv@AQT^)jdDt@gKP_bL}N>F@mxvo7>NH>XT;v{&n0HGC;&{cGAJG6g>7@_al` z(X&6^(*9gt3>UhIO_9FMMNQbaRkw6Zi2WPRky}$v;k~&zOB|XLw0L^lYvThrI=~aC zy_z9S+Qzw>>HFiT{h;U~e_W#{&Le-1ZbIo};zfRPPBr~HV$9?uxaAEwIA2Tc-r1hS zA5it`$u!GyFWK?LK(G(x73&84JeA);_QfabfBy(7t95`-X1TRE*|H{kQ97ZJ z^E%y?179l#zIZgG74Shc$(xx2F3{eQ%3=OMd{Hy{*+{)xJ%1nk)g6Nw|XI zQ?5BKD7h4!!Oi37I-LjLoYV3n{tpbCD#eIrH?(PHYP!>CD|%dMqrO}%GSH2$4oTEZ#BRNC5Ub9UIhv`K z4@8}kPagTWKy3AKdQypJ)**xhlx5u+yELy%o+&3>NzlO42vAR?-t%iwLJwqpWnmHXl6P^MRUJ3*jEEa^9*g`u6bZLN$ zfc^BztN<29RrZ^Xd-W&Az7Qkli{B!Bt-PL9+G*hB z%soyI(_?M=8yrNyQ^aGG6Ou3N@lwoc4AyAPtAns9+IplhnkYpsOy!YP0LN*x`kGEu zIrGTD8x*(F>ADi3*y>zslXhkIu^N}dsy-+OOd$9iN__ zE=Rh*gGrkH3#3V~WZ5?ES&#dTS|i)-RR!AXi;aQ42hDg{N`WlpIMo!Vk;38YHq}fJ zWu$!>!(;r67k=!#`gfi%ayeV9-3Z`)$e*`(!#=!NFEXDB_l6$+w_@?Q29*gC-4sZ& z5JP9Pw??@waXo*Po0V*wvcMiSx|-A%BSkDh+<7P0gDtakXmUoH6B&Ic&~X}l@@02A zM{c-Smnax}ZRB<2eFp1MJXGQ=ogXhw(JIdFU1=%yO8}Rm)k9$;!d$uTDnD(|CW`O>9ZRdtxuuS2KQMCx3b7K)f_<%t5LZwyVA^N?K&YJ-Fk@DG?B7Q3gB z!z9TUFT%+Js}tLIF=+5cwp!3?VI9ZcYGjoFampOD^A-)-kqTXs-QH?LR2;TC#V z%WeAHbhUg4`X_V9ExLf)4-rjktLT_Z_|;FF6)9-BW)zohck_lqfLH_mqIgL?Gf*RLmtVReQn zD)GL(UHk93>m?Q1Qiy?k%8KR0L;WA+thbyXtZv}a-Vb*+O?NPVHr&=(p#7w z5Bm=s%f=*Ubp3|C*&0_Lj{FUS&-DI*MZgm)phu!|{t z^;TcU&$W`wz4joy?o*qg7iGqppC$5N$N3QrsFGjv?a?6Fk)@q4g>< zcw>e#wF)1nYO+zjP3G0pk>#ZtAq2R5+cXbJRpT8VhO=U-urgdvTF(+`e-HNLJ#qch zeG9|L#!SlAomb`Nuoq;e7OW`PaPVYRV>^b{ye2?CUF>SC`mK6Amvp>E33T!Yr@R+~ zd85~{jK5v-^deJRof0*lKVIt)r{p5z;lx+i_O@?-@S>fah0Anc@wMGw-9LWLvjcwF zl%|*7bD2u{8_~6IXJ~GZ?C;%j==YGN)5JT^)pns-o&;B42xncZL_7|q(bXsOLC#Q~ zanF-4ulc$Qt*SpY{uMf>)&o$P`Q|EUjyf14$CL-+-o1{)KY4tpI|hM`2-zvqbb^YK zKP}YB!gDKYBeY!ZpF~TG9!jRajg(_Gr|(}Wc9hm=)08i?gt_{OhGlQ2>!Z{k)&nk4 z5gxA)fJxZ{2^ouYoqtp^C1hhuR`dblYEpXVW)3VOP`H9HWumvj;iaYUoTyUWANMaV zNfp_0wn*1=k1x_lEtK28H6|;1?X+b1Qb*pMDiy^<=@opb4s$CI89Ou6uVB>NgNzsGM+)U>c*wlAJZD&NKN1g z{oG-C5*5-P*je=}^_q^5{vKJlb2N6vS4DQUzU+%SSK1>%(((EdqJ_*%3ldAcC#!pK zmTSS%>7^$Mk^PuXkG~_Q%Pih8^j^I>H2yIx;h`1&Mz(*myf&TY&Qar0U_Gv1(a6@8 zvbVbO=#$y{pK@#SZy)ikGrr3=Zz`>|)AVT)|4{1}@OoyLdWqv)_{p(R9#65jmSJ@u z)}WfNinFy<>sjXVk8md?ColdOJNL_;#Nmn%8o%;-;d6n=VBB#6C}XuqXXGB-9XP+2 zixa}VQoz=d?;rzoPpgE;?(RLo*pBZxrly)ygxK||8~m-~pAHr7gIYGLb`mo%ke{ZA ziLY^roXRr$!$M$Gf_T*dpV9=2wzc+OtY)%6kAQa&P&@;>8w2#GA6z&nvS(^%CpjKQ za6#zqdM7wnX@kH>haFYy#FkvPWY!Z|uliZd#mnF{jb`~NZyr8dF-5DHY0(9|eD>JQ;;cJr7B_W7SBDRCjCpmcWpG?X)Q2bi47sK!H@Ibg9}W-C(lL)Vp|y;-r1MN_VukeA|J50^ zR+hH$phIvwzF-T(&K-@TEsD0wZbR;>Luqm<>(iG4*!gi64f*r)w*y42SAez)tgJc( z#VUBKtNgd!>vwFABCTY}hb1cOU(=ge`SH1rH?ko-8xS{c+_<52a0t@pc{exF&*fK1 z?0CznVF{(ovVnyJ_8)H5a75)TNqDgduAL#r=SW;>HZN`~kuJ8CZ`wbruld`Ra?gjY zneUBNyhb2?^fqhDwn_j}vf?gy(d!=JrI+t+ZUP%qss%_9Xl^VU8VphBN9^E}PRlD2US zx((nxk4AI2KBpy({;)5nzsmt^i%0*0Kazh-)-0`Rd>_$Sz|a`JnNV|ElBi|1U(-0* z&n7i}mHg$6ix+#AkXR`Q|A{QQX8)_oq7<*~0$=G}`0B9CY;3o5ksz5@pd;5?Ckrpv z`&CueS-o6cqIF{THeQ;Ssp9C~(+_H<5Y-V21wzhLJ3a~AI8oCj2mZ1+S1Ea;Kbj}# zzX*t+fkPv1lzc;{&qCm;eAzhIk3#(HxWb+NN%uqQ@XStr>xj4?u6Z-F@*wyV0ctDY zNYnM8Yg3cm2zyWZ%HFC%FX# zOF{X-@WzS1Elo#?SIVto(u?%4yYyyL9d2W}rNfijFTaWe0g(7`fa7SL$TlvYR8)_l zAWt?y+Sz~Y^AN`T@0eV6pkG1inJOTbAX~`Dpo8)LW*`UR^#_VZwvozH zlekgC|9sO@{7a}Z!3*P?qu$nJ1P>%%^S__zl`63~M>zRl$fuS8_YEC!*jmm4N*u^q z>DqNM5RsmyCC%CUy9D!+6+h~Mj)?4ZRwvg>PExW71_$mlXmw~E$jy7qgBWqQm&CwX zQNIfPk3~B9N~@uZjDB2_{#ebzL23Lw_hx&hj#1WB-gbLCvLi8c2a{v@`8)LH&aQGP zC&fIwN|l~Zg|U_zHuO*)B{GB(q04dHf7((;lT8FKY*HCt`ZAW6l73Q;vzun?TotA0 zsmF0jrI9@S=1-HdG=D~$TWU7>7um;$>hZ9J+DFI@O-9aIcj7%(O@C0mOd8Psz|7&( z;-~AbuCSg+DQ=@-%#PrTfKi&PCKFMFga;c*wMWsG+^9bWsFZ#ifR{Q83ZQN*L-&>IE z3bj9z>c$c(7tIcmFJHI%YWNCEYrM|Qsn9Q>B*!#4i{3}&btX%s!rLw~IoXr(h?Z`9 zS))@|)2Ny0@gJL4wFY|amwR(+ZEud<`8wc6tV%_~D~|(nS!rpQCv+A)hue=S^oIqr zY`K^)@a3zumjV+=zo*ul6R%I{`Sb|BRf-HYTQntS%lLP z{__H~)lN-V!cN!L@>sNbG=)9T#=ro@NOx^63+cTf9)2Cigjt{D-iZ0{Jc;G0y90VL z@FIHWu750!FS=4&Vk?b4GtE7kc7Ao5H_NmAx$DZ_IY?mzja!y@8FBw<5(4MyL9;J9XNowxBW;sn*KWOU6CyiGgla?s z?ZI4@$0~D~;2}AARkE=*`M`WwvJ+wsP;~^)W(OjvB zY>t`Q#o-JC2EvPZXC!D(!-Ft&%HX2lJy7>-PHe^IsZtD|y>T%$*{ykTuaL9U5!l}+2 zg72`@mmTn17cd2&bmH=dgym=%N#-CwH^#gz)}``bi> z_}{|^*`ZQ8vLUMQ{!pu@nowx=XFQZ}#SJ3VtJMX;d5`%7IZUK|1i`@T>1wu9Eqrw~ zrMy|v*NbE8oL(DRGJji^t-s@?0z2_A*%3Ot#S5gd_p?cuv90B_prqL^OpnJ5l=|%6`F}B(o?!1eQCDuew!5<8j=&MM6`pj!t;sQqa5rJ) z@D4&cgFUv>tva|%-er$?k2@MCZLdnY>5F8H>EZ>a&$sQ~O^;()Gb>N4=D&MgzO=r@Qt@2e8(S{&;M?gdSp|?!7Pnzg z)U(>NEJxuwCbpH_C8Co`M-tfn_VY%)@2R+L69p1+k$(A)S}g8KaThCyoHN2T!cUl* z@t-_x}52$LuG^g!<5dHQ~j!+Mr!wXxgwHh^kn(*PzldjP^c$+iI}f^ACim7 z{yxaSi2LMi{w~sqUvSkGiYCR6z8j(Xj`5(ap`=$PU;b-YM+ZM|TDJow)~3GRN8J70 z!B*|ys5t~gZ&-Qob2~B8s7|Hx=?wy@HSvzO{bnq^&Le)M;qcFL9}j$t@9PVb-)ith z->k4bvoiWIZdgbBlEE(Pv*Hwt%N%_#9%?T~A>_kqqt^*6;9Z!3z z^Ya&2&3TIWNb!H%erv>LLK{N}k}*M)jQEv9Io$fV1>dQ$Imk57L?wg;$u>WU9?Um40ZDIo>Jo9}l{!EP|r`NYJ;YrlKN zXMyS<3BSJZ`&$ug#V9NZZjO6KXNsc9ZB=ls~g$`cNXx7m-zUioNyruCVE3ls`w1jjcM6Q*E7 zabr@i-5XlL_1B~pOptGvNz7+rms2SrmmE4&#%<&rwoWcUCb+LymArfY{nS;wfYI=5 znU27dy3Y#Sv~-F}uUf)S=A(kmPH=G2oAx9sidL;{ygpMGg%8uOKkvc@|Zl>HrP?7MvY=O9{;@rTjgbz zRrrasxqBn0Syz5GSKqWW95y7-P2~^bv}V5_35{;@8F{gNiR?pK0y&?2j+-^{95np` z+0M(G&+$+d`(7&L^*1-V8nyNaxro-?I9B8p8*NWTakZibogOf>Ka?9%{e;bua|B5c zic_2)y&p%TB}lP?u|n=a_EJE`+CDIvz5^G~prd^Bn3F|$shh=u9PV84qfa!brm%Rb?>jL+Ga<{kcTIEa@loaIdzTOqcxvLlE(E^ThTvp(5$qkvQkcX^i!`&vQsg{>VyHp^u_A=T$WlL|KVxbY1jvP0S~avX5WPz0gwp8xR{% zs`TtuRZZW~G@79(&BnER&do)5Ua}t`Yn2zjE~*w(YyE3DMkBv$d*MP0pq%4Br{AyC ze=Iu<1iuc1`hh@})Ya8dS`)%GZevjcfh(RnKLk|dZ&_oUmk?Z3NQyt(oX+?L^$~~W zP{~mT&G(gX&Sp%Kvh3n2%upOHAl4JIP)BY`Pi)MSggaSer)@aCy+sKp(1YpES8ufg z=9A?J7^Z;doq}Jt)_E_*%2j_Y_|Gn?OLte$Hl~Q3<@2@NA~$o~#XoG9S{E}4<1|hH z66>v%Savg`YT1n}rc~b3E3X#n#9YV9d%D+dpRMt{L8m!l@e2Q5e}2|Rsc;sTQ0HPD zJ4tTufs(SU$OY@qy^r$+VNL_rOm&$q zY~fh>!Z7Ht33Hcs?^tYX|1rzz(wlQy4=t65uHe|^nq7eFQ`h2aDs!$d*bn`%9Z-@g@3-x3oCK>?@sl3*MZXdx*C-(r}EMDExov_l&%oX9K#V!S{%X5_m!&_w{S)LLd*JRGpL~*fp zGJkq&O=k;za5m1!Fd!7$F8~?Vt)j5=zv@4^2Zm+$SFc~|-_7#q$9^(3vj=4A&ct@( zS@$>ZB+%HU7jIgbJbhI~_^!MOa!{(LxCF@l+u;)YPg;edX6ZOoX8t(jgs-o;(mF=aF@NTv7)Tou` zNf5?h?Q|V-B4$WbcJQL2qsiIZfSU`qF9o1axzoC*o~j%yyxJy_%n`ZQ+)%51|LEI~ zrkrT|d$$6YuEMG@tmQy4coYhVsp;XILm2?-BH&yI1qAvu4=FyYf)^$~P1f zzf&UUHSwJ-1e;lWd*=NKgue{{1O(OqM3R0Nm95J;f9U|9z!HqM`*xHqE_3R_@dSi4 zgVrhr(XEz$qnmlqUd7lIecI5=+0WY{@K@|%oPff~wvxL3Hx9<=-16}U=aFGc1d`Gk z_x$m&hO-|Hn@9WGQkFLbf}c70S2fR0-A4DvE}s@!HJjZkG4veORs`Ul{ zFOFUGuojcUNt~oDE#USSBzX2o)!L0FkGk1NaR2JPkX=x$ZtboqQ{HU_W-VV#%?Ykg z7wDX8|G=(&2*CjR`yxgDRdx&4UFWhi5`(;Jx-75tK5Cw#Jk5qv#245RA}3oIV$ zJtT4BL95lT_o~+(5{zD4+B;%L#tt=Jp~|1-eL+7O&7)PfEE+ll@wX->=t z{Tw-dYiepv;F#fjg+tO~3P!PtK4M}@6!EUo{ql_)PgbWCCwC!~JSn^d@G#n-Jv1I2 ztYYl!KyyN}VS%J~E;KQb0=ea3Sn+1!uJE~yjDceiIXt3(<%ESK;7qOVVSP>OIrbVk zf|b$gWtOkW0I%-*BSl*RK9lefnFW^Md7x%O94W{ltP+ek*yyRcyLkg1kKlvR;K}P_2@N#RU!m-T>lg7&^#xp7-?3N{XG(n z04fA)iC{J1j|o5{R)n}ir`dA0Y4^j9PgXw@(jEo;ROe8;diB(u3D5X1P7~9AD6@duo7U5wb!3DMli)OP?_-DU+(Vkn6G025DjvlcLAa@OpwV2B#vcm_~tM?NY>q@>U{bo`%^%`yw9ai-fYD#>DF&|Wrvje6v>l;~)oRWL;O=}L;SeM>n<)K|yzsV-q}si?U%L{Qs&KcYO7c~9I; zRU;@0XUL*eLn)uRZDZs2N#|_WmNJ_;cJ6k`HJ9(B-71)q+t)l6KS7pac(NKextA;0Q#gr(DyyxnfZ_Z+ zhrn#$uU&SLwy2@&=OqPvgX)w7g`E}eRxU2m8^(8UKMZjGHUI$_BJW-~v1@CQR^1iV zQ6{rm-EY`#rsTx(QE;UG=9)L_n0QA|#J2HHKeJdD?pWbYfnDM5X`?!DzF&drotTb#6t4&8i07WDKL>$1y znZ0f1voLTU)dG$g3w;v8cAzDO4{oAjwNNb0q%B-XI#0F9R$?}m1_!C&;GUiN5qyXX zPP7su(PVyG(*W=O5Ts%a1Z}-s|CR;<&Me2_G>6A1B(5W{;~9_ZL1sUz?1%O%9v80HdV<(q@i9XTbzYfWuQ_r4ebhQ*jnY4{(qdlk zmg?BWr5@>;-@l*!70kYnWa28T_dO&|N5q}HjVh0}b#ZOlk;Gn>S;CmbyIRz+3!l>= zq}T4`9Ov^3<9?}NS9Q_(SGZXFZD6C>+i?xdYJMr&-g(WGl}FDAY8O{}TNVx;T?_#l z;WKU-9`wnqHoeZ^q|LTdm9^Ltz+TpqMKaS)c48|XGEIMyFIX|+RkD%XhzrvwkUzY6 zKH9|ML_MlP*^>$o2dBvIj?Z|<&AVtsBnLDuw{_R9?_XewIR8GchsC=>NIJgCx8If9 zhz?e~Ys*iOglabTZPcft^{+_lrV6f|joc5kjNoq%=9aM#+7M6W9a=Y4b+pKSxXi3+ zWc5fjl^2j5t7E%+GB4sDU4;eMb2xL^$L&oAV@=cH9Q&L=F~S?G!LCiIf@Ps!zPxTx z2*DylnZv;D|Eo%O^voP%AvK4#Q3S$HqEuQtzc1gx)VTM3)nT;U8WoZzU;t$t>|6HB zgO>~-1Mx_xkr5qaI-yYg*~)PQBouZ4Hc7@sj%> zm=K^`zf|HqH>=PBk3Gzymr@zosoiF7&p~>c)L2Au%|H;bP zOZFS@#6k=2_Xk}h^}9-VU7bHFt7Ri6mfJ(ekPf09owU*+IhY@PCY}%f+H530TW8+h zUCj>pB=UQy3+sU#jjQ3F6yOFIBm-l8w^v>9vV{c`W+Nz@4#H6}*tLEc{Rn#<%~SJV ztbDxqd00DJ5Zd235F~5i;06G9)vd{M2-hAN)KGAoi--4BUtZgN3>NaDtF902avK@Z z*{@DC0J0KtXKR1v$9Vu2h#Pi;$BbDOxj8M(%t%lOF|%!R<}EZR&{1ebVx9^=>}_9F zZ0;KW4z~shfGq~Kw*X>jkv_W)Gj|EJc7oYHyF)$H6)+=X-S(5mA;}aT2-p(V`$5Qq zl#E#$o=az<05XVbo|>Af#po0nr!~rg1@G$Q-_IojFyDq;n~Q(tRG|h~ZD)$>{8N<_ zi00V)(kbTKH#j(0;)yv7;yhH&-u=c7T|k!?LMMa|NcIp$W%HQbi7Gx=-Tfa< zvQA4M-?_z6C%ch(J4zNgA8_|C^c-!dMV!~@)S|vGx_u&dzcg{ir;vzrPTwn!F0`wg zq4*xB#WNEA=NUiyL>VLpw=%MDevoV__JyX_=tr+{v9w|1Rsw{TF zp0!h8>`SVew#7aXD1Uh0Ff?#nEBHtvo`L>Z6d{p0IoWRlXNwE1F7qNk(zZ|{RfOwn@_9qrT+B}@iZ^fU z1DAJzcvc573atRmOl|zxqK(sf_sW zW|R2WavD2@CiCPyx=c~)tPe=_8Qu-QCKVmpDq~IaPRY87QM8UburxIVQFPRs(N*L@ ztU~!f4uF1?c7LSRBKbqm2s?n)7CCW1c3cA;1v1n1cUj{lk>>94*;^fO212_^(!m4) z@L0%C0moRJSRJVmT^^i-Am_az}AnVq_QI4Xxrn@F>GLC5TjHRr(ZVzbJlc!jXSB{b!^Raq-mb`R|&t z47XOIvuh;1xDzh>-z??ce>_m*2Irk_s$J$atI$eT#65dWN&Ydc`p^{j#fYWk-`w=# z=Lf@A_+%ZDCTw}ngj?g2OTWBGZ+`QnOw5$c;oG|kY$@}P<#4fvQjx*ElL67e8}f;? zO$JMKaIF{_v-JwKXiQH6ZTwMGOkrA7U{~kce!MSj6z4U6kuyke+zV+Yg93r-uh+>s z3BhS~($nMVlvXDp(BXX}(ZSnYXA#BOsi_JI%<`u6^AUa0wL4U`6B@T86DeLzw_}>x zQr>)%l#nnS!4C!$sIS{mkX4P#@GFj4KlWD62wwfbqYiK72rbgrS0a^a_Qc_cEJ6%> zZHlAey07p~oR+7y+qURB=`>>ysY=SAYe@fMs^7V=7MaibU9q>O&g^rPf~Fx}5(Z4r zah8-`*n5wE89}QVYWG-B<#hu~VY1?iDLv!_wctLS9<+wTaw?0_$sb&Az11L5KwH9u zfu5w>ktVZvsD2lX?eA@T6m+`RQ3{c4qG<&#8AOyb+ zPW|1t9>xFkg5|Gojv_5=(ID8z{oHUzeU# zeBxzw*^t_%7Sl=Ix>>8 z4)1xXLg^_;x_@=uEgih(}W}9@`w~~qXnNr z7^9xbcfDB4`T_1_LwQ7U2KAF~;tg*9JH+4kE4?vb4%4Wqm9yAgwuh=$N>F4O%DU;v z*L65`cI8HzfIZ1qDfF5lj)eiNcH%oTE4GI-j9>gZ*`|oZY(89*z8sW<^IyB6bbXVB z4s(%_sZK^v?{jWsXj-_r=l4R{6}#V z$xsGkvugcIA4LzrL|sak>)9?JzL?jopq2R11%(tH@YsSCY+z%4v+=b^uZ+(X)sCo- zv0Ui39V^k^+e(ZDF0cjy<0Tm%8&n5V!H?Hng+1_( z(Kw7yj?=JMonoN{Hwl99p{ttomhrzoKeHV%zCPUc+swqU1=r8&4>I#(@{y`9~ z;bgh)}dejje4l0ibifzdf$xB<+J{AS06Sq1s0FJF8~bWv`f`n9|?;y;3l%36FfaKy!0!tK?F%Lu#4`YlnG2d~EEn zjJ$#;x5R0i%T=}m?fEYjQk}ppfvZy(lhaq)G(3H+jdsoqc-t){^hUc5*oIw(*Co|m0Q72GyXQ$k9`ihrI!!$?nR zn^zYfm$fo5KrpmmNjOfg8AGrFGo8rSI2QPFj2TtGe7>MiM&;<2kar@zpl2Y(*|?z) zM$|N3@~**Ez`H~iiHUu~?x=jL6_a;FM+kq%I9~j3#+YNt) z6-gmon(W|1zn#V;|CP5SfP@wgnAC>Tp55;UH2~RFhh;R3A_Q^*XdvPMau5{ZsbXhU z31UUkp4J{z1k8o4KYr8iLF}x!dov1_Xwl4r+1P{)pTT>yvq~!33F) z!q?H&BADYo6%htkgOBzkWn?0d4i&Tww#B6-fpK?C&duso+F84JBvFJJ(F3PI(rlh? zi$?SryV;HeL?xQ`V@Il+S+l0U^nl>vI2huX4qWx;ki#Jk`O(I$Ge}DdxrsZ9iQBvX zl-@dxvzzy3hW@cvXwmC27=jX3ilN0@8D`dD}U|_Jn4jFy1ax~l?XVls>89w$# z;Ypxb4f2ol3G%d`$Nioo2~`>pw)E*<=vt+@x`^Q$2C6IgZs;^C-TeC*#60?E6Q99# zfo1(>#?b7lD4*61U8K*nb;+oih!-`v-F3+ee!am1KCDl9$%5}`hQ(Ly1nA=u79hbf zmYYeMT63t&FVey=U6PmOVo9A^+;8WIP;J&^?w`8hts|aMHri@k<4ddT=f8in^jc9& zbb2VGZj3A5@;YR`x%NvUvC#|t*vE$W#v|?d$E(Cl=N^YD6;990>s6Mx7#S(x8}Omk zfw4|QvfV^BxxxR7)m2{h*ZuI!xZ(4JOfCc!N^d#LCSLo6YG0hcP<%GL0K8#emp8^D zpHN9juOySR;^f8xg&H3M1BBZ^tyM=g{h5Kb{B#zm#bP=sCQyB@JVTZA{!pU!6o)XG zcJ>RVRCqqvmB&j5nUYbkQL1Ssd{6KW#C*jn-#-yUv65c`;5rZ1Xti=$^HcaY z&je`qI2CsnmyFLC<7XoQC!Hu)y=s7KUQn~y zyq;0Rh_1ruw-RN%B)kWgh8!*_lj0-OENwW*;X(Rp#APh`RG{~^m5y~hNptNi?Z#U$ zWhStp5Sb1NDHN4Y4Sc?u;-D8e4pL|<58HttKTSGKyLdohLs9?wOnj9~QVWdzm;8U{ z7zE__1{^YJaADdc#Fz>s?p%$z#sF&sOGY6ZAMoBU33X&Pu`y!`YG%KTTE}C54P>nz z&*cBci{{@Qb9-YC#mWxcG!WNViJk2TTWtVoES!Wg|M~NqBe;PqdFiF~OGShJv@m2V zq-g%Po>^y3z*`)3wv+uaMRD_|VyfCaq4zY40i7ls-M}e6PA3O@$8B0=?j3&j6=So} z-%pW+r8ohS`P(_&gfi9@>pEG}_x-e|Cm3kjkk^bCqmjeKa! zly^UI2;gg(#qF~N8=E8ZLi^B&JqgG=GA)&e5Ca;r9_@S`8=cRfD z8<%6yi0BK*Uvps--|t<;4j(mAgM#saTO=d6<2Ne@V!xQc9=!&%9l6>Sr;%5M)1Un1 zZZyS|_rIx>Y9LPV*5{)q+zRBlB6ikgnnPucnqU2qD6xrpByW<4;pAHXCMv`%_)tMC zc)*EV%0@~XnbT8P)dvPv!Tvcc2>onUW{fAhR9jAx@SJahU9H$agvI*apfR#Ha?@mc zM1vdHRI~0aCTq9094(6d|BzpI-5z;6QK5M~zQ$#4D(hi@qq%jB7|+Ut3=<|(9HHuCJy_3 z7xe4f=FNJj`o9ahaOU*xMS&=APdYylXV%EFu(6)0s>#lGFpPZ4))Z4`iG>Un6U!3|-^ixQqZ?GAi(@2p1_YeWu8pUlZ zQM%czHp7dA@+ZG;p~urzc^}h&!a%IXfTBhvwe*-nAVBOTq8Ku5MRqR7Ls84&h-Hq7 z|22F#|53sWm@hXiHP8Fl;(sWlpmgMl{}r0$dA&Hwkdm4|@D*jv^jeF$`Ir|q#Ly*Q zv>0s5o9s`b?2ayzAZ~lHu1DR!{^YQp zua?An`B`wwkd$jS26e8a87sAZCV_*{E)TuDyw_M*5Alqgqzr!=-4U%Jo-{pX#hu$+ zYdgbPi}31&U)Vnkbd%P4bSq$Y>dK_U5!y&>YAJt-;O;SYA<@2H6TGrc3@h* zTI1RRw$&CUb!4Ep`Qp~}TU>UW;+Os($Uu(FudymAqkrk_1UNhfSZKa6=}`W5xq?gFjrR^l05S9`yZ^RodeWHkXPnUY($Wrc!yc!hKDBPj zBg^zNx5%+D@?8GnktX|(DCJ%Cgo~IsB(yiH4v#UyMnJ8rb;Ff1w%l%&cF$u|+3eyT z7M=^l9A6_IcV_fO<`^E0RC&y#belv3Y+OW#)|F7d@D@h)ru2tnKYthk+C8g__FhZ4 zVW-8#g<6VV_X#{BW57+xudmeq>#YdQ=85{lzEicow)Eybzc@1FOSHx%Ew|IJekBxr zM(-~dk&HE0W(X@MJ!nuqFJnB=Q^P9Qry-RBC$>|RXQHE&1vIX#GNhfa zo%y@~%V=Uh_YAU?$dMRVm9p0!J%T=9M^^&meI-x#fZ5+{~K~-)gV6R8y9V04MWgCYPPSNSR zVf4>B{`a?{y_vJrX_5T8G+>{f)QfAFx}~5|;_dqIrX`b{LtblBbC-kButc7MP<6D_ zTKY-Oq3ddTC3JS8h7s3)1S=%H575F3j+`kZd?VuXC_EFgS{W13{J|?T%Ye92Yclral(+tzApbRE4WE52Fe1u3+YZw zQPjaoqp+`V_aSK7M3?wt(So4z{1 z#WFw1tP`4z;M1>)L6_7iexuAlG=4d?LKV@-{NS_Zfnkk!>anOV2vZkV7cFD#3GJyP#p z=QNR?-cA;=G^_rJ)+;P$d=IokIFJ&2GnUoP#z2^SCGW~+(f}QjKocfz%^^D0e1&+E zMl-ztq-j=_{Mm>76>vDgR3v;w$Kej)e25nYiNTnPuJse0?37$kO{%jx)Dxhv1J=oJ zr!06coqW>vGkECN40-vgk&n9~h-;-lG5PDrPshLG@j#_5eIkSG*=xDwkxw9Q*4q|Q z>woZfF}o91?w0`~+{3k6%P&(Q8cv#&0s|q$^}HU-#ZtE^m`rWIZ`|0_0Uiom9Ug~X zFSS2Fl0k%H2oZ_z2P3@mETq+@>c5y*JQx7qeNmwWn1n98YlcC*@a8o+H0t=a%GHd= zk?ySJyiF~CcwU?@b&V-jCM@phZZ?HxJcoOhbzkkxZClVH)Ft8@H!=0|)kUh_Ff^7v z1>2*TW~d#`k-dY#gOD|~;Tk8SUVHN155v`@ve>&6#4|%kSgBppCp*vb(Gr@4 zEKR^uZ@eKLN9OT-Fw4S`H&bV4UpOl;vTB|u=l#jcCN`Xd)#8LD56_Z^aXn!~4`ArS zbBp@}(TO*SQIW>}I5M|O5qJ5ltg|g-uGu9q5Y!5+gGQx0PIshjY01+}apS8$=J349 z)5j5cB~E|Mfz8;xhE53adq;bd8T!dCy{G*`q`sRftt6_=1^2E?l)mx8L8V07AUQPO zJ$fGRkP6Y!`c(NCYMS_IFW992pu!^Jg?J+D{Ij2r($;)Md%sj zjH-3jsn;Kdta56Hia-(~=gi(&`1jQqHZJE_;O4$*-85Tp*=jO#3CCG|_IlFQD%-@c zrzXx(cXX+;*y_|Wh?so4l$sHpW1w*HCRxQ&R~-=ytDSDFJXZ1aU-AL7@X~KD+uPeK zC3>8fY;_2cH-ao^|HYVS-qh*WeRGHaQx60*2i|S1NK{o-{o_J+kF_2&0U=%C{Jcq^ zD4BJmFU|6+_dObP38w_v?jPB=ode@|iI$;JpV~?Q#>gEqg#N6k(O{Bme&2$&_kH%) znS{6rEjX+i(OAw=#D!+^Xv*hhfr2&9W6F4K%i&U$S8>&eE2^0%URuHM*RVcxN!>W~ zU&F_;Bqt(Q3sF3n9X9X3J%=$#XB%lmVJL94iQYxwFzFib(vX*wW|AZ0E}tH$*dLQ* z3L^jXWOhDUIT^?2I!#0VMN*BXpnr*%^04Y!K}bi-|cYNM?JjT=GVnV z-&N3(?|=wgm|lO!@VWY8MyZE7$f)BUG4`&ocB*i6K?R$JypuS#n2=DY>VqgWyu#5J z4)`_79V^W(1B@=pQnR*xf9noqd)S8t-1(4Kb_VzaRl zl=GqTsU{rP9C8d~szkLHbya@VSDQ-&9<$wE?dUk({TNHlx2=0KWf+jMUWe52MOEG> z+&By?MI_Qc7+tGYbZg4ZpYSpE74B6etrM6IZ>GX^{HgF7)WO`bQLVG7MTP$~#AEh& zMkZAHy>`E-#;GKxrFAbZYU{=oF1#g!b25&!hc(zn%L zv~fQY#Tp4eg^F)q0L^=R)|@pMhUu1`V8`!jdA#J1>IGxK?*a(26Ea{PbiY?U9o&*{ zI-x8N(%e@?Q(rH)NC(B$@1-cmHRkvE@u zlJG*1pUuMalD9JPCdZ8!2|5&_BLAVlF7x;9;{j_-H=E#!v%*cQW~{-+?p^!KOBemiy%LDuyevVKohn1rVvcgF zOJy^2IW=)&m8rw#xCMjp>R>>3NfaH8+ywas7)vH5L0F=O$ZS?gOiBy%E(*NJgT(*3 zI?fRq6;UC%j+uq9|qnTPM3db>>2Xj|!Q^QqKm+2{)G`$*FH{bgx1hQkPfQH=jt zEK6TyG4ri?$#EOs46ZW-j7|Yz-se~roa*TVF|K`dMgPhv16qx`N1X@5ni{p=2Ir&{ zZ$u>LGXrC-hR|QdskkQ~rd%TVu}Ff5-)~Sm&?b10z1J3h&k!V;oQK_2&VM$EKB_Yl zjA+!4P!o}?(`Fsrg(`3Dv03ok-A{-AL~&)i560fdoBT;t?jLgcB^XRq=<`xZXq8`S z&0Y6qUNtw0;Th2_0O9G6(nxzr^h|bRHq(({3KF)H{w`jQvcj|7M$wn04Duxy(rRlG znZkxk&qfg}RLz{rd-@Z`kxBP=4Qjmbb*KGgmUqyX5BNoChz@9=Jv#D`x$i%zv~k||{?bY* z{M#er84AHYTYa}){x_xuSAE2+r&zCW=)`{AXS*M#0t(b>MhgxA{~Z&`u>sv%pNg%~ z4*=N%W0cX;*OLeZtGA2j5iGhI<(-M|*IyX~tTz5I^s_Np|iz#VSkX8S{JcV`H}H0k>GAtx~JY6LW3b_3<^H z9k26gK#pNF#yK<&`ehiwZ{@rLVnq|bM_#kFI%{n*MFYhoZwuaK{qX_Ez*PTnD{|F_s0@=5AV=>7Ea8jntF*lgYPF*`0;lRu$ww(te@%=!HCQzP6p zT5wWqd5vM&L+!PaLG>oPaO$U-$V*g7@@KhE-ZSK;3e{d#SXP;6g5?8PS=lxwY9n{7 zRgQt9As03i3&Dl&H5bBH3#H!6f{bUpbSxI?Jzy<+sI}Knt7wM~vDp;#=O{T0PHcuh zSr7^xcYF?>CA6cyvB^)uRHc0%6I7u2rjk~(X5*|SjlnjQ{?Cs%i>Mg=}H&aAVEI zNzY%#jEnph#qg(JPgP)|WQ0Yyk{^X%%YR$`SJ|N?Hk(8en{}%d znXRv}*-f(AUBXqj)8>ORhaW#TW>4GS;xF++_jf^hG=^2nL_jwA+!9iXZh5ie9OEQY z)-(EcTI2G!O+UQT=iVmD`FQREf232w_!kiw;c)z2w9YWb?xunCHt_f)8 z{fIq{0sYg%hI>#p{yX>%Kc^6n$8G$7jws9w9-})AU+gc+Pb|t*-^o@?k`$Hu_Anpk@?C64xT>QkPhf zW^$)`+P&AfDpd6w6Btwtq+B4m(belu{x=dqlk*>nQso^x1Yi4Z+)i&)?7&)y`fRl) zW#AW>Y_cFLVQJT-0g=|YK_HXD1V7QI$CPnSv}U@QG3=}H893x3QJ=6H!)t|Sa7_8e z-+U6npeyWmA`@8SV}JYF2d_yu1*4v0fFXB~=;J6%uHkQ`nC+?wo6Y2A(1uX*>-~oD^c)>Y?r^jX2nxN1X`@I9D#+E@39o#OM8WPG(sRTA#9di zD9XFyky%6J=(>UgJD1;^>My&R7_`R_MT|k((U_)DFPYQBvffx-OUdDU=5ezn=xjW7 ze@~vVf9c*{NY8<>$+2!EJpai?(4jC33&Um0nSnnESp9W2Czd5{1 zAQ`9-#iG>SEiJ$%k_-&CWs(`uyU!`S85 zN35EWOf5dV_5+sA=!E>k+7iKhW+RdhQHG1}2eyMrsZifj{A}(Znzsja7xrja4>d-M z1s8EqdtoKY%lRu3o=SCgjwK%^J^_yW1l`OEps)Vch2HB-I$d2rv0j5{F^3sx%!eS{ z%8Pk#(&knaKlb`OCfArM&w;!Dp^+%SWJCw(#?#iqhFfq$UP7PYE1Zgg06)9Q*nMzT zw|GMU-VBn@p;nc)-H!jq+B_D5;4=_OCKDw45TS%i8f>5u;IBxa5k!4AlA-p^$Gk&@ zSfy&HIL*w#`BdZjJ~y)Oh!120vITmC_Yy6SOar|ulxIx3g+T-P^Zw?do%OyJ&&fRfuD(-)+0ypbjGf-cO%EAf#1|!&Wq>#?ysJc1Qptdcwl}FN-=Dgiatk|^ z1t%{*kK5;vDcJ>WkCN)9ylscUn=4Uyc}y|r;(}(l8AceG67Ndfxbm>z;Nr=CHyV8t zRlL%glyn$JdIYhqIg^~xY%SUd!74U=XJrR<(dx?9l-aOyj{|&$q5m6tzoMBO*($qq zqIE75Zm;9|UAZF1Yw-9`o=Bc+$IYfQR&Co&#}vfk&#?RYIi?Ti$y0(=HXm*Oiuwwj$4wcN?( z%$zMuMVKp3qA*Z>U+Cy$F}b4cC4i7*Sol97$p;XU7|b=RprE|)C^;yTjd{O!uX#!l zC5%x?^{ZkB=`*4?RDb3{U!xTFE%GAqx3=O^)IyG|^ zot8^n@7O6{F52LRB{OguSu4S9fdNDF?Fz+u?tjhJ|N9}bfKZ#$d8o+$l;X{O!zM^4 z>aW?}x5Oy8D2}!;!VPmFPFTJt$*Y#ub$i`^EQYMk=&R%-jy6((MRm4TiO!IxZK4Lz z2)f+7)g}vqUMs-!@S42D%^-yQQ&OPPE8qJg6uVM#u!sG$4;fn~B(Pq*o;*tvdpqES zW*YG`^ts2Mou%kCy+EGnZRjwqu_~znb5Je0^$4e%+ewf0R;Qe}F_RP%Q?Z;H^YjIc zSXGQEPG*@)5=Xq_$~$RU--hJ~0dEURIFWXH8vSB$iuZTNz_$#se@m=ncIja5R?BGG zE4i{bxWFX3|578`+nGe{ULKe`rI?Mg!?@PQdN&?)NzC6_G-P#}mRmP{pQt^1P49ET zxHo+otLg{!)@z!3SHAoC?h!EocwE8nhhMy(DC+*1Jj6Qwv~zvBximJSV%%A2_eI_+ z9mRS}{8qB%sl;HqGFPYZqh~s4McIw6lVY>ai5)s&Z@xN3SRBn ztV`{rS5(>#Xkk`Mu4lj?@i&_`Zul4Y$=e8^=tJBOB(cYYr0$xfbw1ut>KZ-0(>K|9 zp5>e+_?)4gXTSjY3Ynfw30 zkU^v5z!K+{gLvFOT=?k;X26M*RCs*xqVLs6g8jm!%kK+bkL|%$7sk^-v&X592VtxG=0ZL~tyXXnWXv++&SBPog&&s&M7g;9c zCeh>Oi?Wh!3$Do>%fe1$z=TuTiRzhzH&E6ewjvE^-5G6EF7F>-oW$NWiuj2^t(dTv zV$z6`Lf|}6@_{hCIPLU+%Xw>$<9Np=42sP-ZSAFc?kdrvfq2COV|XAyQ>FA!q4RKH zia_J*+jI4!;;BCgCwrq`LHg{#Vu5;}g2RAf)ocz?_7a>n$ ze4qWh@QCPOdr zVqisjT)7(MIC~8lU(fGwJ(=)cs@=81<#qxZd3TafaG(n-IKn&IbZX1*mfu-f62q?H zzET*GR!=fSW2zz1jUYx~YujVLAeW#vWV>s-E#nZZ5mchwES{(Nh_~ndi{zU0A6IbVXDb0*CV{T5(jev2$US5pMAFN<1WwjHy-Yu?O;@-cg|8fA(B)}+EV-lC9LFVGLW5&uv2}# zP{|?7w)IN7qdF9ajiu3R_t=%Bi7}DepiVkFM+jv0#OUs_{81aFUUV>xoR)WmDq(~l zoa8*u6B^50Gw!T_!Zbl*XWKxRaHv(&s46~eL&=!Qe^+!BW0%F04MhkqGfCQ72#*9= zoj{$yXIG6$+L01kHCz?~ahiF-TpEs$))=kbh&hk@-)_TwFYeo3N7}Tsrk3L7%cS~Ta_qU?+I()! z4|*d7y(g^*O-xF+oHA?w>=#kF+Te39Su;ZO5)>`8tiX;3pKuUlG%1rnlWycVGcJ4G zU#KHuA2f4nhVd|P8QZB5ay*JKJqw+BEyb~)HQH3VP~SRNB@FYMJ@k>|Bk4wCn(_rN{T2$?=a7;&tR>v36-m^X} zD~niUAv3Jtctk|T=^6pX#>BaJslU4P-Zf1u?;m6&QFW)691+4A@)n@j*lK+%bLp*9 z1P)T&n_dSG7f4}$5HYAEMeyK$D6I%yDiziI8r0eL$f&Wje()JIo?)1&-H>=#D^xw9 zr^YX(X3xr+>dW!|IzNPfRXCR4Kelj6vjGtXD+BMzbMT(9pd(U2f@LaEdCsY$4h13AKuPV*SSU{&&?EQ?jG7Cm<|8DrbCBj~(t(HoEB(lS#SvF(g5 zaTWfhe)l7tJ;Lc%N=$b61Lmi2=A5mmnze`W4E1<34haHJEJ_%2pMq8}4I_rXXDEzt zc?z{k zM_t3$l?*M#?Bjh@qqch;ldtQXZ&Kru5sjcxBF_dIC2GMMgP8e9gC68H`Rn_LdobDu zW$dltW)M)o&^J6}vYj#KR||CnV!!177H>Z|l;f!n$=27B2?u+CqAL_DLkIGEt>g8xDp0 z-Wb?V91(_)Nqfkm?O794eGk4;(q!$3!o@zwPe6*b5`G_kS1n_u~o8sY(vu7aU;k?P#4h4|`1X z(nue{(OCeYI*rob#s&_yC|DE&HYi1a3vg>xGda&(Fy)ne$C-B_;XHE$4?vCpMptgm zfn8`~hDmasy-wW&SUnEIquhsJX`?oNgLPeXKw63LYP1NVs!r*~3cuCbfd8^YV5mzx zujV=Vv*YyFK*>PlU5p;=Yj@8GzZ798iH~ZAo)1NHBNXH62j|yO9TBq{(A9n7Tk`c(tW%^8;tAR zL2>H0K1vh#wLdovx~2dw00x7BAAeM<>&$x+;atCW)QJ0Os> zY!)aXsF#8t32ipbbV0C^%#g1Q8?qW5$5-`$D2Djugo~1Q`|9KqcU@*u<5P3=0DX6EUh>?2oiwIkQBDjIB~y z^bRH0SZ%_;tx!NynuznsXaD9z(^rXaKz-_U>~2tJ#fYB$aQlz*=g1`HoVZD)21(Ep zjdPqra?chtQ(@;WkU6I@s92~mf7B zU3#7MJ=1;_EBc<1NcS5R+H5Vx&=-S6b!fwFI|_7n*q zWIL&Arm-zigCc~|eISs7BKUGUbA}IB|2dx5pGETRyO!9~fBvSsk>;81tti4@jvAiJ zW8^)C>cXWP^S(J-4yYW>3C?z5It-71doQ$2;u7DSEB!f~T+%I&ld{lIvf zzf*b~=}Ykw@E3ZjMkK=Vs5t$2FmuTz0PA@jY2lK%T0_qBytXh1V*%|=U(od6G2+X! zh++Z@E&K7G=jnGaztS@E2jz@iEl_@?6rcA7D#<6Qs$MQ>E*jm?Dhc=4dnSRg$zw}|0SpwZ} zn#ik~?6*Y}jT&-e)uF!O#M`XLNw)14$(yixn*|{+<^KemAebUXMYAOSo`kLnr#WzW zN<9mOC=@r#9EY{Fn%eWxYip`^w*Ab2vnZep#RT7}tL0GrEOU8|p!?}BLKr5=!FNW>Khd7Nl@rNm&)dUQ->W|f6-B+4jLcjkB z+{_ISc{8M=xHWP`^h1wSL*(E0z*6up@V^aXp%;-Rx@PPP~!+iw`cRODTMSAnr ztn@Bvfc&`BogT(&=jce9z@-ON3}|p#75OVb^Xd-9qXO6V$50y-ec)<#yV%MH3{FZ} zHY6^?>o{fQ+gz2|u~`7p!Ey8{;~R6dSOD-S@zW3>y+A9#*2g0%ikC~?dNEbDe)Mx7 zF+IKKa`{XGkeUdQmj>vR|J_Vm`58SxRQ)lJ4H#XcfQyL`NMi@f(s)8%`d&<&pZ7kA z0)r$K6%|*TR<1d9fp?JbcJgn#{p|=1HT5~*ubo_gJQ{h?07U1XHoL|8ij53Ct4Pp` z+n$5qR=t*R^9+bQQ|`DMHd_CtH`hB5o9lH;dL^HfG$^6!s|fXK$D535!S9A?SGbO%Zl%0PP&U;BpLqRt^N zY!hZmM&2T=U{(GJ{V--ZvWErwAEvH2E}`APX8pNv=q)R@Sfw|0?W6Mj2bT^5rNddtK5c*B1c31m#?GVBT=aQpdLogo*%zYcMb zKqSZkpuj-vnh!CNuol43`*Pm(IjHyQ2^b7z$ z4Cu9c{!(OCI|7l;y94Bb`k9~yC{(}pl#p6}Sv{?-x$7dt<9LZr?KjXH%6+O#z?(CnXEJk-h2OubW;V{6D2C$kFI|j?3IPJ- zUc^1ftF+Gt`J{ZsR;E(co+TIoiYzheghdU@7hJu{5H5b&O-uP=ZN-sygl$t(8=Gfe zl0MjXh7yD@_Wqhtn{GjI_sgyE;%%HS9(4?fVQ(>1eCZEHiaa(F6{7g9#9t)7nu{D; z@ePV`{CZ?-Syk*9BY(S7CC!BiP)L1!6TA5XFy(XI4H2;!}E>k z4I}zXYUOmX4@lGUOj>l!^ejM+gTUx?XD%>5-2)eCkwg+Hn4*jnU%m{4rBg{G$!-oe zSMFC^88>XF`zz6aM7KU$VdS=%WCoaG%id=|4F;rkf4Rm;>$3f?QAVKke)Jb@0=N&W zfI!PwJ&gp;p#U`9)laSsz_jcBa|{QAiPc+=C=`{H*5=GIx)pZ&fRJ4u-VH-uh~s5QMPa-l z@+M@=*?*WjYAp!VKDue5Vc7zDZlyNE+>UVCW@n|R6B4XM1ep&0_r{9afrv1xm1@bL zibJMq4gl|fjXL!>J>n3QcBF%d0msfKPuy5A5R?Il(cf>J=dt@X*%rMER0)$_qA&~y zN`(a(Xe8Sb=2f}<)elM$GswlNsMYNY9^)tEZ6#C8GNdu*KK(M*myuvuLjwYlcoXuQ zT@+A<8?Amd4*#bGNU9`B!{HGZ!14_boVSPch&p8YcYGInKPbgym;**w}#h8cr`s&jPwxunb185r1|8F>%r>nnIsq277Y-{d|RSl{_M)d8brRZI4ArI zGxPV<$vXeg>b%c#gLTQnT!8pkhlXrG0c-*!4w~_R1B@$H3TErNmnV~lvi+Ww=s}!Z zRQ5uVM5E8VEb{TDVY2aQTido_M#<8>tPG2G$8Mh3F>x8wG;*=vQ)-TBWc#JR>EN;S zIPduv|1#fe1d@Usj@*g>zypvZujKt*<9g z`yu(lND#&OD%O+tNc%BY%WqNuWV=DpvWkd`G6bZE^TTN0h>nhq=K3LUt2uy;gFGQB z^4vWKSH~l0kiC{OT_mJeqs>R$Wp5E@dzl4grB#&&eH%=YQoIt8oX!cmH8E@K0%0u20P(ZeBLP9XQm(xYM-W<@ z?2;&(1(3-(Np-RhRN_ZIXC^|`imzGc0is6V7vuc7VYd`aL49}(zq5&D9sprB+s|g6 z<$;;c*+8#xn+B!@G$f&cNa5#FDv0<+|L=%@`>vI}*kv9ndz6!b8KDXZGsP6qEe#D# zvfRNSGU8XzIIvu1+Lzm+mzEX&ydcY8-}XSfc2_^zPk^1HpjHI5nH zTD+chJll-&F1@?XZ5^Gnr=hSz;n^;6bqdtNR{vKX{zOG-y z^gujo5CD<>hOvJ=EeDS_s7!*xH&7`i*)ZEeChf=b91%wGO}K2bRn~L1B?Im-EbLra z1~?))aUf;VMQTpdLO%d8ED8ifq2P=WXHz8c zNc}v8V;`_edE4TF}Nh34bS!2f4eOcB&{_*W zkzj_v*P0dT)rM^!0uJPy4k;#SoT0XzM9gzrU2A3 z{9N*z^XOaZmw<}kT=vW=vZ8_qTt5a~A?_o4smIM<>@LL?ZX{ZKrvLhKG$SA}Px_EA zBX}sI6<bsqJcjgP)2d7<`|Zgj@d9itD;! z#giVgS_5DH#+>2tH6h_?|9hV#kG$4aOvvovD7bxYsEF3V{%9x|X}Fmtx$3?3!U2kV z&9|9C$&n6Qzo0G>UI-;`9qGRLj~}1%dpZ-y%i%n}qrHFu@19@aW29k3*Pa)Fti>cFH!&&cFM#mF z2OL^4H(~>7X>7o0JnUnR&eSb~XDuRKb&Cx!YC5`Z0LD)CC7f|S6m2^ebvs*fMS+03 z1p=o{ABl+1~l<&$mIrcA%uEiNK>xNL14UT4sIq8qGR76hHT=3AcpAn|y zT8MBlSOi2HJM1nQgpZFUaXbbf7a9Vf2MFz@#Ivb$4JGI*k4@RU?x(daveeg;{{WI2 z^AcPDU0ndWrcnChgy~D?!W2&CGhimmKC5IUgxSb8OjAZy z50;_9O=mlW-$p*h_z*{i+M9|EvZ(%9sGim@*T>7ZN73&pE&-4-kW2e1fo@;ctj`1F z!&E)}M#VIOi;`g@Rkge+03?kM#(WrZ{|-}lNWTHv`SO|#d*G;crWY|3ncXZmEbkYq zuyYODfDEU}6U0#aUOJc#v>U)=-31Vn4(A7J6cj2iC&-cf6rVF!Un*aKSdR3*JTmdRGiunBYcp{ zfw1=*au0$?iAhNn`R2{mJ8ZtWghcA48zc>$XJIA{Mh`1m`<7|}~k=IJE zKN=Q0Up^@^*naY_@D=k&QF8q3S}el8N=N0IfRx#Fgpt~UDao0~!3_d4+r8_{z$P|O z398q~*c$ycIfajdhWrQ9swBJYL}L3k>txQEPQQoF3Y! zGmi;+e z?BsnTX*JaDbR_m0bb%0ouD_3BFBHE&H~Y@%%F}jrYUQ?bb`PZ*lbu+fZk8Vc0XhRd zVBH)c+DLz}r+o;Y^MbQB|M5LF*cc{IScdofWX(>(M%3b$Ye zSby2#GN_wy!c)~-+ijj0Mm#REs{3zLedXTmsO z;ezz7tvPPb08+TlY{sCImDReuup9@pA4!bPYc;VSbT4+JM9|~M3{%|dLmGG{lA@60 z6!|;E0%_s7alw1q&C`mreYE#7%U`?WFdnTY{-G0?3M`tXtJMP!S&1XD3lCn?sQP1u zxsPxj6DyX(Jl6=8^w$gka zB`qX*!tD@F=wf?N;Q)OhV^AFZ(9=h-KRe_hFJ{*Mb+4kP5DJC$q>-bfI@>Di&++Rv z*VR{i(W1RBT0qw~Dn;T+VAkV6(CQ#rJjv2|bTJ$FTH)9i=*#Q*WawfntVYzU_m~dY)ETL$Ojjy zp8j*=a(T(yvkFzdhnt|n6t&Te)`*j2RdU>7T(x3;Iy@xi-cn|e9y!#I*)1W6w1LF! zTWC?1oFL8qIaO~PC7kybg*8Ck>=qn!P94&}B~8YG8Ee5~-<5iRS}2vVB4E1@g}e8` z?x(C~=anD&V?K8omV6ZQSH>yi7ct<>;HN#naRGeZY(EKP9z8Q<&r4Q{^C{E+{vYd@ zP+MK~nue`>ffuLH-KStwTdSz`6TlQg#VUxKSR^w1J87_9n#X9B}^slh|^ogSWSSG3Ou(CCBM<(%tJ8; z=~ME3KTM8oOhxQ1o@D>G!}Qk9=*r1#|DUWWfs^(PVcMT0%aX%+qUCP~zlg0z_WIz> z&x38-?9n0m*QW;9>Z_5r*Oax3RSmuBQ^L!Bc#!fS47>KOwS;KH>(ieUV`o@msf(U8 zDSH}TPmC@)@sm{`rQVr^-<6t=Ct(D`x!kQu-&*M8MtOkRRdlC8S)Ff}0yTRt3|j z_zkQrD4KAR2W}6#ogS zexT;TTD}e?9Oo~2iuIc9eomZwjnZ+gkI|lu=ldAJ*dl*ex}8_bZCM=q^**P?^)jYZ z4A#@jhKnW~*<=~;qD!%<&AS)3!~%L~kxA~FUYA%xN_kTOA!jbfE|d#+TF~nlN$;+8 zW5>!(o@7Bj)`!KH666%yKjN>Y|fig|`pJ63XTpT{c)H3iHh617e z3q9eek2YNjJ`rS4==HQ_g!SEFUkTy=k;Io?+XclKj!TN&VQwA`vPRrIQpJ4Xc08Rt z(2s64KclHQo7I0Qv*{U`{r(h-y@$M)-_tYC$QURY?tRo0%I^&LY1pZ8-FyoZ&$}#B zVPAo}(qg3^tDr9{=|}I`oFoz!?wYl|?b`89UcZlrw*QO{eti#uSsG%yAXBsH>azy> zZMbhG-GC?4yy>ktJ99O0k5u>jjQQF_9qN~WOJkqK zj7gsz^-h(!t9`M{p`LB`5Jj`)?rS*;djh_5=#ZfH#$;;v>V zQavNOIr?-J<7)v*UtVW*BmN#*>V(1jsd2?XHlUNw%n7*9fs0BeJ&ixapJt$oRkzr5 zC%*h(9%g44C*tcOEBD+&j`P?warJlm1r6;=hv*Y=`z6A96XQk?8MK?2Xrr?9_Jd!I zh}O1uFm4A+;3R^#jhq+AX#^MnQ)r`mLr@H1SdWYb8KG%@-ccP}ZYD)295Z+4##5YC ztd{!?8hKmOvSp&Z(&y7N+32#z$r zNS@UOh>+X}R8POpe#k{jjxJTu<30uaY?l&1U_xVRP8;d)=No_W1W7f!?#XrKD@9Zq zN&Fxf<2dvg0t|N_7q1SOav%Qe_X91Xo(h6&5qY``Q@o0Otra`469)u}kn)YJT`)4{ ziRk3Oz*hao-IBdF8KglPSh^e!&lUtDR6R!+6iO*mR8Fb`XF0Y>!mpLC^%QDFgZKe4TPi_5bCRsqOp zu*SjHOWqbuf=_3l5|?7<5ii?)08s+1knD$GqK_2uk7M_-M)hRn?i`QCKb|QjcYsnD zyuhHG4uyZ6viv%OaQ~Y6_khH(fB7$qEr&a77G;(@%@@pmu~~Q}FU1zzk%l9ZJt8WQCp< z`Pf~4fV&@v*^PNxHRhmBidRN}s>J@~EBUegUDEm924tnT>0o2g$r&>S>qJh#iT7&3 z)<8&qA}eGwxWr9%b4lb6G8^}Q{6T-8KAL2; z#sQaih@cJ;dfV02QLZS%>k?*gp;fYdfB5*jiA&&JsQS%J$U9dD;937n1Mg^@UMcz? zV^;A3Z``eG4>j$`b0}F>Ybzn7-t7k|rVxRl+ro(`7MV2ebF`g^;G}{AvACR^r!-dQ zx&)o1p9$j=YvO~KP89Ped9gqh4V2XY_hE7ctAP^P(PIqDHYxE{V56dgryh?-AG03; zXWNBb{D_l+ntVrPar2{coFz(wR4}-hW8l~F+gCtDxE5^7L$|zu{A}FM)^vyAlPHOQ z7m8!XQUsz3`Ok02pMOMam$a&S%7(E}yJnNoxmv>Wd@m7&n%mis*k~WUPr8s)8zZkP z$3*k}MtvC}hAbOnZV)jTFDPlHQ!pe%_O#OGt^+MIephQlotjyIY}5vW(!~A!-A;#L z>M!jE9Z6A3tg|{lxUF7SN5f$CU)~=#Y>C-5R!|+%eBX9@1d<6_(n^j;PZkYu&j5U( z`wg(GkU#s=gKkuOGT#pr^tk_3(3k#Z+}az5@FyC}j-$)7WA~D$W@oT5{@5H-taMS7 z{NEaRy2b38Z@Hh1xb3Ikly;?Ay|snR_E!QsU;ea__$z-utHS9vf+cA4O+<;QiyHy5MJMnJsOb z+e1?ISovI)VS2f*jvwFre0xMnw8+aMC>F4*(5_9S-%g6{&qB;AZ8*wNlk@iM&T0Mh zOomyne1ZUI3_r9ncZ zrKFohQBp!+No5Hs>3+`TzWqJ%zJH3~$K|@tbB>ug<~tKs2b-F5N$6G6tg3Oa1*LTF z?93I0h+WhR3h}^;&!G764Xh`F3=Z>NU4a@dj~<-q`k{X~m0!r?i!9s zwoni^&C|iUkHHJ^SA$82-k0yq|40*Jwl37ZvAmHZ8u=rtLU~My;|j{D;d5$=V;+UO z3-*e%-|xMGu56T?@Z<4LU*p`AAtrrgk+?D8S7stCl3;W=mbUk)Hb}|CO*J0BWmEG| zSYh(Y`RMMM0Y{R1GvNn%N3NCG`n~yC?-)K}2boYdPLy9LXP~LN@Z6D_3XaL#%OG|N zQ#c{qD!cj$i@D@7#W0=2i@SkWpWPI{7<^XJ>>!w@rNzBi(lF=uu8)N?jF#zV_<4Ra zuVK|n#1CuLC-&*GIOUQ@*K?WWozz)`2SUQ+YM33>NY&u%CbRo^%XFMKUtZ88@B`ZP1DSrJ~uGzZ#flJr*TY+sMU>VF0t`#JGB!eK|5Y zf$UL}EvSO?dN~h*vBjngbUDX=eOcG#{_E8r9{qF!V#%Q6niDtgR%qgNg^gmjP0E4= zG4Uw6N2E;zT>HQ{=frUDkSEmp&BF-R#^(2#_ETh%6B*hvk=4ipyAZT;krMseP?%wj z7suvmqiBSwV$uu-IPYAM5gXpRi;R z+rH_&aXT;i@cq-bNDAfr?Omh>=L4sS0=&*%1)Pxjx7YE@HcQ6IT~-=&7^suKG4<$7 z%DJ|ps(iGCa3;`k$tU{6ELOYYjJ1VCjvQ-6<(Ut;ba6b|$;8B-5wYaj*H+ zufA?j8zmwRVa|T7%h+5oSqk8iZXQ#$91|I`4L=bIw8{6BM0_Pn>O?b}I32S>Vl%u;22H~iGMyhDV9TF!} z0zSxHJ>P1P9x4byCOmQxrWVM8V81U<{EoZ|03vPT)FShql4BH))7Si8$T^_X)dRw5!U>hNh% zA&2#QTx)Zk?{y$+!i2TByQzo&bai9nADLIo*Sa4215G{|*3o)o0ViZY;b59r!Iia# z4s^S6Z8BR}3S3||HKJ?fnDkB|`wx8K!_NsSuXMPU3LHMPe8NYP4+(uh6#**%YXn1I zhYuRw^nt3caUys>5f|L8SbUkG<1FpIBrnFg$m(_@q7HLZ=QvYStPbZE*z_zgNoS#0 zP;r~Ih{@qqYx~HheUqKQ^E{_i#|M4A7lE_*Q>4G%EWMqV{LhpVtdhypaSsA{(DRc7 zc}=EY2FI>7XuGm<@&X5jB8ey7N(U62Y{(XsD6@#53Z6L^@i!3=S|W2J$6mN75*6sx ztUSF(`OgdB&nw7WB&K*hd`NID53Nk=K@l7{gP}>&n{MZgQ9_sN4^ivTuIEY69d(K* zjsz{&WDCKw$s~>p0&-J5)hw*Ks{1uo@fL&=~DGc#9hsUCMRwJ*D5XAL`f)~USE z5YZTmblA;xo}$LLLr0>*=-crw6jQaP@Sdi|vfAJc9*+EPD#R}Zh_H&dUEq7NQ6tux zag~^5Souda9PM3T-Qk87`21wt!FI)=4Kn=dQK`Y(ae4^HX`0mWj2&E_Ensuip>1#A zp6+aD{B5wiW_1!BW1GT9s6Ww$uVC>*;R7x_8K+Yq)v=2#!K`Md<611D%rGQ;uGcp( z3O4-ARblx?t@epnB0Ymcc}ShnWW<6=CD_6J>dTg5hLs=rZEBZ@ z>#vlx7MC;N2qQAj_g!>czH_n{H3-=WH@OqL4~75MgG)V=*<830W6*L_Gvh4@iza*a zUw69mFC$@o2@hrD0~bAEgam=~Ib!)^R{hzpbdzL5HUmtIbKd@i#uU)VH(BX?}0Oxk`?UC(j;Bk-9Czr9HmCM2WmC2yiKi&5HHp}3;Vp;i2}!F}q3G6Sk$GV0uZoc>V{>{}i+%h~sut%qKkg)1?x*GcvE#_DF$+p8wt6m`Q zCVgG`kUuc9=4Hov}Ab z63G@5VJ^O3&u5ywe_V^J7_!cF&ya!#k=Y!;|ID!Fs94L>VMst_4(+N?PV>q$*0W<>OOD*o#v2zRf=#e7jL%rTc91N=1gt znke(+x3Z*LV!L|2#p5sghgGA!)TGy7s8#c=Sx9Z>+`e0naKk@v`U_ z775AK13x#sv(wy75$|TLNIjOfKmQ#4!*Ezr{R?&4YpxI-s$1dr?jnc07S-kum35Tw z%RLo?dxRH&I_0>nGGga-N8-L%Ol9>+HU-~c?!|Ps6Et5-zd>F|CPMZx7NGjW@V?cm zSZ6K&XQ>)lPHKgs)HEPeMiPf+~SIgIh2CR*G;5jVm z46quO8q-=nANA>i7u!$9{BPOew}Go-&PJ-@9I8(IPLcRgYZldg7IT(duGSN3LUFA8 zOXojbZA_~;UcJKpYkS&qms)VXBG)D|CEzb9&&6Rw^^U#1#cpY7VdF2JMo$vxNZV4t zY;aOa`2%6-egY8+1{wfH)%XwY{;-2H+)v&*E}V@{Ak5$(R#8+SxPx~XQ5=~t;&MHR zsUr|%xhu!%tPS7i?jci7BMms5ImG2#m$qxX2m%-%Vq z*Q18%Ttm*6MjvOiZ;)IS2k9AzI9_bQ($IsxAaLe+GGSURj|=@F6jZo0ppLi00P z^FHMVi2`6zc&)t^C$k=tH<8U+vUdqy_CiQicB6-8#Dv|)&BTvn;@>Pw$XJ*|vujS% zhff3>1R)0HEp44YDkU|wP5wQY|3i+e;s?IN0pg;2uzQgg4PQL*adK6l?5I3)GaHPa z3^!HNDd_~E{yeQPBSV%J_|x(#`$b-?>5R{-_jJZbi^w}c z!LS;~G!~8oj!Zz9Iuu5(qK*y3T$UX_Sf^^eWr=7IIn{sSfj5>$xW^V9*1|Ht3-vU* z`&Og$+0?N?ibI~M&_|REekCOw+HwEG+ORk~8%{Sf^5rd66XHd*9Z7Rx=r2aY-$&+= zll*;cy*J<1w#D9YH~T`cem8I8IvqphW6`{AR#55LqIza5F`WJa@yH2Qh<0my=_#xt zhWJF>K{IijHC6FP;*prImX%qI>944ygpO7SGk4H7>ovzHp+CWHJ>x6cJMm;RoxJ3B ztGThL&|h+nHv#%5orZ|}Z}VI_gaw9Ld^Yc%-qStR;+kHrM=#^CQA z&FEJg-`P)Dd%m8z7#l=p@FjoLZZNVPgKc!)D7r#^Zy_(cz)rR@Y3oBog?R^+h$ z^IgLaAwV2#pcUMoc1%%JVBP=m?aLN_@FZdQROjE{HH8KUolQQ!%$5F1hYL=XPu-IKA_63POk z*%Y$eWF;&bJSoBZ$%nr$PN4EU#(e81fA%LP>ind_$0;)Qd{ovwPfsb0x}y4$HDPaG zKhuOrG4t}dlWL4Ex#uS;nzdC*5X-7TJ_EqvJE4bo0{0k-$eM?mTqIY_x^%NVK&8bL zE<^=qEmVI{eX?Acc}q!8=b3S#W=NZ>|4ykIJ9F&fG|jK^0bXz8Z?5Q>|DWo^BpqZ! zm(gtdcHtb)$6V)I|oWK!e@PLpMke~zUu}Y zaW(TnH>o;92QQSj|G~;tnZIFW%VFL7HUSCFA;^=(av6@Wjt4l?%gKXQgbH@oC|3r{ zSlKCP_&(cYd(FBA-OtcNlvq^|_X%!)O(@T)_yFk>O#6FQC$Ud@OmmPYRd|KS{YJ+^ zjqI}iq}Y0^epy&uZA(bbQ#{z%H(Sbv#qGgVY2rt7VG(s^-M9PLK|I3NBOaoVT3_>b zk?K@I95_?1?2$u+BLqQV9|+1ZVoZw&)#Edzb5NS=|Lun7S0V}?o5S^RY3VuZ<+ZvI zmjv_uU7hjqCD(aH!-=#pt(_t@c9rXRUioBwJs_6<$h%1iW^z=d;{JP>%-Q~@f>+82 z>_5-o4b{OxWIgTVVF@n|<|krtbCqp{yGMygCx;l_SgN?W)(w_UB*Xe9Rft&kaBDR_ z7Dam&SPvh4=VR&0+fq;N4AJ;n-4?RJ{@`H$9SO@^gM(g%R39cKU8rWKW}}yHZ^i*m zC_VsOQmT*1Juq%~5gUXh!gkz=u?)Ht9{fGbpGmHyeqcDb@(~g)hYqxgXn$!4*I*VX z1_=|W7wOtpxpA8kR0YJjK0=zlb(-RV$3rB zyM0P&i`K-PHl!W86a0o?t9U$T%RV!AKMzSCI|;3I=HQ5Kt?k!OR2@A|_r!F?FuK$K zrm|x|yFl@{Xa#qV-Y}V-Aj=ox(<~9KP{(K?`B}*zxxN$n;}%hN@ynajbNfw7r7wCo zyd@bn%uH~22lp_7OVJ!!;eqjHZM#aLA{|yZStQ9&6b$2MM z=D(-LpYz{l*osXl1;i)%8h48?gGAp~;zvTU>#L|D386&00U3Wk53P@@Q(!|k;O9Ie zEPGZ=X6eLYo0qs^NshfFZNJt7M=vPabI4(YBV0X=vu3%&;`-%@Sm}^=H+|9TtDPrk zXa6te4fGWozTZWj++lUIvg#Mfm}Ss=o{`}eLH*G9v;#{j4np$KhO2lIQsBc)3T=FnX1|i zbPSWxc5+NskO{d<)X>Y?5@Jrz(r*;b16muXSz&cJ|Fk`=z1@j%xyfh}m(}Py{fU}Z zS(?)22$ww?Z=J7OuS;X`)O}9$b*#mvw zuDolzqAJ2!#*DGhPDc$)uccethNbs9m|C8ceREB-^9`s2N}J?UWnj`dXre)Zq2BP( zyO;j4bc~FTrT)u`g5AINPk5A#eS+}f9pBsKtKOjcBNO>jRszw`Omx1z|0Hj96GTSa~$`t!E@>+V8VW8ZkY;J%*C zo-j}$_ZaaRY2L*ZLfQ>i#bCUwKc_|U|LT(=yBLdJ^wf|}5O?<;Cva66`4iRu$GZJh z@58;wxCcjb!63ww;%0>*$`B-b20QZiZ?4pnSC}Xkmls}D69n`SlS#Jp z8}yA?Qy~ivu5_fHO<&{~MyN{~$vb_Rs9r>-x4Wv~=R>;NJ4#wJJ6b~pj2-Vka1?kz zr7$Rr8jNc*?WnaoKKaz?I`ka@w)Q{_V=CTMyj?_CW0c~hYVBn?l8!`5G^?r-*jFXV@#f`TN6WVChAMt8l*vX&CO;-+zM}Jx1UE_XJu0Fu-kll>)zg zY0$_cdnfnOVmz7GcSz|04$7ZDuv0%e@@s|<6-6g3N!emJ+~>YWvPHgOA9yAoM^}T5 zw0f^%@kX;XI7IffE&R=%i zg+dt5pQv#hh`V@YRYJtbeJ83#tBXaBhwThmM5(@4zC2t=x?|iqxi&6vK%YRjcXy2d z0xiAX^+;+mym_EiaBY*%cLp{yvAZOKN%jDz3>l#+cYISV12(qW|eQtXdf#O<8<<}pQa&YA`SYbBTOTm>tmej zp&YkCDIiDf?MQ=-@HLsi>l(2uG88SF@3lB{^hyiXy1LD-09s3f4ebb~On?07KV`rb z!hdZ`bNMPU2(9)*9p9gbrX13bcO)2mYAEy1eiBb9bBx5AVZASMWO`LyaIyEc&u`HB z?EnQ+{juCSRZUs2`Vg7Q1}cNdlC@xtU(*N-m|Q2n@w9kUm1($XWdq+jqJv;&#c=jL zu#j(_knQ{Ra-Bh0^FvMHbLoXorbaYf7hk2JW!Kwsf1iE7So)PdZA8Sy zqfe2*DGjmK4g-77%w84u*%TQdV=hct-k|P-6=$#%O_XS26tPJTCu-tPCeZ9oR z#LaT!(VRBt<~gZaWG-BVWTK!dJJ=m91A1$_qiZTwYuBx(YG5A1{VuOvKu(Ia$Ip(s zIP<^JP+biyHLfy+lb4se^EYQc^kMs}L_79F?z$_{pIb_x!DOLZwR))fNsbr?<)p@w zBId`=DED74_9q46Hyev~O93&JUS}DSDHLrZDP64pIeF1enx;c?lE(^ckTTwVcc$1) zXO>Po`{*AzPr*DdLiM`yElhzdhYWG3>D#sLnWjN9&r9NmW4{%{rfA~L{D(Dq`Q0<= zL(zfhE?UK-(*%9M#}I!Dgt$!1-Omsozlam|s1N);V4r3Z%^VmjBA4^djNpaR{_q@N zCB0C+7mMt2f=<&(HI-aYbdFKw8}^*h(pvbNa@@t(JQGgneGE=qBCyGiueA2<2J2b zZS;J%ixdK$TJ^BYj3UR#Nn_dI%sToe{Toz&zxk)*t@0KHa9_GB7%DDG#Ic|HI4H%d zc>9m1Q8rpMP1OQ>$S^LsR~x7?!I1xl{Gc@wHYq@)_Y&YKm^{mw@D=LjWM^x?8p}%x zQbf>EF()>BX)ZZEGdcUqpQDY8(!P6g?U}6dXu)h69bNNX(HO%gn>_@=nF@wR{CO3< zo&URs;z%k)8ZBNyCv;+WHejz)oy*iw;C&qW>!p-l7`#f2=W!lWf`-g(te)7gHGJst zN=rF^2VfQoc66%?5}$xp9HTQWX>-|ixhr{z2|XviV&oRDHnJbCogd|6@&;%Y$~O;r zfT!YSMu1g}y7pYm2+nI8H+B&lb9Ng%z zyu=S$oYoi-iJ83)H$RU#hfPI={=7!E)v_F~thm=2xduFi2R!3$SMa4BHVwl~!Q`py zdusb1y;;Y$o;E?@x0JwfcL51Q4u}AY1+fPXEB>W;rwzTzGv_lv7`jO41cm)AyPBJX zWQTe=djC;n($nYVov0)$u$edhlDgBxq6=jY&x>cKV4Wz#QK#a+E9Tu-+_UkWohIq`6FK0+t@`KIznXyyIeXHp?9p`y7 zXqIqfXJgzv?ZscH!*M62G~3l_gv;4n(_XRDR!ygl&spjSlNNaLFS>s-wc@MZBWNO7 zkym=n%>FoYEwTenXs~)dmEXae{^JT90(ku3hy=#`!o&DV6ZIu(tay&+C^q+hl$u#z zY@UkZj{iACz(B7{n<+X2%66D}H=;jH<@Y>T!C`B?yyR~2hr+;lszpyW-}ILH;Bafu zM*hi@0b>!0yK4XOOZ69TJ`hZ!XzNITH*d(^JwsD#)56AXr}XfdFc<*nfc{Mte^~6_Fg~y;$z)1s0b%6$^biEEMCW1oye4$# zZWkQ^(axh6oT)sg`sFS3TR$6`6aM6EZBG9HRj2_0UGxW`8XpguxJq3>Ci%ZhgdXFw z5mlOG7o^rVsU)wyKSDcFB?OvBE)d^O2Hjn~oN4ja@=$Y1L#Mo-yPK&0yJAQnRdn>e z&gwIfUlm9^mT$&81=HT}Cefa8CV?h29GFutGDvjFm9#kHPtSQCPYsxU7c9;$aBXw< zVdT~ulKLGTM4iI@zN{_Om5ZPPkC3fLb@ZIlCSXJ%CwR>h7XIA(4s2LbnFE_1TVXGE zgZ@=<@^_5bPDFM``-4dWkyxZ-|A^b2PTuUq)yW!Ri5E(?Bu8B$5%yD6E#Z5f;~A}w zN78>#f7VC&-0;dI%Ks7E`b3lHKY&*|n2gC#uAKe5P5#F&swY1&!#HpMbwl`+G8SXWdq1K~6B(Az%~0yz(GwgS2sQHlb;dh0m~ATlu9; zjdFCO$a}og0_&T^!P613{qo8p9Ji7SWhjp&OU1m`!aU=dKzwsz0Lumj1xrwkJa)OV zZ>s57)7VeNq?9=xssrd(o(!e#_03~RzcNTbCU1`oqx#!dtCcY6KX`;86)^@5tF>lC zmUb)xeqHip<)+UXFLvIts@k+}l4G^J{?MqrUN@|UybzBy+GG+}EOX-JZCU}NY$r=P zy864~F@95&CSQ&^K^bGbfk`G+-s8;BYsJ~Ief!T@TIK4;B(+sn*x_8iEa*O5x-{ajAkJk?S`Yrf{(zs#tj5sHWZh9V|V_w zqkb}nK0ow=e)xX3`Jj0-42D~%nvps>U>1{Oz*7er$Na#?f;H!J@limVP^fsWCmkDm zd@ZfC5w*LZDs{rO1(c{w4QVGYC|NY9)xmyZsdP9HAobht!GDosd^KPi#5f}YVtzV# zFTsX-5XL^()mG*z;Yv0^`2Yg*yk>$zaL)@bNeQ{ zBFKa!LS1>b^YlZ9iXB$yheqnrotGwT!SAapekJ*MjhdZfsOITs;+31bRC1H;>qXQQ z#xCoekhTrXzWZOt0>R^cr$7D<1AkgRgwd+GHATs`ibUO}<#9k$T7N=hx1w?K(7rDY zUyS2Igf32!C#BfK=4)iJ6_LPT{7_dZf)5FSOzAu_fWyozVwbk`@o$^J_v$(Bz-owI zk(LY`baS)S*v&1=!oOw0g2!(3%P51Pb9K%nwbExqbu29ZyZ}H%V7%CAqJbBaYXgk& z@b*|XAH8#>Y^F77ab*eomj(a@U8$4j;~Oy~sB&rTZAgOQ)}h_$B~N}1ER;2FbbL+X z67y5E`llroEd?fVCRUSloV`f=ihJIK62`X9#4R=&^s=9j>AZ^9xT$m%)SE{Hz_hDc z+MXM{yVf2UT*1L3BNWkOf|7T_S~f$lk<(?A&W)vblk`!}r!N2yka&Mx1zZzfebTWb z*;dkSi3WQDVrx9nI)-T)U&(8<*vrB1Z^p1CgTb40*A!Oj#{y!zhMzd?b zR6?swP&`*zWlWBrdk|~$k+6w$u!pMLf|_RUC%Ye4{y=FM(1KAfK&1J}Sh zeu*&SQOoSu_j^F#xEVsSXS+8S(mMquZc)?!M&AzYdy<1N2>hLzAz3ZLml#Mb29i4F zNv8ABTaRp{MDcxf!zxtXf{l7ySBJ%21>dM%*QqCln9$mZ@4XmUD7ZM6RxE1sVrAvW zdtcWbf%Oh<9UJaKGkjP{zDPEzk+B)eqKKFKtDwEgUxt`clbRvu9Qtjcwc|lg?4Yj{6fB_^j7} z1B)Hb#d3MDtC#sVM8JmmkHuvj_I2p+8r$&>H^X#MH&U>rzB7bUG7@lnYPO%Ir)iJ| z><9;hm{mqfoi9pd)>haGw-lUgG*bR{rV9YfsF{^cY~nz3Yec|l=ezJ?5B-ZS{sHk2 zEV;*X@s;r4$VkXQ!1<2na!$ln+UzNtrjLjQxanBZpDnu8P1VL zQ`c$~4VukDcipmuZvdYd@tbu$`(uWw+6?!w{IDHgYxl!CBX~Fv!@%tC#Nc_uzWNV7 z=|ycs3rd@l8UkW~BSYa`Myov$%a|Go&vds2ddIkBf+?%{Uu)NZeIq!gam|BHo3Nx8 zCmR;YNws#meTO?-nQB29+WJd&Xa|So@tdH-TP%>k+q6*RBJC_C#B<3f4dVK7w~M>_ z5LdYae($235wSV>wDe56G+bNM@^7O8BYG5kDMk0Xqk7>IK9(r5p34Rc5L$jXzjJkPL>-IWZ{ zC<^5Tls&?z?wh1xG6iGCX~L9=My~ z#_LPi$zX(JD6O&Y6-x0fNbC)XsK(6}`mCdGR+gs?w&l$;JMQ|xFoiE%wzv*%^9Dge)(YYs>*~|AaHcneJvfyLUlfHoJ)P==EWu5O9LIUe% z{pqn|yf~1olW7d^{rkgTI>qtMp2}XviTeYL%Dj$FBr^{P+CyJmYxGeQeVrj!^lW4v zhw&qbr+TIC#}%njE)*yylT9a1}lF51flP^mF1am3$c5@3o znD@TB=9xWEd7c*3Frg9$Fsged1T!{O(m(+?8}>d?Lq-viX=sv4d8fsd*L!|SHV4V4A4@^UziyHB}MZg^5& z$Pv3}HF#)8photig)S&+V%1o%nBdZ$NWqq-zf(WxAgqDaBVf5%h>O2G=0G*>NPIZV z-#XyQ348t)00B?}G`3*N33_wk{A3d_^RXaN$63FFdH$>;Xr}L9B>;s>->%V6p7vfV zB@TudpZ`s9S{}?1X!8R@zl)R?Ta=Yfi}K>y{>2962smjXl zTG)DYyct(~uA$$9cj5I|!&0iP<9ESvlfLA;o_{J)Z0p4$?tkFtzm3lcvMx?BPM8dj zh0XJgO;OLhgnv$4b6ULP0m_QyCMRMp`4u%vc@M8hWwLV3bPY~&l~v9k`~>WcFF|cr zNHd!|3)-m|!v2cztLsx6#^fQEWbv3I@%vD`*u}h{`;#$zK2~HcRu>8?gOFNVu+E6iFLg)oAnFwMbz^#f3wWtz{GAGG~Ykg2lq6R544}!g4QE_qEhDFy> zq-HiD#m|=!VuHFR=5+LZFQ<1Y&ZI}gp=qaqP^x}K>KvMsKn=QG<_GQ<1k3Ux+3llv za03Yl1hLsL3JJ`RnhJa5;QizdWi)JCc-vXAI z-@<@0M%|hdh`cWE0Up1iG|rk-9jd8)(u{2K-qtVZ8_l zTG+B|pCot*5Wa`Jv5aELgqkPE$BrmQkGXJqhX(-xQox02=`cts+;P#S44RD){~3fClgIx{8&~J;3mye2Eeg5Or`IUGf;-(Mn2@T0B~3l zaB;4*)(KEvTn^29&!Ci)NHa5BN~zPWm`#+O@wLG4Sc`&jNl8hHe5#GcP04hG6E^L* z{9J(1IG5?OfrEt73p;dSF`Feim0(x7DF846K97H3hL}eIsvq8&;W6_vF5q-=d40Wm zd6^x{3lrb@#-Ct>WJOKQ&cj^4esTho}NoO-5Z4)IeQ);n=y~V-iUGHe~GbM z=&dnH;CB*E#N-PDlgEsRhAMtFVbS-vkVC0X>|dPB zUNFfU@4dz+^O2T}Me_E5d3`9>uVN^nUMMRCVULX0Y={!zJ#i^Xl%bMK=xHhoRr(}* zFL^ak*bwDXm?*C8{sg}5 zT|3s$=aW5f#&f~P2@N&_SCLQ|Vja+%PtMjWlcBp>fV8xe^}Ks(t4yD>b%p+?6e^12 z0biGC4A$quiUjikKObt7tk4t~lA%FW6mSU&;d`Np_LKS4%T#((@=dlLPa%`0hKv$k z?Mhy|%y2UUN(t}PPCmxY6{W}s8c2eADXY-t!X(mop{yHVx1p=+x3vz8K*~E~8De<& z(6&qZtuNKc%#PxnLb9ynwaj{&k3&O4y8#Egy8^p{E?#Vp*RRA}lBKu6}J^hQ(T|`^s?sM1?8dvoeF1oe`ApHHz}G>HvZZ)LM5xpYJ}o zpaL|MHkSd32rL&2`<`JjJm95V#4_gq!NL*n?t=NkAEyZgVL`7B^}lHh{Pso<#{jgK722A%!>Wcmvk1O_2#0u%G!Ef(QkK<-JARMCE@elm_FbA`&a}i zfB;>asIjF5*r5n=dZ9V+>Ew#Ef;B$QFPQLzFQ3_V%f zgH*IP_~vEuvDTW>XTgAQG#Q@7!7iG`k^#|;9(a%*6w2vW@0)Ocqk4l(H`C&u{^wm? z`2VcPKdbG|I1tTGwVrq)DjSKC-dDrQk6NZ!~o>PaIP}N z%0@F7B0V@0i5n?GW{OT)fUXB<@PnkHcvPTQVM&!E$><)Cg?B;>K+QMJ4%7h*eMAIm z9{Dt)^v>R9P0}R^jR_Kk1ysp#B+WcY`$<0G#PGI2$#4=A^#Ar6SoqO_-@C%;^dm## zdY3a@O13sW$09(l5A1Co5t6>5AXA{AO}HX2AxnU5GT<~F_V(#`{dDFwu7h^i^gjz_ ze9{y(s$C9T#V&T4_9FzYf4(m+8_z^^Jjjuds_0%|E`Y3waMzmv)#*tTK0uEPAKcl{ zG4LL``p47k&T-0t>1Yyb1sN6bom>1=uMa`(;XIEr!jxFH-U^>Z@nAl^(8ch3;w`1? z@Jf5JbvPZ0FPM3`VQ<303Qkz6RIS5+vfculSp=xS-*oWW9i5buWhR^s6SP#BHSig; zQ^8P9lhm1G1(tVgF`g`-khvp{1#zVB2uyqtQK&Zn%{O4LABnZ-7ujgN@CO!HY<7vI zjDoA$AB(|zB6TJJpm*=wzk*YD370wQGhVnOb)+=;)Wgvc2GF8lsvqIH46A)Hi+z-raWI`=WQEOaumq8XWPOKrkm3+?-1a}I3!wMe z|I-erk4dfu_JF4s08UICfElTt_7%R5X zc7ArUJzDNBXjpXu5U4>u8}&rCVA67C1db2*P=k3JD6D*5F{+OLuO|M&846Z@ zP~LG@AD>+T2(El8P?TD0*z#+&4F(|up<3GD4LogIUs(FRuFJg4B_6eLo53KUodWnJ zAvRPFD<#K)!eNJL_o8x@kVY>oZ7^rfHf?D_roWzmj`Rr53qvo%S^eF&g-*g!z!_Ht zn(}jv8-(KH!IWid9iK{ef2MxR*dUx{^_kz?ar*lUfBH9#HzAoxlS@Dfsdamleb-GH z_J$pXJKTg+vKmUTh%4#AWb$bnB=15kTNUf*LDIZ=CRN@ECcQjYXEVDWU!2Ll*60^A zcRTu?(tk=~-{J`jZ>FB>YCZwa$Y?&G8k!%-nH_QLXjqVbrKB9o z=ILU(l{0z0|F<@T9$9xy@xP8L%j7Ll-D6wtaRn-Np#5-u)+0qh_kZ!ZF|$kM}Q z1*xdwvIbJ@JH1sI=Lf|SywA6pF8I#quyGz@f^Kj_04Ne40EzDOi&0`tI|MBF{@B-i z(zg7u*l?Lq^L1JyPZs~fPA1TFfAi)Fw{Z(YoWwpHr~zi+$iIqxbKkHkI1b6tN-Mt{ zE!IYQdSc;g_}Gf;1CB68G50wjORT@z>eV}2$fBIf#*G330NED;i0zArxpZWA6tzyR z9UTxWK>{VEi5(#NY+>PB;EKaoA8erE^z@gjtj$0SfdtOX7%6hlOB$V3Vn3Sk(O2yX zfS+#K9e(8b>y1Ji{83g0ww*tWelB=P&j~dj9@3^YU9kW7R_a>w;4>!N{$t#C6bT&p zYDHT21DeeDLtzQQ`rn~BK&&a}9$kj|mp>~2<$ybClhn~lmnQ~x zC14xCJHJo-I}Z#&!l?V~SnS>9aLHObDR-hr60DR#*0eWd1X*{c1GVmmVz?zP&+ZFB zpHAn$u7Gowx#0;x@oKGr`4XmfnDUDV$?%9rCkAxkA%RvcbtFtpK6o~*t$Mt}Q@-1O ze(tgzC+`=O$NhrgmDR6*<(Cw9?j~*8`73GQJmS-Tcq+$r;Y^Z-eS*?8XPOcNCx1f_nEg zl=I~X-GogTqkbS;bjLGH;U+N_X7<6=s$(Ii${eAlk-ShavtgmT5^!wv1nFw|1Lrfp za{g8D;`ASSzIXw~5PG`0x~h%AB0vjWUMSw;;^L*4#cIw>%sl1!9OWe(DT0!zC*Twn z(8de(UDeFGtQ7&Gc%t%ctOx+kMyx=AcD4=p@AFUl9iXwg$A3H8*krNi6_6l6E_1+< zaE6laIlkblU9_!--AX8sF#zZjuz(sHGeH1P2@2k}fpraK0B3n};%&8)dVV&0!3d-; zMw|va%^;4k9cM8z)Okjfyf=VwTIk9f&nc%yztm|J8W9*NFAaFC@ijay#U=KI-%WTZd@ z^2t#hyoa5?-q=M>F7?m{Sb@bPVPKfkt>yPf6KTwS^Jfu=0;6@%u`-1h<_NKY2Qpo{S2D#kWfZVFc>CvDx zd+Nc!Juqeau8JOu%#;d_3fh@6; z7uvMlLqFng58h6PmLtoiqop*@`7m0OR7*X_#g>zePM|WK&W|v%$}ip4#^w+FHxDie z&-X6=-rGK2D+gc424Ik-;j4)Oe(5E*90*&G2w}r6_AVUEkp+{|@87?N1Y(Jnhah&l z^|)yjX@RRt>c#Wt&xiRNP2tO%n^J4d=0fE~L&*B&-01$J$->NQ>&rv$M_MRAa3w4Y zxU1QS7`NT^6v4omm{83JGtr1xC%`es^31WkU^1XhI!0op^@m0A+)a1{Jzi3Nn_AA#?wop);SNYK}ZT8bC?}oSPS<4Eai4aF)99pVJYM*M-n%^!|u+l;w zm>ky(+V$V!4p#v+&Y0DQbWxdNy|@pzufk-S=$z7@eRs}8SFs;1h&VkSqH85ugo3G( zt)RwPGGMzd-aNlfX0vjWnDv3M_z4@#R4~cvK;#cy$ft72N66F>+y2Sdk-!{ zUC@*&(#lQ*O*$YXE9}#Hv=czi3zxUVl+j){eBGqQ31AumR3fu`y6E5Uexkyxfjjh6Z zq`*4s5lA++i=OzA0)a_O8rA{q*Vr(x&Q0UAyR5Fr!6z;b?SW$pVAxzNb}?Irdto8^ zUgnRpF<$0#FWd(Z4@mDP#(KL5E##{CUr+s(6gI^XlB|AULx}bZ}yhoFK&sf!G7h7pd z&t@FPN=}y0Ux6D@A4BwGDpl}tcJnwPtCA_2=`P>}1(z*Exsh|0P#VH<`?A$Z1OgE!J$b{m?BM~Awih>ja;lGYhlIyk3&plLL8Heh+Sgsu&YSsz926me-5AP&!%g57H(iUX zMgF$vYw!M+c3$6J`KzNFF8P8u!h@-M;2Z_EUtH{%_UdHr*pjg9WCzZDjx%4_P1nA8 z+q}bsBn?+g#1vbp-#GMD1YT{RJiL6+j7dxPFsc!{&+l^T?>2zVZ@iCPX3*+Iw$IOj z^vu^nZH~L-M@s@193kmm0G6^Md%g36Vc)J;c{5lJ0%-G>2|2dTkbGA^9Q#rXKf2eQ zpJEjCBH(0-JxO_l<{8*19w&LsjxCf;13DqtC`%8bANKog%jyY{NF-LGWhZuk$`WYj zZa21`H0o5E5#+LWkPA--&d<;D$6{*6jXENXTKDc-*bh1=AnC5&i1MJtPzr z$As#pHI4z%0cmcI4>r?wVgCra2u$FUJ|CZnz>3ZL?}kQ3cC>ZZVDgt&EKR|2+iE@A z_ugHAHo`C@Tewx<|Fm&)1wjD>2i8v*$AFcNhM?k8*_NGnRVls=jH{liB1`K*!KnPV zW!U2{r_0|TgDK-r-0b;FZbq($+QxlU@Nah*;Xhha8m;+^l;6!v0XvWwp6iJ1b0X4< zrAP6%A{P;UJwuB|QUNQr?`YPiqWPXp{psfJLS7wprvCbxm$B-lp+Ef3M9^zCnR!;e z$=RU~*Qhiha8EPlDBBSy6L~=G%C5uNT22`G%<5bQQt}O{u;Z8QmuyyMU$!FPsq#L z3Bm1XNUE802$Zy^nyb=F8?$Ir9KI)QByC7q^`A8x zCmF9S=X?4I(a9Cp6wCFZ)%V+!lITFD@P3YeUhHa9rut?lB4n+xcZ6Z+&vTW5K7?#d zIT7Zr6z%l<;m?Z`hJNEp^N&JlFz5KsQsIb=_v%d5So+v)g*o!QfcX9;1Vu1&1z8tO zkOrx4GWpZgrRn{tv9^71a&>vZ@HZ#rLC>A=kQqMX`X+6Ci%ODaADrL0VhHlh6t*6dls<~-@(iS99L=~V=M$E#C zKtvigy3b>aV;`RuJGK+h&V3i2?E=W$O7kyQv5NsZ`_I&==2LCU+Od~DsGdy(;00o3 zkVofX^2ZKxSe8---3R!8K}2_;>O8`1G;su)xG1-I#Mp^E}@d?>=dy~>p|1YNAIxMQS`yU=sy1S%Hq`TuFA)%CrG*Z%C0@8?- z64D4#f|PWZbc1w@Fw))i-kWot@9*{U{NXi+VP@~O*S+Es!&+$$)ZM^qXgN)jc!z+G zn0404fO`UrNcM2GZI#A}ls=8rp#vKrF->e;8#@+40g9+-$;AFv75DE&6hCEYQwZq` z)Fd7M^up}d8Qch84-IgYX(D6E5k9Y7-e-6i$($GaDQlmLEvC0-9cd2dcU1mj*Q`_> zx$-xYIQ&<4&8wt)EBm_)R#Y~>*QNBaVPxXM;f^}6m4>)Qz;1xo*(KGy<{Z)!x70HV zt5hek^t^50TJ5^CoFJE5RFdc{&3udW=&p2)(7RZCkWQQ@tD8V}=zDX1sHJI0 z${<-Z4!%5b%CRA$#ek`!V_BJRV6llJteT!1-~_OCGSEJ)kVHL<3(mxO;G)^v4ZkZD__^h)KnO_StIm2FzBvd!GXCHcmx=< zH>f{MVoYc#i}}4Kp|{3f%D5KRY`gr^w*$ayN8*$;i4YFQN2)6c`^p*8b<_7KQ19Yk z&dg)epQ>^p8?aGkQ}-I2+!4rHoV4RR<0+jH6*A4`%UOSP^Qu z7%YgX15XUF@s{T%`CN;fSUp8RNJaqWgz zMsfSBtstACjz%%UQMOj_gx=RttLff{CS)WQbD|%=p*;$=dgW&6Y@yL-va=ZM**&{E zxJ(HHc9qo+E_#oxBrJtM)MNrRB=Vg2Q(uwj@e{ZY#$BS(C&pL}dMr7yws)wTbHiFl zC547LJ{nYWFBHlcpH!7%D5%(K)IIX8O^#8?=}Fs_NEDDv`|`<&AC+<+5w~P7&@?Uw ztAIG}FeznH{4TqKXRomiU=nV(;RW6)SW4{ytSojOcVn%z<;LX*12Ft#@r4rU?T)dk&ynBSD~t}FB@<@3*G6a5B{;Q^g!rQ;KcU!1mBq?K zI%WPwRQcP{H^xulb1>fTcw>dpBtIVrPEm1}Y)podqc*Hn@OAiG#UHO|@nO3WWi*5- zH#^#`KR4Ehaq^Ohy?>mBo{F7LQ&jUIh#f6i?KDRU!wrlO>I}%tI@$}@1&8VuxV}oL zp_!Cw>J4|Sms^Zd-5UgM)prEu7ne?4>hf6z@CbfaF1@%?9CkZA&1ke^_OyxAy73T) zVuUyG%%0?zlvl$OpQuT@QN5UR-6P3?o9_CiJc*>esmb9j*PZ*j%hGs#*bip zRJP*DDzmFzP0=Em4d^gG(qN5ODW238|Dd-p6TIZR1njOt3e@JUgYn!2 zo?{%6W=_s>9s&VE_JqD9_KOtuMdfeguNVUd#0ft=ensq{dGm`yoIw7g0e;=wv-29U zB<;a~EELLti;O~J(xCL|Y;i36hd)OzowP1P3laDvPnC$HombWna^e^Wd0?}ppVr=4 z#A3e}A6yPYs1mEZt-dDsb;@AGSkdJi0>=w z+=IiQQqvjgr}(F#e7BdcEq(@}%x={*@g>nk-A zve`ZYa{$zNV|ONlH|@Uk*e<2LWuYzjsR$f6mb&vkw;=`;6)TO`2#!Oel&AC(@up=h z?>(Of_RXUi{>?Zjk0#ka!i#vyn2oNwvP44hY0X$fLH|P=O4!2-WB!jJu6PkCv4_dJ zMfTWN6nQ_mV6}h(c|Lttj@9mR&^7L`8ZpP2dcCeT65xSr+Qww5d0z7;urS8PAD-eQ zkvIFIbJVh$*2coI+p$;yEg6Br@xfdEF$U-%)51Bo=iY@OurW`$WyNpSO5)`bePSdh zL5|MuLG7@@pIiyXqppeR{r1G>Ohftg%gN^^e!M(+zh4WXG!3@ng0j@jptj@#H`b19 zlXXg>{dGi1`F)ft=KtN=>PUEDII}yLMD!o~5KqI|E92{o?W}TZWH}q9ilB*17nwH3 zV;)VmUs@D9!OsfN1*=2b`zYR}vNIDY6Pt*AjwgtEVpf2W1)pj4+iK5UNkvtZp###FgUdbWu18$MY*Piw4)2_wi zhWBIW?iL)H(W+5*0Jb zD?E;mAD-4bNp5d`Qsq$aW3OS@p*u|;j7fb?iciJL%?_mWf(aPbX@zO^b-cDV4M0%1d9MR z@i;tt`KTiEUw#@JL9swiyn9;;sJ*_Hmg4&Q`o?)1@(EQ;sNAmqkGe}|(0aYkO=nDq zk%~pg`AI`#qMX168#9B7kwcU)nrE*Kd7{DT%Ymz2M<5Z#&RgaJhr;Y95VSGYe5ULf ztF{dn3n7M^0V!BbPyF+ZQHeGecz<;SmYa)bR_$7XgXZ(hu*KM_B4%0Ad)alp?n<9} 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 z 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�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¹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 literal 0 HcmV?d00001 diff --git a/src/bonsai/docs/reference/images/bonsai_customization2.png b/src/bonsai/docs/reference/images/bonsai_customization2.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb7610c70dc0f3f93932aa962b7e409ec896265 GIT binary patch literal 1723728 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